Quest Dungeon

damiaotorres
em Scripts

damiaotorres

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/11/11Posts: 93Char no Tibia: Deprex

Boa noite, Eu tenho um scripts porém ele não tá funcionando, vou explicar o que ele faz ou é para fazer.

 

-Ao click no item que tá a actions ele vai teleportado para um lugar x.

-Para poder usar a alavanca (mencionado acima) ele tem que ter level 150 a 200.

-Quando o player entra na quest começa a contar um tempo em cima da alavanca, caso ele não consiga terminar ele é teleportado.

-Caso ele consiga efetuar a quest ele fique com a storage (14424) por 12 horas, para poder fazer a quest novamente só quando a storage sair.

-Essa quest ele pode ser feita solo ou até 5 player. (como se fosse um sistema de checagem nas position informada).

 

OBS: Irei postar meu script que tenho, porém não tá funcionando, ao clicar na alavanca ela diz que já tem gente fazendo a quest, porém não tem.

KaboFlow

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 04/07/17Posts: 434
33 minutos atrás, damiaotorres disse:
Versão do Servidor:
Tipo de Script: actions
Código:
  Ocultar conteúdo

function isOnSameFloor(fromPos, toPos)
    return fromPos.z == toPos.z and true or false
end

function isEven(arg)
    return arg % 2 == 0 and true or false
end

function getMiddlePos(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local middle = {x = 0, y = 0, z = 0}    
        middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1
        middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1
        middle.z = fromPos.z or toPos.z
    return middle
end

function getDistanceRadius(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local distance = getDistanceBetween(fromPos, toPos)
    return isEven(distance) and (distance/2) or math.floor(distance/2) + 1
end

function cleareArea1(middlePos, rangex, rangey)
    local final = {x=1030, y=1085, z=7} -- Posição onde será teleportado quando acabar o tempo
    
    for i = -rangex, rangex do
        for j = -rangey, rangey do
            pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z}
            creature = getTopCreature(pos).uid
            
            if isMonster(creature) then
                doSendMagicEffect(getThingPos(creature), 14)
                doRemoveCreature(creature)
            elseif isPlayer(creature) then
                doSendMagicEffect(getThingPos(creature), 10)
                doTeleportThing(creature, final)
            end
        end
    end
    
    setGlobalStorageValue(sto, -123)
    return true
end
    
local t = {
    lvl = 150,
    lvl2 = 201,
    entrada = {
        {x = 1067, y = 1067, z = 9}, -- pos players
        {x = 1067, y = 1068, z = 9}, -- pos players
        {x = 1067, y = 1069, z = 9}, -- pos players
        {x = 1067, y = 1070, z = 9}, -- pos players
        {x = 1067, y = 1071, z = 9}, -- pos players
    },
    saida = {
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
    },    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local configure = {
        fromPos = {x=702, y=988, z=9}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.
        toPos = {x=811, y=1025, z=9}, -- posição inferior direita do mapa, da area em que esta mapeado a area.
    }
    
    local config = {
        position = {x=1067, y=1066, z=9}, -- Contagem
        fromPosition = {x=1022, y=1024, z=9},
        toPosition = {x=1139, y=1134, z=9},
        id = 1498,
        time = 1
    }

    local time = 300
    local check = {}
    
    for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) <= 149 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end

  for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) >= 201 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end


   
             
            if getGlobalStorageValue(sto) == 123 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde até que a sala seja liberada.")
                return true
            end
            
        table.insert(check, x)
    end
                                    
                    for i, tid in ipairs(check) do
                        doTeleportThing(tid, t.saida[i], false)
                        doSendMagicEffect(t.saida[i], 10)
                        doTransformItem(item.uid, item.itemid == 1810 and 1810 or 1810)
                    end
                    
            for i = 1,time do
                formula = time - 1*i
                addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_GREY)                
            end
    
    setGlobalStorageValue(sto, 123)
    local rx = getDistanceRadius(configure.fromPos, configure.toPos)
    addEvent(cleareArea1, config.time * 1800 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)
    return true
end
end

Boa noite, Eu tenho um scripts porém ele não tá funcionando, vou explicar o que ele faz ou é para fazer.

 

-Ao click no item que tá a actions ele vai teleportado para um lugar x.

-Para poder usar a alavanca (mencionado acima) ele tem que ter level 150 a 200.

