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

Mostrar mais  

 

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

 

  Mostrar conteúdo oculto

 

 

 

 

 

 

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
  Mostrar conteúdo oculto

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

Mostrar mais  

 

Link para o post
Compartilhar em outros sites

@OfWar Vê assim:

 

  Mostrar conteúdo oculto

 

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

Contato:

  • Email: dwarfer@sapo.pt
  • Discord: Dwarfer#2715

 

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>

Mostrar mais  

 

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. 

 

  Mostrar conteúdo oculto

 

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

Contato:

  • Email: dwarfer@sapo.pt
  • Discord: Dwarfer#2715

 

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>

Expand   Mostrar mais  

 

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:

 

  Mostrar conteúdo oculto

 

Contato:

  • Email: dwarfer@sapo.pt
  • Discord: Dwarfer#2715

 

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.

  • Estatísticas dos Fóruns

    96830
    Tópicos
    519567
    Posts
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo