Ir para conteúdo
  • 0

Invisibilidade com restrições


sowpert

Pergunta

Olá. Estou com uma dificuldade imensa em editar a magia Invisibility.

 

Eu gostaria que fosse necessário estar equipado com uma certa armadura para utilizar a spell. Eu consegui fazer isso aqui

 

 

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)

setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)


local condition = createConditionObject(CONDITION_INVISIBLE)

setConditionParam(condition, CONDITION_PARAM_TICKS, 200000)

setCombatCondition(combat, condition)


function onCastSpell(cid, var)

 

local armorId = 2660 -- id da armadura

 

if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).itemid ~= armorId then

doPlayerSendCancel(cid, "Para usar esta habilidade equipe uma Capa") return true or false

end

return doCombat(cid, combat, var)



end

 

 

 

O problema desse código é que caso eu não esteja equipado com a armadura, a magia gasta mana mesmo assim. Ou seja, a magia é usada, mas só depois é cancelada.

 

Eu pensei em editar alguma coisa na spells.xml, talvez botar alguma coisa do tipo needArmorId="2660", mas não sei como fazer isso. De qualquer forma, o código está aqui.

 

 


<instant group="support" spellid="45" name="Invisibility" words="utana vid" lvl="35" mana="1" aggressive="0" selftarget="1" cooldown="2000" groupcooldown="2000" needlearn="0" script="support/invisible.lua">
<vocation name="Sorcerer"/>
<vocation name="Druid"/> <vocation name="Paladin"/>
<vocation name="Royal Paladin"/> <vocation name="Master Sorcerer"/>
<vocation name="Elder Druid"/>
</instant>

 

 

 

Também gostaria de adicionar na spell um adicional: Enquanto o usuário estiver invisível, caso ele ataque há uma chance de X% da invisibilidade ser cancelada a cada ataque (Como que se ele fosse detectado).

 

Desde já agradeço pela atenção

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Tenta:

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)


local condition = createConditionObject(CONDITION_INVISIBLE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 200000)
setCombatCondition(combat, condition)


function onCastSpell(cid, var)

local armorId = 2660 -- id da armadura

if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).itemid ~= armorId then
doPlayerSendCancel(cid, "Para usar esta habilidade equipe uma Capa")
return false
end

doCombat(cid, combat, var)
end

 

Editado por Roksas
Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou! Muito obrigado happy.png Muito obrigado mesmo!

 

Será que você poderia me explicar em que estava errado?

 

Eu ainda não entendo muito bem o que você mudou

Link para o comentário
Compartilhar em outros sites

  • 0

Os returns estavam errados. Não sei explicar muito bem a lógica, mas fiz para retornar falso o valor caso não tenha o Item :)

Tópico movido!

 

 

Boa sorte.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...