Ir para conteúdo
  • Cadastre-se

(Resolvido)[Ajuda] Action Quest


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Boa Tarde Galera Do TK!

Tenho uma quest no meu servidor, que funcionar da seguinte maneira > o Player clicka na porta com o XXX Item na mão e é teleportado para uma pequena area, deveria nascer 1 monstro, e só pode entrar 1 jogador por vez e cada jogador tem um tempo limite de 1 minuto lá dentro, se o tempo acabar o jogador toma tp para uma tal position e o bicho some

Minha Script \/ Só faz a função de entrar na porta :(

Citar

local config = {
    money = 1000,
    daily = "no",
    level = 5,
    storage = 30015,
    areas = {
        [1] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
        [2] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
    },
    entry = {
        {x = 1085, y = 1145, z = 6},
    },
    destination = {
        {x = 1082, y = 11144, z = 6},
    }, 
    TOWERPosition = {
        {x = 1737, y = 1869, z = 8},
    }
}
 
config.daily = getBooleanFromString(config.daily)

local function CheckAnihilationInUse()
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local creature = getTopCreature({x = x, y = y, z = z}).uid
                    if isPlayer(creature) then
                        return true
                    end
                end
            end
        end
    end
    return false
end

local function RemoveMonsters()
    local monsters = {}
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local position = {x = x, y = y, z = z, stackpos = 253}
                    local creature = getThingfromPos(position)
                    if isMonster(creature.uid) then
                        table.insert(monsters, creature.uid)
                    end
                end
            end
        end
    end
    for i = 1, #monsters do
        doRemoveCreature(monsters)
    end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6265) then
        if(config.daily) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        else
            doTransformItem(item.uid, item.itemid - 1)
        end
        return true
    end
     
    if(item.itemid ~= 6265) then
        return true
    end
    
    if CheckAnihilationInUse() then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "A arena esta em uso, espere.")
        return true
    end
    
    local players = {}
    for _, position in ipairs(config.entry) do
        local pid = getTopCreature(position).uid
        if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level or getPlayerMoney(cid) < config.money) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "No minimo players de level ".. config.level .." e possuir ".. config.money .." gold coins.")
            return true
        end
        table.insert(players, pid)
    end
    RemoveMonsters()
    for i = 1, #config.TOWERPosition do
        doSummonCreature("Destroyer TOWER", config.TOWERPosition)
    end

    for i, pid in ipairs(players) do
        doSendMagicEffect(config.entry, CONST_ME_POFF)
        doTeleportThing(pid, config.destination, false)
        doSendMagicEffect(config.destination, CONST_ME_ENERGYAREA)
    end
    doTransformItem(item.uid, item.itemid + 1)
    return true
end

 

Se o Player não tiver o tal XXX item ele não consegue entrar na porta e aparece a msg escrito dizendo que precisa do tal item para entrar.

Algumas prints \/

 

SETA AZUL = A Porta que os players vão clickar e tomar o teleport

SETA VERMELHA = Item que o players vão precisar pra clicka na porta e ser teleportado

BOLA PRETA = Aonde os players vão ser teleportado

 

TIBIA : 8.60

TFS : 0.4

 

Alguém tenta me ajudar nessa?

+REP :)

 

 

aRENATOR QUEST 1.png

ARENATOR QUEST 2.png

