• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua check the manual that corresponds to your mysql server version for the right syntax to use near

Daniel Braga

New Member
Joined
Mar 17, 2018
Messages
53
Reaction score
1
1657728128549.png
LIB \/
--[[ Query to Execute

CREATE TABLE guild_storages (
guild_id int NOT NULL default 0,
key int NOT NULL default 0,
value varchar(255) NOT NULL default 0
);

-- ]]

--[[ Function List ]]--

function setGuildStorageValue(guild_id, key, value)
local func = db.executeQuery or db.query
local query = db.getResult("SELECT value FROM guild_storages WHERE key = "..key.." AND guild_id = "..guild_id)
if query:getID() == -1 then
return func("INSERT INTO guild_storages (guild_id, key, value) VALUES ("..guild_id..", "..key..", "..value..")")
end
return func("UPDATE guild_storages SET value = "..value.." WHERE key = "..key.." AND guild_id = "..guild_id)
end
function getGuildStorageValue(guild_id, key)
local ret = db.getResult("SELECT value FROM guild_storages WHERE guild_id = "..guild_id.." AND key = "..key)
if ret:getID() == -1 then
return -1
end
return ret:getDataInt("value") or ret:getDataString("value")
end
function getGuildMembers(id)
local players, query = {}, db.getResult("SELECT name FROM players WHERE rank_id IN (SELECT id FROM guild_ranks WHERE guild_id = " .. id .. ");")
if (query:getID() ~= -1) then
repeat
players[#players+1] = query:getDataString("name")
until not query:next()
query:free()
end
return players
end
function doAddGuildTaskReward(name, items, texto)
local parcel = doCreateItemEx(ITEM_PARCEL)
for _, i_i in ipairs(items) do
local item, amount = i_i[1],i_i[2]
if isItemStackable(item) or amount == 1 then
doAddContainerItem(parcel, item, amount)
else
for i = 1, amount do
doAddContainerItem(parcel, item, 1)
end
end
end
local carta = doAddContainerItem(parcel, 1952)
doItemSetAttribute(carta, "writer", "[+] Guild Task [+]")
doItemSetAttribute(carta, "text", texto)
doPlayerSendMailByName(name, parcel)
return true
end
function doRandomMobs(tab, bat)
local r = tab[math.random(1, #tab)]
if isInArray(bat, r) then
return doRandomMobs(tab, bat)
end
return r
end
function doMsgCastGuild(id, type, msg)
for _, cid in pairs(getPlayersOnline()) do
if getPlayerGuildId(cid) == id then
doPlayerSendTextMessage(cid, type, msg)
end
end
return true
end
function doDeleteAllTaskStorage()
local func = db.executeQuery or db.query
for i = 13000, 13050 do -- 50 task max
func("DELETE FROM guild_storages WHERE key == "..i) -- testar WHERE key > and < and
end
return true
end
function getAmountTaskFinished(guild_id)
dofile(getDataDir() .. 'guildtask.lua')
local finit, totalt = 0,0
for task, info in pairs(gtask) do
totalt = totalt +1
local ret = getGuildStorageValue(guild_id, info.storage) <= 0 and 0 or getGuildStorageValue(guild_id, info.storage)
if getGuildStorageValue(guild_id, info.storage) >= info.amount then
finit = finit + 1
end
end
return {finit, totalt}
end
function CloseGuildTaskEvent()
doDeleteAllTaskStorage() -- del storages guilds
setGlobalStorageValue(Guild_Task_Config.storages[1], 0)
setGlobalStorageValue(Guild_Task_Config.storages[2], 0)
ZerarPlayerStorageTaskEvent() -- del storage players
end
function ZerarPlayerStorageTaskEvent()
local func = db.executeQuery or db.query
for _, pid in ipairs(getPlayersOnline()) do
setPlayerStorageValue(pid, Guild_Task_Config.storages[3], -1) -- reset storage from players online
end
return func("DELETE FROM player_storage WHERE key = "..Guild_Task_Config.storages[3]) -- reset player offline
end
function getTopTaskFinished()
local list,t = db.getResult("SELECT id, name FROM guilds;"),{}
if(list:getID() ~= -1) then
repeat
local name, gid = list:getDataString("name"), list:getDataInt("id")
local amount = getAmountTaskFinished(gid)[1]
if amount > 0 then
t[#t+1] = {name, amount}
end
until not list:next()
list:free()
end
if #t > 1 then table.sort(t, function(a, b) return a[2] > b[2] end) end
return t
end
function isInRankTable(tab, id)
for _, ret in pairs(tab) do
if ret[1] == id then
return true
end
end
return false
end
function getRankGuildTaskKills(key)
local players, t = getPlayersOnline(),{}
for _, pid in ipairs(players) do
if getPlayerStorageValue(pid, key) > 0 then
t[#t+1] = {getPlayerGUID(pid), getPlayerStorageValue(pid, key)}
end
end
if Guild_Task_Config.reward_player_offline then
local query = db.getResult("SELECT player_id, value FROM player_storage WHERE key = "..key.." and value > 0 ORDER BY cast(value as INTEGER) DESC;")
if (query:getID() ~= -1) then
repeat
local playerid, amount = query:getDataInt("player_id"), query:getDataInt("value")
if not isInRankTable(t, playerid) then
t[#t+1] = {playerid, amount}
end
until not query:next()
end
end
if #t > 1 then table.sort(t, function(a, b) return a[2] > b[2] end) end
return t
end
function doCreateRandomGuildTask(tabble, amount_tasks, min_max_kills, storage)
local ret = {}
local n = amount_tasks
newFile = io.open('data/guildtask.lua', 'w+')
newFile:write('gtask = {')
repeat
local name = doRandomMobs(tabble, ret)
ret[#ret+1] = name
local number = math.random(min_max_kills[1], min_max_kills[2])
storage = storage + 1
newFile:write('\n["'..name:lower()..'"] = {storage = '..storage..', amount = '..number..'}'..(n == 1 and '}' or ','))
n = n-1
until n == 0
newFile:close()
end
function doUpdateGuildTaskRank(text)
file = io.open(getDataDir() .. 'guildtaskrank.txt','w+')
file:write(text)
file:close()
end
function GuildTaskShout(delay)
if delay > 1 then
doBroadcastMessage(string.format(Guild_Task_Config.messages.time, delay), MESSAGE_STATUS_WARNING)
elseif delay == 1 then
doBroadcastMessage(string.format(Guild_Task_Config.messages.time, delay), MESSAGE_STATUS_WARNING)
local creating_task = Guild_Task_Tab[getGlobalStorageValue(Guild_Task_Config.storages[1])]
if #creating_task.monsters >= creating_task.min_random_task then
doCreateRandomGuildTask(creating_task.monsters, creating_task.min_random_task, creating_task.min_max_monster_kill, 13000)
doUpdateGuildTaskRank("[Guild Task System]\n\nUma Nova Guild Task começou agora, o Rank será atualizado em instantes!")
else
setGlobalStorageValue(Guild_Task_Config.storages[1], 0)
print("[Guild Task System] ERROR - Tabela de monstro é menor que o numero de monstros para gerar")
end
elseif delay == 0 then
local creating_task = Guild_Task_Tab[getGlobalStorageValue(Guild_Task_Config.storages[1])]
if #creating_task.monsters >= creating_task.min_random_task then
setGlobalStorageValue(Guild_Task_Config.storages[2], os.time()+60*creating_task.minutes_to_finish)
doBroadcastMessage("Boa sorte! A "..GUILD_TASK_TYPES[getGlobalStorageValue(Guild_Task_Config.storages[1])].." task começou e vocês tem "..timeString(60*creating_task.minutes_to_finish).." para terminar! A lista de monstro está no comando !gtask.")
end
end
addEvent(GuildTaskShout, 60000, delay-1)
end
function doGuildMembersTaskReward(id)
local members, legivel = getGuildMembers(id), {}
for _, cid in pairs(members) do
local online = getPlayerByNameWildcard(cid)
if online then
if getPlayerStorageValue(online, Guild_Task_Config.storages[3]) >= Guild_Task_Config.min_kill_to_enable_reward then
legivel[#legivel+1] = cid
end
else
if Guild_Task_Config.reward_player_offline then
local getPlayer = getPlayerGUIDByName(cid)
local query = db.getResult("SELECT value FROM player_storage WHERE player_id = ".. getPlayer .." AND key = ".. Guild_Task_Config.storages[3])
if (query:getID() ~= -1) then
if query:getDataInt("value" )>= Guild_Task_Config.min_kill_to_enable_reward then
legivel[#legivel+1] = cid
end
end
end
end
end
if #legivel > 0 then
local reward = Guild_Task_Tab[getGlobalStorageValue(Guild_Task_Config.storages[1])].rewards
for _, present in pairs(legivel) do
doAddGuildTaskReward(present, reward, "[Guild Task System]\n\nParabéns! Sua Guild terminou todas as task primeiro e voce recebeu alguns presentes:\n"..getItemsFromList(reward)..".")
end
end
end
function getOfflinePlayerGuildId(name)
local result = db.getResult("SELECT guild_ranks.guild_id AS guildid FROM guild_ranks, guilds WHERE guild_ranks.id = (SELECT players.rank_id FROM players WHERE name LIKE '".. name .."') AND guild_ranks.guild_id = guilds.id LIMIT 1")
if result then
return result:getDataInt("guildid")
end
return 0
end
function getGuildNameById(id)
local result = db.getResult("SELECT name FROM guilds WHERE id = " .. id .. " LIMIT 1")
if result then
return result:getDataString("name")
end
return ""
end
function timeString(timeDiff)
local dateFormat = {
{"day", timeDiff / 60 / 60 / 24},
{"hour", timeDiff / 60 / 60 % 24},
{"minute", timeDiff / 60 % 60},
{"second", timeDiff % 60}
}
local out = {}
for k, t in ipairs(dateFormat) do
local v = math.floor(t[2])
if(v > 0) then
table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or ''))
end
end
local ret = table.concat(out)
if ret:len() < 16 and ret:find("second") then
local a, b = ret:find(" and ")
ret = ret:sub(b+1)
end

return ret
end
 
Back
Top