• 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

    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 los buenos planes de Windows y Linux:
    Si tu cuenta de PayPal no esta verificada no importara, igual aceptan pagos con cuentas no verificadas.


    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).