Ir para conteúdo
  • 0

onEquip/login erro


othereality

Pergunta

o script a seguir serve para que sempre que o player equipe uma sword "x" ele receba +2 do storage 23222 até que ele deEquipe o item.

 

function onEquip(cid, item, slot)
local forc = getPlayerStorageValue(cid, 23222)
setPlayerStorageValue(cid, 23222, forc + 1)
return true -- +2 de forc, porque o return true faz executar 2x o setStorage.
end

function onDeEquip(cid, item, slot)
local forc = getPlayerStorageValue(cid, 23222)
setPlayerStorageValue(cid, 23222, forc - 2)
return true -- no DeEquip o return true não executa 2x o serStorage, não tenho idéia do porque.
end

 

O problema do script é que se eu relogar com o item equipado eu ganho o storage mais uma vez. assim os player podem ficar relogando o ganhando milhões do storage 23222 o que não devia acontecer.

Será que alguém sabe me ajudar? agradeço desde já.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

oia.. soh sei q esse onEquip eh loko... o melhor a fazer seria diminuir essa storage em algum script onLogout.. ;x ja q quand ta logando ele ta aumentado ela denovo... ;x

Link para o comentário
Compartilhar em outros sites

  • 0

O brun123 tinha feito um fix uma vez, tá ai:

 

local blockDoubleExecution = {}

function onEquip(cid, item, slot)
if blockDoubleExecution[cid] then
blockDoubleExecution[cid] = nil
return true
else
blockDoubleExecution[cid] = true
end

local forc = getPlayerStorageValue(cid, 23222)
setPlayerStorageValue(cid, 23222, forc + 1)
return true
end

function onDeEquip(cid, item, slot)
local forc = getPlayerStorageValue(cid, 23222)
setPlayerStorageValue(cid, 23222, forc - 2)
return true
end

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

  • 0

@slicer

foi mal pelo double post, falou que tinha dado erro na postagem eu voltei e cliquei em postar de novo.

 

@luckoake

funciona perfeitamente.. vlw pela ajuda.. rep.

mas o meu maior problema mesmo é que ta adicionando o storage mais uma vez sempre que o player faz login.

 

vou explicar melhor:

 

"do modo que vc mandou o script quando o player equipa rapier ele ganha mais 1 do storage 23222 que é a força do OT

a rapier da +1 de força até que ela seja deEquipada daí ela retira esse +1 de força o dano das magias que dependem de força diminuem.

só que se o player estiver equipando a raipier e fizer login ele vai ganhar +1 de força, então se ele relogar 10x ele vai ganhar mais 10 de força e assim consecutivamente."

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

  • 0

@vodkart

eu pensei nisso, mas são vários itens que dão atributos...

tu tem como fazer uma tabela pra mim? que ponha o ID do item e os atributos que ele da, daí quando logar se tiver equipando o item automaticamente retira esses atributos..

 

Os atributos podem ser --------- storage

vitalidade -------------- 23221

força -------------- 23222

agilidade -------------- 23223

intelecto -------------- 23224

crit chance -------------- 23225

 

 

 

edit:

 

ps: to usando mto twitter, botando @ em tudo.. lol

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

  • 0
function onEquip(cid, item, slot)

   if os.time() - getPlayerLastLogin(cid) <= 1 then return true end

   local forc = getPlayerStorageValue(cid, 23222)
   setPlayerStorageValue(cid, 23222, forc + 1)

return true -- +2 de forc, porque o return true faz executar 2x o setStorage.
end

function onDeEquip(cid, item, slot)

   local forc = getPlayerStorageValue(cid, 23222)
   setPlayerStorageValue(cid, 23222, forc - 2)

return true -- no DeEquip o return true não executa 2x o serStorage, não tenho idéia do porque.
end

Link para o comentário
Compartilhar em outros sites

  • 0

mt ilogico td isso o.O

 

tenta sei la

 

 

function onEquip(cid, item, slot)

local forc = getPlayerStorageValue(cid, 23222)

 

return setPlayerStorageValue(cid, 23222, forc + 1)

 

end

 

ou.. tenta retornar false tb, pode ser q dê, pq o false era p impedir de equipar, mas não impede nada, entao tenta tb

 

e tipo vê se nao tem 2 tags do msm item no items.xml, pq as vezes ja tinha uma tag do item la ai vc pois outra

 

... explica pra mim os itens/ids q monto uma tabela pra vc p remover skill qnd o player logar

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

  • 0

acabei de testar aqui, o onEquip é lançado antes de atualizar a última data que o player fez login, então a função getPlayerLastLogin retorna a última vez que o player fez login (antes do login que está sendo feito no momento), então tá aqui a solução do teu problema:

 

function onEquip(cid, item, slot)

   if getPlayerSlotItem(cid, slot).uid == item.uid then
    return true
   end

   local forc = getPlayerStorageValue(cid, 23222)
   setPlayerStorageValue(cid, 23222, forc + 2)

return true
end

function onDeEquip(cid, item, slot)

   local forc = getPlayerStorageValue(cid, 23222)
   setPlayerStorageValue(cid, 23222, forc - 2)

return true
end

 

dessa forma o onEquip vai ser executado apenas uma vez, então já coloquei pra aumentar o storage em 2

Link para o comentário
Compartilhar em outros sites

  • 0

@eskylo

por false eu já tinha tentado antes de postar.. mas não adiantou..

 

 

@slicer

não é nada no login nem em outro script onLogin porque só ganho o storage se tiver com o item equipado.

 

 

@brun123

Funcionou direitinho. vlw (:

ps: amanhã te dou rep.

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

×
×
  • Criar Novo...