Ir para conteúdo
  • Cadastre-se

(Resolvido)Sistema de Dodge sem item


Ir para solução Resolvido por Tadelho,

Posts Recomendados

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%. 

Link para o post
Compartilhar em outros sites
  • 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 por Tadelho (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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?

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo