-
Total de itens
41 -
Registro em
-
Última visita
-
Dias Ganhos
1
Posts postados por Sugismundo
-
-
Então galera, como o título já diz, preciso de uma spell parecida com Sense que encontra jogadores mas funciona totalmente diferente.
Consiste em, o player ao falar a magia sai um effect nele ajustável e vai localizar todos os monstros/players/npcs que estão em um raio de 50x50 tiles e vai informar no chat para o player.
Se possível informar quando jogador a direção que ele está, mas concluindo a primeira parte já é o suficiente. Obrigado a quem tentar ajudar.
edit: acabei de ver que pedi no lugar errado, se puderem mover para mim agradeço.
-
ESTOU COM O SEGUINTE ERRO AO UTILIZAR QUALQUER SPELL QUE TENHA SHOOT EFFECTS (DISTANCE EFFECTS). TANTO EU QUANTO OS MONSTROS QUE USAM DA ESTE SEGUINTE ERRO NO TERMINAL:
ERROR: ProtocolGame parse message exception (56 bytes unread, last opcode is 0, prev opcode is 133): unhandled opcode 0JA ADICIONEI OS FEATURES TODOS NECESSÁRIOS E MESMO ASSIM CONTINUO COM ESTE PROBLEMA. É SO NESTA PARTE QUE DA ESSE ERRO, E QUANDO ALGUM MONSTRO USAR UMA SPELL COM DISTANCE A SPELL NÃO DA DANO NO PLAYER.
JA TAMBEM REINSTALEI O TFS 0.4 QUE JA VEM COM OS OPCODES E JA ADICIONEI NO CREATURE SCRIPT MAS NÃO FAÇO IDEIA DE COMO RESOLVER ISSO.
-
2 horas atrás, JulianoZN disse:
testa pra ver
Deu certinho mano, muito obrigado! Salvou demais!
-
Em 30/03/2022 em 09:12, denysmenetix disse:
Ola, estou com um servidor 8.60 com sprites de itens e outfits do 12.60, retro, gold outfit etc..
e no site disponibilizei um cliente proprio old 8.60 e o cliente OTC porém os players que jogam pelo cliente OTC não conseguem trocar de outfit, não chega nem abrir a caixa para poder ver os addons que o player tem ou trocar de cor etc, alguem sabe como resolver? ja baixei outros OTCs e acontece a mesma coisa.
Veja se a opção não está desabilitada, o meu tbm tava assim, entrei no config.lua do servidor e habilitei dai pegou normal
allowChangeOutfit
essa opção ai, deixa true- denysmenetix reagiu a isso
- 1
-
Olá por acaso alguém sabe como eu deixo a tela do OTClient sempre no tamanho máximo? Tipo, fiz o esquema de aumentar os tiles da tela do OTClient mas quando eu logo no jogo eu preciso apertar (CTRL+.) duas vezes para a tela ficar estendida, gostaria de deixar sempre estendida sem precisar apertar o botão para ficar dessa forma.
Creio que seja no mesmo lugar que mexe no zoom, até encontrei a opção currentViewMode para deixar sempre estendido mas até mesmo essa opção tem bordas pequenas nas laterais.
Mandei tbm o arquivo para caso queiram ver como tá.
-
Boa noite/dia/tarde, gostaria que alguém pudesse me ajudar fazendo uma spell que creio que vai ser util não so para mim mas para várias pessoas, não encontrei em nenhum lugar da internet essa spell por isso venho aqui fazer esse pedido.
Basicamente a spell consiste no seguinte: O player vai escolher um lado que ele irá soltar a spell olhando para ele, quando ele ativar ela, ele vai dar um dash(não teleport) para a direção que ele está olhando e irá percorrer uma distancia ajustável em uma velocidade ajustável com também uma largura ajustável.
Durante o percurso aonde ele passar vai sair um effect com a posição da sprite ajustável tbm e não irá atravessar paredes nem entrar em zonas safes.
Irá atravessar apenas monstros e players e quando fizer isso sairá um outro effect no player/monstro que foi atingido que tbm seja ajustável a sprite, e irá também dar um dano no alvo atravessado que esse dano como tudo antes também seja ajustável.
Bom essa é a spell normal, a partir de agora não é necessário mas se puder ser feito tbm eu agradeceria muito.
Quando o player usar essa spell, ele vai poder reconjurar ela um numero definido no script antes de entrar em cooldown.
Como disse antes essa parte não é necessária para o funcionamento da spell mas se por acaso quiser fazer vai ajudar muito.
Por enquanto é isso, obrigado a quem tentar me ajudar. -
Olá, por acaso alguém consegue fazer com que ao hitar o alvo que acontece depois de 7 milissegundos o target ser empurrado 1 sqm sendo ajustável a quantidade e podendo escolher quais alvos não serão afetados pelo empurrão.
Meu TFS é 0.4 e o server é 8.60
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_HITCOLOR, COLOR_YELLOW) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 32) function onGetFormulaValues(cid, level, maglevel) min = -((20) * (maglevel + level)) max = -((22) * (maglevel + level)) return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local function onCastSpell1(parameters) return isCreature(parameters.cid) and doCombat(parameters.cid, combat, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var} local waittime = 3 -- Tempo de exhaustion local storage = 200001 if exhaustion.check(cid, storage) then doPlayerSendCancel(cid, "Podera usar novamente dentro de 3 segundos.") doSendMagicEffect(getCreaturePosition(cid), 32) return false end exhaustion.set(cid, storage, waittime) local positionp = getPlayerPosition(cid) local target = getCreatureTarget(cid) local enemypos = getCreaturePosition(target) addEvent(onCastSpell1, 800, parameters) if target == isMonster or isCreature then addEvent(function() if not isCreature(cid) then return LUA_ERROR end doTeleportThing(cid, enemypos) end, 700) addEvent(doSendMagicEffect, 700, {x = enemypos.x+1, y = enemypos.y+1, z = enemypos.z}, 56) addEvent(doSendMagicEffect, 700, {x = positionp.x+2, y = positionp.y, z = positionp.z}, 60) addEvent(doSendMagicEffect, 0, {x = positionp.x, y = positionp.y, z = positionp.z}, 55) end return true end
-
-
2 minutos atrás, Yan18 disse:
O problema está em uma verificação if que sua skill ou é menor que 0 (acho difícil) ou é maior que 6, então ele só seta o MagicLevel, mas estar resetando para level 10 eu não entendi. Tem que ver se não tem algum bloco no seu login.lua que está fazendo isso. Antes de colocar esse sistema estava normal?
Sim estava normal
-
8 minutos atrás, Yan18 disse:
Sim, troque o código por esse:
-- SCRIPT DE TELETRANSPORTE FEITO POR YAN18 -- local message_color = MESSAGE_STATUS_CONSOLE_BLUE -- COR DA MENSAGEM local effect = 36 -- EFEITO DO TELETRANSPORTE local mana = 150 -- TANTO DE MANA QUE VAI GASTAR PARA TELEPORTAR. SE QUISER SEM CUSTO, COLOQUE O VALOR 0 local storage_time = 55454 -- STORAGE PARA VERIFICAR SE PODE USAR A SPELL local minutes = 5 -- MINUTOS PARA USAR A SPELL NOVAMENTE -- FUNÇÃO LOCAL PARA TELETRANSPORTAR -- local function Teleportation(cid, index) if not cid then return true end if not isInParty(cid) then return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.") end if index < 1 then return doPlayerSendTextMessage(cid, message_color, "There are not players available in your party for you teleport to him.") else local player = getPartyMembers(cid)[index] if getCreatureName(cid) ~= getCreatureName(player) then if string.lower(getCreatureName(player)) == string.lower(getCreatureName(player)) then if not getTileInfo(getThingPos(player)).house then doSendMagicEffect(getThingPos(cid), effect) doTeleportThing(cid, getThingPos(player)) doSendMagicEffect(getThingPos(cid), effect) doCreatureSay(cid, "TELEPORTATION!") doPlayerSendTextMessage(cid, message_color, "You had been teleportation to " .. getCreatureName(player) .. ".") return true end end end addEvent(Teleportation, 10, cid, index - 1) end end --------------------- CÓDIGO --------------------- function onCastSpell(cid, var) if not cid then return true elseif not isInParty(cid) then return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.") else if getPlayerStorageValue(cid, storage_time) <= os.time() then if getCreatureMana(cid) >= mana then Teleportation(cid, #getPartyMembers(cid)) setPlayerStorageValue(cid, storage_time, os.time() + (60 * minutes)) return true else return doPlayerSendTextMessage(cid, message_color, "You need to have " .. mana .. " mana to use this ability.") end else return doPlayerSendTextMessage(cid, message_color, "You need to wait " .. minutes .. " minutes to use this ability again.") end end end
Deu certinho, muito obrigado!
-
Em 04/04/2021 em 22:08, Yan18 disse:
Eu tinha pensado que o seu ot era um Tibia rs, mas como é Dragon Ball Tibia, faz sentido até.
Crie um arquivo na pasta Spells (se tiver uma subpasta de party adiciona dentro dela) chamado teleportation.lua e adiciona o código dentro:
-- SCRIPT DE TELETRANSPORTE FEITO POR YAN18 -- local message_color = MESSAGE_STATUS_CONSOLE_BLUE -- COR DA MENSAGEM local effect = 36 -- EFEITO DO TELETRANSPORTE local mana = 150 -- TANTO DE MANA QUE VAI GASTAR PARA TELEPORTAR. SE QUISER SEM CUSTO, COLOQUE O VALOR 0 -- FUNÇÃO LOCAL PARA TELETRANSPORTAR -- local function Teleportation(cid, index) if not cid then return true end if not isInParty(cid) then return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.") end if index < 1 then return doPlayerSendTextMessage(cid, message_color, "There are not players available in your party for you teleport to him.") else local player = getPartyMembers(cid)[index] if getCreatureName(cid) ~= getCreatureName(player) then if string.lower(getCreatureName(player)) == string.lower(getCreatureName(player)) then if not getTileInfo(getThingPos(player)).house then doSendMagicEffect(getThingPos(cid), effect) doTeleportThing(cid, getThingPos(player)) doSendMagicEffect(getThingPos(cid), effect) doCreatureSay(cid, "TELEPORTATION!") doPlayerSendTextMessage(cid, message_color, "You had been teleportation to " .. getCreatureName(player) .. ".") return true end end end addEvent(Teleportation, 10, cid, index - 1) end end --------------------- CÓDIGO --------------------- function onCastSpell(cid, var) if not cid then return true elseif not isInParty(cid) then return doPlayerSendTextMessage(cid, message_color, "You need to be in a party to teleport. But if you are in a party, please report this problem.") else if getCreatureMana(cid) >= mana then Teleportation(cid, #getPartyMembers(cid)) else return doPlayerSendTextMessage(cid, message_color, "You need to have " .. mana .. " mana to use this ability.") end end end
Agora abra o arquivo spells.xml e adicione a tag:
<instant name="Teletransporte" words="teleportation" lvl="1" mana="1" prem="0" aggressive="0" selftarget="1" exhaustion="0" needlearn="0" event="script" value="party/teleportation.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="5"/> </instant>
Na tag xml da spell você configura certinho os atributos como custo de mana (eu deixei no próprio script um custo, se quiser deixar 0 no xml e configurar por lá, também dá!) se precisa de premium e as vocations que pode usar. E não esqueça de verificar o diretório.
Eu testei aqui e funcionou! O teletransporte sempre vai para o último membro da lista de membros da party e se ele estiver dentro de uma house ele vai para o penúltimo e assim sucessivamente. O script vai fazer recursão até o primeiro membro da lista (tirando o próprio player que usa a spell) e se não encontrar nenhum disponível ele manda uma mensagem avisando.
Não sei se tem a sprite do efeito de teletransporte no seu client, mas se não tiver, uma opção é nos poketibias, que tem uma sprite da passiva Evasion que tem um efeito similar ao teletransporte, é bem legal!
Show de bola, funcionou certinho, tem como adcionar um cowndown de 5 min? com mensagem informando o tempo necessario?
-
6 minutos atrás, Yan18 disse:
Manda o link para mim dar uma olhada.
-
10 horas atrás, Yan18 disse:
Esse tutorial é aqui do fórum? Ele mexe na source?
Sim aqui do forum, nada de source apenas os codigos lua mesmo
-
Em 03/04/2021 em 00:50, Yan18 disse:
Tem algum motivo plausível para você querer como uma spell? Por que não pode ser por talkaction?
Sim, pois é uma habilidade do Goku, e quero que apareça na lista de spells dele. Não gosto de talkaction para esse tipo de coisa
-
6 minutos atrás, Yan18 disse:
Se tivesse explicado isso desde o começo, teria sido mais fácil rsrs. Pois, não precisaria de todos esses scripts. Do jeito que você quer é mais fácil do que eu pensei.
Eu pensei em falar para você excluir os scripts que tinha feito, mas deixa caso queira usar em outra coisa, como loteria, quests ou recompensa por exemplo.
Vá em Data/Talkactions/Scripts e crie o arquivo chamado add_points.lua e adicione o código:
local item_id = 2160 -- ID DOS POINTS local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM local level_acess = 4 -- ACESSO DO PLAYER (PLAYER - TUTOR - GM - CM - ADM), DEIXE 4 OU MAIS PARA STAFF E 6 PARA ADM function onSay(cid, words, param) local command = string.explode(param, ",") local name = string.lower(command[1]) -- SCRIPT SOMENTE PARA STAFF -- if getPlayerAccess(cid) < level_acess then return true end if param == nil or param == "" then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber os pontos.") elseif string.len(param) < 3 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber os pontos.") elseif tonumber(command[2]) == nil or tonumber(command[2]) <= 0 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar uma quantia válida de pontos.") else if #getPlayersOnline() > 1 then for index, player in pairs(getPlayersOnline()) do local player_name = string.lower(getCreatureName(player)) if name == player_name then local points = tonumber(command[2]) local message = "" if points > 1 then message = "Obrigado por ter donatado! Como recompensa, você recebeu " .. points .. " points." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT elseif points == 1 then message = "Obrigado por ter donatado! Como recompensa, você recebeu " .. points .. " point." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT end doPlayerAddItem(player, item_id, points) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message) -- VERIFICA SE VAI RECEBER EFEITO -- if effect then doSendMagicEffect(getThingPos(player), effect_id) end return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. command[1] .. " recebeu a recompensa.") end if index == #getPlayersOnline() and name ~= player_name then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. command[1] .. " não está online.") end end else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!") end end end
Agora abra o talkactions.xml e adicione a tag:
<talkaction words="!addpoints" acess="6" event="script" value="add_points.lua"/>
Continua via comando (talkaction), e para utilizar, funciona assim, você precisa digitar o comando !addpoints nome do player, quantidade de points:
!addpoints Administrador, 50
E todas as variáveis estão comentadas, e segue o mesmo padrão do script antigo, porém a mensagem do player está dentro do for, então se quiser mudar está lá. Só mudar o id do item na primeira variável e lembrando que coloquei restrição de acesso, ou seja, somente membros da staff pode usar, no caso deixei nível de acesso 4, então GM, CM e ADM conseguiram usar o comando, se quiser só ADM, mude para 6 a variável level_acess.
Eu testei aqui e está funcionando certinho, só não esqueça de comentar a tag xml da talkaction antiga se não for usar, pois esqueci de fazer verificação de acesso nela e qualquer player consegue usar. E fica seu critério excluir o script da box na pasta Actions também.
Certinho mano, obrigado agora deu certo!
-
Agora, Yan18 disse:
Entendi, então por exemplo, se o player donatar 20 reais ele ganha pontos, que no caso vem 20 moedas ou diamantes, é isso? Então é um item só que muda a quantidade apenas?
Exato.
-
Agora, Yan18 disse:
Você não entendeu, não estou falando da box, estou falando dos itens que o player tira ao clicar na box, igual eu fiz no script.
Então, os pontos são moedas que vão vir ao clicar na box, apenas 1 tipo de item. Igual golds ou diamantes de outros servers
-
1 minuto atrás, Yan18 disse:
Então, foi como te falei, eu te dei duas sugestões, uma é por box e outro por tabela.
Pensei em fazer assim, quando for usar a talkaction, você usa um parâmetro numérico que vão ser os pontos, e de acordo com o parâmetro, o player vai receber X quantidade de itens. Você quer que receba de forma aleatória ou por ordem que os itens ficam na tabela?
Vai ser apenas 1 item que são os pontos
-
2 horas atrás, Yan18 disse:
Agora entendi perfeitamente, mas assim, agora que entendi melhor, eu acho que isso pode ser problemático, porque se o cara donatar valores altos vai ter que dar itens de acordo com a quantidade, e chega uma hora que fica complicado isso. Recomendo tabelar isso.
Mas nesse caso, no script que eu fiz, você tem duas alternativas, tabelar por quantidade na tabela de itens no script da pasta Actions ou por parâmetro no comando talkaction que entrega a box colocar quantas box ele recebe, e se você quiser o segundo caso, recomendo colocar o item da box como agrupável, porque se não vai ocupar muito espaço na bag do player.
Mas nesse caso então o que iria mudar é a quantidade de box? ou seja o valor dos pontos ainda seria fixo por cada box, e para funcionar com qualquer valor de donate os pontos da box precisariam ser apenas 1 ou seja se o player donatar 100 reais eu teria que dar a ele 100 box para ele receber 100 pontos. Não teria como eu simplificar isso? Fazer uma box apenas que dê qualquer valor de pontos que eu definir ao entrega-la?
-
Em 31/03/2021 em 01:57, Yan18 disse:
No caso seria 10x box certo?
Tá vamos la, não sei se ja jogou algum ot server assim, mas normalmente quando voce donata voce recebe uma quantia de pontos ou coins de acordo com o valor que voce donatou. O que eu quero fazer e exatamente isso so que de maneira manual, Se eu pago 10 reais eu recebo 10 pontos, se eu pago 20 recebo 20 pontos, 30 recebo 30 e assim por diante.
O script que você me passou ele funciona de tal maneira, nele eu especifico o item que eu vou querer que o player receba e ao abrir ele vai receber esse item, mas oque estou com duvida é.
Como eu faria para dar a quantidade de pontos que o player donatou usando esse sistema de box que voce me passou, sendo que eu preciso especificar no script oque o player vai receber. E não tem como eu especificar algo quando esse algo pode variar de acordo com o player entende?
Tipo se eu especifico que o player vai donatar 25 reais e eu especifiquei que a box ela vai dar 10 pontos ao abrir, dessa forma faltaria 15 pontos para entregar ao player. mesmo que eu dê 2 box para o player ainda assim faltaria 5 pontos para entregar e não teria como dar outra box.A unica coisa que pensei seria adcionar esse mesmo script varias vezes com valores diferentes para cada script e trocar o talkaction, mas daria muito trabalho.
Por acaso não teria uma forma de mim especificar o item da box ao criar ela ingame? tipo!vipbox 13500, 100
Dai eu ja criaria com o item que eu quero com a quantidade de acordo com o valor que o player donatou, deu para entender? -
5 horas atrás, Yan18 disse:
Sobre a box não sumir foi erro meu, esqueci de remover. Sabia que estava esquecendo algo haha. Troque o código da pasta actions por esse:
-- TABELA COM O ID DOS ITENS E A QUANTIDADE -- local items = { {id = 2152, quantidade = 1000}, {id = 2160, quantidade = 100}, {id = 13250, quantidade = 1}, {id = 13255, quantidade = 5}, {id = 13260, quantidade = 10}, } local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS -------------------------------------------- CÓDIGO ------------------------------------------ function onUse(cid, item, fromPosition, itemEx, toPosition) if table_random then local random_item = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade) if items[random_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".") elseif items[random_item].quantidade == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".") else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.") end if effect then doSendMagicEffect(getThingPos(cid), effect_id) end doRemoveItem(item.uid, 1) return true else for i = 1, #items do doPlayerAddItem(cid, items[i].id, items[i].quantidade) if items[i].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".") elseif items[i].quantidade == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".") else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.") end -- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX -- if effect then doSendMagicEffect(getThingPos(cid), effect_id) end doRemoveItem(item.uid, 1) end return true end end
Sobre sua pergunta, de o player donatar mais, eu não entendi muito bem o que você quis dizer. No caso os pontos seria itens da recompensa ou você fala da quantidade de box?
Eu digo tipo assim, o player donatou 10 reais, ele ganha 10 pontos entendeu? caso ele donate um valor diferente eu teria que dar uma quantidade de pontos diferente
-
12 horas atrás, Yan18 disse:
Entendi, vamos lá!
Não sei se você já tem a sprite no seu cliente de uma box ou se tem algum item em mente para usar, mas estou te facilitando a vida já te mandando a sprite em PNG e OBD, só adicionar no cliente caso queira, peguei de um pokétibia que tenho aqui.
Tem algumas maneiras do player receber a box, pode ser de maneira mais direta ou automatizada. Pensei na direta, porque a automatizada que tive em mente teria que fazer mais coisas e não sei se no seu caso compensa, pois você parece querer ter esse controle de entregar para player, então vamos fazer por talkaction!
Primeiramente vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado player_vip_box_item.lua ou o nome que você quiser e adicione o código dentro:
local item_id = 13258 -- ID DO ITEM DA BOX local quantidade = 1 -- QUANTIDADE DE BOX QUE O PLAYER VAI RECEBER local message = "Obrigado por ter donatado! Como recompensa, você receberá uma box com um item surpresa." -- MENSAGEM QUE O PLAYER VAI RECEBER NO CHAT local effect = false -- SE QUISER COM EFEITO AO RECEBER O ITEM MUDE PARA TRUE local effect_id = 27 -- EFEITO DO ID AO RECEBER O ITEM function onSay(cid, words, param) local command = string.explode(param, ",") local name = string.lower(param) if param == nil or param == "" then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar o nome do player para receber o item vip.") elseif string.len(param) < 3 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa informar um nome válido do player para receber o item vip.") else if #getPlayersOnline() > 1 then for index, player in pairs(getPlayersOnline()) do local player_name = string.lower(getCreatureName(player)) if name == player_name then doPlayerAddItem(player, item_id, quantidade) doPlayerSendTextMessage(player, MESSAGE_STATUS_CONSOLE_BLUE, message) -- VERIFICA SE VAI RECEBER EFEITO -- if effect then doSendMagicEffect(getThingPos(player), effect_id) end return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O player " .. param .. " recebeu a recompensa.") end if index == #getPlayersOnline() and name ~= player_name then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O player " .. param .. " não está online.") end end else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não há jogadores online!") end end end
E agora volte um diretório na pasta de Talkactions e abra o arquivo talkactions.xml e adicione a tag:
<talkaction words="!vipitem" acess="6" event="script" value="player_vip_box_item.lua"/>
Agora vá em Data/Actions/Scripts e crie o arquivo vip_box_item.lua ou o nome que quiser e adicione o código dentro:
-- TABELA COM O ID DOS ITENS E A QUANTIDADE -- local items = { {id = 2152, quantidade = 1000}, {id = 2160, quantidade = 100}, {id = 13250, quantidade = 1}, {id = 13255, quantidade = 5}, {id = 13260, quantidade = 10}, } local effect = false -- COLOQUE TRUE SE QUER QUE O PLAYER RECEBA EFEITO AO ABRIR A BOX local effect_id = 30 -- ID DO EFEITO AO RECEBER A BOX local table_random = false -- SE QUISER QUE RECEBE ITENS ALEATÓRIOS MUDE PARA TRUE OU DEIXE FALSE PARA O PLAYER RECEBER TODOS OS ITENS -------------------------------------------- CÓDIGO ------------------------------------------ function onUse(cid, item, fromPosition, itemEx, toPosition) if table_random then local random_item = math.random(1, #items) -- PEGA UM ÍNDICE ALEATÓRIO DA TABELA PARA DAR O ITEM DE FORMA ALEATÓRIA doPlayerAddItem(cid, items[random_item].id, items[random_item].quantidade) if items[random_item].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[random_item].quantidade .. " " .. getItemNameById(items[random_item].id) .. ".") elseif items[random_item].quantidade == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[random_item].id) .. ".") else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.") end if effect then doSendMagicEffect(getThingPos(cid), effect_id) end return true else for i = 1, #items do doPlayerAddItem(cid, items[i].id, items[i].quantidade) if items[i].quantidade > 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. "x" .. items[i].quantidade .. " " .. getItemNameById(items[i].id) .. ".") elseif items[i].quantidade == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu " .. getItemNameById(items[i].id) .. ".") else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Houve um problema ao receber o item, por favor report o problema.") end -- SE ESTÁ TRUE RECEBE O EFEITO AO ABRIR A BOX -- if effect then doSendMagicEffect(getThingPos(cid), effect_id) end end return true end end
Por fim na pasta Actions volte um diretório e abra o arquivo actions.xml e adicione a tag:
<action itemid="XXXX" event="script" value="vip_box_item.lua"/> <!-- COLOQUE O ID DO ITEM ONDE ESTÁ XXXX -->
Onde está XXXX você coloca o id do item (até deixei comentado no fim da tag xml.
--------- EXPLICAÇÃO --------
O script vai funcionar da seguinte maneira: Você irá dar ao player a box via comando talkactions e só funciona se o player estiver online. A talkaction é:
!vipitem Nome
Então com o comando !vipitem mais o nome do player irá adicionar o item se ele estiver online. No código ele converte o nome do player para minúsculo, então se tiver players com nome iguais mais com o tamanho do caractere diferente, vai dar ruim e vai adicionar para os dois, para quem tiver online ou para nenhum.
Tem mensagens para todo tipo de situação, se o player está offline, se você digitar nome do player com menos de 3 caracteres ou se não digitar o nome.
Eu fiz variáveis booleana que se você quiser que tenha efeito ao player receber a box ou abrir só mudar para true no código a variável effect. E no arquivo da pasta actions tem a tabela com os itens, só colocar o id e a quantidade de cada item. Se quiser dar só um item é só deixar a tabela com um item. E a variável table_random é para caso sorteie um item aleatório quando o player abrir a box (clicar), e nesse caso ele vai receber um item só! Agora se quiser que receba todos da tabela, deixe a variável table_random como false, se quiser aleatório coloque true.
Eu deixei tudo comentado e está bem intuitivo, e eu testei somente o código do talkactions, pois o do actions é bem fácil e eu fiz de cabeça, mas analisei certinho e não é para dar problema.
Qualquer erro ou problema, me avise.
Então amigo o código funciona mas tive 2 problemas, as box não estão sumindo ao usar, tendo como usar infinitamente. Já tentei arrumar no item editor e no xml mas não resolveu. Segundo é, caso o player donate uma quantia X e eu vá dar a quantia que ele donatou vou precisar adicionar o mesmo script 2 vezes com nomes diferentes e alterar o valor? Por que pelo que vi só tem como eu adicionar uma quantia fixa, pelo comando não da para escolher a quantidade de pontos que o player vai receber ao abrir a box?
-
Em 26/03/2021 em 22:59, Yan18 disse:
Certo, e para os players comprarem vip estão comprando pelo site ou em contato direto com você?
Não tem vip, apenas vocações vips e alguns itens.
No caso as vocações vips são vendidas por npcs que usam a moeda vip que eu dou ao player quando ele donara
-
19 horas atrás, Yan18 disse:
Seu servidor tem shop ou site?
Tem site mas o Shop eu não utilizo. Nem sei se está funcionando
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.
Pedido Spell de dash com dano...
em Scripts
Postado
Ja tinha conseguido criar a spell mas essa tbm pode vir a calhar, vou arrumar os erros da spell no meu server e utilizar, obrigado por disponibilizar!