math.randomseed(os.time())
dofile('data/lib/lib.lua')
ropeSpots = {
384, 418
}
keys = {
2086, 2087, 2088, 2089, 2090, 2091, 2092, 10032
}
openDoors = {
1211, 1214, 1233, 1236, 1251, 1254, 3546, 3537, 4915, 4918
}
closedDoors = {
1210, 1213, 1232, 1235, 1250, 1253, 3536, 3545, 4914, 4917
}
lockedDoors = {
1209, 1212, 1231, 1234, 1249, 1252, 3535, 3544, 4913, 4916
}
openExtraDoors = {
1540, 1542
}
closedExtraDoors = {
1539, 1541
}
openHouseDoors = {
1220, 1222, 1238, 1240, 3539, 3548, 5083, 5085
}
closedHouseDoors = {
1219, 1221, 1237, 1239, 3538, 3547, 5082, 5084
}
--[[ (Not currently used, but probably useful to keep up to date)
openQuestDoors = {
1224, 1226, 1242, 1244, 1256, 1258, 3543, 3552, 5106, 5115, 5124, 5133, 5289, 5291, 5746, 5749, 6203,
6205, 6260, 6262, 6899, 6908, 7041, 7050, 8552, 8554, 9176, 9178, 9278, 9280, 10279, 10281, 10476, 10485,
10783, 10792, 12098, 12105, 12194, 12203, 19848, 19857, 19988, 19997, 20281, 20290, 25163, 25165
}
]]--
closedQuestDoors = {
1223, 1225, 1241, 1243, 1255, 1257, 3542, 3551
}
--[[ (Not currently used, but probably useful to keep up to date)
openLevelDoors = {
1228, 1230, 1246, 1248, 1260, 1262, 3541, 3550, 5104, 5113, 5122, 5131, 5293, 5295, 6207, 6209, 6264,
6266, 6897, 6906, 7039, 7048, 8556, 8558, 9180, 9182, 9282, 9284, 10283, 10285, 10474, 10483, 10781,
10790, 12096, 12103, 12196, 12205, 19846, 19855, 19986, 19995, 20279, 20288
}
]]--
closedLevelDoors = {
1227, 1229, 1245, 1247, 1259, 1261, 3540, 3549
}
function getDistanceBetween(firstPosition, secondPosition)
local xDif = math.abs(firstPosition.x - secondPosition.x)
local yDif = math.abs(firstPosition.y - secondPosition.y)
local posDif = math.max(xDif, yDif)
if firstPosition.z ~= secondPosition.z then
posDif = posDif + 15
end
return posDif
end
function getFormattedWorldTime()
local worldTime = getWorldTime()
local hours = math.floor(worldTime / 60)
local minutes = worldTime % 60
if minutes < 10 then
minutes = '0' .. minutes
end
return hours .. ':' .. minutes
end
function getLootRandom()
return math.random(0, MAX_LOOTCHANCE) / configManager.getNumber(configKeys.RATE_LOOT)
end
table.contains = function(array, value)
for _, targetColumn in pairs(array) do
if targetColumn == value then
return true
end
end
return false
end
string.split = function(str, sep)
local res = {}
for v in str:gmatch("([^" .. sep .. "]+)") do
res[#res + 1] = v
end
return res
end
string.splitTrimmed = function(str, sep)
local res = {}
for v in str:gmatch("([^" .. sep .. "]+)") do
res[#res + 1] = v:trim()
end
return res
end
string.trim = function(str)
return str:match'^()%s*$' and '' or str:match'^%s*(.*%S)'
end
if not nextUseStaminaTime then
nextUseStaminaTime = {}
end
function getPlayerDatabaseInfo(name_or_guid)
local sql_where = ""
if type(name_or_guid) == 'string' then
sql_where = "WHERE `p`.`name`=" .. db.escapeString(name_or_guid) .. ""
elseif type(name_or_guid) == 'number' then
sql_where = "WHERE `p`.`id`='" .. name_or_guid .. "'"
else
return false
end
local sql_query = [[
SELECT
`p`.`id` as `guid`,
`p`.`name`,
CASE WHEN `po`.`player_id` IS NULL
THEN 0
ELSE 1
END AS `online`,
`p`.`group_id`,
`p`.`level`,
`p`.`experience`,
`p`.`vocation`,
`p`.`maglevel`,
`p`.`skill_fist`,
`p`.`skill_club`,
`p`.`skill_sword`,
`p`.`skill_axe`,
`p`.`skill_dist`,
`p`.`skill_shielding`,
`p`.`skill_fishing`,
`p`.`town_id`,
`p`.`balance`,
`gm`.`guild_id`,
`gm`.`nick`,
`g`.`name` AS `guild_name`,
CASE WHEN `p`.`id` = `g`.`ownerid`
THEN 1
ELSE 0
END AS `is_leader`,
`gr`.`name` AS `rank_name`,
`gr`.`level` AS `rank_level`,
`h`.`id` AS `house_id`,
`h`.`name` AS `house_name`,
`h`.`town_id` AS `house_town`
FROM `players` AS `p`
LEFT JOIN `players_online` AS `po`
ON `p`.`id` = `po`.`player_id`
LEFT JOIN `guild_membership` AS `gm`
ON `p`.`id` = `gm`.`player_id`
LEFT JOIN `guilds` AS `g`
ON `gm`.`guild_id` = `g`.`id`
LEFT JOIN `guild_ranks` AS `gr`
ON `gm`.`rank_id` = `gr`.`id`
LEFT JOIN `houses` AS `h`
ON `p`.`id` = `h`.`owner`
]] .. sql_where
local query = db.storeQuery(sql_query)
if not query then
return false
end
local info = {
["guid"] = result.getNumber(query, "guid"),
["name"] = result.getString(query, "name"),
["online"] = result.getNumber(query, "online"),
["group_id"] = result.getNumber(query, "group_id"),
["level"] = result.getNumber(query, "level"),
["experience"] = result.getNumber(query, "experience"),
["vocation"] = result.getNumber(query, "vocation"),
["maglevel"] = result.getNumber(query, "maglevel"),
["skill_fist"] = result.getNumber(query, "skill_fist"),
["skill_club"] = result.getNumber(query, "skill_club"),
["skill_sword"] = result.getNumber(query, "skill_sword"),
["skill_axe"] = result.getNumber(query, "skill_axe"),
["skill_dist"] = result.getNumber(query, "skill_dist"),
["skill_shielding"] = result.getNumber(query, "skill_shielding"),
["skill_fishing"] = result.getNumber(query, "skill_fishing"),
["town_id"] = result.getNumber(query, "town_id"),
["balance"] = result.getNumber(query, "balance"),
["guild_id"] = result.getNumber(query, "guild_id"),
["nick"] = result.getString(query, "nick"),
["guild_name"] = result.getString(query, "guild_name"),
["is_leader"] = result.getNumber(query, "is_leader"),
["rank_name"] = result.getString(query, "rank_name"),
["rank_level"] = result.getNumber(query, "rank_level"),
["house_id"] = result.getNumber(query, "house_id"),
["house_name"] = result.getString(query, "house_name"),
["house_town"] = result.getNumber(query, "house_town")
}
result.free(query)
return info
end