-Quando o player entra na quest começa a contar um tempo em cima da alavanca, caso ele não consiga terminar ele é teleportado.

-Caso ele consiga efetuar a quest ele fique com a storage (14424) por 12 horas, para poder fazer a quest novamente só quando a storage sair.

-Essa quest ele pode ser feita solo ou até 5 player. (como se fosse um sistema de checagem nas position informada).

 

OBS: Irei postar meu script que tenho, porém não tá funcionando, ao clicar na alavanca ela diz que já tem gente fazendo a quest, porém não tem.

acho ?

 

como arrumbar o error?

damiaotorres

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/11/11Posts: 93Char no Tibia: Deprex
14 horas atrás, KaboFlow disse:

acho ?

 

como arrumbar o error?

???

KaboFlow

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 04/07/17Posts: 434
11 horas atrás, damiaotorres disse:

???

A scripts ta funcionando?

damiaotorres

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/11/11Posts: 93Char no Tibia: Deprex
6 horas atrás, KaboFlow disse:

A scripts ta funcionando?

Não parceiro.

Marshmello

Alone ~ [✖‿✖]
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/04/16Posts: 831Gênero: Masculino

Teste

local sto = 44487

function isOnSameFloor(fromPos, toPos)
    return fromPos.z == toPos.z and true or false
end

function isEven(arg)
    return arg % 2 == 0 and true or false
end

function getMiddlePos(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local middle = {x = 0, y = 0, z = 0}    
        middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1
        middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1
        middle.z = fromPos.z or toPos.z
    return middle
end

function getDistanceRadius(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local distance = getDistanceBetween(fromPos, toPos)
    return isEven(distance) and (distance/2) or math.floor(distance/2) + 1
end

function cleareArea1(middlePos, rangex, rangey)
    local final = {x=1030, y=1085, z=7} -- Posição onde será teleportado quando acabar o tempo
    
    for i = -rangex, rangex do
        for j = -rangey, rangey do
            pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z}
            creature = getTopCreature(pos).uid
            
            if isMonster(creature) then
                doSendMagicEffect(getThingPos(creature), 14)
                doRemoveCreature(creature)
            elseif isPlayer(creature) then
                doSendMagicEffect(getThingPos(creature), 10)
                doTeleportThing(creature, final)
            end
        end
    end
    
    setGlobalStorageValue(sto, -1)
    return true
end
    
local t = {
    lvl = 150,
    lvl2 = 201,
    entrada = {
        {x = 1067, y = 1067, z = 9}, -- pos players
        {x = 1067, y = 1068, z = 9}, -- pos players
        {x = 1067, y = 1069, z = 9}, -- pos players
        {x = 1067, y = 1070, z = 9}, -- pos players
        {x = 1067, y = 1071, z = 9}, -- pos players
    },
    saida = {
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
    },    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local configure = {
        fromPos = {x=702, y=988, z=9}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.
        toPos = {x=811, y=1025, z=9}, -- posição inferior direita do mapa, da area em que esta mapeado a area.
    }
    
    local config = {
        position = {x=1067, y=1066, z=9}, -- Contagem
        fromPosition = {x=1022, y=1024, z=9},
        toPosition = {x=1139, y=1134, z=9},
        id = 1498,
        time = 1
    }

    local time = 300
    local check = {}
    
    for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) <= 149 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end

  for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) >= 201 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end


   
             
            if getGlobalStorageValue(sto) == 1 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde até que a sala seja liberada.")
                return true
            end
            
        table.insert(check, x)
    end
                                    
                    for i, tid in ipairs(check) do
                        doTeleportThing(tid, t.saida[i], false)
                        doSendMagicEffect(t.saida[i], 10)
                        doTransformItem(item.uid, item.itemid == 1810 and 1810 or 1810)
                    end
                    
            for i = 1,time do
                formula = time - 1*i
                addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_GREY)                
            end
    
    setGlobalStorageValue(sto, 1)
    local rx = getDistanceRadius(configure.fromPos, configure.toPos)
    addEvent(cleareArea1, config.time * 1800 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)
    return true
end
end

 

placa1.png.90a184502351cebe72cd7b69751e551d.png

Meu Facebook

INFOS:

Citar

CIDADE: Rio de janeiro

Idade: 22 anos
SOU: {"Scripter(lua)", "WebMaster", "ProgramadorC++"}
 

