Ir para conteúdo
  • Cadastre-se

[TFS 1.X] Ninja Vocation Spells


Posts Recomendados

pehMdQyi.gif

 

AREA1 = {
    {0, 0, 0},
    {0, 3, 0},
    {0, 0, 0}
}

local function sendHealingEffect(cid, position, loopCount)
    local player = Player(cid)
    if not player then
        return
    end

    position:sendDistanceEffect(player:getPosition(), CONST_ANI_SMALLHOLY)
    player:addHealth(math.max(100, 150))
    player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
    if loopCount == 0 then
        player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA)
    end
end

function onCastSpell(creature, var)
    local playerPos = creature:getPosition()
    local loopCount = 12

    creature:say('Heal me my brothers!', TALKTYPE_MONSTER_SAY)
   
    for i = 1, loopCount do
        local position = Position(playerPos.x + math.random(-4, 3), playerPos.y + math.random(-3, 2), playerPos.z)
        addEvent(doAreaCombatHealth, i * 75, creature:getId(), COMBAT_PHYSICALDAMAGE, position, createCombatArea(AREA1), 0, 0, CONST_ME_ASSASSIN)
        addEvent(sendHealingEffect, i * 75, creature:getId(), position, loopCount - i)
    end
    return false
end

 

 

 

CjIKp8V7.gif

 

local function targetEffect(cid)
    local player = Player(cid)
    if not player then
        return
    end

    local effect =  CONST_ANI_REDSTAR
    local orig = player:getPosition()
    local d1, d2 = {z = orig.z}, {z = orig.z}

    d1.x = orig.x - 5
    d2.x = orig.x + 5
    for i = -2, 2 do
        d1.y = orig.y + i
        d2.y = d1.y
        orig:sendDistanceEffect(d1, effect)
        orig:sendDistanceEffect(d2, effect)
    end

    d1.y = orig.y - 3
    d2.y = orig.y + 3
    for i = -4, 4 do
        d1.x = orig.x + i
        d2.x = d1.x
        orig:sendDistanceEffect(d1, effect)
        orig:sendDistanceEffect(d2, effect)
    end
end

local function backOldPosition(cid, oldPosition)
    local player = Player(cid)
    if not player then
        return
    end
   
    player:teleportTo(oldPosition)
    player:setGhostMode(false)
end

local function jumpEffect(cid, target)
    local player = Player(cid)
    if not player then
        return
    end

    local target = Creature(target)
    if target then
        player:getPosition():sendDistanceEffect(target:getPosition(), CONST_ANI_EXPLOSION)
    end
end

local function jumpOnTarget(cid, target, targetCount, oldPosition)
    local player = Player(cid)
    if not player then
        return
    end

    local target = Creature(target)
    if target then
        addEvent(targetEffect, 100, cid)
        player:teleportTo(target:getPosition())
        player:setGhostMode(true)
        doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -1, -100, CONST_ME_ASSASSIN)
        if targetCount == 0 then
            addEvent(backOldPosition, 400, cid, oldPosition)
        end
    end
end

