Ir para conteúdo
  • 0

Ajuda a modificar script de porta automática


Developer Berg

Pergunta

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

vou deixar a script que estou usando que o zipter98 criou ^^

 

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" event="script" value="portas cps/Saffron/portas cima baixo.lua"/>
<movevent type="StepOut" actionid="2701" event="script" value="portas cps/Saffron/portas cima baixo.lua"/>

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

Video com a porta bugada, que quero corrigir

Video com a porta normal do jeito que quero.

e tipo, metade da porta pega normal do jeito que eu quero no caso a metade direita, já no caso da metade esquerda da porta, ela fica bugada,

vou deixar print representando onde ta as actions 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 bugados

 

 

Print

 

 


Up

post-381687-0-19274400-1439072900.png

Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

voce adicionou o action em todos os pisos perto da porta?

Ss

eu tinha feito essa porta para um cara aqui, da uma olhada.

http://www.xtibia.com/forum/topic/235518-como-por-efeito-no-item-da-porta/

Esse sistema ta do mesmo jeito que esse meu, ta fazendo o mesmo bug rs '-'

Up

Link para o comentário
Compartilhar em outros sites

  • 0

acho que esse sistema é feito pelo otc, para evitar lag

isso n é leg, um cara de outro forum falou que era coisa do StepIn e StepOut, tipo, também tem no Psoul, lá tem esse sistema da porta automatica, e eles usam OldClient E Otclient rs

Link para o comentário
Compartilhar em outros sites

  • 0

Você testo antes de fala?

Que bug ta dando?

O cara que eu fiz amostro ele funcionando no servidor dele e tava pegando normal.

só basta você por a actionid 5555 onde o player pisara e abrira a porta.


e para de da up, você so pode fazer isso acada 24hrs, espere alguém te responde!

Link para o comentário
Compartilhar em outros sites

  • 0

Você testo antes de fala?

Que bug ta dando?

O cara que eu fiz amostro ele funcionando no servidor dele e tava pegando normal.

só basta você por a actionid 5555 onde o player pisara e abrira a porta.

s eu testei, o bug é aquele que ta no video, tipo, se eu colocar a action 5555, e colocar essa action ao redor da porta, e se eu passar de 1 piso que tem a action para o outro piso que também tem a action a porta deveria continuar aberta, já na script ta assim, quando eu passo de 1 piso que tem a action para o outro piso que também tem a action, a porta se fecha e depois reabre de novo, eu queria que ela continua-se aberta e n fecha-se e reabri-se, e as vezes a porta nem reabrir ela reabre, fica fechada, só se eu andar de novo que ela reabre '-' olha os 2 videos ai e ver, o 1° video é o bug que eu to mostrando, e o 2° video é a porta do jeito que quero.

Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

  • 0

manda o script do jeito que você ta editando, deve ser porque você ta editando errado.

olha, com a minha antiga script que eu usava eu editei assim

 

script

 

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 = 1058, z = 7},         --Saffron--
		{x = 1053, y = 1058, z = 7},
    },
  },
}
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][1] 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][1]
                                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

 

Tags

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

Vou deixar Print da porta no mapa onde está todas as actions " 2701 " que coloquei para funcionar

 

Já com a sua script eu fiz assim

 

Script

 

-- Do not remove the credits --
-- [MOVEMENT] Porta que abre automáticamente --
-- Developed by Rigby (João Vitor) --
-- Xtibia.com --
 
local porta = {621, 622, 605} -- porta fechada, porta meio aberta, porta aberta
local pos = {x = 1056, y = 1058, z = 7} -- local onde vai fica a porta
local delay = 150 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada
local action = 2701 -- action que ta no .xml, se muda la vai ter que muda aqui também
 
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    if getTileItemById(pos, porta[1]).uid > 0 then
        for i = 1, 2 do
            addEvent(function()
                doTransformItem(getTileItemById(pos, i == 1 and porta[1] or porta[2]).uid, porta[i + 1])
            end, i * delay)
        end
    end
    return true
end 
 
function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    local tab = {}
    for _, pid in ipairs(getPlayersOnline()) do
        if getTileInfo(getCreaturePosition(pid)).actionid == action then
            table.insert(tab, pid)
        end
    end
    if #tab == 0 then
        if getTileItemById(pos, porta[3]).uid > 0 then
            for i = 1, 2 do
                addEvent(function()
                    doTransformItem(getTileItemById(pos, i == 1 and porta[3] or porta[2]).uid, porta[i == 1 and 2 or 1])
                end, i * delay)
            end
        end
    end
    return true
end

 

Tags

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

Eu coloquei a action " 2701 " também, e coloquei ela nos mesmos cantos do mapa que coloquei na 1° script citada

 

 

Print dos locais que tem a action onde está marcado é onde tem as actions

Up

Up

post-381687-0-56888200-1439138531_thumb.png

Link para o comentário
Compartilhar em outros sites

  • 0

Coloquei os action id no mapa e no script normal, e funcionou de boa só segui o tutorial do the jv normal. Tem que por as cordenadas do tile que fica o item da porta certinho tb.

 

_5ssdL.gif

 

xMCU5E.gif

 

Não sei pq ficou ruim essa gif, mais ta ai ó funcionando.

 

Tenta usar outro numnero para o action id manow, quem sabe pode estar dando conflito com outro action com o mesmo numero.

Editado por Taiger
Link para o comentário
Compartilhar em outros sites

  • 0

Coloquei os action id no mapa e no script normal, e funcionou de boa só segui o tutorial do the jv normal. Tem que por as cordenadas do tile que fica o item da porta certinho tb.

 

_5ssdL.gif

 

xMCU5E.gif

 

Não sei pq ficou ruim essa gif, mais ta ai ó funcionando.

 

Tenta usar outro numnero para o action id manow, quem sabe pode estar dando conflito com outro action com o mesmo numero.

eu re-testei aqui a script e ta do mesmo jeito '-' tem como vc mandar 1 print de onde vc colocou as actions no mapa ?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...