Editado por OfWar
Esqueci de por TFS (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Tu já configurou essas coisas?

 

local config = {
    money = 1000,
    daily = "no",
    level = 5,
    storage = 30015,
    areas = {
        [1] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
        [2] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
    },
    entry = {
        {x = 1085, y = 1145, z = 6},
    },
    destination = {
        {x = 1082, y = 11144, z = 6},
    }, 
    TOWERPosition = {
        {x = 1737, y = 1869, z = 8},
    }
}

 

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

@psychonaut

 

 

Opa edit : errei, quando da use na porta ela fica de lado e não teleporta com ou sem o item que precisa :(

Editado por OfWar
Errei (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Tá errado aí

 topLeftPos = {x = 1736, y = 1855, z = 8},

É a posição do canto superior esquerdo da sala, perto do pilar lá

 

bottomRightPos = {x = 1736, y = 1855, z = 8}

 

É a posição do canto inferior direito da sala, perto do ultimo pilar.

 

bQRE1de.png

 

 

E usa esse aqui, configura ali o monstro e tals

 

Spoiler

 local config = {
    money = 1000,
    daily = "no",
    level = 5,
    storage = 30015,
    areas = {
        [1] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
        [2] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
    },
    entry = {
        {x = 1085, y = 1145, z = 6},
    },
    destination = {
        {x = 1082, y = 11144, z = 6},
    }
}

local posmonstro = {x = 1083. y = 11144, z = 6}
local monstro = "Nome"
 
config.daily = getBooleanFromString(config.daily)

local function CheckAnihilationInUse()
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local creature = getTopCreature({x = x, y = y, z = z}).uid
                    if isPlayer(creature) then
                        return true
                    end
                end
            end
        end
    end
    return false
end

local function RemoveMonsters()
    local monsters = {}
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local position = {x = x, y = y, z = z, stackpos = 253}
                    local creature = getThingfromPos(position)
                    if isMonster(creature.uid) then
                        table.insert(monsters, creature.uid)
                    end
                end
            end
        end
    end
    for m in pairs(monsters) do
        doRemoveCreature(m)
    end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6265) then
        if(config.daily) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        else
            doTransformItem(item.uid, item.itemid - 1)
        end
        return true
    end
     
    if(item.itemid ~= 6265) then
        return true
    end
    
    if CheckAnihilationInUse() then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "A arena esta em uso, espere.")
        return true
    end
    
    local players = {}
    for _, position in ipairs(config.entry) do
        local pid = getTopCreature(position).uid
        if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level or getPlayerMoney(cid) < config.money) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "No minimo players de level ".. config.level .." e possuir ".. config.money .." gold coins.")
            return true
        end
        table.insert(players, pid)
    end
    RemoveMonsters()
    doCreateMonster(monstro, posmonstro)
    doSendMagicEffect(config.entry, CONST_ME_POFF)
    doTeleportThing(cid, config.destination, false)
    doSendMagicEffect(config.destination, CONST_ME_ENERGYAREA)        
    
    doTransformItem(item.uid, item.itemid + 1)
    return true
end 

 

 

 

 

 

 

 

Editado por psychonaut (veja o histórico de edições)

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

@psychonaut

Deu errado :( , a porta ficou de lado dnv, e não aconteceu nada. :(

 

ItemID: [2091]. < ID Da Key

Editado por OfWar
Esqueci de por key (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Spoiler


 local config = {
    money = 1000,
    daily = "no",
    level = 5,
    storage = 30015,
    areas = {
        [1] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
        [2] = {
            topLeftPos = {x = 1736, y = 1855, z = 8},
            bottomRightPos = {x = 1736, y = 1855, z = 8},
        },
    },
    entry = {
        {x = 1085, y = 1145, z = 6},
    },
    destination = {
        {x = 1082, y = 11144, z = 6},
    }
}

local posmonstro = {x = 1083. y = 11144, z = 6}
local monstro = "Nome"
 
config.daily = getBooleanFromString(config.daily)

local function CheckAnihilationInUse()
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local creature = getTopCreature({x = x, y = y, z = z}).uid
                    if isPlayer(creature) then
                        return true
                    end
                end
            end
        end
    end
    return false
end

local function RemoveMonsters()
    local monsters = {}
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local position = {x = x, y = y, z = z, stackpos = 253}
                    local creature = getThingfromPos(position)
                    if isMonster(creature.uid) then
                        table.insert(monsters, creature.uid)
                    end
                end
            end
        end
    end
    for m in pairs(monsters) do
        doRemoveCreature(m)
    end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6265) then
        if(config.daily) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
      return true
        else
            doTransformItem(item.uid, item.itemid - 1)
        end        
    end
     
    if(item.itemid ~= 6265) then
        return true
    end
    
    if CheckAnihilationInUse() then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "A arena esta em uso, espere.")
        return true
    end
    
    local players = {}
    for _, position in ipairs(config.entry) do
        local pid = getTopCreature(position).uid
        if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level or getPlayerMoney(cid) < config.money) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "No minimo players de level ".. config.level .." e possuir ".. config.money .." gold coins.")
            return true
        end
        table.insert(players, pid)
    end
    RemoveMonsters()
    doCreateMonster(monstro, posmonstro)
    doSendMagicEffect(config.entry, CONST_ME_POFF)
    doTeleportThing(cid, config.destination, false)
    doSendMagicEffect(config.destination, CONST_ME_ENERGYAREA)        
    
    doTransformItem(item.uid, item.itemid + 1)
    return true
