Name | Type | is_array | initial_value |
AI_PatienceCounter | integer | Yes | |
AI_PatienceDistance | real | No | |
AI_PatienceNewPos | location | Yes | |
AI_PatienceNewPosX | real | Yes | |
AI_PatienceNewPosY | real | Yes | |
AI_PatienceNewTarget | unit | Yes | |
AI_PatienceOldPos | location | Yes | |
AI_PatienceOldPosX | real | Yes | |
AI_PatienceOldPosY | real | Yes | |
AI_PatienceOldTarget | unit | Yes | |
AI_PatienceRange | integer | Yes | |
AI_PatienceTimer | timer | Yes | |
AI_PatienceTimerIsCreated | boolean | Yes | |
AI_PatienceTimerSeconds | real | No | |
Archery_AccuracyAngle | real | No | |
Archery_AccuracyLevel | real | No | |
Archery_AccuracyValue | integer | No | |
Archery_KillCounter | integer | No | |
Archery_PosOrNegRandomizer | integer | No | |
Arena_DesCountCurrent | integer | No | |
Arena_DesCountMax | integer | No | |
Arena_DesCountTemp | integer | No | |
Arena_DesPoint | location | No | |
Arena_DesPointArraySaved | location | Yes | |
Arena_DesPointX | real | No | |
Arena_DesPointY | real | No | |
Arena_DesRandomDes | integer | No | |
Arena_SimilarPointCheck | boolean | No | |
Armor_AttachmentArray | abilcode | Yes | |
Armor_AttachmentTempIndex | integer | No | |
Armor_BonusHealth | real | No | |
Armor_CurrentArmorType | itemcode | No | |
Armor_CurrentHealthPercentTemp | real | No | |
Artillery_AOE | real | No | |
Artillery_Damage | real | No | |
Artillery_Duration | real | No | |
Artillery_Group | group | No | |
Artillery_Point | location | Yes | |
Back_ActionSelectDialogButton | button | Yes | |
Back_ActionSelectDialogMenu | dialog | No | |
Back_AngleMath | real | No | |
Back_ItemChance | real | Yes | |
Back_ItemChanceDice | real | No | |
Back_ItemMax | integer | No | |
Back_ItemRandomizer | integer | No | |
Back_ItemStolen | item | No | |
Back_PickRandomInvSlot | integer | No | |
Back_PointCaster | location | No | |
Back_PointTarget | location | No | |
Back_PrevUnit | unit | No | |
Back_PrevUnitPatience | integer | No | |
Back_RegItemType | itemcode | Yes | |
Back_RunDialogFlag | boolean | No | |
Back_UnitCaster | unit | No | |
Back_UnitTarget | unit | No | |
Barricade_TargetPoint | location | Yes | |
Blood_DyingPoint | location | No | |
Blood_DyingUnit | unit | No | |
Blood_Randomizer | integer | No | |
Bombard_BombCount | integer | No | |
Bombard_BombTimer | timer | No | |
Bombard_BombTimerWindow | timerdialog | No | |
Bombard_Counter | integer | No | |
Bombard_HeroPoint | location | No | |
Bombard_Interval | real | No | |
Bombard_IsCurrentlyRunning | boolean | No | |
Bombard_TargetPoint | location | No | |
Bombard_TargetPointsX | real | Yes | |
Bombard_TargetPointsY | real | Yes | |
Bomber_AOE | real | No | |
Bomber_BombGroup | group | No | |
Bomber_Damage | real | No | |
Bomber_LifeSpan | real | No | |
Bomber_PlaneGroup | group | No | |
Bomber_Point | location | Yes | |
BS_Angle | real | Yes | |
BS_ArcHeight | real | Yes | |
BS_Colision | real | Yes | |
BS_Current | integer | No | |
BS_Damage | real | Yes | |
BS_Debug | real | Yes | |
BS_DebugZ | real | Yes | |
BS_DistanceToTravel | real | Yes | |
BS_Group | group | Yes | |
BS_Hero | unit | Yes | |
BS_HYPSpeed | real | Yes | |
BS_Level | integer | Yes | |
BS_MaxDistance | real | Yes | |
BS_MC | integervar | No | |
BS_Missile | unit | Yes | |
BS_MissileCount | integer | No | |
BS_On | boolean | Yes | |
BS_Parabola | real | Yes | |
BS_Point | location | Yes | |
BS_Range | real | Yes | |
BS_Skip | integer | No | |
BS_Speed | real | Yes | |
BS_SpeedZ | real | Yes | |
BS_StartZ | real | Yes | |
BS_Times | integer | No | |
BS_Up | boolean | Yes | |
BSX_AOEGroup | group | No | |
BSX_DamageTemp | real | No | |
BSX_DummyType | unitcode | No | |
BSX_ExplodeAOE | real | No | |
BSX_IsExploding | boolean | Yes | |
BSX_IsExplodingTemp | boolean | No | |
BSX_IsLuring | boolean | Yes | |
BSX_IsMelee | boolean | No | |
BSX_LurePower | integer | No | |
BSX_SourceUnit | unit | No | |
BSX_SourceUnitLoc | location | No | |
Carry_CarriedObject | unit | No | |
Carry_CarriedObjectOwner | player | No | |
Carry_CarryingPoint | location | No | |
Carry_CarryingUnit | unit | No | |
Carry_HasObjectOnHand | unit | No | |
Chest_ContainerItemType01 | itemcode | Yes | |
Chest_ContainerItemType02 | itemcode | Yes | |
Chest_ContainerItemType03 | itemcode | Yes | |
Chest_ContainerItemType04 | itemcode | Yes | |
Chest_ContainerSize | integer | No | |
Chest_ContainerUnitArray | unit | Yes | |
Chest_ContainerUnitMaxIndex | integer | No | |
Chest_RegContainerDestType | destructablecode | Yes | |
Chest_RegContainerUnitArray | unit | Yes | |
Chest_RegItemTypeArray | itemcode | Yes | |
Chest_RegItemTypeDiceRoll | integer | No | |
Chest_RegItemTypeMaxIndex | integer | No | |
Chest_RespawnTimer | timer | No | |
Chest_SelectedUnitIndex | integer | No | |
CM_CompanionGroup | group | No | |
CM_CompanionTargetPoint | location | No | |
CN_DropRandomizer | integer | No | |
CN_HelicopterHeight | real | No | |
CN_HelicopterUnit | unit | No | |
CP_HiddenItems | item | Yes | |
CP_HiddenItemsIndex | integer | No | |
CP_Item | item | No | |
CP_Point | location | No | |
CP_PointIsWalkable | boolean | No | |
CP_Rect | rect | No | |
Debug_WarningCode | integer | No | |
Debug_WarningMessageTime | real | No | |
Debug_WarningSource | unit | No | |
DMG_AfterDamageEvent | real | No | |
DMG_AllowDamage | boolean | No | |
DMG_AOEDamageEvent | real | No | |
DMG_ClearDamageEvent | trigger | No | |
DMG_DamageBlockingAbility | abilcode | No | |
DMG_DamageEvent | real | No | |
DMG_DamageEventAmount | real | No | |
DMG_DamageEventAOE | integer | No | |
DMG_DamageEventAOEGroup | group | No | |
DMG_DamageEventBracers | itemcode | No | |
DMG_DamageEventLevel | integer | No | |
DMG_DamageEventOverride | boolean | No | |
DMG_DamageEventPrevAmount | real | No | |
DMG_DamageEventRecursionN | integer | No | |
DMG_DamageEventRunning | boolean | No | |
DMG_DamageEventSource | unit | No | |
DMG_DamageEventStarted | boolean | No | |
DMG_DamageEventsWasted | integer | No | |
DMG_DamageEventTarget | unit | No | |
DMG_DamageEventTimer | timer | No | |
DMG_DamageEventTrig | trigger | No | |
DMG_DamageEventTrigger | trigger | No | |
DMG_DamageEventType | integer | No | |
DMG_DamageFactorBracers | real | No | |
DMG_DamageFactorElunes | real | No | |
DMG_DamageFactorEthereal | real | No | |
DMG_DamageModifierEvent | real | No | |
DMG_DamageTypeBlocked | integer | No | |
DMG_DamageTypeCritical | integer | No | |
DMG_DamageTypeExplosive | integer | No | |
DMG_DamageTypeHeal | integer | No | |
DMG_DamageTypeVoid | integer | No | |
DMG_EnhancedDamageTarget | unit | No | |
DMG_HideDamageFrom | boolean | Yes | |
DMG_IsDamageSpell | boolean | No | |
DMG_LastDamageHP | real | No | |
DMG_LastDamagePrevAmount | real | Yes | |
DMG_LastDamagePrevType | integer | Yes | |
DMG_LastDamageSource | unit | Yes | |
DMG_LastDamageTarget | unit | Yes | |
DMG_LastDamageValue | real | Yes | |
DMG_LastDamageWasSpell | boolean | Yes | |
DMG_NextDamageOverride | boolean | No | |
DMG_NextDamageType | integer | No | |
DMG_SpellDamageAbility | abilcode | No | |
DMG_UnitDamageRegistered | boolean | Yes | |
GB_FogColorDefault | real | Yes | |
GB_FogColorToxic | real | Yes | |
GB_FogDistDefault | real | Yes | |
GB_FogDistToxic | real | Yes | |
Global_ActionRenderGroupNew | group | No | |
Global_ActionRenderGroupPrev | group | No | |
Global_ActionRenderPoint | location | Yes | |
Global_BuffUnitSpawnLoc | location | No | |
Global_CameraDistance | real | No | |
Global_CameraFOV | real | No | |
Global_CameraRotation | real | No | |
Global_CameraSpanSpeed | real | No | |
Global_CenterCameraIsInterior | boolean | No | |
Global_CenterCameraIsSpawned | boolean | No | |
Global_CenterCameraIsTestArea | boolean | No | |
Global_CenterCameraPoint | location | No | |
Global_CenterCameraUnit | unit | No | |
Global_DevSPCheck | boolean | No | |
Global_FreezingUnit | unit | No | |
Global_GameMode | integer | No | |
Global_HasSelectedHero | boolean | No | |
Global_HasSelectedUnit | boolean | No | |
Global_HeroCurrentArmor | integer | No | |
Global_HeroCurrentHealth | integer | No | |
Global_Homebase | unit | No | |
Global_HomebasePoint | location | No | |
Global_InitialHeroHealth | integer | No | |
Global_InitInvulnerable | boolean | No | |
Global_LMBMouseNewPoint | location | No | |
Global_LMBMouseNewTime | real | No | |
Global_LMBMouseNewX | real | No | |
Global_LMBMouseNewY | real | No | |
Global_LMBMouseOldPoint | location | No | |
Global_LMBMouseOldTime | real | No | |
Global_LMBMouseOldX | real | No | |
Global_LMBMouseOldY | real | No | |
Global_LMBMouseTimer | timer | No | |
Global_MainHero_Ingame | unit | No | |
Global_MainHero_Inventory | unit | No | |
Global_MouseUnit | unit | No | |
Global_MouseUnitIsSpawned | boolean | No | |
Global_MouseUnitPoint | location | No | |
Global_ReleaseCheckALLOWSB | boolean | No | |
Global_ReleaseCheckALLOWSV | boolean | No | |
Global_RMBMouseClickPoint | location | No | |
Global_SelectedUnitCount | integer | No | |
Global_SelectedUnitGroup | group | No | |
Global_Spawn | location | No | |
Global_StunUnitMech | unit | No | |
Global_StunUnitOrganic | unit | No | |
Grass_CheckAbility | boolean | No | |
Grass_Count | integer | No | |
Grass_Point | location | No | |
Grass_TempPoint | location | No | |
Grass_Timer | integer | No | |
Grass_TimerUnit | unit | No | |
Home_BaseType | unitcode | No | |
Horse_BetNumber | integer | No | |
Horse_DiceRoll | real | No | |
Horse_DiceRollMax | real | No | |
Horse_DiceRollMin | real | No | |
Horse_HorseFinishPointArray | location | Yes | |
Horse_HorseSpawnPointArray | location | Yes | |
Horse_HorseUnitArray | unit | Yes | |
Horse_WinningNumber | integer | No | |
Hunger_HungerValue | integer | No | |
Hunger_Timer | timer | No | |
Hunger_TimerTime | real | No | |
Hunger_TimerWindow | timerdialog | No | |
ID_IsUnitPreplaced | boolean | Yes | |
ID_UDex | integer | No | |
ID_UDexGen | integer | No | |
ID_UDexNext | integer | Yes | |
ID_UDexPrev | integer | Yes | |
ID_UDexRecycle | integer | No | |
ID_UDexUnits | unit | Yes | |
ID_UDexWasted | integer | No | |
ID_UnitIndexerEnabled | boolean | No | |
ID_UnitIndexEvent | real | No | |
IM_UMovNext | integer | Yes | |
IM_UMovPrev | integer | Yes | |
IM_UnitMovementInterval | real | No | |
IM_UnitMoving | boolean | Yes | |
IM_UnitMovingEvent | real | No | |
IM_UnitMovingX | real | Yes | |
IM_UnitMovingY | real | Yes | |
Init_IntroDialogWelcome | dialog | No | |
Init_ModePickDialog | dialog | No | |
Init_ModePickDialogButton | button | Yes | |
KB_Angle | real | Yes | |
KB_Casters | unit | Yes | |
KB_CountBuffs | integer | No | |
KB_CurrentIndex | integer | Yes | |
KB_DestroyTrees | boolean | Yes | |
KB_EffectCounter | integer | Yes | |
KB_EffectCounter2 | integer | Yes | |
KB_Effects_1 | string | Yes | |
KB_Effects_2 | string | Yes | |
KB_KnockbackedUnits | group | No | |
KB_Levels | integer | Yes | |
KB_MaxDistance | real | Yes | |
KB_MaxIndex | integer | No | |
KB_Order | ordercode | No | |
KB_ReachedDistance | real | Yes | |
KB_ReducedReal | real | No | |
KB_ReduceSpeedReal | real | Yes | |
KB_SpecificSpeed | real | Yes | |
KB_StartPositions | location | Yes | |
KB_TempPoint | location | Yes | |
KB_TempReal | real | No | |
KB_Units | unit | Yes | |
KB_X | real | No | |
KB_Y | real | No | |
KBA_AOEGroup | group | No | |
KBA_Caster | unit | No | |
KBA_DestroyTrees | boolean | No | |
KBA_DistancePerLevel | real | No | |
KBA_InvertKnockback | boolean | No | |
KBA_Level | integer | No | |
KBA_SourceUnitLoc | location | No | |
KBA_SpecialEffects | string | Yes | |
KBA_Speed | real | No | |
KBA_StartingPosition | location | No | |
KBA_TargetUnit | unit | No | |
Leap_Angle | real | Yes | |
Leap_ArcHeight | real | Yes | |
Leap_Colision | real | Yes | |
Leap_Current | integervar | No | |
Leap_Damage | real | Yes | |
Leap_Debug | real | Yes | |
Leap_DebugZ | real | Yes | |
Leap_DistanceToTravel | real | Yes | |
Leap_Group | group | Yes | |
Leap_Hero | unit | Yes | |
Leap_HYPSpeed | real | Yes | |
Leap_Level | integer | Yes | |
Leap_MaxDistance | real | Yes | |
Leap_Missile | unit | Yes | |
Leap_On | boolean | Yes | |
Leap_Parabola | real | Yes | |
Leap_Point | location | Yes | |
Leap_Range | real | Yes | |
Leap_Skip | integer | No | |
Leap_Speed | real | Yes | |
Leap_SpeedZ | real | Yes | |
Leap_StartZ | real | Yes | |
Leap_Times | integer | No | |
Leap_Up | boolean | Yes | |
Leap_X | real | No | |
Leap_Y | real | No | |
Loadout_BagOwner | unit | No | |
Loadout_Inventory01Item | itemcode | Yes | |
Loadout_Inventory01ItemCharges | integer | Yes | |
Loadout_Inventory02Item | itemcode | Yes | |
Loadout_Inventory02ItemCharges | integer | Yes | |
Loadout_Inventory03Item | itemcode | Yes | |
Loadout_Inventory03ItemCharges | integer | Yes | |
Loadout_InventoryNumber | integer | No | 1 |
Loadout_ItemGatherer | unit | No | |
Map_GameCache | gamecache | No | |
Map_Hero | unit | No | |
Map_HeroCategory | string | No | |
Map_ItemInteger | integer | No | |
Map_ItemType | itemcode | No | |
Map_ItemTypeArray | itemcode | Yes | |
Map_SavePoint | location | No | |
Map_SavePointX | real | No | |
Map_SavePointY | real | No | |
MS_CrateGroup | group | No | |
MS_CratePoint | location | No | |
MS_LevelNumberMessage | integer | No | |
MS_LevelNumberSystem | integer | No | |
MS_LevelNumberUnitSpawn | integer | No | |
MS_LightCreated | boolean | No | |
MS_LightPoint | location | No | |
MS_LightUnit | unit | No | |
MS_MaxLevel | integer | No | |
MS_PlayerOwn | player | No | |
MS_PowerupGroup | group | No | |
MS_RegisteredUnit | unitcode | Yes | |
MS_RegisteredUnitDamage | integer | Yes | |
MS_RegisteredUnitDMGIncrement | integer | No | |
MS_RegisteredUnitHP | real | Yes | |
MS_RegisteredUnitHPIncrement | real | No | |
MS_RegisteredUnitsMax | integer | No | |
MS_RegisteredUnitSpeed | real | Yes | |
MS_RoundTimer | timer | No | |
MS_RoundTimerWindow | timerdialog | No | |
MS_SpawnComplete | boolean | Yes | |
MS_SpawnFlag | boolean | Yes | |
MS_SpawnLocation | rect | Yes | |
MS_SpawnLocationCheck | rect | Yes | |
MS_SpawnPoint | location | Yes | |
MS_TargetOfEnemies | unit | No | |
MS_TargetOfEnemiesLoc | location | No | |
MS_TempArray | integer | No | |
MS_TempSpawnPoint | location | No | |
MS_UnitAmountVar1 | integer | Yes | |
MS_UnitAmountVar2 | integer | Yes | |
MS_UnitAmountVar3 | integer | Yes | |
MS_UnitTypeVar1 | unitcode | Yes | |
MS_UnitTypeVar2 | unitcode | Yes | |
MS_UnitTypeVar3 | unitcode | Yes | |
MS_WaveGroup | group | Yes | |
NM_FemaleFNameArray | string | Yes | |
NM_FemaleFNameMax | integer | No | |
NM_FemaleFNameRandomizer | integer | No | |
NM_FemaleTypeMax | integer | No | |
NM_FemaleTypes | unitcode | Yes | |
NM_LastNameArray | string | Yes | |
NM_LastNameMax | integer | No | |
NM_LastNameRandomizer | integer | No | |
NM_MaleFNameArray | string | Yes | |
NM_MaleFNameMax | integer | No | |
NM_MaleFNameRandomizer | integer | No | |
NM_MaleTypeMax | integer | No | |
NM_MaleTypes | unitcode | Yes | |
Order_SavedTargetPoint | location | No | |
Order_SavedTargetPointX | real | No | |
Order_SavedTargetPointY | real | No | |
Order_SavedTargetUnit | unit | No | |
Order_SavedUnit | unit | No | |
Order_SavedUnitOrder | ordercode | No | |
Patrol_ClosestRegion | rect | No | |
Patrol_CurrentRange | real | No | |
Patrol_CurrentRegion | rect | Yes | |
Patrol_CurrentRegionInteger | integer | Yes | |
Patrol_Distance | real | No | |
Patrol_Group | group | No | |
Patrol_IdleUnitPoint | location | No | |
Patrol_NextRegion | rect | Yes | |
Patrol_NextRegionInteger | integer | Yes | |
Patrol_RandomIndex | integer | No | |
Patrol_RandomRegions | rect | Yes | |
Patrol_RegionArray | rect | Yes | |
Patrol_RegionCountMaxIndex | integer | No | |
Patrol_RegionOptions | integer | Yes | |
Patrol_RegionOptionsMaxIndex | integer | No | |
Patrol_TestSpawnPoint | location | No | |
Patrol_Unit | unit | No | |
Patrol_WaypointPoint | location | No | |
Pcht_Attachment | string | No | |
Pcht_Current | integer | No | |
Pcht_DropAngle | real | No | |
Pcht_DropCreateNew | boolean | No | |
Pcht_DropHeight | real | No | |
Pcht_DropPlayer | player | No | |
Pcht_DropPoint | location | No | |
Pcht_DropSpeed | real | No | |
Pcht_DropUnit | unit | No | |
Pcht_DropUnitType | unitcode | No | |
Pcht_EndTrigger | trigger | Yes | |
Pcht_Height | real | Yes | |
Pcht_LastCreatedUnit | unit | No | |
Pcht_Model | effect | Yes | |
Pcht_ModelPath | string | No | |
Pcht_Speed | real | Yes | |
Pcht_Times | integer | No | |
Pcht_Unit | unit | Yes | |
Pet_PetGroup | group | No | |
Pet_PetTargetPoint | location | No | |
Plant_Caster | unit | No | |
Plant_ClosestPlantPoint | location | No | |
Plant_MessageString | string | Yes | |
Plant_PlantGroup | group | No | |
Plant_SpawnPoint | location | No | |
Plant_TimeDice | real | No | |
QG_3DIndex | integer | No | |
QG_JobType | string | No | |
QG_LocateUnit | unit | No | |
QG_MessageApprove | string | Yes | |
QG_MessageLooking | string | Yes | |
QG_MessageMax | integer | No | |
QG_MessageReject | string | Yes | |
QG_MessageThanks | string | Yes | |
QG_Person | unit | Yes | |
QG_QuestAcceptDialog | dialog | No | |
QG_QuestAcceptDialogButton | button | Yes | |
QG_QuestDialogButtonClicked | integer | No | |
QG_QuestUnitDoneGroup | group | No | |
QG_QuestUnitNotDoneGroup | group | No | |
QG_Randomizer | integer | No | |
QG_TempGroup | group | No | |
QG_TempPlace | string | No | |
QG_TempPoint | location | No | |
QR_BountyDescription | string | Yes | |
QR_BountyGoldReward | integer | Yes | |
QR_BountyGoldRewards | integer | Yes | |
QR_BountyIndex | integer | No | |
QR_BountyIsActive | boolean | Yes | |
QR_BountyLumberReward | integer | Yes | |
QR_BountyLumberRewards | integer | Yes | |
QR_BountyQuest | quest | Yes | |
QR_BountyTargetPlace | string | Yes | |
QR_BountyTargetUnit | unit | Yes | |
QR_BountyTargetUnits | unit | Yes | |
QR_BountyTargetUnitsMax | integer | Yes | |
QR_BountyTitle | string | Yes | |
QR_EscortBeaconUnit | unit | Yes | |
QR_EscortDescription | string | Yes | |
QR_EscortExpireTimer | timer | No | |
QR_EscortGoldReward | integer | Yes | |
QR_EscortGoldRewards | integer | Yes | |
QR_EscortIndex | integer | No | |
QR_EscortIsActive | boolean | Yes | |
QR_EscortLumberReward | integer | Yes | |
QR_EscortLumberRewards | integer | Yes | |
QR_EscortQuest | quest | Yes | |
QR_EscortRelocatePoint | location | No | |
QR_EscortRelocatingUnit | unit | No | |
QR_EscortRerunFlag | boolean | No | |
QR_EscortTargetPlace | string | Yes | |
QR_EscortTargetPlaceMax | integer | Yes | |
QR_EscortTargetRegion | rect | Yes | |
QR_EscortTargetRegions | rect | Yes | |
QR_EscortTitle | string | Yes | |
QR_EscortUnit | unit | Yes | |
QR_EscortUnitGroup | group | No | |
QR_GiveMeDescription | string | Yes | |
QR_GiveMeGoldReward | integer | Yes | |
QR_GiveMeGoldRewards | integer | Yes | |
QR_GiveMeIndex | integer | No | |
QR_GiveMeIsActive | boolean | Yes | |
QR_GiveMeItemType | itemcode | Yes | |
QR_GiveMeItemTypeMax | integer | Yes | |
QR_GiveMeItemTypes | itemcode | Yes | |
QR_GiveMeLumberReward | integer | Yes | |
QR_GiveMeLumberRewards | integer | Yes | |
QR_GiveMeQuest | quest | Yes | |
QR_GiveMeTargetUnit | unit | Yes | |
QR_GiveMeTitle | string | Yes | |
QR_HuntingDescription | string | Yes | |
QR_HuntingGoldReward | integer | Yes | |
QR_HuntingGoldRewards | integer | Yes | |
QR_HuntingIndex | integer | No | |
QR_HuntingIsActive | boolean | Yes | |
QR_HuntingLumberReward | integer | Yes | |
QR_HuntingLumberRewards | integer | Yes | |
QR_HuntingQuest | quest | Yes | |
QR_HuntingTargetCurrentKills | integer | Yes | |
QR_HuntingTargetKillAmount | integer | Yes | |
QR_HuntingTargetKillAmounts | integer | Yes | |
QR_HuntingTargetUnitTypeMax | integer | Yes | |
QR_HuntingTargetUnitTypesV1 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV2 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV3 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV4 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV5 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV6 | unitcode | Yes | |
QR_HuntingTargetUnitTypesV7 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV1 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV2 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV3 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV4 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV5 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV6 | unitcode | Yes | |
QR_HuntingTargetUnitTypeV7 | unitcode | Yes | |
QR_HuntingTitle | string | Yes | |
QR_MailDescription | string | Yes | |
QR_MailGoldReward | integer | Yes | |
QR_MailGoldRewards | integer | Yes | |
QR_MailIndex | integer | No | |
QR_MailIsActive | boolean | Yes | |
QR_MailItem | item | Yes | |
QR_MailLumberReward | integer | Yes | |
QR_MailLumberRewards | integer | Yes | |
QR_MailQuest | quest | Yes | |
QR_MailTargetItemType | itemcode | Yes | |
QR_MailTargetItemTypes | itemcode | Yes | |
QR_MailTargetPlace | string | Yes | |
QR_MailTargetUnit | unit | Yes | |
QR_MailTargetUnits | unit | Yes | |
QR_MailTargetUnitsMax | integer | Yes | |
QR_MailTitle | string | Yes | |
QR_PackBeaconUnit | unit | Yes | |
QR_PackDescription | string | Yes | |
QR_PackGoldReward | integer | Yes | |
QR_PackGoldRewards | integer | Yes | |
QR_PackIndex | integer | No | |
QR_PackIsActive | boolean | Yes | |
QR_PackLumberReward | integer | Yes | |
QR_PackLumberRewards | integer | Yes | |
QR_PackQuest | quest | Yes | |
QR_PackTargetPackType | unitcode | Yes | |
QR_PackTargetPackTypes | unitcode | Yes | |
QR_PackTargetPlace | string | Yes | |
QR_PackTargetRegion | rect | Yes | |
QR_PackTargetRegions | rect | Yes | |
QR_PackTargetRegionsMax | integer | Yes | |
QR_PackTitle | string | Yes | |
QR_PackUnit | unit | Yes | |
QU_AirstrikeAmmo | integer | No | |
QU_AirstrikeReqUnit | unit | No | |
QU_AlphaTankAmmo | integer | No | |
QU_AlphaTankReqUnit | unit | No | |
QU_AmmoUnitsSpawnPoint | location | No | |
QU_ArtilleryAmmo | integer | No | |
QU_ArtilleryReqUnit | unit | No | |
QU_BarricadeAmmo | integer | No | |
QU_BarricadeReqUnit | unit | No | |
QU_BestWaveScore | integer | No | |
QU_BetaTankAmmo | integer | No | |
QU_BetaTankReqUnit | unit | No | |
QU_DeleteChargedItem | boolean | No | |
QU_EnergyShieldAmmo | integer | No | |
QU_EnergyShieldReqUnit | unit | No | |
QU_FlamethrowerAmmo | integer | No | |
QU_FlamethrowerReqUnit | unit | No | |
QU_GattlingAmmo | integer | No | |
QU_GattlingReqUnit | unit | No | |
QU_QuiverEdited | multiboard | No | |
QU_RowIncrement | integer | No | |
QU_RowSize | real | No | |
QU_WarpAmmo | integer | No | |
QU_WarpDialog | dialog | No | |
QU_WarpDialogButton | button | Yes | |
QU_WarpPoint | location | No | |
QU_WarpReqUnit | unit | No | |
Relation_HamClanRegainTimer | timer | No | |
Relation_HammerClan | integer | No | |
Relation_ObsClanRegainTimer | timer | No | |
Relation_ObsidianClan | integer | No | |
Relation_SteelClan | integer | No | |
Relation_StlClanRegainTimer | timer | No | |
Shoot_MeleeAttackedGroup | group | No | |
Shoot_MeleeDamage | real | No | |
Shoot_MeleeDamagePoint | location | No | |
Shoot_MeleeDamageSource | unit | No | |
Shoot_MeleeDamageUnit | unit | No | |
Shoot_MeleeDetectAOE | real | No | |
Shoot_MeleeTargetIsDamaged | boolean | No | |
Shoot_ProjectileEffectLoc | location | No | |
Skills_DummiesSpawn | location | No | |
Skills_MicroSpiderSpawn | location | No | |
Skills_NanoSpiderSpawn | location | No | |
Skills_PitLordLifeAfter | real | No | |
Skills_PitLordLifeBefore | real | No | |
Skills_TreantSpawningUnit | unit | No | |
Skills_TreantTauntSpot | location | No | |
Sleep_SleepValue | integer | No | |
Sleep_Timer | timer | No | |
Sleep_TimerTime | real | No | |
Sleep_TimerWindow | timerdialog | No | |
Spawner_AutRarityRandomizer | real | No | |
Spawner_AutRerunFlag | boolean | No | |
Spawner_AutSpawnCount | integer | No | |
Spawner_AutSpawnGroup | group | No | |
Spawner_AutSpawnOwner | player | Yes | |
Spawner_AutSpawnPoint | location | No | |
Spawner_AutSpawnRandomizer | integer | No | |
Spawner_AutSpawnType | unitcode | Yes | |
Spawner_AutSpawnTypeMaxIndex | integer | No | |
Spawner_AutSpawnUnitRarity | real | Yes | |
Spawner_BchRarityRandomizer | real | No | |
Spawner_BchRerunFlag | boolean | No | |
Spawner_BchSpawnCount | integer | No | |
Spawner_BchSpawnGroup | group | No | |
Spawner_BchSpawnOwner | player | Yes | |
Spawner_BchSpawnPoint | location | No | |
Spawner_BchSpawnRandomizer | integer | No | |
Spawner_BchSpawnType | unitcode | Yes | |
Spawner_BchSpawnTypeMaxIndex | integer | No | |
Spawner_BchSpawnUnitRarity | real | Yes | |
Spawner_IceRarityRandomizer | real | No | |
Spawner_IceRerunFlag | boolean | No | |
Spawner_IceSpawnCount | integer | No | |
Spawner_IceSpawnGroup | group | No | |
Spawner_IceSpawnOwner | player | Yes | |
Spawner_IceSpawnPoint | location | No | |
Spawner_IceSpawnRandomizer | integer | No | |
Spawner_IceSpawnType | unitcode | Yes | |
Spawner_IceSpawnTypeMaxIndex | integer | No | |
Spawner_IceSpawnUnitRarity | real | Yes | |
Spawner_JglRarityRandomizer | real | No | |
Spawner_JglRerunFlag | boolean | No | |
Spawner_JglSpawnCount | integer | No | |
Spawner_JglSpawnGroup | group | No | |
Spawner_JglSpawnOwner | player | Yes | |
Spawner_JglSpawnPoint | location | No | |
Spawner_JglSpawnRandomizer | integer | No | |
Spawner_JglSpawnType | unitcode | Yes | |
Spawner_JglSpawnTypeMaxIndex | integer | No | |
Spawner_JglSpawnUnitRarity | real | Yes | |
Spawner_PlantRarityRandomizer | real | No | |
Spawner_PlantRerunFlag | boolean | No | |
Spawner_PlantSpawnCount | integer | No | |
Spawner_PlantSpawnGroup | group | No | |
Spawner_PlantSpawnOwner | player | Yes | |
Spawner_PlantSpawnPoint | location | No | |
Spawner_PlantSpawnRandomizer | integer | No | |
Spawner_PlantSpawnType | unitcode | Yes | |
Spawner_PlantSpawnTypeMaxIndex | integer | No | |
Spawner_PlantSpawnUnitRarity | real | Yes | |
Spawner_PtrRarityRandomizer | real | No | |
Spawner_PtrRegionRandomizer | integer | No | |
Spawner_PtrRerunFlag | boolean | No | |
Spawner_PtrSpawnGroup | group | No | |
Spawner_PtrSpawnOwner | player | Yes | |
Spawner_PtrSpawnPoint | location | No | |
Spawner_PtrSpawnRandomizer | integer | No | |
Spawner_PtrSpawnType | unitcode | Yes | |
Spawner_PtrSpawnTypeMaxIndex | integer | No | |
Spawner_PtrSpawnUnitRarity | real | Yes | |
Spawner_TempPoint | location | No | |
Spawner_Vill1RerunFlag | boolean | No | |
Spawner_Vill1SpawnCount | integer | No | |
Spawner_Vill1SpawnGroup | group | No | |
Spawner_Vill1SpawnOwner | player | Yes | |
Spawner_Vill1SpawnPoint | location | No | |
Spawner_Vill1SpawnRandomizer | integer | No | |
Spawner_Vill1SpawnType | unitcode | Yes | |
Spawner_Vill1SpawnTypeMaxIndex | integer | No | |
Spawner_Vill2RerunFlag | boolean | No | |
Spawner_Vill2SpawnCount | integer | No | |
Spawner_Vill2SpawnGroup | group | No | |
Spawner_Vill2SpawnOwner | player | Yes | |
Spawner_Vill2SpawnPoint | location | No | |
Spawner_Vill2SpawnRandomizer | integer | No | |
Spawner_Vill2SpawnType | unitcode | Yes | |
Spawner_Vill2SpawnTypeMaxIndex | integer | No | |
Spawner_Vill3RerunFlag | boolean | No | |
Spawner_Vill3SpawnCount | integer | No | |
Spawner_Vill3SpawnGroup | group | No | |
Spawner_Vill3SpawnOwner | player | Yes | |
Spawner_Vill3SpawnPoint | location | No | |
Spawner_Vill3SpawnRandomizer | integer | No | |
Spawner_Vill3SpawnType | unitcode | Yes | |
Spawner_Vill3SpawnTypeMaxIndex | integer | No | |
Stamina_SecondCounter | integer | No | |
Stamina_StaminaValue | integer | No | |
Static_RespawningGroup | group | No | |
Static_RespawnPointArray | location | Yes | |
Static_RespawnUnitArray | unit | Yes | |
Static_RespawnUnitFacing | real | Yes | |
Static_ResurrectDummyPoint | location | No | |
Storm_CollectorPointTemp | location | No | |
Storm_Countdown | real | No | |
Storm_Duration | real | No | |
Storm_MathConvertToReal | real | No | |
Storm_Sound | sound | No | |
Storm_Timer | timer | No | |
Storm_TimerWindow | timerdialog | No | |
Storm_TotalCountBeforeStorm | integer | No | |
Storm_WaterCollectorsGroup | group | No | |
Storm_Weather | weathereffect | No | |
Strength_KillCounter | integer | No | |
Strength_StrengthValue | integer | No | |
Survival_DropCratePoint | location | No | |
Survival_DropCrateRandomCharge | integer | No | |
Survival_DropCrateRandomizer | integer | No | |
Survival_DropCrateRepeatFlag | boolean | No | |
Survival_HeroDroppedFromHeli | boolean | No | |
Test_AutFinished | boolean | No | |
Test_BchFinished | boolean | No | |
Test_IceFinished | boolean | No | |
Test_Index | integer | No | |
Test_JglFinished | boolean | No | |
Test_Patrol | boolean | No | |
Test_PlantFinished | boolean | No | |
Test_RegionLight | rect | No | |
Test_SaveDialog | dialog | No | |
Test_SaveDialogButton | button | Yes | |
Test_Vill1 | boolean | No | |
Test_Vill2 | boolean | No | |
Test_Vill3 | boolean | No | |
Test_WanderPickPoint | location | No | |
Thirst_ThirstValue | integer | No | |
Thirst_Timer | timer | No | |
Thirst_TimerTime | real | No | |
Thirst_TimerWindow | timerdialog | No | |
TR_DummyH | unit | No | |
TR_Hash | hashtable | No | |
TR_IndexD | integer | No | |
TR_IndexN | integer | No | |
TR_IsEnabled | boolean | No | |
TR_Timers | timer | Yes | |
TR_Trigger | trigger | No | |
TreeRes_AOEDetect | real | No | |
TreeRes_SpawnTime | real | No | |
TreeRes_TempDummy | unitcode | No | |
TreeRes_TempPoint | location | No | |
UI_AbilitySelectedAmmo | integer | No | |
UI_AmmoSwitchIndex | integer | No | |
UI_AnimationString | string | No | |
UI_CastingUnit | unit | No | |
UI_DataSearchCheck | boolean | No | |
UI_IndexTemp | integer | No | |
UI_IsDataRetrieved | boolean | No | |
UI_IsHandInventoryFull | boolean | No | |
UI_IsScanSuccessful | boolean | No | |
UI_ItemDesc | texttag | No | |
UI_ItemDescIsActive | boolean | No | |
UI_ItemManipulated | item | No | |
UI_ItemManipulatedCharges | integer | No | |
UI_ItemManipulatedType | itemcode | No | |
UI_ItemSelectDialogButton | button | Yes | |
UI_ItemSelectDialogMenu | dialog | No | |
UI_RegAmmoBTNDestType | destructablecode | Yes | |
UI_RegAmmoDataMaxIndex | integer | No | |
UI_RegAmmoDescArray | texttag | Yes | |
UI_RegAmmoDescPointArray | location | Yes | |
UI_RegAmmoItemArray | itemcode | Yes | |
UI_RegAmmoMaxIndex | integer | No | |
UI_RegAmmoPASDestType | destructablecode | Yes | |
UI_RegAmmoRegionArray | rect | Yes | |
UI_RegAmmoStoredArray | integer | Yes | |
UI_RegAmmoUnitTypeArray | unitcode | Yes | |
UI_RegArmorDataMaxIndex | integer | No | |
UI_RegArmorItemArray | itemcode | Yes | |
UI_RegArmorMaxIndex | integer | No | |
UI_RegBagBTNDestType | destructablecode | Yes | |
UI_RegBagItemArray | itemcode | Yes | |
UI_RegBagItemsMaxIndex | integer | No | |
UI_RegBagItemStoredArray | itemcode | Yes | |
UI_RegBagMaxIndex | integer | No | |
UI_RegBagRegionArray | rect | Yes | |
UI_RegEquipDescArray | texttag | Yes | |
UI_RegEquipDescPointArray | location | Yes | |
UI_RegEquipMaxIndex | integer | No | |
UI_RegLevelBarUnitArray | unit | Yes | |
UI_RegLevelDescArray | texttag | Yes | |
UI_RegLevelDescPointArray | location | Yes | |
UI_RegLevelMaxIndex | integer | No | |
UI_RegRespectBarUnitArray | unit | Yes | |
UI_RegRespectDescArray | texttag | Yes | |
UI_RegRespectDescPointArray | location | Yes | |
UI_RegRespectMaxIndex | integer | No | |
UI_RegSkillBarUnitArray | unit | Yes | |
UI_RegSkillDescArray | texttag | Yes | |
UI_RegSkillDescPointArray | location | Yes | |
UI_RegSkillMaxIndex | integer | No | |
UI_RegWeaponDataMaxIndex | integer | No | |
UI_RegWeaponItemArray | itemcode | Yes | |
UI_RegWeaponMaxIndex | integer | No | |
UI_RequiresDialog | boolean | No | |
UI_ScannedSlot | integer | No | |
UI_SelectedInventorySlot | integer | No | |
UI_SelectedInventorySlotTimer | timer | No | |
UI_SelectorDestructible | destructable | No | |
UI_TempIndex | integer | No | |
UI_TempItemType | itemcode | No | |
UI_TempPoint | location | No | |
UI_UseAsDefault | boolean | No | |
Vehicle_Driver | unit | No | |
Vehicle_TargetVehicle | unit | No | |
Vehicle_UnitGroup | group | No | |
Vehicle_VehicleLocation | location | No | |
Wander_WanderGroup | group | No | |
Weapon_AmmoAOE | real | No | |
Weapon_AmmoCurrentIndex | integer | No | |
Weapon_AmmoDummyType | unitcode | No | |
Weapon_AmmoIsBlinding | boolean | No | |
Weapon_AmmoIsExploding | boolean | No | |
Weapon_AmmoLifetime | real | No | |
Weapon_AmmoProjectileSpeed | real | No | |
Weapon_AppendAnimationString | string | No | |
Weapon_AttachmentArray | abilcode | Yes | |
Weapon_AttachmentTempIndex | integer | No | |
Weapon_WeaponDamage | real | No | |
Weapon_WeaponIsMelee | boolean | No | |
Weapon_WeaponType | itemcode | No | |
WeaponEnemy_AmmoAOE | real | Yes | |
WeaponEnemy_AmmoLifetime | real | Yes | |
WeaponEnemy_Damage | real | No | |
WeaponEnemy_DummyUnitType | unitcode | Yes | |
WeaponEnemy_IsAmmoExploding | boolean | Yes | |
WeaponEnemy_IsMelee | boolean | Yes | |
WeaponEnemy_IsUnitExist | boolean | No | |
WeaponEnemy_IsUnitMelee | boolean | No | |
WeaponEnemy_ProjectileSpeed | real | Yes | |
WeaponEnemy_SourceUnitType | unitcode | Yes | |
WeaponEnemy_UnitsMaxIndex | integer | No |
//===========================================================================
// Damage Engine lets you detect, amplify, block or nullify damage. It even
// lets you detect if the damage was physical or from a spell. Just reference
// DamageEventAmount/Source/Target or the boolean IsDamageSpell, to get the
// necessary damage event data.
//
// - Detect damage: use the event "DamageEvent Equal to 1.00"
// - To change damage before it's dealt: use the event "DamageModifierEvent Equal to 1.00"
// - Detect damage after it was applied, use the event "AfterDamageEvent Equal to 1.00"
// - Detect spell damage: use the condition "IsDamageSpell Equal to True"
// - Detect zero-damage: use the event "DamageEvent Equal to 2.00" (an AfterDamageEvent will not fire for this)
//
// You can specify the DamageEventType before dealing triggered damage. To prevent an already-improbable error, I recommend running the trigger "ClearDamageEvent (Checking Conditions)" after dealing triggered damage from within a damage event:
// - Set NextDamageType = DamageTypeWhatever
// - Unit - Cause...
// - Trigger - Run ClearDamageEvent (Checking Conditions)
//
// You can modify the DamageEventAmount and the DamageEventType from a "DamageModifierEvent Equal to 1.00" trigger.
// - If the amount is modified to negative, it will count as a heal.
// - If the amount is set to 0, no damage will be dealt.
//
// If you need to reference the original in-game damage, use the variable "DamageEventPrevAmt".
//
//===========================================================================
// Programming note about "integer i" and "udg_DMG_DamageEventRecursionN": integer i
// ranges from -1 upwards. "udg_DMG_DamageEventRecursionN" ranges from 0 upwards.
// "integer i" is always 1 less than "udg_DMG_DamageEventRecursionN"
//
function DmgEvResetVars takes nothing returns nothing
local integer i = udg_DMG_DamageEventRecursionN - 2
set udg_DMG_DamageEventRecursionN = i + 1
if i >= 0 then
set udg_DMG_DamageEventPrevAmount = udg_DMG_LastDamagePrevAmount[i]
set udg_DMG_DamageEventAmount = udg_DMG_LastDamageValue[i]
set udg_DMG_DamageEventSource = udg_DMG_LastDamageSource[i]
set udg_DMG_DamageEventTarget = udg_DMG_LastDamageTarget[i]
set udg_DMG_IsDamageSpell = udg_DMG_LastDamageWasSpell[i]
set udg_DMG_DamageEventType = udg_DMG_LastDamagePrevType[i]
endif
endfunction
function CheckDamagedLifeEvent takes boolean clear returns nothing
if clear then
set udg_DMG_NextDamageOverride = false
set udg_DMG_NextDamageType = 0
endif
if udg_DMG_DamageEventTrig != null then
call DestroyTrigger(udg_DMG_DamageEventTrig)
set udg_DMG_DamageEventTrig = null
if udg_DMG_IsDamageSpell then
call SetWidgetLife(udg_DMG_DamageEventTarget, RMaxBJ(udg_DMG_LastDamageHP, 0.41))
if udg_DMG_LastDamageHP <= 0.405 then
if udg_DMG_DamageEventType < 0 then
call SetUnitExploded(udg_DMG_DamageEventTarget, true)
endif
//Kill the unit
call DisableTrigger(udg_DMG_DamageEventTrigger)
call UnitDamageTarget(udg_DMG_DamageEventSource, udg_DMG_DamageEventTarget, -999, false, false, null, DAMAGE_TYPE_UNIVERSAL, null)
call EnableTrigger(udg_DMG_DamageEventTrigger)
endif
elseif GetUnitAbilityLevel(udg_DMG_DamageEventTarget, udg_DMG_DamageBlockingAbility) > 0 then
call UnitRemoveAbility(udg_DMG_DamageEventTarget, udg_DMG_DamageBlockingAbility)
call SetWidgetLife(udg_DMG_DamageEventTarget, udg_DMG_LastDamageHP)
endif
if udg_DMG_DamageEventAmount != 0.00 and not udg_DMG_HideDamageFrom[GetUnitUserData(udg_DMG_DamageEventSource)] then
set udg_DMG_AfterDamageEvent = 0.00
set udg_DMG_AfterDamageEvent = 1.00
set udg_DMG_AfterDamageEvent = 0.00
endif
call DmgEvResetVars()
endif
endfunction
function DmgEvOnAOEEnd takes nothing returns nothing
if udg_DMG_DamageEventAOE > 1 then
set udg_DMG_AOEDamageEvent = 0.00
set udg_DMG_AOEDamageEvent = 1.00
set udg_DMG_AOEDamageEvent = 0.00
set udg_DMG_DamageEventAOE = 1
endif
set udg_DMG_DamageEventLevel = 1
set udg_DMG_EnhancedDamageTarget = null
call GroupClear(udg_DMG_DamageEventAOEGroup)
endfunction
function DmgEvOnExpire takes nothing returns nothing
set udg_DMG_DamageEventStarted = false
call CheckDamagedLifeEvent(true)
//Reset things so they don't perpetuate for AoE/Level target detection
call DmgEvOnAOEEnd()
set udg_DMG_DamageEventTarget = null
set udg_DMG_DamageEventSource = null
endfunction
function PreCheckDamagedLifeEvent takes nothing returns boolean
call CheckDamagedLifeEvent(true)
return false
endfunction
function OnUnitDamage takes nothing returns boolean
local boolean override = udg_DMG_DamageEventOverride
local integer i
local integer e = udg_DMG_DamageEventLevel
local integer a = udg_DMG_DamageEventAOE
local string s
local real prevAmount
local real life
local real prevLife
local unit u
local unit f
call CheckDamagedLifeEvent(false) //in case the unit state event failed and the 0.00 second timer hasn't yet expired
set i = udg_DMG_DamageEventRecursionN - 1 //Had to be moved here due to false recursion tracking
if i < 0 then
//Added 25 July 2017 to detect AOE damage or multiple single-target damage
set u = udg_DMG_DamageEventTarget
set f = udg_DMG_DamageEventSource
elseif i < 16 then
set udg_DMG_LastDamagePrevAmount[i]= udg_DMG_DamageEventPrevAmount
set udg_DMG_LastDamageValue[i] = udg_DMG_DamageEventAmount
set udg_DMG_LastDamageSource[i] = udg_DMG_DamageEventSource
set udg_DMG_LastDamageTarget[i] = udg_DMG_DamageEventTarget
set udg_DMG_LastDamageWasSpell[i] = udg_DMG_IsDamageSpell
set udg_DMG_LastDamagePrevType[i] = udg_DMG_DamageEventType
else
set s = "WARNING: Recursion error when dealing damage! Make sure when you deal damage from within a DamageEvent trigger, do it like this:\n\n"
set s = s + "Trigger - Turn off (This Trigger)\n"
set s = s + "Unit - Cause...\n"
set s = s + "Trigger - Turn on (This Trigger)"
//Delete the next couple of lines to disable the in-game recursion crash warnings
call ClearTextMessages()
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0.00, 0.00, 999.00, s)
return false
endif
set udg_DMG_DamageEventRecursionN = i + 2
set prevAmount = GetEventDamage()
set udg_DMG_DamageEventTarget = GetTriggerUnit()
set udg_DMG_DamageEventSource = GetEventDamageSource()
set udg_DMG_DamageEventAmount = prevAmount
set udg_DMG_DamageEventType = udg_DMG_NextDamageType
set udg_DMG_NextDamageType = 0
set udg_DMG_DamageEventOverride = udg_DMG_NextDamageOverride
set udg_DMG_NextDamageOverride = false
if i < 0 then
//Added 25 July 2017 to detect AOE damage or multiple single-target damage
if udg_DMG_DamageEventType == 0 then
if f == udg_DMG_DamageEventSource then
//Source has damaged more than once
if IsUnitInGroup(udg_DMG_DamageEventTarget, udg_DMG_DamageEventAOEGroup) then
//Added 5 August 2017 to improve tracking of enhanced damage against, say, Pulverize
set udg_DMG_DamageEventLevel = udg_DMG_DamageEventLevel + 1
set udg_DMG_EnhancedDamageTarget = udg_DMG_DamageEventTarget
else
//Multiple targets hit by this source - flag as AOE
set udg_DMG_DamageEventAOE = udg_DMG_DamageEventAOE + 1
endif
else
//New damage source - unflag everything
set u = udg_DMG_DamageEventSource
set udg_DMG_DamageEventSource = f
call DmgEvOnAOEEnd()
set udg_DMG_DamageEventSource = u
endif
call GroupAddUnit(udg_DMG_DamageEventAOEGroup, udg_DMG_DamageEventTarget)
endif
if not udg_DMG_DamageEventStarted then
set udg_DMG_DamageEventStarted = true
call TimerStart(udg_DMG_DamageEventTimer, 0.00, false, function DmgEvOnExpire)
endif
endif
if prevAmount == 0.00 then
if not udg_DMG_HideDamageFrom[GetUnitUserData(udg_DMG_DamageEventSource)] then
set udg_DMG_DamageEventPrevAmount = 0.00
set udg_DMG_DamageEvent = 0.00
set udg_DMG_DamageEvent = 2.00
set udg_DMG_DamageEvent = 0.00
endif
call DmgEvResetVars()
else
set u = udg_DMG_DamageEventTarget
set udg_DMG_IsDamageSpell = prevAmount < 0.00
if udg_DMG_IsDamageSpell then
set prevAmount = -udg_DMG_DamageEventAmount
set life = 1.00
if IsUnitType(u, UNIT_TYPE_ETHEREAL) and not IsUnitType(u, UNIT_TYPE_HERO) then
set life = life*udg_DMG_DamageFactorEthereal //1.67
endif
if GetUnitAbilityLevel(u, 'Aegr') > 0 then
set life = life*udg_DMG_DamageFactorElunes //0.80
endif
if udg_DMG_DamageEventBracers != 0 and IsUnitType(u, UNIT_TYPE_HERO) then
//Inline of UnitHasItemOfTypeBJ without the potential handle ID leak.
set i = 6
loop
set i = i - 1
if GetItemTypeId(UnitItemInSlot(u, i)) == udg_DMG_DamageEventBracers then
set life = life*udg_DMG_DamageFactorBracers //0.67
exitwhen true
endif
exitwhen i == 0
endloop
endif
set udg_DMG_DamageEventAmount = prevAmount*life
endif
set udg_DMG_DamageEventPrevAmount = prevAmount
set udg_DMG_DamageModifierEvent = 0.00
if not udg_DMG_DamageEventOverride then
set udg_DMG_DamageModifierEvent = 1.00
if not udg_DMG_DamageEventOverride then
set udg_DMG_DamageModifierEvent = 2.00
set udg_DMG_DamageModifierEvent = 3.00
endif
endif
set udg_DMG_DamageEventOverride = override
if udg_DMG_DamageEventAmount > 0.00 then
set udg_DMG_DamageModifierEvent = 4.00
endif
set udg_DMG_DamageModifierEvent = 0.00
if not udg_DMG_HideDamageFrom[GetUnitUserData(udg_DMG_DamageEventSource)] then
set udg_DMG_DamageEvent = 0.00
set udg_DMG_DamageEvent = 1.00
set udg_DMG_DamageEvent = 0.00
endif
call CheckDamagedLifeEvent(true) //in case the unit state event failed from a recursive damage event
//All events have run and the damage amount is finalized.
set life = GetWidgetLife(u)
set udg_DMG_DamageEventTrig = CreateTrigger()
call TriggerAddCondition(udg_DMG_DamageEventTrig, Filter(function PreCheckDamagedLifeEvent))
if not udg_DMG_IsDamageSpell then
if udg_DMG_DamageEventAmount != prevAmount then
set life = life + prevAmount - udg_DMG_DamageEventAmount
if GetUnitState(u, UNIT_STATE_MAX_LIFE) < life then
set udg_DMG_LastDamageHP = life - prevAmount
call UnitAddAbility(u, udg_DMG_DamageBlockingAbility)
endif
call SetWidgetLife(u, RMaxBJ(life, 0.42))
endif
call TriggerRegisterUnitStateEvent(udg_DMG_DamageEventTrig, u, UNIT_STATE_LIFE, LESS_THAN, RMaxBJ(0.41, life - prevAmount/2.00))
else
set udg_DMG_LastDamageHP = GetUnitState(u, UNIT_STATE_MAX_LIFE)
set prevLife = life
if life + prevAmount*0.75 > udg_DMG_LastDamageHP then
set life = RMaxBJ(udg_DMG_LastDamageHP - prevAmount/2.00, 1.00)
call SetWidgetLife(u, life)
set life = (life + udg_DMG_LastDamageHP)/2.00
else
set life = life + prevAmount*0.50
endif
set udg_DMG_LastDamageHP = prevLife - (prevAmount - (prevAmount - udg_DMG_DamageEventAmount))
call TriggerRegisterUnitStateEvent(udg_DMG_DamageEventTrig, u, UNIT_STATE_LIFE, GREATER_THAN, life)
endif
endif
set u = null
set f = null
return false
endfunction
function CreateDmgEvTrg takes nothing returns nothing
set udg_DMG_DamageEventTrigger = CreateTrigger()
call TriggerAddCondition(udg_DMG_DamageEventTrigger, Filter(function OnUnitDamage))
endfunction
function SetupDmgEv takes nothing returns boolean
local integer i = udg_ID_UDex
local unit u
if udg_ID_UnitIndexEvent == 1.00 then
set u = udg_ID_UDexUnits[i]
if GetUnitAbilityLevel(u, 'Aloc') == 0 and TriggerEvaluate(gg_trg_Damage_Engine_Setup) then
set udg_DMG_UnitDamageRegistered[i] = true
call TriggerRegisterUnitEvent(udg_DMG_DamageEventTrigger, u, EVENT_UNIT_DAMAGED)
call UnitAddAbility(u, udg_DMG_SpellDamageAbility)
call UnitMakeAbilityPermanent(u, true, udg_DMG_SpellDamageAbility)
endif
set u = null
else
set udg_DMG_HideDamageFrom[i] = false
if udg_DMG_UnitDamageRegistered[i] then
set udg_DMG_UnitDamageRegistered[i] = false
set udg_DMG_DamageEventsWasted = udg_DMG_DamageEventsWasted + 1
if udg_DMG_DamageEventsWasted == 32 then //After 32 registered units have been removed...
set udg_DMG_DamageEventsWasted = 0
//Rebuild the mass EVENT_UNIT_DAMAGED trigger:
call DestroyTrigger(udg_DMG_DamageEventTrigger)
call CreateDmgEvTrg()
set i = udg_ID_UDexNext[0]
loop
exitwhen i == 0
if udg_DMG_UnitDamageRegistered[i] then
call TriggerRegisterUnitEvent(udg_DMG_DamageEventTrigger, udg_ID_UDexUnits[i], EVENT_UNIT_DAMAGED)
endif
set i = udg_ID_UDexNext[i]
endloop
endif
endif
endif
return false
endfunction
//===========================================================================
function InitTrig_Damage_Engine_Start takes nothing returns nothing
local unit u = CreateUnit(Player(bj_PLAYER_NEUTRAL_EXTRA), 'uloc', 0, 0, 0)
local integer i = bj_MAX_PLAYERS //Fixed in 3.8
//Create this trigger with UnitIndexEvents in order add and remove units
//as they are created or removed.
local trigger t = CreateTrigger()
call TriggerRegisterVariableEvent(t, "udg_ID_UnitIndexEvent", EQUAL, 1.00)
call TriggerRegisterVariableEvent(t, "udg_ID_UnitIndexEvent", EQUAL, 2.00)
call TriggerAddCondition(t, Filter(function SetupDmgEv))
set t = null
//Run the configuration trigger to set all configurables:
if gg_trg_Damage_Engine_Setup == null then
//It's possible this InitTrig_ function ran first, in which case use ExecuteFunc.
call ExecuteFunc("Trig_Damage_Engine_Config_Actions")
else
call TriggerExecute(gg_trg_Damage_Engine_Setup)
endif
//Create trigger for storing all EVENT_UNIT_DAMAGED events.
call CreateDmgEvTrg()
//Create GUI-friendly trigger for cleaning up after UnitDamageTarget.
set udg_DMG_ClearDamageEvent = CreateTrigger()
call TriggerAddCondition(udg_DMG_ClearDamageEvent, Filter(function PreCheckDamagedLifeEvent))
//Disable SpellDamageAbility for every player.
loop
set i = i - 1
call SetPlayerAbilityAvailable(Player(i), udg_DMG_SpellDamageAbility, false)
exitwhen i == 0
endloop
//Preload abilities.
call UnitAddAbility(u, udg_DMG_DamageBlockingAbility)
call UnitAddAbility(u, udg_DMG_SpellDamageAbility)
call RemoveUnit(u)
set u = null
endfunction
//************************************************************************************************
//* ____ ___ ___ *
//* /_ _| _ \/ __/ Tree Revival System *
//* | || /\__ \ by Bannar *
//* |_||_|\_\___/ v1.2.3.2 *
//* *
//************************************************************************************************
//*********************************************************
//* Globals required
//*********************************************************
//* udg_TR_Trigger Trigger for handling the revive actions
//* udg_TR_Hash Hashtable for timer issues
//* udg_TR_IndexD Stores revival instances
//* udg_TR_IndexN Parameter for timers manipulation
//* udg_TR_Timers Timer array variable for recycle issues
//* udg_TR_DummyH Dummy harvester for IsDestructibleTree function
//* udg_TR_IsEnabled Boolean parameter for enabling/disabling the system
//*********************************************************
//* Important
//*********************************************************
// Note: Units which step on position of tree which is currently
// being resurrected may get stuck between trees in that area
//*********************************************************
//* Constant configurable functions
//*********************************************************
//* Rawdata of undead locust unit type
constant function TR_dummyhId takes nothing returns integer
return 'uloc'
endfunction
//* Rawdata of dummy ghoul harvest ability
constant function TR_harvestId takes nothing returns integer
return 'Ahrl'
endfunction
//* Harvest order ID
constant function TR_orderId takes nothing returns integer
return 852018
endfunction
//* Delay before tree gets resurrected
constant function TR_ReviveDelay takes nothing returns real
return 60.
endfunction
//* Tells if birth animation should be shown while resurrecting a tree
constant function TR_ShowAnimation takes nothing returns boolean
return false
endfunction
//*********************************************************
//* System itself
//*********************************************************
function TR_recycleTimer takes timer t returns nothing
debug if t == null then
debug call BJDebugMsg("Attempt to release a null timer")
debug else
call PauseTimer(t)
set udg_TR_Timers[udg_TR_IndexN] = t
set udg_TR_IndexN = udg_TR_IndexN + 1
debug endif
endfunction
function TR_getTimer takes nothing returns timer
if 0 == udg_TR_IndexN then
return CreateTimer()
endif
set udg_TR_IndexN = udg_TR_IndexN - 1
return udg_TR_Timers[udg_TR_IndexN]
endfunction
function TR_Callback takes nothing returns nothing
local destructable d = LoadDestructableHandle(udg_TR_Hash, 0, GetHandleId(GetExpiredTimer()))
call DestructableRestoreLife(d, GetDestructableMaxLife(d), TR_ShowAnimation())
call TR_recycleTimer(GetExpiredTimer())
set udg_TR_IndexD = udg_TR_IndexD - 1
if udg_TR_IndexD == 0 then
call FlushChildHashtable(udg_TR_Hash, 0)
endif
set d = null
endfunction
function TR_CallRevive takes nothing returns boolean
local timer t
if udg_TR_IsEnabled then
set t = TR_getTimer()
set udg_TR_IndexD = udg_TR_IndexD + 1
call SaveDestructableHandle(udg_TR_Hash, 0, GetHandleId(t), GetTriggerDestructable())
call TimerStart(t, TR_ReviveDelay(), false, function TR_Callback)
set t = null
endif
return false
endfunction
function TR_IsDestructableTree takes destructable dest returns boolean
return IssueTargetOrderById(udg_TR_DummyH, TR_orderId(), dest)
endfunction
function TR_AddTree takes nothing returns nothing
if TR_IsDestructableTree(GetEnumDestructable()) then
call TriggerRegisterDeathEvent(udg_TR_Trigger, GetEnumDestructable())
endif
endfunction
//***************************************************************************
function InitTrig_Tree_Revival takes nothing returns nothing
set udg_TR_Trigger = CreateTrigger()
set udg_TR_Hash = InitHashtable()
//* By default enabled
set udg_TR_IsEnabled = true
//* Actions required for IsDestructibleTree function
set udg_TR_DummyH = CreateUnit(Player(27), TR_dummyhId(), 0., 0., 0.)
call ShowUnit(udg_TR_DummyH, false)
call UnitAddAbility(udg_TR_DummyH, TR_harvestId())
call UnitRemoveAbility(udg_TR_DummyH, 'Amov')
//* Revival setup
call EnumDestructablesInRect(bj_mapInitialPlayableArea, null, function TR_AddTree)
call TriggerAddCondition(udg_TR_Trigger, Condition(function TR_CallRevive))
endfunction