SO
pedido

Invisibilidade com restrições

Por sowpert, 21 de abr. de 2013 em Scripts

invisibilidade camuflar
script
7
1.2k
sowpertS
21 de abril de 2013 às 12:48

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

RoksasR
21 de abril de 2013 às 12:56

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 Abril 21 por Roksas

sowpertS
21 de abril de 2013 às 13:05

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

RoksasR
21 de abril de 2013 às 13:09

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.

sowpertS
22 de abril de 2013 às 14:12

Há alguma possibilidade de adicionar um script caso eu desequipe o item, a invisibilidade seja cancelada?

RoksasR
22 de abril de 2013 às 14:28

Não está assim não?

sowpertS
22 de abril de 2013 às 18:32

Não. Eu acho que precisaria de mais um script "Onunequip". Não sei huh.png