Ir para conteúdo
  • 0

[Pedido] Usar Fire Bug na Parede e Ser Teleportado


Farathor

Pergunta

Galera, meu pedido é o seguinte: Eu iria usar o FireBug (5468) em um certo local e o jogador que estiver usando vai se teleportar para tal local, e quando eu usar o item na parede, o item some

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Como a explicação ficou meio vaga, fiz da maneira que entendi.

 

local itemid, toPos = xxx, {x = x, y = y, z = z}      --Respectivamente, ID da parede e para onde o jogador será teleportado.
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if itemEx.itemid == itemid then
        doPlayerSendTextMessage(cid, 27, "You used your "..getItemNameById(item.itemid).." in a "..getItemNameById(itemid).." and was teleported.")
        doTeleportThing(cid, toPos)
        doRemoveItem(item.uid, 1)
    else
        doPlayerSendCancel(cid, "Use it in the correct wall.")
    end
    return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe, então o script funciona assim:

Eu tenho um FireBug, eu pego dou use nele e uso ele em uma certa parede que fica numa certa posição, quando eu faço isso eu sou teleportado para outra posição e o firebug some, agora está melhor?

Link para o comentário
Compartilhar em outros sites

  • 0

Não testei, mas 1 coisa como essa posição será única (certo?) não precisa checar o id do item da posição (toPosition) onde você usará, correto?

Portanto:

local itemid, toPos = ID_ITEM, {x = POSIÇÃO_X, y = POSIÇÃO_Y, z = POSIÇÃO_Z} -- essa variável "toPos" é a posição de onde o player usará o item e não pra onde será teleportado!!!

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if item.itemid == itemid and toPosition == toPos then
        doPlayerSendTextMessage(cid, 27, "MENSAGEM QUE VAI APARECER PARA O PLAYER AO USAR O ITEM CORRETO NA POSIÇÃO ESCOLHIDA.")
        doTeleportThing(cid, {x = POSIÇÃO_X, y = POSIÇÃO_Y, z = POSIÇÃO_Z}) -- agora sim a posição para onde o player será teleportado!
        doRemoveItem(item.uid, 1)
    else
        doPlayerSendCancel(cid, "MENSAGEM CASO O PLAYER NÃO USE O ITEM NA POSIÇÃO ESCOLHIDA.")
    end
    return true
end

Caso queira outras checagems especificas comentar aqui.

Acredito que irá funcionar, a lógica está correta.

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

  • 0

@Martelix

O único problema no seu código é a comparação de tabelas através do sinal de igualdade não ser possível.

 

@topic

local positions = {
    wallPos = {x = x, y = y, z = z},     --Posição da parede.
    toPos = {x = x, y = y, z = z}        --Para onde o jogador será teleportado.
}
 
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if toPosition.x == positions.wallPos.x and toPosition.y == positions.wallPos.y and toPosition.z == positions.wallPos.z then
        doPlayerSendTextMessage(cid, 27, "You used your "..getItemNameById(item.itemid).." in a "..getItemNameById(itemEx.itemid).." and was teleported.")
        doTeleportThing(cid, positions.toPos)
        doRemoveItem(item.uid, 1)
    else
        doPlayerSendCancel(cid, "Use it in the correct wall.")
    end
    return true
end
Tag:
<action itemid="5468" event="script" value="nome_do_arquivo.lua"/>

 

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

  • 0

Hmm, verdade @zipter98.

Tem que realizar a comparação separando x/y/z. Eu só copiei e "melhorei" (sqn) o script da primeira resposta.

E nem sei porque chequei o ID do item sendo que já vai no .xml

Não tive tempo de testar :/

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...