Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

[CreatureScript] Armors Attack v0.1

Testado no servidor

Sourcers: 0.3.6pl1

Versão 8.54

 

Salve galera do TibiaKing, hoje eu venho apresentar pra vocês o sistema "Armors Attack", na versão 0.1.

 

Como funciona:

Bom, se o player estiver usando um set completo (capacete, peitoral, calça e bota), como por exemplo o magma set, toda vez que ele toma um HIT, a armadura dele pode atacar todo mundo que estiver dentro de uma área (configurável), bom no script eu coloquei uma área de 2 x 2.

Você pode criar várias combinações de armaduras, como por exemplo (DH, MPA, G-LEGS E BOH).

Eu dentro do script, configurei o "Glacier SET e o Magma SET".

 

Instalando

No diretório "Data/CreatureScript/Scripts" crie um arquivo chamado "ArmorsAttack.lua" e dentro adicione o código abaixo

local configs = {
    radius = {2, 2}, -- 2 X 2
    validSlots = {1, 4, 7, 8}, -- Head, Body, Legs, Feet
    msg = "Armors Attack!",
}

local sets = {
    [1] = {items = {7900, 7899, 7894, 7891}, distaceEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREATTACK, combat = COMBAT_FIREDAMAGE, chance = 20, min_max = {100, 300}}, -- Magma set
    [2] = {items = {7902, 7897, 7896, 7892}, distaceEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, combat = COMBAT_ICEDAMAGE, chance = 20, min_max = {100, 300}}, -- Glacier set
}

local function getCreaturesInArea(fromPos, toPos)
    local retPlayers = {}

    for x = fromPos.x, toPos.x do
        for y = fromPos.y, toPos.y do
            local player = getTopCreature({x=x, y=y, z=fromPos.z})

            if isMonster(player.uid) then

                table.insert(retPlayers, player.uid)
            end
        end
    end
    return retPlayers
end

local function table_compare(table1, table2)
    local n = 0
    local maxn = 0

    if #table1 == #table2 then
        maxn = #table1
    else
        return false
    end

    for i = 1, #table1 do
        for s = 1, #table2 do
            if table1 == table2 then

                n = n + 1
            end
        end
    end
    if n == maxn then
        return true
    end
    return false
end

function onStatsChange(cid, attacker, type, combat, value)
    local playerSet = {}

    for s = 1, #configs.validSlots do
        if getPlayerSlotItem(cid, configs.validSlots).uid > 0 then

            table.insert(playerSet, getPlayerSlotItem(cid, configs.validSlots).itemid)
        end
    end
    for i = 1, #sets do
        if table_compare(sets.items, playerSet) then
            if math.random(100) <= sets.chance then
                local creatures = getCreaturesInArea({x = getThingPos(cid).x - configs.radius[1], y = getThingPos(cid).y - configs.radius[1], z = getThingPos(cid).z}, {x = getThingPos(cid).x + configs.radius[2], y = getThingPos(cid).y + configs.radius[2]})
                if isPlayer(attacker) then

                    table.insert(creatures, attacker)
                end

                doSendMagicEffect(getThingPos(cid), sets.effect)
                doCreatureSay(cid, configs.msg, TALKTYPE_MONSTER)
                for c = 1, #creatures do
                    addEvent(function()
                        doSendDistanceShoot(getThingPos(cid), getThingPos(creatures[c]), sets.distaceEffect)
                        doAreaCombatHealth(cid, sets.combat, getThingPos(creatures[c]), 0, - sets.min_max[1],  - sets.min_max[2], sets.effect)
                    end, c * 100)
                end
            end
        end
    end
    return true
end

 

TAG:

<event type="statschange" name="ArmorsAttack" event="script" value="ArmorsAttack.lua"/>

Agora no "Login.lua" antes do ultimo "return true", adicione

registerCreatureEvent(cid, "ArmorsAttack")

Configuração:

local sets = {
    [1] = {items = {7900, 7899, 7894, 7891}, distaceEffect = CONST_ANI_FIRE, effect = CONST_ME_FIREATTACK, combat = COMBAT_FIREDAMAGE, chance = 20, min_max = {100, 300}}, -- Magma set
    [2] = {items = {7902, 7897, 7896, 7892}, distaceEffect = CONST_ANI_ICE, effect = CONST_ME_ICEATTACK, combat = COMBAT_ICEDAMAGE, chance = 20, min_max = {100, 300}}, -- Glacier set
}

Legenda:

[2] -> ID do SET, que seria sucessivo ao anterior. (Exemplo: caso o anterior for 2, o próximo ID será 3)

items -> São os ITEMS IDs do SET.

distanceEffect -> efeito de distancia, que irá partir do Player as criaturas dentro da área.

effect -> efeito que irá sair das criaturas, quando o distance effect chegar nelas

combat -> tipo de hit

chance -> chance da armadura soltar a magia

min_max -> hit minimo, e hit máximo da magia da armadura.

local configs = {
    radius = {2, 2}, -- 2 X 2
    validSlots = {1, 4, 7, 8}, -- Head, Body, Legs, Feet
    msg = "Armors Attack!",
}

Legenda:

radius -> área que a armadura irá conseguir atacar

validSlots -> slots, que a armadura deve ser equipada.

msg -> toda vez que a armadura atacar, enviará uma mensagem.

 

 

 

Foto de demonstração do sistema.

DVPPktL.png

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

  • Respostas 16
  • Visualizações 1.2k
  • Created
  • Última resposta

Top Posters In This Topic

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