OT
dúvida

onEquip/login erro

Por othereality, 19 de jan. de 2013 em Scripts

resolvido
script
13
1.8k
otherealityO
19 de janeiro de 2013 às 20:34

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á.

SlicerS
19 de janeiro de 2013 às 20:38

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

LuckOakeL
19 de janeiro de 2013 às 20:38

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 Janeiro 19 por LuckOake

otherealityO
19 de janeiro de 2013 às 20:41

@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 Janeiro 19 por OtheReality

VodkartV
19 de janeiro de 2013 às 20:47

uma outra forma de se fazer é o seguinte, ao logar checa se o jogador ta usando essa armor, se estiver, diminui uma storage

otherealityO
19 de janeiro de 2013 às 20:56

@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 Janeiro 19 por OtheReality

brun123B
19 de janeiro de 2013 às 23:14
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

otherealityO
20 de janeiro de 2013 às 00:39

não deu certo :/

continua adicionando mais 1 do storage sempre que loga.

 

detalhe importante: apesar do item adicionar +2 quando equipado, ele adiciona só mais 1 quando loga.

EskyloE
20 de janeiro de 2013 às 02:49

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 Janeiro 20 por Eskylo

SlicerS
20 de janeiro de 2013 às 10:25

n tem nd no login.lua dando essa storage n? ;x ta muito estranhu isso kk

brun123B
20 de janeiro de 2013 às 12:05

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

otherealityO
20 de janeiro de 2013 às 17:29

@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 Janeiro 20 por OtheReality

LuckOakeL
20 de janeiro de 2013 às 18:23

Tópico movido para a seção de dúvidas e pedidos resolvidos.