end 

soh mudei uma linha de lugar

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

@psychonaut

Coloquei essa script ai e a porta continua virando e não faz nada, 

vou te mandar a script q acabei de fazer tirando algumas coisas\/

ela não faz nada + a porta tambem nao vira

será que se vc acrescentar a ID Key consegue?

Citar

local config = {
    areas = {
        [1] = {
            topLeftPos = {x = 1076, y = 1147, z = 8},
            bottomRightPos = {x = 1080, y = 1151, z = 8},
        },
        [2] = {
            topLeftPos = {x = 1076, y = 1147, z = 8},
            bottomRightPos = {x = 1080, y = 1151, z = 8},
        },
    },
    entry = {
        {x = 1085, y = 1145, z = 6},
    },
    destination = {
        {x = 1078, y = 1149, z = 8},
    }
}

local teleport = {x=1078, y=1149, z=8} -- Coordenadas para onde o player irá ser teleportado.
local item_id = 2091 -- ID do item que o player precisa para ser teleportado.
local posmonstro = {x = 1077, y = 1147, z = 8}
local monstro = "Arenator"

function onUse(cid, item, fromPosition, item2, toPosition)

if getPlayerItemCount(cid,item_id) >= 1 then
       doTeleportThing(cid, teleport)
       doSendMagicEffect(getPlayerPosition(cid), 10)
       doPlayerRemoveItem(cid, item_id, 1)
       doPlayerSendTextMessage(cid, 20, "Você tem 2 minutos para matar o Arenator!")
       else
       doPlayerSendTextMessage(cid, 20, "Você precisa de uma "..getItemNameById(item_id).." para entrar.")
       end
local function CheckAnihilationInUse()
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local creature = getTopCreature({x = x, y = y, z = z}).uid
                    if isPlayer(creature) then
                        return true
                    end
                end
            end
        end
    end
    return false
end

local function RemoveMonsters()
    local monsters = {}
    for i = 1, #config.areas do
        for x = config.areas.topLeftPos.x, config.areas.bottomRightPos.x do
            for y = config.areas.topLeftPos.y, config.areas.bottomRightPos.y do
                for z = config.areas.topLeftPos.z, config.areas.bottomRightPos.z do
                    local position = {x = x, y = y, z = z, stackpos = 253}
                    local creature = getThingfromPos(position)
                    if isMonster(creature.uid) then
                        table.insert(monsters, creature.uid)
                    end
                end
            end
        end
    end
    for m in pairs(monsters) do
        doRemoveCreature(m)
    end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(item.itemid == 6265) then
        if(config.daily) then
            doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
        else
            doTransformItem(item.uid, item.itemid - 1)
        end
        return true
    end
     
    if(item.itemid ~= 6265) then
        return true
    end
    
    if CheckAnihilationInUse() then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "A arena esta em uso, espere.")
        return true
    end
    
    local players = {}
    for _, position in ipairs(config.entry) do
        local pid = getTopCreature(position).uid
        if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level or getPlayerMoney(cid) < config.money) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "No minimo players de level ".. config.level .." e possuir ".. config.money .." gold coins.")
            return true
        end
        table.insert(players, pid)
    end
    RemoveMonsters()
    doCreateMonster(monstro, posmonstro)
    doSendMagicEffect(config.entry, CONST_ME_POFF)
    doTeleportThing(cid, config.destination, false)
    doSendMagicEffect(config.destination, CONST_ME_ENERGYAREA)        
    
   
    return true
end

 

Link para o post
Compartilhar em outros sites

@OfWar Vê assim:

 

Spoiler

local t = {
level = 100,
key = {id = 1111, remove = "yes"}, -- id da chave que deve estar na mão, "yes" para remover, "no" para não remover
area = {{x=1,y=1,z=1}, {x=1,y=1,z=1}}, -- posição do canto superior esquerdo, inferior direito da área
arenaPos = {x=1,y=1,z=1}, -- posição para qual o player será teleportado ao entrar
monster = {"Demon", {x=1,y=1,z=1}}, -- posição que o monstro aparecerá
kick = {{1, "min"}, {x=1,y=1,z=1}} -- tempo para kikar o player da arena, posição para qual irá quando for kikado
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local p, l, r = getPlayerPosition(cid), getPlayerSlotItem(cid, CONST_SLOT_LEFT), getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
    if getPlayerLevel(cid) < t.level then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only players level " .. t.level.. " or higher can pass.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    if (l.itemid ~= t.key.id and r.itemid ~= t.key.id) then 
        local key = getItemNameById(t.key.id)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need ".. getArticle(key) .. " " .. key .. " in your hand.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    local players = getPlayersInArea(t.area[1], t.area[2])
    if #players > 0 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Somebody is inside the arena.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    if t.key.remove == "yes" then
        doRemoveItem(l.itemid == t.key.id and l.uid or r.uid)
    end
    local monster = doCreateMonster(t.monster[1], t.monster[2])
    doTeleportThing(cid, t.arenaPos)
    doSendMagicEffect(t.arenaPos, CONST_ME_TELEPORT)
    doCreatureSay(cid, "You will have " .. t.kick[1][1] .. " " .. t.kick[1][2] .. " to kill the " .. t.monster[1] .. "!", TALKTYPE_ORANGE_1)
    addEvent(kickFromArena, mathtime(t.kick[1]) * 1000, cid, monster) 
    return true
end

function kickFromArena(cid, monster)
local check = true
if isMonster(monster) then
    doRemoveCreature(monster)
    check = false
end
if isPlayer(cid) then
    doTeleportThing(cid, t.kick[2])
    doSendMagicEffect(t.kick[2], CONST_ME_TELEPORT)
    if check == false then
        doCreatureSay(cid, "Your time is over!", TALKTYPE_ORANGE_1)
    else
        doCreatureSay(cid, "Congratulations! You killed the " .. t.monster[1].. ".", TALKTYPE_ORANGE_1)
    end
end
end

function getPlayersInArea(fromPos, toPos)
local players = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), fromPos, toPos) then
            table.insert(players, pid)
        end
    end
    return players
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

 

 

No actions.xml: <action actionid="ACTION_ID_DA_PORTA" script="NOMEDOARQUIVO.lua" />

Contato:

 

Link para o post
Compartilhar em outros sites

@Dwarfer

Mano, o item não precisa está na mão, só na backpack ja esta bom.

não teleportou  para sala do monstro e deu o seguinte erro

Citar

[29/10/2017 19:27:06] [Error - Action Interface] 
[29/10/2017 19:27:06] data/actions/scripts/arenaporta.lua:onUse
[29/10/2017 19:27:06] Description: 
[29/10/2017 19:27:06] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
[29/10/2017 19:27:06] stack traceback:
[29/10/2017 19:27:06]     data/lib/032-position.lua:2: in function 'isInRange'
[29/10/2017 19:27:06]     data/actions/scripts/arenaporta.lua:60: in function 'getPlayersInArea'
[29/10/2017 19:27:06]     data/actions/scripts/arenaporta.lua:23: in function <data/actions/scripts/arenaporta.lua:10>

 

Editado por OfWar (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

Como assim não precisa estar na mão? Você colocou no tópico que "o Player clicka na porta com o XXX Item na mão", da próxima vez tente deixar seu pedido bem detalhado. Fiz a alteração para verificar se o player possui o item, independente de estar na mão. 

 

Spoiler

local t = {
level = 100,
key = {id = 1111, remove = "yes"}, -- id da chave, "yes" para remover, "no" para não remover
area = {{x=1,y=1,z=1}, {x=1,y=1,z=1}}, -- posição do canto superior esquerdo, inferior direito da área
arenaPos = {x=1,y=1,z=1}, -- posição para qual o player será teleportado ao entrar
monster = {"Demon", {x=1,y=1,z=1}}, -- posição que o monstro aparecerá
kick = {{1, "min"}, {x=1,y=1,z=1}} -- tempo para kikar o player da arena, posição para qual irá quando for kikado
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local p = getPlayerPosition(cid)
    if getPlayerLevel(cid) < t.level then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only players level " .. t.level.. " or higher can pass.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    if getPlayerItemCount(cid, t.key.id) == 0 then 
        local key = getItemNameById(t.key.id)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need ".. getArticle(key) .. " " .. key .. " to pass.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    local players = getPlayersInArea(t.area[1], t.area[2])
    if #players > 0 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Somebody is inside the arena.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    if t.key.remove == "yes" then
        doPlayerRemoveItem(cid, t.key.id, 1)
    end
    local monster = doCreateMonster(t.monster[1], t.monster[2])
    doTeleportThing(cid, t.arenaPos)
    doSendMagicEffect(t.arenaPos, CONST_ME_TELEPORT)
    doCreatureSay(cid, "You will have " .. t.kick[1][1] .. " " .. t.kick[1][2] .. " to kill the " .. t.monster[1] .. "!", TALKTYPE_ORANGE_1)
    addEvent(kickFromArena, mathtime(t.kick[1]) * 1000, cid, monster) 
    return true
end

function kickFromArena(cid, monster)
local check = true
if isMonster(monster) then
    doRemoveCreature(monster)
    check = false
end
if isPlayer(cid) then
    doTeleportThing(cid, t.kick[2])
    doSendMagicEffect(t.kick[2], CONST_ME_TELEPORT)
    if check == false then
        doCreatureSay(cid, "Your time is over!", TALKTYPE_ORANGE_1)
    else
        doCreatureSay(cid, "Congratulations! You killed the " .. t.monster[1].. ".", TALKTYPE_ORANGE_1)
    end
end
end

function getPlayersInArea(fromPos, toPos)
local players = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), fromPos, toPos) then
            table.insert(players, pid)
        end
    end
    return players
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

 

 

Com relação ao erro, se você configurar as posições corretamente, vai funcionar.

Contato:

 

Link para o post
Compartilhar em outros sites

@Dwarfer

Desculpa, foi pq pedi para o meu irmão montar o pedido.

Fiz tudo perfeito e não deu certo.

Então deu o seguinte error \/

Citar

[29/10/2017 19:57:19] [Error - Action Interface] 
[29/10/2017 19:57:19] data/actions/scripts/arenaporta.lua:onUse
[29/10/2017 19:57:19] Description: 
[29/10/2017 19:57:20] data/lib/032-position.lua:2: attempt to index global 'position' (a nil value)
[29/10/2017 19:57:20] stack traceback:
[29/10/2017 19:57:20]     data/lib/032-position.lua:2: in function 'isInRange'
[29/10/2017 19:57:20]     data/actions/scripts/arenaporta.lua:60: in function 'getPlayersInArea'
[29/10/2017 19:57:20]     data/actions/scripts/arenaporta.lua:23: in function <data/actions/scripts/arenaporta.lua:10>

 

Link para o post
Compartilhar em outros sites

@Dwarfer

Funcionouu mt obg, só que eu queria resolver isso \/

O player mata o Arenator pega o prêmio e sai  Quest normal, ai dps de 1 minuto seja aonde ele tiver, ele toma teleport pra saída da quest :(

 

 

Editado por OfWar (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Sim, não coloquei a verificação porque me baseei pela foto que você colocou da área. Achei que o único jeito que o player poderia sair seria sendo kikado da área.

Utilize essa:

 

Spoiler

local t = {
level = 100,
key = {id = 1111, remove = "yes"}, -- id da chave, "yes" para remover, "no" para não remover
area = {{x=1,y=1,z=1}, {x=1,y=1,z=1}}, -- posição do canto superior esquerdo, inferior direito da área
arenaPos = {x=1,y=1,z=1}, -- posição para qual o player será teleportado ao entrar
monster = {"Demon", {x=1,y=1,z=1}}, -- posição que o monstro aparecerá
kick = {{1, "min"}, {x=1,y=1,z=1}} -- tempo para kikar o player da arena, posição para qual irá quando for kikado
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local p, timetoagain = getPlayerPosition(cid), getPlayerStorageValue(cid, 87932) - os.time()
    if  timetoagain > 0 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need wait ".. timetoagain .. " seconds to pass again.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    if getPlayerLevel(cid) < t.level then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only players level " .. t.level.. " or higher can pass.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    if getPlayerItemCount(cid, t.key.id) == 0 then 
        local key = getItemNameById(t.key.id)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You need ".. getArticle(key) .. " " .. key .. " to pass.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true 
    end
    local players = getPlayersInArea(t.area[1], t.area[2])
    if #players > 0 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Somebody is inside the arena.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    local monstersInArea = getMonstersInArea(t.area[1], t.area[2])
    if #monstersInArea > 0 then
        for i = 1, #monstersInArea do 
            doRemoveCreature(monstersInArea[i])
        end
    end    
    if t.key.remove == "yes" then
        doPlayerRemoveItem(cid, t.key.id, 1)
    end
    local monster = doCreateMonster(t.monster[1], t.monster[2])
    setPlayerStorageValue(cid, 87932, mathtime(t.kick[1])+1+os.time())
    doTeleportThing(cid, t.arenaPos)
    doSendMagicEffect(t.arenaPos, CONST_ME_TELEPORT)
    doCreatureSay(cid, "You will have " .. t.kick[1][1] .. " " .. t.kick[1][2] .. " to kill the " .. t.monster[1] .. "!", TALKTYPE_ORANGE_1)
    addEvent(kickFromArena, mathtime(t.kick[1]) * 1000, cid, monster) 
    return true
end

function kickFromArena(cid, monster)
    local check = true
    if isMonster(monster) then 
        doRemoveCreature(monster) 
        check = false 
    end
    if isPlayer(cid) and isInRange(getPlayerPosition(cid), t.area[1], t.area[2]) then
        doTeleportThing(cid, t.kick[2])
        doSendMagicEffect(t.kick[2], CONST_ME_TELEPORT)
        if check == false then
            doCreatureSay(cid, "Your time is over!", TALKTYPE_ORANGE_1)
        else
            doCreatureSay(cid, "Congratulations! You killed the " .. t.monster[1].. ".", TALKTYPE_ORANGE_1)
        end
    end
end

function getPlayersInArea(fromPos, toPos)
local players = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), fromPos, toPos) then
            table.insert(players, pid)
        end
    end
    return players
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 getMonstersInArea(fromPos, toPos) -- by dwarfer
    local monsters = {}
    for x = fromPos.x, toPos.x do
        for y = fromPos.y, toPos.y do
            local pos = {x = x, y = y, z = fromPos.z}
            local monster = getTopCreature(pos).uid
            if monster > 0 and isMonster(monster) then
                table.insert(monsters, monster)
            end
        end
    end
    return monsters
end

 

 

Contato:

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo