Ir para conteúdo

Featured Replies

Postado

0100001101101111011001000110010101110011001000000110010001100101011101100110010101101100011011110111000001100101011001000010000001100010011110010010000001010011011101010110100101100011011010010110010001100101

Eu observei que muitos desconhecem a New Library v. 1.2, feita por (um grande amigo e programador/scripter) xWhiteWolf. Então resolvi fazer o uso de algumas de suas funções para tentar expandir o reconhecimento da existência delas, que podem ser muito úteis em diversas situações.

Bom, "loop effect" é uma função com uma condição de teste verdadeira que nunca termina (loop) sobre um shoot type effect (os distance effects). Quando aplicada a um creatureID, gera efeitos de distância infinitos nas posições entorno do mesmo.

Porém, eu fiz pequenas alterações na função original para ficar adequada à talkaction.

Primeiramente, adicione as seguintes funções à sua lib, no arquivo 050-function.lua (data/lib):

function loopEffect(uid, effect, key) -- modified function of xWhiteWolfs library
    local delay = 0.3 -- exhausted do efeito em decimais, sendo 0.3 = 300 milissegundos
    local effectPositions = getPositionsByDirection(uid)
    doSendDistanceShoot(effectPositions[math.random(#effectPositions)], effectPositions[math.random(#effectPositions)], effect)
    addEvent(function()
        if isCreature(uid) and getPlayerStorageValue(uid, key) >= 0 then
            loopEffect(uid, effect, key)
        end
    end, 1000 * delay)
    return true
end

function getPositionsByDirection(uid)
    pos = getCreaturePosition(uid)
    positionsByDirection = {
        [0] = {
        [1] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [2] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0},
        [3] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [4] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0},
        [5] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [6] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0},
        [7] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [8] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0},
        [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0}
    },
        [1] = {
        [1] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [2] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0},
        [3] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [4] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0},
        [5] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [6] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0},
        [7] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [8] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0},
        [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0}
    },
        [2] = {
        [1] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [2] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0},
        [3] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [4] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0},
        [5] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [6] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0},
        [7] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [8] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0},
        [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0}
    },
        [3] = {
        [1] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [2] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0},
        [3] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0},
        [4] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0},
        [5] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [6] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0},
        [7] = {x = pos.x - 1, y = pos.y + 1, z = pos.z, stackpos = 0},
        [8] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0},
        [9] = {x = pos.x, y = pos.y, z = pos.z, stackpos = 0}
    }
    }
    return positionsByDirection[getCreatureLookDirection(uid)]
end

Fiz duas maneiras de um player adquirir esse efeito:

 

  • Quest (por chest ou o que preferir):

     

loopeffquest.lua (data/actions/scripts):

local t = {
    effect = 18, -- shoot type number
    qstor = 70001, -- quest storage
    stor = 70707 -- loopEffect storage
}

function onUse(cid, item)
    if getPlayerStorageValue(cid, t.qstor) < 1 then
        setPlayerStorageValue(cid, t.qstor, 1)
        setPlayerStorageValue(cid, t.stor, t.effect)
        loopEffect(cid, t.effect, t.stor)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a magic chest and now you received a constant effect.')
    else
        doPlayerSendCancel(cid, 'You already received the constant effect before.')
    end
    return true
end

 

Tag - actions.xml (data/actions):

<action actionid="ACTIONID" script="loopeffquest.lua"/>

 

  • TalkAction de adição/remoção:

     

loopeffect.lua (data/talkactions/scripts):

function onSay(cid, words, param, channel)
    local stor = 70707 -- loopEffect storage
    local p = string.explode(param, ",")
    local pid, ts, tn = getPlayerByNameWildcard(p[1]), tostring(p[1]), tonumber(p[2])
    if (words == '/addloopeff') then
        if (param == '') then
            return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name and the loop effect (shoot type number) you want to assign to the player. Thus: /addloopeff Player, 18')
        end
        
            if (not ts or not tn or p[3]) then
                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.')
            end
            
                if (tn < 0 or tn > CONST_ANI_LAST) then
                    return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'The shoot type effect number cannot be lower than 0 and higher than '..CONST_ANI_LAST)
                end
                
            if (not pid) then
                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.')
            end
            
        if (getPlayerStorageValue(pid, stor) >= 0) then
            return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' is already with loop effect.')
        end
        
        setPlayerStorageValue(pid, stor, tn)
        loopEffect(pid, tn, stor)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You assigned the loop effect '..tn..' to the player '..ts)
    elseif (words == '/removeloopeff') then
        if (param == '') then
            return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Enter the player name you want to remove the loop effect. Thus: /removeloopeff Player')
        end
        
            if (not ts or p[2]) then
                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Invalid parameter specified.')
            end
            
                if (not pid) then
                    return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' not found.')
                end
            
            if (getPlayerStorageValue(pid, stor) < 0) then
                return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player '..ts..' is not with loop effect.')
            end
        
        setPlayerStorageValue(pid, stor, -1)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'You removed the loop effect of the player '..ts)
    end
    return true
end

 

Tag - talkactions.xml (data/talkactions):

<talkaction log="yes" words="/addloopeff;/removeloopeff" access="5" event="script" value="loopeffect.lua"/>

 

loopeffect.lua (data/creaturescripts/scripts):

function onLogin(cid)
    local stor = 70707 -- loopEffect storage
    if getPlayerStorageValue(cid, stor) >= 0 then
        loopEffect(cid, getPlayerStorageValue(cid, stor), stor)
    end
    return true
end

 

Tag - creaturescripts.xml (data/creaturescripts):

<event type="login" name="LoopEffect" event="script" value="loopeffect.lua"/>

 

Os parâmetros da talkaction são simples.

Para adicionar um loop effect ao player:

/addloopeff playerName, shootTypeNumber

Ex: /addloopeff Suicide, 18

Para remover o loop effect de um player:

/addloopeff playerName

Ex: /removeloopeff Suicide

Nota: mesmo que o player faça logout, o loopEffect retornará quando ele logar novamente. Só vai parar se você o remover do player, com a talkaction.

É isso. Talvez não seja muito útil em servidores globais, manter esse efeito de shoot type infinito.

Mas eu queria compartilhar com vocês; espero que sirva de ajuda pra alguém.

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

  • Respostas 5
  • Visualizações 883
  • Created
  • Última resposta

Top Posters In This Topic

  • 3 weeks later...
Postado

Gostei bastante, porém to com a mesma dúvida dos outros :/

 

EHUAEHAUEHAU, curti vc botar em binário o Codes developed by Suicide

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo