| 07-24-2009, 07:06 PM | #1 |
I used Blade.dk's spell tutorial to make a stomp spell. I'm trying to change the spell to a different model, but it keeps giving me an error: "Unexpected: '." Here is my code: JASS:function Trig_Stomp_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction function Stomp_Filter takes nothing returns boolean return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING) endfunction function Stomp_CopyGroup takes group g returns group set bj_groupAddGroupDest = CreateGroup() call ForGroup(g, function GroupAddGroupEnum) return bj_groupAddGroupDest endfunction function Stomp_Move takes nothing returns nothing local string s = I2S(H2I(GetExpiredTimer())) local gamecache gc = udg_AbilityCache local real x = GetStoredReal(gc, s, "x") local real y = GetStoredReal(gc, s, "y") local integer i = GetStoredInteger(gc, s, "level") local group g = Stomp_CopyGroup(I2G(GetStoredInteger(gc, s, "group"))) local real dur = GetStoredReal(gc, s, "dur")+0.05 local real ux local real uy local real a local unit f local real p = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i) local real fx = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i) if dur < 1+0.5*i then loop set f = FirstOfGroup(g) exitwhen f == null set ux = GetUnitX(f) set uy = GetUnitY(f) set a = Atan2(uy-y, ux-x) call SetUnitPosition(f, ux+40*Cos(a), uy+40*Sin(a)) if fx >= 1 then call DestroyEffect(AddSpecialEffectTarget('Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl') endif call GroupRemoveUnit(g, f) endloop call StoreReal(gc, s, "dur", dur) call StoreReal(gc, s, "speed", p) else call DestroyGroup(I2G(GetStoredInteger(gc, s, "group"))) call FlushStoredMission(gc, s) call DestroyTimer(GetExpiredTimer()) endif set gc = null call DestroyGroup(g) set g = null set f = null endfunction function Trig_Stomp_Actions takes nothing returns nothing local unit c = GetTriggerUnit() local real x = GetUnitX(c) local real y = GetUnitY(c) local integer i = GetUnitAbilityLevel(c, 'A000') local boolexpr b = Condition(function Stomp_Filter) local group g = CreateGroup() local group n local unit f local gamecache gc = udg_AbilityCache local timer t = CreateTimer() local string s = I2S(H2I(t)) call DestroyEffect(AddSpecialEffect('Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl')) call GroupEnumUnitsInRange(g, x, y, 100+50*i, b) set n = Stomp_CopyGroup(g) loop set f = FirstOfGroup(n) exitwhen f == null call UnitDamageTarget(c, f, 25*i, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null) call GroupRemoveUnit(n, f) endloop call StoreInteger(gc, s, "level", i) call StoreInteger(gc, s, "group", H2I(g)) call StoreReal(gc, s, "x", x) call StoreReal(gc, s, "y", y) call StoreReal(gc, s, "speed", 50) call TimerStart(t, 0.05, true, function Stomp_Move) set c = null call DestroyBoolExpr(b) set b = null set g = null call DestroyGroup(n) set n = null set f = null set gc = null set t = null endfunction //=========================================================================== function InitTrig_Stomp takes nothing returns nothing set gg_trg_Stomp = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Stomp, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Stomp, Condition( function Trig_Stomp_Conditions ) ) call TriggerAddAction( gg_trg_Stomp, function Trig_Stomp_Actions ) call Preload('Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl') call Preload('Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl') endfunction |
| 07-24-2009, 07:11 PM | #2 |
a ' is not the same as a ":function Trig_Stomp_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction function Stomp_Filter takes nothing returns boolean return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING) endfunction function Stomp_CopyGroup takes group g returns group set bj_groupAddGroupDest = CreateGroup() call ForGroup(g, function GroupAddGroupEnum) return bj_groupAddGroupDest endfunction function Stomp_Move takes nothing returns nothing local string s = I2S(H2I(GetExpiredTimer())) local gamecache gc = udg_AbilityCache local real x = GetStoredReal(gc, s, "x") local real y = GetStoredReal(gc, s, "y") local integer i = GetStoredInteger(gc, s, "level") local group g = Stomp_CopyGroup(I2G(GetStoredInteger(gc, s, "group"))) local real dur = GetStoredReal(gc, s, "dur")+0.05 local real ux local real uy local real a local unit f local real p = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i) local real fx = GetStoredReal(gc, s, "speed")-0.5/(1+0.5*i) if dur < 1+0.5*i then loop set f = FirstOfGroup(g) exitwhen f == null set ux = GetUnitX(f) set uy = GetUnitY(f) set a = Atan2(uy-y, ux-x) call SetUnitPosition(f, ux+40*Cos(a), uy+40*Sin(a)) if fx >= 1 then call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl") endif call GroupRemoveUnit(g, f) endloop call StoreReal(gc, s, "dur", dur) call StoreReal(gc, s, "speed", p) else call DestroyGroup(I2G(GetStoredInteger(gc, s, "group"))) call FlushStoredMission(gc, s) call DestroyTimer(GetExpiredTimer()) endif set gc = null call DestroyGroup(g) set g = null set f = null endfunction function Trig_Stomp_Actions takes nothing returns nothing local unit c = GetTriggerUnit() local real x = GetUnitX(c) local real y = GetUnitY(c) local integer i = GetUnitAbilityLevel(c, 'A000') local boolexpr b = Condition(function Stomp_Filter) local group g = CreateGroup() local group n local unit f local gamecache gc = udg_AbilityCache local timer t = CreateTimer() local string s = I2S(H2I(t)) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl")) call GroupEnumUnitsInRange(g, x, y, 100+50*i, b) set n = Stomp_CopyGroup(g) loop set f = FirstOfGroup(n) exitwhen f == null call UnitDamageTarget(c, f, 25*i, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null) call GroupRemoveUnit(n, f) endloop call StoreInteger(gc, s, "level", i) call StoreInteger(gc, s, "group", H2I(g)) call StoreReal(gc, s, "x", x) call StoreReal(gc, s, "y", y) call StoreReal(gc, s, "speed", 50) call TimerStart(t, 0.05, true, function Stomp_Move) set c = null call DestroyBoolExpr(b) set b = null set g = null call DestroyGroup(n) set n = null set f = null set gc = null set t = null endfunction //=========================================================================== function InitTrig_Stomp takes nothing returns nothing set gg_trg_Stomp = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Stomp, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Stomp, Condition( function Trig_Stomp_Conditions ) ) call TriggerAddAction( gg_trg_Stomp, function Trig_Stomp_Actions ) call Preload("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl") call Preload("Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl") endfunction |
| 07-24-2009, 07:16 PM | #3 |
I see. I should have read the tutorial again. Thank you for your quick answer. |
