Ir para conteúdo

Ajuda a modificar script de porta automática


Developer Berg

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
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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

 

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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