TO

Script Teleport Por Tempo

Por Tonyyx, 20 de mar. de 2022 em Scripts

5
2.6k
TonyyxT
20 de março de 2022 às 12:22

Tenho este script de teleport por tempo, porem queria que só pudesse usar ele numa determinada pos (configuravel).

ex position errada: voce precisa estar dentro da quest para usar este comando.

MarshmelloM
23 de março de 2022 às 10:22

manda o script

TonyyxT
24 de março de 2022 às 23:34


 

 

Em 23/03/2022 em 10:22, Marshmello disse:

manda o script

Citar
local quests = {
    ["vipquest"] = {
        min_level = 500,
        enter_pos = {x = 1283, 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
    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 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  

 

 

Editado Março 24 por Tonyyx

MarshmelloM
25 de março de 2022 às 00:33
Citar

local quests = {
    ["vipquest"] = {
        min_level = 500,
        enter_pos = {x = 1283, 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"}
    }
    position = {x = 1038, y = 1043, z = 7} -- Posição que o Player precisa para usar o comando
}

local time_storage = 87871 -- só modifique se necessário

function onSay(cid, words, param, channel)
    local param, p, check = param:lower(), getPlayerPosition(cid), false
    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 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
    if getCreaturePosition(cid).x == quests.position.x and getCreaturePosition(cid).y == quests.position.y and getCreaturePosition(cid).z == quests.position.z then

    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)
    else
    doPlayerSendTextMessage(cid, 25, "wrong position")
    end
    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  

 

TonyyxT
26 de março de 2022 às 10:20

 

Em 25/03/2022 em 00:33, Marshmello disse:

 

Dei Rep Ai De Agradecimento Não Havia Testado Ainda O Script, Fui Testar Agora E Ele Não Está Funcionando, Tipo O Script Parou Simplesmente

A Tfs É 0.4