map has 9 triggers, and it will sometimes crash even when only 3 are enabled:
However, it doesn't crash very often with only these triggers enabled, however, if I enable more triggers it crashes more often.
Thanks to anyone who can help. Here is an example of one of the errors that I get. I have been struggling with this for a while and have been unable to find an answer. I have noticed one thing that I think may be responsible for it crashing, sometimes. I used a glitch in the object editor that allows units to upgrade like a building would, however, it seems that when I a unit finishes its upgrade and there is a target in range, it may cause it to crash sometimes? I have seen it happen a couple times but it could be coincidence.
Edit: added the map and a replay explaining how to play. If anyone else wants to try it and sees why it might be crashing, that would be a huge help. Or if you just want to try it that would be great too. Thanks all
http://www.hiveworkshop.com/forums/...040d1434150252-memory-leak-problems-error.jpg
JASS:
globals
//To hold spawned units, to be filled later.
integer spawnDiff = 0
//Income per building, the unit types of the buildings, and each players income.
integer array incAmountPer
integer array incBuildings
integer playerInc
//Timers
timer gameTimer
timer endTimer
timerdialog GameTime
//Counter for game time counter that counts up.
integer counter = 0
leaderboard P_Income
unit builder
integer tmpInt
endglobals
library GlobalFilters
function Unit takes nothing returns boolean
return GetUnitMoveSpeed(GetFilterUnit())>0
endfunction
function Structure takes nothing returns boolean
return GetUnitMoveSpeed(GetFilterUnit())<=0
endfunction
function GenFilter takes nothing returns boolean
if GetUnitTypeId(GetFilterUnit())==tmpInt then
return true
else
return false
endif
endfunction
function HordeFilter takes nothing returns boolean
if GetOwningPlayer(GetFilterUnit()) == Player(10) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >= .405 then
return true
endif
return false
endfunction
endlibrary
JASS:
scope Init initializer init
//Done on initialization.
private function init takes nothing returns nothing
//Populate player array and get total players.
local unit u
call FogMaskEnable(false)
set u=CreateUnit(Player(0), 'h000', GetStartLocationX(GetPlayerStartLocation(Player(0))), GetStartLocationY(GetPlayerStartLocation(Player(0))), bj_UNIT_FACING)
set builder=u
call SetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD, 100)
call SetPlayerState(Player(10), PLAYER_STATE_GIVES_BOUNTY, 1)
//Populate income arrays, to keep track of the order of upgrades and to keep track of how much income they give.
set incBuildings[0]='h004'
set incAmountPer[0]=1
set incBuildings[1]='h01O'
set incAmountPer[1]=3
set incBuildings[2]='h01P'
set incAmountPer[2]=5
set incBuildings[3]='h01Q'
set incAmountPer[3]=7
set incBuildings[4]='h01R'
set incAmountPer[4]=10
set incBuildings[5]='h01S'
set incAmountPer[5]=15
set incBuildings[6]='h01T'
set incAmountPer[6]=25
set incBuildings[7]='h01V'
set incAmountPer[7]=40
set incBuildings[8]='h01U'
set incAmountPer[8]=65
set incBuildings[9]='h01W'
set incAmountPer[9]=100
set incBuildings[10]='h01X'
set incAmountPer[10]=150
set counter=0
set gameTimer=CreateTimer()
set GameTime=CreateTimerDialog(gameTimer)
call TimerDialogSetTitle(GameTime, "Game Time")
call TimerDialogSetRealTimeRemaining(GameTime, 0)
call TimerStart(gameTimer,0,false,null)
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, 2000, 0)
set u=null
endfunction
endscope
JASS:
function income takes nothing returns nothing
local group g = CreateGroup()
local integer i =0
local integer count = 0
local unit first
set playerInc=0
loop
exitwhen i==10
set tmpInt = incBuildings[i]
set count=0
call GroupEnumUnitsOfPlayer(g, Player(0), Filter(function GenFilter))
loop
set first=FirstOfGroup(g)
exitwhen first==null
set count=count+1
call GroupRemoveUnit(g,first)
endloop
set playerInc=playerInc+count*incAmountPer[i]
set i=i+1
call LeaderboardSetItemValue(P_Income, LeaderboardGetPlayerIndex(P_Income, Player(0)), playerInc)
endloop
call SetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(0), PLAYER_STATE_RESOURCE_GOLD)+playerInc)
call DestroyGroup(g)
set g = null
set first=null
endfunction
function Order takes unit u returns nothing
if GetUnitCurrentOrder(u) != OrderId("attack") and GetUnitCurrentOrder(u) != OrderId("firebolt") then
call IssuePointOrder(u, "attack", GetRandomReal(-5200, 3275), GetRandomReal(-1400, 1400))
endif
endfunction
function spawnFilter takes nothing returns boolean
local integer id=GetUnitTypeId(GetFilterUnit())
if id == 'o000' or id == 'o001' or id == 'o002' or id == 'o004' or id == 'o00O' or id == 'o00E' or id == 'o00P' or id == 'o00Q' or id == 'o00B' or id == 'o00R' or id == 'o00A' then
return true
endif
return false
endfunction
function spawn takes unit spawner returns nothing
local unit u
local integer chance=GetRandomInt(0, spawnDiff)
if chance>3 then
if chance >=47 then
set u = CreateUnit(Player(10), 'o00B', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if chance >=37 and chance <47 then
set u = CreateUnit(Player(10), 'o004', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if chance >=27 and chance <37 then
set u = CreateUnit(Player(10), 'o002', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if chance>=17 and chance <27 then
set u = CreateUnit(Player(10), 'o001', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if chance<17 then
set u = CreateUnit(Player(10), 'o000', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
endif
set u = null
endfunction
function spawnPlus takes unit spawner returns nothing
local unit u
if spawnDiff==55 then
set u = CreateUnit(Player(10), 'o00R', GetUnitX(spawner), GetUnitY(spawner), 0)
// set HealWave_boss = u
// call HealWave_init()
endif
if spawnDiff==45 then
set u = CreateUnit(Player(10), 'o00Q', GetUnitX(spawner), GetUnitY(spawner), 0)
endif
if spawnDiff==35 then
set u = CreateUnit(Player(10), 'o00P', GetUnitX(spawner), GetUnitY(spawner), 0)
endif
if spawnDiff==25 then
set u = CreateUnit(Player(10), 'o00E', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff == 15 then
set u = CreateUnit(Player(10), 'o00O', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff >=50 then
set u = CreateUnit(Player(10), 'o00B', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
set u = CreateUnit(Player(10), 'o00B', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff >=40 and spawnDiff < 50 then
set u = CreateUnit(Player(10), 'o004', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
set u = CreateUnit(Player(10), 'o004', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff >=30 and spawnDiff < 40 then
set u = CreateUnit(Player(10), 'o002', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
set u = CreateUnit(Player(10), 'o002', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff >=20 and spawnDiff < 30 then
set u = CreateUnit(Player(10), 'o001', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
set u = CreateUnit(Player(10), 'o001', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
if spawnDiff >=3 and spawnDiff<20 then
set u = CreateUnit(Player(10), 'o000', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
set u = CreateUnit(Player(10), 'o000', GetUnitX(spawner), GetUnitY(spawner), bj_UNIT_FACING)
endif
set u = null
endfunction
function Trig_Gametime_Actions takes nothing returns nothing
local integer i = 0
local integer a = 0
local unit first
local group g = CreateGroup()
if(counter==0) then
call TimerDialogDisplay(GameTime, true)
set P_Income=CreateLeaderboard()
call PlayerSetLeaderboard(Player(0), P_Income)
call LeaderboardAddItem(P_Income, GetPlayerName(Player(0)), 0, Player(0))
call LeaderboardSetLabel(P_Income, "Income")
call LeaderboardSetSizeByItemCount(P_Income, LeaderboardGetItemCount(P_Income))
call LeaderboardDisplay(P_Income, true)
endif
call TimerStart(gameTimer, counter, false, null)
call PauseTimer(gameTimer)
call GroupEnumUnitsOfPlayer(g, Player(10), Filter(function spawnFilter))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call Order(first)
call GroupRemoveUnit(g,first)
endloop
if counter==5 then
call DisplayTextToPlayer(Player(0), 0, 0, "Defend from the endless waves...")
endif
if counter==10 then
call DisplayTextToPlayer(Player(0), 0, 0, "The horde arrives at 4:00.")
endif
if counter==240 then
set spawnDiff=3
endif
if counter==270 then
set spawnDiff=4
endif
if counter==300 then
set spawnDiff=5
endif
if counter==330 then
set spawnDiff=6
endif
if counter==360 then
set spawnDiff=7
endif
if counter==390 then
set spawnDiff=8
endif
if counter==420 then
set spawnDiff=9
endif
if counter==450 then
set spawnDiff=10
endif
if counter==480 then
set spawnDiff=11
endif
if counter==510 then
set spawnDiff=12
endif
if counter==540 then
set spawnDiff=13
endif
if counter==570 then
set spawnDiff=14
endif
if counter==600 then
set spawnDiff=15
endif
if counter==620 then
set spawnDiff=16
endif
if counter==660 then
set spawnDiff=17
endif
if counter==690 then
set spawnDiff=18
endif
if counter==720 then
set spawnDiff=19
endif
if counter==750 then
set spawnDiff=20
endif
if counter==780 then
set spawnDiff=21
endif
if counter==810 then
set spawnDiff=22
endif
if counter==840 then
set spawnDiff=23
endif
if counter==870 then
set spawnDiff=24
endif
if counter==900 then
set spawnDiff=25
endif
if counter==920 then
set spawnDiff=26
endif
if counter==960 then
set spawnDiff=27
endif
if counter==990 then
set spawnDiff=28
endif
if counter==1020 then
set spawnDiff=29
endif
if counter==1050 then
set spawnDiff=30
endif
if counter==1080 then
set spawnDiff=31
endif
if counter==1110 then
set spawnDiff=32
endif
if counter==1140 then
set spawnDiff=33
endif
if counter==1170 then
set spawnDiff=34
endif
if counter==1200 then
set spawnDiff=35
endif
if counter==1220 then
set spawnDiff=36
endif
if counter==1260 then
set spawnDiff=37
endif
if counter==1290 then
set spawnDiff=38
endif
if counter==1320 then
set spawnDiff=39
endif
if counter==1350 then
set spawnDiff=40
endif
if counter==1380 then
set spawnDiff=41
endif
if counter==1410 then
set spawnDiff=42
endif
if counter==1440 then
set spawnDiff=43
endif
if counter==1470 then
set spawnDiff=44
endif
if counter==1500 then
set spawnDiff=45
endif
if counter==1520 then
set spawnDiff=46
endif
if counter==1560 then
set spawnDiff=47
endif
if counter==1590 then
set spawnDiff=48
endif
if counter==1620 then
set spawnDiff=49
endif
if counter==1650 then
set spawnDiff=50
endif
if counter==1680 then
set spawnDiff=51
endif
if counter==1710 then
set spawnDiff=52
endif
if counter==1740 then
set spawnDiff=53
endif
if counter==1770 then
set spawnDiff=54
endif
if counter==1800 then
set spawnDiff=55
endif
if counter==1820 then
set spawnDiff=56
endif
if counter==1860 then
set spawnDiff=57
endif
if counter==1890 then
set spawnDiff=58
endif
if counter==1920 then
set spawnDiff=59
endif
if counter==1950 then
set spawnDiff=60
endif
if counter==1980 then
set spawnDiff=61
endif
if counter==2010 then
set spawnDiff=62
endif
if counter==2040 then
set spawnDiff=63
endif
if counter==2070 then
set spawnDiff=64
endif
if counter==2100 then
set spawnDiff=65
endif
if counter == 2120 then
set spawnDiff=66
endif
if counter-(counter/5)*5==0 then
call income()
endif
if counter-(counter/20)*20==0 then
set tmpInt= 'h01Y'
call GroupEnumUnitsOfPlayer(g, Player(10), Filter(function GenFilter))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call spawn(first)
call GroupRemoveUnit(g,first)
endloop
set tmpInt= 'h01L'
call GroupEnumUnitsOfPlayer(g, Player(10), Filter(function GenFilter))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call spawnPlus(first)
call GroupRemoveUnit(g,first)
endloop
endif
call GroupEnumUnitsOfPlayer(g, Player(10), Filter(function spawnFilter))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call Order(first)
call GroupRemoveUnit(g,first)
endloop
call RemoveAllGuardPositions(Player(10))
set counter=counter+1
call DestroyGroup(g)
set g=null
set first=null
endfunction
//===========================================================================
function InitTrig_Gametime takes nothing returns nothing
set gg_trg_Gametime = CreateTrigger( )
call TriggerRegisterTimerEvent( gg_trg_Gametime, 1.00, true )
call TriggerAddAction( gg_trg_Gametime, function Trig_Gametime_Actions )
endfunction
However, it doesn't crash very often with only these triggers enabled, however, if I enable more triggers it crashes more often.
JASS:
function stud takes unit u returns nothing
call UnitSetBonus(u, 0, 1)
endfunction
function bronze takes unit u returns nothing
call UnitSetBonus(u, 0, 2)
endfunction
function iron takes unit u returns nothing
call UnitSetBonus(u, 0, 4)
endfunction
function steel takes unit u returns nothing
call UnitSetBonus(u, 0, 6)
endfunction
function mason takes unit u returns nothing
call UnitSetBonus(u, 0, 1)
endfunction
function work takes unit u returns nothing
call UnitSetBonus(u, 0, 3)
endfunction
function blast takes unit u returns nothing
call UnitSetBonus(u, 0, 6)
endfunction
function Trig_Upgrade_Actions takes nothing returns nothing
local group g = CreateGroup()
local unit first
if GetResearched()=='R009' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Unit))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call stud(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00B' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Unit))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call bronze(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00A' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Unit))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call iron(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00C' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Unit))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call steel(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00D' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Structure))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call mason(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00E' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Structure))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call work(first)
call GroupRemoveUnit(g,first)
endloop
endif
if GetResearched()=='R00F' then
call GroupEnumUnitsOfPlayer(g, GetOwningPlayer(GetResearchingUnit()), Condition(function Structure))
loop
set first=FirstOfGroup(g)
exitwhen first==null
call blast(first)
call GroupRemoveUnit(g,first)
endloop
endif
call DestroyGroup(g)
set g = null
set first = null
endfunction
//===========================================================================
function InitTrig_Upgrade takes nothing returns nothing
set gg_trg_Upgrade = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent(gg_trg_Upgrade, Player(0), EVENT_PLAYER_UNIT_RESEARCH_FINISH, null)
call TriggerAddAction( gg_trg_Upgrade, function Trig_Upgrade_Actions )
endfunction
JASS:
function Trig_Newunit_Actions takes nothing returns nothing
local group g = CreateGroup()
if GetTriggerEventId()==EVENT_PLAYER_UNIT_TRAIN_FINISH then
call GroupEnumUnitsOfPlayer(g, GetTriggerPlayer(), Condition(function Unit))
call GroupRemoveUnit(g, GetTrainedUnit())
call UnitSetBonus(GetTrainedUnit(), 0, UnitGetBonus(FirstOfGroup(g), 0))
endif
if GetTriggerEventId()==EVENT_PLAYER_UNIT_CONSTRUCT_FINISH then
call GroupEnumUnitsOfPlayer(g, GetTriggerPlayer(), Condition(function Structure))
call GroupRemoveUnit(g, GetConstructedStructure())
call UnitSetBonus(GetConstructedStructure(), 0, UnitGetBonus(FirstOfGroup(g), 0))
endif
call DestroyGroup(g)
set g = null
endfunction
//===========================================================================
function InitTrig_Newunit takes nothing returns nothing
set gg_trg_Newunit = CreateTrigger( )
call TriggerRegisterPlayerUnitEvent(gg_trg_Newunit, Player(0), EVENT_PLAYER_UNIT_TRAIN_FINISH, null)
call TriggerRegisterPlayerUnitEvent(gg_trg_Newunit, Player(0), EVENT_PLAYER_UNIT_CONSTRUCT_FINISH, null)
call TriggerAddAction( gg_trg_Newunit, function Trig_Newunit_Actions )
endfunction
JASS:
library HealWave
globals
public unit boss
private integer casts = 0
private timer ltimer = CreateTimer()
private lightning array lt
endglobals
private function destroy takes nothing returns nothing
local integer i = 0
loop
exitwhen lt[i] == null
call DestroyLightning(lt[i])
set lt[i] = null
set i = i+1
endloop
endfunction
private function life takes nothing returns boolean
if casts == 0 and GetUnitState(boss, UNIT_STATE_LIFE) < GetUnitState(boss, UNIT_STATE_MAX_LIFE)*.75 then
return true
endif
if casts == 1 and GetUnitState(boss, UNIT_STATE_LIFE) < GetUnitState(boss, UNIT_STATE_MAX_LIFE)*.5 then
return true
endif
if casts == 2 and GetUnitState(boss, UNIT_STATE_LIFE) < GetUnitState(boss, UNIT_STATE_MAX_LIFE)*.25 then
return true
endif
return false
endfunction
private function order takes nothing returns nothing
local effect target
local group g = CreateGroup()
local unit u
local integer count = 0
call SetUnitAnimation(boss, "Spell")
set target = AddSpecialEffectTarget("Abilities\\Spells\\Orc\\HealingWave\\HealingWaveTarget.mdl", boss, "origin")
call DestroyEffect(target)
call SetUnitState(boss, UNIT_STATE_LIFE, GetUnitState(boss, UNIT_STATE_LIFE)+600)
call GroupEnumUnitsInRange(g, GetUnitX(boss), GetUnitY(boss), 400, Filter(function HordeFilter))
call GroupRemoveUnit(g, boss)
loop
set u = FirstOfGroup(g)
exitwhen u == null
set lt[count] = AddLightning("HWPB", false, GetUnitX(boss), GetUnitY(boss), GetUnitX(u), GetUnitY(u))
set count = count+1
set lt[count] = AddLightning("HWSB", false, GetUnitX(boss), GetUnitY(boss), GetUnitX(u), GetUnitY(u))
set count = count+1
set target = AddSpecialEffectTarget("Abilities\\Spells\\Orc\\HealingWave\\HealingWaveTarget.mdl", u, "chest")
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_LIFE)+100)
call DestroyEffect(target)
call GroupRemoveUnit(g, u)
endloop
call TimerStart(ltimer, 1, false, function destroy)
set casts=casts+1
call DestroyGroup(g)
set target=null
set g = null
set u = null
endfunction
public function init takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterUnitEvent(trig, boss, EVENT_UNIT_ATTACKED)
call TriggerAddCondition(trig, Condition(function life))
call TriggerAddAction( trig, function order )
endfunction
endlibrary
JASS:
scope Firebolt initializer init
private function mage takes nothing returns boolean
if GetUnitTypeId(GetAttacker()) == 'o00A' then
call IssueTargetOrder(GetAttacker(), "firebolt", GetTriggerUnit())
endif
return false
endfunction
private function init takes nothing returns nothing
local trigger cast = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(cast, Player(0), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerAddCondition(cast, Condition(function mage))
endfunction
endscope
library ShieldofFrost initializer init
private function IK takes nothing returns boolean
if GetUnitTypeId(GetTriggerUnit()) == 'h026' then
return true
endif
return false
endfunction
private function slow takes nothing returns nothing
local unit u=CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'n002', GetUnitX(GetAttacker()), GetUnitY(GetAttacker()), 0)
call IssueTargetOrder(u, "slow", GetAttacker())
call RemoveUnit(u)
set u=null
endfunction
private function init takes nothing returns nothing
local trigger SoFTrg = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(SoFTrg, Player(0), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerAddCondition(SoFTrg, Condition(function IK))
call TriggerAddAction(SoFTrg, function slow)
endfunction
endlibrary
private function IK takes nothing returns boolean
if GetUnitTypeId(GetTriggerUnit()) == 'h026' then
return true
endif
return false
endfunction
private function slow takes nothing returns nothing
local unit u=CreateUnit(GetOwningPlayer(GetTriggerUnit()), 'n002', GetUnitX(GetAttacker()), GetUnitY(GetAttacker()), 0)
call IssueTargetOrder(u, "slow", GetAttacker())
call RemoveUnit(u)
set u=null
endfunction
private function init takes nothing returns nothing
local trigger SoFTrg = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(SoFTrg, Player(0), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerAddCondition(SoFTrg, Condition(function IK))
call TriggerAddAction(SoFTrg, function slow)
endfunction
endlibrary
Thanks to anyone who can help. Here is an example of one of the errors that I get. I have been struggling with this for a while and have been unable to find an answer. I have noticed one thing that I think may be responsible for it crashing, sometimes. I used a glitch in the object editor that allows units to upgrade like a building would, however, it seems that when I a unit finishes its upgrade and there is a target in range, it may cause it to crash sometimes? I have seen it happen a couple times but it could be coincidence.
Edit: added the map and a replay explaining how to play. If anyone else wants to try it and sees why it might be crashing, that would be a huge help. Or if you just want to try it that would be great too. Thanks all
http://www.hiveworkshop.com/forums/...040d1434150252-memory-leak-problems-error.jpg
Attachments
Last edited: