Certo, vamos lá!
Em data/npcs, crie um arquivo .xml e cole isto nele:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="NomeDoNpc" script="data/npc/scripts/NomeDoArquivo.lua" walkinterval="0" floorchange="0">
<health now="100" max="100"/>
<look typeex="1448" corpse="3128"/>
</npc>
Edite o nome, o look type e o local onde ficará o script. Não edite o walkinterval.
Agora vá em data/npcs/scripts, crie um arquivo .lua e cole isto nele:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg)
local time = 3600*24 -- tempo entre uma cura e outra
if msg == "hi" then
if getCreatureCondition(cid, CONDITION_FIRE) or getCreatureCondition(cid, CONDITION_ENERGY) or getCreatureCondition(cid, CONDITION_POISON) then
if getPlayerStorageValue(cid, 38000) - os.time() <= 0 then
doCreatureAddHealth(cid, 65)
selfSay("You may get better now.", cid)
setPlayerStorageValue(cid, 38000, time + os.time())
else
selfSay("I already helped you today, now go away!", cid)
end
else
selfSay("Greetings tibian!", cid)
end
end
end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Pronto, o npc está feito!
Agora, pelo map editor, coloque um actionid nos tiles da ponte.
Feito isso, vá em data/movevents/scripts, crie um arquivo .lua e cole isto nele:
function onStepIn(cid, item, position, fromPosition)
local npc = {x=158, y=52, z=7, stackpos=253} -- posição do npc, não mude o stackpos
if isPlayer(cid) then
if getPlayerLevel(cid) == 1 then
doCreatureSay(getThingFromPos(npc).uid, "You can not continue.", 1)
doTeleportThing(cid, fromPosition)
end
end
return TRUE
end
Por último, vá em data/movevents, abra o arquivo movements.xml e cole esta tag nele:
<movevent type="StepIn" actionid="37804" event="script" value="NomeDoArquivo.lua"/>
Em actionid você coloca o mesmo actionid que colocou pelo mapeditor, e em value o nome do script que você colou o script acima.
É isso, testei aqui e funcionou, aguardando confirmação. Até.