Name | Type | is_array | initial_value |
Armor | real | No | |
AttackCavalry | group | No | |
AttackNorthArcher | group | No | |
AttackNorthFootman | group | No | |
AttackNorthMilitia | group | No | |
AttackSouthArcher | group | No | |
AttackSouthFootman | group | No | |
AttackSouthMilita | group | No | |
Backstab_Source_Angle | real | No | |
Backstab_Target_Angle | real | No | |
Backstab_Threshold | real | No | |
BoleanCostBLCrossbowman | boolean | No | |
BoleanCostBLFootman | boolean | No | |
BoleanCostBLKnight | boolean | No | |
BoleanCostBLPikeman | boolean | No | |
BoleanCostCrossbowman | boolean | No | |
BoleanCostElvenArcher | boolean | No | |
BoleanCostElvenCavalry | boolean | No | |
BoleanCostElvenSpearman | boolean | No | |
BoleanCostElvenSwordman | boolean | No | |
BoleanCostFootman | boolean | No | |
BoleanCostKnight | boolean | No | |
BoleanCostMilitia | boolean | No | |
BoleanCostPikeman | boolean | No | |
BoleanDifculty | boolean | Yes | |
ButtonLevel | button | Yes | |
ButtonLevel_Copy | button | Yes | |
CargoEvent | real | No | |
CargoTransportGroup | group | Yes | |
CargoTransportUnit | unit | Yes | |
CheckDeathInList | boolean | Yes | |
CheckDeathList | integer | Yes | |
CheckDeathTimer | timer | No | |
ClearDamageEvent | trigger | No | |
DeathEvent | real | No | |
DetectRemoveAbility | abilcode | No | |
DetectTransformAbility | abilcode | No | |
DialogLevel | dialog | No | |
HeroVariable | unit | No | |
IntegerFood | integer | No | |
IntegerGold | integer | No | |
IntegerGold1 | integer | No | |
IntegerHorses | integer | No | |
IntegerHorsesTOTAL | integer | No | |
IntegerHouse | integer | No | |
IntegerIron1 | integer | No | |
IntegerIron2 | integer | No | |
IntegerIronColected1 | integer | No | |
IntegerIronColected2 | integer | No | |
IntegerIronCrossbow | integer | No | |
IntegerIronmine1 | integer | No | |
IntegerIronmine2 | integer | No | |
IntegerIronPike | integer | No | |
IntegerIronShield | integer | No | |
IntegerIronSteelTOTAL | integer | No | |
IntegerIronSword | integer | No | |
IntegerIronTOTAL | integer | No | |
IntegerLeather | integer | No | |
IntegerLeatherAmor | integer | No | |
IntegerLeatherTOTAL | integer | No | |
IntegerLumber1 | integer | No | |
IntegerMill | integer | No | |
IntegerNumberWood1 | integer | No | 0 |
IntegerNumberWood2 | integer | No | 0 |
IntegerRNaxeman | integer | No | |
IntegerRNfootman | integer | No | |
IntegerRNmilita | integer | No | |
IntegerSawmill | integer | No | |
IntegerTimber | integer | No | |
IntegerTimberTOTAL | integer | No | |
IntegerWood | integer | No | |
IntegerWoodBow | integer | No | |
IntegerWoodCuterHut | integer | No | |
IntegerWoodShield | integer | No | |
IntegerWoodSpear | integer | No | |
IntegerWoodSword | integer | No | |
IntegerWoodTOTAL | integer | No | |
IsDamageSpell | boolean | No | |
IsUnitAlive | boolean | Yes | |
IsUnitBeingUnloaded | boolean | Yes | |
IsUnitNew | boolean | Yes | |
IsUnitPreplaced | boolean | Yes | |
IsUnitReincarnating | boolean | Yes | |
IsUnitRemoved | boolean | Yes | |
IsUnitTransforming | boolean | Yes | |
ItemTimber1a | item | No | |
ItemTimber1b | item | No | |
ItemTimber1c | item | No | |
ItemTimber2a | item | No | |
ItemTimber2b | item | No | |
ItemTimber2c | item | No | |
ItemWood1a | item | No | |
ItemWood1b | item | No | |
ItemWood1c | item | No | |
ItemWood2a | item | No | |
ItemWood2b | item | No | |
ItemWood2c | item | No | |
KillerOfUnit | unit | Yes | |
LocationBuilding | location | No | |
nMilitiaOrArcher | integer | No | |
NumberColourBLUE | integer | No | |
NumberColourRED | integer | No | |
NumeroAleat | integer | No | |
Peon | unit | No | |
Point | location | No | |
PointBuilding | location | No | |
PointSawmill1 | location | No | |
PointSawmill2 | location | No | |
PointTownCenter | location | No | |
PointWoodCutters1 | location | No | |
PointWoodCutters2 | location | No | |
QuestMain | quest | No | |
RandomNumberSound1 | integer | No | |
RandomNumberSound2 | integer | No | |
RandomNumberSound3 | integer | No | |
RandomNumberSound4 | integer | No | |
RandomNumberSound5 | integer | No | |
RandomNumberSound6 | integer | No | |
RandomNumberSound7 | integer | No | |
RandomNumberSound8 | integer | No | |
RangeReal2 | real | No | |
RNAttack | integer | No | |
RNAttackTYPE | integer | No | |
RNBashAxeFighter | integer | No | |
Road_Point | location | Yes | |
Sawmill1 | unit | No | |
Sawmill2 | unit | No | |
SawmillItemA | unit | No | |
SummonerOfUnit | unit | Yes | |
TempCaster | unit | No | |
tempcaster | unitcode | No | |
TempGroup | group | Yes | |
TempLoc | location | Yes | |
TempLoc1 | location | No | |
Tempoint2 | location | No | |
TempPoint1 | location | No | |
TempPoint2 | location | No | |
TempPrec | rect | Yes | |
TempUnit | unit | No | |
TrainedUnitType | unitcode | No | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexLastRecycled | integer | No | |
UDexMax | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
UGAxeBridge | group | No | |
UGAxeTown | group | No | |
UGBowmanBridge | group | No | |
UGBowmanTownCenter | group | No | |
UGBowmanTownRight | group | No | |
UGBuildings | group | No | |
UGCavalryTown | group | No | |
UGGreenAxeLeft | group | No | |
UGGreenAxeRight | group | No | |
UGGreenBowmanForest | group | No | |
UGGreenBowmanLeft | group | No | |
UGGreenBowmanRight | group | No | |
UGGreenCavalryForest | group | No | |
UGGreenCavalryTown | group | No | |
UGHouses | group | No | |
UGIddleLaborers | group | No | |
UGIddleSerfs | group | No | |
UGMill | group | No | |
UGReinforcmentsBowman | group | No | |
UGReinforcmentsInfantry | group | No | |
UGReinforcmentsSpearman | group | No | |
UGroads | group | No | |
UGSawmill | group | No | |
UGSpearmanTown | group | No | |
UnitCarpenter1 | unit | No | |
UnitCarpenter2 | unit | No | |
UnitDamageRegistered | boolean | Yes | |
UnitGroup | group | No | |
UnitInAction | boolean | Yes | |
UnitInActionEvent | real | No | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexLock | integer | Yes | |
UnitMiningCamp1 | unit | No | |
UnitMiningCamp2 | unit | No | |
UnitName | string | Yes | |
UnitSerfWood1a | unit | No | |
UnitSerfWood1b | unit | No | |
UnitSerfWood1c | unit | No | |
UnitSerfWood2a | unit | No | |
UnitSerfWood2b | unit | No | |
UnitSerfWood2c | unit | No | |
UnitsInRangeGroup | group | No | |
UnitTrainning | unit | No | |
UnitTypeEvent | real | No | |
UnitTypeOf | unitcode | Yes | |
UnitWoodCutter1 | unit | No | |
UnitWoodCutter2 | unit | No | |
UnitWoodCutterHut1 | unit | No | |
UnitWoodCutterHut2 | unit | No | |
WeaponWorkshop | unit | No | |
WeaponWorkshopLoop | integervar | No | |
WorldMaxX | real | No | |
WorldMaxY | real | No |
//===========================================================================
function UnitEventDestroyGroup takes integer i returns nothing
if udg_CargoTransportGroup[i] != null then
call DestroyGroup(udg_CargoTransportGroup[i])
set udg_CargoTransportGroup[i] = null
endif
endfunction
function UnitEventCheckAfter takes nothing returns nothing
local integer id = 0
local unit u
loop
set id = udg_CheckDeathList[id]
exitwhen id == 0
set udg_UDex = id
set u = udg_UDexUnits[id]
if udg_IsUnitNew[id] then
//The unit was just created.
set udg_IsUnitNew[id] = false
set udg_UnitIndexEvent = 1.50 //New event requested by SpellBound to detect when unit fully enters scope.
set udg_UnitIndexEvent = 0.00
elseif udg_IsUnitTransforming[id] then
//Added 21 July 2017 to fix the issue re-adding this ability in the same instant
set udg_UnitTypeEvent = 0.00
set udg_UnitTypeEvent = 1.00
set udg_UnitTypeOf[id] = GetUnitTypeId(u) //Set this afterward as otherwise the user won't know what the previous unittype was.
set udg_IsUnitTransforming[id] = false
call UnitAddAbility(u, udg_DetectTransformAbility)
elseif udg_IsUnitAlive[id] then
//The unit has started reincarnating.
set udg_IsUnitReincarnating[id] = true
set udg_IsUnitAlive[id] = false
set udg_DeathEvent = 0.50
set udg_DeathEvent = 0.00
elseif GetUnitTypeId(u) != 0 and not IsUnitType(u, UNIT_TYPE_DEAD) then //with vJass, could just use UnitAlive instead of both of these values.
//Moved this code to fire after a 0 second timer instead.
set udg_IsUnitAlive[id] = true
set udg_DeathEvent = 2.00
set udg_DeathEvent = 0.00
set udg_IsUnitReincarnating[id] = false
endif
set udg_CheckDeathInList[id] = false
endloop
set u = null
//Empty the list
set udg_CheckDeathList[0] = 0
endfunction
function UnitEventCheckAfterProxy takes integer i returns nothing
if udg_CheckDeathList[0] == 0 then
call TimerStart(udg_CheckDeathTimer, 0.00, false, function UnitEventCheckAfter)
endif
if not udg_CheckDeathInList[i] then
set udg_CheckDeathList[i] = udg_CheckDeathList[0]
set udg_CheckDeathList[0] = i
set udg_CheckDeathInList[i] = true
endif
endfunction
function UnitEventOnUnload takes nothing returns nothing
local integer i = udg_UDex
call GroupRemoveUnit(udg_CargoTransportGroup[GetUnitUserData(udg_CargoTransportUnit[i])], udg_UDexUnits[i])
set udg_IsUnitBeingUnloaded[i] = true
set udg_CargoEvent = 0.00
set udg_CargoEvent = 2.00
set udg_CargoEvent = 0.00
set udg_IsUnitBeingUnloaded[i] = false
if not IsUnitLoaded(udg_UDexUnits[i]) or IsUnitType(udg_CargoTransportUnit[i], UNIT_TYPE_DEAD) or GetUnitTypeId(udg_CargoTransportUnit[i]) == 0 then
set udg_CargoTransportUnit[i] = null
endif
endfunction
function UnitEventOnDeath takes nothing returns boolean
local integer pdex = udg_UDex
set udg_UDex = GetUnitUserData(GetTriggerUnit())
if udg_UDex != 0 then
set udg_KillerOfUnit[udg_UDex] = GetKillingUnit() //Added 29 May 2017 for GIMLI_2
set udg_IsUnitAlive[udg_UDex] = false
set udg_DeathEvent = 0.00
set udg_DeathEvent = 1.00
set udg_DeathEvent = 0.00
set udg_KillerOfUnit[udg_UDex] = null
if udg_CargoTransportUnit[udg_UDex] != null then
call UnitEventOnUnload()
endif
endif
set udg_UDex = pdex
return false
endfunction
function UnitEventOnOrder takes nothing returns boolean
local integer pdex = udg_UDex
local unit u = GetFilterUnit()
local integer i = GetUnitUserData(u)
if i > 0 then
set udg_UDex = i
if GetUnitAbilityLevel(u, udg_DetectRemoveAbility) == 0 then
if not udg_IsUnitRemoved[i] then
set udg_IsUnitRemoved[i] = true
set udg_IsUnitAlive[i] = false
set udg_SummonerOfUnit[i] = null
//For backwards-compatibility:
set udg_DeathEvent = 0.00
set udg_DeathEvent = 3.00
set udg_DeathEvent = 0.00
//Fire deindex event for UDex:
set udg_UnitIndexEvent = 0.00
set udg_UnitIndexEvent = 2.00
set udg_UnitIndexEvent = 0.00
set udg_UDexNext[udg_UDexPrev[i]] = udg_UDexNext[i]
set udg_UDexPrev[udg_UDexNext[i]] = udg_UDexPrev[i]
// Recycle the index for later use
set udg_UDexUnits[i] = null
set udg_UDexPrev[i] = udg_UDexLastRecycled
set udg_UDexLastRecycled = i
call UnitEventDestroyGroup(i)
endif
elseif not udg_IsUnitAlive[i] then
if not IsUnitType(u, UNIT_TYPE_DEAD) then
call UnitEventCheckAfterProxy(i) //modified 22 Oct 2022 to ensure the unit is fully revived before firing the event.
endif
elseif IsUnitType(u, UNIT_TYPE_DEAD) then
if udg_IsUnitNew[i] then
//This unit was created as a corpse.
set udg_IsUnitAlive[i] = false
set udg_DeathEvent = 0.00
set udg_DeathEvent = 1.00
set udg_DeathEvent = 0.00
elseif udg_CargoTransportUnit[i] == null or not IsUnitType(u, UNIT_TYPE_HERO) then
//The unit may have just started reincarnating.
call UnitEventCheckAfterProxy(i)
endif
elseif GetUnitAbilityLevel(u, udg_DetectTransformAbility) == 0 and not udg_IsUnitTransforming[i] then
set udg_IsUnitTransforming[i] = true
call UnitEventCheckAfterProxy(i) //This block has been updated on 21 July 2017
endif
if udg_CargoTransportUnit[i] != null and not udg_IsUnitBeingUnloaded[i] and not IsUnitLoaded(u) or IsUnitType(u, UNIT_TYPE_DEAD) then
call UnitEventOnUnload()
endif
set udg_UDex = pdex
endif
set u = null
return false
endfunction
function UnitEventOnSummon takes nothing returns boolean
local integer pdex = udg_UDex
set udg_UDex = GetUnitUserData(GetTriggerUnit())
if udg_IsUnitNew[udg_UDex] then
set udg_SummonerOfUnit[udg_UDex] = GetSummoningUnit()
set udg_UnitIndexEvent = 0.00
set udg_UnitIndexEvent = 0.50
set udg_UnitIndexEvent = 0.00
endif
set udg_UDex = pdex
return false
endfunction
function UnitEventOnLoad takes nothing returns boolean
local integer pdex = udg_UDex
local integer i = GetUnitUserData(GetTriggerUnit())
local integer index
if i != 0 then
set udg_UDex = i
if udg_CargoTransportUnit[i] != null then
call UnitEventOnUnload()
endif
//Loaded corpses do not issue an order when unloaded, therefore must
//use the enter-region event method taken from Jesus4Lyf's Transport.
if not udg_IsUnitAlive[i] then
call SetUnitX(udg_UDexUnits[i], udg_WorldMaxX)
call SetUnitY(udg_UDexUnits[i], udg_WorldMaxY)
endif
set udg_CargoTransportUnit[i] = GetTransportUnit()
set index = GetUnitUserData(udg_CargoTransportUnit[i])
if udg_CargoTransportGroup[index] == null then
set udg_CargoTransportGroup[index] = CreateGroup()
endif
call GroupAddUnit(udg_CargoTransportGroup[index], udg_UDexUnits[i])
set udg_CargoEvent = 0.00
set udg_CargoEvent = 1.00
set udg_CargoEvent = 0.00
set udg_UDex = pdex
endif
return false
endfunction
function UnitEventEnter takes nothing returns boolean
local integer pdex = udg_UDex
local integer i = udg_UDexLastRecycled
local unit u = GetFilterUnit()
if udg_UnitIndexerEnabled and GetUnitAbilityLevel(u, udg_DetectRemoveAbility) == 0 then
//Generate a unique integer index for this unit
if i == 0 then
set i = udg_UDexMax + 1
set udg_UDexMax = i
else
set udg_UDexLastRecycled = udg_UDexPrev[i]
endif
//Link index to unit, unit to index
set udg_UDexUnits[i] = u
call SetUnitUserData(u, i)
//For backwards-compatibility, add the unit to a linked list
set udg_UDexNext[i] = udg_UDexNext[0]
set udg_UDexPrev[udg_UDexNext[0]] = i
set udg_UDexNext[0] = i
set udg_UDexPrev[i] = 0
set udg_CheckDeathInList[i] = false
call UnitAddAbility(u, udg_DetectRemoveAbility)
call UnitMakeAbilityPermanent(u, true, udg_DetectRemoveAbility)
call UnitAddAbility(u, udg_DetectTransformAbility)
set udg_UnitTypeOf[i] = GetUnitTypeId(u)
set udg_IsUnitNew[i] = true
set udg_IsUnitAlive[i] = true
set udg_IsUnitRemoved[i] = false
set udg_IsUnitReincarnating[i] = false
set udg_IsUnitPreplaced[i] = udg_IsUnitPreplaced[0] //Added 29 May 2017 for Spellbound
call UnitEventCheckAfterProxy(i)
//Fire index event for UDex
set udg_UDex = i
set udg_UnitIndexEvent = 0.00
set udg_UnitIndexEvent = 1.00
set udg_UnitIndexEvent = 0.00
else
set udg_UDex = GetUnitUserData(u)
if udg_CargoTransportUnit[udg_UDex] != null and not IsUnitLoaded(u) then
//The unit was dead, but has re-entered the map.
call UnitEventOnUnload()
endif
endif
set udg_UDex = pdex
set u = null
return false
endfunction
//===========================================================================
function UnitEventInit takes nothing returns nothing
local integer i = bj_MAX_PLAYER_SLOTS //update to make it work with 1.29
local player p
local trigger t = CreateTrigger()
local trigger load = CreateTrigger()
local trigger death = CreateTrigger()
local trigger summon = CreateTrigger()
local rect r = GetWorldBounds()
local region re = CreateRegion()
local boolexpr enterB = Filter(function UnitEventEnter)
local boolexpr orderB = Filter(function UnitEventOnOrder)
set udg_WorldMaxX = GetRectMaxX(r)
set udg_WorldMaxY = GetRectMaxY(r)
call RegionAddRect(re, r)
call RemoveRect(r)
call UnitEventDestroyGroup(0)
call UnitEventDestroyGroup(1)
set udg_CheckDeathList[0] = 0
set udg_UnitIndexerEnabled = true
call TriggerRegisterEnterRegion(CreateTrigger(), re, enterB)
call TriggerAddCondition(load, Filter(function UnitEventOnLoad))
call TriggerAddCondition(death, Filter(function UnitEventOnDeath))
call TriggerAddCondition(summon, Filter(function UnitEventOnSummon))
loop
set i = i - 1
set p = Player(i)
call SetPlayerAbilityAvailable(p, udg_DetectRemoveAbility, false)
call SetPlayerAbilityAvailable(p, udg_DetectTransformAbility, false)
call TriggerRegisterPlayerUnitEvent(summon, p, EVENT_PLAYER_UNIT_SUMMON, null)
call TriggerRegisterPlayerUnitEvent(t, p, EVENT_PLAYER_UNIT_ISSUED_ORDER, orderB)
call TriggerRegisterPlayerUnitEvent(death, p, EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(load, p, EVENT_PLAYER_UNIT_LOADED, null)
call GroupEnumUnitsOfPlayer(bj_lastCreatedGroup, p, enterB)
exitwhen i == 0
endloop
set summon = null
set death = null
set load = null
set re = null
set enterB = null
set orderB = null
set p = null
set r = null
set t = null
endfunction
function InitTrig_Unit_Event takes nothing returns nothing
endfunction