Ir para conteúdo

Featured Replies

Postado

.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. 

 

Resolvido por Vodkart

Ir para solução
  • Respostas 11
  • Visualizações 1.8k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Query para executar   CREATE TABLE `ip_storages` ( `ip` int NOT NULL default 0, `key` int NOT NULL default 0, `value` varchar(255) NOT NULL default 0 )  

  • function onSay(cid, words, param) local storage, ip = 18000, getPlayerIp(cid) return doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, getIpStorageValue(ip, storage) - os.time() <= 0 and "Voce

  • MatteusDeli
    MatteusDeli

    @Breniinx talkactions/scripts dailyQuestIpTime.lua:   local storage = 18000 -- Manter essa storage igual a que esta no bau local ip = getPlayerIp(cid) function onSay(cid, words, param)

Postado
  • 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 por leandroneves
erro de digitação (veja o histórico de edições)

Postado

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 por MayconPhP
Correção do teleport (veja o histórico de edições)

Postado
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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo