function ExemptYesNo takes nothing returns boolean
return GetSpellAbilityId() == 'A036'
endfunction
function YouAreNotExempt takes nothing returns nothing
local unit caster = GetTriggerUnit()
local unit target = GetSpellTargetUnit()
local player P = GetOwningPlayer(caster)
local location caster_pos = GetUnitLoc(caster)
local real x = GetLocationX(caster_pos)
local real y = GetLocationY(caster_pos)
local unit dummy = CreateUnit(P, 'h010', x, y, 0)
local timer speedInterval = CreateTimer()
local location dummy_pos
local real dx
local real dy
local location target_pos
local real tx
local real ty
call IssueTargetOrder(dummy, "attack", target)
call TimerStart(speedInterval, 10, true, null)
loop
set dummy_pos = GetUnitLoc(dummy)
set dx = GetLocationX(dummy_pos)
set dy = GetLocationY(dummy_pos)
set target_pos = GetUnitLoc(target)
set tx = GetLocationX(target_pos)
set ty = GetLocationY(target_pos)
exitwhen SquareRoot(((dx-tx)*(dx-tx)) + ((dy-ty)*(dy-ty))) <= 100
call TriggerSleepAction(0.5)
if TimerGetRemaining(speedInterval) <= 0.5 then
call SetUnitMoveSpeed(dummy, GetUnitMoveSpeed(dummy) + 50)
endif
endloop
call UnitAddAbility(dummy, 'A00R')
call IssueTargetOrder(dummy, "thunderbolt", target)
call TriggerSleepAction(1)
call RemoveUnit(dummy)
set caster = null
set target = null
set P = null
call RemoveLocation(caster_pos)
set caster_pos = null
set dummy = null
call DestroyTimer(speedInterval)
set speedInterval = null
call RemoveLocation(dummy_pos)
set dummy_pos = null
call RemoveLocation(target_pos)
set target_pos = null
endfunction
Name | Type | is_array | initial_value |
AbsorbDummies | group | No | |
AnywhereMark | location | No | |
AnywhereMarkEffect | effect | No | |
Brad | unit | No | |
Combine_Charged_Items | boolean | No | |
Combine_Charges_Max | integer | No | |
Creep_Positions | location | Yes | |
Creep_Types | unitcode | Yes | |
Dave | unit | No | |
DeathMatch | integer | Yes | |
Dylan | unit | No | |
DylanDefaultSpeed | real | No | |
End_Game_If_All_Gone | boolean | No | |
EveryWhereTarget | unit | No | |
ExemptDummy | unit | No | |
ExemptTarget | unit | No | |
ForceAbsorbTargets | integer | No | |
ForceChokeTarget | unit | No | |
FrozenThrone | integer | No | |
Game_Minutes | integer | No | |
Game_Seconds | integer | No | |
Game_Time | timer | No | |
GameMode | integer | No | |
GoldSplit | integer | No | |
Graham | unit | No | |
Hero_Array | unitcode | Yes | |
Hero_Revive_Time_Factor | real | No | |
Heroes_All | unitcode | Yes | |
Heroes_Scourge | unitcode | Yes | |
Heroes_Sentinel | unitcode | Yes | |
Hostile_Revive_Time | real | No | |
ic | integer | Yes | |
InfectionAttack | integer | No | |
InfectionTarget | unit | No | |
ItemDrop | integer | Yes | |
ItemDropCount | integer | No | |
itemid1 | integer | Yes | |
itemid2 | integer | Yes | |
itemid3 | integer | Yes | |
itemid4 | integer | Yes | |
itemid5 | integer | Yes | |
itemid6 | integer | Yes | |
Jared | unit | No | |
Jon | unit | No | |
JonSpeed | real | No | |
Jordan | unit | No | |
LastHeroStanding | force | No | |
LeaderboardScourge | leaderboard | No | |
LeaderboardSentinel | leaderboard | No | |
LevitateTargetPoint | location | No | |
LightGunDummy | rect | No | |
LightGunTrigger | trigger | No | |
LightGunUnit | unit | No | |
LightningTargets | integer | No | 0 |
LoopCreep | integer | No | |
LoopRandom | integer | No | |
LoopSuper | integer | No | |
Marcus | unit | No | |
MarcusHealth | real | No | |
Marked | boolean | No | |
Matt | unit | No | |
MODE_AllRandom_AllPick | integer | No | 1 |
MODE_Normal | integer | No | 0 |
MODE_Reverse | integer | No | 2 |
Multiboard_Clock | integer | No | |
Multiboard_ShowDeaths | boolean | No | true |
Multiboard_Spots | integer | Yes | |
NotThereEffect | effect | No | |
Odd_Man_Out | force | No | |
output | integer | Yes | |
OverThere | location | No | |
OverThereDistance | real | No | |
Pete | unit | No | |
PhotoChance | integer | No | |
PhotoItem | itemcode | Yes | |
Player | player | No | |
Player_Already_Picked | integer | Yes | |
Player_Colors | string | Yes | |
Player_Starting_Gold | integer | No | |
PlayerNames | string | Yes | |
Players | force | No | |
PlayersCount | integer | No | |
PlayersScourge | force | No | |
PlayersScourgeCount | integer | No | |
PlayersScourgePlaying | force | No | |
PlayersScourgeReverse | force | No | |
PlayersSentinel | force | No | |
PlayersSentinelCount | integer | No | |
PlayersSentinelPlaying | force | No | |
PlayersSentinelReverse | force | No | |
Point | location | No | |
PWFdistance | real | No | |
PWFtarget | location | No | |
Random_Count | integer | No | |
Random_Hero | integer | No | |
RandomData_All | integer | Yes | |
RandomData_Scourge | integer | Yes | |
RandomData_Sentinel | integer | Yes | |
RandomTotal_All | integer | No | |
RandomTotal_Scourge | integer | No | |
RandomTotal_Sentinel | integer | No | |
RC | boolean | No | |
Repick_Cost_Ammount | integer | No | |
RevivableHeroes | group | No | |
RevivableTimersWindows | timerdialog | Yes | |
ReviveTimers | timer | Yes | |
RiverItems | itemcode | Yes | |
RiverItemsCount | integer | No | |
RiverItemsRegions | location | Yes | |
RiverItemsRegionsCount | integer | No | |
RiverItemsTaken | boolean | Yes | |
RN | integer | No | |
RT | trigger | No | |
Sammy | unit | No | |
Score_Deaths | integer | Yes | |
Score_Kills | integer | Yes | |
ShortMode_On | boolean | No | |
SleeperHoldNotFirst | boolean | No | |
SleeperHoldOn | boolean | No | |
Sort_Board_By_Kills | boolean | No | |
StalkOn | boolean | No | |
StalkTarget | unit | No | |
SuckBloodTarget | unit | No | |
Super_Chances | integer | Yes | |
Super_Creeps | unitcode | Yes | |
Super_Creeps_On | boolean | No | |
Super_Names | string | Yes | |
Super_Regions | rect | Yes | |
SwearLvl | integer | No | |
SwearOn | boolean | No | |
TargetBloodSpeed | real | No | |
TargetDancing | location | No | |
TempInteger | integer | No | |
TempReal | real | No | |
TEOTEdamage | real | No | |
Total_Heroes | integer | No | |
UberMode_On | boolean | No | |
UltraShortMode_On | boolean | No | |
UnitGroup | group | No | |
WorldTree | integer | No |
//=======================================================================================================
// Recipe System
// By Fredbrik(Diablo-dk)
//
//=======================================================================================================
//globals
//integer RN=0 // Recipe number.
//trigger RT=CreateTrigger() // Main recipe trigger.
//boolean RC=true
//integer array itemid1
//integer array itemid2
//integer array itemid3
//integer array itemid4
//integer array itemid5
//integer array itemid6
//integer array ic //item count
//integer array output
//endglobals
//=======================================================================================================
// User changeable constants
//=======================================================================================================
constant function Recipe_Effect takes nothing returns string
return "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl" //An effect that comes whenever a recipe is made.
endfunction
constant function Recipe_AP takes nothing returns string
return "origin" //Attachment point for Recipe_Effect()
endfunction
//=======================================================================================================
// This function will return the first item of entered Id in the unit's inventory.
function GetItem takes unit u, integer Id returns item
local integer i=0
local item it
loop
exitwhen i==6
if GetItemTypeId(UnitItemInSlot(u,i)) == Id then
return UnitItemInSlot(u,i)
set i=5
endif
set i=i+1
endloop
return null
endfunction
//==============================
function HasItems takes unit u, integer i returns boolean
local integer index=0
local integer id=-1
local integer b1=0
local integer b2=0
local integer b3=0
local integer b4=0
local integer b5=0
local integer b6=0
loop
exitwhen index==6
set id=GetItemTypeId(UnitItemInSlot(u,index))
if id == 0 then
set id=-1
endif
if id == udg_itemid1[i] and b1 == 0 then
set b1=1
set id=-1
endif
if id == udg_itemid2[i] and b2 == 0 then
set b2=1
set id=-1
endif
if id == udg_itemid3[i] and b3 == 0 then
set b3=1
set id=-1
endif
if id == udg_itemid4[i] and b4 == 0 then
set b4=1
set id=-1
endif
if id == udg_itemid5[i] and b5 == 0 then
set b5=1
set id=-1
endif
if id == udg_itemid6[i] and b6 == 0 then
set b6=1
set id=-1
endif
if b1+b2+b3+b4+b5+b6 == udg_ic[i] then
return true
endif
set index=index+1
endloop
return false
endfunction
//=======================================================================================================
// User Functions:
// Recipe Creating:
//
//=======================================================================================================
function CreateRecipe takes integer i1,integer i2,integer i3,integer i4,integer i5,integer i6,integer output returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_ic[udg_RN]=2
if i3 != 0 then
set udg_itemid3[udg_RN]=i3
set udg_ic[udg_RN]=udg_ic[udg_RN]+1
endif
if i4 != 0 then
set udg_itemid4[udg_RN]=i4
set udg_ic[udg_RN]=udg_ic[udg_RN]+1
endif
if i5 != 0 then
set udg_itemid5[udg_RN]=i5
set udg_ic[udg_RN]=udg_ic[udg_RN]+1
endif
if i6 != 0 then
set udg_itemid6[udg_RN]=i6
set udg_ic[udg_RN]=udg_ic[udg_RN]+1
endif
set udg_output[udg_RN]=output
endfunction
function CreateRecipe2 takes integer i1,integer i2,integer i3 returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_output[udg_RN]=i3
set udg_ic[udg_RN]=2
endfunction
// Creates a recipe that requires 2 items to combine into a new item. i3 is the combined item.
// Example: call CreateRecipe2('I000','I001','I002')
function CreateRecipe3 takes integer i1,integer i2,integer i3,integer i4 returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_itemid3[udg_RN]=i3
set udg_output[udg_RN]=i4
set udg_ic[udg_RN]=3
endfunction
// The same as CreateRecipe2 except this requires 3 items to combine. i4 is the combined item.
function CreateRecipe4 takes integer i1,integer i2,integer i3,integer i4,integer i5 returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_itemid3[udg_RN]=i3
set udg_itemid4[udg_RN]=i4
set udg_output[udg_RN]=i5
set udg_ic[udg_RN]=4
endfunction
// The same as CreateRecipe2 except this requires 4 items to combine. i5 is the combined item.
function CreateRecipe5 takes integer i1,integer i2,integer i3,integer i4,integer i5,integer i6 returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_itemid3[udg_RN]=i3
set udg_itemid4[udg_RN]=i4
set udg_itemid5[udg_RN]=i5
set udg_output[udg_RN]=i6
set udg_ic[udg_RN]=5
endfunction
// The same as CreateRecipe2 except this requires 5 items to combine. i6 is the combined item.
function CreateRecipe6 takes integer i1,integer i2,integer i3,integer i4,integer i5,integer i6,integer i7 returns nothing
set udg_RN=udg_RN+1
set udg_itemid1[udg_RN]=i1
set udg_itemid2[udg_RN]=i2
set udg_itemid3[udg_RN]=i3
set udg_itemid4[udg_RN]=i4
set udg_itemid5[udg_RN]=i5
set udg_itemid6[udg_RN]=i6
set udg_output[udg_RN]=i7
set udg_ic[udg_RN]=6
endfunction
// The same as CreateRecipe2 except this requires 6 items to combine. i7 is the combined item.
//===================================================================================================
// This function disassembles a recipe item to its original components.
function DisItem takes unit u,item it returns boolean
local integer c=GetItemUserData(it)
local item array newitem
local integer i=udg_ic[c]
if it != null then
if i <= 6-UnitInventoryCount(u)+1 and i > 0 then
set udg_RC=false
if udg_itemid2[c] != null then
set newitem[1]=CreateItem(udg_itemid1[c],GetUnitX(u),GetUnitY(u))
set newitem[2]=CreateItem(udg_itemid2[c],GetUnitX(u),GetUnitY(u))
endif
if udg_itemid3[c] != null then
set newitem[3]=CreateItem(udg_itemid3[c],GetUnitX(u),GetUnitY(u))
call UnitAddItem(u,newitem[3])
endif
if udg_itemid4[c] != null then
set newitem[4]=CreateItem(udg_itemid4[c],GetUnitX(u),GetUnitY(u))
call UnitAddItem(u,newitem[4])
endif
if udg_itemid5[c] != null then
set newitem[5]=CreateItem(udg_itemid5[c],GetUnitX(u),GetUnitY(u))
call UnitAddItem(u,newitem[5])
endif
if udg_itemid6[c] != null then
set newitem[6]=CreateItem(udg_itemid6[c],GetUnitX(u),GetUnitY(u))
call UnitAddItem(u,newitem[6])
endif
call RemoveItem(it)
call UnitAddItem(u,newitem[1])
call UnitAddItem(u,newitem[2])
set newitem[1]=null
set newitem[2]=null
set newitem[3]=null
set newitem[4]=null
set newitem[5]=null
set newitem[6]=null
set udg_RC=true
else
return false
endif
endif
return true
endfunction
//=======================================================================================================
//
//Main Recipe Function: Do not change unless you know what you are doing
//
//=======================================================================================================
function Recipe_Main takes nothing returns nothing
local item it
local integer i=0
local unit u=GetManipulatingUnit()
loop
exitwhen i==udg_RN
set i=i+1
if udg_RC == true then
if udg_ic[i] == 6 then
if HasItems(u,i) then
call RemoveItem(GetItem(u,udg_itemid1[i]))
call RemoveItem(GetItem(u,udg_itemid2[i]))
call RemoveItem(GetItem(u,udg_itemid3[i]))
call RemoveItem(GetItem(u,udg_itemid4[i]))
call RemoveItem(GetItem(u,udg_itemid5[i]))
call RemoveItem(GetItem(u,udg_itemid6[i]))
call DestroyEffect(AddSpecialEffectTarget(Recipe_Effect(),u,Recipe_AP()))
set it=CreateItem(udg_output[i],GetUnitX(u),GetUnitY(u))
call SetItemUserData(it,i) //Used for disassembling.
call UnitAddItem(u,it)
set i=udg_RN
endif
elseif udg_ic[i] == 5 then
if HasItems(u,i) then
call RemoveItem(GetItem(u,udg_itemid1[i]))
call RemoveItem(GetItem(u,udg_itemid2[i]))
call RemoveItem(GetItem(u,udg_itemid3[i]))
call RemoveItem(GetItem(u,udg_itemid4[i]))
call RemoveItem(GetItem(u,udg_itemid5[i]))
call DestroyEffect(AddSpecialEffectTarget(Recipe_Effect(),u,Recipe_AP()))
set it=CreateItem(udg_output[i],GetUnitX(u),GetUnitY(u))
call SetItemUserData(it,i) //Used for disassembling.
call UnitAddItem(u,it)
set i=udg_RN
endif
elseif udg_ic[i] == 4 then
if HasItems(u,i) then
call RemoveItem(GetItem(u,udg_itemid1[i]))
call RemoveItem(GetItem(u,udg_itemid2[i]))
call RemoveItem(GetItem(u,udg_itemid3[i]))
call RemoveItem(GetItem(u,udg_itemid4[i]))
call DestroyEffect(AddSpecialEffectTarget(Recipe_Effect(),u,Recipe_AP()))
set it=CreateItem(udg_output[i],GetUnitX(u),GetUnitY(u))
call SetItemUserData(it,i) //Used for disassembling.
call UnitAddItem(u,it)
set i=udg_RN
endif
elseif udg_ic[i] == 3 then
if HasItems(u,i) then
call RemoveItem(GetItem(u,udg_itemid1[i]))
call RemoveItem(GetItem(u,udg_itemid2[i]))
call RemoveItem(GetItem(u,udg_itemid3[i]))
call DestroyEffect(AddSpecialEffectTarget(Recipe_Effect(),u,Recipe_AP()))
set it=CreateItem(udg_output[i],GetUnitX(u),GetUnitY(u))
call SetItemUserData(it,i) //Used for disassembling.
call UnitAddItem(u,it)
set i=udg_RN
endif
elseif udg_ic[i] == 2 then
if HasItems(u,i) then
call RemoveItem(GetItem(u,udg_itemid1[i]))
call RemoveItem(GetItem(u,udg_itemid2[i]))
call DestroyEffect(AddSpecialEffectTarget(Recipe_Effect(),u,Recipe_AP()))
set it=CreateItem(udg_output[i],GetUnitX(u),GetUnitY(u))
call SetItemUserData(it,i) //Used for disassembling.
call UnitAddItem(u,it)
set i=udg_RN
endif
endif
endif
endloop
set it=null
set u=null
endfunction
function InitRecipe takes nothing returns nothing
set udg_RT=CreateTrigger()
set udg_RC=true
call TriggerRegisterAnyUnitEventBJ( udg_RT, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddAction(udg_RT,function Recipe_Main)
endfunction
//call this at map init.
//forced by WE
function InitTrig_Recipe takes nothing returns nothing
endfunction
// End Recipe
function Trig_Revive_Creeps_Actions takes nothing returns nothing
local integer CUSTOM
set CUSTOM = GetUnitUserData(GetDyingUnit())
call TriggerSleepAction( udg_Hostile_Revive_Time )
call CreateNUnitsAtLoc( 1, udg_Creep_Types[CUSTOM], Player(PLAYER_NEUTRAL_AGGRESSIVE), udg_Creep_Positions[CUSTOM], bj_UNIT_FACING )
call SetUnitUserData( GetLastCreatedUnit(), CUSTOM )
endfunction
//===========================================================================
function InitTrig_Revive_Creeps takes nothing returns nothing
set gg_trg_Revive_Creeps = CreateTrigger( )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Revive_Creeps, Player(PLAYER_NEUTRAL_AGGRESSIVE), EVENT_PLAYER_UNIT_DEATH )
call TriggerAddAction( gg_trg_Revive_Creeps, function Trig_Revive_Creeps_Actions )
endfunction
function Trig_Combine_Items_Conditions takes nothing returns boolean
if ( not ( GetItemCharges(GetManipulatedItem()) > 0 ) ) then
return false
endif
if ( not ( udg_Combine_Charged_Items == true ) ) then
return false
endif
return true
endfunction
function Trig_Combine_Items_Actions takes nothing returns nothing
local integer ITEMCOUNT
local integer ITEMLOOP
local integer CHARGES
local integer MAXIMUM
local item NEWITEM
local unit OURUNIT
set MAXIMUM = udg_Combine_Charges_Max
set ITEMCOUNT = 0
set ITEMLOOP = 0
set CHARGES = 0
set NEWITEM = GetManipulatedItem()
set OURUNIT = GetManipulatingUnit()
loop
exitwhen ITEMLOOP > 6
if ((GetItemTypeId(NEWITEM)) == (GetItemTypeId(UnitItemInSlotBJ(OURUNIT, ITEMLOOP)))) then
if ((GetItemCharges(UnitItemInSlotBJ(OURUNIT, ITEMLOOP)) + GetItemCharges(NEWITEM)) <= MAXIMUM) then
if not ( (UnitItemInSlotBJ(OURUNIT, ITEMLOOP)) == (NEWITEM)) then
set CHARGES = (GetItemCharges(UnitItemInSlotBJ(OURUNIT, ITEMLOOP))) + GetItemCharges(NEWITEM)
call SetItemCharges( UnitItemInSlotBJ(OURUNIT, ITEMLOOP), CHARGES )
call RemoveItem( NEWITEM )
set ITEMLOOP=7
endif
endif
endif
if ( ITEMLOOP < 7 ) then
set ITEMLOOP = ITEMLOOP + 1
endif
endloop
endfunction
//===========================================================================
function InitTrig_Combine_Charged_Items takes nothing returns nothing
set gg_trg_Combine_Charged_Items = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Combine_Charged_Items, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddCondition( gg_trg_Combine_Charged_Items, Condition( function Trig_Combine_Items_Conditions ) )
call TriggerAddAction( gg_trg_Combine_Charged_Items, function Trig_Combine_Items_Actions )
endfunction