local config = {
	delrey = getPlayerCarValue(cid, DELREY),
	cigarro = getPlayerCancer(cid, DERBY),
	prostituta = getPlayerAIDS(cid, cracuda),
	tresOitao = getPlayerRevorvi(cid, 38)
}
if(delrey == "Ligado" and cigarro == "Aceso" and prostituta == "No Colo" and tresOitao == "Carregado") then
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Começou o fim de semana. #PAS")
end

 

 

 

damiaotorres

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 06/11/11Posts: 93Char no Tibia: Deprex
2 horas atrás, Marshmello disse:

Teste

local sto = 44487

function isOnSameFloor(fromPos, toPos)
    return fromPos.z == toPos.z and true or false
end

function isEven(arg)
    return arg % 2 == 0 and true or false
end

function getMiddlePos(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local middle = {x = 0, y = 0, z = 0}    
        middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1
        middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1
        middle.z = fromPos.z or toPos.z
    return middle
end

function getDistanceRadius(fromPos, toPos)
    if not isOnSameFloor(fromPos, toPos) then
        return false
    end
    
    local distance = getDistanceBetween(fromPos, toPos)
    return isEven(distance) and (distance/2) or math.floor(distance/2) + 1
end

function cleareArea1(middlePos, rangex, rangey)
    local final = {x=1030, y=1085, z=7} -- Posição onde será teleportado quando acabar o tempo
    
    for i = -rangex, rangex do
        for j = -rangey, rangey do
            pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z}
            creature = getTopCreature(pos).uid
            
            if isMonster(creature) then
                doSendMagicEffect(getThingPos(creature), 14)
                doRemoveCreature(creature)
            elseif isPlayer(creature) then
                doSendMagicEffect(getThingPos(creature), 10)
                doTeleportThing(creature, final)
            end
        end
    end
    
    setGlobalStorageValue(sto, -1)
    return true
end
    
local t = {
    lvl = 150,
    lvl2 = 201,
    entrada = {
        {x = 1067, y = 1067, z = 9}, -- pos players
        {x = 1067, y = 1068, z = 9}, -- pos players
        {x = 1067, y = 1069, z = 9}, -- pos players
        {x = 1067, y = 1070, z = 9}, -- pos players
        {x = 1067, y = 1071, z = 9}, -- pos players
    },
    saida = {
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
        {x = 717, y = 1013, z = 9}, -- pos para onde eles irão
    },    
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local configure = {
        fromPos = {x=702, y=988, z=9}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.
        toPos = {x=811, y=1025, z=9}, -- posição inferior direita do mapa, da area em que esta mapeado a area.
    }
    
    local config = {
        position = {x=1067, y=1066, z=9}, -- Contagem
        fromPosition = {x=1022, y=1024, z=9},
        toPosition = {x=1139, y=1134, z=9},
        id = 1498,
        time = 1
    }

    local time = 300
    local check = {}
    
    for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) <= 149 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end

  for _, k in ipairs(t.entrada) do
         local x = getTopCreature(k).uid  
            if getPlayerLevel(cid) >= 201 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você precisa estar entre os níveis 150 á 200 para poder entrar.")
            return true
        end


   
             
            if getGlobalStorageValue(sto) == 1 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde até que a sala seja liberada.")
                return true
            end
            
        table.insert(check, x)
    end
                                    
                    for i, tid in ipairs(check) do
                        doTeleportThing(tid, t.saida[i], false)
                        doSendMagicEffect(t.saida[i], 10)
                        doTransformItem(item.uid, item.itemid == 1810 and 1810 or 1810)
                    end
                    
            for i = 1,time do
                formula = time - 1*i
                addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_GREY)                
            end
    
    setGlobalStorageValue(sto, 1)
    local rx = getDistanceRadius(configure.fromPos, configure.toPos)
    addEvent(cleareArea1, config.time * 1800 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)
    return true
end
end

 

Deu certo, mas apareceu esse erro na distro.

E outra, se o ot cair ou fechar antes do tempo acabar da quest, ao iniciar novamente o ot e vocÊ vai tentar fazer a quest ela buga, diz que ta em uso já.

 

Spoiler

[22/05/2020 22:39:59] [Error - Action Interface] 
[22/05/2020 22:39:59] data/actions/scripts/one/dungeons/dungeon150-200.lua:onUse
[22/05/2020 22:39:59] Description: 
[22/05/2020 22:39:59] (luaDoTeleportThing) Thing not found