Faust
You can change this now in User CP.
- Reaction score
- 123
JASS:
scope AutoCastSystem initializer I
globals
private region R
endglobals
private struct ACS
//! runtextmacro PUI()
integer array orderidN [3]
integer array orderidP [2]
integer array orderidAOE [2]
integer array orderidI [1]
unit caster
endstruct
private function C takes nothing returns boolean
return udg_Race[GetPlayerId(GetOwningPlayer(GetFilterUnit()))+1] == "HoMM" and GetUnitState(GetFilterUnit(), UNIT_STATE_MAX_MANA) > 1 and IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true
endfunction
private function C1 takes nothing returns boolean
return udg_Race[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))+1] == "HoMM" and GetUnitState(GetTriggerUnit(), UNIT_STATE_MAX_MANA) > 1 and IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true and GetIssuedOrderId() == 852166
endfunction
private function C2 takes nothing returns boolean
return udg_Race[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))+1] == "HoMM" and GetUnitState(GetTriggerUnit(), UNIT_STATE_MAX_MANA) > 1 and GetOwningPlayer(GetTriggerUnit()) != Player(PLAYER_NEUTRAL_AGGRESSIVE) and IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true
endfunction
private function C3 takes nothing returns boolean
return GetUnitCurrentOrder(GetTriggerUnit()) == OrderId("attack") or GetUnitCurrentOrder(GetTriggerUnit()) == OrderId("stop") or GetUnitCurrentOrder(GetTriggerUnit()) == 851973 or GetUnitCurrentOrder(GetTriggerUnit()) == 0
endfunction
private function IsUnitAnEnemyP takes nothing returns boolean
if IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), udg_Player) == false and GetUnitAbilityLevel(GetFilterUnit(), 039;Aloc039;) == 0 and IsUnitType(GetFilterUnit(), UNIT_TYPE_ANCIENT) == false then
return true
else
return false
endif
endfunction
private function A2 takes nothing returns nothing
local ACS dat = ACS[GetTriggerUnit()]
local unit u
set udg_Player = GetOwningPlayer(GetTriggerUnit())
call GroupEnumUnitsInRange(G, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 650, Condition(function IsUnitAnEnemy))
set u = GetRandomUnit(G)
if GetUnitTypeId(dat.caster) == 039;H03C039; then
call GroupClear(G)
call GroupEnumUnitsInRange(G, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 650, Condition(function DummyFilter))
call GroupRemoveUnit(G, dat.caster)
set u = GetRandomUnit(G)
endif
if IssueTargetOrderById(dat.caster, dat.orderidN[0], u) == false then
if IssueTargetOrderById(dat.caster, dat.orderidN[1], u) == false then
call IssueTargetOrderById(dat.caster, dat.orderidN[2], u)
endif
endif
call GroupClear(G)
set udg_Player = GetOwningPlayer(GetTriggerUnit())
call GroupEnumUnitsInRange(G, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 650, Condition(function IsUnitAnEnemyP))
call GroupRemoveUnit(G, dat.caster)
set u = GetRandomUnit(G)
if IssueTargetOrderById(dat.caster, dat.orderidP[0], u) == false then
if IssueTargetOrderById(dat.caster, dat.orderidP[1], u) == false then
//call IssueTargetOrderById(dat.caster, dat.orderidP[2], u)
endif
endif
call GroupClear(G)
set udg_Player = GetOwningPlayer(GetTriggerUnit())
call GroupEnumUnitsInRange(G, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 650, Condition(function IsUnitAnEnemy))
set u = GetRandomUnit(G)
if IssuePointOrderById(dat.caster, dat.orderidAOE[0], GetUnitX(u), GetUnitY(u)) == false then
call IssuePointOrderById(dat.caster, dat.orderidAOE[1], GetUnitX(u), GetUnitY(u))
endif
call GroupClear(G)
call IssueImmediateOrderById(dat.caster, dat.orderidI[0])
set u = null
endfunction
private function A takes nothing returns nothing
local ACS dat = ACS.create()
set dat.caster = GetTriggerUnit()
set ACS[dat.caster] = dat
if GetUnitTypeId(GetTriggerUnit()) == 039;H029039; then // Mage
set dat.orderidN[0] = 852600 // Fist of Wrath
set dat.orderidP[0] = 852486 // Rigtheous Might
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02B039; then // Storm Titan
set dat.orderidAOE[0] = 852221 // Stormcaller
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03C039; then // Djinn Sultan
set dat.orderidN[0] = 852600 // RandomCB
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02Y039; then // Shadow Matriarch
set dat.orderidP[0] = 852486 // Rightous Might
set dat.orderidN[0] = 852189 // Vulnerability
set dat.orderidN[1] = 852135 // Slow
set dat.orderidN[2] = 852581 // Confusion
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H036039; then // Pit Lord
set dat.orderidN[0] = 852189 // Vulnerability
set dat.orderidAOE[0] = 852536 // Fireball
set dat.orderidAOE[1] = 852122 // Meteor Shower
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H034039; then // ArchLich
set dat.orderidN[0] = OrderId("devour") // Decay
set dat.orderidN[1] = OrderId("antimagicshell") // Suffering
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03I039; then // Archmage
set dat.orderidN[0] = 852600 // Fist of Wrath
set dat.orderidP[0] = 852486 // Rigtheous Might
set dat.orderidAOE[0] = 852536 // Fireball
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03J039; then // Battlemage
set dat.orderidN[0] = 852600 // Fist of Wrath
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02C039; then // Djinn
set dat.orderidN[0] = 852600 // Random Curse
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03D039; then // Djinn Vizier
set dat.orderidN[0] = 852600 // Wheel of Fortune
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02O039; then // Druid
set dat.orderidN[0] = OrderId("acidbomb") // Lightning Bolt
set dat.orderidP[0] = OrderId("curse") // Divine Strength
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03O039; then // Druid Elder
set dat.orderidN[0] = OrderId("acidbomb") // Lightning Bolt
set dat.orderidP[0] = OrderId("curse") // Divine Strength
set dat.orderidAOE[0] = OrderId("carrionswarm") // Stone Spikes
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03N039; then // High Druid
set dat.orderidP[0] = OrderId("curse") // Divine Strength
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H032039; then // Inquisitor
set dat.orderidP[0] = OrderId("curse") // Divine Strength
set dat.orderidP[1] = OrderId("creepthunderbolt") // Haste
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H035039; then // Lich Master
set dat.orderidN[0] = OrderId("antimagicshell") // Suffering
set dat.orderidI[0] = OrderId("creepthunderclap") // Raise Dead
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02J039; then // Pit Fiend
set dat.orderidN[0] = 852189 // Vulnerability
set dat.orderidAOE[0] = 852536 // Fireball
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02Z039; or GetUnitTypeId(GetTriggerUnit()) == 039;H02E039; then // Shadow Mistress and Shadow Witch
set dat.orderidP[0] = 852486 // Rightous Might
set dat.orderidN[0] = 852189 // Vulnerability
set dat.orderidN[1] = 852135 // Slow
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H039039; then // Succubus Seducer
set dat.orderidN[0] = OrderId("magicleash") // Seduce
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H03M039; then // Titan
set dat.orderidN[0] = 852600 // Call Lightning
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H02B039; then // Storm Titan
set dat.orderidAOE[0] = OrderId("deathanddecay") // Stormcaller
elseif GetUnitTypeId(GetTriggerUnit()) == 039;H033039; then // Zealot
set dat.orderidP[0] = 852486 // Rightous Might
endif
endfunction
private function A1 takes nothing returns nothing
local ACS dat = ACS[GetTriggerUnit()]
if dat != null then
call dat.release()
endif
endfunction
//===========================================================================
private function I takes nothing returns nothing
local trigger t = CreateTrigger()
set R = CreateRegion()
call RegionAddRect(R, bj_mapInitialPlayableArea)
call TriggerRegisterEnterRegion(t, R, Condition(function C))
call TriggerAddAction(t, function A)
set t = CreateTrigger()
call TriggerRegisterAnyUnitWithinRange(t)
call TriggerAddCondition(t, Condition(function C2))
call TriggerAddCondition(t, Condition(function C3))
call TriggerAddAction(t, function A2)
set t = CreateTrigger()
call TriggerRegisterAnyUnitEvent(t, EVENT_PLAYER_UNIT_ISSUED_ORDER)
call TriggerAddCondition(t, Condition(function C1))
call TriggerAddAction(t, function A1)
endfunction
endscope
When there are 10-15 or more towers that use the system to autocast, the game starts to lag when they use abilities.
Can anyone tell me why? And how to fix it?
It is very important, there should be even more units using it... :\