IV

Error Tile que regenera Mana/Health

Por ivonebruno01, 14 de nov. de 2019 em Scripts

7
1.1k
14 de novembro de 2019 às 01:24
Estou com problema nesse script. Não da error no console mas, se eu ficar saindo e entrando no tile, começa a curar rápido.

 

     local storage = 11131
      local _soul = 3 -- Pontos que irá receber
      local seg = 2 -- intervalo de tempo
      local efecto = 0 -- efeito

      local evento = {}
    function Soul(cid)
        if isPlayer(cid) then
            if getPlayerStorageValue(cid, storage) == 1 then
                doSendMagicEffect(getThingPos(cid), efecto)
                doPlayerAddSoul(cid,_soul)
                evento = addEvent(Soul, 1000*seg, cid)
                if getPlayerStorageValue(cid, storage) < 0 or getPlayerStorageValue(cid, storage) == nil then
     stopEvent(evento)
                end

            end
        end
    end

    function onStepIn(cid, item, pos)
        if isPlayer(cid) then
     setPlayerStorageValue(cid, storage, 1)
            Soul(cid)
        end

      return true
    end

    function onStepOut(cid, item, pos)
        if getPlayerStorageValue(cid, storage) == 1 then
            setPlayerStorageValue(cid, storage)
            stopEvent(evento)
        end

      return true
    end

Editado Novembro 14 por ivonebruno01

Kuro o ShinigaK
15 de novembro de 2019 às 15:35

Toda vez que o player pisa no Tile o evento de cura é chamado, e toda vez que tu sai ele para, se ficar pisando toda hora vai healar rapido mesmo porque sempre chama o evento quando pisa, tenta assim :

 

local config = {
storageum = 11155,
_soul = 3,
seg = 2,
effect = 0,
evento = nil
}

function Soul(cid)
if isPlayer(cid) then
	doSendMagicEffect(getThingPos(cid), config.effect)
	doPlayerAddSoul(cid, config._soul)
	config.evento = addEvent(Soul, 1000*config.seg, cid)
	doSendAnimatedText(getCreaturePosition(cid), "HEALTH", 170)
end
end
	
	

function onStepIn(cid, item, pos, topos)
 if isPlayer(cid) and getPlayerStorageValue(cid, config.storageum) < os.time() then
	setPlayerStorageValue(cid, config.storageum, os.time() + config.seg*10)
	Soul(cid)
 else
	doSendMagicEffect(getThingPos(cid), 2)
	doPlayerSendTextMessage(cid, 22, "Voce nao pode retornar agora, espere por 20 segundos!")
	doTeleportThing(cid, topos)
end
return true
 end
 
function onStepOut(cid, item, pos)
stopEvent(config.evento)
doSendAnimatedText(getCreaturePosition(cid), "STOP", 180)
end

Tem que adicionar as tag StepIn e StepOut no movements.xml

<movevent type="StepIn" actionid="action_id_tile" event="script" value="arquivolua.lua"/>
<movevent type="StepOut" actionid="action_id_tile" event="script" value="arquivolua.lua"/>

 

Editado Novembro 15 por Kuro o Shiniga

15 de novembro de 2019 às 16:56

Não deu muito certo, quando acabam os 20s e volto pro tile, começa a curar rapido.

 

Acho que esse script aqui é melhor pra resolver isso de tile"moviments", esse é por coordenadas"creaturescripts", mas tem um problema nele, não ta curando.

Sabe oque pode ser?

 

function onThink(cid, interval)
--if(interval == 1000) then
local pos = getCraturePosition(cid) 
if (x=1305, y=1418, z=7), (x=1320, y=1418, z=7) then
    if(isPlayerGhost(cid)) then
        return true
    end

if (isPlayer(cid)) then
doCreatureAddMana(cid,300)
doCreatureAddHealth(cid,300)
end
end
return true
end
 

Kuro o ShinigaK
15 de novembro de 2019 às 18:36

Você adicionou a tag de StepOut no movements.xml ?

Não teria porque healar rapadio, o player pode esperar os 20s em cima do tile, e sair e pisar de novo, mas apos ele sair ele para o evento, e quando pisa começa tudo de novo

 

<movevent type="StepOut" actionid="action_id_tile" event="script" value="arquivolua.lua"/>

Editado Novembro 15 por Kuro o Shiniga

15 de novembro de 2019 às 18:44

No caso, seu eu quiser fazer isso em uma area, terei que colocar ActionId em todos os tile. Por isso que eu queria um de coordenadas, para faciltar

 

Kuro o ShinigaK
15 de novembro de 2019 às 22:58

Você quer fazer um sistema que heala apenas em certa poss ?

15 de novembro de 2019 às 23:34

Não é bem uma posição, em uma area, tipo 5x5