Chaos_Knight
New Member
- Reaction score
- 39
Is it possible to detect when a unit takes damage in Init function?
I mean like [ljass]EVENT_PLAYER_UNIT_TAKES_DAMAGE[/ljass]
But that doesnt exist.
function InitTrigger takes nothing returns nothing
local trigger t = CreateTrigger()
call Damage_RegisterEvent (t)
call Actions()
endfunction
call TriggerRegisterUnitEvent(trig, whichUnit, EVENT_UNIT_DAMAGED)
Sorry, but Laiev, when i use your code, it says: Undeclared Function Damage_RegisterEvent
//Chaos_Knight
No, but Jasshelper says: Undeclared function Damage_RegisterEvent.
I got AIDS, EVENT and Damage, latest version.
// v 1.0.4
library MovingStrike initializer InitTrigger
// +-------------------------------------------------------------------------------+
// | Moving Strikes - Created by Chaos_Knight. Requires a vJass preprocessor! |
// +-------------------------------------------------------------------------------+
// | Gives a small chance to move the Attacker to the GetAttacker() and |
// | deals damage to the GetTriggerUnit() |
// +-------------------------------------------------------------------------------+
// | How to Import: |
// | - Create a new trigger |
// | - Convert it to Custom text (Edit > Convert to Custom Text) |
// | - Replace everything there with this code |
// | - Change the constants to suit yourself |
// | - Enjoy! |
// +-------------------------------------------------------------------------------+
// |-------------|
// | Constants: |
// |-------------|
globals
// The effect created on the target when it is being possessed:
private constant string EFFECT = "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile_mini.mdl"
private constant string EFFECT2 = "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl"
private constant string EFFECT3 = "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdl"
private constant string EFFECT4 = "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"
private constant string EFFECT6 = "Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl"
// Which is attached to the targets:
private constant string EFFECT_POSITION = "weapon,left"
private unit TARGET
private constant string EFFECTPOSITION = "hand,right"
private constant string EFFECTPOS = "origin"
private constant boolean SHOWEFFECT = true //Will Show the effects(6).
private constant boolean IS_RANGED = true //If the damage is ranged
private constant boolean IS_MEELE = true //If the damage is from meele combat(128 Warcraft metres).
private constant integer RED = 90 //Red color.
private constant integer GREEN = 0 //Green color.
private constant integer BLUE = 110 //Blue color.
private constant integer ALPHA = 255 //Alpha(how much the TextTag's visible).
private constant boolean SHOWDAMAGE = true //Will create the TextTag, if true.
private constant integer DAMAGE = 35
private constant integer C = 100 // Testing Purposes.
//I Reccomend having it 1% chance. setting beyond this value may make it unbalanced.
private constant integer FROMTARGET = 128 //How Far you are moving
private constant attacktype DmgType = ATTACK_TYPE_CHAOS //Selfexplaining
private constant damagetype AtkType = DAMAGE_TYPE_FIRE//^ same
private constant weapontype WepType = WEAPON_TYPE_WHOKNOWS//No idea...
// The Raw code of the ability
private constant integer ID = 039;A008039;
endglobals
private constant function CHANCE takes integer level returns integer
return C * level
endfunction
private constant function DMG takes integer Lvl returns integer
return DAMAGE * Lvl
endfunction
// |------------------|
// | End of Constants |
// |------------------|
// DO NOT EDIT BELOW THIS LINE!
private function Cons takes nothing returns boolean
return IsUnitEnemy(TARGET , GetOwningPlayer(GetAttacker())) and GetRandomInt(0, 100) <= CHANCE(GetUnitAbilityLevel(GetAttacker(), ID)) and not IsUnitType(TARGET, UNIT_TYPE_HERO) and GetUnitAbilityLevel(GetAttacker() , ID) > 0
endfunction
private function Moving takes nothing returns nothing
local unit u = GetAttacker()
local real x1 = GetUnitX( u )
local real y1 = GetUnitY( u )
local real x2 = GetUnitX( TARGET )
local real y2 = GetUnitY( TARGET )
local real angle = Atan2(y2 - y1, x2 - x1)
local texttag TT = CreateTextTag()
set TARGET = GetTriggerUnit()
if SHOWEFFECT then
call DestroyEffect(AddSpecialEffectTarget(EFFECT, u, EFFECT_POSITION))
call DestroyEffect(AddSpecialEffectTarget(EFFECT2, u, EFFECTPOSITION))
call DestroyEffect(AddSpecialEffectTarget(EFFECT3, TARGET, EFFECTPOS))
call DestroyEffect(AddSpecialEffectTarget(EFFECT4, TARGET, EFFECTPOS))
call DestroyEffect(AddSpecialEffectTarget(EFFECT6, TARGET, EFFECTPOS))
endif
if SHOWDAMAGE then
call SetTextTagText (TT,R2S(DMG(GetUnitAbilityLevel(u, ID))) + "!", 0.023)
call SetTextTagPosUnit (TT, u, 10 )
call SetTextTagColor (TT, RED, GREEN, BLUE, 255 )
call SetTextTagVelocity (TT, 0.0355 * Cos(90. * bj_DEGTORAD), 0.0355 * Sin(90. * bj_DEGTORAD))
call SetTextTagVisibility (TT, true)
call SetTextTagFadepoint (TT, 2.00)
call SetTextTagLifespan (TT, 2.00)
call SetTextTagPermanent (TT, false)
endif
call SetUnitX( u , x2 + FROMTARGET * Cos(angle))
call SetUnitY( u , y2 + FROMTARGET * Sin(angle))
call UnitDamageTarget( u , TARGET , DMG(GetUnitAbilityLevel(u, ID)) , IS_RANGED , IS_MEELE , DmgType , AtkType , WepType )
set u = null
set TT = null
endfunction
//------------------------------------------------------------------
function InitTrigger takes nothing returns nothing
local trigger t = CreateTrigger()
call Damage_RegisterEvent(t)
call Moving()
endfunction
endlibrary
I did. It's 1.0.3 right?
EDIT: It's 1.0.1 right?
library MovingStrikes initializer InitTrigger
library MovingStrike initializer InitTrigger requires Damage
function InitTrigger takes nothing returns nothing
local trigger t = CreateTrigger()
call Damage_RegisterEvent(t)
call Moving()
endfunction
function InitTrigger takes nothing returns nothing
local trigger t = CreateTrigger()
call Damage_RegisterEvent(t)
call TriggerAddAction(t, function Moving) // this.
endfunction