BlueMirage
Trust, but doubt.
- Reaction score
- 39
I'm trying to make a trigger that will allow a player to capture a base.
It's supposed to make only one building visible at a time by making the other two invisible by raising their Z values locally. Problem is, nothing happens. Sometimes the base isn't captured either.
Here's the full trigger:
It's supposed to make only one building visible at a time by making the other two invisible by raising their Z values locally. Problem is, nothing happens. Sometimes the base isn't captured either.
Here's the full trigger:
JASS:
function SetUnitZ takes unit u, real z returns nothing
local location l = Location(GetUnitX(u), GetUnitY(u))
local real rz = z - GetLocationZ(l)
call UnitAddAbility(u, 039;Amrf039;)
call SetUnitFlyHeight(u, rz, 0.)
call UnitRemoveAbility(u, 039;Amrf039;)
call RemoveLocation(l)
set l = null
endfunction
function UncaptureCon takes nothing returns boolean //Added to local trigger
return GetEventDamage() > 0.00
endfunction
function UncaptureAct takes nothing returns nothing //Added to local trigger
call UnitRemoveAbility(GetTriggerUnit(), 039;B000039;)
call DestroyTrigger(GetTriggeringTrigger())
endfunction
function Trig_Capture_Conditions takes nothing returns boolean
return GetItemTypeId(GetSoldItem()) == 039;I000039;
endfunction
function Trig_Capture_Filters takes nothing returns boolean
local unit u = GetFilterUnit()
local boolean b = IsUnitType(u, UNIT_TYPE_STRUCTURE) == true and GetUnitTypeId(u) != 039;n000039; and GetUnitTypeId(u) != 039;n007039; and GetUnitTypeId(u) != 039;n008039; //Unit types = the buildings I'm trying to manipulate.
set u = null
return b
endfunction
function Trig_Capture_ConvertBase takes nothing returns nothing
local unit u = GetEnumUnit()
call SetUnitOwner(u, GetOwningPlayer(udg_TempUnit), true)
set u = null
endfunction
function Trig_Capture_ReviveHeroes takes nothing returns nothing
local unit u = GetEnumUnit()
if IsUnitAlly(u, GetOwningPlayer(udg_TempUnit)) == true then
call ReviveHero(u, GetUnitX(udg_TempUnit), GetUnitY(udg_TempUnit), true)
call GroupRemoveUnit(udg_DeadHeroes, u)
endif
set u = null
endfunction
function Trig_Capture_Actions takes nothing returns nothing
local unit ub = GetBuyingUnit()
local unit um = GetTriggerUnit()
local integer i = GetUnitUserData(um) //Used to determine which structures are involved using a table. Set at map init.
local integer i2
local unit uc = udg_Circle<i>
local real x = GetUnitX(uc)
local real y = GetUnitY(uc)
local trigger t = CreateTrigger()
local group g
local player p
call SetUnitX(ub, x)
call SetUnitY(ub, y)
call SetUnitFacing(ub, Angle(x, y, GetUnitX(um), GetUnitY(um)))
call DummySpell(ub, 039;A001039;, "thunderbolt") //Orders a dummy to stun the buyer, works fine.
call SetUnitAnimation(ub, "channel")
call TriggerRegisterUnitEvent(t, ub, EVENT_UNIT_DAMAGED)
call TriggerAddCondition(t, Condition(function UncaptureCon))
call TriggerAddAction(t, function UncaptureAct)
call TriggerSleepAction(6.00)
if GetUnitAbilityLevel(ub, 039;B000039;) > 0 then
set p = GetOwningPlayer(ub)
set i2 = 0
loop
if GetLocalPlayer() == Player(i2) then
call SetUnitZ(udg_RodsNeut<i>, 3000.)
if IsPlayerAlly(Player(i2), p) == true then
call SetUnitZ(udg_RodsAlly<i>, 0.)
else
call SetUnitZ(udg_RodsHost<i>, 0.)
endif
endif
exitwhen i2 == 11
set i2 = i2 + 1
endloop
set udg_TempUnit = ub
set g = CreateGroup()
call GroupEnumUnitsInRange(g, x, y, 700., Filter(function Trig_Capture_Filters))
call ForGroup(g, function Trig_Capture_ConvertBase)
call ForGroup(udg_DeadHeroes, function Trig_Capture_ReviveHeroes) //Irrelevant for now
call DestroyGroup(g)
set g = null
endif
call UnitRemoveAbility(ub, 039;B000039;)
call SetUnitAnimation(ub, "stand")
call DestroyTrigger(t)
set t = null
set ub = null
set um = null
set uc = null
endfunction
//===========================================================================
function InitTrig_Capture takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SELL_ITEM )
call TriggerAddCondition( t, Condition( function Trig_Capture_Conditions ) )
call TriggerAddAction( t, function Trig_Capture_Actions )
endfunction</i></i></i></i>