| 07-25-2006, 08:57 PM | #1 |
Hey Guys, I have below a slightly modified version of the "Domino Theory." You will notice when the caster gets attacked, everything gets shuffled. What I need, is for this "shuffle," to occur after the images are created originally. So, spell is cast, images are created in a line and then it shuffles right after the last image is made. So just that addition and I am golden! JASS://*************************************************************************************************************** //* * //* D O M I N O T H E O R Y * //* Actual Code * //* v1.0 * //* * //* By: Rising_Dusk * //* * //*************************************************************************************************************** //*************************************************************************************************************** //*These are the input constants for the spell's use in any given map. //* constant function DThe_HeroAbility takes nothing returns integer return 'A000' //Rawcode of the Domino Theory hero ability in your map. endfunction constant function DThe_IllusionAbility takes nothing returns integer return 'A001' //Rawcode of the Domino Theory illusion ability in your map. endfunction constant function DThe_IllusionDummy takes nothing returns integer return 'h000' //Rawcode of a dummy caster in your map. endfunction constant function DThe_IllusionCount takes integer level returns integer return 1+(1*level) //Count of how many illusions are created in domino fashion. endfunction constant function DThe_IllusionInterval takes integer level returns real return .25+(0*level) //This is the time between illusion spawns. endfunction constant function DThe_LevelUpIllusion takes nothing returns boolean return true //If this is true, the illusion spell on the dummy units will //level with the hero spell. If false it simply will not. endfunction constant function DThe_MaxDistOfIllu takes integer level returns real return 100.0+(0*level)//This returns the distance between the caster and the illusions spawned. endfunction constant function DThe_CasterFX takes nothing returns string return "Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl" //This is the FX played on the caster when images are being made. endfunction constant function DThe_IlluFX takes nothing returns string return "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl" //This is the FX played on the illusions when summoned. endfunction constant function DThe_ShuffleFX takes nothing returns string return "Abilities\\Spells\\Human\\Invisibility\\InvisibilityTarget.mdl" //This is the FX played when the images and caster are shuffled. endfunction //*************************************************************************************************************** //* * //* Custom Functions [MISC] * //* * //*************************************************************************************************************** //*************************************************************************************************************** //* * //* End Custom Functions [MISC] * //* * //*************************************************************************************************************** function DThe_Base_Conditions takes nothing returns boolean return GetSpellAbilityId() == DThe_HeroAbility() endfunction function DThe_IlluCast_Conditions takes nothing returns boolean return IsUnitIllusion(GetSummonedUnit()) and GetUnitTypeId(GetSummoningUnit()) == DThe_IllusionDummy() and GetHandleInt(GetSummoningUnit(), "r") == 1 endfunction function DThe_Shuffle_Death_Actions takes nothing returns nothing local trigger death = GetTriggeringTrigger() local triggeraction deatha = GetHandleTriggerAction(death, "deatha") local trigger dmg = GetHandleTrigger(death, "dmg") local triggeraction dmga = GetHandleTriggerAction(death, "dmga") local group g = GetHandleGroup(death, "g") local unit u = GetDyingUnit() local integer count if IsUnitInGroup(u, g) then call GroupRemoveUnit(g, u) set bj_groupCountUnits = 0 call ForGroup(g, function CountUnitsInGroupEnum) set count = bj_groupCountUnits if count <= 0 then call FlushLocals(death) call TriggerRemoveAction(death, deatha) call DestroyTrigger(death) call FlushLocals(dmg) call TriggerRemoveAction(dmg, dmga) call GroupClear(g) call DestroyGroup(g) endif endif set deatha = null set death = null set dmga = null set dmg = null set g = null endfunction function DThe_Shuffle_Actions takes nothing returns nothing local trigger trg = GetTriggeringTrigger() local group g = GetHandleGroup(trg, "g") local group g2 = CreateGroup() local group g3 = CreateGroup() local unit u = GetHandleUnit(trg, "u") local unit s local unit d local real x1 local real x2 local real y1 local real y2 set bj_groupAddGroupDest = g2 call ForGroup(g, function GroupAddGroupEnum) call GroupAddUnit(g2, u) set bj_groupAddGroupDest = g3 call ForGroup(g2, function GroupAddGroupEnum) loop set s = FirstOfGroup(g2) exitwhen s == null set d = GroupPickRandomUnit(g3) set x1 = GetUnitX(s) set y1 = GetUnitY(s) set x2 = GetUnitX(d) set y2 = GetUnitY(d) call SetUnitX(d, x1) call SetUnitY(d, y1) call ShowUnit(d, false) call ShowUnit(d, true) if GetLocalPlayer() == GetOwningPlayer(d) then call SelectUnit(d, true) endif call DestroyEffect(AddSpecialEffectTarget(DThe_ShuffleFX(), d, "chest")) call SetUnitX(s, x2) call SetUnitY(s, y2) call ShowUnit(s, false) call ShowUnit(s, true) if GetLocalPlayer() == GetOwningPlayer(s) then call SelectUnit(s, true) endif call DestroyEffect(AddSpecialEffectTarget(DThe_ShuffleFX(), s, "chest")) call GroupRemoveUnit(g2, s) endloop call GroupClear(g2) call DestroyGroup(g2) call GroupClear(g3) call DestroyGroup(g3) set trg = null set g2 = null set g3 = null set d = null set s = null set g = null set u = null endfunction function DThe_IlluSpawn_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local trigger trg = GetHandleTrigger(t, "trg") local unit u = GetHandleUnit(t, "u") local unit d = CreateUnit(GetOwningPlayer(u), DThe_IllusionDummy(), GetUnitX(u)+300, GetUnitX(u)+300, 0) local integer lvl = GetHandleInt(t, "lvl") local integer i = GetHandleInt(trg, "i") if i > 1 then call UnitAddAbility(d, 'Aloc') call UnitAddAbility(d, 'Avul') call UnitAddAbility(d, DThe_IllusionAbility()) if DThe_LevelUpIllusion() then call SetUnitAbilityLevel(d, DThe_IllusionAbility(), lvl) endif call SetHandleInt(d, "r", 1) call IssueTargetOrderById(d, 852274, u) call UnitApplyTimedLife(d, 'BTLF', 1.0) endif set trg = null set t = null set d = null endfunction function DThe_IlluCast_Actions takes nothing returns nothing local trigger trg = GetTriggeringTrigger() local triggeraction ta = GetHandleTriggerAction(trg, "ta") local triggercondition tc = GetHandleTriggerCondition(trg, "tc") local timer t = GetHandleTimer(trg, "t") local unit sd = GetSummonedUnit() local unit lc = GetHandleUnit(trg, "lc") local unit u = GetHandleUnit(trg, "u") local integer i = GetHandleInt(trg, "i") local integer lvl = GetUnitAbilityLevel(u, DThe_HeroAbility()) local real x = GetUnitX(u) local real y = GetUnitY(u) local real a = 57.29582 * Atan2(GetUnitY(lc) - y, GetUnitX(lc) - x) local real d = DThe_MaxDistOfIllu(lvl) local group g = GetHandleGroup(trg, "g") local trigger dmg local triggeraction dmga local trigger death local triggeraction deatha if lc == null then set a = GetUnitFacing(u)+90 else set x = GetUnitX(lc) set y = GetUnitY(lc) endif set x = x + d * Cos(a * 0.01745) set y = y + d * Sin(a * 0.01745) call SetUnitPosition(sd, x, y) call SetUnitFacing(sd, GetUnitFacing(u)) if GetLocalPlayer() == GetOwningPlayer(u) then call SelectUnit(sd, true) endif call DestroyEffect(AddSpecialEffect(DThe_CasterFX(), GetUnitX(u), GetUnitY(u))) call DestroyEffect(AddSpecialEffect(DThe_IlluFX(), GetUnitX(sd), GetUnitY(sd))) call GroupAddUnit(g, sd) call SetHandleInt(trg, "i", i-1) call SetHandleHandle(trg, "lc", sd) set i = i-1 if i == 0 then call FlushLocals(trg) call TriggerRemoveAction(trg, ta) call TriggerRemoveCondition(trg, tc) call DestroyTrigger(trg) call FlushLocals(t) call PauseTimer(t) call DestroyTimer(t) set dmg = CreateTrigger() set dmga = TriggerAddAction(dmg, function DThe_Shuffle_Actions) set death = CreateTrigger() set deatha = TriggerAddAction(death, function DThe_Shuffle_Death_Actions) call TriggerRegisterUnitEvent(dmg, u, EVENT_UNIT_ATTACKED) call TriggerRegisterAnyUnitEventBJ(death, EVENT_PLAYER_UNIT_DEATH) call SetHandleHandle(dmg, "g", g) call SetHandleHandle(dmg, "u", u) call SetHandleHandle(death, "g", g) call SetHandleHandle(death, "dmg", dmg) call SetHandleHandle(death, "dmga", dmga) call SetHandleHandle(death, "deatha", deatha) endif set deatha = null set death = null set dmga = null set dmg = null set trg = null set ta = null set tc = null set sd = null set lc = null set g = null set t = null set u = null endfunction function DThe_Base_Actions takes nothing returns nothing local unit u = GetSpellAbilityUnit() local timer t = CreateTimer() local integer lvl = GetUnitAbilityLevel(u, DThe_HeroAbility()) local group g = CreateGroup() local boolexpr b = Condition(function DThe_IlluCast_Conditions) local trigger trg = CreateTrigger() local triggeraction ta = TriggerAddAction(trg, function DThe_IlluCast_Actions) local triggercondition tc = TriggerAddCondition(trg, b) call TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_UNIT_SUMMON) call SetHandleHandle(trg, "u", u) call SetHandleHandle(trg, "ta", ta) call SetHandleHandle(trg, "tc", tc) call SetHandleHandle(trg, "lc", null) call SetHandleHandle(trg, "t", t) call SetHandleHandle(trg, "g", g) call SetHandleInt(trg, "i", DThe_IllusionCount(lvl)) call SetHandleInt(t, "lvl", lvl) call SetHandleHandle(t, "u", u) call SetHandleHandle(t, "trg", trg) call TimerStart(t, DThe_IllusionInterval(lvl), true, function DThe_IlluSpawn_Timer) call DestroyBoolExpr(b) set trg = null set b = null set g = null set t = null set u = null endfunction //****************************************************************************** //*This is the InitTrig. Hooray, InitTrig! //* function InitTrig_DThe takes nothing returns nothing set gg_trg_DThe = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_DThe, EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_DThe, Condition(function DThe_Base_Conditions)) call TriggerAddAction(gg_trg_DThe, function DThe_Base_Actions) endfunction Post 2: Other problem I am experiencing is Custom Script problems. RD uses a modified version of the Handle Variable system. I can't use his without fucking up other spells in my map. I use the standard one so if someone could change whats needed, would be greatly appreciated. I tried copying all the custom script from the demo map and it still gave me errors. Edited by Blade.dk. Reason: Double posting. |
| 07-27-2006, 07:06 AM | #2 |
I addressed this on AIM, so this topic was solved already. :P |
| 07-27-2006, 07:20 AM | #3 |
Rising is ownage. |
| 07-27-2006, 12:26 PM | #4 |
And you must learn not to double post, Karawasa. |