local function extractRandomValuesFromTable(tbl) --By Printer(This will make sure not to select a value twice from the table)
    if #tbl == 0 then
        return false
    end
          return table.remove(tbl, math.random(#tbl))
end

function onCastSpell(creature, var)
    local targets = {}

    local playerPos = creature:getPosition()
    local spectators = Game.getSpectators(playerPos, false, false, 0, 10, 0, 10)
    for i = 1, #spectators do
        local specs = spectators[i]
        if specs ~= creature and not specs:isNpc() then
            targets[#targets+1] = specs
        end
    end

    if #targets == 0 then
        creature:sendCancelMessage('There is no targets in sight.')
        playerPos:sendMagicEffect(CONST_ME_POFF)
        return false
    end

    local targetCount = #targets
    for i = 1, #targets do
        local randTarget = extractRandomValuesFromTable(targets)
        addEvent(jumpOnTarget, i * 400, creature:getId(), randTarget:getId(), targetCount - i, playerPos)
        addEvent(jumpEffect, i * 300, creature:getId(), randTarget:getId())
    end
    return false
end

 

 

nEKfQCG5.gif

 

 

local function sendDistanceEffectDelay(cid, fromPos, toPos, effect)
    local player = Player(cid)
    if not player then
        return
    end

    fromPos:sendDistanceEffect(toPos, effect)
end

local function ninjaJumpDash(cid, target, oldPos, lastJump, back)
    local player = Player(cid)
    if not player then
        return
    end

    local target = Creature(target)
    if not target then
        player:setGhostMode(false)
        return
    end
   
    if lastJump then
        player:setGhostMode(false)
    end

    if back then
        player:teleportTo(oldPos)
    else
        player:teleportTo(target:getPosition())
    end
    doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -1, -100, CONST_ME_THUNDER)
end

function onCastSpell(creature, var)
    local cid = creature:getId()
    local playerPos = creature:getPosition()

    creature:setGhostMode(true)
    addEvent(ninjaJumpDash, 0, cid, target:getId(), playerPos, false, false)
    addEvent(sendDistanceEffectDelay, 100, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY)
    addEvent(sendDistanceEffectDelay, 300, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY)
    addEvent(ninjaJumpDash, 400, cid, target:getId(), playerPos, false, true)

    addEvent(ninjaJumpDash, 600, cid, target:getId(), playerPos, false, false)
    addEvent(sendDistanceEffectDelay, 700, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY)
    addEvent(sendDistanceEffectDelay, 1000, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY)
    addEvent(ninjaJumpDash, 1100, cid, target:getId(), playerPos, false, true)

    addEvent(ninjaJumpDash, 1300, cid, target:getId(), playerPos, false, false)
    addEvent(sendDistanceEffectDelay, 1400, cid, playerPos, target:getPosition(), CONST_ANI_ENERGY)
    addEvent(sendDistanceEffectDelay, 1700, cid, target:getPosition(), playerPos, CONST_ANI_ENERGY)
    addEvent(ninjaJumpDash, 1800, cid, target:getId(), playerPos, true, true)
    return false
end

 

C9kyGonr.gif

 

 

function isWalkable(cid, pos)
    local tile = Tile(pos)
    if not tile then
        return false
    end

    if tile:queryAdd(cid) == 1 and not tile:hasFlag(TILESTATE_PROTECTIONZONE) then
        return true
    end
    return false
end

local function jumpBehindTarget(cid, target)
    local player = Player(cid)
    local target = Creature(target)
    local targetPos = target:getPosition()
    local targetPositions = {
        north = Position(targetPos.x, targetPos.y-1, targetPos.z),
        east = Position(targetPos.x+1, targetPos.y, targetPos.z),
        west = Position(targetPos.x-1, targetPos.y, targetPos.z),
        south = Position(targetPos.x, targetPos.y+1, targetPos.z)
    }

    local targetDir = target:getDirection()
    if targetDir == NORTH then
        dir = targetPositions.south
    elseif targetDir == EAST then
        dir = targetPositions.west
    elseif targetDir == WEST then
        dir = targetPositions.east
    elseif targetDir == SOUTH then
        dir = targetPositions.north
    end
    return dir
end

local function oldPos(cid, oldPos)
    local player = Player(cid)
    if not player then
        return
    end

    player:teleportTo(oldPos)
end

local function checkHasTarget(cid, count, oldPos)
    local player = Player(cid)
    if not player then
        return
    end

    if count < 1 then
        player:setGhostMode(false)
        return
    end
   
    local target = player:getTarget()
    if target then
        local behindTarget = jumpBehindTarget(cid, target:getId())
        if isWalkable(cid, behindTarget) then
            player:teleportTo(behindTarget)
        else
            player:teleportTo(target:getPosition())
            addEvent(backOldPos, 100, cid, oldPos)
        end
        player:setDirection(target:getDirection())
        player:setGhostMode(false)
        doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -20, -100, CONST_ME_FIREATTACK)
        return true
    end
    addEvent(checkHasTarget, 1 * 100, cid, count - 1)
end

function onCastSpell(creature, var)
    local playerPos = creature:getPosition()

    creature:setGhostMode(true)
    playerPos:sendMagicEffect(CONST_ME_POFF)
    addEvent(checkHasTarget, 1 * 250, creature:getId(), 50, playerPos)
    return false
end

 

 

 

 

Tag spells.XML(configure a gosto, use o mesmo para todos os scripts acima) :

<instant name="NAME" words="NAME" lvl="1" mana="1" prem="0" aggressive="1" selftarget="0" exhaustion="1" group="attack" groupcooldown="1" needlearn="0"  script="ARQUIVO.lua">
    <vocation name="VOCATION NAME"/>
    </instant> 

Para adicionar a spell, só ir em data/spells/scripts criar um arquivo .lua para o script e adicionálo e dps ir em spells.XML colocando a tag, configurada de acordo com a spell em questão.

 

 

 

 

Créditos Printer.

 

 

 

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

As Pessoas vivem apegadas aquilo que traduzem como correto e verdadeiro,assim elas definem a realidade.

mas oque significa o correto e o verdadeiro?

 

 

Link para o post
Compartilhar em outros sites

Amigo seu conteúdo é muito bom mais poderia melhorar um pouco o tópico, adicionando um pequeno tutorial de como adicionar as spells e colocar os códigos em spoiler, pois tem muitos.

Link para o post
Compartilhar em outros sites

Colocar em spoiler buga a identação ... e não quero dar tudo na mão dos cara, pra eles ao menos ter o bom-senso de procurar aprender ou até mesmo de perguntar caso haja alguma dúvida e se isso acontecer eu estarei ensinando.

As Pessoas vivem apegadas aquilo que traduzem como correto e verdadeiro,assim elas definem a realidade.

mas oque significa o correto e o verdadeiro?

 

 

Link para o post
Compartilhar em outros sites

Colocar em spoiler buga a identação ... e não quero dar tudo na mão dos cara, pra eles ao menos ter o bom-senso de procurar aprender ou até mesmo de perguntar caso haja alguma dúvida e se isso acontecer eu estarei ensinando.

Aprovarei o tópico caso você adicione o XML e o tutorial pelo menos.

Link para o post
Compartilhar em outros sites

Pronto... se ainda não tiver dentro dos padrões, pode mover pra lixeira  :angry:

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

As Pessoas vivem apegadas aquilo que traduzem como correto e verdadeiro,assim elas definem a realidade.

mas oque significa o correto e o verdadeiro?

 

 

Link para o post
Compartilhar em outros sites

Porfavor para 8.6 *-*

 

Quando sobrar um tempo eu faço sim.

As Pessoas vivem apegadas aquilo que traduzem como correto e verdadeiro,assim elas definem a realidade.

mas oque significa o correto e o verdadeiro?

 

 

Link para o post
Compartilhar em outros sites
  • 1 year later...
  • 5 months later...
  • 5 weeks later...
Em 13/04/2015 ás 18:20, Linus disse:

pehMdQyi.gif

 

 

 

Conteúdo Oculto

 

 

 

 

CjIKp8V7.gif

 

 

 

Conteúdo Oculto

 

 

 

nEKfQCG5.gif

 

 

 

 

Conteúdo Oculto

 

 

C9kyGonr.gif

 

 

 

 

Conteúdo Oculto

 

 

 

 

 

Tag spells.XML(configure a gosto, use o mesmo para todos os scripts acima) :


<instant name="NAME" words="NAME" lvl="1" mana="1" prem="0" aggressive="1" selftarget="0" exhaustion="1" group="attack" groupcooldown="1" needlearn="0"  script="ARQUIVO.lua">
    <vocation name="VOCATION NAME"/>
    </instant> 

Para adicionar a spell, só ir em data/spells/scripts criar um arquivo .lua para o script e adicionálo e dps ir em spells.XML colocando a tag, configurada de acordo com a spell em questão.

 

 

 

 

Créditos Printer.

 

 

 

muito bom, coloquei como super spells no ot 8.6 que to criando...
rep + pra tu

vlw

Link para o post
Compartilhar em outros sites
  • 2 years later...

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Kazuya9629
      como eu fasso pro charmander usa spell Ember ea outfit dele mudar por alguns segundos
       
      base poke jornadas 
    • Por Jedian
      Olá galera, aqui eu denovo com outro post, que espero que seja útil pra vocês.
      Pois é, eu só posto spells, mas é que o resto, praticamente não tem o que inventar, sim, tem, mas o que está exatamente ao alcance de um scripter, nem fácil demais, nem impossível pra ele, é praticamente inexistente, por isso é difícil pra nós, scripters, na minha opinião, demonstrar exatamente o potencial de cada um, e em spells, cada um faz do seu jeito, ficando ruim ou não, é perfeita pra cada um que a faz, estou pensando muito em outros sistemas pra vocês, sério, mas tá difícil.
      Mudando de assunto, vamos a magia, pensei nela esfregando pedras a ideia seria uma magia que faz uma espada "costurar em linha reta"(como o nome diz) para frente do personagem de acordo com o tipo de arma usada, aí, se houver um target, ela vai até ele e dá "costuradas" conforme a distância que percorreu até chegar nele, quanto mais perto, mais "costuradas" e vice-versa.
      Vamos instalar:
      em data/spells/scripts copie um arquivo e cole-o, renomeie para algum nome, apague todo o conteúdo e cole isso dentro:



      <instant name="Sewing Straight" words="sewing straight" lvl="35" mana="0" prem="0" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="nome.lua"></instant>
      edite o nome do arquivo e ajeite conforme as preferências.
      Pronto, está instalado, nenhuma foto, pois não dá pra ter uma ideia muito boa com elas :S testem e critiquem aí.
    • Por Sociopata
      Abra data\spells\scripts cria um arquivo com nome earthquake.lua e cole isso \/


      local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STONES) setCombatParam(combat, COMBAT_PARAM_USECHARGES, TRUE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0.9, 0, 1.0, 0) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 34) setCombatParam(combat1, COMBAT_PARAM_USECHARGES, TRUE) setCombatFormula(combat1, COMBAT_FORMULA_SKILL, 0.9, 0, 1.0, 0) local area1 = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat1, area1) function onCastSpell(cid, var) doCombat(cid, combat1, var) return doCombat(cid, combat, var) end em data /spells.xml cole isso \/ <instant name="earthquake" words="exori beam" lvl="33" mana="450" prem="0" needweapon="1" exhaustion="2000" needlearn="0" event="script" value="earthquake.lua"> <vocation id="4"/>
    • Por Tricoder
      Descrição
      Estilo utito tempo, adiciona 10x mais magic levels durante 30 segundos. Para alterar, modifique essa parte:
      setConditionParam(condition2, CONDITION_PARAM_TICKS, 30000) setConditionParam(condition2, CONDITION_PARAM_STAT_MAGICLEVEL, 10) Modifique as vocações na tag também.
       
      Script
      data/spells/scripts/utitomana.lua
      local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) local condition2 = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition2, CONDITION_PARAM_TICKS, 30000) setConditionParam(condition2, CONDITION_PARAM_STAT_MAGICLEVEL, 10) setCombatCondition(combat, condition2) function onCastSpell(cid, var) local ret = LUA_ERROR if(doCombat(cid, combat, var) == LUA_NO_ERROR) then ret = LUA_NO_ERROR end return ret end data/spells/spells.xml 
      <instant name="Utito Mana" words="utito tempo mana" lvl="60" mana="450" prem="1" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="utitomana.lua"> <vocation id="3"/> <vocation id="7"/> </instant> Créditos: Acubens
       
    • Por Stigal
      Nome: Spell Paralyze Função: Paralyza o monstro/player deixando lerdos. Versão: Testada somente na "8.54". Créditos: Stigal. -
      "Pasta Servidor > Data > Spell > Scripts" crie "newparalyze.lua" e adicione: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) setConditionFormula(condition, -0.9, 0, -0.9, 0) setCombatCondition(combat, condition) function onCastSpell(cid, var)     return doCombat(cid, combat, var) end -
       
      "Pasta Servidor > Data > Spell" em spell.xml adicione:
      <instant name="paralyze" words="paralyze" lvl="40" mana="70" prem="0" range="5" needtarget="1" blockwalls="1" needweapon="1" exhaustion="2000" needlearn="0" script="newparalyze.lua">         <vocation name="VOCAÇÃO1"/>         <vocation name="VOCAÇÃO2"/>     </instant>  
       
      Atenciosamente, Stigal.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo