Ir para conteúdo

Posts Recomendados

Iae galera smile.png é o seguinte, queria a ajuda de vcs para modificar uma script de porta automática, igual a porta do Pxg.

como ela funciona --->>> o player chega e pisa em tal tile, e assim que ele pisa uma porta é aberta, em seguida quando o player sair de cima do tile ela se fecha, e quando tem 2 player em cima dos tiles que tem as actions a porta fica aberta e se 1 dos players sair de cima do tile com a action e ficar 1 player em cima do tile ainda com a action a porta continua aberta.

Bug --->>> para facilitar + eu filmei para vcs entender o bug.

Video com a porta normal do jeito que quero.

Video com a porta bugada, que quero corrigir

Script

local config = {
    delay = 150,                                       --Intervalo de tempo entre as "transformações" da porta, em milésimos.
    door = {621, 622, 605},                       --{ID da porta fechada, ID da porta aberta pela metade, ID da porta aberta},
    ids = {
    [2701] = {                                        
        {x = 1056, y = 1055, z = 7},         --Saffron--
    },
  },
}
function onStepIn(cid, item, position)
    if config.ids[item.actionid] then
        for _, pos in pairs(config.ids[item.actionid]) do
            if getTileItemById(pos, config.door[1]).uid > 0 then
                for i = 1, 2 do
                    addEvent(function()
                        doTransformItem(getTileItemById(pos, i == 1 and config.door[1] or config.door[2]).uid, config.door[i + 1])
                    end, i * config.delay)
                end
            end 
        end
    end
    return true
end
function onStepOut(cid, item)
    if config.ids[item.actionid] then
        for _, pos in pairs(config.ids[item.actionid]) do
            local it = getTileItemById(pos, config.door[3]).uid
            if it > 0 then
                if getSpectators(pos, 1, 1) then
                    return true
                end
            end
        end
        for _, pos in pairs(config.ids[item.actionid]) do
            if getTileItemById(pos, config.door[3]).uid > 0 then
                for i = 1, 2 do
                    addEvent(function()
                        doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, config.door[i == 1 and 2 or 1])
                    end, i * config.delay)
                end
            end
        end
    end
    return true
end

Tags

<movevent type="StepIn" actionid="2701;2702" event="script" value="portas cps/Saffron/portas cima baixo.lua"/>
<movevent type="StepOut" actionid="2701;2702" event="script" value="portas cps/Saffron/portas cima baixo.lua"/>

Também vou deixar 1 print dos tiles que ta a action e quais tiles tão bugando

Explicação do Print --->>> onde ta azul é os tiles que ta pegando normal, Onde ta vermelho é os tiles que tão bugado

post-381687-0-84270300-1429836627.png

Editado por ricardoberg
Link para o comentário
https://xtibia.com/forum/topic/233457-ajuda-a-modificar-script-de-porta-autom%C3%A1tica/
Compartilhar em outros sites

Bom dia.

 

Teste assim:

 

local config = {
    delay = 150,                                       --Intervalo de tempo entre as "transformações" da porta, em milésimos.
    door = {621, 622, 605},                       --{ID da porta fechada, ID da porta aberta pela metade, ID da porta aberta},
    ids = {
    [2701] = {
        {x = 1056, y = 1055, z = 7},         --Saffron--
    },
  },
}
function onStepIn(cid, item, position)
    if config.ids[item.actionid] then
        for _, pos in pairs(config.ids[item.actionid]) do
            if getTileItemById(pos, config.door[1]).uid > 0 then
                for i = 1, 2 do
                    addEvent(function()
                        doTransformItem(getTileItemById(pos, i == 1 and config.door[1] or config.door[2]).uid, config.door[i + 1])
                    end, i * config.delay)
                end
            end
        end
    end
    return true
end

function onStepOut(cid, item)
    if config.ids[item.actionid] and getTileInfo(getThingPos(cid)).action < 1 then
        for _, pos in pairs(config.ids[item.actionid]) do
            local it = getTileItemById(pos, config.door[3]).uid
            if it > 0 then
                if getSpectators(pos, 1, 1) then
                    return true
                end
            end
        end
        for _, pos in pairs(config.ids[item.actionid]) do
            if getTileItemById(pos, config.door[3]).uid > 0 then
                for i = 1, 2 do
                    addEvent(function()
                        doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, config.door[i == 1 and 2 or 1])
                    end, i * config.delay)
                end
            end
        end
    end
    return true
