Ir para conteúdo
  • 0

[Pedido] Spells Especiais 8.6


baratask

Pergunta

Boa tarde galera xtibia, venho em meio desse post fazer 2 pedidos, spells para 8.60!

 

1º Spell: Séria 1 spell em aréa 3x3, onde o jogador usa a spell e quem estiver no meio da aréa da spell perde 30% de mana e 15% de life, mas o seguinte: Essa spell for ativa ela saia em aréa trés vezes, dando 3 "wave" ... A primeira tira 10% de mana e 5% de life, a segunda mesma quantia e a terceiro também. "obs: essa spell deve ter cooldown de 20 segundos"

 

2ª Spell: Séria uma spell de invocação, onde invoco 1 estatua e ela fica parada atacando todos que estiver no alcance de 5 sqm dela, inclusive players e monstros e que esse ataque da statua seja de target em death. "obs: essa estatua fique summonada apenas por 10 segundos "

 

3ª Spell: Uma spells de summon, onde summono 1 skeleton, que ajude o jogador em combate e que ele dure apenas 15 segundos, mas durante esses 15 segundos se eu usar tal comando o summon morre e eu recebo 20% de life.

 

 

@XWhiteWolf

 

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

Posts Recomendados

  • 0

Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, em relação a chance de ataque, tempo .. fica a criterio de vocês tudo isso, pode cria a spell qualquer coisa eu modifico isso, pode ser de 2 em 2 segundos os ataques da estatua "ataque em death" lembrando que ela apos conjurada ataque todos que estive a 5 sqm dela em target aleatoriamente "so não ataque quem a sumonou"

Link para o comentário
Compartilhar em outros sites

  • 0

Skulls, as alterações nas sources que mencionei se aplicam somente ao caso do sistema da PxG. Essa estátua pode ser escrita puramente em Lua. Entretanto, ainda é preciso de mais algumas informações quanto ao sistema de ataque dela (se será de x em x tempo, constante; chance de ativação, em tempo constante ou variável/aleatório; etc). Se o autor puder informar-nos quanto a isso, suponho que não haverão mais dúvidas para começar a escrita dos pedidos.

Sim, claro são dois contextos separados. Eu queria saber pq fiz em lua uma forma de monstros lutarem entre si e fiquei pensando se com npcs seria mais fácil. Mas essa questão de vida e de morrer complica.
Link para o comentário
Compartilhar em outros sites

  • 0

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..

Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.

Link para o comentário
Compartilhar em outros sites

  • 0

eu te ajudo no primeiro e no terceiro porque to curioso em como o Zipter vai fazer o segundo..

 

Só aguenta eu ter um tempo maior livre pra sentar e testar isso pra não te entregar um código feito às pressas e que pode ter bugs.

Acabei fazendo a 2 aqui de bobeira xD

 

@@baratask

 

Tente isso:

 <instant name="Statue Attack" words="utevo res statue" lvl="1" mana="500" prem="0" exhaustion="20000" groups="1,4000" icon="23" needlearn="0" event="script" value="attack/statue.lua">
        <vocation id="1"/>
        <vocation id="2"/>
        <vocation id="3"/>
        <vocation id="4"/>
        <vocation id="5"/>
        <vocation id="6"/>
        <vocation id="7"/>
        <vocation id="8"/>
    </instant>

Em um arquivo chamado statue.lua, dentro de spells/attack coloque o codigo:

local config = {
    statue = 1444,
    range = 5,
    max_dmg = -150,
    min_dmg = -50,
    hit_delay = 1000,
    statue_time = 10*1000,
    cd = 20,
    stg = 5570
}

local max_hits = config.statue_time/config.hit_delay

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, 0, config.min_dmg, 0, config.max_dmg)

local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 1000)

function removeItem(pos)
    doRemoveItem(getTileItemById(pos, config.statue).uid)
end

function attackSpecs(cid, pos, var, hits)
n = hits or 0

    if n >= max_hits then return false end

    local spec = getSpectators(pos, config.range, config.range)
    i = spec[math.random(1, #spec)]
    
if #spec <= 1 then return false end
    while(i == cid) do
        i = spec[math.random(1, #spec)] 
    end
        if isCreature(i) then
            var.pos = getCreaturePosition(i)
            doSendDistanceShoot(pos, var.pos, CONST_ANI_SUDDENDEATH)
            doCombat(cid, combat, var)
        end

    addEvent(attackSpecs, config.hit_delay, cid, pos, var, n+1)
end

function itemInteraction(cid, pos, var)
    attackSpecs(cid, pos, var)
    addEvent(removeItem, config.statue_time, pos)
end

function onCastSpell(cid, var)
    if not isPlayer(cid) then return false end

    if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
        doAddCondition(cid, condition)
        setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
        local pos = Position(getCreaturePosition(cid).x+1, getCreaturePosition(cid).y, getCreaturePosition(cid).z)
        doCreateItem(config.statue, 1, pos)
        itemInteraction(cid, pos, var)
    else
        doPlayerSendCancel(cid, "You're exhausted.")
    end
    return true
end

 

Me dê retorno.

 

gif dela:

giphy.gif

Abraços,

 

ps: você não deu maiores detalhes como no que depende o dano, velocidade dos hits, nem cooldown, qual estatua usar, etc. Então fiz do jeito que preferi, mas é altamente customizável basta mexer/pedir.

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

  • 0

Terceira:


    <instant name="Skell Summon" words="utevo res skell" lvl="1" mana="500" prem="0" exhaustion="1" groups="1,1" icon="23" needlearn="0" event="script" value="attack/skellsummon.lua">
        <vocation id="1"/>
        <vocation id="2"/>
        <vocation id="3"/>
        <vocation id="4"/>
        <vocation id="5"/>
        <vocation id="6"/>
        <vocation id="7"/>
        <vocation id="8"/>
    </instant>
local config = {
    creature = "Demon",
    summon_time = 15*1000,
    cd = 20,
    stgs = {cd = 5571, remove = 5572},
    life_percent = 20
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)

local condition = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition, CONDITION_PARAM_TICKS, 15 * 1000)

function removeSummon(cid)
    if getPlayerStorageValue(cid, config.stgs.remove) == -1 then return false end

    if not isPlayer(cid) then return false end

    summons = getCreatureSummons(cid)
    for _, i in pairs(summons) do
        if isCreature(i) then
            if getCreatureName(i) == config.creature then
                doRemoveCreature(i)
                setPlayerStorageValue(cid, config.stgs.remove, -1)
                doRemoveCondition(cid, CONDITION_INFIGHT)
                return true
            end
        end
    end
    return false
end

function onCastSpell(cid, var)
    if not isPlayer(cid) then return false end

    if getPlayerStorageValue(cid, config.stgs.remove) ~= -1 then
        summons = getCreatureSummons(cid)
        for _, i in pairs(summons) do
            if isCreature(i) then
                if getCreatureName(i) == config.creature then
                    doRemoveCreature(i)
                    setPlayerStorageValue(cid, config.stgs.remove, -1)
                    doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*config.life_percent/100)
                    doCombat(cid, combat, var)
                    doRemoveCondition(cid, CONDITION_INFIGHT)
                    return true
                end
            end
        end
        return false
    end

    if getPlayerStorageValue(cid, config.stgs.cd) - os.time() <= 0 then
        doAddCondition(cid, condition)
        setPlayerStorageValue(cid, config.stgs.cd, os.time() + config.cd)
        setPlayerStorageValue(cid, config.stgs.remove, 1)
        doCombat(cid, combat, var)
        monster = doSummonCreature(config.creature, getCreaturePosition(cid))
        doConvinceCreature(cid, monster)
        addEvent(removeSummon, config.summon_time, cid)
    else
        doPlayerSendCancel(cid, "You're exhausted.")
    end

    return true
end

Testa ai e ve se ta no jeito.

PS: mude o nome de Demon para o monstro que você quiser.

Abraços,

 

EDITADO:
SOBRE A PRIMEIRA SPELL ELA EH AREA 3x3 EM VOLTA DO PLAYER OU DIRECIONADA?

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

  • 0

não sei dizer... eu entendi q queria que atacasse todos mas um por vez, de forma aleatoria.

Hm, pode ser. Mudarei isso então, fica até mais simples, pq ao inves de for terá um random. xD

Editei la da forma que você sugeriu.

 

Fiz a spell1 do jeito que eu entendi, não sei se está do jeito que você queria mas com alguns ajustes chegamos lá:

    <instant name="Spell1" words="baratask spell1" lvl="1" mana="100" prem="0" exhaustion="20000" groups="1,2000" icon="23" needlearn="0" event="script" value="attack/spell1.lua">
        <vocation id="1"/>
        <vocation id="2"/>
        <vocation id="3"/>
        <vocation id="4"/>
        <vocation id="5"/>
        <vocation id="6"/>
        <vocation id="7"/>
        <vocation id="8"/>
    </instant>
local config = {
    cd = 20,
    hit_delay = 2000,
    stg = 5573,
    life_percent = 5,
    mana_percent = 10,
    hits = 3
}

local combat = createCombatObject()

local area = createCombatArea(AREA_SQUARE3X3)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY)
setCombatArea(combat, area)

function onTargetCreature(cid, target)
    if not isCreature(target) then return false end
    local healthDmg = -getCreatureHealth(target)*config.life_percent/100
    local manaDmg = -getCreatureMana(target)*config.mana_percent/100
    doSendMagicEffect(getCreaturePosition(target), CONST_ME_MAGIC_RED)
    doTargetCombatHealth(cid, target, COMBAT_LIFEDRAIN, healthDmg, healthDmg, CONST_ME_MAGIC_RED)
    doTargetCombatMana(cid, target, manaDmg, manaDmg, CONST_ME_MAGIC_BLUE)
    return true
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")

function attack(cid, var, hits)
n = hits or 0

    if n >= config.hits then return false end

    doCombat(cid, combat, var)
    addEvent(attack, config.hit_delay, cid, var, n+1)
end

function onCastSpell(cid, var)
    if not isPlayer(cid) then return false end

    if getPlayerStorageValue(cid, config.stg) - os.time() <= 0 then
        setPlayerStorageValue(cid, config.stg, os.time() + config.cd)
        attack(cid, var)
    else
        doPlayerSendCancel(cid, "You're exhausted.")
    end

    return true
end

Up, e ao cara funcionou?!

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

  • 0

Sim, de forma aleatoria rs, mas vlw mesmo pela força de vcs to muito grato pela atenção.

Por nada cara. Mais alguma coisa ou tudo resolvido?

Caso esteja, marque como resolvido para moverem o tópico. Abraços!

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

×
×
  • Criar Novo...