FA
pedido

[Pedido] Usar Fire Bug na Parede e Ser Teleportado

Por Farathor, 13 de set. de 2015 em Scripts

10
1.4k
FarathorF
13 de setembro de 2015 às 13:13

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

zipter98Z
13 de setembro de 2015 às 19:24

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 Setembro 13 por zipter98

FarathorF
15 de setembro de 2015 às 09:15

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?

MartelixM
15 de setembro de 2015 às 10:17

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 Setembro 15 por Martelix

FarathorF
15 de setembro de 2015 às 10:53

na primeira posição, é a posição da parede e na segunda é para onde será teleportado?

MartelixM
15 de setembro de 2015 às 15:34

Exato.

FarathorF
15 de setembro de 2015 às 19:29

e a tag do xml?

zipter98Z
15 de setembro de 2015 às 20:14

@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 Setembro 15 por zipter98

MartelixM
16 de setembro de 2015 às 09:29

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 :/

1 mês depois...
LumusL
26 de outubro de 2015 às 23:21

Tópico Movido
Este tópico foi movido de "OTServSuporte OTServSuporte Scripting"
para "OTServSuporte OTServSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".