end

 

Boa sorte.

Vejo que você configurou apenas uma posição em ids. Bem, deve-se colocar ambas as posições da porta.

Editado por zipter98

tipo n são 2 portas, só são 1 porta, olha ai como é a porta.

segue os prints, porta fechada, porta metade aberta, porta aberta

post-381687-0-14827700-1429898254.png

post-381687-0-63930500-1429898258.png

post-381687-0-05726100-1429898267.png

Editado por ricardoberg

Mesmo sendo apenas um item, você precisa colocar as posições dos cantos da porta.

Segue a imagem, onde as posições circuladas são as que menciono:

Mq9CpaX.png

+ como eu faço nessa parte

door = {621, 622, 605}, 

se o id da porta desse canto <<<<< é esse id ? " 606 "

Editado por ricardoberg

Fugindo um pouco do foco, essa sua porta bugada pode servir em algo no seu mapa… Você pode adicionar uma plaquinha de "Em manutenção" na sprite, ou adicionar uma fala no NPC que está lá dentro(do tipo, "Essa maldita porta quebrou novamente!) e deixar ela desse jeito mesmo, vai parecer que é de propósito o bug.

 

local config = {
    delay = 150,                                       --Intervalo de tempo entre as "transformações" da porta, em milésimos.
    door = {{621, 606}, 622, 605},                       --{ID da porta fechada, ID da porta aberta pela metade, ID da porta aberta},
    ids = {
    [2701] = {                                        
        {x = 1056, y = 1055, z = 7},         --Saffron--
    },
  },
}
function onStepIn(cid, item, position)
    if config.ids[item.actionid] then
        for _, pos in pairs(config.ids[item.actionid]) do
            if type(config.door[1]) == "table" then
                for n = 1, #config.door[1] do
                    if getTileItemById(pos, config.door[1][n]).uid > 0 then
                        for i = 1, 2 do
                            addEvent(function()
                                doTransformItem(getTileItemById(pos, i == 1 and config.door[1][n] or config.door[2]).uid, config.door[i + 1])
                            end, i * config.delay)
                        end
                    end 
                end
            else
                if getTileItemById(pos, config.door[1]).uid > 0 then
                    for i = 1, 2 do
                        addEvent(function()
                            doTransformItem(getTileItemById(pos, i == 1 and config.door[1] or config.door[2]).uid, config.door[i + 1])
                        end, i * config.delay)
                    end
                end 
            end
        end
    end
    return true
end
function onStepOut(cid, item)
    if config.ids[item.actionid] then
        for _, pos in pairs(config.ids[item.actionid]) do
            local it = getTileItemById(pos, config.door[3]).uid
            if it > 0 then
                if getSpectators(pos, 1, 1) then
                    return true
                end
            end
        end
        for _, pos in pairs(config.ids[item.actionid]) do
            if getTileItemById(pos, config.door[3]).uid > 0 then
                for i = 1, 2 do
                    addEvent(function()
                        if type(config.door[1]) == "table" then
                            for n = 1, #config.door[1] do
                                local j = i == 1 and config.door[2] or config.door[1][n]
                                doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, j)
                            end
                        else
                            doTransformItem(getTileItemById(pos, i == 1 and config.door[3] or config.door[2]).uid, config.door[i == 1 and 2 or 1])
                        end
                    end, i * config.delay)
                end
            end
        end
    end
    return true
end

Como eu previa, a porta se multiplico pq essa action " 606 " ela devia ficar instável, sem mudar, pq ela é própria, as actions que deveria mudar seria a desse lado >>>>>>>>>

 

e quanto o negocio da porta com defeito ou o npc, nem da pq essa porta seria a do Cp das citys '-'

post-381687-0-05205800-1429918636_thumb.png

post-381687-0-88476200-1429918655_thumb.png

Ok, troque:
doTransformItem(getTileItemById(pos, i == 1 and config.door[1][n] or config.door[2]).uid, config.door[i + 1])
por:
doTransformItem(getTileItemById(pos, i == 1 and config.door[1][1] or config.door[2]).uid, config.door[i + 1])
e troque:
local j = i == 1 and config.door[2] or config.door[1][n]
por:
local j = i == 1 and config.door[2] or config.door[1][1]

E 606 não é uma action, e sim o ID da porta.

Editado por zipter98
Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...