• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Spells] No tengo la menor idea de que hacer

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1Cảnh báo [Spells] No tengo la menor idea de que hacer el Lun Dic 11, 2017 5:05 pm

    Fremy

    avatar
    Miembro
    Miembro
    Tfs 1.2 / 1.3
    Static_
    Spell Para Monster y Player

    Como podría configurarse en la zona /data/spells/spell.xml
    Y, como podría configurar  para que un player lo haga...

    Código:
     function doAreaCombatDamage(cid, attacker, combatType, position, min, max, effect)
       --// Incase the creature disappears within 120-250ms time window
       local creature = Creature(cid)
       if not creature then
           return
       end
       doAreaCombatHealth(attacker, combatType, position, 0, min, max, effect)
    end
     
    local running = {}
     
    local function runSpell(cid, i, j, delay, radius, damage, damageType, areaEffect, distanceEffect)
       local player = Player(cid)
       --// Player doesn't exist anymore
       if not player or Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) and bit.band(player:getGroup():getFlags(), PlayerFlag_IgnoreProtectionZone) == 0 then
           stopEvent(running[cid])
           running[cid] = nil
           return
       end
       --// Maximum rounds complete
       if i > j then
           stopEvent(running[cid])
           running[cid] = nil
           return
       end
       local center = player:getPosition()
       local specs = Game.getSpectators(center, false, false, radius.x, radius.x, radius.y, radius.y)
       --// Send effects and damage creatures within radius
       local args = {nil, cid, damageType, nil, damage.min, damage.max, areaEffect}
       for i = 1, #specs do
           if specs[i]:isMonster() then
               local specPos = specs[i]:getPosition()
               args[1] = specs[i]:getId()
               args[4] = specPos
               center:sendDistanceEffect(specPos, distanceEffect)
               addEvent(doAreaCombatDamage, 120 + (center:getDistance(specPos) * 7), unpack(args))
           end
       end
       addEvent(runSpell, delay, cid, i+1, j, delay, radius, damage, damageType, areaEffect, distanceEffect)
    end
     
    local offsets = {DIRECTION_WEST, DIRECTION_NORTH, DIRECTION_EAST, DIRECTION_SOUTH}
     
    local function sendEffects(cid, delay, areaEffect, distanceEffect)
       local player = Player(cid)
       if not player or Tile(player:getPosition()):hasFlag(TILESTATE_PROTECTIONZONE) and bit.band(player:getGroup():getFlags(), PlayerFlag_IgnoreProtectionZone) == 0 then
           stopEvent(running[cid])
           running[cid] = nil
           return
       end
       local pos = player:getPosition()
       --// Send distance effects (N/E/S/W) & area effect on player
       for i = 1, #offsets do
           local fromPos = pos:setDirectionOffset(offsets[i])
           local toPos = pos:setDirectionOffset(offsets[i+1] or offsets[1])
           fromPos:sendDistanceEffect(toPos, distanceEffect)
       end
       pos:sendMagicEffect(areaEffect)
       running[cid] = addEvent(sendEffects, delay, cid, delay, areaEffect, distanceEffect)
    end
    --[[#######################################################################################]]--
    local config = {
       damage = {min = -10, max = -15},
       rounds = 80, -- number of times the spell loops (effects & damage)
       delay = 160, -- ms
       radius = {x = 3, y = 3}, -- sqm radius
       damageType = COMBAT_DEATHDAMAGE,
       areaEffect = CONST_ME_MORTAREA,
       distanceEffect = CONST_ANI_SUDDENDEATH,
    }
     
    function onCastSpell(creature, variant)
       local player = creature:getPlayer()
       if not player then
           return false
       end
       sendEffects(player:getId(), config.delay, config.areaEffect, config.distanceEffect)
       runSpell(player:getId(), 0, config.rounds, config.delay, config.radius, config.damage, config.damageType, config.areaEffect, config.distanceEffect)
       return true
    end


    Cabe destacar que no es mio...



    Última edición por Fremy el Lun Dic 11, 2017 6:58 pm, editado 1 vez

    Ver perfil de usuario https://speeddrawn.wixsite.com/dosbarth/home/categories/monstruo

    2Cảnh báo Solución el Lun Dic 11, 2017 6:01 pm

    Daisisis

    avatar
    Miembro
    Miembro
    Amigo creo que para hacer que un player lo haga debes ir hacia

    Código:
    Data/spells/spells.xml

    Y luego copias y pegas cualquier spells y veras que te sale una linea igual que esta pues la personalizas como quieras esta linea que aparece en todas las spells son las id de la vocación

    <vocation id="5"/>

    Puedes colocarle ID de vocación dependiendo que vocación quieres que haga la spells para ver todas las id's y no confundirte puedes ir a vocations.xml

    Aqui esta un script base que puedes copiar y pegar en la spells.xml abajo en la ultima linea y lo puedes editar tu mismo en value colocas la carpeta donde va el script y luego configuras que lvl quieres , cuanta mana , cuanto tiempo de espera y finalmente los nombres y todo lo demas de la linea que pide el xml

    <instant name="Great Energy Beam" words="exevo gran vis lux" lvl="29" mana="110" direction="1" exhaustion="2000" needlearn="0" event="script" value="attack/great energy beam.lua">
    <vocation id="1"/>
    <vocation id="5"/>

    Ver perfil de usuario

    Fremy

    avatar
    Miembro
    Miembro
    El problema es otro...
    Aun asi gracias

    Ver perfil de usuario https://speeddrawn.wixsite.com/dosbarth/home/categories/monstruo

    4Cảnh báo Re: [Spells] No tengo la menor idea de que hacer el Miér Dic 13, 2017 11:09 pm

    The_Pain

    avatar
    Miembro
    Miembro
    Resuelto! Caso cerrado!
    problema en la libreria, data/lib/core/position.lua
    Código:

    function Position:setDirectionOffset(dir)
        local tmp = Position.directionOffset[dir]
        if not tmp then
            return self
        end
        return Position(self.x + tmp.x, self.y + tmp.y, self.z)
    end



    Si necesitas hospedaje para tu servidor usa este enlace y mira las buenos planes de Windows y Linux:

    SevuOT Online, Version:10 and Custom.

    * Upgrade System and Augment System TFS 1.2 *
    * Upgrade System and Wand Upgrade TFS 0.4 *
    * Npc Shop System - With ModalWindows *
    * Contactarme a través de este foro por mensaje privado *
    * Si quieres aprender Lua? hablar conmigo para mas información *
    Ver perfil de usuario

    Contenido patrocinado


    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).