//=======================================================================================================
// 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
Name | Type | is_array | initial_value |
AnuxiuzBoon | timer | No | |
AnuxiuzBoonWindow | timerdialog | No | |
AnuxiuzKiller | player | No | |
AnuxiuzSpawn | timer | No | |
CapturePointCloses | timer | No | |
CapturePointConverted | real | No | |
CapturePointOpen | boolean | No | |
CapturePointOpens | timer | No | |
CapturePointOwner | integer | No | |
CapturePointText | texttag | No | |
CapturePointUnit | unit | No | |
CapturePointWindow | timerdialog | No | |
CheckLoopEnd | boolean | No | |
CreepsGroup | group | No | |
CreepsTotal | integer | No | |
DaggerDashCount | real | No | |
DaggerDashUnit | unit | No | |
DamageBlockingAbility | abilcode | No | |
DamageEvent | real | No | |
DamageEventAmount | real | No | |
DamageEventExplodesUnit | boolean | No | |
DamageEventOverride | boolean | No | |
DamageEventPrevAmt | real | No | |
DamageEventSource | unit | No | |
DamageEventsWasted | integer | No | |
DamageEventTarget | unit | No | |
DamageEventTrigger | trigger | No | |
DamageEventType | integer | No | |
DamageModifierEvent | real | No | |
DamageTypeDOT | integer | No | |
DamageTypeRanged | integer | No | |
DamageTypeSpell | integer | No | |
DashCaster | unit | Yes | |
DashDamage | real | Yes | |
DashDistance | integer | Yes | |
DashGroup1 | group | No | |
DashGroup2 | group | No | |
DashGroup3 | group | No | |
DashInteger | integer | Yes | |
DashPoint3 | location | Yes | |
DashPoint4 | location | Yes | |
DashPoint5 | location | Yes | |
DashReal1 | real | Yes | |
DashReal2 | real | Yes | |
DashSpeed | real | Yes | |
DeathFromBelowEnemy | unit | No | |
DeathFromBelowLevel | integer | No | |
DeathFromBelowPoint | location | No | |
DeathFromBelowStar2 | location | No | |
DeathFromBelowStart | location | No | |
DeathFromBelowUnit | unit | No | |
DmgEvLife | real | No | |
DmgEvN | integer | No | |
DmgEvStack | unit | Yes | |
DmgEvTimer | timer | No | |
DmgTypPrev | integer | No | |
ExpCreepType | unitcode | Yes | |
ExpHeroGain | real | No | |
ExpHeroGainPerLevel | real | No | |
ExpHeroLevelDifferenceFactor | real | No | |
ExpUnitGain | integer | Yes | |
EyeItem | item | No | |
EyeOfQueenTimer | timer | No | |
EyeTimerWindow | timerdialog | No | |
ForcefulChargeGroup | group | No | |
GauntletGroup | group | No | |
GauntletLevel | integer | No | |
GraspCaster | unit | No | |
GraspCounter | integer | No | |
GraspGroup | group | No | |
GraspLevel | integer | No | |
GraspPoint | location | No | |
HammerCaster | unit | No | |
HammerUnit | unit | No | |
HarvestGroup | group | No | |
Heroes | unitcode | Yes | |
HeroesTotal | integer | No | |
HeroPicker | unit | Yes | |
ic | integer | Yes | |
itemid1 | integer | Yes | |
itemid2 | integer | Yes | |
itemid3 | integer | Yes | |
itemid4 | integer | Yes | |
itemid5 | integer | Yes | |
itemid6 | integer | Yes | |
JD_Angle | real | Yes | |
JD_Animations | string | Yes | |
JD_Counter | real | Yes | |
JD_Distances | real | Yes | |
JD_Effect | string | Yes | |
JD_Group | group | No | |
JD_HighSettings | real | Yes | |
JD_Integers | integer | Yes | |
JD_JumpHigh | real | Yes | |
JD_LevelOfAbility | integer | Yes | |
JD_Order | ordercode | Yes | |
JD_PickGroup | group | No | |
JD_ReachedDistance | real | Yes | |
JD_RealTimer | real | Yes | |
JD_SpeedUnits | real | Yes | |
JD_TempPoint | location | Yes | |
JD_TreesDestroy | boolean | Yes | |
JD_Unit | unit | Yes | |
JDA_Animation | string | No | |
JDA_AnimationSpeed | real | No | |
JDA_Collision | boolean | No | |
JDA_DestroyTrees_Dash | boolean | No | |
JDA_JumpHigh_Distance | real | No | |
JDA_LevelOfAbility | integer | No | |
JDA_SpecialEffect | string | No | |
JDA_Speed | real | No | |
JDA_TargetPoint | location | No | |
JDA_Unit | unit | No | |
JungleCampBig | rect | Yes | |
JungleCampFacing | rect | Yes | |
JungleCampRegion | rect | Yes | |
JungleCampRegionMax | integer | No | |
JungleCampsTotal | integer | No | |
JungleCreeps | unitcode | Yes | |
JungleCreepSpawnAmmount | integer | Yes | |
KB_Angle | real | Yes | |
KB_Casters | unit | Yes | |
KB_CountBuffs | integer | No | |
KB_DestroyTrees | boolean | Yes | |
KB_EffectCounter | integer | Yes | |
KB_EffectCounter2 | integer | Yes | |
KB_Effects_1 | string | Yes | |
KB_Effects_2 | string | Yes | |
KB_GeneralIntegers | integervar | Yes | |
KB_KnockbackedUnits | group | No | |
KB_Levels | integer | Yes | |
KB_MaxDistance | real | Yes | |
KB_ReachedDistance | real | Yes | |
KB_ReducedReal | real | No | |
KB_ReduceSpeedReal | real | Yes | |
KB_SpecificSpeed | real | Yes | |
KB_StartPositions | location | Yes | |
KB_TempPoint | location | Yes | |
KB_TempReal | real | No | |
KB_TotalKnockUnits | integer | No | |
KB_Units | unit | Yes | |
KBA_Caster | unit | No | |
KBA_DestroyTrees | boolean | No | |
KBA_DistancePerLevel | real | No | |
KBA_Level | integer | No | |
KBA_SpecialEffects | string | Yes | |
KBA_Speed | real | No | |
KBA_StartingPosition | location | No | |
KBA_TargetUnit | unit | No | |
KillingSpree | integer | Yes | |
LeapLevel | integer | No | |
LeapUnit | unit | Yes | |
MaxRunes | integer | No | |
MiragePos | location | No | |
MixedSpells | boolean | No | |
ModeSelected | boolean | No | |
Multiboard | multiboard | Yes | |
OmgSpellsNormal | abilcode | Yes | |
OmgSpellsNormalAmmount | integer | No | |
OmgSpellsNormalAmmountCount | integer | No | |
OmgSpellsUltAmmount | integer | No | |
OmgSpellsUltAmmountCount | integer | No | |
OmgSpellsUlts | abilcode | Yes | |
output | integer | Yes | |
PermaFrostStacks | integer | Yes | |
Player_Colors | string | Yes | |
PlayerAssists | integer | Yes | |
PlayerDeaths | integer | Yes | |
PlayerDenies | integer | Yes | |
PlayerHeroes | unit | Yes | |
PlayerKills | integer | Yes | |
PlayerLasthits | integer | Yes | |
PlayerNames | string | Yes | |
PlayersExpedition | force | No | |
PlayersIcecrown | force | No | |
PoisonedDaggerGroup | group | No | |
PoisonedDaggerLevel | integer | No | |
QueenAnneKiller | player | No | |
QueenAnneSpawn | timer | No | |
RC | boolean | No | |
ReelInCap | real | No | |
ReelInCaster | unit | No | |
ReelInDamage | real | No | |
ReelInEffect | string | No | |
ReelInLightning | lightning | Yes | |
ReelInLightningAmmount | integer | No | |
ReelInSpeed | real | No | |
RespawnTimer1 | timer | No | |
RespawnTimer2 | timer | No | |
RespawnTimer3 | timer | No | |
RespawnTimer4 | timer | No | |
RespawnTimer5 | timer | No | |
RespawnTimer6 | timer | No | |
RetributionGroup | group | No | |
RN | integer | No | |
RT | trigger | No | |
RuneItem | item | No | |
Runes | itemcode | Yes | |
Shockwave_Angle | real | No | |
Shockwave_Group | group | Yes | |
Shockwave_Point | location | Yes | |
SmitingWaveGroup | group | No | |
SpawnAnuxiuzWarriors | boolean | No | |
SpawnCaptains | timer | No | |
SpawnJungleCreeps | timer | No | |
SpawnSpiders | boolean | No | |
SpectralCount | integer | No | |
SpectralFormAdd | integer | No | |
SpectralFormCountMax | integer | No | |
SpectralFormLoop | timer | No | |
SpectralFormUnit | unit | No | |
SpikedBallLevel | integer | No | |
SpikedGroup | group | No | |
SweepingHurricaneUnit | unit | No | |
SweepingHurricaneVal | real | Yes | |
SweepingHurricanHit | group | No | |
Temp | integer | No | |
Temp_Int | integer | No | |
Temp_Pos | location | Yes | |
Temp_Real | real | Yes | |
Temp_Ugroup | group | No | |
TempUnit | unit | No | |
TimerWindow | timerdialog | Yes | |
TotalPlayers | integer | No | |
TPeffect1 | effect | Yes | |
TPeffect2 | effect | Yes | |
TPtarget | location | Yes | |
TrampleAoE | real | No | |
TrampleDamage | real | No | |
TrampleDamagePerLevel | real | No | |
TrampleEffect | string | No | |
TrampleGroup | group | No | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
UnitDamageRegistered | boolean | Yes | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitIndexLock | integer | Yes | |
WalkRegion | rect | Yes | |
WhirlpoolGroup | group | No | |
WhirlpoolTemp | location | No |