LU
dúvida

Onequip Rodando Duas Vezes

Por LuckOake, 24 de ago. de 2012 em Scripts

script
6
1.2k
LuckOakeL
24 de agosto de 2012 às 22:45

Olá pessoal. Eu recentemente fiz um sistema que usa onEquip, mas acontece que ele está rodando duas vezes. Se não entendeu, fiz um script de testes para melhor compreensão.

 

 

function onEquip(cid, item, slot)

print('Test')

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")

return true

end

 

function onDeEquip(cid, item, slot)

print('Test')

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")

return true

end

 

 

Ao equipar:

 

 

Player:

 

22:44 Test
22:44 Test

 

Console:

 

[24/08/2012 22:44:03] Test
[24/08/2012 22:44:03] Test

 

 

Ao desequipar:

 

 

Player:

 

22:44 Test

 

Console:

 

[24/08/2012 22:44:03] Test

 

 

Alguma solução para corrigir isso?

Editado Agosto 24 por LuckOake

brun123B
24 de agosto de 2012 às 23:11

Isso é um bug nas sources, mas dá pra bloquear que o evento aconteça 2x usando lua mesmo, teste:

 

 

local blockDoubleExecution = {}

function onEquip(cid, item, slot)

if blockDoubleExecution[cid] then
	blockDoubleExecution[cid] = nil
	return true
else
	blockDoubleExecution[cid] = true
end

print('Test')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")

return true
end

function onDeEquip(cid, item, slot)
print('Test')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")
return true
end

 

 

Eu to com muita preguiça de testar, então se esse não funcionar, talvez esse funcione:

 

 

local canTrigger = {}

function onEquip(cid, item, slot)

canTrigger[cid] = not canTrigger[cid]
if not canTrigger[cid] then return true end

print('Test')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")

return true
end

function onDeEquip(cid, item, slot)
print('Test')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Test")
return true
end

 

 

Mas sei lá, provável que os dois funcionem, testa ai pra mim

Editado Agosto 24 por brun123

LuckOakeL
24 de agosto de 2012 às 23:22

Certim, a primeira funcionou, então nem preciso testar a outra. Amanhã te dou REP +, hoje to sem.

 

E se possível, não tem como fazer uma função que sirva para todos os onEquip, para não ter que ficar colocando esse code?

Editado Agosto 24 por LuckOake

brun123B
24 de agosto de 2012 às 23:33

Infelizmente só se você tiver as sources...

LuckOakeL
24 de agosto de 2012 às 23:34

Bom, eu tenho. Se alguma alma generosa puder aparecer aqui pra dar uma help, né, que faça, por favor.

7 meses depois...
mapperproM
01 de março de 2013 às 02:06

Eu gostaria de saber se tem como eu direcionar um item no move events para algum script, e os seus atributos continuarem funcionando.

Exemplo:

eu tenho uma armor de knight, e gostaria que ela me desse skills ao ser usada:

então eu fui até o items.xml e atribui o skill de sword em +1 ao player que for usá-la.

No entanto, eu preciso adicionar essa armadura no moveevents.xml para que ela funcione, então:

 

 

<movevent type="Equip" itemid="id da armadura" slot="armor" level="8" event="function" value="onEquipItem"/>

<movevent type="DeEquip" itemid="12640" slot="armor" level="8" event="function" value="onDeEquipItem">

<vocation id="4"/>

<vocation id="8" showInDescription="0"/>

</movevent>

 

no entanto, eu preciso usar um script que vai permitir que apenas o comprador do item possa usá-lo, então:

 

<movevent type="Equip" itemid="id da armadura" slot="armor" level="8" event="script" value="scriptdocomprador.lua"/>

 

só que se eu fizer isso, ao usar a armadura, o player nao recebe o atributo do skill +1... Então minha dúvida é: como fazer para que eu consiga direcionar a tag para o script e, ao mesmo tempo, o item funcione atribuindo +1 de skill ao player?

 

P.S.: o script possui a function onEquip(cid, item, slot) e ainda assim não é atribuído o skill.

 

Por favor, aguardo respostas !!!!