afisakov
You can change this now in User CP.
- Reaction score
- 37
I have a trigger that is getting very repetitive in its steps, trying to make custom function to encompass most of these, to save space and make it easier to tweak. But game does not want to accept way I tried to trigger it.
Original trigger
You can see the same paragraph keep repeating itself with minor tweaks.
Attempt to fix, leaving out alot of the unneeded parts
The problem is the retarget function is not saving properly, the game keeps giving me a "expected a name" error message.
I have tried putting the condition functions (e.g. "den1_enemy") upwards as code or boolexpr with no success.
Please help! Explanation of why I am failing or advice on how to get it to work would be greatly appreciated.
P.S.
Leaving the conditions out of the retarget function would undo half of what I attempted to accomplish by reformatting this trigger.
Original trigger
Code:
function gen_enemy takes nothing returns boolean
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0.405 and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function ice_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'Bfro')<1)
endfunction
function icemag_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'BHca')<1)
endfunction
function den1_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'B007')<1) and (GetUnitAbilityLevel(GetFilterUnit(),'B004')<1)
endfunction
function Trig_den_auto_Actions takes nothing returns nothing
local unit u=GetAttacker()
local location TempLoc
local group TempGroup
if (GetUnitTypeId(u) == 'oC31') then
call PolledWait(0.2)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(900, TempLoc, Condition(function den1_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
//call DisplayTextToPlayer(GetOwningPlayer(u),0,0,I2S(CountUnitsInGroup(TempGroup)))
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'o00A') then
call PolledWait(0.12)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(1100, TempLoc, Condition(function den1_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'o00N') then
call PolledWait(0.11)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(1050, TempLoc, Condition(function ice_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'oC85') then
call PolledWait(0.2)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(850, TempLoc, Condition(function ice_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'hC13') then
call PolledWait(1.0)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(600, TempLoc, Condition(function ice_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'h00F') then
call PolledWait(0.5)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(800, TempLoc, Condition(function ice_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
if (GetUnitTypeId(u) == 'hC05') then
call PolledWait(0.9)
set TempLoc=GetUnitLoc(u)
set TempGroup = GetUnitsInRangeOfLocMatching(600, TempLoc, Condition(function icemag_enemy))
call IssueTargetOrderBJ(u, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endif
set u=null
endfunction
Attempt to fix, leaving out alot of the unneeded parts
Code:
function gen_enemy takes nothing returns boolean
return GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0.405 and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetAttacker()))
endfunction
function ice_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'Bfro')<1)
endfunction
function icemag_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'BHca')<1)
endfunction
function den1_enemy takes nothing returns boolean
return gen_enemy() and (GetUnitAbilityLevel(GetFilterUnit(),'B007')<1) and (GetUnitAbilityLevel(GetFilterUnit(),'B004')<1)
endfunction
function retarget takes unit atk, real wt, real Range, code ab3 returns nothing
local location TempLoc
local group TempGroup
call PolledWait(wt)
set TempLoc=GetUnitLoc(atk)
set TempGroup = GetUnitsInRangeOfLocMatching(Range, TempLoc, Condition(function ab3))
call IssueTargetOrderBJ(atk, "attack", FirstOfGroup(TempGroup) )
call DestroyGroup(TempGroup)
call RemoveLocation(TempLoc)
endfunction
function Trig_den_auto_Actions takes nothing returns nothing
local unit u=GetAttacker()
if (GetUnitTypeId(u) == 'oC31') then
call retarget(u,0.3,900,den1_enemy)
endif
if (GetUnitTypeId(u) == 'o00A') then
call retarget(u,0.12,1100,den1_enemy)
endif
if (GetUnitTypeId(u) == 'o00N') then
call retarget(u,0.11,1050,ice_enemy)
endif
...
The problem is the retarget function is not saving properly, the game keeps giving me a "expected a name" error message.
I have tried putting the condition functions (e.g. "den1_enemy") upwards as code or boolexpr with no success.
Please help! Explanation of why I am failing or advice on how to get it to work would be greatly appreciated.
P.S.
Leaving the conditions out of the retarget function would undo half of what I attempted to accomplish by reformatting this trigger.