Name | Type | is_array | initial_value |
DismissAbil | abilcode | No | |
FormationOFFAbil | abilcode | No | |
FormationONAbil | abilcode | No | |
loc | location | No | |
Manyshot | integer | No | |
ManyshotA | integervar | No | |
ManyshotCaster | unit | Yes | |
ManyshotLevel | integer | Yes | |
ManyshotOn | boolean | Yes | |
ManyshotPoint | location | No | |
ManyshotSkip | integer | No | |
OrderOFFAbil | abilcode | No | |
OrderONAbil | abilcode | No | |
OwnageMarker | effect | Yes | |
OwnedUnitCount | integer | Yes | |
OwnedUnits | group | Yes | |
RecruitAbil | abilcode | No | |
Timer | timer | No | |
TimerWindow | timerdialog | No | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitOwner | unit | Yes | |
Weather | integer | No |
//TESH.scrollpos=0
//TESH.alwaysfold=0
library leakTest initializer onInit
globals
private timer t = CreateTimer()
private constant integer LOCS = 500
private integer c = 0
endglobals
private function leaks takes nothing returns nothing
local integer i = LOCS
loop
exitwhen i == 0
set udg_loc = Location(0,0)
call RemoveLocation(udg_loc)
set c = c + 1
set i = i - 1
endloop
//set udg_loc = null
endfunction
private function pauseResume takes nothing returns nothing
if ModuloInteger(GetTriggerExecCount(GetTriggeringTrigger()) , 2) == 1 then
call BJDebugMsg("started")
call TimerStart(t, 0.01, true, function leaks)
else
call BJDebugMsg("paused, " + "locs created: " + I2S(c))
call PauseTimer(t)
endif
endfunction
private function onInit takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterPlayerEvent(t, Player(0), EVENT_PLAYER_END_CINEMATIC)
call TriggerAddAction(t, function pauseResume)
endfunction
endlibrary
//TESH.scrollpos=27
//TESH.alwaysfold=0
//
// GroupOrder
// by Xonok
//
// This system provides the functionality to give orders to groups,
// through simple functions.
// This system requires GroupControl,
// in order to access udg_OwnedUnits[]
//
// GroupOrderTarget(group,order,target) -> nothing
// |
// Issues an order to all units in the group.
// The order can target any widget(unit,tree,etc).
//
// GroupOrderPoint(group,order,x,y) -> nothing
// |
// Issues an order to all units in the group.
// The provided coordinates are treated as absolute.
//
// GroupOrderOffset(group,order,x,y) -> nothing
// |
// Issues an order to all units in the group.
// The provided coordinates are treated as relative to the unit.
//
// GroupOrder(group,order) -> nothing
// |
// Issues an untargeted order to all units in the group
//
// Invalid orders don't do anything (courtesy of blizzard)
//
library GroupOrder initializer InitTri_GroupOrder requires GroupControl
globals
private integer ID
private integer ID2
private real x
private real y
private real x2
private real y2
private real x3
private real y3
private real RefX
private real RefY
private unit caster
private unit u
private integer order
private widget target
endglobals
//+ System functions. Not for using elsewhere
private function TargetGroupOrder takes nothing returns nothing
call IssueTargetOrderById(GetEnumUnit(),order,target)
endfunction
private function PointGroupOrder takes nothing returns nothing
set u = GetEnumUnit()
call IssuePointOrderById(u,order,x,y)
endfunction
private function OffsetGroupOrder takes nothing returns nothing
set u = GetEnumUnit()
call IssuePointOrderById(u,order,GetUnitX(u)+x,GetUnitY(u)+y)
endfunction
private function FormationGroupOrder takes nothing returns nothing
set u = GetEnumUnit()
set ID2 = GetUnitUserData(u)
call IssuePointOrderById(u,order,x+FormationX[ID2],y+FormationY[ID2])
endfunction
private function OrderGroup takes nothing returns nothing
call IssueImmediateOrderById(GetEnumUnit(),order)
endfunction
//-
//+ Public functions. Use however you wish
function GroupOrderTarget takes group g,integer order2,widget target2 returns nothing
set order = order2
set target = target2
call ForGroup(g,function TargetGroupOrder)
endfunction
function GroupOrderPoint takes group g,integer order2,real x1,real y1 returns nothing
set order = order2
set x = x1
set y = y1
call ForGroup(g,function PointGroupOrder)
endfunction
function GroupOrderOffset takes group g, integer order2,real x1,real y1 returns nothing
set order = order2
set x = x1
set y = y1
call ForGroup(g,function OffsetGroupOrder)
endfunction
function GroupOrderFormation takes group g,integer order2,real x1,real y1 returns nothing
set order = order2
set x = x1
set y = y1
call ForGroup(g,function FormationGroupOrder)
endfunction
function GroupOrder takes group g, integer order2 returns nothing
set order = order2
call ForGroup(g,function OrderGroup)
endfunction
//-
//+ System function. Must stay down here, as it references public functions.
private function Order takes nothing returns boolean
if GetUnitAbilityLevel(GetTriggerUnit(),udg_OrderONAbil) > 0 then
set caster = GetTriggerUnit()
set order = GetIssuedOrderId()
set ID = GetUnitUserData(caster)
if GetOrderTarget() != null then
set target = GetOrderTarget()
call GroupOrderTarget(udg_OwnedUnits[ID],order,target)
elseif GetOrderPointX() != null then
set x2 = GetUnitX(caster)
set y2 = GetUnitY(caster)
set x3 = GetOrderPointX()
set y3 = GetOrderPointY()
if GetUnitAbilityLevel(caster,udg_FormationONAbil) > 0 then
call GroupOrderFormation(udg_OwnedUnits[ID],order,x3,y3)
else
call GroupOrderOffset(udg_OwnedUnits[ID],order,x3-x2,y3-y2)
endif
else
call GroupOrder(udg_OwnedUnits[ID],order)
endif
endif
return false
endfunction
//++
function InitTri_GroupOrder takes nothing returns nothing
local integer i = 0
set gg_trg_GroupOrder = CreateTrigger( )
loop
exitwhen i > 15
call TriggerRegisterPlayerUnitEvent(gg_trg_GroupOrder,Player(i),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_GroupOrder,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER,null)
call TriggerRegisterPlayerUnitEvent(gg_trg_GroupOrder,Player(i),EVENT_PLAYER_UNIT_ISSUED_ORDER,null)
set i = i + 1
endloop
call TriggerAddCondition( gg_trg_GroupOrder, function Order )
endfunction
endlibrary
//TESH.scrollpos=91
//TESH.alwaysfold=0
//
// Group Control
// by Xonok
//
// Provides an API for making each unit have a group of owned units.
// Owned units can be added/removed with functions
// Dead units are removed automatically, their groups emptied.
//
library GroupControl initializer InitTri_GroupControl
//+ System globals. Don't use elsewhere
globals
private trigger DismissTrig = CreateTrigger()
private trigger RecruitTrig = CreateTrigger()
private trigger FormationTrig = CreateTrigger()
private trigger SelectTrig = CreateTrigger()
private trigger DeselectTrig = CreateTrigger()
private trigger OrderTrig = CreateTrigger()
private trigger OrderSwapTrig = CreateTrigger()
private trigger UnitDieTrig = CreateTrigger()
private unit u
private unit caster
private unit owner
private player p
private integer ID
private integer ID2
real array FormationX
real array FormationY
private string s
endglobals
//-
//+ Public functions. Use them however you wish
function ShowOwnageMarker takes unit u, boolean b returns nothing
set s = ""
set ID = GetUnitUserData(u)
if udg_OwnageMarker[ID] != null then
call DestroyEffect(udg_OwnageMarker[ID])
set udg_OwnageMarker[ID] = null
endif
if b then
if GetLocalPlayer() == GetOwningPlayer(u) then
set s = "Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl"
endif
set udg_OwnageMarker[ID] = AddSpecialEffectTarget(s,u,"overhead")
endif
set s = ""
endfunction
function DismissUnit takes unit u returns nothing
set ID = GetUnitUserData(u)
set owner = udg_UnitOwner[ID]
set ID2 = GetUnitUserData(owner)
call GroupRemoveUnit(udg_OwnedUnits[ID2],u)
set udg_UnitOwner[ID] = null
call DestroyEffect(udg_OwnageMarker[ID])
set udg_OwnageMarker[ID] = null
set udg_OwnedUnitCount[ID2] = udg_OwnedUnitCount[ID2] - 1
endfunction
function RecruitUnit takes unit u, unit commander returns nothing
set ID = GetUnitUserData(u)
set ID2 = GetUnitUserData(commander)
if udg_UnitOwner[ID] == null then
if udg_OwnedUnits[ID2] == null then
set udg_OwnedUnits[ID2] = CreateGroup()
endif
call GroupAddUnit(udg_OwnedUnits[ID2],u)
set udg_UnitOwner[ID] = commander
if IsUnitSelected(commander,GetOwningPlayer(commander)) then
call ShowOwnageMarker(u,true)
//set udg_OwnageMarker[ID] = AddSpecialEffectTarget("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl",u,"overhead")
endif
set udg_OwnedUnitCount[ID2] = udg_OwnedUnitCount[ID2] + 1
endif
endfunction
//-
//+ System functions. Don't use elsewhere
private function Dismiss takes nothing returns boolean
if GetSpellAbilityId() == udg_DismissAbil then
set u = GetSpellTargetUnit()
call DismissUnit(u)
endif
return false
endfunction
private function Recruit takes nothing returns boolean
if GetSpellAbilityId() == udg_RecruitAbil then
set u = GetSpellTargetUnit()
set caster = GetTriggerUnit()
call RecruitUnit(u,caster)
endif
return false
endfunction
private function SaveCoords takes nothing returns nothing
set u = GetEnumUnit()
set ID2 = GetUnitUserData(u)
set FormationX[ID2] = GetUnitX(u) - GetUnitX(owner)
set FormationY[ID2] = GetUnitY(u) - GetUnitY(owner)
endfunction
private function Formation takes nothing returns boolean
if GetSpellAbilityId() == udg_FormationOFFAbil then
set owner = GetTriggerUnit()
set ID = GetUnitUserData(owner)
call ForGroup(udg_OwnedUnits[ID],function SaveCoords)
elseif GetSpellAbilityId() == udg_FormationONAbil then
endif
return false
endfunction
private function GroupSelect takes nothing returns nothing
call ShowOwnageMarker(GetEnumUnit(),true)
endfunction
private function GroupDeselect takes nothing returns nothing
call ShowOwnageMarker(GetEnumUnit(),false)
endfunction
private function Select takes nothing returns boolean
set u = GetTriggerUnit()
if GetTriggerPlayer() == GetOwningPlayer(u) then
set ID = GetUnitUserData(u)
call ForGroup(udg_OwnedUnits[ID],function GroupSelect)
//call ShowOwnageMarker(u,true)
endif
return false
endfunction
private function Deselect takes nothing returns boolean
set u = GetTriggerUnit()
if GetTriggerPlayer() == GetOwningPlayer(u) then
set ID = GetUnitUserData(u)
call ForGroup(udg_OwnedUnits[ID],function GroupDeselect)
//call ShowOwnageMarker(u,false)
endif
return false
endfunction
private function CommanderDeath takes nothing returns nothing
call DismissUnit(GetEnumUnit())
endfunction
private function UnitDie takes nothing returns boolean
set u = GetTriggerUnit()
set ID = GetUnitUserData(u)
if udg_UnitOwner[ID] != null then
set owner = udg_UnitOwner[ID]
set ID2 = GetUnitUserData(owner)
call GroupRemoveUnit(udg_OwnedUnits[ID2],u)
set udg_OwnedUnitCount[ID2] = udg_OwnedUnitCount[ID2] - 1
set udg_UnitOwner[ID] = null
call DestroyEffect(udg_OwnageMarker[ID])
set udg_OwnageMarker[ID] = null
endif
if udg_OwnedUnitCount[ID] > 0 then
set owner = u
set ID2 = ID
call ForGroup(udg_OwnedUnits[ID2],function CommanderDeath)
endif
return false
endfunction
//-
//++
function InitTri_GroupControl takes nothing returns nothing
local integer i = 0
loop
exitwhen i > 15
call TriggerRegisterPlayerUnitEvent(DismissTrig,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerRegisterPlayerUnitEvent(RecruitTrig,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerRegisterPlayerUnitEvent(FormationTrig,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
call TriggerRegisterPlayerUnitEvent(SelectTrig,Player(i), EVENT_PLAYER_UNIT_SELECTED, null)
call TriggerRegisterPlayerUnitEvent(DeselectTrig,Player(i),EVENT_PLAYER_UNIT_DESELECTED, null)
call TriggerRegisterPlayerUnitEvent(UnitDieTrig,Player(i),EVENT_PLAYER_UNIT_DEATH, null)
set i = i + 1
endloop
call TriggerAddCondition(DismissTrig,Filter(function Dismiss))
call TriggerAddCondition(RecruitTrig,Filter(function Recruit))
call TriggerAddCondition(FormationTrig,Filter(function Formation))
call TriggerAddCondition(SelectTrig,Filter(function Select))
call TriggerAddCondition(DeselectTrig,Filter(function Deselect))
call TriggerAddCondition(UnitDieTrig,Filter(function UnitDie))
endfunction
endlibrary