wc3edit.net
https://forum.wc3edit.net/

3rd Spell
http://forum.wc3edit.net/deprotection-cheating-f64/3rd-spell-t1290.html
Page 1 of 1

Author:  namespoofer [ June 23rd, 2007, 10:11 am ]
Post subject:  3rd Spell

Mmk.. I've decided to try and make a spell that uses a dummy unit! First time ever using dummy units... .. .

Ok, I have this custom function in my header:
Code:
function CreateDummy takes location l, player p, integer abil, integer lev returns unit
    local unit u = CreateUnitAtLoc(p, 'h001', l, 0)
    call UnitAddAbility(u, abil)
    call SetUnitAbilityLevel(u, abil, lev)
    return u
endfunction


Here is the trigger that when a unit casts the spell(frost armor), it adds the target unit to a unit group..
Code:
function icecond takes nothing returns boolean
return(GetSpellAbilityId()=='A001')
endfunction

function iceact takes nothing returns nothing
local unit u=GetSpellTargetUnit()
call GroupAddUnitSimple(u,udg_ice_armor_group)
call PolledWait(150.00)
call GroupRemoveUnitSimple(u,udg_ice_armor_group)
endfunction

function InitTrig_icyarmor takes nothing returns nothing
set gg_trg_icyarmor=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_icyarmor,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_icyarmor,Condition( function icecond))
call TriggerAddAction(gg_trg_icyarmor,function iceact)
endfunction


And here is where it checks when a unit is attacked if the attacked unit has frost armor, to spawn a dummy caster, give him the frost nova ability, cast it, then freeze the attacking unit.. Which doesn't work worth a shit.. (What's new):
Code:
function icycond takes nothing returns boolean
return(IsUnitInGroup(GetTriggerUnit(),udg_ice_armor_group))
endfunction

function icyact takes nothing returns nothing
local unit attacker=GetAttacker()
local unit u=GetTriggerUnit()
local unit dummy
local location l=GetUnitLoc(u)
local player p=GetOwningPlayer(u)
local integer abil='A003'
local integer lev=1
local real x=GetUnitX(attacker)
local real y=GetUnitY(attacker)
call RemoveLocation(l)
call CreateDummy(l,p,abil,lev)
set dummy=GetLastCreatedUnit()
call IssueTargetOrderBJ(dummy,"frostnova",attacker)
call DestroyEffect(AddSpecialEffect("Doodads\\Icecrown\\Rocks\\Icecrown_Crystal\\Icecrown_Crystal6.mdl",x,y))
call PauseUnitBJ(true,attacker)
call PolledWait(.3)
call PauseUnitBJ(false,attacker)
set attacker=null
set u=null
set dummy=null
set l=null
set p=null
endfunction


function InitTrig_icyarmorduration takes nothing returns nothing
set gg_trg_icyarmorduration=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_icyarmorduration,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_icyarmorduration,Condition(function icycond))
call TriggerAddAction(gg_trg_icyarmorduration,function icyact)
endfunction


Thanks in advance,
Spoofzz

Author:  Aero [ June 23rd, 2007, 1:53 pm ]
Post subject:  Re: 3rd Spell

Code:
//Config
constant function IcyArmor takes nothing returns integer
return('????') //Replace ???? with your Icy Armor ability
endfunction
constant function IcyArmorBuffId takes nothing returns integer
return('????') //Replace ???? with the Icy Armor buff
endfunction
constant function DummyId takes nothing returns integer
return('????')  //Replace ???? with your Dummy's ID
endfunction
constant function DummyAbilCode takes nothing returns integer
return('????') //Replace ???? with your Dummy frost nova
endfunction
constant function MeleeOnly takes nothing returns boolean
return true //Change this to true you want the spell to hit ranged units
endfunction
//Endconfig

function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
endfunction
function FilterUnits takes nothing returns boolean
local unit u=GetEventDamageSource()
local unit t=GetTriggerUnit()
local boolean b=true
if IsUnitAlly(u,GetOwningPlayer(t)) then
set b=false
elseif MeleeOnly() then
if DistanceBetweenXY(GetUnitX(u),GetUnitY(u),GetUnitX(t),GetUnitY(t))>200 then
set b=false
endif
endif
set u=null
set t=null
return b
endfunction
function icyact takes nothing returns nothing
local unit u=GetEventDamageSource()
local player p=GetOwningPlayer(GetTriggerUnit())
local real x=GetUnitX(u)
local real y=GetUnitY(u)
local unit d=CreateUnit(p,DummyId(),x,y,270)
call UnitAddAbility(d,DummyAbilCode())
call IssueTargetOrder(d,"frostnova",u)
call UnitApplyTimedLife(d,'BTLF',2)
call DestroyEffect(AddSpecialEffect("Doodads\\Icecrown\\Rocks\\Icecrown_Crystal\\Icecrown_Crystal6.mdl",x,y))
call PauseUnit(u,true)
call PolledWait(.3)
call PauseUnit(u,false)
set u=null
set p=null
set d=null
endfunction
function icecond takes nothing returns boolean
return(GetSpellAbilityId()==IcyArmor())
endfunction
function iceact takes nothing returns nothing
local trigger t=CreateTrigger()
local boolexpr b=Condition(function FilterUnits)
local triggercondition tc=TriggerAddCondition(t,b)
local triggeraction ta=TriggerAddAction(t,function icyact)
local boolean ew=false
local unit u=GetSpellTargetUnit()
call DestroyBoolExpr(b)
call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_DAMAGED)
loop
set ew=(GetUnitState(u,UNIT_STATE_LIFE)<=0)or(GetUnitAbilityLevel(u,IcyArmorBuffId())<1)
exitwhen ew==true
call TriggerSleepAction(1.00)
endloop
call DisableTrigger(t)
call TriggerRemoveCondition(t,tc)
call TriggerRemoveAction(t,ta)
call DestroyTrigger(t)
set t=null
set b=null
set tc=null
set ta=null
set u=null
endfunction
function InitTrig_icyarmor takes nothing returns nothing
set gg_trg_icyarmor=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_icyarmor,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_icyarmor,Condition(function icecond))
call TriggerAddAction(gg_trg_icyarmor,function iceact)
endfunction

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/