Pelo que entendi a partir do momento que o player tiver X horas online ele pode ser teleportado quantas vezes quiser certo? Vamos lá!
Primeiro, vá em Data/Creaturescripts/Scripts e abra o arquivo login.lua e embaixo da função onLogin() coloque essa linha:
setPlayerStorageValue(cid, 777777, os.time())
Agora vá em Data/Npc e crie um arquivo XML chamado Teleporter.xml (ou o nome que achar melhor) e adicione o código dentro:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Telep" script="Teleporter.lua" walkinterval="4000" floorchange="0" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1421" head="114" body="119" legs="114" feet="114" corpse="2212"/>
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|! Would you like to be teleported? Say {help} or {ajuda} for more informations."/>
</parameters>
</npc>
Agora abra a pasta Scripts dentro da pasta NPC e crie um arquivo chamado Teleporter.lua e adicione o código dentro:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function GetHourFromSeconds(hour)
return 60 * 60 * hour
end
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if (not npcHandler:isFocused(cid)) then
return false
end
-- VARIÁVEIS --
msg = string.lower(msg)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local position = {x= 1500, y= 1500, z= 7} -- POSIÇÃO PARA ONDE SERÁ TELEPORTADO
local tempo_minimo = 1 -- QUANTIDADE DE HORAS QUE SERÁ NECESSÁRIO ESTAR ONLINE PARA SER TELEPORTADO
local local_name = 'Village' -- NOME DO LOCAL OU PARA ONDE SERÁ TELEPORTADO
local storage_time = 777777 -- STORAGE QUE ARMAZENA O TEMPO ONLINE DO PLAYER
----------------------------------- [ DIALOGO COM NPC] ---------------------------------
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') then
selfSay("If you want to teleport to {" .. local_name .. "} you need to be at least {" .. tempo_minimo .. "} hour(s) online. Are you online the enough time to be teleported?", cid)
talkState[talkUser] = 1
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
if (getPlayerStorageValue(cid, storage_time) + GetHourFromSeconds(tempo_minimo)) <= os.time() then
selfSay("Good journey!", cid)
doTeleportThing(cid, position)
else
selfSay("You aren't online enough time to be teleported", cid)
end
talkState[talkUser] = 0
return true
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
selfSay("Ok, goodbye!", cid)
talkState[talkUser] = 0
return true
else
selfSay("I didn't understand what you said", cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Agora vá na pasta Data/Globalevents/Scripts e crie um arquivo chamado ResetTeleportTime.lua e adicione o código dentro:
local storage = 777777 -- STORAGE QUE ARMAZENA O TEMPO ONLINE DO PLAYER
function onTimer()
for _, player in pairs(getPlayersOnline()) do
if getPlayerStorageValue(player, storage) > 0 then
setPlayerStorageValue(player, storage, 0)
end
end
return true
end
E por fim, volte na pasta Data/Globalevents e abra o arquivo globalevents.xml e adicione o seguinte código dentro:
<globalevent name="reset_teleport" time="00:00" event="script" value="ResetTeleportTime.lua"/>
Eu deixei todas as variáveis comentadas, só alterar os valores desejado nelas.
Teste e me avise se der algum problema.