Postado Julho 21, 2017 7 anos Olá, primeiramente estou usando: TFS 0.4 rev3777 Seguinte, implantei no meu servidor um sistema de aura, que nem lembro onde achei. Ele funciona perfeitamente, porém se o player esta com a aura ativa e desloga, apresenta esses erros no distro: Segue meu script: Spoiler -- CONFIGURAÇÕES lvlaura = 8445682 aurastr = 8445680 estr = 8445681 tempo = 1310 function efeitosAura(i,tm,cid) if getPlayerStorageValue(cid, lvlaura) == 1 then porcentagem = 25 -- chance de curar em cada volta da aura quantheal = 6 -- porcentagem do hp máximo que cada cura irá curar tipoaura = 12 -- efeito da aura /x efeitocura = 43 --efeito quando a cura chega ao player /z elseif getPlayerStorageValue(cid, lvlaura) == 2 then porcentagem = 30 -- chance de curar em cada volta da aura quantheal = 8 -- porcentagem do hp máximo que cada cura irá curar tipoaura = 28 -- efeito da aura /x efeitocura = 43 --efeito quando a cura chega ao player /z elseif getPlayerStorageValue(cid, lvlaura) == 3 then porcentagem = 35 -- chance de curar em cada volta da aura quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar tipoaura = 30 -- efeito da aura /x efeitocura = 39 --efeito quando a cura chega ao player /z elseif getPlayerStorageValue(cid, lvlaura) == 4 then porcentagem = 40 -- chance de curar em cada volta da aura quantheal = 12 -- porcentagem do hp máximo que cada cura irá curar tipoaura = 31 -- efeito da aura /x efeitocura = 38 --efeito quando a cura chega ao player /z end if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if i == 1 then local chances = math.random(1, 100) if(chances<=porcentagem and (getCreatureHealth(cid)<getCreatureMaxHealth(cid) or getCreatureMana(cid)<getCreatureMaxMana(cid))) then local hpheal = (getCreatureMaxHealth(cid)/100) * quantheal local mpheal = (getCreatureMaxMana(cid)/100) * quantheal doCreatureAddHealth(cid, hpheal) doCreatureAddMana(cid, mpheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if getPlayerStorageValue(cid, lvlaura) <= 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[AURA SYSTEM] Você não possui aura.") return true end if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end Obs: Já tentei fazer um creaturescript OnLogout usando stopEvent(efeitosAura) e não funcionou.
Postado Julho 21, 2017 7 anos Solução Os eventos não estão encontrando a criatura para executá-los , Basta checar se existe um player e retornar falso caso não. Exemplo: if not player then return false end Caso não saiba como funciona : addEvent(function(playerid) local player = Player(playerid) if not player then -- verifica player return false end end, cid) Faço a checagem dessa forma Editado Julho 21, 2017 7 anos por lazarocp (veja o histórico de edições)
Postado Julho 21, 2017 7 anos Autor edited--- Consegui resolver, tirei os getPlayerStorageValue(cid, aurastr)==2 que faziam a checagem no final do script, antes de iniciar o loop novamente, e botei essa checagem no inicio do event, mais ou menos dessa forma: function efeitosAura(i,tm,cid) if isPlayer(cid) and getPlayerStorageValue(cid, aurastr)==2 then FUNÇÃO DA FUNCTION return true end end Obrigado pela ajuda! =) Editado Julho 21, 2017 7 anos por luangop consegui (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.