function CodeGen_SaveToDisk takes string loadcode, string filename returns nothing
call PreloadGenClear()
call PreloadGenStart()
call Preload("-load "+loadcode)
call PreloadGenEnd(filename)
call ClearSelection()
endfunction
function CodeGen_Init takes nothing returns nothing
local integer i = 1
local integer b = udg_SaveLoad_Base
local integer m = udg_SaveLoad_MaxValue
loop
exitwhen i >= udg_SaveLoad_MaxValue
set udg_SaveLoad_Char[i] = SubString(udg_SaveLoad_Alphabet, i, i+1)
set i = i + 1
endloop
set udg_SaveLoad_Alphabet = SubString(udg_SaveLoad_Alphabet, 0, 1) + SubString(udg_SaveLoad_Alphabet, m + 1, b)
set udg_SaveLoad_Base = b - m
endfunction
function CodeGen_ConvertItem takes integer id returns integer
local integer i = 1
loop
exitwhen i > udg_SaveLoad_ItemCount
if (id == udg_ItemAllList[i]) then
return i
elseif (id == udg_ItemAllList[i]) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
function CodeGen_ConvertUnit takes integer id returns integer
local integer i = 1
loop
exitwhen i > udg_SaveLoad_HeroCount
if (id == udg_SaveLoad_Hero[i]) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
function CodeGen_Encode takes integer i returns string
local integer b
local string s = ""
if i <= udg_SaveLoad_Base then
return SubString(udg_SaveLoad_Alphabet, i, i + 1)
endif
loop
exitwhen i <= 0
set b = i - (i / udg_SaveLoad_Base) * udg_SaveLoad_Base
set s = SubString(udg_SaveLoad_Alphabet, b, b + 1) + s
set i = i / udg_SaveLoad_Base
endloop
return s
endfunction
function CodeGen_StrPos takes string s returns integer
local integer i = 0
loop
exitwhen i > udg_SaveLoad_Base
if s == SubString(udg_SaveLoad_Alphabet, i, i + 1) then
return i
endif
set i = i + 1
endloop
return -1
endfunction
function CodeGen_Decode takes string s returns integer
local integer a = 0
loop
exitwhen StringLength(s) == 1
set a = a * udg_SaveLoad_Base + udg_SaveLoad_Base * CodeGen_StrPos(SubString(s, 0, 1))
set s = SubString(s, 1, 99)
endloop
return a+CodeGen_StrPos(s)
endfunction
function CodeGen_StringChecksum takes string str returns integer
local integer i = 0
local integer l = StringLength(str)
local integer t = 0
local integer o = 0
loop
exitwhen i >= l
set t = CodeGen_Decode(SubString(str, i, i + 1))
set o = o + t
set i = i + 1
endloop
return o
endfunction
function CodeGen_Color takes string char returns string
local integer i = 0
local integer l = StringLength(udg_SaveLoad_Full)
local string x = ""
loop
exitwhen i >= l
set x = SubString(udg_SaveLoad_Full, i, i + 1)
if char == x then
if (x=="0" or S2I(x) > 0) then
return udg_SaveLoad_Number + char + "|r"
elseif StringCase(x, false) == x then
return udg_SaveLoad_Lower + char + "|r"
elseif StringCase(x, true) == x then
return udg_SaveLoad_Upper + char + "|r"
endif
endif
set i = i + 1
endloop
return char
endfunction
function CodeGen_Format takes string s returns string
local integer i = 0
local integer x = StringLength(s)
local integer j = 1
local string s2 = ""
loop
exitwhen i >= x
set s2 = s2 + CodeGen_Color(SubString(s, i, i + 1))
if (j >= udg_SaveLoad_HyphenSpace and i != (x-1)) then
set j = 0
set s2 = s2 + udg_SaveLoad_SeperationChar
endif
set j = j + 1
set i = i + 1
endloop
return s2
endfunction
function CodeGen_Strip takes string s returns string
local integer i = 0
local integer x = StringLength(s)
local string out = ""
local string a = ""
loop
exitwhen i >= x
set a = SubString(s, i, i + 1)
if (a != udg_SaveLoad_SeperationChar) then
set out = out + a
endif
set i = i + 1
endloop
return out
endfunction
// yeeahh descriptive variables
function CodeGen_Load takes string s returns nothing
local string str = CodeGen_Strip(s)
local string tmp = ""
local string c = ""
local integer x = 0
local integer i = 1
local integer l = 0
local integer j = 1
local integer f = 0
local boolean b = true
set udg_SaveLoad_Valid = false
if (udg_SaveLoad_Security) then
loop
exitwhen i > 3
if (CodeGen_Decode(SubString(str, 0, i)) == CodeGen_StringChecksum(SubString(str, i, 999))) then
set udg_SaveLoad_Valid = true
set str = SubString(str, i, 999)
set i = 4
endif
set i = i + 1
endloop
endif
if (not udg_SaveLoad_Valid) then
set udg_SaveLoad_Error = "Invalid Code"
return
endif
set i = 0
set l = StringLength(str)
if (udg_SaveLoad_CheckName) then
set c = CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
set i = StringLength(c)
if (c != SubString(str, l - i, i)) then
set udg_SaveLoad_Valid = false
set udg_SaveLoad_Error = "Wrong username"
return
endif
set l = l - i
endif
set i = 0
loop
exitwhen i >= l
set tmp = SubString(str, i, i + 1)
set b = true
set f = 0
set j = 1
loop
exitwhen f >= (udg_SaveLoad_MaxValue)
if (tmp == udg_SaveLoad_Char[f]) then
set j = f + 2
set udg_Load[x] = CodeGen_Decode(SubString(str, i + 1, i + (j)))
set b = false
set f = udg_SaveLoad_MaxValue
endif
set f = f + 1
endloop
if (b) then
set udg_Load[x] = CodeGen_Decode(tmp)
endif
set i = i + j
set x = x + 1
endloop
set udg_SaveLoad_Valid = true
endfunction
function CodeGen_Compile takes nothing returns string
local integer i = 0
local integer j = 0
local string out = ""
local string ln = ""
local string x = ""
loop
exitwhen i > udg_SaveCount
set x = CodeGen_Encode(udg_Save[i])
set j = StringLength(x)
if (j > 1) then
set out = out + udg_SaveLoad_Char[j-1]
endif
set out = out + x
set i = i + 1
endloop
if (udg_SaveLoad_CheckName) then
set out = out + CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
endif
if (udg_SaveLoad_Security) then
set out = CodeGen_Encode(CodeGen_StringChecksum(out)) + out
endif
if udg_SaveLoad_SaveToDisk and GetLocalPlayer() == GetTriggerPlayer() then
call CodeGen_SaveToDisk(out, udg_SaveLoad_Directory + "\\" + udg_SaveLoad_Filename)
endif
return CodeGen_Format(out)
endfunction
function Hero_NullAllItems takes integer playerNum returns nothing
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemAmuletUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemArmorUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemArtifactUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemBootsUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemGlovesUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemHelmetUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemLeggingsUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemRingUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemShouldersUsed[playerNum]))], udg_InventoryDummy[playerNum] )
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(udg_ItemWMainhandUsed[playerNum]))], udg_InventoryDummy[playerNum] )
set udg_ItemWOffhandUsed[playerNum] = null
set udg_ItemArmorUsed[playerNum] = null
set udg_ItemArtifactUsed[playerNum] = null
set udg_ItemBootsUsed[playerNum] = null
set udg_ItemGlovesUsed[playerNum] = null
set udg_ItemHelmetUsed[playerNum] = null
set udg_ItemLeggingsUsed[playerNum] = null
set udg_ItemRingUsed[playerNum] = null
set udg_ItemShouldersUsed[playerNum] = null
set udg_ItemWMainhandUsed[playerNum] = null
set udg_ItemWOffhandUsed[playerNum] = null
call UnitAddAbilityBJ( 'A00L', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00M', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00N', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00O', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00P', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00I', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00Q', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A012', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00S', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00U', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00T', udg_InventoryDummy[playerNum] )
call UnitAddAbilityBJ( 'A00K', udg_InventoryDummy[playerNum] )
endfunction
function HeroAbilityLastIntOut takes nothing returns integer
set udg_Integer_HeroAbilityLast = (udg_Integer_HeroAbilityLast + 1)
set udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast] = 0
return udg_Integer_HeroAbilityLast
endfunction
function HeroAbilityArrayArrayOut takes nothing returns integer
set udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast] = (udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast] + 1)
return udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast]
endfunction
function HeroAbilityArrayIntInArrayOut takes integer i returns integer
set udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast] = i
return udg_Integer_HeroAbilityArray[udg_Integer_HeroAbilityLast]
endfunction
function HeroAbility_AddItemAbilities takes integer i, unit u returns nothing
call UnitAddAbilityBJ( udg_ItemAllHeroAbility1[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility2[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility3[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility4[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility5[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility6[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility7[i], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility10[i], u )
endfunction
function HeroAbility_RemoveItemAbilities takes integer i, unit u returns nothing
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility1[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility2[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility3[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility4[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility5[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility6[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility7[i], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility10[i], u )
endfunction
//call HeroAbility_Item_UnEquip(udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// This fucntion serves for UnEquipping items.
// It does not null the variables, as the unequipping should be universal and has to be handled differently than equipping.
function HeroAbility_Item_UnEquip takes item itemUsed, integer itemLife, player triggerPlayer, integer playerNum returns nothing
// 1. Remove ability of current Amulet from Dummy; 2. Remove ability provided by item from Hero
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[itemLife], udg_InventoryDummy[playerNum] )
call HeroAbility_RemoveItemAbilities(itemLife, udg_CurrentHero[playerNum])
//call UnitAddAbilityBJ( 'A00L', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
// Shows text: You have unequipped "item name" - the item name's color will be based on its rarity.
call DisplayTextToForce( GetForceOfPlayer(triggerPlayer), ( "|CFFFFCC00You have " + ( "|r|CFFFF0000unequipped|r " + GetItemName(itemUsed) ) ) )
// 1. checks if hero has 5 or less items. If so, it gives him the item immediately.
if ( ( UnitInventoryCount(udg_CurrentHero[playerNum]) <= 5 ) ) then
call UnitAddItemSwapped( itemUsed, udg_CurrentHero[playerNum] )
else
// But, if the hero has 6 items, it can't give him the item, he would lose it. So instead, it will move the item to position of your hero.
call DisplayTextToForce( GetForceOfPlayer(triggerPlayer), ( "|CFFFF0000INVENTORY FULL! |r"+ GetItemName(itemUsed) +"|CFFFF0000 dropped at hero location!|r") )
set udg_Point_CurrentHero = GetUnitLoc(udg_CurrentHero[playerNum])
call SetItemPositionLoc( itemUsed, udg_Point_CurrentHero )
call RemoveLocation(udg_Point_CurrentHero)
endif
endfunction
//call HeroAbility_Item_Equip(GetManipulatedItem(), R2I(GetItemLifeBJ(GetManipulatedItem())), GetTriggerUnit(), GetTriggerPlayer(), GetConvertedPlayerId(GetTriggerPlayer()))
// Function that serves for equiping items
function HeroAbility_Item_Equip takes item itemUsed, integer itemLife, unit triggerUnit, player triggerPlayer, integer playerNum returns nothing
// If for some reason the function is called with inappropriate item, break the function.
if (itemLife == 0 or itemLife > 2400) then
return
endif
// Changes owner of the item equipped so played can't give the item to anyone else (It's your choice if you're willing to have this in your map)
call SetItemPlayerBJ( itemUsed, triggerPlayer, false )
// Sets point for item remove.
set udg_Point_ItemEquipRemove = GetRectCenter(gg_rct_EquipmentItems)
// Drops and moves the item to Region for item moving and remove the Point. This has to be done now in case item is already equipped, so there is no collision.
call UnitRemoveItemSwapped( itemUsed, triggerUnit )
call SetItemPositionLoc( itemUsed, udg_Point_ItemEquipRemove )
call RemoveLocation(udg_Point_ItemEquipRemove)
// Checks which item should actually be removed and Removes Empty Slot for matching item from DUMMY
if (itemLife <= 200) then
// Check if item is used, if yes, call UnEquip function
if (udg_Boolean_ItemAmuletIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemAmuletUsed[playerNum], udg_Integer_ItemAmuletLifeInt[playerNum],triggerPlayer,playerNum)
endif
// 1st - Sets variable, to track back the item; 2nd - sets boolean, that amulet is now used; 3rd - sets current amulet item is now used
set udg_Integer_ItemAmuletLifeInt[playerNum] = itemLife
set udg_Boolean_ItemAmuletIsUsed[playerNum] = true
set udg_ItemAmuletUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00L', udg_InventoryDummy[playerNum] ) // Remove Amulet
elseif (itemLife <= 400) then
if (udg_Boolean_ItemArmorIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemArmorUsed[playerNum], udg_Integer_ItemArmorLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemArmorLifeInt[playerNum] = itemLife
set udg_Boolean_ItemArmorIsUsed[playerNum] = true
set udg_ItemArmorUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00M', udg_InventoryDummy[playerNum] ) // Remove Armor
elseif (itemLife <= 600) then
if (udg_Boolean_ItemArtifactIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemArtifactUsed[playerNum], udg_Integer_ItemArtifactLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemArtifactLifeInt[playerNum] = itemLife
set udg_Boolean_ItemArtifactIsUsed[playerNum] = true
set udg_ItemArtifactUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00T', udg_InventoryDummy[playerNum] ) // Remove Artifact
elseif (itemLife <= 800) then
if (udg_Boolean_ItemBootsIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemBootsUsed[playerNum], udg_Integer_ItemBootsLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemBootsLifeInt[playerNum] = itemLife
set udg_Boolean_ItemBootsIsUsed[playerNum] = true
set udg_ItemBootsUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00N', udg_InventoryDummy[playerNum] ) // Remove Boots
elseif (itemLife <= 1000) then
if (udg_Boolean_ItemGlovesIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemGlovesUsed[playerNum], udg_Integer_ItemGlovesLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemGlovesLifeInt[playerNum] = itemLife
set udg_Boolean_ItemGlovesIsUsed[playerNum] = true
set udg_ItemGlovesUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00O', udg_InventoryDummy[playerNum] ) // Remove Gloves
elseif (itemLife <= 1200) then
if (udg_Boolean_ItemHelmetIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemHelmetUsed[playerNum], udg_Integer_ItemHelmetLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemHelmetLifeInt[playerNum] = itemLife
set udg_Boolean_ItemHelmetIsUsed[playerNum] = true
set udg_ItemHelmetUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00P', udg_InventoryDummy[playerNum] ) // Remove Helmet
elseif (itemLife <= 1400) then
if (udg_Boolean_ItemLeggingsIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemLeggingsUsed[playerNum], udg_Integer_ItemLeggingsLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemLeggingsLifeInt[playerNum] = itemLife
set udg_Boolean_ItemLeggingsIsUsed[playerNum] = true
set udg_ItemLeggingsUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00I', udg_InventoryDummy[playerNum] ) // Remove Leggings
elseif (itemLife <= 1600) then
if (udg_Boolean_ItemRingIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemRingUsed[playerNum], udg_Integer_ItemRingLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemRingLifeInt[playerNum] = itemLife
set udg_Boolean_ItemRingIsUsed[playerNum] = true
set udg_ItemRingUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00S', udg_InventoryDummy[playerNum] ) // Remove Ring
elseif (itemLife <= 1800) then
if (udg_Boolean_ItemShouldersIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemShouldersUsed[playerNum], udg_Integer_ItemShouldersLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemShouldersLifeInt[playerNum] = itemLife
set udg_Boolean_ItemShouldersIsUsed[playerNum] = true
set udg_ItemShouldersUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00U', udg_InventoryDummy[playerNum] ) // Remove Shoulders
elseif (itemLife <= 2000) then
if (udg_Boolean_ItemWMainhandIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemWMainhandUsed[playerNum], udg_Integer_ItemWMainhandLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemWMainhandLifeInt[playerNum] = itemLife
set udg_Boolean_ItemWMainhandIsUsed[playerNum] = true
set udg_ItemWMainhandUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A00Q', udg_InventoryDummy[playerNum] ) // Remove Mainhand
elseif (itemLife <= 2200) then
if (udg_Boolean_ItemWOffhandIsUsed[playerNum]) then
call HeroAbility_Item_UnEquip(udg_ItemWOffhandUsed[playerNum], udg_Integer_ItemWOffhandLifeInt[playerNum],triggerPlayer,playerNum)
endif
set udg_Integer_ItemWOffhandLifeInt[playerNum] = itemLife
set udg_Boolean_ItemWOffhandIsUsed[playerNum] = true
set udg_ItemWOffhandUsed[playerNum] = itemUsed
call UnitRemoveAbilityBJ( 'A012', udg_InventoryDummy[playerNum] ) // Remove Off-hand
elseif (itemLife <= 2400) then
//set udg_Integer_ItemAmuletLifeInt[playerNum] = itemLife
//set udg_Boolean_ItemAmuletIsUsed[playerNum] = true
//set udg_ItemAmuletUsed[playerNum] = itemUsed
//call UnitRemoveAbilityBJ( 'A00Q', udg_InventoryDummy[playerNum] ) // Remove Two-Handed - Mainhand
//call UnitRemoveAbilityBJ( 'A012', udg_InventoryDummy[playerNum] ) // Remove Two-Handed - Off-hand
endif
// 1st - Adds item abillity to DUMMY; 2nd - Adds item bonuses to HERO;
call UnitAddAbilityBJ( udg_ItemAllListDummyAbility[itemLife], udg_InventoryDummy[playerNum] )
call HeroAbility_AddItemAbilities(itemLife, triggerUnit)
call SetPlayerAbilityAvailableBJ( false, udg_ItemAllHeroAbility10[itemLife], triggerPlayer )
// This is just essential - it displays: You have equipped "Item name" - the color of item name will be based on its rarity.
call DisplayTextToForce( GetForceOfPlayer(triggerPlayer), ( "|CFFFFCC00You have " + ( "|r|CFF00FF00equipped|r " + GetItemName(itemUsed) ) ) )
endfunction
// Function to replace Camera Pan - this function fixed desyncs
function SmartCameraPanBJModified takes player whichPlayer, location loc, real duration returns nothing
local real tx = GetLocationX(loc)
local real ty = GetLocationY(loc)
local real dx = tx - GetCameraTargetPositionX()
local real dy = ty - GetCameraTargetPositionY()
local real dist = SquareRoot(dx * dx + dy * dy)
if (GetLocalPlayer() == whichPlayer) then
if (dist >= bj_SMARTPAN_TRESHOLD_SNAP) then
call PanCameraToTimed(tx, ty, 0)
// Far away = snap camera immediately to point
elseif (dist >= bj_SMARTPAN_TRESHOLD_PAN) then
call PanCameraToTimed(tx, ty, duration)
// Moderately close = pan camera over duration
else
// User is close, don't move camera
endif
endif
endfunction
// ------------------------
// Dungeon Rewards Functions
// ------------------------
function Dungeon_Rewards_E1_AddReward takes integer itemToAdd returns nothing
// Dungeon E1 - Trolls Cave
// All common items can drop here...
set udg_Dungeon_E1_ItemPool[udg_Dungeon_E1_ItemPoolIter] = itemToAdd
set udg_Dungeon_E1_ItemPoolIter = udg_Dungeon_E1_ItemPoolIter + 1
endfunction
Name | Type | is_array | initial_value |
A_Animation | integer | No | |
A_DIALOG | dialog | No | |
A_DIALOGBUTTON | button | Yes | |
A_PotionDrop | string | Yes | |
A_Villager | unit | No | |
Ability_Respawn | abilcode | Yes | |
AbilityLevel | integer | No | |
Boolean_Cinematic_On | boolean | Yes | |
Boolean_CTF1IsStarted | boolean | No | |
Boolean_CTF2IsStarted | boolean | No | |
Boolean_Dominion1BlueCPs | boolean | Yes | |
Boolean_Dominion1IsStarted | boolean | No | |
Boolean_Dominion1RedCPs | boolean | Yes | |
Boolean_Dominion2BlueCPs | boolean | Yes | |
Boolean_Dominion2IsStarted | boolean | No | |
Boolean_Dominion2RedCPs | boolean | Yes | |
Boolean_ItemAmuletIsUsed | boolean | Yes | |
Boolean_ItemArmorIsUsed | boolean | Yes | |
Boolean_ItemArtifactIsUsed | boolean | Yes | |
Boolean_ItemBootsIsUsed | boolean | Yes | |
Boolean_ItemGlovesIsUsed | boolean | Yes | |
Boolean_ItemHelmetIsUsed | boolean | Yes | |
Boolean_ItemLeggingsIsUsed | boolean | Yes | |
Boolean_ItemRingIsUsed | boolean | Yes | |
Boolean_ItemShouldersIsUsed | boolean | Yes | |
Boolean_ItemWMainhandIsUsed | boolean | Yes | |
Boolean_ItemWOffhandIsUsed | boolean | Yes | |
Boolean_Quest_Ambush | boolean | Yes | true |
Boolean_Quest_DawnofKingsReign | boolean | Yes | true |
Boolean_Quest_EnemyIntel | boolean | Yes | true |
Boolean_Quest_FillUpTheCages | boolean | Yes | true |
Boolean_Quest_MilitiaRecruit | boolean | Yes | true |
Boolean_Quest_MissingDelivery | boolean | Yes | true |
Boolean_Quest_NastyBabiesFirstTime | boolean | Yes | true |
Boolean_Quest_PriestGenocide | boolean | Yes | true |
Boolean_Quest_THBTHFirstTime | boolean | Yes | true |
Boolean_Quest_TheWinterIsComin | boolean | Yes | true |
Boolean_Quest_TheyreGone | boolean | Yes | true |
Boolean_Quest_TheyreGone_B | boolean | Yes | true |
Boolean_Quest_TheyreGone_C | boolean | Yes | true |
Boolean_Quest_TheyreGone_D | boolean | Yes | true |
Boolean_Quest_WANTEDTKOT | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurE1 | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurE2 | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurEC | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurED | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurEE | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurEF | boolean | Yes | true |
Boolean_Quest_WeaponsOfOurEG | boolean | Yes | true |
Boolean_Quest_WTTK | boolean | Yes | true |
Boolean_TheLineIsStarted | boolean | No | |
Code | string | No | |
CurrentHero | unit | Yes | |
CurrentHero_Survivor | unit | Yes | |
CurrentHeroType | unitcode | Yes | |
Dungeon_E1_ItemPool | itemcode | Yes | |
Dungeon_E1_ItemPoolIter | integer | No | |
Force_EB | force | No | |
Hero | unit | No | |
Integer | integer | No | |
Integer_A1 | integer | No | |
Integer_Amulet | integer | No | |
Integer_Anger | integer | Yes | |
Integer_Archer | integer | Yes | |
Integer_ArrayIntA | integer | No | |
Integer_BlinkofLight | integer | Yes | |
Integer_BlowingShot | integer | Yes | |
Integer_ChangeHeroXp | integer | No | |
Integer_CTF1BluePoints | integer | No | |
Integer_CTF1RedPoints | integer | No | |
Integer_CTF2BluePoints | integer | No | |
Integer_CTF2RedPoints | integer | No | |
Integer_Dominion1BlueCP | integer | No | |
Integer_Dominion1BluePoints | integer | No | |
Integer_Dominion1RedCP | integer | No | |
Integer_Dominion1RedPoints | integer | No | |
Integer_Dominion2BlueCP | integer | No | |
Integer_Dominion2BluePoints | integer | No | |
Integer_Dominion2RedCP | integer | No | |
Integer_Dominion2RedPoints | integer | No | |
Integer_DominionImmediateNumb1 | integer | No | |
Integer_DominionImmediateNumb2 | integer | No | |
Integer_DropStacks | integer | No | |
Integer_E1_Rewards | integer | No | |
Integer_EB_CustomValue | integer | No | |
Integer_EB_Level | integer | No | |
Integer_EB_PlayerNumber | integer | No | |
Integer_EB_UnitNumber | integer | No | |
Integer_FlashNova | integer | Yes | |
Integer_FlashNovaAllies | integer | Yes | |
Integer_FlashNovaEnemies | integer | Yes | |
Integer_FlashofLight | integer | Yes | |
Integer_GleamofLight | integer | Yes | |
Integer_HeroAbilityArray | integer | Yes | |
Integer_HeroAbilityLast | integer | No | |
Integer_ItemAbility | integer | No | |
Integer_ItemAmuletLifeInt | integer | Yes | |
Integer_ItemArmorLifeInt | integer | Yes | |
Integer_ItemArtifactLifeInt | integer | Yes | |
Integer_ItemBootsLifeInt | integer | Yes | |
Integer_ItemGlovesLifeInt | integer | Yes | |
Integer_ItemHelmetLifeInt | integer | Yes | |
Integer_ItemLeggingsLifeInt | integer | Yes | |
Integer_ItemRingLifeInt | integer | Yes | |
Integer_ItemShouldersLifeInt | integer | Yes | |
Integer_ItemWMainhandLifeInt | integer | Yes | |
Integer_ItemWOffhandLifeInt | integer | Yes | |
Integer_LuckyStrike | integer | Yes | |
Integer_LuckyStrike2 | integer | Yes | |
Integer_MightAnger | integer | Yes | |
Integer_NumberPlayersPlaying | integer | No | |
Integer_PiercingShot | integer | Yes | |
Integer_PlayersInDungeonE1 | integer | No | |
Integer_PoisonedWeapons | integer | Yes | |
Integer_PoisonedWeapons2 | integer | Yes | |
Integer_PoisonedWeapons3 | integer | Yes | |
Integer_PoisonTrap | integer | Yes | |
Integer_Q_BabyTrollKills | integer | Yes | |
Integer_Q_FillUpTheCages | integer | Yes | |
Integer_Q_MilitiaRecruit_Rand | integer | No | |
Integer_Q_MilitiaRecruited | integer | Yes | |
Integer_Q_PriestTrollHeadSpike | integer | Yes | |
Integer_Q_PriestTrollKills | integer | Yes | |
Integer_Q_TrollHunterKills | integer | Yes | |
Integer_Q_WolfKills | integer | Yes | |
Integer_Quest_Bounty | integer | No | |
Integer_Quest_Exp | integer | No | |
Integer_Random | integer | No | |
Integer_RBGSelect | integer | No | |
Integer_Respawn | integer | No | |
Integer_RespawnRandom | integer | No | |
Integer_RespawnTemp | integer | No | |
Integer_Select | integer | No | |
Integer_ShieldWall | integer | Yes | |
Integer_TheLineRandomNumber1 | integer | No | |
Integer_TheLineRandomNumber2 | integer | No | |
Integer_ThrustingShot | integer | Yes | |
Integer_TownLife | integer | No | |
IntegerA | integer | Yes | |
InventoryDummy | unit | Yes | |
InventoryDummyUnittype | unitcode | Yes | |
Item | item | No | |
Item_CTF1BlueFlag | item | No | |
Item_CTF1RedFlag | item | No | |
Item_CTF2BlueFlag | item | No | |
Item_CTF2RedFlag | item | No | |
ItemAllHeroAbility1 | abilcode | Yes | |
ItemAllHeroAbility10 | abilcode | Yes | |
ItemAllHeroAbility2 | abilcode | Yes | |
ItemAllHeroAbility3 | abilcode | Yes | |
ItemAllHeroAbility4 | abilcode | Yes | |
ItemAllHeroAbility5 | abilcode | Yes | |
ItemAllHeroAbility6 | abilcode | Yes | |
ItemAllHeroAbility7 | abilcode | Yes | |
ItemAllList | itemcode | Yes | |
ItemAllListDummyAbility | abilcode | Yes | |
ItemAmuletUsed | item | Yes | |
ItemAmuletUsed2 | item | Yes | |
ItemArmorUsed | item | Yes | |
ItemArmorUsed2 | item | Yes | |
ItemArtifactUsed | item | Yes | |
ItemArtifactUsed2 | item | No | |
ItemBootsUsed | item | Yes | |
ItemBootsUsed2 | item | No | |
ItemClass_AllClasses | itemtype | No | |
ItemClass_Archer | itemtype | No | |
ItemClass_Mage | itemtype | No | |
ItemClass_Priest | itemtype | No | |
ItemClass_Rogue | itemtype | No | |
ItemClass_Warrior | itemtype | No | |
ItemCount | integer | No | |
ItemGlovesUsed | item | Yes | |
ItemGlovesUsed2 | item | Yes | |
ItemHelmetUsed | item | Yes | |
ItemHelmetUsed2 | item | Yes | |
ItemLeggingsUsed | item | Yes | |
ItemLeggingsUsed2 | item | Yes | |
ItemRingUsed | item | Yes | |
ItemRingUsed2 | item | Yes | |
ItemShouldersUsed | item | Yes | |
ItemShouldersUsed2 | item | Yes | |
ItemWMainhandUsed | item | Yes | |
ItemWMainhandUsed2 | item | Yes | |
ItemWOffhandUsed | item | Yes | |
ItemWOffhandUsed2 | item | Yes | |
ItemWTwohandedUsed | item | Yes | |
ItemWTwohandedUsed2 | item | Yes | |
Levers_H1 | destructable | Yes | DestructableNull |
Load | integer | Yes | |
LoadCount | integer | No | |
PG_EnterCTF1 | force | No | |
PG_EnterCTF2 | force | No | |
PG_EnterDominion1 | force | No | |
PG_EnterDominion2 | force | No | |
PG_EnterTheLine | force | No | |
PG_PlayingCTF1Blue | force | No | |
PG_PlayingCTF1Red | force | No | |
PG_PlayingCTF2Blue | force | No | |
PG_PlayingCTF2Red | force | No | |
PG_PlayingDominion1Blue | force | No | |
PG_PlayingDominion1Red | force | No | |
PG_PlayingDominion2Blue | force | No | |
PG_PlayingDominion2Red | force | No | |
PG_PlayingTheLineBlue | force | No | |
PG_PlayingTheLineRed | force | No | |
PG_QueueCTF1 | force | No | |
PG_QueueCTF2 | force | No | |
PG_QueueDominion1 | force | No | |
PG_QueueDominion2 | force | No | |
PG_QueueRBG | force | No | |
PG_QueueTheLine | force | No | |
Player | player | Yes | |
Player_BGRandomPlayer | player | No | |
Point_Anger | location | Yes | |
Point_Archer | location | Yes | |
Point_BGEnd | location | No | |
Point_BlinkofLight | location | Yes | |
Point_BlinkofLightCaster | location | Yes | |
Point_ChangeUnit | location | Yes | |
Point_Cleave | location | Yes | |
Point_CodeGenLoad | location | Yes | |
Point_CTF1BlueFlag | location | No | |
Point_CTF1BlueSpawn | location | No | |
Point_CTF1RedFlag | location | No | |
Point_CTF1RedSpawn | location | No | |
Point_CTF2BlueFlag | location | No | |
Point_CTF2BlueSpawn | location | No | |
Point_CTF2RedFlag | location | No | |
Point_CTF2RedSpawn | location | No | |
Point_CurrentHero | location | No | |
Point_Dominion1BlueSpawn | location | No | |
Point_Dominion1LD | location | No | |
Point_Dominion1LU | location | No | |
Point_Dominion1RD | location | No | |
Point_Dominion1RedSpawn | location | No | |
Point_Dominion1RU | location | No | |
Point_Dominion2BlueSpawn | location | No | |
Point_Dominion2LD | location | No | |
Point_Dominion2LU | location | No | |
Point_Dominion2RD | location | No | |
Point_Dominion2RedSpawn | location | No | |
Point_Dominion2RU | location | No | |
Point_Drop | location | No | |
Point_DummyCreation | location | No | |
Point_Dungeon_Reward | location | Yes | |
Point_DungeonE1 | location | No | |
Point_EB | location | No | |
Point_FlashNova | location | Yes | |
Point_FlashofLight | location | Yes | |
Point_FlashofLightCaster | location | Yes | |
Point_GleamofLight | location | Yes | |
Point_GleamofLightCaster | location | Yes | |
Point_Guard | location | Yes | |
Point_Immediate | location | Yes | |
Point_ItemEquipRemove | location | No | |
Point_MightAnger | location | Yes | |
Point_Q_MilitiaRecruit_Target | location | No | |
Point_Q_WNTDTroll | location | No | |
Point_QGiver_AvaRegan | location | No | |
Point_QGiver_Branden | location | No | |
Point_QGiver_Commander | location | No | |
Point_QGiver_EllynLodbrook | location | No | |
Point_QGiver_Mortimer | location | No | |
Point_QGiver_Thomas | location | No | |
Point_Quest_TheyreGone | location | No | |
Point_Temp | location | No | |
Point_Temp2 | location | No | |
Point_Temp3 | location | No | |
Point_Temp4 | location | No | |
Point_TheLineSpawnBlueHero | location | No | |
Point_TheLineSpawnBlueTower | location | No | |
Point_TheLineSpawnBlueUnits | location | No | |
Point_TheLineSpawnRedHero | location | No | |
Point_TheLineSpawnRedTower | location | No | |
Point_TheLineSpawnRedUnits | location | No | |
Point_TownLife_Guards | location | Yes | |
Point_TownLifeKids | location | No | |
Point_TownLifeMale | location | No | |
Potion_VariableType | itemcode | Yes | |
QJC_Ally | boolean | No | |
QJC_Amount | real | No | |
QJC_AmountReduce | real | No | |
QJC_AoE | boolean | No | |
QJC_AoERadius | real | No | |
QJC_AttackType | attacktype | No | |
QJC_Caster | unit | No | |
QJC_ChainSFX | lightningtype | No | |
QJC_Damage | boolean | No | |
QJC_DamageType | damagetype | No | |
QJC_Enemy | boolean | No | |
QJC_Gold | boolean | No | |
QJC_Heal | boolean | No | |
QJC_Heatlh | boolean | No | |
QJC_JumpCount | integer | No | |
QJC_JumpDelayTime | real | No | |
QJC_JumpRadius | real | No | |
QJC_Leech | boolean | No | |
QJC_Mana | boolean | No | |
QJC_NoTarget | boolean | No | |
QJC_OnePerUnit | boolean | No | |
QJC_Priority | boolean | No | |
QJC_Slow | boolean | No | |
QJC_SlowEffect | abilcode | No | |
QJC_Stun | boolean | No | |
QJC_StunEffect | abilcode | No | |
QJC_TargetPoint | location | No | |
QJC_TargetSFX | string | No | |
QJC_TargetUnit | unit | No | |
QJCS_aGroup | group | Yes | |
QJCS_Ally | boolean | Yes | |
QJCS_Amount | real | Yes | |
QJCS_AmountReduce | real | Yes | |
QJCS_AoE | boolean | Yes | |
QJCS_AoERadius | real | Yes | |
QJCS_AttackType | attacktype | Yes | |
QJCS_baseDummy | unit | Yes | |
QJCS_Caster | unit | Yes | |
QJCS_ChainSFX | lightningtype | Yes | |
QJCS_ChainX | real | Yes | |
QJCS_ChainY | real | Yes | |
QJCS_ChainZ | real | Yes | |
QJCS_currUnit | unit | No | |
QJCS_Damage | boolean | Yes | |
QJCS_DamageType | damagetype | Yes | |
QJCS_dGroup | group | Yes | |
QJCS_dummyGroup | group | No | |
QJCS_Enemy | boolean | Yes | |
QJCS_Gold | boolean | Yes | |
QJCS_Heal | boolean | Yes | |
QJCS_Health | boolean | Yes | |
QJCS_index | integer | Yes | |
QJCS_JumpCount | integer | Yes | |
QJCS_JumpDelayTime | real | Yes | |
QJCS_JumpRadius | real | Yes | |
QJCS_Leech | boolean | Yes | |
QJCS_LightningDPos | unit | Yes | |
QJCS_LightningDur | real | Yes | |
QJCS_LightningIndex | integer | Yes | |
QJCS_LightningPos | location | Yes | |
QJCS_LightningSFX | lightning | Yes | |
QJCS_LightningTarget | unit | Yes | |
QJCS_Locust | abilcode | No | |
QJCS_Mana | boolean | Yes | |
QJCS_OnePerUnit | boolean | Yes | |
QJCS_prevTarget | unit | Yes | |
QJCS_Priority | boolean | Yes | |
QJCS_Slow | boolean | Yes | |
QJCS_SlowEffect | abilcode | Yes | |
QJCS_Stun | boolean | Yes | |
QJCS_StunEffect | abilcode | Yes | |
QJCS_SystemCount | integer | Yes | |
QJCS_SystemTime | real | Yes | |
QJCS_TargetSFX | string | Yes | |
QJCS_TargetUnit | unit | Yes | |
QJCS_tempGroup | group | No | |
QJCS_tempPos | location | Yes | |
QJCS_victimGroup | group | No | |
Quest_EnemyIntelligence | quest | Yes | |
Quest_FillUpTheCages | quest | Yes | |
Quest_MilitiaRecruit | quest | Yes | |
Quest_MissingDelivery | quest | Yes | |
Quest_NastyBabies | quest | Yes | |
Quest_PriestGenocide | quest | Yes | |
Quest_TheHunterBecameTheHunted | quest | Yes | |
Quest_TheWinterIsComing | quest | Yes | |
Quest_TheyreGone | quest | Yes | |
Quest_WANTEDKingofTrolls | quest | Yes | |
Quest_WeaponsOfOurEnemies | quest | Yes | |
Quest_WelcomeToTheKingdom | quest | Yes | |
Real_ChangeUnit | real | Yes | |
Real_Dominion1LD | real | No | |
Real_Dominion1LDBlue | real | No | |
Real_Dominion1LDRed | real | No | |
Real_Dominion1LU | real | No | |
Real_Dominion1LUBlue | real | No | |
Real_Dominion1LURed | real | No | |
Real_Dominion1RD | real | No | |
Real_Dominion1RDBlue | real | No | |
Real_Dominion1RDRed | real | No | |
Real_Dominion1RU | real | No | |
Real_Dominion1RUBlue | real | No | |
Real_Dominion1RURed | real | No | |
Real_Dominion2LD | real | No | |
Real_Dominion2LDBlue | real | No | |
Real_Dominion2LDRed | real | No | |
Real_Dominion2LU | real | No | |
Real_Dominion2LUBlue | real | No | |
Real_Dominion2LURed | real | No | |
Real_Dominion2RD | real | No | |
Real_Dominion2RDBlue | real | No | |
Real_Dominion2RDRed | real | No | |
Real_Dominion2RU | real | No | |
Real_Dominion2RUBlue | real | No | |
Real_Dominion2RURed | real | No | |
Real_EB_Bounty | real | No | |
Real_EB_BountyGain | real | No | |
Real_EB_Exp | real | No | |
Real_EB_ExpGain | real | No | |
Real_EB_Life | real | No | |
Rect_Hero_Respawn | rect | Yes | |
Rect_TownLife | rect | Yes | |
Region_PlayableMap | rect | No | |
Respawn_Position | location | Yes | |
RespawnForce | force | No | |
Save | integer | Yes | |
SaveCount | integer | No | |
SaveLoad_Abilities | abilcode | Yes | |
SaveLoad_Abilities_LastIndex | integer | No | |
SaveLoad_AbilityCount | integer | No | |
SaveLoad_Alphabet | string | No | |
SaveLoad_Base | integer | No | |
SaveLoad_Char | string | Yes | |
SaveLoad_CheckName | boolean | No | |
SaveLoad_Compress | integer | Yes | |
SaveLoad_CurrentPlayerLoaded | integer | No | |
SaveLoad_Directory | string | No | |
SaveLoad_Error | string | No | |
SaveLoad_Filename | string | No | |
SaveLoad_Full | string | No | |
SaveLoad_Hero | unitcode | Yes | |
SaveLoad_HeroCount | integer | No | |
SaveLoad_Heroes | unitcode | Yes | |
SaveLoad_Heroes_LastIndex | integer | No | |
SaveLoad_HyphenSpace | integer | No | |
SaveLoad_Item | itemcode | Yes | |
SaveLoad_ItemCount | integer | No | |
SaveLoad_Items | itemcode | Yes | |
SaveLoad_Items_LastIndex | integer | No | |
SaveLoad_Lower | string | No | |
SaveLoad_MaxValue | integer | No | |
SaveLoad_Number | string | No | |
SaveLoad_SaveToDisk | boolean | No | |
SaveLoad_Security | boolean | No | |
SaveLoad_SeperationChar | string | No | |
SaveLoad_TempItem | item | No | |
SaveLoad_Uncompress | integer | Yes | |
SaveLoad_Upper | string | No | |
SaveLoad_UsePlayername | boolean | No | |
SaveLoad_Valid | boolean | No | |
SaveTemp | integer | No | |
SaveUnit | unit | No | |
SE_BlinkofLight | effect | Yes | |
SE_BlowingShot | effect | Yes | |
SE_FlashNova1 | effect | Yes | |
SE_FlashNova2 | effect | Yes | |
SE_FlashNova3 | effect | Yes | |
SE_FlashNova4 | effect | Yes | |
SE_FlashNovaAllies | effect | Yes | |
SE_FlashNovaEnemies | effect | Yes | |
SE_FlashofLight | effect | Yes | |
SE_GleamofLight | effect | Yes | |
Stacking_PotionCharges | integer | Yes | |
Stacking_String | string | No | |
TempItem | item | No | |
TempItemType | itemcode | No | |
TempUnit | unit | Yes | |
TempUnitType | unitcode | No | |
Timer_CTF1 | timer | No | |
Timer_CTF1Playing | timer | No | |
Timer_CTF2 | timer | No | |
Timer_CTF2Playing | timer | No | |
Timer_Dominion1 | timer | No | |
Timer_Dominion1Playing | timer | No | |
Timer_Dominion2 | timer | No | |
Timer_Dominion2Playing | timer | No | |
Timer_RBG | timer | No | |
Timer_Respawn | timer | Yes | |
Timer_TheLine | timer | No | |
Timer_TheLinePlaying | timer | No | |
Timer_Unpause | timer | Yes | |
TimerWindow_HeroRespawn | timerdialog | Yes | |
TimerWindow_HeroUnpause | timerdialog | Yes | |
TrapPosition | location | Yes | |
Trigger_Respawn | trigger | Yes | |
TriggeringPlayer | player | No | |
UG | group | No | |
UG_Anger | group | Yes | |
UG_BlinkofLight | group | Yes | |
UG_CTF1Blue | group | No | |
UG_CTF1Red | group | No | |
UG_CTF2Blue | group | No | |
UG_CTF2Red | group | No | |
UG_Dominion1Blue | group | No | |
UG_Dominion1Red | group | No | |
UG_Dominion2Blue | group | No | |
UG_Dominion2Red | group | No | |
UG_EB | group | Yes | |
UG_EB_Healers | group | No | |
UG_FlashNovaAllies | group | Yes | |
UG_FlashNovaEnemies | group | Yes | |
UG_FlashofLight | group | Yes | |
UG_GleamofLight | group | Yes | |
UG_Guards | group | No | |
UG_MightAnger | group | Yes | |
UG_PoisonTrap | group | Yes | |
UG_Q_MilitiaRecruit_Asked | group | Yes | |
UG_Q_TheyreGone | group | No | |
UG_Q_TheyreGone2 | group | No | |
UG_Temp | group | No | |
UG_TheLineBlue | group | No | |
UG_TheLineRed | group | No | |
Unit_Dominion1CPLD | unit | No | |
Unit_Dominion1CPLU | unit | No | |
Unit_Dominion1CPRD | unit | No | |
Unit_Dominion1CPRU | unit | No | |
Unit_Dominion2CPLD | unit | No | |
Unit_Dominion2CPLU | unit | No | |
Unit_Dominion2CPRD | unit | No | |
Unit_Dominion2CPRU | unit | No | |
Unit_EB | unit | No | |
Unit_Q_TheyreGone | unit | No | |
Unit_Respawn | unit | Yes | |
Unit_RespawnTemp | unit | No | |
UnitType_Healer | unitcode | Yes | |
UT_TheLineUnitTypes | unitcode | Yes | |
Weather_Effect | weathereffect | Yes | |
WeatherForce | force | No |
function Trig_asd_Actions takes nothing returns nothing
call UnitRemoveAbilityBJ( 'A01J', GetSpellTargetUnit() )
endfunction
//===========================================================================
function InitTrig_asd takes nothing returns nothing
set gg_trg_asd = CreateTrigger( )
call TriggerAddAction( gg_trg_asd, function Trig_asd_Actions )
endfunction
function Trig_Untitled_Trigger_022_Actions takes nothing returns nothing
set udg_Integer = GetHeroSkillPoints(udg_Hero)
call ModifyHeroSkillPoints( udg_Hero, bj_MODIFYMETHOD_SET, 1 )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_022 takes nothing returns nothing
set gg_trg_Untitled_Trigger_022 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_022, function Trig_Untitled_Trigger_022_Actions )
endfunction
function CodeGen_SaveToDisk takes string loadcode, string filename returns nothing
call PreloadGenClear()
call PreloadGenStart()
call Preload(loadcode)
call PreloadGenEnd(filename)
call ClearSelection()
endfunction
function CodeGen_Init takes nothing returns nothing
local integer i = 1
local integer b = udg_SaveLoad_Base
local integer m = udg_SaveLoad_MaxValue
loop
exitwhen i >= udg_SaveLoad_MaxValue
set udg_SaveLoad_Char[i] = SubString(udg_SaveLoad_Alphabet, i, i+1)
set i = i + 1
endloop
set udg_SaveLoad_Alphabet = SubString(udg_SaveLoad_Alphabet, 0, 1) + SubString(udg_SaveLoad_Alphabet, m + 1, b)
set udg_SaveLoad_Base = b - m
endfunction
function CodeGen_ConvertItem takes integer id returns integer
local integer i = 1
loop
exitwhen i > udg_SaveLoad_ItemCount
if (id == udg_SaveLoad_Item[i]) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
function CodeGen_ConvertUnit takes integer id returns integer
local integer i = 1
loop
exitwhen i > udg_SaveLoad_HeroCount
if (id == udg_SaveLoad_Hero[i]) then
return i
endif
set i = i + 1
endloop
return 0
endfunction
function CodeGen_Encode takes integer i returns string
local integer b
local string s = ""
if i <= udg_SaveLoad_Base then
return SubString(udg_SaveLoad_Alphabet, i, i + 1)
endif
loop
exitwhen i <= 0
set b = i - (i / udg_SaveLoad_Base) * udg_SaveLoad_Base
set s = SubString(udg_SaveLoad_Alphabet, b, b + 1) + s
set i = i / udg_SaveLoad_Base
endloop
return s
endfunction
function CodeGen_StrPos takes string s returns integer
local integer i = 0
loop
exitwhen i > udg_SaveLoad_Base
if s == SubString(udg_SaveLoad_Alphabet, i, i + 1) then
return i
endif
set i = i + 1
endloop
return -1
endfunction
function CodeGen_Decode takes string s returns integer
local integer a = 0
loop
exitwhen StringLength(s) == 1
set a = a * udg_SaveLoad_Base + udg_SaveLoad_Base * CodeGen_StrPos(SubString(s, 0, 1))
set s = SubString(s, 1, 99)
endloop
return a+CodeGen_StrPos(s)
endfunction
function CodeGen_StringChecksum takes string str returns integer
local integer i = 0
local integer l = StringLength(str)
local integer t = 0
local integer o = 0
loop
exitwhen i >= l
set t = CodeGen_Decode(SubString(str, i, i + 1))
set o = o + t
set i = i + 1
endloop
return o
endfunction
function CodeGen_Color takes string char returns string
local integer i = 0
local integer l = StringLength(udg_SaveLoad_Full)
local string x = ""
loop
exitwhen i >= l
set x = SubString(udg_SaveLoad_Full, i, i + 1)
if char == x then
if (x=="0" or S2I(x) > 0) then
return udg_SaveLoad_Number + char + "|r"
elseif StringCase(x, false) == x then
return udg_SaveLoad_Lower + char + "|r"
elseif StringCase(x, true) == x then
return udg_SaveLoad_Upper + char + "|r"
endif
endif
set i = i + 1
endloop
return char
endfunction
function CodeGen_Format takes string s returns string
local integer i = 0
local integer x = StringLength(s)
local integer j = 1
local string s2 = ""
loop
exitwhen i >= x
set s2 = s2 + CodeGen_Color(SubString(s, i, i + 1))
if (j >= udg_SaveLoad_HyphenSpace and i != (x-1)) then
set j = 0
set s2 = s2 + udg_SaveLoad_SeperationChar
endif
set j = j + 1
set i = i + 1
endloop
return s2
endfunction
function CodeGen_Strip takes string s returns string
local integer i = 0
local integer x = StringLength(s)
local string out = ""
local string a = ""
loop
exitwhen i >= x
set a = SubString(s, i, i + 1)
if (a != udg_SaveLoad_SeperationChar) then
set out = out + a
endif
set i = i + 1
endloop
return out
endfunction
// yeeahh descriptive variables
function CodeGen_Load takes string s returns nothing
local string str = CodeGen_Strip(s)
local string tmp = ""
local string c = ""
local integer x = 0
local integer i = 1
local integer l = 0
local integer j = 1
local integer f = 0
local boolean b = true
set udg_SaveLoad_Valid = false
if (udg_SaveLoad_Security) then
loop
exitwhen i > 3
if (CodeGen_Decode(SubString(str, 0, i)) == CodeGen_StringChecksum(SubString(str, i, 999))) then
set udg_SaveLoad_Valid = true
set str = SubString(str, i, 999)
set i = 4
endif
set i = i + 1
endloop
endif
if (not udg_SaveLoad_Valid) then
set udg_SaveLoad_Error = "Invalid Code"
return
endif
set i = 0
set l = StringLength(str)
if (udg_SaveLoad_CheckName) then
set c = CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
set i = StringLength(c)
if (c != SubString(str, l - i, i)) then
set udg_SaveLoad_Valid = false
set udg_SaveLoad_Error = "Wrong username"
return
endif
set l = l - i
endif
set i = 0
loop
exitwhen i >= l
set tmp = SubString(str, i, i + 1)
set b = true
set f = 0
set j = 1
loop
exitwhen f >= (udg_SaveLoad_MaxValue)
if (tmp == udg_SaveLoad_Char[f]) then
set j = f + 2
set udg_Load[x] = CodeGen_Decode(SubString(str, i + 1, i + (j)))
set b = false
set f = udg_SaveLoad_MaxValue
endif
set f = f + 1
endloop
if (b) then
set udg_Load[x] = CodeGen_Decode(tmp)
endif
set i = i + j
set x = x + 1
endloop
set udg_SaveLoad_Valid = true
endfunction
function CodeGen_Compile takes nothing returns string
local integer i = 0
local integer j = 0
local string out = ""
local string ln = ""
local string x = ""
loop
exitwhen i > udg_SaveCount
set x = CodeGen_Encode(udg_Save[i])
set j = StringLength(x)
if (j > 1) then
set out = out + udg_SaveLoad_Char[j-1]
endif
set out = out + x
set i = i + 1
endloop
if (udg_SaveLoad_CheckName) then
set out = out + CodeGen_Encode(CodeGen_StringChecksum(GetPlayerName(GetTriggerPlayer())))
endif
if (udg_SaveLoad_Security) then
set out = CodeGen_Encode(CodeGen_StringChecksum(out)) + out
endif
if udg_SaveLoad_SaveToDisk and GetLocalPlayer() == GetTriggerPlayer() then
call CodeGen_SaveToDisk(out, udg_SaveLoad_Directory + "\\" + udg_SaveLoad_Filename)
endif
return CodeGen_Format(out)
endfunction
function Trig_CodeGen_Init_Actions takes nothing returns nothing
// --------------------
// The below options are for saving load codes to the Warcraft III folder.
// You can modify the filename via the SaveLoad_Filename variable within the save trigger.
// --------------------
set udg_SaveLoad_SaveToDisk = true
set udg_SaveLoad_Directory = "TLoVSave"
// --------------------
// Some configurables
// --------------------
//set udg_SaveLoad_Alphabet = "yKhFvdVHPkSxpuog35eaTNr7CGBE1tbsOUY2zZRLn9XJDwq4QWc0MfAm68"
set udg_SaveLoad_Alphabet = "yKhFvdVHPkSxpuog35eaTNr7CGBE1tbsOUY2zZRLn9XJDwq4QWc0MfAm68-_/?!,[])(}{=*&%$#@"
set udg_SaveLoad_CheckName = true
set udg_SaveLoad_Security = true
set udg_SaveLoad_HyphenSpace = 5
set udg_SaveLoad_SeperationChar = ""
set udg_SaveLoad_Lower = "|cff00cc00"
set udg_SaveLoad_Number = "|cffffcc00"
set udg_SaveLoad_Upper = "|cffffcc00"
// --------------------
// Increase the value if you want to save bigger numbers
// Decrease it if you want to generate a smaller save code but only be able to save smaller values
// It's suggested to not increase it above 7
// --------------------
set udg_SaveLoad_MaxValue = 6
// --------------------
// Store all the heroes you want to be able to be saved below.
// --------------------
set udg_SaveLoad_Hero[0] = 'H002' // Female
set udg_SaveLoad_Hero[1] = 'H000' // Male
set udg_SaveLoad_HeroCount = 1 // == last index!!
// --------------------
// Store all the abilities you want to be able to be saved below.
// --------------------
set udg_SaveLoad_Abilities[0] = 'A00F' // Bash - Male
set udg_SaveLoad_Abilities[1] = 'A00E' // Thunder Clap - Male
set udg_SaveLoad_Abilities[2] = 'A00D' // War Stomp - Male
set udg_SaveLoad_Abilities[3] = 'A000' // Shadow Strike - Female
set udg_SaveLoad_Abilities[4] = 'A006' // Holy Wave - Female
set udg_SaveLoad_Abilities[5] = 'A00C' // Wind Walk - Female
set udg_SaveLoad_AbilityCount = 5 // == last index!!
// --------------------
// Store all the items you want to be able to be saved below.
// EDIT: The items are defined in "Item Init All Items" trigger
// --------------------
/*
set udg_SaveLoad_Item[0] = 'A00F' // Bash - Male
set udg_SaveLoad_Item[1] = 'A00E' // Thunder Clap - Male
set udg_SaveLoad_Item[2] = 'A00D' // War Stomp - Male
set udg_SaveLoad_Item[3] = 'A000' // Shadow Strike - Female
set udg_SaveLoad_Item[4] = 'A006' // Holy Wave - Female
set udg_SaveLoad_Item[5] = 'A00C' // Wind Walk - Female
//set udg_SaveLoad_Item[6] = 'A00E'
set udg_SaveLoad_ItemCount = 5
*/
// --------------------
// Don't modify below this line.
// This is just here to copy variables to your map
// --------------------
set udg_SaveLoad_Full = udg_SaveLoad_Alphabet
set udg_SaveLoad_Error = ""
set udg_SaveLoad_Base = StringLength(udg_SaveLoad_Alphabet)
set udg_SaveLoad_Char[0] = ""
set udg_Load[0] = 0
set udg_LoadCount = 0
call CodeGen_Init()
call DisableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_CodeGen_Init takes nothing returns nothing
set gg_trg_CodeGen_Init = CreateTrigger( )
call TriggerAddAction( gg_trg_CodeGen_Init, function Trig_CodeGen_Init_Actions )
endfunction
function Trig_CodeGen_Save_Func031Func001C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped(udg_SaveLoad_Abilities[GetForLoopIndexA()], udg_Hero) > 0 ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Amulet takes nothing returns boolean
if ( not ( udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Armor takes nothing returns boolean
if ( not ( udg_Boolean_ItemArmorIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Artifact takes nothing returns boolean
if ( not ( udg_Boolean_ItemArtifactIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Boots takes nothing returns boolean
if ( not ( udg_Boolean_ItemBootsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Gloves takes nothing returns boolean
if ( not ( udg_Boolean_ItemGlovesIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Helmet takes nothing returns boolean
if ( not ( udg_Boolean_ItemHelmetIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Leggings takes nothing returns boolean
if ( not ( udg_Boolean_ItemLeggingsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Ring takes nothing returns boolean
if ( not ( udg_Boolean_ItemRingIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_Shoulders takes nothing returns boolean
if ( not ( udg_Boolean_ItemShouldersIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_WMainhand takes nothing returns boolean
if ( not ( udg_Boolean_ItemWMainhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Item_WOffhand takes nothing returns boolean
if ( not ( udg_Boolean_ItemWOffhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Save_Actions takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger() )
call DisableTrigger( gg_trg_CodeGen_Load )
// --------------------
// Find the players hero, and save it.
// --------------------
set udg_SaveCount = 0
set udg_Hero = udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = CodeGen_ConvertUnit(GetUnitTypeId(udg_Hero))
// --------------------
// Save heroes level.
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetHeroLevel(udg_Hero)
// --------------------
// Hero Position X
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = R2I(GetLocationX(GetUnitLoc(udg_Hero)))
// --------------------
// Hero Position Y
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = R2I(GetLocationY(GetUnitLoc(udg_Hero)))
// --------------------
// Save heroes items.
// --------------------
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
// The number of life it has
set udg_SaveCount = ( udg_SaveCount + 1 )
call SetItemLifeBJ(UnitItemInSlotBJ(udg_Hero, GetForLoopIndexA()), 1000000.0)
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(UnitItemInSlotBJ(udg_Hero, GetForLoopIndexA())))
// The item itself is not needed, we can track it via number of life
// The number of charges it has
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetItemCharges(UnitItemInSlotBJ(udg_Hero, GetForLoopIndexA()))
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// --------------------
// Now abillities
// --------------------
set bj_forLoopAIndex = 0
set bj_forLoopAIndexEnd = udg_SaveLoad_AbilityCount
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if ( Trig_CodeGen_Save_Func031Func001C() ) then
// The actual ability
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = udg_SaveLoad_Abilities[GetForLoopIndexA()]
// Its level
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetUnitAbilityLevelSwapped(udg_SaveLoad_Abilities[GetForLoopIndexA()], udg_Hero)
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// --------------------
// Save players copper.
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD)
// --------------------
// Save players silver.
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER)
// --------------------
// Save players dummy inventory.
// --------------------
call SetUnitOwner( udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())], GetTriggerPlayer(), true )
// Save the Dummy
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_SaveUnit = udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = CodeGen_ConvertUnit( GetUnitTypeId( udg_SaveUnit ) )
// Now dummy abillities (items)
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemArmorUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemArtifactUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemBootsUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemGlovesUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemHelmetUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemLeggingsUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemRingUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemShouldersUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemWMainhandUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_TempItem = udg_ItemWOffhandUsed[GetConvertedPlayerId(GetTriggerPlayer())]
set udg_Save[udg_SaveCount] = R2I(GetItemLifeBJ(udg_TempItem))
// --------------------
// Now free skill points
// --------------------
set udg_SaveCount = ( udg_SaveCount + 1 )
set udg_Save[udg_SaveCount] = GetHeroSkillPoints(udg_Hero)
// --------------------
// Set the filename for where the loadcode will be stored.
// --------------------
set udg_SaveLoad_Filename = ( ( "(TLoV) " + GetPlayerName(GetTriggerPlayer()) ) + ( "'s" + ( " " + ( ( GetUnitName(udg_Hero) + ( " (lvl " + I2S(GetUnitLevel(udg_Hero)) ) ) + ").txt" ) ) ) )
// --------------------
// Show Code
// --------------------
set udg_Code = CodeGen_Compile()
call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 60.00, ( "Exporting into WC3 folder TLoVSave file - " + udg_SaveLoad_Filename ) )
call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 60.00, udg_Code )
call SelectUnitForPlayerSingle( udg_Hero, GetTriggerPlayer() )
set udg_SaveUnit = null
set udg_TempItem = null
set udg_Hero = null
call EnableTrigger( GetTriggeringTrigger() )
call EnableTrigger( gg_trg_CodeGen_Load )
endfunction
//===========================================================================
function InitTrig_CodeGen_Save takes nothing returns nothing
set gg_trg_CodeGen_Save = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(0), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(1), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(2), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(3), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(4), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(5), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(6), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(7), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(8), "-save", true )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Save, Player(9), "-save", true )
call TriggerAddAction( gg_trg_CodeGen_Save, function Trig_CodeGen_Save_Actions )
endfunction
function Trig_CodeGen_Load_ResetQuests takes nothing returns nothing
set udg_Integer_Q_PriestTrollKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_TrollHunterKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Boolean_Quest_TheyreGone_B[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_Boolean_Quest_TheyreGone_C[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_Boolean_Quest_TheyreGone_D[GetConvertedPlayerId(GetOwningPlayer(GetKillingUnitBJ()))] = true
call QuestSetCompletedBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())] )
call QuestSetCompletedBJ( udg_Quest_WANTEDKingofTrolls[GetConvertedPlayerId(GetTriggerPlayer())], false )
set udg_Integer_Q_MilitiaRecruited[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())] )
call QuestSetCompletedBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Boolean_Quest_WeaponsOfOurEC[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurED[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEE[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEF[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEG[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
call QuestSetCompletedBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_BabyTrollKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_WolfKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())] )
endfunction
function Trig_CodeGen_Load_Conditions takes nothing returns boolean
if ( not ( StringCase(SubStringBJ(GetEventPlayerChatString(), 1, 6), false) == "-load " ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Load_Func009C takes nothing returns boolean
if ( not ( udg_SaveLoad_Valid == false ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Load_Func016001002 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_CodeGen_Load_Func016002 takes nothing returns nothing
call RemoveUnit( GetEnumUnit() )
endfunction
function Trig_CodeGen_Load_SavedItemMatches takes nothing returns boolean
if ( not ( udg_ItemAllList[GetForLoopIndexB()] == udg_SaveLoad_Item[udg_Load[udg_LoadCount]] ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Load_Func039Func001C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped(udg_SaveLoad_Abilities[GetForLoopIndexA()], udg_Hero) > 0 ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Load_Func071Func005C takes nothing returns boolean
if ( not ( udg_SaveLoad_TempItem != null ) ) then
return false
endif
return true
endfunction
function Trig_CodeGen_Load_RemovePlayerItems takes nothing returns nothing
if ( GetItemPlayer(GetEnumItem()) == GetTriggerPlayer() ) then
call RemoveItem( GetEnumItem() )
endif
endfunction
function Trig_CodeGen_Load_Actions takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger() )
call DisableTrigger( gg_trg_CodeGen_Save )
// --------------------
// Check if load is valid
// --------------------
set udg_Code = SubStringBJ(GetEventPlayerChatString(), 7, 999)
call CodeGen_Load(udg_Code)
if ( Trig_CodeGen_Load_Func009C() ) then
call DisplayTimedTextToForce( GetForceOfPlayer(GetTriggerPlayer()), 10.00, udg_SaveLoad_Error )
call EnableTrigger( GetTriggeringTrigger() )
call EnableTrigger( gg_trg_CodeGen_Save )
return
else
endif
// --------------------
// First, remove all items owned by trigerring player to insure no duplicating of items...
// --------------------
call EnumItemsInRectBJ( GetPlayableMapRect(), function Trig_CodeGen_Load_RemovePlayerItems )
// --------------------
// Secondly, reset all quests to start state. Does not make it possible for quests to be done 2nd time
// --------------------
call Trig_CodeGen_Load_ResetQuests()
// --------------------
// We begin with loading the hero first (because that's what we saved first).
// --------------------
set udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())] = GetRectCenter(udg_Rect_Hero_Respawn[GetConvertedPlayerId(GetTriggerPlayer())])
set udg_LoadCount = 0
set bj_wantDestroyGroup = true
call ForGroupBJ( GetUnitsOfPlayerMatching(GetTriggerPlayer(), Condition(function Trig_CodeGen_Load_Func016001002)), function Trig_CodeGen_Load_Func016002 )
call CreateNUnitsAtLoc( 1, udg_SaveLoad_Hero[udg_Load[udg_LoadCount]], GetTriggerPlayer(), udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())], bj_UNIT_FACING )
call RemoveLocation(udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())])
set udg_Hero = GetLastCreatedUnit()
set udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] = udg_Hero
call SelectUnitForPlayerSingle( GetLastCreatedUnit(), GetTriggerPlayer() )
// --------------------
// Load heroes level
// --------------------
set udg_LoadCount = ( udg_LoadCount + 1 )
call SetHeroLevelBJ( GetLastCreatedUnit(), udg_Load[udg_LoadCount], false )
// --------------------
// Hero Position X/Y
// --------------------
set udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())] = Location(I2R(udg_Load[( udg_LoadCount + 1 )]), I2R(udg_Load[( udg_LoadCount + 2 )]))
call SetUnitPositionLoc( udg_Hero, udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())] )
call SmartCameraPanBJModified(GetTriggerPlayer(), udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())], 0)
call RemoveLocation(udg_Point_CodeGenLoad[GetConvertedPlayerId(GetTriggerPlayer())])
set udg_LoadCount = ( udg_LoadCount + 2 )
// --------------------
// Now items
// --------------------
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 6
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
/*set bj_forLoopBIndex = 1
set bj_forLoopBIndexEnd = udg_Integer_HeroAbilityLast
loop
exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
if ( Trig_CodeGen_Load_SavedItemMatches() ) then
*/
set udg_LoadCount = ( udg_LoadCount + 1 )
call UnitAddItemByIdSwapped( udg_ItemAllList[udg_Load[udg_LoadCount]], udg_Hero )
// The number of charges it has
set udg_LoadCount = ( udg_LoadCount + 1 )
call SetItemCharges( GetLastCreatedItem(), udg_Load[udg_LoadCount] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
//set bj_forLoopBIndex = bj_forLoopBIndexEnd + 1
// endif
//set bj_forLoopBIndex = bj_forLoopBIndex + 1
//endloop
endloop
// --------------------
// Now abillities
// --------------------
set bj_forLoopAIndex = 0
set bj_forLoopAIndexEnd = udg_SaveLoad_AbilityCount
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call SelectHeroSkill( udg_Hero, udg_Load[udg_LoadCount+1])
if ( GetUnitAbilityLevelSwapped(udg_SaveLoad_Abilities[GetForLoopIndexA()], udg_Hero) > 0 ) then
// The actual ability
set udg_LoadCount = ( udg_LoadCount + 1 )
//call SelectHeroSkill( udg_Hero, udg_Load[udg_LoadCount]) //udg_SaveLoad_Abilities[ GetForLoopIndexA() ] )
// Its level
call SetUnitAbilityLevel( udg_Hero, udg_Load[udg_LoadCount], udg_Load[ ( udg_LoadCount + 1 ) ] )
set udg_LoadCount = ( udg_LoadCount + 1 )
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// --------------------
// Now load players copper
// --------------------
set udg_LoadCount = ( udg_LoadCount + 1 )
call SetPlayerStateBJ( GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD, udg_Load[udg_LoadCount] )
// --------------------
// Now load players silver
// --------------------
set udg_LoadCount = ( udg_LoadCount + 1 )
call SetPlayerStateBJ( GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER, udg_Load[udg_LoadCount] )
// --------------------
// Restore Dummy
// --------------------
set udg_LoadCount = ( udg_LoadCount + 1 )
set udg_Point_DummyCreation = GetRectCenter(gg_rct_InventoryDummy)
call RemoveUnit( udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
call CreateNUnitsAtLoc( 1, udg_InventoryDummyUnittype[GetConvertedPlayerId(GetTriggerPlayer())], GetTriggerPlayer(), udg_Point_DummyCreation, bj_UNIT_FACING )
set udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] = GetLastCreatedUnit()
call Hero_NullAllItems (GetConvertedPlayerId(GetTriggerPlayer()))
// Add abillities
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 11
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set udg_LoadCount = ( udg_LoadCount + 1 )
set udg_TempItemType = udg_ItemAllList[udg_Load[udg_LoadCount]]
call UnitAddItemByIdSwapped( udg_TempItemType, udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_SaveLoad_TempItem = GetLastCreatedItem()
if ( Trig_CodeGen_Load_Func071Func005C() ) then
call UnitUseItem( udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())], udg_SaveLoad_TempItem )
else
endif
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
// --------------------
// Now free skill points
// --------------------
set udg_LoadCount = ( udg_LoadCount + 1 )
call ModifyHeroSkillPoints(udg_Hero, bj_MODIFYMETHOD_SET, udg_Load[udg_LoadCount])
call RemoveLocation(udg_Point_DummyCreation)
call EnableTrigger( GetTriggeringTrigger() )
call EnableTrigger( gg_trg_CodeGen_Save )
endfunction
//===========================================================================
function InitTrig_CodeGen_Load takes nothing returns nothing
set gg_trg_CodeGen_Load = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Load, Player(0), "-load ", false )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Load, Player(1), "-load ", false )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Load, Player(2), "-load ", false )
call TriggerRegisterPlayerChatEvent( gg_trg_CodeGen_Load, Player(3), "-load ", false )
call TriggerAddCondition( gg_trg_CodeGen_Load, Condition( function Trig_CodeGen_Load_Conditions ) )
call TriggerAddAction( gg_trg_CodeGen_Load, function Trig_CodeGen_Load_Actions )
endfunction
//------------------------------------------------------------------------------------------------------//
// ZTS - ZWIEBELCHEN'S THREAT SYSTEM v. 2.4 //
//------------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------------//
// //
// Requires: vJass Pre-Processor //
// //
// Special thanks to TEC-Ghost, who inspired me on creating this system. //
//------------------------------------------------------------------------------------------------------//
// MANUAL //
//------------------------------------------------------------------------------------------------------//
// 1. How to Install:
//
// - Create a trigger called "ZTS"
// - Convert it to custom Text
// - Replace everything inside with this code
//
//
// 2. How to set it up:
//
// 2.1 Constants
//
// There are a bunch of global constants below this manual, you can edit to your liking.
// I commented everything you need to know about those constants right beside them. If you need additional information,
// please tell me, so I can improve this manual. However, I think most of it should be pretty clear.
//
// 2.2. Gameplay Constants
//
// It is recommended to edit certain Gameplay Constants entries, to use the full potential of
// the system.
// The most important entries are: (with selected "Show Raw-Data")
// CallForHelp --> Set this to 0, if possible; the system will manage this - it isn't a problem if you don't do this, though
// You don't have to do it if your threat-system controlled units are neutral hostile
// CreepCallForHelp --> Set this to 0, if possible; the system will manage this - it isn't a problem if you don't do this, though
// GuardDistance --> Set this to something higher than ReturnRange (see below)
// MaxGuardDistance --> Set this to something higher than ReturnRange (see below)
// GuardReturnTime --> Set this to something very high, so that the standard AI doesn't interfere (i.e. 60 seconds)
//
// 2.3. Damage Detection
//
// Of course, a threat system is pretty useless without a trigger, that adds threat depending on
// the damage dealt by a player unit.
// I recommend using a damage detection script like IDDS:
// (http://www.wc3c.net/showthread.php?t=100618)
// Check up the demo map for a very simple (but leaking) damage detection trigger
// The only function you actually need then is:
// call ModifyThreat(GetEventDamageSource(), GetTriggerUnit(), GetEventDamage(), true)
// The function does all required checks on its own. There is no need to run something else.
//
// 3. How to use it:
//
// 3.1. Core functions
//
// call ZTS_AddThreatUnit(unit npc, boolean includeCombatCamps) returns nothing:
//
// This function registers the unit as an AI-controlled unit.
// ThreatUnits will automaticly attack the highest-in-threat attacker.
// When adding a ThreatUnit, its current position gets saved and be considered camp-position.
// It will always return to this position if pulled to far or on victory.
// Nearby units will be considered in the same camp group. Camp members will always retreat and attack together.
// If includeCombatCamps is true, the unit will be added to already fighting camps. If it is false, the unit will
// create its own camp group, if it can't find any non-fighting units nearby.
// This should be false in most cases, but it can be useful when you have bosses that summon units infight, so that
// the summons will be added to the bossfight correctly instead of getting their own seperate group.
//
// call ZTS_AddPlayerUnit(unit pu) returns nothing:
//
// Units add by this way will generate threat on ThreatUnits.
// If the unit is not registered as a PlayerUnit, it will not be attacked by ThreatUnits.
//
// call ZTS_RemoveThreatUnit(unit npc) returns nothing:
//
// Removes a ThreatUnit from the system. The unit will no longer be controlled by the threat system.
// Also, the threat list for that unit will be cleared.
// Dead or removed units will automaticly be cleared. You need to add them again after revival/recreation.
//
// call ZTS_RemovePlayerUnit(unit pu) returns nothing:
//
// Removes a player unit from the system. The unit will no longer generate threat on ThreatUnits.
// The unit will also be instantly removed from all threat lists.
// If the unit was the last unit in combat with the same hostile camp, all units
// of that camp group will immediately return to their camp positions.
// You can use this, followed by AddPlayerUnit to that unit out of combat and reset all threat.
// Dead or removed units will automaticly be cleared. You need to add them again after revival/recreation.
//
// call ZTS_ModifyThreat(unit pu, unit npc, real amount, boolean add) returns nothing:
//
// Adds, sets or substracts threat from npc's threat list caused by pu.
// Set 'add' to true to add or substract amount from the current value.
// Set 'add' to false to set the new threat value to amount.
// To reduce threat, use negative amount values with add == true.
// Remember: If a unit has 0 threat, it is still considered in-combat -
// this also means, that adding "0" to the units threat causes them to attack!
//
// call ZTS_ApplyHealThreat(unit pu, unit ally, real amount, boolean add, boolean divide) returns nothing:
//
// Adds Healing Threat to all units, that have ally on threat-list
// This can be abused to apply global threat to a unit by passing the same unit to p and ally.
// Parameter divide = true means that the amount is split by the number of units attacking the target;
// for example if 3 units are currently attacking the targeted ally, it adds amount/3 threat from pu to all of them.
// Parameter divide = false means that every attacking unit gets 'amount' of threat applied.
// use add = false to set the amount of threat to 'amount', instead of increasing/decreasing it
// negative values are allowed in combination with 'add' to reduce threat.
// You can also use this with add = false and amount = 0 with pu = ally to set total threat generated back to zero for this unit.
//
//
// 3.2. Getter functions
//
// call ZTS_GetCombatState(unit PU) returns boolean:
//
// Returns the combat state of a player unit.
// Returns true, if the unit is registered and in combat.
// Returns false, if the unit is not registered or out of combat.
//
//
// call ZTS_GetThreatUnitPosition(unit NPC, unit PU) returns integer:
//
// Returns the position of unit PU in unit NPC's threat list
// Returns "0" if the unit was not found, NPC does not feature a threat list or in case of invalid input data
//
// call ZTS_GetThreatUnitAmount(unit NPC, unit PU) returns real:
//
// Returns the amount of threat unit PU has in unit NPC's threat list
// Returns "0" if the unit was not found, NPC does not feature a threat list or in case of invalid input data
//
// call ZTS_GetThreatSlotUnit(unit NPC, integer position) returns unit:
//
// Returns the unit in threat-slot position
// Returns null if the NPC does not feature a threat list, the number is too large
// or in case of invalid input data
//
// call ZTS_GetThreatSlotAmount(unit NPC, integer position) returns real:
//
// Returns the threat amount of the threat-slot position
// Returns "0" if the NPC does not feature a threat list, the number is too large
// or in case of invalid input data
//
// call ZTS_GetAttackers(unit U) returns group:
//
// If used on a ThreatUnit, this returns a group of all units in threat list;
// if used on a PlayerUnit, this returns a group of all units aggroed.
// Returns an empty group, in case of invalid input data or empty lists.
//
//
// 3.3. Advanced User features
//
// call ZTS_IsEvent() returns boolean
//
// When using "A unit is issued an order without target" or "A unit is issued a target order" events,
// this function returns true when the order was issued by the threat system.
// You can use this to setup your own spell-AI for units.
// Let's say you want the unit to cast Summon Water Elemental whenever the cooldown is ready:
// Just use the mentioned events and add:
// Custom script: if not ZTS_IsEvent() then
// Custom script: return
// Custom script: endif
// at the beginning of you trigger's actions and you're done.
// You can now issue the order to the triggering unit:
// Unit - Order (Triggering unit) to Human Archmage - Summon Water Elemental
// In combination with some of the Getter functions, you can trigger nice spell AI like this.
// NOTE: ZTS_IsEvent will only return true once(!) for every fired event, so if you need it again inside that trigger,
// make sure to save it to a variable.
//
//------------------------------------------------------------------------------------------------------//
library ZTS initializer InitThreatSystem
globals
private constant real UpdateIntervall = 0.5 //The intervall for issueing orders and performing AttackRange check. recommended value: 0.5
private constant real HelpRange = 200 //The range between units considered being in the same camp. If a unit of the same camp gets attacked, all others will help.
//Set CallForHelp to something lower in Gameplay Constants.
private constant real OrderReturnRange = 600 //The range the unit's target can be away from the original camping position, before being ordered to return.
private constant real ReturnRange = 600 //The range the unit can move away from the original camping position, before being ordered to return.
private constant real TimeToPort = 5 //This timer expires once a unit tries to return to its camping position.
//If it reaches 0 before reaching the camp position, the unit will be teleported immediately.
private constant boolean HealUnitsOnReturn = false //If this is true, returning units will be healed to 100% health.
// Do not edit below here!
//------------------------------------------------------------------------------------------------------//
private boolexpr BOOLEXPR = null
private constant timer Updater = CreateTimer()
private constant group NPCgroup = CreateGroup()
private constant hashtable NPClist = InitHashtable()
private constant hashtable PUlist = InitHashtable()
//temporary variables for enumerations and forgroups
private unit TSub = null
private unit TMod = null
private constant group TGroupSub = CreateGroup()
private unit THealer = null
private real THealthreat = 0
private boolean TBool = false
private integer TState = 0
private constant group TGroupUpd = CreateGroup()
private group TGroupGet = null
private boolean EventBool = false
endglobals
public function IsEvent takes nothing returns boolean
if EventBool then
set EventBool = false
return true
endif
return false
endfunction
private function Pos2Key takes integer position returns integer //converts threat list position into hashtable childkey
return 8+(position*2)
endfunction
private function Key2Pos takes integer key returns integer //converts hashtable childkey into threat list position
return (key-8)/2
endfunction
public function GetCombatState takes unit u returns boolean
if GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD) then //unit dead or null
return false
elseif HaveSavedInteger(NPClist, GetHandleId(u), 0) then //unit is npc
return LoadInteger(NPClist, GetHandleId(u), 0) > 0
elseif HaveSavedHandle(PUlist, GetHandleId(u), 0) then //unit is player unit
return LoadInteger(PUlist, GetHandleId(u), 1) > 0
endif
return false
endfunction
public function GetThreatUnitPosition takes unit npc, unit pu returns integer
if GetUnitTypeId(npc) == 0 or IsUnitType(npc, UNIT_TYPE_DEAD) or GetUnitTypeId(pu) == 0 or IsUnitType(pu, UNIT_TYPE_DEAD) then //units dead or null
return 0
elseif not (HaveSavedInteger(NPClist, GetHandleId(npc), 0) and HaveSavedHandle(PUlist, GetHandleId(pu), 0)) then //units not added
return 0
elseif HaveSavedInteger(PUlist, GetHandleId(pu), GetHandleId(npc)) then
return LoadInteger(PUlist, GetHandleId(pu), GetHandleId(npc))
endif
return 0
endfunction
public function GetThreatUnitAmount takes unit npc, unit pu returns real
if GetUnitTypeId(npc) == 0 or IsUnitType(npc, UNIT_TYPE_DEAD) or GetUnitTypeId(pu) == 0 or IsUnitType(pu, UNIT_TYPE_DEAD) then //units dead or null
return 0.
elseif not (HaveSavedInteger(NPClist, GetHandleId(npc), 0) and HaveSavedHandle(PUlist, GetHandleId(pu), 0)) then //units not added
return 0.
elseif HaveSavedInteger(PUlist, GetHandleId(pu), GetHandleId(npc)) then
return LoadReal(NPClist, GetHandleId(npc), Pos2Key(LoadInteger(PUlist, GetHandleId(pu), GetHandleId(npc)))+1)
endif
return 0.
endfunction
public function GetThreatSlotUnit takes unit npc, integer position returns unit
if GetUnitTypeId(npc) == 0 or IsUnitType(npc, UNIT_TYPE_DEAD) or position <= 0 then //unit dead or null or invalid slot
return null
elseif not HaveSavedInteger(NPClist, GetHandleId(npc), 0) then //unit not added
return null
elseif HaveSavedHandle(NPClist, GetHandleId(npc), Pos2Key(position)) then
return LoadUnitHandle(NPClist, GetHandleId(npc), Pos2Key(position))
endif
return null
endfunction
public function GetThreatSlotAmount takes unit npc, integer position returns real
if GetUnitTypeId(npc) == 0 or IsUnitType(npc, UNIT_TYPE_DEAD) or position <= 0 then //unit dead or null or invalid slot
return 0.
elseif not HaveSavedInteger(NPClist, GetHandleId(npc), 0) then //unit not added
return 0.
elseif HaveSavedReal(NPClist, GetHandleId(npc), Pos2Key(position)+1) then
return LoadReal(NPClist, GetHandleId(npc), Pos2Key(position)+1)
endif
return 0.
endfunction
private function GetAttackersSub takes nothing returns nothing
call GroupAddUnit(TGroupGet, GetEnumUnit())
endfunction
public function GetAttackers takes unit u returns group
local group g = CreateGroup()
local integer key = 10
local integer max
if GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD) then //unit dead or null
return g
endif
if HaveSavedInteger(NPClist, GetHandleId(u), 0) then //unit is npc
set max = Pos2Key(LoadInteger(NPClist, GetHandleId(u), 5))
loop
exitwhen key > max
call GroupAddUnit(g, LoadUnitHandle(NPClist, GetHandleId(u), key))
set key = key+2
endloop
elseif HaveSavedHandle(PUlist, GetHandleId(u), 0) then //unit is player unit
set TGroupGet = g
call ForGroup(LoadGroupHandle(PUlist, GetHandleId(u), 0), function GetAttackersSub)
set g = TGroupGet
set TGroupGet = null
endif
return g
endfunction
private function Swap takes integer npcID, integer key1, integer key2 returns nothing
local unit u = LoadUnitHandle(NPClist, npcID, key1)
local real r = LoadReal(NPClist, npcID, key1+1)
call SaveUnitHandle(NPClist, npcID, key1, LoadUnitHandle(NPClist, npcID, key2))
call SaveReal(NPClist, npcID, key1+1, LoadReal(NPClist, npcID, key2+1))
call SaveInteger(PUlist, GetHandleId(LoadUnitHandle(NPClist, npcID, key1)), npcID, Key2Pos(key1)) //update position list
call SaveUnitHandle(NPClist, npcID, key2, u)
call SaveReal(NPClist, npcID, key2+1, r)
call SaveInteger(PUlist, GetHandleId(u), npcID, Key2Pos(key2)) //update position list
set u = null
endfunction
private function CampThreat takes nothing returns nothing
local integer npcID = GetHandleId(GetEnumUnit())
local integer puID = GetHandleId(TMod)
local integer key
local integer listlength
if GetEnumUnit() == TSub then
return
elseif HaveSavedInteger(PUlist, puID, npcID) then //original pu unit already listed in EnumUnit's threat list
return
elseif LoadInteger(NPClist, npcID, 0) > 1 or IsUnitType(GetEnumUnit(), UNIT_TYPE_DEAD) then //do not add threat to dead or units that are status: returning
return
endif
set listlength = LoadInteger(NPClist, npcID, 5)+1
call SaveInteger(NPClist, npcID, 5, listlength) //add to list length of EnumUnit
set key = Pos2Key(listlength)
call SaveUnitHandle(NPClist, npcID, key, TMod) //add original pu unit to end of EnumUnit's threat list
call SaveReal(NPClist, npcID, key+1, 0)
call SaveInteger(PUlist, puID, npcID, listlength) //add EnumUnit to slot list
call GroupAddUnit(LoadGroupHandle(PUlist, puID, 0), GetEnumUnit()) //add EnumUnit to slot list group
call SaveInteger(PUlist, puID, 1, LoadInteger(PUlist, puID, 1)+1) //increase group size count
if LoadInteger(NPClist, npcID, 0) == 0 then
call SaveInteger(NPClist, npcID, 0, 1) //set unit status: combat
call GroupAddUnit(NPCgroup, GetEnumUnit()) //add the unit to incombat group
endif
endfunction
public function ModifyThreat takes unit pu, unit npc, real amount, boolean add returns nothing
local integer npcID = GetHandleId(npc)
local integer puID = GetHandleId(pu)
local integer key
local integer listlength
local integer i = 0
local real newamount
local real oldamount = 0
local boolean b = false
if not (HaveSavedInteger(NPClist, npcID, 0) and HaveSavedHandle(PUlist, puID, 0)) then //units not added
return
elseif IsUnitType(pu, UNIT_TYPE_DEAD) or IsUnitType(npc, UNIT_TYPE_DEAD) then //units dead
return
elseif GetUnitTypeId(pu) == 0 or GetUnitTypeId(npc) == 0 then //null units
return
elseif LoadInteger(NPClist, npcID, 0) > 1 then //do not add threat to units that are status: returning
return
endif
if not HaveSavedInteger(PUlist, puID, npcID) then //pu not listed in npc's threat list
set listlength = LoadInteger(NPClist, npcID, 5)+1
call SaveInteger(NPClist, npcID, 5, listlength) //add to list length of npc
set key = Pos2Key(listlength)
call SaveUnitHandle(NPClist, npcID, key, pu) //add pu to end of npc's threat list
call SaveInteger(PUlist, puID, npcID, listlength) //add npc to slot list
call GroupAddUnit(LoadGroupHandle(PUlist, puID, 0), npc) //add npc to slot list group
call SaveInteger(PUlist, puID, 1, LoadInteger(PUlist, puID, 1)+1) //increase group size count
if LoadInteger(NPClist, npcID, 0) == 0 then
call SaveInteger(NPClist, npcID, 0, 1) //set unit status: combat
call GroupAddUnit(NPCgroup, npc) //add the unit to incombat group
endif
set b = true
else
set key = Pos2Key(LoadInteger(PUlist, puID, npcID))
set oldamount = LoadReal(NPClist, npcID, key+1)
endif
if add then
set newamount = oldamount+amount
else
set newamount = amount
endif
if newamount < 0 then
set newamount = 0
endif
call SaveReal(NPClist, npcID, key+1, newamount)
if newamount > oldamount then //check lower keys
loop
if HaveSavedReal(NPClist, npcID, key-1-i) then
if LoadReal(NPClist, npcID, key-1-i) < newamount then //lower key amount is smaller
call Swap(npcID, key-2-i, key-i)
else
exitwhen true
endif
set i = i + 2
else
exitwhen true
endif
endloop
elseif newamount < oldamount then //check higher keys
loop
if HaveSavedReal(NPClist, npcID, key+3+i) then
if LoadReal(NPClist, npcID, key+3+i) > newamount then //upper key amount is larger
call Swap(npcID, key+2+i, key+i)
else
exitwhen true
endif
set i = i + 2
else
exitwhen true
endif
endloop
endif
if b then //set all units of the same camp to status: combat and apply 0 threat from pu to them
set TSub = npc
set TMod = pu
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampThreat)
endif
endfunction
public function AddPlayerUnit takes unit u returns nothing
local integer ID = GetHandleId(u)
if HaveSavedInteger(NPClist, ID, 0) or HaveSavedHandle(PUlist, ID, 0) then //unit already added
return
elseif GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD) then //unit dead or null
return
endif
call SaveGroupHandle(PUlist, ID, 0, CreateGroup()) //slot list group
call SaveInteger(PUlist, ID, 1, 0) //list group count
endfunction
private function AcquireTarget takes nothing returns boolean
local unit npc = GetTriggerUnit()
local unit pu
if GetEventTargetUnit() != null then
set pu = GetEventTargetUnit()
else
set pu = GetOrderTargetUnit()
endif
if IsUnitEnemy(pu, GetOwningPlayer(npc)) then
if LoadInteger(NPClist, GetHandleId(npc), 0) == 0 then //pull out of combat units only
call ModifyThreat(pu, npc, 0, true)
endif
endif
set pu = null
set npc = null
return false
endfunction
private function FilterUnitsWithCampGroup takes nothing returns boolean
return HaveSavedHandle(NPClist, GetHandleId(GetFilterUnit()), 4) and IsUnitType(GetFilterUnit(), UNIT_TYPE_DEAD) == false and LoadInteger(NPClist, GetHandleId(GetFilterUnit()), 0) <= TState
endfunction
public function AddThreatUnit takes unit u, boolean includeCombatCamps returns nothing
local integer ID = GetHandleId(u)
local group g = null
local trigger t = null
local unit other = null
local integer otherID = 0
local unit temp = null
local integer i = 0
local integer listlength = 0
if HaveSavedInteger(NPClist, ID, 0) or HaveSavedHandle(PUlist, ID, 0) then //unit already added
call BJDebugMsg("already added!")
return
elseif GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD) then //unit dead or null
return
endif
call SaveInteger(NPClist, ID, 0, 0) //status
call SaveReal(NPClist, ID, 1, GetUnitX(u)) //return X
call SaveReal(NPClist, ID, 2, GetUnitY(u)) //return Y
call SaveReal(NPClist, ID, 3, TimeToPort) //return countdown
call SaveInteger(NPClist, ID, 5, 0) //list length
set t = CreateTrigger()
call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterUnitEvent(t, u, EVENT_UNIT_ACQUIRED_TARGET)
call TriggerAddCondition(t, Condition(function AcquireTarget))
call SaveTriggerHandle(NPClist, ID, 6, t) //acquire target event trigger
if includeCombatCamps then
set TState = 1
else
set TState = 0
endif
call GroupEnumUnitsInRange(TGroupSub, GetUnitX(u), GetUnitY(u), HelpRange, Condition(function FilterUnitsWithCampGroup))
set other = FirstOfGroup(TGroupSub)
if other != null then
set otherID = GetHandleId(other)
set g = LoadGroupHandle(NPClist, otherID, 4)
if includeCombatCamps then
//don't forget to inherit the camp unit's threat list...
if LoadInteger(NPClist, otherID, 0) == 1 then //...but only if filtered unit is actually infight
set listlength = LoadInteger(NPClist, otherID, 5)
call SaveInteger(NPClist, ID, 5, listlength) //copy list length
loop //copy all list entries as the newly added unit has an empty list and will cause the camp to reset almost instantly
set i = i + 1
exitwhen i > listlength
set temp = LoadUnitHandle(NPClist, otherID, Pos2Key(i))
call SaveUnitHandle(NPClist, ID, Pos2Key(i), temp)
call SaveReal(NPClist, ID, Pos2Key(i)+1, 0)
call SaveInteger(PUlist, GetHandleId(temp), ID, i) //assign the threat position to the player unit's reference list
call GroupAddUnit(LoadGroupHandle(PUlist, GetHandleId(temp), 0), u) //add the unit to the player unit's threat group
call SaveInteger(PUlist, GetHandleId(temp), 1, LoadInteger(PUlist, GetHandleId(temp), 1)+1) //increase group size count
endloop
call SaveInteger(NPClist, ID, 0, 1) //set unit status: combat
call GroupAddUnit(NPCgroup, u) //add the unit to incombat group
set temp = null
endif
endif
else //no unit in range has a camp group assigned, so create a new one
set g = CreateGroup()
endif
call GroupAddUnit(g, u)
call SaveGroupHandle(NPClist, ID, 4, g) //camp group
set t = null
set g = null
set other = null
endfunction
public function RemoveThreatUnit takes unit u returns nothing
local integer ID = GetHandleId(u)
local integer OtherID
local group g = null
local integer key = 10
if not HaveSavedInteger(NPClist, ID, 0) then //unit not added
return
elseif GetUnitTypeId(u) == 0 then
return
endif
if LoadInteger(NPClist, ID, 0) > 1 then //unit status is: returning
call IssueImmediateOrder(u, "stop")
call SetUnitInvulnerable(u, false)
if IsUnitPaused(u) then
call PauseUnit(u, false)
endif
endif
loop //remove the entry in the player unit's position list and list group and decrease list group count
if HaveSavedHandle(NPClist, ID, key) then
set OtherID = GetHandleId(LoadUnitHandle(NPClist, ID, key))
call RemoveSavedInteger(PUlist, OtherID, ID)
call GroupRemoveUnit(LoadGroupHandle(PUlist, OtherID, 0), u)
call SaveInteger(PUlist, OtherID, 1, LoadInteger(PUlist, OtherID, 1)-1)
set key = key+2
else //last entry reached
exitwhen true
endif
endloop
set g = LoadGroupHandle(NPClist, ID, 4)
call GroupRemoveUnit(g, u)
if FirstOfGroup(g) == null then //camp group is empty
call DestroyGroup(g)
endif
call DestroyTrigger(LoadTriggerHandle(NPClist, ID, 6))
call FlushChildHashtable(NPClist, ID)
if IsUnitInGroup(u, NPCgroup) then
call GroupRemoveUnit(NPCgroup, u) //remove unit from incombat group
endif
set g = null
endfunction
private function RemovePlayerUnitEntries takes nothing returns nothing
local integer ID = GetHandleId(TSub)
local integer OtherID = GetHandleId(GetEnumUnit())
local integer key = Pos2Key(LoadInteger(PUlist, ID, OtherID))
loop //remove the entry in u's threat list and fill the gap
if HaveSavedHandle(NPClist, OtherID, key+2) then //move up next entry
call SaveUnitHandle(NPClist, OtherID, key, LoadUnitHandle(NPClist, OtherID, key+2))
call SaveReal(NPClist, OtherID, key+1, LoadReal(NPClist, OtherID, key+3))
call SaveInteger(PUlist, GetHandleId(LoadUnitHandle(NPClist, OtherID, key)), OtherID, Key2Pos(key)) //update position in player unit list
set key = key+2
else //last entry reached
call RemoveSavedHandle(NPClist, OtherID, key)
call RemoveSavedReal(NPClist, OtherID, key+1)
call SaveInteger(NPClist, OtherID, 5, Key2Pos(key-2)) //decrease list length
exitwhen true
endif
endloop
endfunction
public function RemovePlayerUnit takes unit u returns nothing
local integer ID = GetHandleId(u)
if not HaveSavedHandle(PUlist, ID, 0) then //unit not added
return
elseif GetUnitTypeId(u) == 0 then
return
endif
set TSub = u
call ForGroup(LoadGroupHandle(PUlist, ID, 0), function RemovePlayerUnitEntries)
call DestroyGroup(LoadGroupHandle(PUlist, ID, 0))
call FlushChildHashtable(PUlist, ID)
endfunction
private function HealThreatSub takes nothing returns nothing
call ModifyThreat(THealer, GetEnumUnit(), THealthreat, TBool)
endfunction
public function ApplyHealThreat takes unit pu, unit ally, real amount, boolean add, boolean divide returns nothing
local integer puID = GetHandleId(pu)
local integer allyID = GetHandleId(ally)
if not (HaveSavedHandle(PUlist, puID, 0) and HaveSavedHandle(PUlist, allyID, 0)) then //units not added
return
elseif IsUnitType(pu, UNIT_TYPE_DEAD) or IsUnitType(ally, UNIT_TYPE_DEAD) then //units dead
return
elseif GetUnitTypeId(pu) == 0 or GetUnitTypeId(ally) == 0 then //null units
return
endif
if divide and LoadInteger(PUlist, allyID, 1) > 1 then
set THealthreat = amount/LoadInteger(PUlist, allyID, 1)
else
set THealthreat = amount
endif
set TBool = add
set THealer = pu
call ForGroup(LoadGroupHandle(PUlist, allyID, 0), function HealThreatSub)
endfunction
private function CampCommand takes nothing returns nothing
local unit u = GetEnumUnit()
local integer ID = GetHandleId(u)
local integer OtherID
local integer status = LoadInteger(NPClist, ID, 0)
local integer key = 10
if status == 1 then
call SaveInteger(NPClist, GetHandleId(u), 0, 2) //set status: returning
loop //remove the entry in the player unit's position list and list group and decrease list group count
if HaveSavedHandle(NPClist, ID, key) then
set OtherID = GetHandleId(LoadUnitHandle(NPClist, ID, key))
call RemoveSavedInteger(PUlist, OtherID, ID)
call GroupRemoveUnit(LoadGroupHandle(PUlist, OtherID, 0), u)
call SaveInteger(PUlist, OtherID, 1, LoadInteger(PUlist, OtherID, 1)-1)
call RemoveSavedHandle(NPClist, ID, key)
call RemoveSavedReal(NPClist, ID, key+1)
set key = key+2
else //last entry reached
exitwhen true
endif
endloop
call SaveInteger(NPClist, ID, 5, 0) //also set list length to zero
call IssueImmediateOrder(u, "stop") //cancels even spellcast with casting time
call IssuePointOrder(u, "move", LoadReal(NPClist, ID, 1), LoadReal(NPClist, ID, 2))
call SaveReal(NPClist, ID, 3, TimeToPort)
call SetUnitInvulnerable(u, true)
if HealUnitsOnReturn then
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_MAX_LIFE))
call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u, UNIT_STATE_MAX_MANA))
endif
elseif status == 3 then
call SaveInteger(NPClist, GetHandleId(u), 0, 0) //set status: out of combat
call SetUnitInvulnerable(u, false)
call PauseUnit(u, false)
if HealUnitsOnReturn then
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_MAX_LIFE))
call SetUnitState(u, UNIT_STATE_MANA, GetUnitState(u, UNIT_STATE_MAX_MANA))
endif
call GroupRemoveUnit(NPCgroup, u) //remove from combat group
endif
set u = null
endfunction
private function CampStatus takes nothing returns nothing
if LoadInteger(NPClist, GetHandleId(GetEnumUnit()), 0) != 3 then
set TBool = false
endif
endfunction
private function IssueOrder takes nothing returns nothing
local unit npc = GetEnumUnit()
local integer npcID = GetHandleId(npc)
local integer status = LoadInteger(NPClist, npcID, 0)
local integer i = 0
local boolean b = true
local unit target = null
if status == 1 then //unit in combat
if IsUnitInRangeXY(npc, LoadReal(NPClist, npcID, 1), LoadReal(NPClist, npcID, 2), ReturnRange) and HaveSavedHandle(NPClist, npcID, 10) then
set target = LoadUnitHandle(NPClist, npcID, 10)
if IsUnitInRangeXY(target, LoadReal(NPClist, npcID, 1), LoadReal(NPClist, npcID, 2), OrderReturnRange) then
if GetUnitCurrentOrder(npc) == 851983 or GetUnitCurrentOrder(npc) == 0 or GetUnitCurrentOrder(npc) == 851971 then //attack order or no order or smart order
set EventBool = true
call IssueTargetOrder(npc, "smart", target)
set EventBool = false
endif
else //target of unit to far away from camp position
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampCommand) //set camp returning
endif
else //unit left return range or killed all player units
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampCommand) //set camp returning
endif
elseif status == 2 then //unit is returning
if LoadReal(NPClist, npcID, 3) > 0 then
if not IsUnitInRangeXY(npc, LoadReal(NPClist, npcID, 1), LoadReal(NPClist, npcID, 2), 35) then
call IssuePointOrder(npc, "move", LoadReal(NPClist, npcID, 1), LoadReal(NPClist, npcID, 2))
call SaveReal(NPClist, npcID, 3, LoadReal(NPClist, npcID, 3) - UpdateIntervall)
call SetUnitInvulnerable(npc, true)
else //unit within close range to camp position
if GetUnitCurrentOrder(npc) == 851986 then //move order
call SaveReal(NPClist, npcID, 3, LoadReal(NPClist, npcID, 3) - UpdateIntervall)
call SetUnitInvulnerable(npc, true)
else //Something blocks the exact spot or the unit has arrived
call SaveInteger(NPClist, npcID, 0, 3) //set status: returned
set TBool = true
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampStatus)
if TBool then //all units in camp have status: returned to camp position
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampCommand) //set camp ooc
else
call PauseUnit(npc, true) //make sure it doesn't move or attack when invulnerable
endif
endif
endif
else //counter expired - perform instant teleport
call SetUnitPosition(npc, LoadReal(NPClist, npcID, 1), LoadReal(NPClist, npcID, 2))
call SaveInteger(NPClist, npcID, 0, 3) //set status: returned
set TBool = true
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampStatus)
if TBool then //all units in camp have status: returned to camp position
call ForGroup(LoadGroupHandle(NPClist, npcID, 4), function CampCommand) //set camp ooc
else
call PauseUnit(npc, true) //make sure it doesn't move or attack when invulnerable
endif
endif
endif
set npc = null
set target = null
endfunction
private function Update takes nothing returns nothing
call ForGroup(NPCgroup, function IssueOrder) //issues orders to all units in combat
endfunction
private function rettrue takes nothing returns boolean
return true
endfunction
private function RemovedUnitFound takes unit u returns nothing
if HaveSavedInteger(NPClist, GetHandleId(u), 0) then
call RemoveThreatUnit(u)
endif
if HaveSavedHandle(PUlist, GetHandleId(u), 0) then
call RemovePlayerUnit(u)
endif
endfunction
hook RemoveUnit RemovedUnitFound
private function OnDeath takes nothing returns nothing
if HaveSavedInteger(NPClist, GetHandleId(GetTriggerUnit()), 0) then
call RemoveThreatUnit(GetTriggerUnit())
endif
if HaveSavedHandle(PUlist, GetHandleId(GetTriggerUnit()), 0) then
call RemovePlayerUnit(GetTriggerUnit())
endif
endfunction
private function InitThreatSystem takes nothing returns nothing
local trigger t = CreateTrigger()
local integer index = 0
set BOOLEXPR=Condition(function rettrue) //prevent booleanexpressions from leaking
call TimerStart(Updater, UpdateIntervall, true, function Update)
loop
call TriggerRegisterPlayerUnitEvent(t, Player(index), EVENT_PLAYER_UNIT_DEATH, BOOLEXPR)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddAction(t, function OnDeath)
set t = null
endfunction
endlibrary
globals
leaderboard udg_HandleBoard
group DebugGroup = CreateGroup()
endglobals
function HandleCounter_L2I takes location P returns integer
return GetHandleId(P)
endfunction
function HandleCounter_Update takes nothing returns nothing
local unit U
local integer i = 0
local integer j = 1
local integer id
local location array P
local real result=0
loop
exitwhen i >= 50
set i = i + 1
set P[i] = Location(0,0)
set id = HandleCounter_L2I(P[i])
set result = result + (id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i - 1
endloop
call GroupEnumUnitsSelected(DebugGroup, Player(0), null)
set U = FirstOfGroup(DebugGroup)
call LeaderboardSetItemValue(udg_HandleBoard, 0, R2I(result))
call LeaderboardSetItemLabel(udg_HandleBoard, 1, "Combat State")
if ZTS_GetCombatState(U) then
call LeaderboardSetItemValue(udg_HandleBoard, 1, 1)
else
call LeaderboardSetItemValue(udg_HandleBoard, 1, 0)
endif
if GetOwningPlayer(U) == Player(PLAYER_NEUTRAL_AGGRESSIVE) then
loop
exitwhen j > 7
if ZTS_GetThreatSlotUnit(U, j) != null then
call LeaderboardSetItemLabel(udg_HandleBoard, 1+j, "Slot "+I2S(j)+" - "+I2S(GetHandleId(ZTS_GetThreatSlotUnit(U, j)))+":")
call LeaderboardSetItemValue(udg_HandleBoard, 1+j, R2I(ZTS_GetThreatSlotAmount(U, j)))
else
call LeaderboardSetItemLabel(udg_HandleBoard, 1+j, "Slot "+I2S(j)+" - "+"<empty>"+":")
call LeaderboardSetItemValue(udg_HandleBoard, 1+j, 0)
endif
set j = j + 1
endloop
endif
set U = null
endfunction
function HandleCounter_Actions takes nothing returns nothing
set udg_HandleBoard = CreateLeaderboard()
call LeaderboardSetLabel(udg_HandleBoard, "threat-table for selected:")
call PlayerSetLeaderboard(GetLocalPlayer(),udg_HandleBoard)
call LeaderboardDisplay(udg_HandleBoard,true)
call LeaderboardAddItem(udg_HandleBoard,"(Debug) Handles",0,Player(0))
call LeaderboardAddItem(udg_HandleBoard, "Combat Status", 0, Player(1))
call LeaderboardAddItem(udg_HandleBoard, "Slot 1", 0, Player(2))
call LeaderboardAddItem(udg_HandleBoard, "Slot 2", 0, Player(3))
call LeaderboardAddItem(udg_HandleBoard, "Slot 3", 0, Player(4))
call LeaderboardAddItem(udg_HandleBoard, "Slot 4", 0, Player(5))
call LeaderboardAddItem(udg_HandleBoard, "Slot 5", 0, Player(6))
call LeaderboardAddItem(udg_HandleBoard, "Slot 6", 0, Player(7))
call LeaderboardAddItem(udg_HandleBoard, "Slot 7", 0, Player(8))
call LeaderboardSetSizeByItemCount(udg_HandleBoard,8)
call HandleCounter_Update()
call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update)
endfunction
//===========================================================================
function InitTrig_Debug_Board takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
endfunction
//TESH.scrollpos=51
//TESH.alwaysfold=1
JeffQ's Basic Chain System v2.00f
Created Date: 22 January 2010
Author: JeffQ a.k.a JeffreyQ, SmileyJeff
**Official version will only be destributed by ME (JeffQ, JeffreyQ. SmileyJeff). Anyone else who upload this is edited.
I have been working on my AoS map and decided to create a chain system that can do pretty much anything.
Because my AoS have alot of chain spells that are in GUI.
So here it is. After 3 days of hardworking and understanding indexing. I present you JeffQ's Basic Chain System (MUI/GUI using Indexing).
======================
Change Log
======================
v2.00f, 24 Feb 2010
- Chain should no longer jump to buildings/structures.
- Some demo ability can still target buildings, this is because i didn't limit the target allowed at the ability editor. (Nothing to do with the system)
v2.00e, 31 Jan 2010
- Fix lightning height to match cliff or raised terrain.
- Added a raised terrain and cliff to test out.
v2.00d, 25 Jan 2010
- Rearrange Folder for easier implementing in other maps.
- Updated "How To Use" in the README to give a step by step tutorial on how to implement. Please do give it a read.
v2.00c, 24 Jan 2010
- Chain now gets unit height +25. Meaning that if you target a flying unit, the chain height will change accordingly.
- Added a few flying units to let you try out the dynamic chain height.
- Added Chain Globals Trigger to store Locust.
- Chain should now only jump to units that doesn't have locust (This should remove the limitation of where you need to only base all other ability dummies on my dummy as long as your custom dummies have locust).
v2.00b, 23 Jan 2010
- Lightning effect now won't stick to ground.
v2.00a, 23 Jan 2010
- Fix 2 major bugs that make the chain not MUI for chain effect and Stun effect.
- Due to setting the wrong index. Now it has been fixed and should no longer containt any more bugs! Thanks to my sis for testing out this with me [:
v2.00, 22 Jan 2010
- Revamp the chain effect system.
- Remove dummy type. You still have to copy the dummy to your map though.
- Remove finger of death limitations. Now you can choose your chain effect freely.
- Added a new Chain Effect Trigger.
- This allows the chain to follow the unit if it is moving.
- Polish code.
- Fixed a few bugs in code.
- Added Implementation Details Trigger and tidy up the Example 1-8 Implementations.
- Removed all (SFX) ability as now you can use the QJC_ChainSFX to set your lightning effect.
v1.14, 22 Jan 2010
- Added 2 new abilities chain sheep and chain invisible to show the flexibility of this system and how to play around with stun/slow effect to your advantages.
v1.13a, 22 Jan 2010
- Added a sleep ability in the implementation after Kingz asked me what if he wanted to create a chain sleep. (No additional system code added).
- Fix several bugs.
v1.12, 21 Jan 2010
- Periodic Time change to 0.03seconds. And System Time update + 0.03 from 0.01.
v1.11a, 21 Jan 2010
- Fixed Implementation Example Comment for Chain Effect.
v1.11, 21 Jan 2010
- Initial Release.
======================
Customizable Features
======================
- Damage (Boolean: Only damage enemies nomatter what. If you want to damage ally use health and set ally = true)
- Heal (Boolean: Only heal Allies nomatter what)
- Health (Boolean: Make enemy lose health depending on Amount of Damage Type)
- Mana (Boolean: Make enemy lose mana depending on Amount of Damage Type)
- Gold (Boolean: Make enemy lose gold depending on Amount of Damage Type)
- Leech (Boolean: Only affects Health, Mana, Gold. If true, it will transfer Health/Mana/Gold over to the caster)
- Slow (Boolean: If true, it will slow units depending on slow effect)
- Slow Effect (Ability: The ability of slow effect, BASE ALL SLOW ON HUMAN SORCERESS SLOW!!)
- Stun (Boolean: If true, it will stun units depending on stun effect)
- Stun Effect (Ability: The ability of stun effect, BASE ALL STUN ON STORM BOLT!!)
- AoE (Boolean: If true, it will do AoE damage.)
- AoE Radius (Real: Set the radius of AoE Effect)
- Target Effect (String: Lets you insert your effect path)
- Chain Effect (LightningType: Feel free to choose your lightning effect for the chain)
- Amount of Damage Type (Real: Damage, Heal, Health, Mana, Gold)
- Amount Reduction (Real: Each jump reduce a percentage of amount of damage type)
- Jump Count (Integer: How many units it will jump)
- Jump Radius (Real: The range of how far the chain can jump between units)
- Jump Delay (Real: Supports the chain jump delay seconds. 0.10 is the effect of chain lightning, 0.00 is "ALMOST" instant)
- One Per Unit (Boolean: Chain will only hit the unit once if set to true)
- Priority (Boolean: Hit lowest health 1st)
- Ally (Boolean: Hit Ally if set to true, if enemy is also true, it will hit both)
- Enemy (Boolean: Hit Enemy if set to true, if elly is also true, it will hit both)
- Target Unit (Unit: Target Unit, set to No unit if no target or have a target point)
- Point (Point: Target Point, if has a target unit or no target disable this)
- No Target (Boolean: If true, disable point and set unit to no unit)
- Attack (Attack Type: Customize your own attack type)
- Damage Type (Damage Type: Customize your own damage type)
======================
Rules
======================
They are some rules applied to use this system. Is more of a technical limitation.
I will talk more about this after letting you know how to use.
1. Do not touch anything in Chain Create, Chain Jump and Chain Effect Trigger. Those are the system.
2. For implementation examples. Please look at the 8 examples of how flexible you can change the chain to what you want.
3. This system needs you to know the usage of Unit Editor and Ability/Buff Editor.
4. QJC_VarName, This is the only variables you can set.
5. QJCS_VarName are for system variables. So don't even touch it unless you know what you are doing.
======================
How to Use?
======================
If your map is a New Map without any triggers:
1. Open JeffQ's Basic Chain System map.
2. Open Trigger Editor.
3. File > Export Triggers.
4. Open your map.
5. Open Trigger Editor.
6. File > Import Triggers.
7. Remember to copy the Dummy over too.
If your map has existing triggers:
1. Open JeffQ's Basic Chain System map.
2. Copy JeffQ's Chain System folder by right-clicking it and select Copy.
3. Open your map.
4. File > Preference > Check "Automatically create unknown variables while pasting trigger data".
5. Open Object Editor. Create a Dummy base on anything, name it Dummy and give it locust and remove its model. Or just copy the dummy from my map.
6. Open Trigger Editor.
7. Right click on the Map Name, or any other trigger/category/comments, and select Paste.
8. Create a variable by pressing CTRL+B and name it QJCS_ChainZ of type Real, array size of 1.
9. Go to "Chain Create" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
10.Go to "Chain Jump" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
11.Go to "Chain effect" Trigger, find any Disabled Actions, enable it by right clicking and check Enable.
======================
Vars you need to set
======================
QJC_Caster : Triggering Unit
- Your caster.
QJC_TargetUnit : Target unit of ability being cast
- Set this to No unit if your spell is target point or instant cast.
QJC_TargetPoint : Target point of ability being cast
- Disable this if you have a target unit or instant cast.
QJC_NoTarget : True/False
- Set this to true if your spell is instant cast.
- Remember to disable QJC_TargetPoint and set QJC_TargetUnit to No Unit.
QJC_Priority : True/False
- If true, it will find the lowest health unit in range first.
QJC_OnePerUnit : True/False
- If true, it will only hit the target once.
QJC_Damage : True/False
- If true, this chain will do damage to enemy depending on QJC_Amount.
QJC_Heal : True/False
- If true, this chain will heal ally depending on QJC_Amount.
QJC_Health : True/False
- If true, it will make enemy lose health.
- If leech is on, it will transfer health over to the caster.
QJC_Mana : True/False
- If true, it will make enemy lose mana.
- If leech is on, it will transfer mana over to the caster.
QJC_Gold : True/False
- If true, it will make enemy lose gold.
- If leech is on, it will transfer gold over to the caster.
QJC_Leech : True/False
- If true, it will apply leeching effect to Health/Mana/Gold type.
QJC_Ally : True/False
- If true, it will hit ally.
- If enemy is also true, it will hit both.
QJC_Enemy : True/False
- If true, it will hit enemy.
- If ally is also true, it will hit both.
QJC_Amount : Real
- The amount of damage type you want this chain to do.
- Eg: QJCGold = true, QJC_Amount = 100, it will make enemy lose 100gold.
QJC_ChainSFX : Lightning Type
- Feel free to choose the lightning type for your chain.
QJC_TargetSFX : String
- Lets you set the special effect for unit when hit by chain.
QJC_AttackType : Attack Type
- Nothing much to say about this.
QJC_DamageType : Damage Type
- Nothing much to say about this.
QJC_AmountReduce: Real
- This is base on percentage.
- If it is 0.00, each chain jump won't reduce QJC_Amount
- If it is 0.10, each chain jump will decreament QJC_Amount by 10%.
- Least is 0.00, Max is 1.00.
QJC_JumpCount : Integer
- Set the amount of jumps for the chain.
QJC_JumpDelayTime: Real
- This is base on seconds.
- Least is 0.00, Max is 1.00
- Set to 0.10 to get the effect of Blizzard Chain Lightning
QJC_JumpRadius : Real
- How far can the chain jump between points.
QJC_Slow : Boolean
- Set to true to slow enemies.
- You have to set QJC_SlowEffect if you want this to work.
QJC_SlowEffect : Ability
- Disable this if Slow Effect is False.
- Slow effect must base on HUMAN SLOW. NO BUTS!
- For example, go to "Ability Editor > Custom Abilities > Neutral Hostile > Units".
- Slow effect will have a (Slow) behind the name.
QJC_Stun : Boolean
- Set to true to stun enemies.
- You have to set QJC_StunEffect if you want this to work.
QJC_StunEffect : Ability
- Disable this if stun effect is false.
- Stun effect must base on STORM BOLT. NO BUTS!
- For example, go to "Ability Editor > Custom Abilities > Neutral Hostile > Units".
- Stun effect will have a (Stun) behind the name)
QJC_AoE : Boolean
- Set to true to do AoE.
- You have to set QJC_AoERadius to make this work. If not the radius will be 0.00.
QJC_AoERadius : Real
- The AoE range you want.
Trigger - Run Chain Create <gen> (checking conditions)
- This must always be included in the trigger of your spell. If not the system won't run.
- Must check conditions.
======================
Limitations
======================
Q: Why i need to base Chain Effect on Finger of Death?
A: I order the dummy unit to cast fingerofdeath order command. And also finger of death let's you do chain effects while channel can't for some reason.
Q: Why i need to base Slow on Human Sorceress Slow?
A: I order the dummy unit to cast Human Sorceress - Slow when i do this. If you base it on other spells, it just won't work.
Q: Why i need to base Stun on Storm Bolt?
A: I order the dummy unit to cast Human Mountain King - Storm Bolt.
Q: Why must dummy be invulnerable and not Locust? And why must it have no model?
A: Because i order the dummy to finger of death the next dummy. If it is locust, it can't be finger of death for the chain effect. No model makes it unselectable on map and won't display health if you hold down ALT key.
Q: Why not ask the dummy to chain the target? Is so much simpler.
A: No. After 3 days of testing. If the target dies the dummy won't be fast enough to cast the chain, and thus, no chain effect.
Q: So where did you hide that dummy? Where can i find it to copy it to my map?
A: It's at the Object Editor > Unit > Custom Units > Night Elf > Melee > Units. There you can find Dummy. Say hi.
======================
Flexibility
======================
1. If you fully know how to use this system. It is quite flexible as you can set the Slow and Stun effect by changing the buffs of the Abilities.
2. Alot of things stack except for a few limitations. You can set all to true and see what happens [:
3. You can target point, target unit or No Target!
======================
Bug Reports & Feedback
======================
Please send an email to [email protected] if you find a bug. Or post it on the comment at Hive Work Shop.
======================
Credits
======================
Thanks to the below who shed some light on me about indexing and leaks.
- Kingz
- YourNameHere
- baassee
- Adiktuz
- Maker
- TitanHex
- D4RK_G4ND4LF
- And other people if i miss out.
Special Thanks to Kingz who show me his simple lightning system. I learned alot from it and after understanding i made 1 my own to fit my system.
***Enjoy this system [:
function Trig_Chain_Jump_Func003Func001Func002Func006C takes nothing returns boolean
if ( not ( udg_QJCS_OnePerUnit[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func010C takes nothing returns boolean
if ( not ( udg_QJCS_index[1] == 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func007C takes nothing returns boolean
if ( not ( udg_QJCS_SystemCount[udg_QJCS_index[3]] == 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func009C takes nothing returns boolean
if ( not ( udg_QJCS_LightningIndex[1] == 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func019C takes nothing returns boolean
if ( not ( udg_QJCS_SystemCount[udg_QJCS_index[3]] == 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003001 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003002 takes nothing returns boolean
return ( GetFilterUnit() == udg_QJCS_TargetUnit[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003001(), Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001001 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002001 takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002002 takes nothing returns boolean
return ( GetUnitAbilityLevelSwapped(udg_QJCS_Locust, GetFilterUnit()) == 0 )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001001(), Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002001 takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Enemy[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002002 takes nothing returns boolean
return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Ally[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002 takes nothing returns boolean
return GetBooleanOr( Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003001(), Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func040C takes nothing returns boolean
if ( not ( udg_QJCS_AoE[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001Func001Func001C takes nothing returns boolean
if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == true ) ) then
return false
endif
if ( not ( udg_QJCS_Enemy[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001Func001C takes nothing returns boolean
if ( not Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001Func001Func001C() ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001A takes nothing returns nothing
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001Func001C() ) then
call UnitDamageTargetBJ( udg_QJCS_Caster[udg_QJCS_index[3]], GetEnumUnit(), udg_QJCS_Amount[udg_QJCS_index[3]], udg_QJCS_AttackType[udg_QJCS_index[3]], udg_QJCS_DamageType[udg_QJCS_index[3]] )
else
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func042C takes nothing returns boolean
if ( not ( udg_QJCS_Damage[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func044Func001Func001C takes nothing returns boolean
if ( not ( IsUnitAlly(GetEnumUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func044Func001A takes nothing returns nothing
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func044Func001Func001C() ) then
call SetUnitLifeBJ( GetEnumUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) + udg_QJCS_Amount[udg_QJCS_index[3]] ) )
else
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func044C takes nothing returns boolean
if ( not ( udg_QJCS_Heal[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) > udg_QJCS_Amount[udg_QJCS_index[3]] ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001Func001C takes nothing returns boolean
if ( not Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001Func001Func001C() ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001A takes nothing returns nothing
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001Func001C() ) then
// Increase Caster's Health
call SetUnitLifeBJ( udg_QJCS_Caster[udg_QJCS_index[3]], ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_QJCS_Caster[udg_QJCS_index[3]]) + udg_QJCS_Amount[udg_QJCS_index[3]] ) )
else
// Increase Caster's Health
call SetUnitLifeBJ( udg_QJCS_Caster[udg_QJCS_index[3]], ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_QJCS_Caster[udg_QJCS_index[3]]) + GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) ) )
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001C takes nothing returns boolean
if ( not ( udg_QJCS_Leech[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func003A takes nothing returns nothing
call UnitDamageTargetBJ( udg_QJCS_Caster[udg_QJCS_index[3]], GetEnumUnit(), udg_QJCS_Amount[udg_QJCS_index[3]], udg_QJCS_AttackType[udg_QJCS_index[3]], udg_QJCS_DamageType[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func046C takes nothing returns boolean
if ( not ( udg_QJCS_Health[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001Func001Func001C takes nothing returns boolean
if ( not ( GetUnitStateSwap(UNIT_STATE_MANA, GetEnumUnit()) > udg_QJCS_Amount[udg_QJCS_index[3]] ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001Func001A takes nothing returns nothing
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001Func001Func001C() ) then
// Increase Caster's Mana
call SetUnitManaBJ( udg_QJCS_Caster[udg_QJCS_index[3]], ( GetUnitStateSwap(UNIT_STATE_MANA, udg_QJCS_Caster[udg_QJCS_index[3]]) + udg_QJCS_Amount[udg_QJCS_index[3]] ) )
else
// Increase Caster's Mana
call SetUnitManaBJ( udg_QJCS_Caster[udg_QJCS_index[3]], ( GetUnitStateSwap(UNIT_STATE_MANA, udg_QJCS_Caster[udg_QJCS_index[3]]) + GetUnitStateSwap(UNIT_STATE_MANA, GetEnumUnit()) ) )
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001C takes nothing returns boolean
if ( not ( udg_QJCS_Leech[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func003A takes nothing returns nothing
call SetUnitManaBJ( GetEnumUnit(), ( GetUnitStateSwap(UNIT_STATE_MANA, GetEnumUnit()) - udg_QJCS_Amount[udg_QJCS_index[3]] ) )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func048C takes nothing returns boolean
if ( not ( udg_QJCS_Mana[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002Func001Func001C takes nothing returns boolean
if ( not ( GetPlayerState(GetOwningPlayer(GetEnumUnit()), PLAYER_STATE_RESOURCE_GOLD) > R2I(udg_QJCS_Amount[udg_QJCS_index[3]]) ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002Func001A takes nothing returns nothing
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002Func001Func001C() ) then
call AdjustPlayerStateBJ( R2I(udg_QJCS_Amount[udg_QJCS_index[3]]), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]]), PLAYER_STATE_RESOURCE_GOLD )
else
call AdjustPlayerStateBJ( GetPlayerState(GetOwningPlayer(GetEnumUnit()), PLAYER_STATE_RESOURCE_GOLD), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]]), PLAYER_STATE_RESOURCE_GOLD )
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002C takes nothing returns boolean
if ( not ( udg_QJCS_Leech[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func004A takes nothing returns nothing
call AdjustPlayerStateBJ( ( -1 * R2I(udg_QJCS_Amount[udg_QJCS_index[3]]) ), GetOwningPlayer(GetEnumUnit()), PLAYER_STATE_RESOURCE_GOLD )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func050C takes nothing returns boolean
if ( not ( udg_QJCS_Gold[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func052Func001A takes nothing returns nothing
set udg_QJCS_tempPos[3] = GetUnitLoc(GetEnumUnit())
call CreateNUnitsAtLoc( 1, 'e000', GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]]), udg_QJCS_tempPos[3], bj_UNIT_FACING )
call UnitApplyTimedLifeBJ( 1.00, 'BTLF', GetLastCreatedUnit() )
call UnitAddAbilityBJ( udg_QJCS_SlowEffect[udg_QJCS_index[3]], GetLastCreatedUnit() )
call IssueTargetOrder( GetLastCreatedUnit(), "slow", GetEnumUnit() )
call RemoveLocation(udg_QJCS_tempPos[3])
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func052C takes nothing returns boolean
if ( not ( udg_QJCS_Slow[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func054Func001A takes nothing returns nothing
set udg_QJCS_tempPos[3] = GetUnitLoc(GetEnumUnit())
call CreateNUnitsAtLoc( 1, 'e000', GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]]), udg_QJCS_tempPos[3], bj_UNIT_FACING )
call UnitApplyTimedLifeBJ( 1.00, 'BTLF', GetLastCreatedUnit() )
call UnitAddAbilityBJ( udg_QJCS_StunEffect[udg_QJCS_index[3]], GetLastCreatedUnit() )
call IssueTargetOrder( GetLastCreatedUnit(), "thunderbolt", GetEnumUnit() )
call RemoveLocation(udg_QJCS_tempPos[3])
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func054C takes nothing returns boolean
if ( not ( udg_QJCS_Stun[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001001 takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001002 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002001 takes nothing returns boolean
return ( GetFilterUnit() != udg_QJCS_TargetUnit[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002002 takes nothing returns boolean
return ( GetUnitAbilityLevelSwapped(udg_QJCS_Locust, GetFilterUnit()) == 0 )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002001 takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Enemy[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002002 takes nothing returns boolean
return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Ally[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002 takes nothing returns boolean
return GetBooleanOr( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001001 takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001002 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002001 takes nothing returns boolean
return ( GetFilterUnit() != udg_QJCS_TargetUnit[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002001 takes nothing returns boolean
return ( IsUnitInGroup(GetFilterUnit(), udg_QJCS_dGroup[udg_QJCS_index[3]]) == false )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002002 takes nothing returns boolean
return ( GetUnitAbilityLevelSwapped(udg_QJCS_Locust, GetFilterUnit()) == 0 )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002001 takes nothing returns boolean
return ( IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Enemy[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002002 takes nothing returns boolean
return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(udg_QJCS_Caster[udg_QJCS_index[3]])) == udg_QJCS_Ally[udg_QJCS_index[3]] )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002 takes nothing returns boolean
return GetBooleanOr( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003 takes nothing returns boolean
return GetBooleanAnd( Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003001(), Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003002() )
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func068C takes nothing returns boolean
if ( not ( udg_QJCS_OnePerUnit[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004Func002Func001C takes nothing returns boolean
if ( not ( IsUnitInGroup(udg_QJCS_TargetUnit[udg_QJCS_index[3]], udg_QJCS_victimGroup) == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004Func002C takes nothing returns boolean
if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_QJCS_currUnit) < GetUnitStateSwap(UNIT_STATE_LIFE, udg_QJCS_TargetUnit[udg_QJCS_index[3]]) ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004A takes nothing returns nothing
set udg_QJCS_currUnit = GetEnumUnit()
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004Func002C() ) then
set udg_QJCS_TargetUnit[udg_QJCS_index[3]] = udg_QJCS_currUnit
else
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004Func002Func001C() ) then
set udg_QJCS_TargetUnit[udg_QJCS_index[3]] = udg_QJCS_TargetUnit[udg_QJCS_index[3]]
else
set udg_QJCS_TargetUnit[udg_QJCS_index[3]] = udg_QJCS_currUnit
endif
endif
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004C takes nothing returns boolean
if ( not ( udg_QJCS_Priority[udg_QJCS_index[3]] == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012Func070C takes nothing returns boolean
if ( not ( CountUnitsInGroup(udg_QJCS_victimGroup) > 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002Func012C takes nothing returns boolean
if ( not ( udg_QJCS_SystemTime[udg_QJCS_index[3]] >= udg_QJCS_JumpDelayTime[udg_QJCS_index[3]] ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001Func002C takes nothing returns boolean
if ( not ( udg_QJCS_JumpCount[udg_QJCS_index[3]] > 0 ) ) then
return false
endif
if ( not ( udg_QJCS_TargetUnit[udg_QJCS_index[3]] != null ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Func003Func001C takes nothing returns boolean
if ( not ( IsUnitInGroup(udg_QJCS_baseDummy[udg_QJCS_index[3]], udg_QJCS_dummyGroup) == true ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Jump_Actions takes nothing returns nothing
// DON'T TOUCH ANYTHING HERE.
// index 3 is to keep track of things going on.
set udg_QJCS_index[3] = 1
loop
exitwhen udg_QJCS_index[3] > udg_QJCS_index[2]
if ( Trig_Chain_Jump_Func003Func001C() ) then
if ( Trig_Chain_Jump_Func003Func001Func002C() ) then
// Time Check
if ( Trig_Chain_Jump_Func003Func001Func002Func012C() ) then
// --------------------------------------------------------------
// --------------------------------------------------------------
// Chain Effect
// Position Source for Lightning Creation
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func007C() ) then
set udg_QJCS_tempPos[4] = GetUnitLoc(udg_QJCS_Caster[udg_QJCS_index[3]])
else
set udg_QJCS_tempPos[4] = GetUnitLoc(udg_QJCS_prevTarget[udg_QJCS_index[3]])
endif
// Lightning Effect Index
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func009C() ) then
call EnableTrigger( gg_trg_Chain_Effect )
else
endif
set udg_QJCS_LightningIndex[1] = ( udg_QJCS_LightningIndex[1] + 1 )
set udg_QJCS_LightningIndex[2] = ( udg_QJCS_LightningIndex[2] + 1 )
// Get Lightning Target
set udg_QJCS_LightningTarget[udg_QJCS_LightningIndex[2]] = udg_QJCS_TargetUnit[udg_QJCS_index[3]]
// Lightning Duration
set udg_QJCS_LightningDur[udg_QJCS_LightningIndex[2]] = 1.00
// Position Target for Lightning Creation
set udg_QJCS_tempPos[5] = GetUnitLoc(udg_QJCS_TargetUnit[udg_QJCS_index[3]])
// Get Unit of Previous
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func019C() ) then
set udg_QJCS_LightningDPos[udg_QJCS_LightningIndex[2]] = udg_QJCS_Caster[udg_QJCS_index[3]]
else
set udg_QJCS_LightningDPos[udg_QJCS_LightningIndex[2]] = udg_QJCS_prevTarget[udg_QJCS_index[3]]
endif
// Chain x1,y1,z1,x2,y2,z2 where z is height
set udg_QJCS_ChainX[1] = GetLocationX(udg_QJCS_tempPos[4])
set udg_QJCS_ChainY[1] = GetLocationY(udg_QJCS_tempPos[4])
set udg_QJCS_ChainZ[1] = GetLocationZ(udg_QJCS_tempPos[4]) + GetUnitFlyHeight(udg_QJCS_LightningDPos[udg_QJCS_LightningIndex[2]]) + 25
set udg_QJCS_ChainX[2] = GetLocationX(udg_QJCS_tempPos[5])
set udg_QJCS_ChainY[2] = GetLocationY(udg_QJCS_tempPos[5])
set udg_QJCS_ChainZ[2] = GetLocationZ(udg_QJCS_tempPos[5]) + GetUnitFlyHeight(udg_QJCS_TargetUnit[udg_QJCS_index[3]]) + 25
// Create and Store Lightning SFX
set udg_QJCS_LightningSFX[udg_QJCS_LightningIndex[2]] = AddLightningEx( udg_QJCS_ChainSFX[udg_QJCS_index[3]] , true , udg_QJCS_ChainX[1] , udg_QJCS_ChainY[1] , udg_QJCS_ChainZ[1] , udg_QJCS_ChainX[2] , udg_QJCS_ChainY[2] , udg_QJCS_ChainZ[2])
// Clear Pos
call RemoveLocation(udg_QJCS_tempPos[4])
call RemoveLocation(udg_QJCS_tempPos[5])
// --------------------------------------------------------------
// --------------------------------------------------------------
// Target SFX
call AddSpecialEffectTargetUnitBJ( "origin", udg_QJCS_TargetUnit[udg_QJCS_index[3]], udg_QJCS_TargetSFX[udg_QJCS_index[3]] )
call DestroyEffect( GetLastCreatedEffectBJ() )
// Get Target Position
set udg_QJCS_tempPos[2] = GetUnitLoc(udg_QJCS_TargetUnit[udg_QJCS_index[3]])
// AoE
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func040C() ) then
// Set Group
// CHANGE TO TARGET POS
set udg_QJCS_aGroup[udg_QJCS_index[3]] = GetUnitsInRangeOfLocMatching(udg_QJCS_AoERadius[udg_QJCS_index[3]], udg_QJCS_tempPos[2], Condition(function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func004002003))
else
set udg_QJCS_aGroup[udg_QJCS_index[3]] = GetUnitsInRangeOfLocMatching(udg_QJCS_JumpRadius[udg_QJCS_index[3]], udg_QJCS_tempPos[2], Condition(function Trig_Chain_Jump_Func003Func001Func002Func012Func040Func001002003))
endif
// Damage
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func042C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func042Func001A )
else
endif
// Heal
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func044C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func044Func001A )
else
endif
// Health
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func046C() ) then
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func001Func001A )
else
endif
// Do Damage
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func046Func003A )
else
endif
// Mana
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func048C() ) then
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func001Func001A )
else
endif
// Reduce Enemy Mana
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func048Func003A )
else
endif
// Gold
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func050C() ) then
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func002Func001A )
else
endif
// Deduct Gold
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func050Func004A )
else
endif
// Slow
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func052C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func052Func001A )
else
endif
// Stun
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func054C() ) then
call ForGroupBJ( udg_QJCS_aGroup[udg_QJCS_index[3]], function Trig_Chain_Jump_Func003Func001Func002Func012Func054Func001A )
else
endif
// Clear
call DestroyGroup(udg_QJCS_aGroup[udg_QJCS_index[3]])
// --------------------------------------------------------------
// --------------------------------------------------------------
// Update System Jump Count
set udg_QJCS_SystemCount[udg_QJCS_index[3]] = ( udg_QJCS_SystemCount[udg_QJCS_index[3]] + 1 )
// Update Jump Count
set udg_QJCS_JumpCount[udg_QJCS_index[3]] = ( udg_QJCS_JumpCount[udg_QJCS_index[3]] - 1 )
// UPDATE Amount
set udg_QJCS_Amount[udg_QJCS_index[3]] = ( udg_QJCS_Amount[udg_QJCS_index[3]] - ( udg_QJCS_Amount[udg_QJCS_index[3]] * udg_QJCS_AmountReduce[udg_QJCS_index[3]] ) )
// Get Previous Target
set udg_QJCS_prevTarget[udg_QJCS_index[3]] = udg_QJCS_TargetUnit[udg_QJCS_index[3]]
// Check if its OPU
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func068C() ) then
// Store Victim in to individual damagedGroup
call GroupAddUnitSimple( udg_QJCS_TargetUnit[udg_QJCS_index[3]], udg_QJCS_dGroup[udg_QJCS_index[3]] )
// Set new VictimGroup with Damaged Group in condition
set udg_QJCS_victimGroup = GetUnitsInRangeOfLocMatching(udg_QJCS_JumpRadius[udg_QJCS_index[3]], udg_QJCS_tempPos[2], Condition(function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func006002003))
else
// Set new VictimGroup
set udg_QJCS_victimGroup = GetUnitsInRangeOfLocMatching(udg_QJCS_JumpRadius[udg_QJCS_index[3]], udg_QJCS_tempPos[2], Condition(function Trig_Chain_Jump_Func003Func001Func002Func012Func068Func002002003))
endif
// Get Next Target
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func070C() ) then
if ( Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004C() ) then
// Get Lowest Health
call ForGroupBJ( udg_QJCS_victimGroup, function Trig_Chain_Jump_Func003Func001Func002Func012Func070Func004Func004A )
else
// No priority, meaning random choose
set udg_QJCS_TargetUnit[udg_QJCS_index[3]] = GroupPickRandomUnit(udg_QJCS_victimGroup)
endif
else
// Set Jump Count to 0 to end it, because there is no more units nearby to hit
set udg_QJCS_JumpCount[udg_QJCS_index[3]] = 0
endif
// Reset System Time
set udg_QJCS_SystemTime[udg_QJCS_index[3]] = 0.00
// Clear
call DestroyGroup(udg_QJCS_victimGroup)
call RemoveLocation(udg_QJCS_tempPos[2])
else
// Update System Time
set udg_QJCS_SystemTime[udg_QJCS_index[3]] = ( udg_QJCS_SystemTime[udg_QJCS_index[3]] + 0.03 )
endif
else
// Out of Count, End
call DestroyGroup(udg_QJCS_dGroup[udg_QJCS_index[3]])
// Kill and Remove Base Dummy
call GroupRemoveUnitSimple( udg_QJCS_baseDummy[udg_QJCS_index[3]], udg_QJCS_dummyGroup )
call KillUnit( udg_QJCS_baseDummy[udg_QJCS_index[3]] )
if ( Trig_Chain_Jump_Func003Func001Func002Func006C() ) then
call GroupClear( udg_QJCS_dGroup[udg_QJCS_index[3]] )
else
endif
// Reduce Index 1 by 1 to let it know 1 spell has ended
set udg_QJCS_index[1] = ( udg_QJCS_index[1] - 1 )
// Check if index 1 is 0, if it is 0, there is no active spell running
if ( Trig_Chain_Jump_Func003Func001Func002Func010C() ) then
set udg_QJCS_index[2] = 0
call DisableTrigger( GetTriggeringTrigger() )
else
endif
endif
else
// Do Nothing Here
endif
set udg_QJCS_index[3] = udg_QJCS_index[3] + 1
endloop
endfunction
//===========================================================================
function InitTrig_Chain_Jump takes nothing returns nothing
set gg_trg_Chain_Jump = CreateTrigger( )
call DisableTrigger( gg_trg_Chain_Jump )
call TriggerRegisterTimerEventPeriodic( gg_trg_Chain_Jump, 0.03 )
call TriggerAddAction( gg_trg_Chain_Jump, function Trig_Chain_Jump_Actions )
endfunction
function Trig_Chain_Effect_Func002Func001Func015Func005C takes nothing returns boolean
if ( not ( udg_QJCS_LightningIndex[1] == 0 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Effect_Func002Func001Func015C takes nothing returns boolean
if ( not ( udg_QJCS_LightningDur[udg_QJCS_LightningIndex[3]] <= 0.00 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Effect_Func002Func001C takes nothing returns boolean
if ( not ( udg_QJCS_LightningDur[udg_QJCS_LightningIndex[3]] > 0.00 ) ) then
return false
endif
return true
endfunction
function Trig_Chain_Effect_Actions takes nothing returns nothing
// DON'T TOUCH ANYTHING HERE.
set udg_QJCS_LightningIndex[3] = 1
loop
exitwhen udg_QJCS_LightningIndex[3] > udg_QJCS_LightningIndex[2]
if ( Trig_Chain_Effect_Func002Func001C() ) then
// Lightning Duration
set udg_QJCS_LightningDur[udg_QJCS_LightningIndex[3]] = ( udg_QJCS_LightningDur[udg_QJCS_LightningIndex[3]] - 0.03 )
// Get Position
set udg_QJCS_LightningPos[1] = GetUnitLoc(udg_QJCS_LightningDPos[udg_QJCS_LightningIndex[3]])
set udg_QJCS_LightningPos[2] = GetUnitLoc(udg_QJCS_LightningTarget[udg_QJCS_LightningIndex[3]])
// Get x1,y1,x2,y2
set udg_QJCS_ChainX[3] = GetLocationX(udg_QJCS_LightningPos[1])
set udg_QJCS_ChainY[3] = GetLocationY(udg_QJCS_LightningPos[1])
set udg_QJCS_ChainZ[3] = GetLocationZ(udg_QJCS_LightningPos[1]) + GetUnitFlyHeight(udg_QJCS_LightningDPos[udg_QJCS_LightningIndex[3]]) + 25
set udg_QJCS_ChainX[4] = GetLocationX(udg_QJCS_LightningPos[2])
set udg_QJCS_ChainY[4] = GetLocationY(udg_QJCS_LightningPos[2])
set udg_QJCS_ChainZ[4] = GetLocationZ(udg_QJCS_LightningPos[2]) + GetUnitFlyHeight(udg_QJCS_LightningTarget[udg_QJCS_LightningIndex[3]]) + 25
// Move Lightning
call MoveLightningEx(udg_QJCS_LightningSFX[udg_QJCS_LightningIndex[3]] , true , udg_QJCS_ChainX[3] , udg_QJCS_ChainY[3] , udg_QJCS_ChainZ[3] , udg_QJCS_ChainX[4] , udg_QJCS_ChainY[4] , udg_QJCS_ChainZ[4])
if ( Trig_Chain_Effect_Func002Func001Func015C() ) then
// Find a way to let it destroy once.
call DestroyLightning( udg_QJCS_LightningSFX[udg_QJCS_LightningIndex[3]] )
set udg_QJCS_LightningIndex[1] = ( udg_QJCS_LightningIndex[1] - 1 )
if ( Trig_Chain_Effect_Func002Func001Func015Func005C() ) then
set udg_QJCS_LightningIndex[2] = 0
call DisableTrigger( gg_trg_Chain_Effect )
else
endif
else
endif
// Clear
call RemoveLocation(udg_QJCS_LightningPos[1])
call RemoveLocation(udg_QJCS_LightningPos[2])
else
endif
set udg_QJCS_LightningIndex[3] = udg_QJCS_LightningIndex[3] + 1
endloop
endfunction
//===========================================================================
function InitTrig_Chain_Effect takes nothing returns nothing
set gg_trg_Chain_Effect = CreateTrigger( )
call DisableTrigger( gg_trg_Chain_Effect )
call TriggerRegisterTimerEventPeriodic( gg_trg_Chain_Effect, 0.03 )
call TriggerAddAction( gg_trg_Chain_Effect, function Trig_Chain_Effect_Actions )
endfunction
function Trig_Untitled_Trigger_008_Actions takes nothing returns nothing
set udg_Player[GetConvertedPlayerId(GetTriggerPlayer())] = Player(0)
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_008 takes nothing returns nothing
set gg_trg_Untitled_Trigger_008 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_008, function Trig_Untitled_Trigger_008_Actions )
endfunction
//TESH.scrollpos=3
//TESH.alwaysfold=1
function Trig_Weather_Init_Actions takes nothing returns nothing
/*
set udg_Weather_Effect[0] = 'RAhr'
set udg_Weather_Effect[1] = 'RAlr'
set udg_Weather_Effect[2] = 'MEds'
set udg_Weather_Effect[3] = 'FDbh'
set udg_Weather_Effect[4] = 'FDbl'
set udg_Weather_Effect[5] = 'FDgh'
set udg_Weather_Effect[6] = 'FDgl'
set udg_Weather_Effect[7] = 'FDrh'
set udg_Weather_Effect[8] = 'FDrl'
set udg_Weather_Effect[9] = 'FDwh'
set udg_Weather_Effect[10] = 'FDwl'
set udg_Weather_Effect[11] = 'RLhr'
set udg_Weather_Effect[12] = 'RLlr'
set udg_Weather_Effect[13] = 'SNbs'
set udg_Weather_Effect[14] = 'SNhs'
set udg_Weather_Effect[15] = 'SNls'
set udg_Weather_Effect[16] = 'WOcw'
set udg_Weather_Effect[17] = 'WOlw'
set udg_Weather_Effect[18] = 'LRaa'
set udg_Weather_Effect[19] = 'LRma'
set udg_Weather_Effect[20] = 'WNcw'
*/
endfunction
//===========================================================================
function InitTrig_Weather_Init takes nothing returns nothing
set gg_trg_Weather_Init = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Weather_Init, 0.00 )
call TriggerAddAction( gg_trg_Weather_Init, function Trig_Weather_Init_Actions )
endfunction
function Trig_HeroUnEquip_Item_Copy_2_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetTriggerUnit()) == udg_InventoryDummyUnittype[GetConvertedPlayerId(GetTriggerPlayer())] ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Amulet takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Armor takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemArmorLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemArmorIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Artifact takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemArtifactLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemArtifactIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Boots takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemBootsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemBootsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Gloves takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemGlovesLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemGlovesIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Helmet takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemHelmetLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemHelmetIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Leggings takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemLeggingsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemLeggingsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Ring takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemRingLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemRingIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Shoulders takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemShouldersLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemShouldersIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_WMainhand takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemWMainhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemWMainhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_WOffhand takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemWOffhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemWOffhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Copy_2_Actions takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger() )
// AMULET
if ( Trig_HeroUnEquip_Item_Amulet() ) then
call HeroAbility_Item_UnEquip(udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00L', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Amulet
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// ARMOR
if ( Trig_HeroUnEquip_Item_Armor() ) then
call HeroAbility_Item_UnEquip(udg_ItemArmorUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemArmorLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemArmorUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemArmorLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemArmorIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00M', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Armor
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// ARTIFACT
if ( Trig_HeroUnEquip_Item_Artifact() ) then
call HeroAbility_Item_UnEquip(udg_ItemArtifactUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemArtifactLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemArtifactUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemArtifactLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemArtifactIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00T', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Artifact
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// BOOTS
if ( Trig_HeroUnEquip_Item_Boots() ) then
call HeroAbility_Item_UnEquip(udg_ItemBootsUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemBootsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemBootsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemBootsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemBootsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00N', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Boots
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// GLOVES
if ( Trig_HeroUnEquip_Item_Gloves() ) then
call HeroAbility_Item_UnEquip(udg_ItemGlovesUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemGlovesLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemGlovesUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemGlovesLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemGlovesIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00O', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Gloves
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// HELMET
if ( Trig_HeroUnEquip_Item_Helmet() ) then
call HeroAbility_Item_UnEquip(udg_ItemHelmetUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemHelmetLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemHelmetUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemHelmetLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemHelmetIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00P', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Helmet
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// LEGGINGS
if ( Trig_HeroUnEquip_Item_Leggings() ) then
call HeroAbility_Item_UnEquip(udg_ItemLeggingsUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemLeggingsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemLeggingsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemLeggingsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemLeggingsIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00I', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Leggings
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// RING
if ( Trig_HeroUnEquip_Item_Ring() ) then
call HeroAbility_Item_UnEquip(udg_ItemRingUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemRingLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemRingUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemRingLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemRingIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00S', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Ring
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// SHOULDERS
if ( Trig_HeroUnEquip_Item_Shoulders() ) then
call HeroAbility_Item_UnEquip(udg_ItemShouldersUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemShouldersLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemShouldersUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemShouldersLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemShouldersIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00U', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty Shoulder
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// MAINHAND
if ( Trig_HeroUnEquip_Item_WMainhand() ) then
call HeroAbility_Item_UnEquip(udg_ItemWMainhandUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemWMainhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemWMainhandUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemWMainhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemWMainhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A00Q', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty WMainhand
call EnableTrigger( GetTriggeringTrigger() )
return
endif
// OFFHAND
if ( Trig_HeroUnEquip_Item_WOffhand() ) then
call HeroAbility_Item_UnEquip(udg_ItemWOffhandUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemWOffhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
// Sets variables to null/0 etc.
set udg_ItemWOffhandUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemWOffhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemWOffhandIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
call UnitAddAbilityBJ( 'A012', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] ) // Add Empty WOffhand
call EnableTrigger( GetTriggeringTrigger() )
return
endif
call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_HeroUnEquip_Item takes nothing returns nothing
set gg_trg_HeroUnEquip_Item = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroUnEquip_Item, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_HeroUnEquip_Item, Condition( function Trig_HeroUnEquip_Item_Copy_2_Conditions ) )
call TriggerAddAction( gg_trg_HeroUnEquip_Item, function Trig_HeroUnEquip_Item_Copy_2_Actions )
endfunction
function Trig_HeroUnEquip_Item_Copy_Func003Func011Func002C takes nothing returns boolean
if ( not ( UnitInventoryCount(udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())]) == 6 ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Copy_Func003Func011C takes nothing returns boolean
if ( not ( UnitInventoryCount(udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())]) <= 5 ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Copy_Func003C takes nothing returns boolean
if ( not ( GetSpellAbilityId() == udg_ItemAllListDummyAbility[udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]] ) ) then
return false
endif
if ( not ( udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
return true
endfunction
function Trig_HeroUnEquip_Item_Copy_Actions takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger() )
// 1st condition - Checks if the ability being cast is equal to Amulet type; then 2nd condition: check, if it is still used and if yes, it continues to actions
if ( Trig_HeroUnEquip_Item_Copy_Func003C() ) then
// 1. Remove ability of current Amulet from Dummy; 2. Remove ability provided by item from Hero; 3. Add Empty Amulet slot to Dummy
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]], udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
call HeroAbility_RemoveAmuletAbilities(udg_Integer_ItemAmuletLifeInteger[GetConvertedPlayerId(GetTriggerPlayer())], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
call UnitAddAbilityBJ( 'A00L', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
// Shows text: You have unequipped "item name" - the item name's color will be based on its rarity.
call DisplayTextToForce( GetForceOfPlayer(GetTriggerPlayer()), ( "|CFFFFCC00You have " + ( "|r|CFFFF0000unequipped|r |CFF9400D3" + GetItemName(udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())]) ) ) )
// This is new action, making this unequipping working, even if you have full inventory.
// 1. checks if hero has 5 or less items. If so, it gives him the item immediately.
if ( Trig_HeroUnEquip_Item_Copy_Func003Func011C() ) then
call UnitAddItemSwapped( udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] )
else
// But, if the hero has 6 items, it can't give him the item, he would lose it. So instead, it will move to position of your hero.
if ( Trig_HeroUnEquip_Item_Copy_Func003Func011Func002C() ) then
set udg_Point_CurrentHero = GetUnitLoc(udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
call SetItemPositionLoc( udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Point_CurrentHero )
call RemoveLocation(udg_Point_CurrentHero)
else
endif
endif
// Sets variables to null/0 etc.
set udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())] = null
set udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = 0
set udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = false
else
endif
call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_HeroUnEquip_Item_Copy takes nothing returns nothing
set gg_trg_HeroUnEquip_Item_Copy = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroUnEquip_Item_Copy, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddAction( gg_trg_HeroUnEquip_Item_Copy, function Trig_HeroUnEquip_Item_Copy_Actions )
endfunction
call HeroAbility_Item_UnEquip(udg_ItemArmorUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemArmorLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemArtifactUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemArtifactLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemBootsUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemBootsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemGlovesUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemGlovesLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemHelmetUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemHelmetLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemLeggingsUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemLeggingsLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemRingUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemRingLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemShouldersUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemShouldersLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemWMainhandUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemWMainhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
call HeroAbility_Item_UnEquip(udg_ItemWOffhandUsed[GetConvertedPlayerId(GetTriggerPlayer())], udg_Integer_ItemWOffhandLifeInt[GetConvertedPlayerId(GetTriggerPlayer())],GetTriggerPlayer(),GetConvertedPlayerId(GetTriggerPlayer()))
function Trig_HeroAmulet_Equip_Item_v2_Copy_Conditions takes nothing returns boolean
if ( not ( GetItemType(GetManipulatedItem()) != ITEM_TYPE_PURCHASABLE ) ) then
return false
endif
return true
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011Func029C takes nothing returns boolean
if ( ( GetItemLifeBJ(GetManipulatedItem()) <= 200.00 ) ) then
return true
endif
return false
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011Func030C takes nothing returns boolean
if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return true
endif
if ( ( GetUnitTypeId(GetTriggerUnit()) == udg_InventoryDummyUnittype[GetConvertedPlayerId(GetTriggerPlayer())] ) ) then
return true
endif
return false
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011C takes nothing returns boolean
if ( not ( udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == true ) ) then
return false
endif
if ( not Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011Func029C() ) then
return false
endif
if ( not Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011Func030C() ) then
return false
endif
return true
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func014C takes nothing returns boolean
if ( ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == true ) ) then
return true
endif
if ( ( GetUnitTypeId(GetTriggerUnit()) == udg_InventoryDummyUnittype[GetConvertedPlayerId(GetTriggerPlayer())] ) ) then
return true
endif
return false
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Func007C takes nothing returns boolean
if ( not ( udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] == false ) ) then
return false
endif
if ( not ( GetItemLifeBJ(GetManipulatedItem()) <= 200.00 ) ) then
return false
endif
if ( not Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func014C() ) then
return false
endif
return true
endfunction
function Trig_HeroAmulet_Equip_Item_v2_Copy_Actions takes nothing returns nothing
call DisableTrigger( GetTriggeringTrigger() )
call SetItemLifeBJ( GetManipulatedItem(), 1000000.00 )
// AMULET
if ( Trig_HeroAmulet_Equip_Item_v2_Copy_Func007C() ) then
// Changes owner of the item equipped so played can't give the item to anyone else (It's your choice if you're willing to have this in your map)
call SetItemPlayerBJ( GetManipulatedItem(), GetTriggerPlayer(), false )
// 1st - Sets variable, to track back the item; 2nd - sets boolean, that amulet is now used; 3rd - sets current amulet item is now used
set udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = R2I(GetItemLifeBJ(GetManipulatedItem()))
set udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = true
set udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())] = GetManipulatedItem()
// Sets point for later item remove.
set udg_Point_ItemEquipRemove = GetRectCenter(gg_rct_EquipmentItems)
// 1st - Adds amulet abillity to DUMMY; 2nd - Adds amulet bonus to HERO; 3rd - Removes Empty Slot Amulet from DUMMY
call UnitAddAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(GetManipulatedItem()))], udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
call HeroAbility_AddAmuletAbilities(udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
call UnitRemoveAbilityBJ( 'A00L', udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
// Drops and moves the item to Region for item moving
call UnitRemoveItemSwapped( udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], GetTriggerUnit() )
call SetItemPositionLoc( GetLastRemovedItem(), udg_Point_ItemEquipRemove )
call RemoveLocation(udg_Point_ItemEquipRemove)
// This is just essential - it displays: You have equipped "Item name" - the color of item name will be based on its rarity.
call DisplayTextToForce( GetForceOfPlayer(GetTriggerPlayer()), ( "|CFFFFCC00You have " + ( "|r|CFF00FF00equipped|r |CFF9400D3" + GetItemName(udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())]) ) ) )
else
// ELSE: Checks if amulet is used (It is), and return message
if ( Trig_HeroAmulet_Equip_Item_v2_Copy_Func007Func011C() ) then
// These actions will actually exchange item used for the one we have equipped.
// Changes owner of the item equipped so played can't give the item to anyone else (It's your choice if you're willing to have this in your map)
call SetItemPlayerBJ( GetManipulatedItem(), GetTriggerPlayer(), false )
// This is item we have had equipped. It has to be saved into another variable just for use in this trigger.
set udg_ItemAmuletUsed2 = udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())]
// Sets point for later item remove.
set udg_Point_ItemEquipRemove = GetRectCenter(gg_rct_EquipmentItems)
// Remove item ability + hero ability
call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())]], udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
call HeroAbility_RemoveAmuletAbilities(udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
// Sets variables
set udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())] = R2I(GetItemLifeBJ(GetManipulatedItem()))
set udg_Boolean_ItemAmuletIsUsed[GetConvertedPlayerId(GetTriggerPlayer())] = true
set udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())] = GetManipulatedItem()
// Adds item ability and hero ability
call UnitAddAbilityBJ( udg_ItemAllListDummyAbility[R2I(GetItemLifeBJ(GetManipulatedItem()))], udg_InventoryDummy[GetConvertedPlayerId(GetTriggerPlayer())] )
call HeroAbility_AddAmuletAbilities(udg_Integer_ItemAmuletLifeInt[GetConvertedPlayerId(GetTriggerPlayer())], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
// Drops and moves the item to Region for item moving
call UnitRemoveItemSwapped( udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())], GetTriggerUnit() )
call SetItemPositionLoc( GetLastRemovedItem(), udg_Point_ItemEquipRemove )
// After we have our item we clicked equipped, this adds to your hero inventory the item dropped (which was equipped before).
call UnitAddItemSwapped( udg_ItemAmuletUsed2, udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] )
call RemoveLocation(udg_Point_ItemEquipRemove)
// Displays which item have you equipped and which unequipped. Color of item names will again be based on their rarity.
call DisplayTextToForce( GetForceOfPlayer(GetTriggerPlayer()), ( "|CFFFFCC00You have " + ( "|r|CFFFF0000unequipped|r |CFF9400D3" + GetItemName(udg_ItemAmuletUsed2) ) ) )
call DisplayTextToForce( GetForceOfPlayer(GetTriggerPlayer()), ( "|CFFFFCC00You have " + ( "|r|CFF00FF00equipped|r |CFF9400D3" + GetItemName(udg_ItemAmuletUsed[GetConvertedPlayerId(GetTriggerPlayer())]) ) ) )
set udg_ItemAmuletUsed2 = null
else
endif
endif
call EnableTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_HeroAmulet_Equip_Item_v2_Copy takes nothing returns nothing
set gg_trg_HeroAmulet_Equip_Item_v2_Copy = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_HeroAmulet_Equip_Item_v2_Copy, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddCondition( gg_trg_HeroAmulet_Equip_Item_v2_Copy, Condition( function Trig_HeroAmulet_Equip_Item_v2_Copy_Conditions ) )
call TriggerAddAction( gg_trg_HeroAmulet_Equip_Item_v2_Copy, function Trig_HeroAmulet_Equip_Item_v2_Copy_Actions )
endfunction
function Trig_Untitled_Trigger_009_Func001A takes nothing returns nothing
call SmartCameraPanBJModified(GetEnumPlayer(), udg_Point_Temp3, 0)
call SetCameraTargetControllerNoZForPlayer( GetEnumPlayer(), gg_unit_n008_0039, 0, 0, false )
call SetCameraFieldForPlayer( GetEnumPlayer(), CAMERA_FIELD_FIELD_OF_VIEW, 90.00, 5.00 )
endfunction
call ForForce( GetPlayersAll(), function Trig_Untitled_Trigger_009_Func001A )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_009 takes nothing returns nothing
set gg_trg_Untitled_Trigger_009 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_009, function Trig_Untitled_Trigger_009_Actions )
endfunction
function Trig_Untitled_Trigger_023_Actions takes nothing returns nothing
call SetUnitRallyUnit( GetTriggerUnit(), gg_unit_H000_0313 )
call SetUnitRallyUnit( GetTriggerUnit(), gg_unit_H002_0314 )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_023 takes nothing returns nothing
set gg_trg_Untitled_Trigger_023 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_023, function Trig_Untitled_Trigger_023_Actions )
endfunction
function Trig_Untitled_Trigger_011_Func001002 takes nothing returns nothing
if ( GetItemPlayer(GetEnumItem()) == Player(11) ) then
call RemoveItem( GetEnumItem() )
endif
endfunction
function Trig_Untitled_Trigger_009_Func001A takes nothing returns nothing
call SmartCameraPanBJModified(GetEnumPlayer(), udg_Point_Temp3, 0)
call SetCameraTargetControllerNoZForPlayer( GetEnumPlayer(), gg_unit_n008_0039, 0, 0, false )
call SetCameraFieldForPlayer( GetEnumPlayer(), CAMERA_FIELD_FIELD_OF_VIEW, 90.00, 5.00 )
endfunction
function Trig_Add_All_Abilities_to_Dummy_Actions takes nothing returns nothing
local unit u = gg_unit_H000_0313
local location l = GetUnitLoc(u)
call ForForce( GetPlayersAll(), function Trig_Untitled_Trigger_009_Func001A )
// call CreateNUnitsAtLoc( 1, 'h04U', Player(11), l, bj_UNIT_FACING )
set udg_InventoryDummy[GetConvertedPlayerId(GetOwningPlayer(GetLastCreatedUnit()))] = GetLastCreatedUnit()
set udg_InventoryDummyUnittype[GetConvertedPlayerId(GetOwningPlayer(GetLastCreatedUnit()))] = GetUnitTypeId(GetLastCreatedUnit())
call DisplayTimedTextToForce( GetPlayersAll(), 7, "Preloading various data, please wait a few seconds..." )
call PolledWait(0.5)
//call CreateNUnitsAtLoc( 1, 'Hpal', Player(PLAYER_NEUTRAL_PASSIVE), l, bj_UNIT_FACING )
//set u = GetLastCreatedUnit()
call SetUnitUserData( u, 0 )
set udg_Integer_A1 = 1
loop
exitwhen udg_Integer_A1 > udg_Integer_HeroAbilityLast
/*
call UnitAddAbilityBJ( udg_ItemAllHeroAbility1[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility2[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility3[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility4[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility5[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility6[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility7[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllHeroAbility10[udg_Integer_A1], u )
call UnitAddAbilityBJ( udg_ItemAllListDummyAbility[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility1[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility2[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility3[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility4[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility5[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility6[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility7[udg_Integer_A1], u )
call UnitRemoveAbilityBJ( udg_ItemAllHeroAbility10[udg_Integer_A1], u )
*/
call UnitAddItemByIdSwapped( udg_ItemAllList[udg_Integer_A1], u )
call UnitUseItem( u, GetLastCreatedItem() )
//call RemoveItem(GetLastCreatedItem())
//call UnitAddAbilityBJ( udg_ItemAllListDummyAbility[udg_Integer_A1], u )
//call UnitRemoveAbilityBJ( udg_ItemAllListDummyAbility[udg_Integer_A1], u )
//call HeroAbility_RemoveItemAbilities(udg_Integer_A1, u)
set udg_Integer_A1 = udg_Integer_A1 + 1
endloop
call PolledWait(0.2)
call EnumItemsInRectBJ( GetPlayableMapRect(), function Trig_Untitled_Trigger_011_Func001002 )
call RemoveUnit( u )
call RemoveUnit(gg_unit_Hpal_0300)
call RemoveUnit(udg_InventoryDummy[11])
call RemoveLocation(l)
set l = null
set u = null
call DestroyTrigger( GetTriggeringTrigger() )
endfunction
//===========================================================================
function InitTrig_Add_All_Abilities_to_Dummy takes nothing returns nothing
set gg_trg_Add_All_Abilities_to_Dummy = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Add_All_Abilities_to_Dummy, 0.05 )
call TriggerAddAction( gg_trg_Add_All_Abilities_to_Dummy, function Trig_Add_All_Abilities_to_Dummy_Actions )
endfunction
function Trig_Item_Init_ALL_Actions takes nothing returns nothing
//call DisplayTimedTextToForce( GetPlayersAll(), 7, "Preloading various data, please wait a few seconds..." )
///////////////////////////// AMULET ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 0 // Cloth
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05L' // Darkbane Amulet - Common
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04P' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07O' // 15 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A00W' // 45 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A07Y' // 1 ALL STATS
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A07J'// SpB 1 ARM AURA
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02L' // Ousted Bead Necklace - Common
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04R' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07L' // 25 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A084' // 65 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A00Y' // 1 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A07Z' // 2 ALL STATS
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 69 // Leather
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02P' // Rimetooth Pendant- Common
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04S' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07Q' // 45 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07I' // 2 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A080' // 1 STR, 2 AGI
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A09V' // SpB DMG IncDec 3%
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 139 // Leather/Chainmail
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I00A' // Heartbreak Charm - Common
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04Q' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07K' // 50 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07H' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A010' // 3 STR
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A09V' // SpB DMG IncDec 3%
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02S' // Spiked Battlegueard Choker - Common
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A08J' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07R' // 35 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07H' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A081' // 5 HP REG
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A09V' // SpB DMG IncDec 3%
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
///////////////////////////// ARMOR ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 200 // Cloth
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02E' // Farmer's Clothes
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A00X' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A08F' // 60 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A011' // 70 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A08C' // 2 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A07G' // 1 HP reg
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A09Q' // 5% MP reg
set udg_ItemAllHeroAbility6[udg_Integer_HeroAbilityLast] = 'A07V' // 3 INT
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AU' // 4% EVASION SpB
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03X'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04U'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02J'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04O'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02B'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A013'
set udg_Integer_HeroAbilityLast = 269 // Leather
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02D' // Thief's Clothes
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A051' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A08H' // 70 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08C' // 2 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09O' // 3 HP reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09R' // 3 AGI, 3 STR
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A09Y' // 8% EVASION SpB
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02G' // Leather Armor
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04J' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07E' // 130 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07D' // 4 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A07G' // 1 HP reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0A1' // 4 STR
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AU' // 4% EVASION SpB
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I042'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04T'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I045'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04Z'
set udg_Integer_HeroAbilityLast = 339 // Chainmail
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03O' // Old Armor
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04V' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07T' // 220 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07P' // 5 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09P' // 5 HP reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09S' // 6 STR
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AT' // SpB DMG Dec 3%
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I029' // Ruined Armor
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04W' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A085' // 150 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08L' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09O' // 3 HP reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0A3' // 1 AGI, 3 STR
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AS' // SpB DMG IncDec 3%
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03M'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04X'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02I'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A04Y'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I035'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A050'
///////////////////////////// ARTIFACT ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 400
// 7 legendary artifacts here later...
set udg_Integer_HeroAbilityLast = 407
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05M' // Adventurer's Torch
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05A' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A086' // 250 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A07W' // 1 AGI
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09Z' // 100 SIGHT
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02V' // Adventurer's Lantern
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A052' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A087' // 500 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08B' // 3 AGI
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0A0' // 200 SIGHT
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05H'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A056'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05I'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A054'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05K'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A014'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05J'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A057'
///////////////////////////// BOOTS ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 600
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03Y' // Farmer Boots
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05E' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A078' // 10 MS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08N' // 1 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A08O' // 50 HP
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08R' // 100 MP
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A08S' // 2 AGI
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03V'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05G'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03W'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05C'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I034'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05D'
set udg_Integer_HeroAbilityLast = 669
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I046' // Old Boots
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05K' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A078' // 10 MS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08N' // 1 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A08P' // 150 HP
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08T' // 5 AGI
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04T'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05I'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I044'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05H'
set udg_Integer_HeroAbilityLast = 739
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02F' // Plate Boots
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05B' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A078' // 10 MS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08M' // 2 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A08Q' // 250 HP
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08S' // 2 AGI
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03L'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A058'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02C'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A055'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I03N'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A059'
///////////////////////////// GLOVES ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 800
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I050' // Suspiciously Soft Gloves
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05N' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A08U' // 3% AS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08Y' // 1 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A091' // 3 STR
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08V' // 10 DMG
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04Y'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05M'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04P'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05N'
set udg_Integer_HeroAbilityLast = 869
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I057' // Gloves of Agility
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05R' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A08X' // 5% AS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08Z' // 2 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A092' // 5 STR
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08W' // 35 DMG
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I055'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05O'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I02A'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05P'
set udg_Integer_HeroAbilityLast = 939
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05D' // Gauntlets of the Royal Watch
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05J' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A08X' // 5% AS
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A090' // 5 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A093' // 10 STR
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A08W' // 35 DMG
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04I'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05F'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04J'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05Q'
///////////////////////////// HELMET ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 1000
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04Q' // Majesty Crown
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05W' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A094' // 150 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A097' // 200 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A098' // 2 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09B' // 2 HP Reg
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A015' // 20% MP Reg
set udg_ItemAllHeroAbility6[udg_Integer_HeroAbilityLast] = 'A079' // 100 SIGHT
set udg_ItemAllHeroAbility7[udg_Integer_HeroAbilityLast] = 'A0A2' // 10 INT
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1003
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04O'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05U'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04Z'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05V'
set udg_Integer_HeroAbilityLast = 1069
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04V' // Scary Mask
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A060' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A095' // 250 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A099' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09C' // 3 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A079' // 100 SIGHT
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1073
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04U'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05X'
set udg_Integer_HeroAbilityLast = 1075
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I056'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05Y'
set udg_Integer_HeroAbilityLast = 1139
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06H' // Barbarian Helmet
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05T' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A096' // 350 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A09A' // 4 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09D' // 4 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A079' // 100 SIGHT
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1143
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06G'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05Z'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05B'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A05S'
///////////////////////////// LEGGINGS ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 1200
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06A' // Lightweave Leggings
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A065' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07S' // 75 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A00W' // 100 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09F' // 1 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09I' // 1 HP Reg
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A09M' // 10% MP Reg
set udg_ItemAllHeroAbility6[udg_Integer_HeroAbilityLast] = 'A09L' // 5 MS
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AV' // 5% MS SpB
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05X'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A063'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07W'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A064'
set udg_Integer_HeroAbilityLast = 1269
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I066' // Leggings of Swift Reflexes
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A069' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07S' // 150 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A09E' // 2 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09J' // 2 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09K' // 10 MS
set udg_ItemAllHeroAbility10[udg_Integer_HeroAbilityLast] = 'A0AV' // 5% MS SpB
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I064'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A066'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07X'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A067'
set udg_Integer_HeroAbilityLast = 1339
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I04K' // Ironscale Leggings
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A062' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A07U' // 250 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A09G' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A09H' // 3 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A09L' // 5 MS
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07V'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A068'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05S'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A061'
///////////////////////////// RING ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 1400
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06R' // Golden Ring
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06C' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0A4' // 100 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A0AA' // 350 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0A6' // 2 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0A9' // 1 HP Reg
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A0AB' // 40% MP Reg
set udg_ItemAllHeroAbility6[udg_Integer_HeroAbilityLast] = 'A0AC' // 5 ALL STATS
set udg_ItemAllHeroAbility7[udg_Integer_HeroAbilityLast] = 'A09W' // 5% SPELL RESIST
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06P'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06B'
set udg_Integer_HeroAbilityLast = 1469 // Leather
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06U'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06F'
set udg_Integer_HeroAbilityLast = 1475 // Leather/Chainmail
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06S' // Ring of Might
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06D' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0A5' // 175 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A0A7' // 5 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0A8' // 2 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0AD' // 10 AGI, 10 STR
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A09W' // 5% SPELL RESIST
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1540 // Chainmail
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06K'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06E'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06D'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06A'
///////////////////////////// SHOULDERS ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 1600
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05Z' // Shoulders of Misfortune
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06K' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0AE' // 100 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A0AH' // 350 MP
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0AK' // 1 ARM
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0AL' // 1 HP Reg
set udg_ItemAllHeroAbility5[udg_Integer_HeroAbilityLast] = 'A0AP' // 30% MP Reg
set udg_ItemAllHeroAbility6[udg_Integer_HeroAbilityLast] = 'A0AN' // 7 INT, 2 STR
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1603
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06Q'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06H'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05Y'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06O'
set udg_Integer_HeroAbilityLast = 1669
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I069' // Elven Shoulders
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06N' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0AF' // 150 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A0AJ' // 3 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0AM' // 3 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0AO' // 5 AGI, 5 STR
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I065'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06L'
set udg_Integer_HeroAbilityLast = 1673
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06T'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06M'
set udg_Integer_HeroAbilityLast = 1739
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06X' // Mechanical Shoulders
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06G' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0AG' // 250 HP
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A0AI' // 5 ARM
set udg_ItemAllHeroAbility3[udg_Integer_HeroAbilityLast] = 'A0AM' // 3 HP Reg
set udg_ItemAllHeroAbility4[udg_Integer_HeroAbilityLast] = 'A0AO' // 5 AGI, 5 STR
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1742
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05R'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06J'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06L'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06I'
///////////////////////////// WEAPON ONE HAND ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 1801
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I079'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06U'
set udg_Integer_HeroAbilityLast = 1803
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07B'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06S'
set udg_Integer_HeroAbilityLast = 1869
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I074' // Suicide Blade
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06W' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0AZ' // 100 DMG
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08E' // 15 AGI, 15 STR
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I076' // Dagger
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06X' // -----
set udg_ItemAllHeroAbility1[udg_Integer_HeroAbilityLast] = 'A0AY' // 150 DMG
set udg_ItemAllHeroAbility2[udg_Integer_HeroAbilityLast] = 'A08D' // 35 AGI, 5 STR
call Dungeon_Rewards_E1_AddReward(udg_ItemAllList[udg_Integer_HeroAbilityLast])
set udg_Integer_HeroAbilityLast = 1875
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06Z'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06V'
set udg_Integer_HeroAbilityLast = 1940
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06M'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A071'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I06Y'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06Y'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I075'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06Z'
///////////////////////////////////
// WEAPONS NOT IMPLEMENTED YET!!!
///////////////////////////////////
///////////////////////////// WEAPON OFF HAND ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 2000
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07A'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06R'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I078'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06P'
set udg_Integer_HeroAbilityLast = 2102
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05T'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06T'
set udg_Integer_HeroAbilityLast = 2104
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I05C'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A06Q'
///////////////////////////// WEAPON TWO HAND ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 2200
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07K'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A073'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07L'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A072'
set udg_Integer_HeroAbilityLast = 2201
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07I'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A075'
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07F'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A074'
set udg_Integer_HeroAbilityLast = 2201
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07J'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A070'
set udg_Integer_HeroAbilityLast = 2201
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07G'
set udg_ItemAllListDummyAbility[udg_Integer_HeroAbilityLast] = 'A076'
///////////////////////////// Potions ////////////////////////////////////
set udg_Integer_HeroAbilityLast = 3000
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I009' // Minor Healing Potion
set udg_Integer_HeroAbilityLast = 3010
set udg_ItemAllList[(HeroAbilityLastIntOut())] = 'I07S' // Minor Mana Potion
///////////////////////////// Quest Items ////////////////////////////////////
// NOT SAVED!!
//////////////
call DestroyTrigger(GetTriggeringTrigger())
endfunction
//===========================================================================
function InitTrig_Item_Init_All_Items takes nothing returns nothing
set gg_trg_Item_Init_All_Items = CreateTrigger( )
//call TriggerRegisterTimerEventSingle( gg_trg_Item_Init_All_Items, 0.00 )
call TriggerAddAction( gg_trg_Item_Init_All_Items, function Trig_Item_Init_ALL_Actions )
endfunction
function Trig_Item_1_Initialization_Actions takes nothing returns nothing
// ----------AMULETS---------- //
// Cloth - start //
set udg_ItemAllList[1] = 'I05L'
set udg_ItemAllList[2] = 'I02L'
set udg_ItemAllList[3] = 'I030'
set udg_ItemAllList[4] = 'I030'
set udg_ItemAllList[5] = 'I00B'
set udg_ItemAllList[6] = 'I00C'
set udg_ItemAllList[7] = 'I02L'
set udg_ItemAllList[8] = 'I02T'
set udg_ItemAllList[9] = 'I02U'
// Cloth - end //
// Leather - start //
set udg_ItemAllList[70] = 'I02M'
set udg_ItemAllList[71] = 'I02N'
set udg_ItemAllList[72] = 'I02O'
set udg_ItemAllList[73] = 'I02P'
// Leather - end //
// Chainmail + Leather - start //
set udg_ItemAllList[140] = 'I028'
set udg_ItemAllList[141] = 'I02Z'
set udg_ItemAllList[142] = 'I02W'
set udg_ItemAllList[143] = 'I031'
set udg_ItemAllList[144] = 'I00A'
set udg_ItemAllList[145] = 'I02Q'
set udg_ItemAllList[146] = 'I02R'
set udg_ItemAllList[147] = 'I02S'
set udg_ItemAllList[148] = 'I033'
// Chainmail + Leather - end //
// ----------ARMOR---------- //
endfunction
//===========================================================================
function InitTrig_Item_1_Initialization takes nothing returns nothing
set gg_trg_Item_1_Initialization = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Item_1_Initialization, 0.00 )
call TriggerAddAction( gg_trg_Item_1_Initialization, function Trig_Item_1_Initialization_Actions )
endfunction
function Trig_ItemAbillity_2_Initialization_Actions takes nothing returns nothing
// Amulets Abilities
set udg_ItemAllListDummyAbility[(ItemAbilityIntOut())] = 'A04P'
set udg_ItemAllListDummyAbility[(ItemAbilityIntOut())] = 'A04R'
set udg_ItemAllListDummyAbility[(ItemAbilityIntOut())] = 'A04L'
endfunction
//===========================================================================
function InitTrig_ItemAbillity_2_Initialization takes nothing returns nothing
set gg_trg_ItemAbillity_2_Initialization = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_ItemAbillity_2_Initialization, 0.00 )
call TriggerAddAction( gg_trg_ItemAbillity_2_Initialization, function Trig_ItemAbillity_2_Initialization_Actions )
endfunction
function Trig_EB_Init_Dmg_Source_Conditions takes nothing returns boolean
if ( not ( IsUnitInGroup(GetEventDamageSource(), udg_UG_EB[GetUnitUserData(GetTriggerUnit())]) == false ) ) then
return false
endif
if ( not ( IsUnitType(GetEventDamageSource(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction
function Trig_EB_Init_Dmg_Source_Func006001 takes nothing returns boolean
return ( udg_UG_EB[GetUnitUserData(GetTriggerUnit())] == null )
endfunction
function Trig_EB_Init_Dmg_Source_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local unit d = GetEventDamageSource()
local integer i = GetUnitUserData(u)
if ( Trig_EB_Init_Dmg_Source_Func006001() ) then
set udg_UG_EB[i] = CreateGroup()
endif
call GroupAddUnitSimple((d), udg_UG_EB[(i)] )
set d = null
set u = null
endfunction
//===========================================================================
function InitTrig_EB_Init_Dmg_Source takes nothing returns nothing
set gg_trg_EB_Init_Dmg_Source = CreateTrigger( )
call TriggerAddCondition( gg_trg_EB_Init_Dmg_Source, Condition( function Trig_EB_Init_Dmg_Source_Conditions ) )
call TriggerAddAction( gg_trg_EB_Init_Dmg_Source, function Trig_EB_Init_Dmg_Source_Actions )
endfunction
function Trig_EB_Trigger_Func023C takes nothing returns boolean
if ( ( GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then
return true
endif
if ( ( GetOwningPlayer(GetDyingUnit()) == Player(11) ) ) then
return true
endif
return false
endfunction
function Trig_EB_Trigger_Conditions takes nothing returns boolean
if ( not Trig_EB_Trigger_Func023C() ) then
return false
endif
if ( not ( IsUnitType(GetKillingUnitBJ(), UNIT_TYPE_HERO) == true ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func002002003 takes nothing returns boolean
return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction
function Trig_EB_Trigger_Func003Func001Func002C takes nothing returns boolean
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[1] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[2] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[3] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[4] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[5] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[6] ) ) then
return true
endif
if ( ( GetUnitTypeId(GetEnumUnit()) == udg_UnitType_Healer[7] ) ) then
return true
endif
return false
endfunction
function Trig_EB_Trigger_Func003Func001C takes nothing returns boolean
if ( not Trig_EB_Trigger_Func003Func001Func002C() ) then
return false
endif
return true
endfunction
//pick all units in UG_Healers, and add them to "udg_UG_EB"
function Trig_EB_Trigger_Func003A takes nothing returns nothing
if ( Trig_EB_Trigger_Func003Func001Func002C() ) then
call GroupAddUnitSimple( GetEnumUnit(), udg_UG_EB[GetUnitUserData(GetTriggerUnit())] )
endif
endfunction
function Trig_EB_Trigger_Func007001 takes nothing returns boolean
return ( udg_Integer_EB_UnitNumber == 0 )
endfunction
function Trig_EB_Trigger_Func015Func002Func003Func004C takes nothing returns boolean
if ( not ( GetUnitLevel(GetEnumUnit()) >= GetUnitLevel(GetTriggerUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015Func002Func003Func006C takes nothing returns boolean
if ( not ( GetUnitLevel(GetEnumUnit()) >= GetUnitLevel(GetTriggerUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015Func002Func003Func007C takes nothing returns boolean
if ( ( ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetEnumUnit()) ) >= 20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetEnumUnit()) ) <= -20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetEnumUnit()) - GetUnitLevel(GetTriggerUnit()) ) >= 20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetEnumUnit()) - GetUnitLevel(GetTriggerUnit()) ) <= -20 ) ) then
return true
endif
return false
endfunction
function Trig_EB_Trigger_Func015Func002Func003C takes nothing returns boolean
if ( not Trig_EB_Trigger_Func015Func002Func003Func007C() ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015Func002Func009A takes nothing returns nothing
call DisplayTextToForce( GetPlayersAll(), ( "Picked players: " + GetPlayerName(GetEnumPlayer()) ) )
call DisplayTextToForce( GetPlayersAll(), ( "Picked unit player: " + GetPlayerName(GetOwningPlayer(GetEnumUnit())) ) )
endfunction
function Trig_EB_Trigger_Func015Func002A takes nothing returns nothing
call ForceAddPlayerSimple( GetOwningPlayer(GetEnumUnit()), udg_Force_EB )
// Checks if the distance of levels isn't higher than 20
if ( Trig_EB_Trigger_Func015Func002Func003Func007C() ) then
set udg_Real_EB_Exp = 0.00
set udg_Real_EB_Bounty = 0.00
else
// Sets appropriate number of XP gained by hero; If hero's level is higher -> less XP; if lower -> more XP
if ( Trig_EB_Trigger_Func015Func002Func003Func004C() ) then
set udg_Integer_EB_Level = ( GetUnitLevel(GetEnumUnit()) - GetUnitLevel(GetTriggerUnit()) )
set udg_Real_EB_Exp = ( udg_Real_EB_ExpGain * ( udg_Real_EB_Life * 0.50 ) )
set udg_Real_EB_Exp = ( udg_Real_EB_Exp - ( ( udg_Real_EB_Exp * 0.05 ) * I2R(udg_Integer_EB_Level) ) )
else
set udg_Integer_EB_Level = ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetEnumUnit()) )
set udg_Real_EB_Exp = ( udg_Real_EB_ExpGain * ( udg_Real_EB_Life * 0.50 ) )
set udg_Real_EB_Exp = ( udg_Real_EB_Exp + ( ( udg_Real_EB_Exp * 0.02 ) * I2R(udg_Integer_EB_Level) ) )
endif
// The same for Bounty
if ( Trig_EB_Trigger_Func015Func002Func003Func006C() ) then
set udg_Integer_EB_Level = ( GetUnitLevel(GetEnumUnit()) - GetUnitLevel(GetTriggerUnit()) )
set udg_Real_EB_Bounty = ( udg_Real_EB_BountyGain * ( udg_Real_EB_Life * 0.10 ) )
set udg_Real_EB_Bounty = ( udg_Real_EB_Bounty - ( ( udg_Real_EB_Bounty * 0.05 ) * I2R(udg_Integer_EB_Level) ) )
else
set udg_Integer_EB_Level = ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetEnumUnit()) )
set udg_Real_EB_Bounty = ( udg_Real_EB_BountyGain * ( udg_Real_EB_Life * 0.10 ) )
set udg_Real_EB_Bounty = ( udg_Real_EB_Bounty + ( ( udg_Real_EB_Bounty * 0.02 ) * I2R(udg_Integer_EB_Level) ) )
endif
endif
// Adds XP and Bounty
set udg_Real_EB_Bounty = ( udg_Real_EB_Bounty * GetRandomReal(0, 1.25) )
set udg_Real_EB_Exp = ( udg_Real_EB_Exp * GetRandomReal(0.10, 1.00) )
call AddHeroXPSwapped( R2I(udg_Real_EB_Exp), GetEnumUnit(), true )
call AdjustPlayerStateBJ( R2I(udg_Real_EB_Bounty), GetOwningPlayer(GetEnumUnit()), PLAYER_STATE_RESOURCE_GOLD )
call ForForce( udg_Force_EB, function Trig_EB_Trigger_Func015Func002Func009A )
// Creates Gold gained text
call CreateTextTagLocBJ( ( "+" + ( I2S(R2I(udg_Real_EB_Bounty)) + " copper" ) ), udg_Point_EB, 0, 10, 72.00, 45.00, 20.00, 0 )
call ShowTextTagForceBJ( false, GetLastCreatedTextTag(), GetPlayersAll() )
call ShowTextTagForceBJ( true, GetLastCreatedTextTag(), udg_Force_EB )
call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 80.00, 90 )
call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 3.00 )
call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 2.50 )
// Creates Experience gained text
call CreateTextTagLocBJ( ( "+" + ( I2S(R2I(udg_Real_EB_Exp)) + " experience" ) ), udg_Point_EB, 45.00, 10, 20.00, 20.00, 80.00, 0 )
call ShowTextTagForceBJ( false, GetLastCreatedTextTag(), GetPlayersAll() )
call ShowTextTagForceBJ( true, GetLastCreatedTextTag(), udg_Force_EB )
call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 80.00, 90 )
call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 3.00 )
call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 2.50 )
// Clears udgs for next player/unit - above
set udg_Real_EB_Bounty = 0.00
set udg_Real_EB_Exp = 0.00
call ForceClear( udg_Force_EB )
endfunction
function Trig_EB_Trigger_Func015Func004Func002C takes nothing returns boolean
if ( not ( GetUnitLevel(GetKillingUnitBJ()) >= GetUnitLevel(GetTriggerUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015Func004Func004C takes nothing returns boolean
if ( not ( GetUnitLevel(GetKillingUnitBJ()) >= GetUnitLevel(GetTriggerUnit()) ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015Func004Func007C takes nothing returns boolean
if ( ( ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetKillingUnitBJ()) ) >= 20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetTriggerUnit()) - GetUnitLevel(GetKillingUnitBJ()) ) <= -20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetKillingUnitBJ()) - GetUnitLevel(GetTriggerUnit()) ) >= 20 ) ) then
return true
endif
if ( ( ( GetUnitLevel(GetKillingUnitBJ()) - GetUnitLevel(GetTriggerUnit()) ) <= -20 ) ) then
return true
endif
return false
endfunction
function Trig_EB_Trigger_Func015Func004C takes nothing returns boolean
if ( not Trig_EB_Trigger_Func015Func004Func007C() ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Func015C takes nothing returns boolean
if ( not ( udg_Integer_EB_UnitNumber == 1 ) ) then
return false
endif
return true
endfunction
function Trig_EB_Trigger_Actions takes nothing returns nothing
local player playerKiller = GetOwningPlayer(GetKillingUnit())
local force playerForce = null
local unit dyingUnit = GetTriggerUnit()
local unit killingUnit = GetKillingUnit()
local real bounty = 0
local real exp = 0
local real life = GetUnitStateSwap(UNIT_STATE_MAX_LIFE, dyingUnit)
local integer customValue = GetUnitUserData(dyingUnit)
local group ug_all = null
local integer ug_all_num = 0
local integer levelDistance = 0
local texttag exp_text = null
local texttag bounty_text = null
// This makes life of healers easier putting them onto damage list too.
set udg_UG_EB_Healers = GetUnitsInRangeOfLocMatching(1000.00, udg_Point_EB, Condition(function Trig_EB_Trigger_Func002002003))
call ForGroupBJ( udg_UG_EB_Healers, function Trig_EB_Trigger_Func003A )
set ug_all = udg_UG_EB[customValue]
call GroupClear( udg_UG_EB_Healers )
call GroupClear(udg_UG_EB[customValue])
// If there is no unit in ug_all, skip further actions
set ug_all_num = CountUnitsInGroup(ug_all)
if ( ug_all_num == 0 ) then
return
endif
//set udg_Unit_EB = GetTriggerUnit()
//set udg_Real_EB_Life = GetUnitStateSwap(UNIT_STATE_MAX_LIFE, GetTriggerUnit())
//set udg_Point_EB = GetUnitLoc(udg_Unit_EB)
//set udg_Integer_EB_CustomValue = GetUnitUserData(GetTriggerUnit())
//set udg_Force_EB = GetPlayersAll()
//call ForceClear( udg_Force_EB )
// ---------------------------------------
if ( ug_all_num == 1 ) then
call ForceAddPlayer( playerKiller, playerForce )
// Checks if the distance of levels isn't higher than 20
if ( Trig_EB_Trigger_Func015Func004C() ) then
set exp = 0.00
set bounty = 0.00
else
// Sets appropriate number of XP gained by hero; If hero's level is higher -> less XP; if lower -> more XP
if ( GetUnitLevel(killingUnit) >= GetUnitLevel(dyingUnit) ) then
set levelDistance = ( GetUnitLevel(killingUnit) - GetUnitLevel(dyingUnit) )
set exp = ( udg_Real_EB_ExpGain * ( life * 0.50 ) )
set exp = ( exp - ( ( exp * 0.05 ) * I2R(levelDistance) ) )
else
set levelDistance = ( GetUnitLevel(dyingUnit) - GetUnitLevel(killingUnit) )
set exp = ( udg_Real_EB_ExpGain * ( life * 0.50 ) )
set exp = ( exp + ( ( exp * 0.02 ) * I2R(levelDistance) ) )
endif
// The same for Bounty
if ( GetUnitLevel(killingUnit) >= GetUnitLevel(dyingUnit) ) then
set levelDistance = ( GetUnitLevel(killingUnit) - GetUnitLevel(dyingUnit) )
set bounty = ( udg_Real_EB_BountyGain * ( life * 0.10 ) )
set bounty = ( bounty - ( ( bounty * 0.05 ) * I2R(levelDistance) ) )
else
set levelDistance = ( GetUnitLevel(dyingUnit) - GetUnitLevel(killingUnit) )
set bounty = ( udg_Real_EB_BountyGain * ( life * 0.10 ) )
set bounty = ( bounty + ( ( bounty * 0.02 ) * I2R(levelDistance) ) )
endif
endif
// Adds XP and Bounty
set udg_Real_EB_Bounty = ( udg_Real_EB_Bounty * GetRandomReal(0, 1.25) )
set udg_Real_EB_Exp = ( udg_Real_EB_Exp * GetRandomReal(0.10, 1.00) )
call AddHeroXP( killingUnit, R2I(udg_Real_EB_Exp), true )
call AdjustPlayerStateBJ( R2I(udg_Real_EB_Bounty), playerKiller, PLAYER_STATE_RESOURCE_GOLD )
// Creates Gold gained text
set bounty_text = CreateTextTagLocBJ( ( "+" + ( I2S(R2I(udg_Real_EB_Bounty)) + " copper" ) ), udg_Point_EB, 0, 10, 72.00, 45.00, 20.00, 0 )
call ShowTextTagForceBJ( false, bounty_text, GetPlayersAll() )
call ShowTextTagForceBJ( true, bounty_text, playerForce )
call SetTextTagVelocityBJ( bounty_text, 80.00, 90 )
call SetTextTagPermanentBJ( bounty_text, false )
call SetTextTagLifespanBJ( bounty_text, 3.00 )
call SetTextTagFadepointBJ( bounty_text, 2.50 )
// Creates Experience gained text
set exp_text = CreateTextTagLocBJ( ( "+" + ( I2S(R2I(udg_Real_EB_Exp)) + " experience" ) ), udg_Point_EB, 45.00, 10, 20.00, 20.00, 80.00, 0 )
call ShowTextTagForceBJ( false, exp_text, GetPlayersAll() )
call ShowTextTagForceBJ( true, exp_text, playerForce )
call SetTextTagVelocityBJ( exp_text, 80.00, 90 )
call SetTextTagPermanentBJ( exp_text, false )
call SetTextTagLifespanBJ( exp_text, 3.00 )
call SetTextTagFadepointBJ( exp_text, 2.50 )
else
call ForGroupBJ( udg_UG_EB[udg_Integer_EB_CustomValue], function Trig_EB_Trigger_Func015Func002A )
endif
call ForceClear( udg_Force_EB )
call GroupClear( udg_UG_EB[udg_Integer_EB_CustomValue] )
set udg_Unit_EB = null
set udg_Real_EB_Bounty = 0.00
set udg_Real_EB_Exp = 0.00
set udg_Integer_EB_UnitNumber = 0
set udg_Integer_EB_CustomValue = 0
endfunction
//===========================================================================
function InitTrig_EB_Trigger takes nothing returns nothing
set gg_trg_EB_Trigger = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_EB_Trigger, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_EB_Trigger, Condition( function Trig_EB_Trigger_Conditions ) )
call TriggerAddAction( gg_trg_EB_Trigger, function Trig_EB_Trigger_Actions )
endfunction
function Trig_Respawn_DEATH_Func011C takes nothing returns boolean
if ( ( GetOwningPlayer(GetTriggerUnit()) == Player(10) ) ) then
return true
endif
if ( ( GetOwningPlayer(GetTriggerUnit()) == Player(11) ) ) then
return true
endif
if ( ( GetOwningPlayer(GetTriggerUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then
return true
endif
return false
endfunction
function Trig_Respawn_DEATH_Conditions takes nothing returns boolean
if ( not ( IsUnitDeadBJ(GetTriggerUnit()) == true ) ) then
return false
endif
if ( not ( GetUnitUserData(GetTriggerUnit()) > 0 ) ) then
return false
endif
if ( not Trig_Respawn_DEATH_Func011C() ) then
return false
endif
return true
endfunction
function Trig_Respawn_DEATH_Actions takes nothing returns nothing
local integer i = GetUnitTypeId(GetTriggerUnit())
local integer ii = GetUnitUserData(GetTriggerUnit())
local unit u = null
call PolledWait( GetRandomReal(20, 60) )
set u = ReplaceUnitBJ(GetTriggerUnit(), i, 100)
//set u = CreateUnit(GetOwningPlayer(GetTriggerUnit()),i,GetLocationX(udg_Respawn_Position[ii]),GetLocationY(udg_Respawn_Position[ii]),270)
call SetUnitUserData( (u), (ii) )
set udg_Respawn_Position[(GetUnitUserData(u))] = udg_Respawn_Position[(ii)]
if udg_Respawn_Position[(GetUnitUserData(u))] != udg_Respawn_Position[(ii)] then
call RemoveLocation(udg_Respawn_Position[(ii)])
endif
call SetUnitPositionLoc(u, udg_Respawn_Position[(GetUnitUserData(u))])
set u = null
endfunction
//===========================================================================
function InitTrig_Respawn_DEATH takes nothing returns nothing
set gg_trg_Respawn_DEATH = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Respawn_DEATH, EVENT_PLAYER_UNIT_DEATH )
call TriggerAddCondition( gg_trg_Respawn_DEATH, Condition( function Trig_Respawn_DEATH_Conditions ) )
call TriggerAddAction( gg_trg_Respawn_DEATH, function Trig_Respawn_DEATH_Actions )
endfunction
function Trig_Resetting_All_Quests_Copy_Copy_Actions takes nothing returns nothing
set udg_Integer_Q_PriestTrollKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_PriestGenocide[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_TrollHunterKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheHunterBecameTheHunted[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Boolean_Quest_TheyreGone_B[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_Boolean_Quest_TheyreGone_C[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = true
set udg_Boolean_Quest_TheyreGone_D[GetConvertedPlayerId(GetOwningPlayer(GetKillingUnitBJ()))] = true
call QuestSetCompletedBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheyreGone[GetConvertedPlayerId(GetTriggerPlayer())] )
call QuestSetCompletedBJ( udg_Quest_WANTEDKingofTrolls[GetConvertedPlayerId(GetTriggerPlayer())], false )
set udg_Integer_Q_MilitiaRecruited[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_MilitiaRecruit[GetConvertedPlayerId(GetTriggerPlayer())] )
call QuestSetCompletedBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_EnemyIntelligence[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Boolean_Quest_WeaponsOfOurEC[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurED[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEE[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEF[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
set udg_Boolean_Quest_WeaponsOfOurEG[GetConvertedPlayerId(GetOwningPlayer(GetTriggerUnit()))] = false
call QuestSetCompletedBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_WeaponsOfOurEnemies[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_FillUpTheCages[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_BabyTrollKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_NastyBabies[GetConvertedPlayerId(GetTriggerPlayer())] )
set udg_Integer_Q_WolfKills[GetConvertedPlayerId(GetTriggerPlayer())] = 0
call QuestSetCompletedBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())], false )
call QuestSetDiscoveredBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())], false )
call DestroyQuestBJ( udg_Quest_TheWinterIsComing[GetConvertedPlayerId(GetTriggerPlayer())] )
endfunction
//===========================================================================
function InitTrig_Resetting_All_Quests_Copy_Copy takes nothing returns nothing
set gg_trg_Resetting_All_Quests_Copy_Copy = CreateTrigger( )
call TriggerAddAction( gg_trg_Resetting_All_Quests_Copy_Copy, function Trig_Resetting_All_Quests_Copy_Copy_Actions )
endfunction
function Trig_Stating_Information_Quests_Actions takes nothing returns nothing
// Credits
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3654", "TRIGSTR_3655", "ReplaceableTextures\\CommandButtons\\BTNAmbush.blp" )
// About TLoV
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3656", "TRIGSTR_3657", "ReplaceableTextures\\CommandButtons\\BTNScrollUber.blp" )
// Quick Starting Guide
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3660", "TRIGSTR_3661", "ReplaceableTextures\\CommandButtons\\BTNBookOfTheDead.blp" )
// Commands
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_36770", "TRIGSTR_36771", "ReplaceableTextures\\CommandButtons\\BTNSorceressMaster.blp" )
// Dungeons
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_36772", "TRIGSTR_36773", "ReplaceableTextures\\CommandButtons\\BTNRevenant.blp" )
// Features and Systems
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_36774", "TRIGSTR_36775", "ReplaceableTextures\\CommandButtons\\BTNSpellBookBLS.blp" )
// MALE
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3662", "TRIGSTR_3663", "ReplaceableTextures\\CommandButtons\\BTNVillagerMan.blp" )
// FEMALE
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3664", "TRIGSTR_3665", "ReplaceableTextures\\CommandButtons\\BTNVillagerWoman.blp" )
// Max level
call CreateQuestBJ( bj_QUESTTYPE_OPT_DISCOVERED, "TRIGSTR_3658", "TRIGSTR_3659", "ReplaceableTextures\\WorldEditUI\\Editor-Random-Unit.blp" )
call DestroyTrigger(GetTriggeringTrigger())
endfunction
//===========================================================================
function InitTrig_Stating_Information_Quests takes nothing returns nothing
set gg_trg_Stating_Information_Quests = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Stating_Information_Quests, 2.00 )
call TriggerAddAction( gg_trg_Stating_Information_Quests, function Trig_Stating_Information_Quests_Actions )
endfunction
function Trig_Untitled_Trigger_011_Actions takes nothing returns nothing
call CreateItemLoc( 'I001', l )
call CreateItemLoc( 'I07T', l )
call SetItemCharges( GetLastCreatedItem(), 2 )
call IssueTargetItemOrder( GetTriggerUnit(), "smart", GetLastCreatedItem() )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_011 takes nothing returns nothing
set gg_trg_Untitled_Trigger_011 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_011, function Trig_Untitled_Trigger_011_Actions )
endfunction
function Trig_Untitled_Trigger_021_Conditions takes nothing returns boolean
if ( not ( IsUnitInGroup(GetTriggerUnit(), GetUnitsInRangeOfLocAll(150.00, GetUnitLoc(GetOrderTargetUnit()))) == true ) ) then
return false
endif
return true
endfunction
function Trig_Untitled_Trigger_021_Actions takes nothing returns nothing
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_021 takes nothing returns nothing
set gg_trg_Untitled_Trigger_021 = CreateTrigger( )
call TriggerAddCondition( gg_trg_Untitled_Trigger_021, Condition( function Trig_Untitled_Trigger_021_Conditions ) )
call TriggerAddAction( gg_trg_Untitled_Trigger_021, function Trig_Untitled_Trigger_021_Actions )
endfunction
function Trig_Untitled_Trigger_020_Actions takes nothing returns nothing
call IssuePointOrderLocBJ( GetTriggerUnit(), "move", GetRectCenter(GetPlayableMapRect()) )
local location l = GetUnitLoc(udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())])
call ClearTextMessagesBJ(GetForceOfPlayer(GetTriggerPlayer()))
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_020 takes nothing returns nothing
set gg_trg_Untitled_Trigger_020 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_020, function Trig_Untitled_Trigger_020_Actions )
endfunction
function Trig_Untitled_Trigger_019_Conditions takes nothing returns boolean
if ( not ( GetTriggerUnit() == gg_unit_Hpal_0300 ) ) then
return false
endif
return true
endfunction
function Trig_Untitled_Trigger_019_Actions takes nothing returns nothing
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_019 takes nothing returns nothing
set gg_trg_Untitled_Trigger_019 = CreateTrigger( )
call TriggerAddCondition( gg_trg_Untitled_Trigger_019, Condition( function Trig_Untitled_Trigger_019_Conditions ) )
call TriggerAddAction( gg_trg_Untitled_Trigger_019, function Trig_Untitled_Trigger_019_Actions )
endfunction
function Trig_Untitled_Trigger_003_Actions takes nothing returns nothing
call UnitAddAbilityBJ( udg_ItemAllHeroAbility1[udg_IntegerA[HeroAbilityArrayIntInArrayOut()]], udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_003 takes nothing returns nothing
set gg_trg_Untitled_Trigger_003 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_003, function Trig_Untitled_Trigger_003_Actions )
endfunction
function Trig_Untitled_Trigger_017_Actions takes nothing returns nothing
call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_2415" )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_017 takes nothing returns nothing
set gg_trg_Untitled_Trigger_017 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_017, function Trig_Untitled_Trigger_017_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=1
function Trig_Untitled_Trigger_016_Actions takes nothing returns nothing
set udg_ItemAllListDummyAbility[1] = 'A04T'
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_016 takes nothing returns nothing
set gg_trg_Untitled_Trigger_016 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_016, function Trig_Untitled_Trigger_016_Actions )
endfunction
function Trig_Untitled_Trigger_015_Actions takes nothing returns nothing
call PauseUnitBJ( true, udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] )
call PauseUnitBJ( false, udg_CurrentHero[GetConvertedPlayerId(GetTriggerPlayer())] )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_015 takes nothing returns nothing
set gg_trg_Untitled_Trigger_015 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_015, function Trig_Untitled_Trigger_015_Actions )
endfunction
function Trig_Untitled_Trigger_004_Actions takes nothing returns nothing
set udg_Point_HeroUnpauseRespawn = GetRectCenter(gg_rct_Respawn1)
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_004 takes nothing returns nothing
set gg_trg_Untitled_Trigger_004 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_004, function Trig_Untitled_Trigger_004_Actions )
endfunction
function Trig_Untitled_Trigger_014_Actions takes nothing returns nothing
set udg_A_Villager = gg_unit_h04C_0262
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_014 takes nothing returns nothing
set gg_trg_Untitled_Trigger_014 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_014, function Trig_Untitled_Trigger_014_Actions )
endfunction
function Trig_Untitled_Trigger_013_Actions takes nothing returns nothing
call SetUnitAnimation( null, I2S(S2I(SubStringBJ(GetEventPlayerChatString(), 2, StringLength(GetEventPlayerChatString())))) )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_013 takes nothing returns nothing
set gg_trg_Untitled_Trigger_013 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_013, function Trig_Untitled_Trigger_013_Actions )
endfunction
function Trig_Untitled_Trigger_012_Actions takes nothing returns nothing
call SetUnitAnimation( GetLastRestoredUnitBJ(), SubStringBJ(GetEventPlayerChatString(), 2, StringLength(GetEventPlayerChatString())) )
endfunction
//===========================================================================
function InitTrig_Untitled_Trigger_012 takes nothing returns nothing
set gg_trg_Untitled_Trigger_012 = CreateTrigger( )
call TriggerAddAction( gg_trg_Untitled_Trigger_012, function Trig_Untitled_Trigger_012_Actions )
endfunction