Ir para conteúdo
  • Cadastre-se

(Resolvido)Remover pedra ao pizar em pizos.


Ir para solução Resolvido por zipter98,

Posts Recomendados

Olá a todos do TK,

 

 

1# Gostaria de pedir a ajuda de alguém para me fornecer uma script que:

 

 -> Para a pedra sumir, preciso que dois players fiquem em 2 pizos, que o local possa ser editável.

 

2# Se possível, gostaria de aproveitar e pedir uma outra script, que é parecida.

 

 -> Ao invés da pedra sumir com os dois players ela sumirá com a ativação de uma Alavanca.

Link para o post
Compartilhar em outros sites

Como assim?

Você quer dois metodos de abertura ?

Uma dos dois players pisando

E outra da alavanca ?

Onde ficaria a alavanca ?

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Não, são duas coisas diferentes.

 

 Quero uma que a pedra suma pisando em dois pisos e outra que seja liberada atravéz de uma alavanca.

Link para o post
Compartilhar em outros sites
  • Solução

Não detalhei o script com mensagens ao jogador, efeitos nem nada do tipo. Só fiz o que você pediu mesmo.

1º código:

function onStepIn(cid, item, position, fromPosition)
    local cfg = {
        positions = {
            {x = x, y = y, z = z},     --Posições dos jogadores.
            {x = x, y = y, z = z},
        },
        rock_id = xxx,                 --ID da pedra.
        rock_position = {x = x, y = y, z = z},    --Posição da pedra.
    }
    if not isPlayer(cid) then
        return true
    end
    for _, posis in pairs(cfg.positions) do
        local creature = getTopCreature(posis).uid
        if not isCreature(creature) or not isPlayer(creature) then
            return true
        end
    end
    local rock = getTileItemById(cfg.rock_position, cfg.rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
    end
    return true
end

2º código:

function onUse(cid, item, fromPosition, item2, toPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
    end
    return true
end

Suponho que saiba fazer as tags. Caso contrário, informe aqui.

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Zipter, ficou perfeito.

 

Só uma dúvida, tem como fazer a pedra voltar? 

 

-> No caso dos players, se um sair do pizo a pedra já volta.

 

-> No caso da alavanca, depois de 60 segudos a pedra volta.

Link para o post
Compartilhar em outros sites

Vê se isso resolve:

function onStepIn(cid, item, position, fromPosition)
    local cfg = {
        positions = {
            {x = x, y = y, z = z},     --Posições dos jogadores.
            {x = x, y = y, z = z},
        },
        rock_id = xxx,                 --ID da pedra.
        rock_position = {x = x, y = y, z = z},    --Posição da pedra.
    }
    if not isPlayer(cid) then
        return true
    end
    for _, posis in pairs(cfg.positions) do
        local creature = getTopCreature(posis).uid
        if not isCreature(creature) or not isPlayer(creature) then
            return true
        end
    end
	if not getPlayerPosition(cid) == cfg.postions then
    doCreateItem(cfg.rock_id, 1, cfg.rock_position)	
	end
	    local rock = getTileItemById(cfg.rock_position, cfg.rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
    end
    return true
end

Depois vejo a da alavanca...

se eu estiver errado, só colocar de volta o script do zipter98.


function onUse(cid, item, fromPosition, item2, toPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
addEvent(doCreateItem, 60 * 1000,cfg.rock_id,1,cfg.rock_position)
    end
    return true
end

Ps: Não sei muito bem mexer com o addevent, nunca usei...

 

mas qualquer coisa tem o backup no post do zipter..

 

919894 quando você entrar, vê se algum que eu pus presta...

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

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

 

-> No caso dos players, se um sair do pizo a pedra já volta.

function onStepOut(cid, item, position, fromPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock < 1 then
        doCreateItem(rock_id, 1, rock_position)
    end
    return true
end
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

zipter98 A da alavanca que eu fiz ta certo ?

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

A ideia do addEvent está certa, porém os parâmetros, não exatamente.

addEvent(doCreateItem, 60 * 1000,cfg.rock_id,1,cfg.rock_position)

Como pode-se notar, você chamou por cfg.rock_id e cfg.rock_position. Isso estaria certo se rock_id e rock_position estivessem numa tabela de nome cfg. Nesse caso, porém, elas são variáveis locais.

Há duas alternativas de correção para seu código.

A primeira, criando a tabela cfg e colocando rock_id e rock_position nela:

function onUse(cid, item, fromPosition, item2, toPosition)
    local cfg = {
        rock_id = xxx,                             --ID da pedra.
        rock_position = {x = x, y = y, z = z},     --Posição da pedra.
    }
    local rock = getTileItemById(cfg.rock_position, cfg.rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
        addEvent(function()
            doCreateItem(cfg.rock_id, 1, cfg.rock_position)
        end, 60 * 1000)
    end
    return true
end
A segunda, apenas alterando os parâmetros de doCreateItem:
function onUse(cid, item, fromPosition, item2, toPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
        addEvent(function()
            doCreateItem(rock_id, 1, rock_position)
        end, 60 * 1000)
    end
    return true
end
Se você olhar bem, perceberá que alterei o addEvent. Esta função pode ser escrita de duas formas: a primeira, que você já conhece, e esta outra. A que utilizei, pessoalmente, acho melhor e mais segura. Uma vantagem que ela apresenta, demonstrarei em códigos.
addEvent(doPlayerSendCancel, 30 * 1000, cid, "Hi.")
Se, no momento que o doPlayerSendCancel for executado, o jogador estiver offline, ocorrerá o erro de player not found. Para evitar isso, faria-se:
local function sendMessage(cid)
    if isPlayer(cid) then
        doPlayerSendCancel(cid, "Hi.")
    end
end
addEvent(sendMessage, 30 * 1000, cid)
Para evitar o trabalho de fazer uma função, e depois executá-la em um addEvent, você poderia, simplesmente:
addEvent(function()    
    if isPlayer(cid) then
        doPlayerSendCancel(cid, "Hi.")    
    end
end, 30 * 1000)
Basicamente, você "cria" uma função dentro do addEvent. Essa maneira é mais prática e segura do que a que normalmente vemos (minha opinião, claro).
ps: não sou bom com explicações, mas espero que você entenda. O melhor jeito de entender isso é na prática mesmo.
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Poha , confundi os scripts, pensei que a tab tava no outro também, valeu zipter, pela explicação...

 

 

Aliás , não foi uma má explicação, entendi tudo...

eu tinha usado o function() antes, mas eu não sabia como funcionava, aí apelei por esse jeito...

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

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Pega o do zipter, o meu vai dar variável global com valor nulo...

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Se é de clicar, é só action, função ao usar...

 

 

Adicione isso no actions.xml , veja se o actionid não aparece em outra tag, veja se é único.

<action actionid="5434" script="alavancapedra.lua"/>

Agora vá em actions>scripts e copie e cole qualquer arquivo lua de lá, e renomeie como alavancapedra, nele coloque o script do zipter, que fiz errado.

function onUse(cid, item, fromPosition, item2, toPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock > 0 then
        doRemoveItem(rock, 1)
        addEvent(function()
            doCreateItem(rock_id, 1, rock_position)
        end, 60 * 1000)
    end
    return true
end

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites
function onStepOut(cid, item, position, fromPosition)
    local rock_id = xxx                             --ID da pedra.
    local rock_position = {x = x, y = y, z = z}     --Posição da pedra.
    local rock = getTileItemById(rock_position, rock_id).uid
    if rock < 1 then
        doCreateItem(rock_id, 1, rock_position)
    end
    return true
end

Zipter,

 

 me ajuda a instalar esse script? Preciso instalar em movements?

Link para o post
Compartilhar em outros sites

Exato, 

 

no movements.xml você adiciona essa tag.

<movevent type="StepOut" actionid="XXXX" event="script" value="pisopedra.lua"/>

Os XXXX é para você colocar uma actionid que não tem no arquivo .xml.

 

 

Crie um script dentro de movements/scritps e coloque esse script dentro.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

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