Postado Novembro 1, 2019 5 anos Bom Pessoal, Estou a procura de um sistema de Dodge que Funcione Sem ter que usar item, Bom como voces sabe ja existe um sistema de dodge porem o player tem que usar um item para que assim ele possa ter uma quantidade de dodger, porem eu quero ele sem ter que usar nem um item, no caso esse sistema funciona da seguinte forma: Todos os players do game tem 20% chance de defender o attack seja ele de players ou monstros. e ao defender o attack aparece uma mensagem escrita dodge. espero que alguem consiga me ajudar.. UP%.
Postado Novembro 3, 2019 5 anos Solução @Guilherme HP , vou te dar uma ideia adaptando um script que uso no meu servidor. Crie um creaturescript chamado "playerdodge.lua", por exemplo. (o nome você escolhe). Nele, vamos montar um script que, sempre que o jogador for receber um dano, fará uma verificação afim de anular ou não o dano recebido. O script ficaria mais ou menos como: local dodgechance = 20 -- chance em % do sistema dodge funcionar local multiplier = 0 -- valor pelo qual o dano será multiplicado function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isPlayer(attacker) or isCreature(attacker) then if dodgechance >= math.random (0, 100) then value = math.ceil(value*multiplier) doTargetCombatHealth(attacker, cid, combat, -value, -value, 255) doSendAnimatedText(getCreaturePos(cid), "Dodge", 19) return false end end end return true end Explicando o script: a variável "dodgechance" determinará em quantos % das vezes o golpe cairá na condição de ser anulado. Fiz em base centesimal (baseado em uma divisão por 100), mas isso pode ser mudado conforme o gosto do usuário. A variável "multiplier" dirá por quanto o dano que seria recebido será multiplicado, isto é, se deixarmos o valor em "1", o dano será recebido integralmente. Para o valor "2", receberíamos o dano em dobro. Como queremos anular o dano por completo, vamos multiplicar por "0". A seguir, a função onStatsChange fará a verificação sempre que houver uma alteração no status do personagem; no caso, sempre que ele perca vida, para que possamos anular o dano vindo de criaturas e jogadores e tenhamos o resultado que você pediu. Dentro dela temos a verificação matemática da chance, a atualização do dano e a aplicação do mesmo. Ao final, a mensagem também está configurada como "Dodge", mas você pode alterar se quiser. -- Feito isso, você deverá registrar esse creatuerscript em todos os players. Faremos da seguinte maneira: no creaturescripts.xml, adicione o evento para que seja reconhecido. <event type="statschange" name="playerdodge" event="script" value="playerdodge.lua"/> Obs: preencha em "value" o nome do arquivo.lua que você escolhe lá em cima. Agora basta registrar o evento nos jogadores. Há algumas formas de fazer isso, uma fácil é registrar todos os players assim que fizerem o login. Ainda na pasta creaturescripts/scripts, vá em login.lua e dentro da função onLogin(cid) adicione o código; registerCreatureEvent(cid, "playerdodge") Obs: o nome entre aspas deverá ser o mesmo nome que você colocou como valor de "name" no arquivo creaturescripts.xml. Pronto, está feito. Editado Novembro 3, 2019 5 anos por Tadelho (veja o histórico de edições)
Postado Novembro 3, 2019 5 anos Autor Perfeito mano.. obrigado!. 10 horas atrás, Tadelho disse: @Guilherme HP , vou te dar uma ideia adaptando um script que uso no meu servidor. Crie um creaturescript chamado "playerdodge.lua", por exemplo. (o nome você escolhe). Nele, vamos montar um script que, sempre que o jogador for receber um dano, fará uma verificação afim de anular ou não o dano recebido. O script ficaria mais ou menos como: local dodgechance = 20 -- chance em % do sistema dodge funcionar local multiplier = 0 -- valor pelo qual o dano será multiplicado function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isPlayer(attacker) or isCreature(attacker) then if dodgechance >= math.random (0, 100) then value = math.ceil(value*multiplier) doTargetCombatHealth(attacker, cid, combat, -value, -value, 255) doSendAnimatedText(getCreaturePos(cid), "Dodge", 19) return false end end end return true end Explicando o script: a variável "dodgechance" determinará em quantos % das vezes o golpe cairá na condição de ser anulado. Fiz em base centesimal (baseado em uma divisão por 100), mas isso pode ser mudado conforme o gosto do usuário. A variável "multiplier" dirá por quanto o dano que seria recebido será multiplicado, isto é, se deixarmos o valor em "1", o dano será recebido integralmente. Para o valor "2", receberíamos o dano em dobro. Como queremos anular o dano por completo, vamos multiplicar por "0". A seguir, a função onStatsChange fará a verificação sempre que houver uma alteração no status do personagem; no caso, sempre que ele perca vida, para que possamos anular o dano vindo de criaturas e jogadores e tenhamos o resultado que você pediu. Dentro dela temos a verificação matemática da chance, a atualização do dano e a aplicação do mesmo. Ao final, a mensagem também está configurada como "Dodge", mas você pode alterar se quiser. -- Feito isso, você deverá registrar esse creatuerscript em todos os players. Faremos da seguinte maneira: no creaturescripts.xml, adicione o evento para que seja reconhecido. <event type="statschange" name="playerdodge" event="script" value="playerdodge.lua"/> Obs: preencha em "value" o nome do arquivo.lua que você escolhe lá em cima. Agora basta registrar o evento nos jogadores. Há algumas formas de fazer isso, uma fácil é registrar todos os players assim que fizerem o login. Ainda na pasta creaturescripts/scripts, vá em login.lua e dentro da função onLogin(cid) adicione o código; registerCreatureEvent(cid, "playerdodge") Obs: o nome entre aspas deverá ser o mesmo nome que você colocou como valor de "name" no arquivo creaturescripts.xml. Pronto, está feito. conseguiria fazer esse msm sistema porem em critical?
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.