Postado Fevereiro 21, 2021 4 anos .Qual servidor ou website você utiliza como base? OTX 8.6 Qual o motivo deste tópico? Queria ajuda pra fazer uma quest diaria aonde 1 player por IP conseguisse fazer a quest e depois de 24h a storage do player fosse deletada, pra que ele pudesse fazer novamente Está surgindo algum erro? Se sim coloque-o aqui. Citar Você tem o código disponível? Se tiver publique-o aqui: Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
Postado Fevereiro 21, 2021 4 anos Autor Eu fiz uma gambiarra, e esta usavel.. no MYSQL executa esse comando Citar CREATE TABLE player_ip_storage( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, player_id INT NOT NULL, ip CHAR(15) NOT NULL, storage INT NOT NULL ); ALTER TABLE player_ip_storage ADD CONSTRAINT FK_PLAYER_ID FOREIGN KEY (player_id) REFERENCES players(id); globalevents/scripts cria reset.lua e adiciona: (pra resetar a storage) Citar function onThink(interval, lastExecution, thinkInterval) local storage = sua storage da quest aqui for _, pid in ipairs(getPlayersOnline()) do setPlayerStorageValue(pid, storage, -1) -- reset storage from players online end db.executeQuery("DELETE FROM `player_storage` WHERE `key` = "..storage) -- reset player offline return true end globalevents/scripts cria resetip.lua e adiciona Citar function onThink(interval, lastExecution, thinkInterval) local storage = 13501 for _, pid in ipairs(getPlayersOnline()) do setPlayerStorageValue(pid, storage, -1) -- reset storage from players online end db.executeQuery("DELETE FROM `player_ip_storage` WHERE `storage` = "..storage) -- reset player offline return true end as TAG em globalevents.xml <globalevent name="reset" interval="10000" script="reset.lua"/> <globalevent name="resetip" interval="10000" script="resetip.lua"/> lembrando que esta em MILISEGUNDO 1 segundo = 1000 milesegundos 24h = 86400000 milesegundos depois actions/script e cria um .LUA de qualquer nome e cola isso dentro Citar -- by Nazo (tibiaking.com) config = { storage = 0000, -- storage da quest premio = {00000, 1} -- {itemid, quantia} } function onUse(cid, item, frompos, item2, toPosition) queststatus = getPlayerStorageValue(cid,config.storage) if(queststatus == -1 and getIpQuestStatus(cid, config.storage)) then -- note que eu só adicionei a função, nenhuma comparação, explicarei abaixo do código doPlayerSendTextMessage(cid,22,"Tome seu prêmio.") doPlayerAddItem(cid,config.premio[1],config.premio[2]) setPlayerStorageValue(cid,config.storage,1) setIpQuestStatus(cid,config.storage) -- função que adiciona a storage no banco de dados else doPlayerSendTextMessage(cid,22,"Você já fez esta quest.") end end Crie um arquivo chamado nazo-functions.lua em data/lib e adicione o seguinte conteúdo: Citar -- by Nazo (tibiaking.com) -- IP Storage System function getIpQuestStatus(cid, storage) storages = db.getResult("SELECT * FROM `player_ip_storage` WHERE `ip` = \"" .. doConvertIntegerToIp(getPlayerIp(cid)) .. "\" and `storage` = "..storage..";") if(storages:getID() ~= -1) then return false end return true end function setIpQuestStatus(cid, storage) db.executeQuery("INSERT INTO player_ip_storage(player_id, ip, storage) VALUES("..getPlayerGUID(cid)..",\""..doConvertIntegerToIp(getPlayerIp(cid)).."\","..storage..")") return true end Como eu utilizei varios scripts e fiz algumas adaptações não sei pra quem devo das os creditos Editado Fevereiro 21, 2021 4 anos por leandroneves erro de digitação (veja o histórico de edições)
Postado Fevereiro 23, 2021 4 anos Não precisa de uma gambiarra ? crie 1 arquivo em movements/scripts questip.lua local cfg = { interval = 24, -- Altere a quantidade de horas position = {x = 1000, y = 1000, z = 7} -- Local para onde o player será teleportado } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local storage, interval = getPlayerIp(cid), cfg.interval if (getGlobalStorageValue(storage) > os.time()) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Lamento mas você ja fez a quest com esse IP. Você poderá fazer novamente nas próximas 24 horas.") doTeleportThing(cid, fromPosition) return true end setGlobalStorageValue(storage, os.time() + (interval * 60 * 60)) doTeleportThing(cid, cfg.position) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você foi teleportado. Boa sorte!") return true end No movements.xml adicione a tag <movevent type="StepIn" actionid="17500" event="script" value="questip.lua"/> Editado Fevereiro 23, 2021 4 anos por MayconPhP Correção do teleport (veja o histórico de edições)
Postado Fevereiro 24, 2021 4 anos 19 horas atrás, MayconPhP disse: Não precisa de uma gambiarra ? crie 1 arquivo em movements/scripts questip.lua local cfg = { interval = 24, -- Altere a quantidade de horas position = {x = 1000, y = 1000, z = 7} -- Local para onde o player será teleportado } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local storage, interval = getPlayerIp(cid), cfg.interval if (getGlobalStorageValue(storage) > os.time()) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Lamento mas você ja fez a quest com esse IP. Você poderá fazer novamente nas próximas 24 horas.") doTeleportThing(cid, fromPosition) return true end setGlobalStorageValue(storage, os.time() + (interval * 60 * 60)) doTeleportThing(cid, cfg.position) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você foi teleportado. Boa sorte!") return true end No movements.xml adicione a tag <movevent type="StepIn" actionid="17500" event="script" value="questip.lua"/> tem como alterar para um bau? só pode usar o bau a cada 24hrs?
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.