OT
pedido

Função Que Executa Ao Atacar.

Por othereality, 24 de ago. de 2012 em Scripts

10
1.3k
otherealityO
24 de agosto de 2012 às 19:32

Eu queria fazer uma magia que executasse quando o player da um hit no inimigo.

Por exemplo o exori mort, o player usa a magia e o próximo hit dele vai dar um dano extra igual ao dano que seria o exori mort.

É exatamente igual as outras magias mas ao envés de executar quando o player fala a magia ia ser no próximo ataque do player.

 

Será que é possível fazer isso?

Agradeço quem poder me ajudar.

VodkartV
24 de agosto de 2012 às 22:31

já tentou usar a função onAttack(cid, target) ?

notle2012N
24 de agosto de 2012 às 22:33

ou ja tento com

 

function onCombat(cid, target)

Editado Agosto 24 por notle2012

otherealityO
24 de agosto de 2012 às 23:24

eu tentei com onAttack(cid, target)

eu tentei fazer tipo uma passiva, sempre que o player desse um ataque dava um dano extra em holy, mas não deu mto certo, ele não espera atacar msm é só estar com o target no bixo que o efeito já vai.

 

e com function onCombat(cid, target) eu não tentei..

 

to tentando ajeitar a do onAttack, e vou tentar fazer com onCombat aqui agora.

VodkartV
25 de agosto de 2012 às 09:44

eu tentei fazer tipo uma passiva, sempre que o player desse um ataque dava um dano extra em holy, mas não deu mto certo, ele não espera atacar msm é só estar com o target no bixo que o efeito já vai.

 

então só usar 'onStatsChange' velho rs

otherealityO
25 de agosto de 2012 às 13:43

Da uma olhada eu levei anos pra fazer essa porcaria funcionar:

 

 

function onAttack(cid, target)
       local i = 1
       local damageMin = (getPlayerLevel(cid) * 2)
       local damageMax = (getPlayerLevel(cid) * 3)

       function doAttack()
               if (getPlayerStorageValue(cid, 23194) == 1) then
                       doTargetCombatHealth(cid, target, COMBAT_HOLYDAMAGE, -damageMin, -damageMax, CONST_ME_HOLYDAMAGE)
               end
               exhaustion.set(cid, 23195, 1)
       end

 if exhaustion.check(cid, 23195) == FALSE then
 addEvent(doAttack, 50, 1)
       end
       return true
end

 

"Eu fiz" esse creaturescript e lá na spell eu só adc ao player a storage, só que esse é infinito, não tem tempo de duração. O efeito para, quando o player usa uma outra magia que tira o storage e adc um que vai executar outro creaturescript que cura ao envés de dar um dano extra a cada hit.

 

Só que o efeito ta executando quando eu seleciono o target e não quando eu dou o hit mesmo.

 

Se falou pra usar "onStatsChange", mas eu não sei como ele funciona '-'

VodkartV
25 de agosto de 2012 às 13:55

+ou- isso

 

function onStatsChange(cid, attacker, type, combat, value)
local damageMin = (getPlayerLevel(cid) * 2)
local damageMax = (getPlayerLevel(cid) * 3)
if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS then    
if getPlayerStorageValue(cid, 23194) == 1 then
doTargetCombatHealth(cid, attacker, COMBAT_HOLYDAMAGE, -damageMin, -damageMax, CONST_ME_HOLYDAMAGE)
end
return true
end
return true
end

otherealityO
25 de agosto de 2012 às 14:26

Ahhh saquei! perfeito.

Obrigado.

 

EDIT:

 

Eu tentei usar exatamente como vc fez vodkart, mas não deu nenhum erro nem funcionou.. não sei o que pode ser.. :(

Editado Agosto 28 por OtheReality

otherealityO
28 de agosto de 2012 às 19:36

Consegui(com a ajuda do vodkart e do Eskylo). Pra quem estiver querendo ta ai:

 

 


function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
           if isPlayer(attacker) then
                   if getPlayerStorageValue(attacker, 23194) > 0 then
                             setPlayerStorageValue(attacker, 23194, 0)
                             local damageMin = (getPlayerLevel(attacker) * 2)
                             local damageMax = (getPlayerLevel(attacker) * 3)
                             doTargetCombatHealth(attacker, cid, COMBAT_HOLYDAMAGE, -damageMin, -damageMax, CONST_ME_HOLYDAMAGE)
                             setPlayerStorageValue(attacker, 23194, 1)
                   end
           end
   end
return 1
end

function onCombat(cid, target)
   if isPlayer(cid) then
       registerCreatureEvent(target, "healthLevel7")
   end
return 1
end

Editado Agosto 28 por OtheReality

VodkartV
28 de agosto de 2012 às 19:41

tinha que registra no onCombat, tinha esquecido de te avisar rsrsrsrs, desculpa.

 

Mas que bom que sua dúvida tenha sido retirada e obrigado por compartilhar seu script com os demais usuários

 

vlw