fearwar 0 Postado Agosto 10, 2021 Share Postado Agosto 10, 2021 (editado) Opa, Estou procurando script de NPC que teleport o player se tiver X horas online, e esse contador reseta todo dia as 00:00... Alguém tem algo parecido? Editado Agosto 10, 2021 por fearwar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Agosto 22, 2021 Share Postado Agosto 22, 2021 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. Vodkart e fearwar reagiu a isso 1 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 fearwar 0 Postado Agosto 24, 2021 Autor Share Postado Agosto 24, 2021 Em 22/08/2021 em 02:53, Yan Oliveira disse: 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. Olá, Funcionou perfeitamente! Para da uma aperfeiçoada na script teria como por level mínimo também? E referente a mensagem de que o player não tem tempo, teria como colocar quanto tempo ele tem online para o player saber? Exemplo: Você tem apenas 15 minutos e 50 segundos de tempo online até agora você precisa ter 8h online no dia para ter acesso frost. Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Agosto 25, 2021 Share Postado Agosto 25, 2021 (editado) 18 horas atrás, fearwar disse: Olá, Funcionou perfeitamente! Para da uma aperfeiçoada na script teria como por level mínimo também? E referente a mensagem de que o player não tem tempo, teria como colocar quanto tempo ele tem online para o player saber? Exemplo: Você tem apenas 15 minutos e 50 segundos de tempo online até agora você precisa ter 8h online no dia para ter acesso frost. Que bom que funcionou! Tem como sim! Troque o código do arquivo Teleporter.lua (arquivo lua do NPC) por esse: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function GetHourFromSeconds(hour) return 60 * 60 * hour end function GetTime(time_seconds) local out = {} local dateFormat = { {'hora', time_seconds / 60 / 60}, {'minuto', time_seconds / 60 % 60}, } for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if (v > -1) then table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s")) end end if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then return "segundos" end return table.concat(out) 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 = 8 -- 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 local level = 100 -- LEVEL MÍNIMO PARA TELEPORTAR local effect = true -- true PARA TER EFEITO E false SEM EFEITO AO TELEPORTAR local effect_id = 25 -- ID DO EFEITO AO TELEPORTAR ----------------------------------- [ 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 getPlayerLevel(cid) >= level then if (getPlayerStorageValue(cid, storage_time) + GetHourFromSeconds(tempo_minimo)) <= os.time() then selfSay("Good journey!", cid) doTeleportThing(cid, position) if effect then doSendMagicEffect(getThingPos(cid), effect_id) end else selfSay("Only is possible to teleport if you are online at least " .. tempo_minimo .. " hours. You are online " .. GetTime(getPlayerStorageValue(cid, storage_time)) .. ".", cid) end else selfSay("You need to be at least level " .. level .. " to teleport.", 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()) Na variável level você coloca o nível mínimo, na variável effect mude para false caso não queira efeito ao teleportar e na variável effect_id coloque o id do efeito que quer ao teleportar caso opte pelo efeito. Também precisa ajustar os valores das variáveis que você tinha colocado, no caso da posição e nome do lugar. De resto não precisa alterar mais nada, só colocar o tempo em horas que quer na variável tempo_minimo. Editado Agosto 25, 2021 por Yan Oliveira Vodkart e fearwar reagiu a isso 1 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 fearwar 0 Postado Agosto 25, 2021 Autor Share Postado Agosto 25, 2021 Uma dúvida, ao usar o contato de horas no login.lua, se caso o player deslogar e depois de um tempo logar ele começa a contar o tempo novamente? Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Agosto 25, 2021 Share Postado Agosto 25, 2021 28 minutos atrás, fearwar disse: Uma dúvida, ao usar o contato de horas no login.lua, se caso o player deslogar e depois de um tempo logar ele começa a contar o tempo novamente? Sim, tanto é que no Login.lua em baixo do onLogin() ele sempre recebe o tempo atual que ele logou pela função os.time(): setPlayerStorageValue(cid, 777777, os.time()) Como pode ver na linha acima, ele seta o tempo atual do login para a storage 777777. Então sempre que o cara logar, vai começar a contar a partir desse momento. Vodkart reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 fearwar 0 Postado Agosto 25, 2021 Autor Share Postado Agosto 25, 2021 (editado) 2 horas atrás, Yan Oliveira disse: Sim, tanto é que no Login.lua em baixo do onLogin() ele sempre recebe o tempo atual que ele logou pela função os.time(): setPlayerStorageValue(cid, 777777, os.time()) Como pode ver na linha acima, ele seta o tempo atual do login para a storage 777777. Então sempre que o cara logar, vai começar a contar a partir desse momento. Depende quanto tempo que o player desloga, quando ele for relogar ou morrer o "cid" dele não muda? Editado Agosto 25, 2021 por fearwar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Agosto 25, 2021 Share Postado Agosto 25, 2021 3 horas atrás, fearwar disse: Depende quanto tempo que o player desloga, quando ele for relogar ou morrer o "cid" dele não muda? Como o CID é um ponteiro, ele vai mudar sim quando o player relogar ou deslogar. Mas por que você precisa ou quer saber essa informação? Essa informação não terá impacto no script que fiz para você, só dependerá do player ficar online. Vodkart reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
0 fearwar 0 Postado Agosto 25, 2021 Autor Share Postado Agosto 25, 2021 3 minutos atrás, Yan Oliveira disse: Como o CID é um ponteiro, ele vai mudar sim quando o player relogar ou deslogar. Mas por que você precisa ou quer saber essa informação? Essa informação não terá impacto no script que fiz para você, só dependerá do player ficar online. Essa era minha dúvida, obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
0 Yan Oliveira 211 Postado Agosto 25, 2021 Share Postado Agosto 25, 2021 4 minutos atrás, fearwar disse: Essa era minha dúvida, obrigado! De nada! ? Vodkart reagiu a isso 1 Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
fearwar 0
Opa,
Estou procurando script de NPC que teleport o player se tiver X horas online, e esse contador reseta todo dia as 00:00...
Alguém tem algo parecido?
Editado por fearwarLink para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados