FL

[Encerrado] [Pedido] Comando !fly

Por FlamesAdmin, 15 de fev. de 2014 em Tópicos Sem Resposta

resolvido
15
1.5k
15 de fevereiro de 2014 às 17:32

Eae, gostaria de um comando que qnd o player digita ele (somente qnd ele tiver em fly), ele anda sozinho, e se ele digitar dnv, ele para de andar. Nao tem exausted para usar.

 

Rep+

zipter98Z
15 de fevereiro de 2014 às 22:04

Infelizmente, não encontrei uma maneira funcional de o jogador continuar andando "infinitamente". As que encontrei, geravam algum tipo de bug (travavam o servidor e etc). Para evitar tais erros, fiz assim: após x segundos (configuráveis, claro), o jogador "se cansa". Ou seja, o comando !fly é desativado. Espero que mesmo assim o código lhe satisfaça.

PS: Como informado no script, não coloque valores muito altos nos segundos, pois o servidor pode travar.

 

local cfg = {
    storage = 918311,
    fly_storage = 17000,
    seconds = 20,       --Quantos segundos até o jogador "cansar". Recomendo não colocar um valor muito alto.
}
function isWalkable(pos)-- by Nord / editado por Omega
    if isCreature(getTopCreature(pos).uid) then
        return false
    elseif getTileInfo(pos).protection then
        return false
    else
        if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid ~= 0 then 
            if hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
                return false
            end
        end
    end
return true
end
function autoWalk(cid, id)
local a = 0
    for i = 1, (cfg.seconds * 2) do
        if getPlayerStorageValue(cid, cfg.storage) < 1 then
            break
        end
        if a == (cfg.seconds * 2) then
            setPlayerStorageValue(cid, cfg.storage, -1)
            doPlayerSendTextMessage(cid, 27, "Your character is exausted.") 
            doCreatureSay(cid, "*Puff*", TALKTYPE_MONSTER)
            break
        end
        addEvent(function()
            if not isCreature(cid) then 
                if id then
                    return db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = 918311 AND player_id = "..id)
                end
            end
            local tab = {
                [0] = {x = getThingPos(cid).x, y = getThingPos(cid).y - 1, z = getThingPos(cid).z},
                [1] = {x = getThingPos(cid).x + 1, y = getThingPos(cid).y, z = getThingPos(cid).z},
                [2] = {x = getThingPos(cid).x, y = getThingPos(cid).y + 1, z = getThingPos(cid).z},
                [3] = {x = getThingPos(cid).x - 1, y = getThingPos(cid).y, z = getThingPos(cid).z},
            }
            local lookdir = getCreatureLookDir(cid)
            local topos = tab[lookdir]
            if getPlayerStorageValue(cid, cfg.storage) < 1 then
                return true
            elseif isWalkable(topos) then
                if getTileThingByPos({x = topos.x, y = topos.y, z = topos.z, stackpos = 0}).itemid == 0 then
                    doCombatAreaHealth(cid, 0, topos, 0, 0, 0, CONST_ME_NONE)
                    doCreateItem(11676, 1, topos)
                end
                doTeleportThing(cid, topos)
                a = a + 1
            else
                setPlayerStorageValue(cid, cfg.storage, -1)
                doPlayerSendTextMessage(cid, 27, "Há algum objeto à sua frente impedindo a passagem.")
                return true
            end
        end, i * 500)
    end
end
function onSay(cid, words)
    if getPlayerStorageValue(cid, cfg.fly_storage) < 1 then
        return doPlayerSendCancel(cid, "Para usar este comando, você deve estar em Fly.")
    elseif getPlayerStorageValue(cid, cfg.storage) >= 1 then
        return setPlayerStorageValue(cid, cfg.storage, -1) and doPlayerSendTextMessage(cid, 27, "Comando !fly desativado.")
    else
        doPlayerSendTextMessage(cid, 27, "Comando !fly ativado.")
        setPlayerStorageValue(cid, cfg.storage, 1)
        autoWalk(cid, getPlayerGUID(cid))
    end
    return true
end

Editado Fevereiro 16 por zipter98

15 de fevereiro de 2014 às 23:52

Vlw mano, ta bom desse jeito msm.

Você já atingiu seu limite de reputações positivas para hoje

Jaja te dou Rep.

 

--EDIT--

Só tem um probleminha, qnd eu dou !fly no andar acima, aparece isso:

23:59 Comando !fly ativado.
23:00 Há algum objeto à sua frente impedindo a passagem.

E tipo, teria como vc por pra qnd usar !fly, ficar com uma velocidade um pouco mais alta ?

Editado Fevereiro 15 por FlamesAdmin

zipter98Z
16 de fevereiro de 2014 às 00:11

Sobre o primeiro caso, é porquê não é possível andar normalmente em pisos "vazios" (no caso do Fly, o "ar"). Como, no código, para teleportar o jogador é necessário que o piso seja "andável", retorna ao jogador esta mensagem, pelo motivo que citei. Como corrigir, é algo que vou pensar.

Sobre o segundo, logo edito o código com isso.

#EDIT: Primeiro erro, corrigido. Código alterado.

Editado Fevereiro 16 por zipter98

16 de fevereiro de 2014 às 11:17

Sem problemas.

Drk ShadowD
16 de fevereiro de 2014 às 17:49

@Zipter98

 

Aqui não da pra usar o comando quando estiver no chão, só quando no ar, e quando ta no ar, fica dando esses erros sem parar:

 

 

 

[16/02/2014 17:47:59] [Error - TalkAction Interface] 
[16/02/2014 17:47:59] In a timer event called from: 
[16/02/2014 17:47:59] data/talkactions/scripts/fly.lua:onSay
[16/02/2014 17:47:59] Description: 
[16/02/2014 17:47:59] (luaHasItemProperty) Item not found
 
[16/02/2014 17:48:00] [Error - TalkAction Interface] 
[16/02/2014 17:48:00] In a timer event called from: 
[16/02/2014 17:48:00] data/talkactions/scripts/fly.lua:onSay
[16/02/2014 17:48:00] Description: 
[16/02/2014 17:48:00] (luaHasItemProperty) Item not found
 
[16/02/2014 17:48:00] [Error - TalkAction Interface] 
[16/02/2014 17:48:00] In a timer event called from: 
[16/02/2014 17:48:00] data/talkactions/scripts/fly.lua:onSay
[16/02/2014 17:48:00] Description: 
[16/02/2014 17:48:00] (luaHasItemProperty) Item not found

zipter98Z
16 de fevereiro de 2014 às 20:33

Infelizmente, não sei o quê pode estar causando o primeiro erro com você (o de não poder usar o comando no chão). Pelo menos aqui, está funcionando perfeitamente.

Sobre o segundo erro, foi falta de atenção minha. Corrigi ele e mais um "erro". Código alterado.

PS: Sobre o pedido de aumentar a velocidade neste comando, acontece o seguinte: na verdade, o jogador se teleporta, e não "anda", como parece na prática. E o intervalo de tempo entre estes teleportes é de 500 milésimos. Ou seja, a velocidade do jogador de nada altera nisto. Tanto um jogador com slow que anula 90% de sua velocidade, quanto um jogador com o triplo de sua real velocidade "voariam" na mesma velocidade.

Porém, se você quiser mesmo que a velocidade seja aumentada, pode ser feita um cálculo com a speed do jogador para altear o intervalo de tempo.

Editado Fevereiro 16 por zipter98

16 de fevereiro de 2014 às 20:54

Infelizmente, não sei o quê pode estar causando o primeiro erro com você (o de não poder usar o comando no chão). Pelo menos aqui, está funcionando perfeitamente.

Sobre o segundo erro, foi falta de atenção minha. Corrigi ele e mais um "erro". Código alterado.

PS: Sobre o pedido de aumentar a velocidade neste comando, acontece o seguinte: na verdade, o jogador se teleporta, e não "anda", como parece na prática. E o intervalo de tempo entre estes teleportes é de 500 milésimos. Ou seja, a velocidade do jogador de nada altera nisto. Tanto um jogador com slow que anula 90% de sua velocidade, quanto um jogador com o triplo de sua real velocidade "voariam" na mesma velocidade.

Porém, se você quiser mesmo que a velocidade seja aumentada, pode ser feita um cálculo com a speed do jogador para altear o intervalo de tempo.

Bah, entao deixa sem esse bang de velocidade entao hehe. Ta pronto o código ?

zipter98Z
16 de fevereiro de 2014 às 21:40

Ahã. Ele se encontra no meu primeiro comentário (optei por editá-lo, ao invés de mandar 1 código por comentário).

16 de fevereiro de 2014 às 21:52

Conseguiu arrumar o bang de fly no andar de cima ?

zipter98Z
16 de fevereiro de 2014 às 21:55

Corrigi esse bug ontem.

16 de fevereiro de 2014 às 21:56

Ta ok entao, pode mover e obg.

zipter98Z
17 de fevereiro de 2014 às 14:28

Tópico movido para a seção de dúvidas e pedidos resolvidos.

1 mês depois...
fabiosaF
23 de março de 2014 às 10:42

me fala certo aonde eu adc as task e os locais pra mim ligar certo, porque sou novo e ali não fala aonde por e tals.

valendo rep.

4 anos depois...
StigalS
21 de abril de 2018 às 03:26
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.