BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

(Resuelto) [Pedido] Vocación drena HP al atacar.

(Resuelto) [Pedido] Vocación drena HP al atacar.

Zer0


Estudiante
el script que necesito es que una vocación use arma o ataque drene hp solo esa vocación con cualquier arma.

la version que uso es OTX 7.6

Acan


Miembro
@"Zero" revisa esto creo que es lo que buscas! [Tienes que estar registrado y conectado para ver este vínculo]

Pharos


Miembro
Quieres decir Robo de vida?

http://www.blacktibia.org

Belerofonte


Administrador
Servidor\Data\Creaturescripts\... Creaturescripts.xml
Código:
<event type="attack" name="RegVocLifeDrain" event="script" value="vocLifeDrain.lua"/>
<event type="statschange" name="vocLifeDrain" event="script" value="vocLifeDrain.lua"/>

Servidor\Data\Creaturescripts\Scripts\... Login.lua (el archivo ya existente)
Código:
   registerCreatureEvent(cid, "RegVocLifeDrain")

Servidor\Data\Creaturescripts\Scripts\... vocLifeDrain.lua
Código:
function onAttack(cid, target)
    if isPlayer(cid) and isCreature(target) then
        registerCreatureEvent(target, "vocLifeDrain")
    end

    return true
end

  local lifeStealvocation = {6} -- {vocation} or {vocation, promotion}
  local lifeStealPercents = 50 -- Porcentaje de vida adquirida.

function onStatsChange(cid, attacker, type, combat, value)
  local healing = math.ceil(value * lifeStealPercents / 100)

    if isPlayer(attacker) and combat == COMBAT_PHYSICALDAMAGE then
        if getPlayerWeapon(attacker).itemid > 0 and isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, getItemInfo(getPlayerWeapon(attacker).itemid).weaponType) then
            if isInArray(lifeStealvocation, getPlayerVocation(attacker)) then

                if getCreatureHealth(attacker) < getCreatureMaxHealth(attacker) then
                    if (value + getCreatureHealth(attacker)) > getCreatureMaxHealth(attacker) then
                        healing = getCreatureMaxHealth(attacker) - getCreatureHealth(attacker)
                    end

                    doCreatureAddHealth(attacker, healing)
                    doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED)
                    doSendMagicEffect(getPlayerPosition(attacker), CONST_ME_MAGIC_RED)
                    doSendAnimatedText(getPlayerPosition(attacker), "+" .. healing .. " HP", TEXTCOLOR_GREEN)
                    doPlayerSendTextMessage(attacker, MESSAGE_STATUS_DEFAULT, "You stole " .. healing .. " health from " .. getCreatureName(cid) .. ".")
                end
            end
        end
    end

    return true    
end



Editas esto a tu gusto:
 local lifeStealvocation = {6} -- {vocation} or {vocation, promotion}
 local lifeStealPercents = 50 -- Porcentaje de vida adquirida.



Previsualización:
[Tienes que estar registrado y conectado para ver esa imagen]
Primero ataco sin espada, y luego me la pongo. Le puse rango de ataque a la cuál para poder darle desde lejos y así se vean mejor los numeritos en la imagen. La barra de vida no subía porque tenía mucha pero funciona realmente xD.



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

Zer0


Estudiante
muchas gracias me sirvió +rep
por favor de cerrar tema.

Avsilon


Miembro
No cierren aun el tema, [Tienes que estar registrado y conectado para ver este vínculo] sabrias hacer este mismo script, pero no que ocurra de forma pasiva, sino que funcione como una activa, me explico, que haga lo mismo que hace pero, teniendo que activarlo a través de un spell, tu formulas el spell y se active y haga lo mismo que has hecho arriba, pero que tenga una duración de 10 segundos tras haberla activada, y tras esos 10 segundos se desactive y tengas que volver a formular el spell para que se active.

Espero haber sido claro, gracias de antemano.

Neowar


Novato
Se cura inestable, seria mejor que se curara mas al ir subiendo de nivel

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Se cura inestable, seria mejor que se curara mas al ir subiendo de nivel
Sube al subir el daño. Si quieres, puedes quitarle el porcentaje y añadirle alguna fórmula en la que intervenga el nivel del jugador. Aunque lo hice conforme al pedido del otro señorito



[Tienes que estar registrado y conectado para ver este vínculo] escribió:No cierren aun el tema, [Tienes que estar registrado y conectado para ver este vínculo] sabrias hacer este mismo script, pero no que ocurra de forma pasiva, sino que funcione como una activa, me explico, que haga lo mismo que hace pero, teniendo que activarlo a través de un spell, tu formulas el spell y se active y haga lo mismo que has hecho arriba, pero que tenga una duración de 10 segundos tras haberla activada, y tras esos 10 segundos se desactive y tengas que volver a formular el spell para que se active.

Espero haber sido claro, gracias de antemano.
Spell:

local key, sec = 398728, 10 -- Mismo storage Key que en vocLifeDrain, Segundos que durará.

function onTargetTile(cid, pos)
   if isPlayer(cid) then
       if exhaustion.get(cid, key) == false then
           exhaustion.set(cid, key, sec)
        else
           doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
           return
       end
   end
end

 local combat = createCombatObject()
   setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
   setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")
   setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED)

function onCastSpell(cid, var)
 return doCombat(cid, combat, var)
end
vocLifeDrain:

function onAttack(cid, target)
   if isPlayer(cid) and isCreature(target) then
       registerCreatureEvent(target, "vocLifeDrain")
   end

   return true
end

 local key = 398728 -- Mismo storage Key que en el spell.
 local lifeStealvocation = {6} -- {"vocation"} or {"vocation", "promotion"}
 local lifeStealPercents = 50 -- Porcentaje de vida adquirida.

function onStatsChange(cid, attacker, type, combat, value)
 local healing = math.ceil(value * lifeStealPercents / 100)

   if isPlayer(attacker) and combat == COMBAT_PHYSICALDAMAGE then
       if getPlayerWeapon(attacker).itemid > 0 and isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, getItemInfo(getPlayerWeapon(attacker).itemid).weaponType) then
           if isInArray(lifeStealvocation, getPlayerVocation(attacker)) then

               if exhaustion.get(attacker, key) ~= false then
                   if getCreatureHealth(attacker) < getCreatureMaxHealth(attacker) then
                       if (value + getCreatureHealth(attacker)) > getCreatureMaxHealth(attacker) then
                           healing = getCreatureMaxHealth(attacker) - getCreatureHealth(attacker)
                       end

                       doCreatureAddHealth(attacker, healing)
                       doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED)
                       doSendMagicEffect(getPlayerPosition(attacker), CONST_ME_MAGIC_RED)
                       doSendAnimatedText(getPlayerPosition(attacker), "+" .. healing .. " HP", TEXTCOLOR_GREEN)
                       doPlayerSendTextMessage(attacker, MESSAGE_STATUS_DEFAULT, "You stole " .. healing .. " health from " .. getCreatureName(cid) .. ".")
                   end
               end

           end
       end
   end

   return true    
end



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#9 By Guazapen el Lun Abr 25, 2016 12:28 pm

guasapen


Miembro
Buena Travieza...! BOOM!

Avsilon


Miembro
Como siempre hecho un maquina [Tienes que estar registrado y conectado para ver este vínculo], ya puedes cerrar tema.

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.

 

¿Quién está en línea?

En total hay 1 usuario en línea: 1 Registrado, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: vicente9908

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .