É chato entrar num ot e ver a quest:
Mata o dragon e abra o baú.
então resolvi fazer um tutorial para vocês.
lembrando que:
Você não deve fazer uma quest assim exatamente como a minha, com o baú do lado da alavanca e etc..., fiz o mapa em menos de um minuto.
Isso serve como exemplo de actions, e realmente, da para fazer muita coisa com esse exemplo.
Resumindo:
Você puxa uma alavanca, então é atribuido um storage ID à você, quando vc pisa no tile especial, ele checa se vc ja puxou a alavanca, se não, ele move você 1 sqm para o lado oposto.
Vou por um esquema para vocês verem:
Fiz o script da alavanca o mais facil possivel de configurar:
salve como questcomplexa.lua
function onUse(cid, item, frompos, item2, topos) local summonpos = {x=578, y=432, z=7, stackpos=1} -- posição de onde vai sumonar local iditem = 1945, 1946 -- ids das alavancas local itemuid = 12345 -- uid da alavanca local creaturename = "Demon" -- monstro a ser sumonado local storageid = 12345 local storagestatus = getPlayerStorageValue(cid, storageid) if item.itemid == iditem and item.uid == itemuid and storagestatus == -1 then doSummonCreature(creaturename, summonpos) setPlayerStorageValue(cid,storageid,1) doPlayerSendTextMessage(cid,22,"You summoned a monster!") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"You already summoned the monster, go to the reward room.") end return 1 end
Única coisa que vc deve configurar são as primeiras linhas, onde tem 'local = blablabla'
No actions.xml
<action uniqueid="12345" script="questcomplexa.lua"/>
Agora o tile, que ve se puxou a alavanca, se não ele te empurra para traz.
Salve como quest_tile.lua
local position = getCreaturePosition(cid) function onStepIn(cid, item, position, fromPosition) if getPlayerLookDir(cid) == 0 then newdir = 2 elseif getPlayerLookDir(cid) == 1 then newdir = 3 elseif getPlayerLookDir(cid) == 2 then newdir = 0 else newdir = 1 end if item.uid == 12344 and getPlayerStorageValue(cid, 12345) == 1 then doPlayerSendTextMessage(cid,22,"You can get your reward!") else doMoveCreature(cid, newdir) doSendMagicEffect(position, 10) doPlayerSendTextMessage(cid,22,"You must pull the lever!") end end
No movements.xml:
<movevent event="StepIn" uniqueid="12344" script="quest_tile.lua"/>
Nele vc só edita a mensagem que manda, e botar o UID no mapa.
Sem fazer a quest vc não pode abrir o baú:
Sumonando o demon:
Você não pode puxar a alavanca novamente:
Espero que tenha ajudado, dúvidas é só postar.
Grato,
Tuco