Postado Abril 1, 2017 8 anos Alguem consegue colocar nesse scripts para bloquear que varios player no mesmo ip consegue pegar a recompença somente 1 char por ip? e possivel? actions Spoiler local i = { [1] = {id = 9980, c = 5}, [2] = {id = 9941, c = 5}, [3] = {id = 11249, c = 2}, [4] = {id = 6570, c = 1}, [5] = {id = 6571, c = 1} } local st = 7021 function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, st) <= 0 then a = math.random(1, #i) doSendMagicEffect(getPlayerPosition(cid), math.random(28,30)) doPlayerSendTextMessage(cid,22,"Você recebeu "..i[a].c.." " .. getItemNameById(i[a].id) .. ".") setPlayerStorageValue(cid, st, os.time() + 1 * 24 * 60 * 1000) for x=1, i[a].c do doPlayerAddItem(cid, i[a].id, 1) end else doPlayerSendCancel(cid, "Desculpe, você pode obter as recompensas apenas uma vez por dia.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end return true end Editado Abril 1, 2017 8 anos por mateusmoretti (veja o histórico de edições)
Postado Janeiro 24, 2018 7 anos Qual a versão do seu TFS? @mateusmoretti Execute esse código SQL no seu banco de dados: 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); Crie um arquivo chamado nazo-functions.lua em data/lib e adicione o seguinte conteúdo: -- 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 Agora, quando você tiver uma quest, adicione na verificação a função getIpQuestStatus na checagem junto, e quando finalizar a quest utilize o setIpQuestStatus, com os parâmetros cid e número da storage, porém a função só armazena que essa storage tem algo no banco de dados, ou seja, a quest já foi feita, você não armazena o valor da storage junto (como a função normal que geralmente adiciona "1" na storage). Exemplo de quest abaixo: -- by Nazo (tibiaking.com) config = { storage = 123123, -- storage da quest premio = {2160, 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 Explicação básica do motivo da função não possuir comparação na verificação e ficar como a seguir: if(getIpQuestStatus(cid, config.storage)) then Quando você faz um if, com uma função dentro sem comparações, ela continuará o bloco de comando apenas se o retorno da mesma for verdadeiro, assim quando você faz a quest, e usa o get, o get retorna falso, e isso cancela a condição e vai para o "else". Editado Janeiro 25, 2018 7 anos por Nazo (veja o histórico de edições) Programador PHP, Lua, Java, database administrator. "Nada é verdade, tudo é permitido." Requiescat in pace.
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.