local quests = {
["vipquest"] = {
min_level = 500,
enter_pos = {x = 1285, y = 191, z = 7},
area = {fromPos = {x = 1263, y = 245, z = 7}, toPos = {x = 1525, y = 143, z = 7}},
time_to_finish = {15, "min"},
time_to_make_again = {15, "min"}
-- },
-- ["dragon"] = {
-- min_level = 10,
-- enter_pos = {x = 1, y = 1, z = 1},
-- area = {fromPos = {x = 1, y = 1, z = 1}, toPos = {x = 1, y = 1, z = 1}},
-- time_to_finish = {10, "min"},
-- time_to_make_again = {1, "hour"}
}
}
local time_storage = 87871 -- só modifique se necessário
function onSay(cid, words, param, channel)
local param, p, check = param:lower(), getPlayerPosition(cid), false
local npos = {x = 200, y = 200, z = 7}
if not param or param == "" then
local str, n = '~~ [Available Quests] ~~\n\n', 1
for quest, info in pairs(quests) do
str = str .. n .. " - " .. Fupper(quest) .. " (Level: "..info.min_level..")\n"
n = n + 1
end
doShowTextDialog(cid, 1955, str)
return true
end
local t = quests[param]
if p.x ~= npos.x or p.y ~= npos.y or p.z ~= npos.z then
return doPlayerSendCancel(cid, "position errada: voce precisa estar dentro da quest para usar este comando.")
end
if not t then
return doPlayerSendCancel(cid, "Quest not found.")
end
if getPlayerLevel(cid) < t.min_level then
return doPlayerSendCancel(cid, "Only players level "..t.min_level.." or higher can go the "..param.." quest.")
end
if isInRange(p, t.area.fromPos, t.area.toPos) then
return doPlayerSendCancel(cid, "You are already inside the "..param.." quest area.")
end
for quest, info in pairs(quests) do
if isInRange(p, info.area.fromPos, info.area.toPos) then
check = true
end
end
if check then
return doPlayerSendCancel(cid, "You cannot go to another quest inside a quest.")
end
local stor = getPlayerStorageValue(cid, time_storage)
if stor > os.time() then
return doPlayerSendCancel(cid, "Voce so podera entrar novamente na quest "..os.date("%d %B %Y %X", stor)..".")
end
doSendMagicEffect(p, CONST_ME_POFF)
local destination = t.enter_pos
doTeleportThing(cid, destination)
doSendMagicEffect(destination, CONST_ME_TELEPORT)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Good luck in "..param.." quest! You have "..getStrTime(t.time_to_finish).." to finish or you will be kicked.")
setPlayerStorageValue(cid, time_storage, mathtime(t.time_to_make_again) + os.time())
addEvent(function()
if isPlayer(cid) then
if isInRange(getPlayerPosition(cid), t.area.fromPos, t.area.toPos) then
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
local temple = getTownTemplePosition(getPlayerTown(cid))
doTeleportThing(cid, temple)
doSendMagicEffect(temple, CONST_ME_TELEPORT)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Your time is over!")
end
end
end, mathtime(t.time_to_finish) * 1000)
return true
end
function mathtime(table) -- by dwarfer
local unit = {"sec", "min", "hour", "day"}
for i, v in pairs(unit) do
if v == table[2] then
return table[1]*(60^(v == unit[4] and 2 or i-1))*(v == unit[4] and 24 or 1)
end
end
return error("Bad declaration in mathtime function.")
end
function getStrTime(table) -- by dwarfer
local unit = {["sec"] = "second",["min"] = "minute",["hour"] = "hour",["day"] = "day"}
return tostring(table[1].." "..unit[table[2]]..(table[1] > 1 and "s" or ""))
end
function Fupper(str)
return (str:gsub("^%l", string.upper))
end