//TESH.scrollpos=2
//TESH.alwaysfold=0
// Map Header Custom Code
// SimError by Vexorian at wc3c.net
// Modified version
function IRS_SimError takes player p, string s returns nothing
local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cffffcc00" + s + "|r"
local sound error = CreateSoundFromLabel ("InterfaceError", false, false, false, 10, 10)
if GetLocalPlayer() == p then
call ClearTextMessages ()
call DisplayTimedTextToPlayer (p, 0.52, 0.96, 2.00, msg)
call StartSound (error)
endif
endfunction
function IRS_SimNotify takes player p, string s returns nothing
local string msg = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n|cffffcc00" + s + "|r"
local sound notify = CreateSoundFromLabel("Hint", false, false, false, 10, 10)
if GetLocalPlayer() == p then
call ClearTextMessages()
call DisplayTimedTextToPlayer (p, 0.52, 0.96, 2.00, msg)
call StartSound (notify)
endif
endfunction
function SaveMyLightning takes real x1, real y1, real z1, real x2, real y2, real z2 returns nothing //x1 = dummy's x, y1 = dummy's y, z1 = starting height, x2 = Center's x, y2 = Center's y, z2 = maxheight
call SaveLightningHandle( udg_PlasmaDome_Hashtable, GetHandleId(udg_PlasmaDome_TmpHandle), ( ( udg_PlasmaDome_Loop + udg_PlasmaDome_TmpInteger2 ) * 2 ), AddLightningEx( udg_PlasmaDome_Lightning_Type, true, x1, y1, z1, x2, y2, z2 ) )
endfunction
function MoveMyLightning takes real x1, real y1, real z1, real x2, real y2, real z2 returns nothing //x1 = dummies' x, y1 = dummies' y, z1 = dummies' height, x2 = Center's x, y2 = Center's y, z2 = maxheight
if LoadBoolean( udg_PlasmaDome_Hashtable, GetHandleId( udg_PlasmaDome_TmpHandle ), StringHash( "Rise" ) ) == true then
call MoveLightningEx( LoadLightningHandle( udg_PlasmaDome_Hashtable, GetHandleId( udg_PlasmaDome_TmpHandle2 ), ( ( udg_PlasmaDome_Loop + udg_PlasmaDome_TmpInteger ) * 2 ) ), true, x1, y1, (z1 + GetLocationZ( udg_PlasmaDome_TmpPoint2 ) + 40.00 ), x2, y2, z2 )
else
call MoveLightningEx( LoadLightningHandle( udg_PlasmaDome_Hashtable, GetHandleId( udg_PlasmaDome_TmpHandle2 ), ( ( udg_PlasmaDome_Loop + udg_PlasmaDome_TmpInteger ) * 2 ) ), true, x1, y1, 0.00, x2, y2, z2 )
endif
endfunction
function Error_Brainwash takes player ForPlayer, string msg returns nothing
local sound error = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10)
if GetLocalPlayer() == ForPlayer then
call ClearTextMessages()
call DisplayTimedTextToPlayer( ForPlayer , 0.52 , - 1.00 , 2.00 , "|cffffcc00" + msg + "|r" )
call StartSound(error)
endif
endfunction
Name | Type | is_array | initial_value |
A_AoE | real | No | |
A_AoE2 | real | No | |
a_BarbarianAbility1 | itemcode | Yes | |
a_BarbarianAbility2 | itemcode | Yes | |
a_BarbarianAbility3 | itemcode | Yes | |
a_BarbarianAbility4 | itemcode | Yes | |
A_BarbarianInventory | unit | No | |
A_BarbarianSelected | integer | No | |
A_Bool | boolean | No | |
A_Bool2 | boolean | No | |
A_CalculatePlayerLevels | integer | No | |
A_CreepXP | integer | No | |
A_Damage | real | No | |
a_DarkGreenUnits | group | No | |
A_Duration | real | No | |
A_EnterLvl10to12 | integer | No | |
A_EnterLvl12to14 | integer | No | |
A_EnterLvl15to17 | integer | No | |
A_EnterLvl18to20 | integer | No | |
A_EnterLvl1to3 | integer | No | |
A_EnterLvl20 | integer | No | |
A_EnterLvl2to4 | integer | No | |
A_EnterLvl4to7 | integer | No | |
A_EnterLvl8to10 | integer | No | |
A_EnterLvlBrutalDeviantArea | integer | No | |
a_EvilForcesGroup | group | No | |
a_FireSavantAbility1 | itemcode | Yes | |
a_FireSavantAbility2 | itemcode | Yes | |
a_FireSavantAbility3 | itemcode | Yes | |
a_FireSavantAbility4 | itemcode | Yes | |
A_FireSavantInventory | unit | No | |
A_FireSavantSelected | integer | No | |
a_HeroEntersRegion | force | No | |
A_HeroInventory | unit | Yes | |
A_Int | integer | No | |
A_ItemAcquiredCharge | integer | No | |
A_ItemAcquiredSplit | integer | No | |
a_KeepBackpackAway | location | No | |
A_MultboardLumberUpdate | integer | No | |
A_Multiboard_Init | integer | No | |
a_myAncientTreasure | location | No | |
a_myApokalipsCurrentLoc | location | No | |
a_myApokalipsLoc | location | No | |
a_myBanditLordAttacker | location | No | |
a_myBossSpawnLoc | location | No | |
a_myCameraZoomcommand | force | No | |
a_myCommandscommand | force | No | |
a_myCreepSpawnLocEast | location | No | |
a_myCreepSpawnLocExtra | location | No | |
a_myCreepSpawnLocNorth | location | No | |
a_myCreepSpawnLocWest | location | No | |
a_myDarkPriestAttacker | location | No | |
a_myFelOrcAttacker | location | No | |
a_myHeroSpawnLoc | location | No | |
a_myHostileCreepRemove | group | No | |
a_myHostileSpawnLoc | location | No | |
a_myItemDropLocWrongClass | location | No | |
a_myItemDropLocWrongLvl | location | No | |
a_myLocation | location | No | |
a_myPlayerGroupShopBuying | force | No | |
a_myPlayerGrpItemDropWrongLvl | force | No | |
a_myPlayerUnit | unit | No | |
a_myPlayrGrpItemDropWrongClass | force | No | |
a_myPositionCallPackHorse | location | No | |
a_myPositionTombStone1 | location | No | |
a_myPositionTombStone2 | location | No | |
a_myPositionTombStone3 | location | No | |
a_myPositionTombStone4 | location | No | |
a_myPositionTombStone5 | location | No | |
a_myPositionTombStone6 | location | No | |
a_myPositionTombStone7 | location | No | |
a_myPositionTombStone8 | location | No | |
a_myRewardSpot | location | No | |
a_myStartCameraLoc | location | No | |
A_MysticRangerInventory | unit | No | |
A_MysticRangerSelected | integer | No | |
a_myTextLocation | location | No | |
a_myThrone | rect | No | |
a_myThroneRandomPoint | location | No | |
a_myTowerDefendLoc | location | No | |
a_myUltimatesDropLoc | location | No | |
a_myUnitGroup | group | No | |
a_myUnitGroupBrown | group | No | |
a_myUnitGroupRepick | group | No | |
a_myWaterCasterLoc | location | No | |
a_OmegaBeamLoc | location | No | |
a_OmegaKnightLoc | location | No | |
a_OmegaKnightLocBeam | location | No | |
a_OmegaKnightLocBeamTarget | location | No | |
a_PaladinAbility1 | itemcode | Yes | |
a_PaladinAbility2 | itemcode | Yes | |
a_PaladinAbility3 | itemcode | Yes | |
a_PaladinAbility4 | itemcode | Yes | |
A_PaladinSelected | integer | No | |
a_panCamNewHero | location | No | |
A_PickedSelection | integer | No | |
A_PotionGive | integer | No | |
a_PriestessAbility1 | itemcode | Yes | |
a_PriestessAbility2 | itemcode | Yes | |
a_PriestessAbility3 | itemcode | Yes | |
a_PriestessAbility4 | itemcode | Yes | |
A_PriestessInventory | unit | No | |
A_PriestessSelected | integer | No | |
a_PsybladeAbility1 | itemcode | Yes | |
a_PsybladeAbility2 | itemcode | Yes | |
a_PsybladeAbility3 | itemcode | Yes | |
a_PsybladeAbility4 | itemcode | Yes | |
A_PsybladeInventory | unit | No | |
A_PsybladeSelected | integer | No | |
a_randomPointThroneEast | location | No | |
a_randomPointThroneNorth | location | No | |
a_randomPointThroneWest | location | No | |
a_RangerAbility1 | itemcode | Yes | |
a_RangerAbility2 | itemcode | Yes | |
a_RangerAbility3 | itemcode | Yes | |
a_RangerAbility4 | itemcode | Yes | |
A_Real | real | No | |
A_Real2 | real | No | |
A_RestrictItemtoLVL | integer | No | |
A_SoldierRespawn | integer | No | |
A_SoldierSurviveCount | integer | No | |
a_SpartanWarriorPosition | location | No | |
A_Speed | real | No | |
a_tombStoneStartUp | location | No | |
A_TowersStanding | integer | No | |
a_TricksterAbility1 | itemcode | Yes | |
a_TricksterAbility2 | itemcode | Yes | |
a_TricksterAbility3 | itemcode | Yes | |
a_TricksterAbility4 | itemcode | Yes | |
A_TricksterInventory | unit | No | |
A_TricksterSelected | integer | No | |
A_UType | unitcode | No | |
a_valorFixSpellAdd | itemcode | Yes | |
a_wardpointspot | location | No | |
Abil_SheepStrike_Caster | unit | No | |
AfAbilityStun | abilcode | No | |
Aftershock | abilcode | No | |
Agility | real | No | |
Amount | real | No | |
AmountofPlayersPlaying | integer | No | |
AncientSasquatch_Amount | integer | No | |
AncientTreasureDropChance | integer | No | |
Angle | real | No | |
Announcer_Encourage | sound | Yes | |
Announcer_RunePowerup | sound | Yes | |
Announcer_WaveComplete | sound | Yes | |
Apokalips | unit | No | |
ArmorMetalUnsuccessful | boolean | No | |
ArmorsThatUpgrade | itemcode | Yes | |
ArmorsUpgradingBase | itemcode | Yes | |
ArmorUnsuccessful | boolean | No | |
AssasinAmount | integer | No | |
Atlas | unit | No | |
Atlas_castBoulder | timer | No | |
Atlas_dmgGroup | group | No | |
Atlas_loc | location | No | |
Atlas_shockwavepoint | location | No | |
AtlasEarthShock_group | group | No | |
AtlasIS_Angle | real | Yes | |
AtlasIS_Boolean | boolean | Yes | |
AtlasIS_Dummy | unit | Yes | |
AtlasIS_Hero | unit | Yes | |
AtlasIS_Index | integer | Yes | |
AtlasIS_Loc | location | Yes | |
AtlasIS_Speed | real | Yes | |
AtlasIS_Wait | real | Yes | |
Atlast_dmggroup | group | No | |
Atlast_loc | location | No | |
Atlastimer | integer | No | |
AttackedTimer | timer | No | |
AverageHeroLevel | integer | No | |
B_i | integer | No | |
B_P | location | Yes | |
BanditLord_Amount | integer | No | |
bankColor1 | string | No | |
bankColor2 | string | No | |
bankColor3 | string | No | |
bankDialog | dialog | Yes | |
bankDialogButton | button | Yes | |
bankHero | unit | Yes | |
bankInt1 | integer | No | |
bankInt2 | integer | No | |
bankInt3 | integer | No | |
bankIsDepositing | boolean | Yes | |
bankItemCharges | integer | Yes | |
bankItemName | string | Yes | |
bankItemsPerPage | integer | No | |
bankLoop | integervar | No | |
bankPageAmount | integer | No | |
bankPlayerCurrentPage | integer | Yes | |
bankPlayerId | integer | No | |
bankPlayerItems | integer | Yes | |
bankPlayerPages | integer | Yes | |
bankRememberPage | boolean | Yes | |
bankStoredItem | item | Yes | |
BattleArenaSpawnLocation | rect | Yes | |
BattleArenaTimer | timer | No | |
BattlePointsRewardTimer | timer | No | |
BattlePtsTimerWindow | timerdialog | No | |
BCCasterLoc | location | No | |
BCHandleID | integer | No | |
BCSFX | effect | No | |
BCUnit | unit | Yes | |
BF_DefautInterval | integer | No | |
Blast | location | Yes | |
Blaster | unit | Yes | |
Blastt | group | No | |
BloodRage | hashtable | No | |
BonusValorTriggerGO | trigger | Yes | |
BPoint | location | Yes | |
BrainWash_Loc | location | Yes | |
Brainwash_Timer1 | timer | No | |
Brainwash_Timer10 | timer | No | |
Brainwash_Timer2 | timer | No | |
Brainwash_Timer3 | timer | No | |
Brainwash_Timer4 | timer | No | |
Brainwash_Timer5 | timer | No | |
Brainwash_Timer6 | timer | No | |
Brainwash_Timer7 | timer | No | |
Brainwash_Timer8 | timer | No | |
Brainwash_Timer9 | timer | No | |
BrainWashed_Units | group | Yes | |
Brainwasher | force | No | |
BrutalDeviant | unit | No | |
BrutalDeviantArea_isOccupied | boolean | No | |
BrutalDeviantSpawn | location | No | |
Builder | unit | Yes | |
BurstLightning_ProcChance | integer | No | 35 |
BurstRune_userLoc | location | No | |
CAcceleration | real | Yes | |
CAccelerationRate | real | No | |
CAngle | real | Yes | |
CAnimSpeed | real | Yes | |
CannotBuyItem | boolean | Yes | |
CannotGetItem | boolean | Yes | |
CArray | integer | No | |
Caster | unit | No | |
CasterClass_Items | itemcode | Yes | |
CasterLoc | location | No | |
CCaster | unit | Yes | |
CCasterAGI | real | No | |
CCasterCheck | unit | No | |
CCasterPos | location | No | |
CCasterPosCheck | location | No | |
CDamage | real | Yes | |
CDistance | real | Yes | |
CEndOfCharge | boolean | Yes | |
CenterofHeroSpawnMainTown | location | No | |
CenterofSoldierCollection2 | location | No | |
ChancetoIncreaseValor | integer | No | |
chaospherecastinggroup | group | No | |
chaospherechance | real | Yes | |
chaosphereemptyugroup | group | No | |
chaospherehashtable | hashtable | No | |
chaospherenumbereffects | integer | No | |
chaospherepickedunit | handle | No | |
chaospheretargetgroup | group | No | |
chaospheretotalchance | real | No | |
chaosSphereInteger | integer | No | |
CLevel | integer | Yes | |
CLoop | integervar | No | |
CMovePoint | location | No | |
CoB_AlreadySlide | group | Yes | |
CoB_Caster | unit | Yes | |
CoB_DamageDealt | real | Yes | |
CoB_SlideGroup | group | No | |
CoB_Times | integer | Yes | |
Commander | unit | No | |
Conquer_HealAmount | real | Yes | |
Conquer_Value | integer | Yes | |
Convert_Quest1Reward_Integer | integer | No | |
Convert_Quest2Reward_Integer | integer | No | |
Convert_Quest3Reward_Integer | integer | No | |
Convert_Quest4Reward_Integer | integer | No | |
Convert_Quest5Reward_Integer | integer | No | |
Convert_Quest6Reward_Integer | integer | No | |
Convert_Quest7Reward_Integer | integer | No | |
count_CustomUnits79 | integer | No | |
count_CustomUnits89 | integer | No | |
count_CustomUnits99 | integer | No | |
CP | integervar | No | |
CP_AOE | real | Yes | |
CP_Damage | real | Yes | |
CP_Distance | real | Yes | |
CP_Group | group | No | |
CP_Group_D | group | Yes | |
CP_Hero | unit | Yes | |
CP_HiddenItems | item | Yes | |
CP_HiddenItemsIndex | integer | No | |
CP_Item | item | No | |
CP_Jumps | integer | Yes | |
CP_P_Unit | location | Yes | |
CP_Point | location | Yes | |
CP_PointIsWalkable | boolean | No | |
CP_PointWalkable | location | No | |
CP_Rect | rect | No | |
CP_SpecialEffect | string | Yes | |
CP_Speed | real | Yes | |
CP_Target | unit | Yes | |
CP_Times | integer | No | |
CP_Unit | unit | Yes | |
CreatedPlayerHero | unit | Yes | |
CreatedPlayerPackHorse | unit | Yes | |
CreepArmorDrop | itemcode | Yes | |
CreepDyingSpotForEXP | location | No | |
CreepDyingSpotForGold | location | No | |
CreepGoldDropChance | integer | No | |
CreepItemDrop | itemcode | Yes | |
CreepItemDropChance | integer | No | |
CreepItemDropLegendary | itemcode | Yes | |
CreepItemDropMythical | itemcode | Yes | |
CreepItemDropPosition | location | No | |
CreepItemDropRare | itemcode | Yes | |
CreepItemDropUncommon | itemcode | Yes | |
CreepItemGoldDropPosition | location | No | |
creeplevel | integer | Yes | |
creeppath | location | No | |
creeppathThrone | unit | No | |
CreepValorChanceSpot | location | No | |
creepXP | integer | Yes | |
CreepXPUnits | group | No | |
CTarget | unit | Yes | |
CTargetCheck | unit | No | |
CTargetPos | location | No | |
CTargetPosCheck | location | No | |
CWait | real | Yes | |
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 | |
DamagePointReward | timer | No | |
DamageSourceInt | integer | No | |
DamageTest | real | No | |
DamageTypeDOT | integer | No | |
DamageTypeRanged | integer | No | |
DamageTypeSpell | integer | No | |
DarkBlessing | unit | No | |
DarkPriestUnitGroup | group | No | |
DarkTrollShadowPriest_Amount | integer | No | |
DarkTrollTrapper_Amount | integer | No | |
DE_AOE | real | Yes | |
DE_BaseVelocity | real | Yes | |
DE_CurrentDeathTimer | real | Yes | |
DE_CurrentDuration | real | Yes | |
DE_CurrentEffect | effect | Yes | |
DE_CurrentShardDelay | real | Yes | |
DE_CurrentZ | real | Yes | |
DE_Duration | real | Yes | |
DE_GravitatedShard | group | No | |
DE_HealthDamage | real | Yes | |
DE_LastNode | integer | No | |
DE_ManaDamage | real | Yes | |
DE_MapMaxX | real | No | |
DE_MapMaxY | real | No | |
DE_MapMinX | real | No | |
DE_MapMinY | real | No | |
DE_Mass | real | Yes | |
DE_NextNode | integer | Yes | |
DE_NodeNumber | integer | No | |
DE_OriginalCaster | unit | Yes | |
DE_Portal | unit | Yes | |
DE_PortalHeight | real | Yes | |
DE_PortalX | real | Yes | |
DE_PortalY | real | Yes | |
DE_PortalZ | real | Yes | |
DE_PrevNode | integer | Yes | |
DE_Radius | real | Yes | |
DE_RecycleableNodes | integer | No | |
DE_RecycleNodes | integer | Yes | |
DE_ShardAOE | real | Yes | |
DE_ShardScale | real | Yes | |
DE_SpawnRate | real | Yes | |
DE_SpellCounter | integer | No | |
DE_StageID | integer | Yes | |
DE_TempGroup | group | No | |
DE_Unit | unit | Yes | |
DE_XVelocity | real | Yes | |
DE_YVelocity | real | Yes | |
DE_ZLoc | location | No | |
DE_ZVelocity | real | Yes | |
DeadHero | unit | Yes | |
DemoVelocity | real | No | |
Destroyer | unit | No | |
Devastate_Boolean | boolean | Yes | |
Devastate_Cstr | unit | Yes | |
Devastate_CstrPos | location | Yes | |
Devastate_Damage | real | Yes | |
Devastate_DisCalc1 | real | Yes | |
Devastate_DisCount | real | Yes | |
Devastate_DmgGroup | group | No | |
Devastate_Index | integer | No | |
Devastate_Loc | location | Yes | |
Devastate_Loop | integervar | No | |
Devastate_Loop2 | integervar | No | |
Devastate_MUI | integer | No | |
Devastate_PreLoop | integer | No | |
Devastate_SafeGroup | group | Yes | |
Devastate_SFX1 | effect | Yes | |
Devastate_SFX_Loop1 | integervar | No | |
Devastate_Speed | real | Yes | |
Devastate_TPOABC | location | Yes | |
Devi | group | No | |
Devi2 | group | No | |
DeviantHashtable | hashtable | No | |
DevinePoint | location | Yes | |
didSpellCast | boolean | No | |
DLT_d | destructable | Yes | |
DLT_destructible | destructable | No | |
DLT_dyn_index | integer | No | |
DLT_iis | boolean | Yes | |
DLT_index | integer | Yes | |
DLT_is | boolean | No | |
DLT_ld | real | Yes | |
DLT_life_duration | real | No | |
DmgEvLife | real | No | |
DmgEvN | integer | No | |
DmgEvStack | unit | Yes | |
DmgEvTimer | timer | No | |
DmgTypPrev | integer | No | |
DragonScrollAmount | integer | No | |
DragonStoneAmount | integer | No | |
DreadLord | unit | No | |
DreadLordAttacker | unit | No | |
DummyUnits | unit | Yes | |
EarthArmorCaster | unit | No | |
EarthArmour | group | No | |
EchoSlam | abilcode | No | |
EG | group | Yes | |
ElderSasquatch_Amount | integer | No | |
Enchant_Totem | abilcode | No | |
EnemiesOnMap | group | No | |
Enemy_Dying_Position | location | No | |
EnemySpawnArea | rect | Yes | |
ESC_Group | group | No | |
ESC_Loc | location | No | |
ESCasterDummy | unitcode | No | |
ESDamage | abilcode | No | |
ET_Spellbook | abilcode | No | |
EvilTiderunner_Group | group | No | |
EW_Integer | integervar | No | |
EW_Loop_Number | integer | No | |
EW_Target_Position | location | No | |
EW_Ward_Position | location | No | |
ExperienceGroup | force | No | |
EXPGain | integer | No | |
EXPGain_PlayerGrp | group | No | |
ExplosionOfLight_Caster | unit | Yes | |
ExplosionOfLight_ChannelBar | unit | Yes | |
ExplosionOfLight_SFX | effect | Yes | |
ExplosiveTreat_Group | group | Yes | |
ExplosiveTreat_Loc | location | No | |
F_Integers | integer | Yes | |
F_ReachedFading | real | Yes | |
F_Time | real | Yes | |
F_Unit | unit | Yes | |
FA_Time | real | No | |
FA_Unit | unit | No | |
FadeSystemGroup | group | No | |
FadeSystemHash | hashtable | No | |
FadeUnitKey | integer | No | |
FakeDeath_Caster | unit | Yes | |
FakeDeath_CasterLoc | location | Yes | |
FakeDeath_NukerTimer1 | timer | No | |
FakeDeath_NukerTimer2 | timer | No | |
FakeDeath_NukerTimer3 | timer | No | |
FakeDeath_NukerTimer4 | timer | No | |
FakeDeath_NukerTimer5 | timer | No | |
FakeDeath_NukerTimer6 | timer | No | |
FakeDeath_NukerTimer7 | timer | No | |
FakeDeath_NukerTimer8 | timer | No | |
FakeDeath_Timer1 | timer | No | |
FakeDeath_Timer2 | timer | No | |
FakeDeath_Timer3 | timer | No | |
FakeDeath_Timer4 | timer | No | |
FakeDeath_Timer5 | timer | No | |
FakeDeath_Timer6 | timer | No | |
FakeDeath_Timer7 | timer | No | |
FakeDeath_Timer8 | timer | No | |
FatalSword_Caster | unit | Yes | |
FatalSword_CasterPos | location | Yes | |
FatalSword_ChannelBar | unit | Yes | |
FatalSword_Dummy | unit | Yes | |
FatalSword_Target | unit | Yes | |
FatalSword_TargetPos | location | Yes | |
FB_Ability | abilcode | No | |
FB_AoE | real | Yes | |
FB_Dmg | real | Yes | |
FB_Dummies | unitcode | Yes | |
FB_Dummy_Ability | abilcode | No | |
FB_Fx_Blow | string | No | |
FB_Fx_Missile | string | No | |
FB_Fx_Split | string | No | |
FB_Group | group | No | |
FB_HA | hashtable | No | |
FB_MissileSpeed | real | Yes | |
FB_Random_Splitting | boolean | No | |
FB_Spread_Arrows | integer | Yes | |
FB_SpreadAoE | real | Yes | |
FB_SpreadDmg | real | Yes | |
FB_SpreadMissileSpeed | real | Yes | |
FelOrcGrunt_Amount | integer | No | |
fi | integer | No | |
FI_Angle | real | Yes | |
FI_AnimSpeed | real | Yes | |
FI_DefaultHeight | real | No | |
FI_EffectA | string | No | |
FI_EffectB | string | No | |
FI_FallHeight | real | No | |
FI_Height | real | Yes | |
FI_Hero | unit | Yes | |
FI_Max | integer | No | |
FI_Sound | string | No | |
FI_Vp | real | Yes | |
FI_Vz | real | Yes | |
FI_z | real | Yes | |
FiCustomValue | integer | No | |
FiDestructible | destructable | Yes | |
FiDummyGroup | group | No | |
fiendGroup | group | No | |
FieryMenace | unit | No | |
FieryMenace_loc | location | No | |
FieryMenace_tempgroup | group | No | |
FieryMenaceCAST_loc | location | No | |
FiRealDistance | real | No | |
Firebolt_CasterINT | integer | Yes | |
Fissure | abilcode | No | |
FissureDestructible | destructablecode | No | |
FiTargetPoint | location | No | |
FixSpellPowerEquipping | integer | Yes | |
FlyingHeight | real | No | |
FlyingMachineGroup | group | No | |
FlyingMachinePosition | location | No | |
FS_HashTable | hashtable | No | |
FSBlue | real | No | |
FSEnd | real | No | |
FSFadeIn | boolean | No | |
FSGreen | real | No | |
FSRed | real | No | |
FSSpeed | real | No | |
FSStart | real | No | |
FSStartOpacity | real | No | |
FSTinted | boolean | No | |
FSUnit | unit | No | |
g | real | No | |
GameMessages | string | Yes | |
GDD__Integers | integer | Yes | |
GDD__LeftMapGroup | group | No | |
GDD__TriggerArray | trigger | Yes | |
GDD__UnitArray | unit | Yes | |
GDD_Damage | real | No | |
GDD_DamagedUnit | unit | No | |
GDD_DamageSource | unit | No | |
GDD_Event | real | No | |
GenericBoolean | boolean | No | |
GenericString | string | No | |
Ghoul_Amount | integer | No | |
ghoulGroup | group | No | |
GodSpeed_Effect | unit | Yes | |
GodSpeed_Timer1 | timer | No | |
GodSpeed_Timer10 | timer | No | |
GodSpeed_Timer2 | timer | No | |
GodSpeed_Timer3 | timer | No | |
GodSpeed_Timer4 | timer | No | |
GodSpeed_Timer5 | timer | No | |
GodSpeed_Timer6 | timer | No | |
GodSpeed_Timer7 | timer | No | |
GodSpeed_Timer8 | timer | No | |
GodSpeed_Timer9 | timer | No | |
Gold_Value | integer | No | |
goldCoinDrop | itemcode | Yes | |
GoldGain | integer | No | |
GoldGain2 | integer | No | |
GoldGain_PlayerGrp | group | No | |
GoldGainingPlayers | force | No | |
GP_Back | integer | Yes | |
GP_BackToBase | integer | Yes | |
GP_Distance | real | No | |
GP_Engage | boolean | Yes | |
GP_EngageWhileTraveling | boolean | No | |
GP_Fac | real | Yes | |
GP_FacingAngle | real | No | |
GP_GuardingGroup | group | No | |
GP_GuardingUnit | unit | No | |
GP_GuardWhere | location | No | |
GP_Index | integer | No | |
GP_MinimumDelayBackToBase | integer | No | |
GP_MinimumPerimeter | real | No | |
GP_Per | real | Yes | |
GP_Perimeter | real | No | |
GP_TempGroup | group | No | |
GP_U | unit | Yes | |
GP_UI | integer | No | |
GP_X | real | Yes | |
GP_Y | real | Yes | |
group | group | No | |
GroupBC | group | No | |
GroupStar | group | No | |
GroupVar10 | group | No | |
GS_Angle | real | No | |
GS_CurrentDamage | real | No | |
GS_CurrentRange | real | No | |
GS_Damage | real | No | |
GS_EventGroup | group | No | |
GS_Hashtable | hashtable | No | |
GS_Loc | location | Yes | |
GS_Timer | integer | No | |
GS_Units | group | No | |
GS_VictimGroup | group | Yes | |
GuardPatrolPoints | integer | No | |
GuardPatrolPoints2 | integer | No | |
GuardPoints | rect | Yes | |
HandleID | integer | No | |
Happyness_SFX | effect | Yes | |
has_BarbarianSpellA | boolean | Yes | |
has_BarbarianSpellB | boolean | Yes | |
has_BarbarianSpellC | boolean | Yes | |
has_BrazierOfGainfulMovement | boolean | Yes | |
has_FireSavantSpellA | boolean | Yes | |
has_FireSavantSpellB | boolean | Yes | |
has_FireSavantSpellC | boolean | Yes | |
has_MysticRangerSpellA | boolean | Yes | |
has_MysticRangerSpellB | boolean | Yes | |
has_MysticRangerSpellC | boolean | Yes | |
has_PaladinSpellA2 | boolean | Yes | |
has_PaladinSpellA3 | boolean | Yes | |
has_PaladinSpellA4 | boolean | Yes | |
has_PaladinSpellA5 | boolean | Yes | |
has_PaladinSpellB2 | boolean | Yes | |
has_PaladinSpellB3 | boolean | Yes | |
has_PaladinSpellB4 | boolean | Yes | |
has_PaladinSpellB5 | boolean | Yes | |
has_PaladinSpellC2 | boolean | Yes | |
has_PaladinSpellC3 | boolean | Yes | |
has_PaladinSpellC4 | boolean | Yes | |
has_PaladinSpellC5 | boolean | Yes | |
has_PriestessSpellA | boolean | Yes | |
has_PriestessSpellB | boolean | Yes | |
has_PriestessSpellC | boolean | Yes | |
has_PsybladeSpellA | boolean | Yes | |
has_PsybladeSpellB | boolean | Yes | |
has_PsybladeSpellC | boolean | Yes | |
has_ScorchedMedallion | boolean | Yes | |
has_ShatteringDestiny | boolean | Yes | |
has_TricksterSpellA | boolean | Yes | |
has_TricksterSpellB | boolean | Yes | |
has_TricksterSpellC | boolean | Yes | |
has_VileScrollofAthos | boolean | Yes | |
has_VoulgeofSwiftDeath | boolean | Yes | |
has_WealthofAges | boolean | Yes | |
hasBeenRevived | boolean | Yes | |
Hashtable | hashtable | No | |
hasPowerBurst | unit | No | |
hasValorEmblem | boolean | Yes | |
HC_Angle | real | No | |
HC_Aoe | real | Yes | |
HC_AoeBase | real | No | |
HC_AoePerLevel | real | No | |
HC_BlastCap | real | No | |
HC_BlastDistance | real | Yes | |
HC_BlastDistanceBase | real | No | |
HC_BlastDistanceMultiplyer | real | No | |
HC_BlastSpeed | real | No | |
HC_BurnSFX | string | No | |
HC_Caster | unit | No | |
HC_ConditionConfig | boolean | Yes | |
HC_Core | unit | Yes | |
HC_CurrentAngle | real | Yes | |
HC_CurrentBlastDistance | real | Yes | |
HC_CurrentHeight | real | Yes | |
HC_CurrentMagnetism | real | No | |
HC_CurrentSunDistance | real | Yes | |
HC_Distance | real | Yes | |
HC_DummyExpirationTimers | real | No | |
HC_DummyType | unitcode | No | |
HC_EffectScalingBlast | real | No | |
HC_EffectScalingOrbs | real | No | |
HC_EffectScalingSun | real | No | |
HC_EffectScalingWind | real | No | |
HC_EffectZBlast | real | No | |
HC_EffectZOrbs | real | No | |
HC_EffectZSun | real | No | |
HC_EffectZWind | real | No | |
HC_ExplosionAOE | real | No | |
HC_ExplosionDamage | real | Yes | |
HC_ExplosionDamageBase | real | No | |
HC_ExplosionSFX | string | No | |
HC_FireOrbSFX | string | No | |
HC_FireOrbSpinSpeed | real | No | |
HC_HeightMultiplyer | real | No | |
HC_Index | integervar | No | |
HC_MagnetismCap | real | No | |
HC_MagnetismDistanceMultiplyer | real | No | |
HC_MagnetismStrength | real | Yes | |
HC_MagnetismStrengthBase | real | No | |
HC_MagnetismStrengthPerLevel | real | No | |
HC_MaxHeight | real | Yes | |
HC_MaxIndex | integer | No | |
HC_OrbCountBase | integer | No | |
HC_OrbCountPerLevel | integer | No | |
HC_OrbDistance | real | No | |
HC_OriginalCaster | unit | Yes | |
HC_OwningPlayer | player | Yes | |
HC_SecondaryIndex | integervar | No | |
HC_SpecialEffect | effect | Yes | |
HC_Spell | abilcode | No | |
HC_StageID | integer | Yes | |
HC_SunSFX | string | No | |
HC_SunSpeed | real | No | |
HC_TempGroup | group | No | |
HC_TempInteger | integer | No | |
HC_TempInteger2 | integer | No | |
HC_TempPoint | location | No | |
HC_TempPoint2 | location | No | |
HC_TempReal | real | No | |
HC_TempUnit | unit | No | |
HC_TempUnit2 | unit | No | |
HC_TempX | real | No | |
HC_TempY | real | No | |
HC_TempZ | real | No | |
HC_UnitIndex | unit | Yes | |
HC_WindCountBase | integer | No | |
HC_WindCountPerLevel | integer | No | |
HC_WindDistance | real | No | |
HC_WindSFX | string | No | |
HC_WindSpinSpeed | real | No | |
HCS_Ange | real | Yes | |
HCS_Caster | unit | Yes | |
HCS_Check | boolean | Yes | |
HCS_Damage | real | Yes | |
HCS_Distance | real | Yes | |
HCS_Integers | integer | Yes | |
HCS_Interval | real | Yes | |
HCS_Speed | real | Yes | |
HCS_Timer | real | Yes | |
HealerRodPower | real | Yes | |
HealthBar_Left | string | Yes | |
HealthBar_Middle | string | Yes | |
HealthBar_Right | string | Yes | |
HealthBarTrigger | trigger | Yes | |
HealthGain_NeatherBall | integer | No | |
HealthOfTombstone | real | No | |
Hero | unit | Yes | |
Hero_in_range_of_destroyer | group | No | |
HeroBattleArenaON | boolean | No | |
HeroBurning | effect | Yes | |
HeroBurning2 | effect | Yes | |
HeroChosen | unit | Yes | |
Heroes_in_range_of_FlyingM | group | No | |
Heroes_inOverGrownTrollArea | group | No | |
HeroesGroup | group | No | |
HeroesInBattleArena | integer | No | |
HeroesInRange | group | No | |
HeroesInRangeToEarnGold | group | No | |
HeroesLeftInArena | group | No | |
HeroIconMultiBoard | string | Yes | |
HeroicSlam_CasterAGI | integer | Yes | |
HeroicSlam_Counter | integer | Yes | |
HeroicSlam_Damage | real | Yes | |
HeroicSlam_EnemyGroup | group | Yes | |
HeroicSlam_Loc | location | Yes | |
HeroInOverGrownTroll_Region | boolean | No | |
heroinrangeofdestroyer | location | No | |
HeroReviveTimer1 | timer | No | |
HeroReviveTimer10 | timer | No | |
HeroReviveTimer2 | timer | No | |
HeroReviveTimer3 | timer | No | |
HeroReviveTimer4 | timer | No | |
HeroReviveTimer5 | timer | No | |
HeroReviveTimer6 | timer | No | |
HeroReviveTimer7 | timer | No | |
HeroReviveTimer8 | timer | No | |
HeroReviveTimer9 | timer | No | |
HeroReviveTimerContainer | timer | Yes | |
HeroSpotBoughtSpell | location | No | |
HiddenDummy | unitcode | No | |
HighBlessing_Caster | unit | Yes | |
HighBlessing_ChannelBar | unit | Yes | |
HighBlessing_SFX | effect | Yes | |
HighestDamagePointsPlayer | real | No | |
HighestDamagingPlayerUnit | unit | No | |
HolyRes_offset | location | Yes | |
Hostile_OverGrownTrollSpawn | location | No | |
HostilePatrol10to12 | location | No | |
HostilePatrol12to14 | location | No | |
HostilePatrol15to17 | location | No | |
HostilePatrol18to20 | location | No | |
HostilePatrol1to3 | location | No | |
HostilePatrol20 | location | No | |
HostilePatrol2to4 | location | No | |
HostilePatrol4to7 | location | No | |
HostilePatrol8to10 | location | No | |
HoT_Const_AoE | real | No | |
HoT_Const_Dmg_Base | real | No | |
HoT_Const_Dmg_Bonus | real | No | |
HoT_Const_Dmg_Burn | real | No | |
HoT_Const_Dmg_Stun | real | No | |
HoT_Const_Dmg_Stun_Bonus | real | No | |
HoT_Const_Duration | real | No | |
HoT_Const_Range | real | No | |
HoT_Const_Stun_Duration | real | No | |
HoT_Group | group | No | |
HoT_Hash | hashtable | No | |
HoT_Lightning_Group | group | No | |
HoT_Slam_Group | group | No | |
HoT_Stun_Group | group | No | |
HoT_Targets | group | No | |
HoT_Up_Group | group | No | |
HU | integer | No | |
HU2 | integervar | No | |
HU3 | integervar | No | |
HU_BarSize | integer | Yes | |
HU_Color | integer | Yes | |
HU_DescreaseFrom | real | Yes | |
HU_DescreaseTo | real | Yes | |
HU_Group | group | No | |
HU_HealFrom | real | Yes | |
HU_HealTo | real | Yes | |
HU_ItemType | itemcode | Yes | |
HU_LastItemIndex | integer | No | |
HU_Meter | string | Yes | |
HU_Off | boolean | Yes | |
HU_Point | location | Yes | |
HU_Skip | integer | No | |
HU_Text | texttag | Yes | |
HU_Times | integer | No | |
HU_Unit | unit | Yes | |
HuntressLoc | location | No | |
HydroJetCasters | group | No | |
HydroJetProjectiles | group | No | |
IB | integervar | No | |
ic | integer | Yes | |
ID | integer | Yes | |
ID2 | integer | No | |
IDMax | integer | No | |
IJ_Ability | abilcode | No | |
IJ_ActiveInstances | integer | No | |
IJ_Angle | real | No | |
IJ_AttackType | attacktype | No | |
IJ_Caster | unit | No | |
IJ_CasterPosition | location | No | |
IJ_Damage | real | Yes | |
IJ_DamageType | damagetype | No | |
IJ_DestroyEffectInt | integervar | No | |
IJ_DestroyTrees | boolean | No | |
IJ_DistanceCounter | real | No | |
IJ_Dummy | unit | No | |
IJ_DummyAbility | abilcode | No | |
IJ_DummyCaster | unit | No | |
IJ_DummyType | unitcode | No | |
IJ_EC_Amount | integer | Yes | |
IJ_EC_Angle | real | No | |
IJ_EC_Effect | string | No | |
IJ_EC_Int | integervar | No | |
IJ_EC_MX | real | No | |
IJ_EC_MY | real | No | |
IJ_FinalParabola | real | No | |
IJ_Group | group | No | |
IJ_Hashtable | hashtable | No | |
IJ_HitUnit | unit | No | |
IJ_HitUnitEffect | string | No | |
IJ_HitUnitEffectAttach | string | No | |
IJ_HitUnitPosition | location | No | |
IJ_HitX | real | No | |
IJ_HitY | real | No | |
IJ_ID | integer | No | |
IJ_ImpactEffect | string | No | |
IJ_JumpEffect | string | No | |
IJ_JumpEffectHandler | effect | Yes | |
IJ_KB_Damage | real | Yes | |
IJ_KB_DestroyTrees | boolean | No | |
IJ_KB_Effect | string | No | |
IJ_KB_EffectAttach | string | No | |
IJ_KB_Range | real | Yes | |
IJ_KB_Speed | real | Yes | |
IJ_Level | integer | No | |
IJ_MaxHeight | real | Yes | |
IJ_MX | real | No | |
IJ_MY | real | No | |
IJ_Parabola | real | No | |
IJ_Parabola2 | real | No | |
IJ_Parabola3 | real | No | |
IJ_Player | player | No | |
IJ_PropWindow | real | No | |
IJ_Radius | real | Yes | |
IJ_ScaleEffect | real | No | |
IJ_Speed | real | Yes | |
IJ_SpeedCounter | real | No | |
IJ_SpellError | string | No | |
IJ_SpellX | real | No | |
IJ_SpellY | real | No | |
IJ_TimeSpeed | real | No | |
IJ_Tree | destructable | No | |
IJ_TreeDestroyer | unit | No | |
IJ_X | real | No | |
IJ_Y | real | No | |
IllusionaryPresence_Casterloc | location | Yes | |
IllusionaryPresence_Dummy | unit | Yes | |
IllusionaryPresence_Hero | unit | Yes | |
IllusionaryPresence_Timer1 | timer | No | |
IllusionaryPresence_Timer2 | timer | No | |
IllusionaryPresence_Timer3 | timer | No | |
IllusionaryPresence_Timer4 | timer | No | |
IllusionaryPresence_Timer5 | timer | No | |
IllusionaryPresence_Timer6 | timer | No | |
IllusionaryPresence_Timer7 | timer | No | |
IllusionaryPresence_Timer8 | timer | No | |
IncredibleLeap_Group | group | No | |
InitiatePowerBurstRune | timer | No | |
InitiatePowerBurstRune10 | timer | No | |
InitiatePowerBurstRune11 | timer | No | |
InitiatePowerBurstRune12 | timer | No | |
InitiatePowerBurstRune13 | timer | No | |
InitiatePowerBurstRune2 | timer | No | |
InitiatePowerBurstRune3 | timer | No | |
InitiatePowerBurstRune4 | timer | No | |
InitiatePowerBurstRune5 | timer | No | |
InitiatePowerBurstRune6 | timer | No | |
InitiatePowerBurstRune7 | timer | No | |
InitiatePowerBurstRune8 | timer | No | |
InitiatePowerBurstRune9 | timer | No | |
Int_TripleOrbExplosionCaster | real | No | |
Intelligence | real | Yes | |
IRS_Hashtable | hashtable | No | |
IRS_String | string | Yes | |
IRS_Switch | boolean | No | |
IsBeingBuiltCenter | boolean | Yes | |
IsBeingBuiltEast | boolean | Yes | |
IsBeingBuiltNorth | boolean | Yes | |
IsBeingBuiltWest | boolean | Yes | |
isBeingIndexedSoldier | boolean | Yes | |
Item_Forbid | boolean | Yes | |
ItemBeingUpgraded | item | No | |
ItemBeingUpgradedByMetal | item | No | |
ItemCast_ShatteringDestiny | unit | Yes | |
ItemCreateRandom | integer | No | |
ItemDisableCharges | integer | No | |
ItemDisableDisable | boolean | No | |
ItemDisableHashtable | hashtable | No | |
ItemDisableIntegerLoop | integervar | No | |
ItemDisableItemCaster | unit | No | |
ItemDisableItemItem | item | No | |
ItemDisableOrders | integer | Yes | |
ItemDisablePoint1 | location | No | |
ItemDisableSlot | integer | No | |
ItemDisableWhichSlot | integer | No | |
ItemDropRARE | itemcode | Yes | |
ItemExchange | item | No | |
itemgradedroptype | integer | No | |
itemgradeset | integer | No | |
itemid1 | integer | Yes | |
itemid2 | integer | Yes | |
itemid3 | integer | Yes | |
itemid4 | integer | Yes | |
itemid5 | integer | Yes | |
itemid6 | integer | Yes | |
ItemonHero | integer | No | |
itemSpellPowerFIxed | boolean | Yes | |
JD_Angle | real | Yes | |
JD_BouncesCur | integer | Yes | |
JD_BouncesMax | integer | Yes | |
JD_DamageBig | real | Yes | |
JD_DamageSmall | real | Yes | |
JD_Distances | real | Yes | |
JD_Group | group | No | |
JD_HighSettings | real | Yes | |
JD_IntegerAVar | integervar | No | |
JD_Integers | integer | Yes | |
JD_JumpHigh | real | Yes | |
JD_Owner | unit | Yes | |
JD_ReachedDistance | real | Yes | |
JD_RealTimer | real | Yes | |
JD_SmallFalse_BigTrue | boolean | Yes | |
JD_SmallPoint | location | No | |
JD_SpeedUnits | real | Yes | |
JD_TempGroup | group | No | |
JD_TempPoint | location | Yes | |
JD_TreesDestroy | boolean | Yes | |
JD_Unit | unit | Yes | |
JDA_Caster | unit | No | |
JDA_DestroyTrees_Dash | boolean | No | |
JDA_JumpHigh_Distance | real | No | |
JDA_SmallFalse_BigTrue | boolean | No | |
JDA_Speed | real | No | |
JDA_TargetPoint | location | No | |
JDA_Unit | unit | No | |
kb | integer | No | |
KB1_Angle | real | Yes | |
KB1_Casters | unit | Yes | |
KB1_CountBuffs | integer | No | |
KB1_DestroyTrees | boolean | Yes | |
KB1_Effects_1 | string | Yes | |
KB1_Effects_2 | string | Yes | |
KB1_GeneralIntegers | integervar | Yes | |
KB1_KnockbackedUnits | group | No | |
KB1_Levels | integer | Yes | |
KB1_MaxDistance | real | Yes | |
KB1_ReachedDistance | real | Yes | |
KB1_ReducedReal | real | No | |
KB1_ReduceSpeedReal | real | Yes | |
KB1_SpecificSpeed | real | Yes | |
KB1_StartPositions | location | Yes | |
KB1_TempPoint | location | Yes | |
KB1_TempReal | real | No | |
KB1_TotalKnockUnits | integer | No | |
KB1_Units | unit | Yes | |
KB3D_Accel | real | No | |
KB3D_AllowOutSiding | boolean | No | |
KB3D_Angle | real | No | |
KB3D_AoE | real | No | |
KB3D_AoEDamage | real | No | |
KB3D_AoEEndDamage | real | No | |
KB3D_AoEKB | boolean | No | |
KB3D_Arc | real | No | |
KB3D_AttackType | attacktype | No | |
KB3D_Counter | integer | No | |
KB3D_Damager | unit | No | |
KB3D_DamageType | damagetype | No | |
KB3D_DestroyTree | boolean | No | |
KB3D_DisableUnit | boolean | No | |
KB3D_EndFx | string | No | |
KB3D_EndwhenDead | boolean | No | |
KB3D_EndWhenHit | boolean | No | |
KB3D_FaceAngle | boolean | No | |
KB3D_Fx | string | No | |
KB3D_Fx_Attach | string | No | |
KB3D_Group | group | No | |
KB3D_HA | hashtable | No | |
KB3D_Harvester | unit | No | |
KB3D_ImpactDamage | real | No | |
KB3D_Instances | integer | No | |
KB3D_KBTarget | boolean | No | |
KB3D_KillatTime | real | No | |
KB3D_KillifOutSider | boolean | No | |
KB3D_KillWhenHit | boolean | No | |
KB3D_LineDamage | real | No | |
KB3D_LoopDamage | real | No | |
KB3D_Range | real | No | |
KB3D_Reals | real | Yes | |
KB3D_Registration | trigger | No | |
KB3D_Speed | real | No | |
KB3D_StopTime | real | No | |
KB3D_TargetDamage | real | No | |
KB3D_Targeted_Unit | unit | No | |
KB3D_Time | real | No | |
KB3D_Timer | timer | No | |
KB3D_TrailFx | string | No | |
KB3D_Unit | unit | No | |
KB3D_UnpathableStop | boolean | No | |
KB3D_Zoffset | real | No | |
KB_Angle | real | Yes | |
KB_Dist | real | Yes | |
KB_Max | integer | No | |
KB_MaxDist | real | Yes | |
KB_Speed | real | Yes | |
KB_Unit | 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 | |
KeepAway_AbilityLevel | integer | Yes | |
KeepAway_Caster | unit | Yes | |
KeepAway_EnemyGroup | group | Yes | |
KeepAway_Playerloc | location | Yes | |
KeepAway_Timer1 | timer | No | |
KeepAway_Timer10 | timer | No | |
KeepAway_Timer2 | timer | No | |
KeepAway_Timer3 | timer | No | |
KeepAway_Timer4 | timer | No | |
KeepAway_Timer5 | timer | No | |
KeepAway_Timer6 | timer | No | |
KeepAway_Timer7 | timer | No | |
KeepAway_Timer8 | timer | No | |
KeepAway_Timer9 | timer | No | |
Key | integer | No | |
Key1 | integer | No | |
KoboldGroup | group | No | |
L | location | No | |
latestspelldamage | real | No | |
LeapofChaos_Caster | unit | No | |
LeapofChaos_surroundingplayers | group | No | |
LightBeam_DamageAreaGroup | group | Yes | |
LightBeam_Hashtable | hashtable | No | |
LightBeam_Point | location | Yes | |
LightBeamCaster | unit | No | |
LightBeamCaster_Str | integer | Yes | |
LightEssence_Target | unit | Yes | |
LightEssence_TargetsAOE | group | No | |
LightEssenceAmount | real | Yes | |
LightEssenceAmountDMG | real | Yes | |
LightEssenceInteger | integer | No | |
LightningStrike_Caster | unit | No | |
LightningStrike_SFX | effect | No | |
LightningStrikeHeroes | group | No | |
LightningStrikeHeroLoc | location | No | |
loc | location | No | |
loc1 | location | No | |
loc2 | location | No | |
loc3 | location | No | |
Loc_orderedFiend | group | No | |
Loc_orderedghoul | group | No | |
Loc_orderedtaurenChief | group | No | |
Loc_orderedwatercaster | group | No | |
localplayer | player | No | |
Location | location | No | |
LocationPushedBack | location | Yes | |
locGhoul | location | No | |
Locwatercaster | location | No | |
Loop | integer | Yes | |
LoopInteger | integervar | No | |
loops | integer | No | |
LS_Dummy | unit | No | |
LS_GeneralInteger | integervar | No | |
LS_Groups | group | Yes | |
LS_TempPoint | location | Yes | |
Lvl_LightEssence | real | No | |
Lvl_ShootingStar | real | No | |
lvl_TripleOrbExplosion | real | No | |
LVLx10to12 | rect | Yes | |
LVLx12to14 | rect | Yes | |
LVLx15to17 | rect | Yes | |
LVLx18to20 | rect | Yes | |
LVLx1to3 | rect | Yes | |
LVLx2to4 | rect | Yes | |
LVLx4to7 | rect | Yes | |
LVLx8to10 | rect | Yes | |
MA_Arrow | unit | No | |
MA_Arrow_Angle | real | No | |
MA_Arrowpt | location | No | |
MA_Arrows | group | No | |
MA_Caster | unit | Yes | |
MA_Chance | integer | No | |
MA_Chance2 | real | No | |
MA_Creatept | location | No | |
MA_Damage | real | No | |
MA_Dealdmg | real | No | |
MA_Distance | integer | No | |
MA_Flame_Lvl | integer | No | |
MA_Hashtable | hashtable | No | |
MA_Movept | location | No | |
MA_Nova | integervar | No | |
MA_Point | location | Yes | |
MA_Real | real | No | |
MA_Startpt | location | No | |
MA_Targetpt | location | No | |
MA_To_Finish | integer | No | |
MA_Victims | group | No | |
ManaBurst_Caster | unit | No | |
ManaBurst_Target | unit | Yes | |
ManaBurst_Timer1 | timer | No | |
ManaBurst_Timer2 | timer | No | |
ManaBurst_Timer3 | timer | No | |
ManaBurst_Timer4 | timer | No | |
ManaBurst_Timer5 | timer | No | |
ManaBurst_Timer6 | timer | No | |
ManaBurst_Timer7 | timer | No | |
ManaBurst_Timer8 | timer | No | |
MarkoFJustice_AoE | real | No | |
MarkofJustice_Caster | unit | Yes | |
MarkofJustice_ChannelBar | unit | Yes | |
MarkofJustice_Damage_Total | real | Yes | |
MarkofJustice_DamageGroup | group | Yes | |
MarkofJustice_Distance | real | No | |
MarkofJustice_Loc | location | Yes | |
MarkofJustice_Location | location | Yes | |
MarkofJustice_Location2 | location | Yes | |
MarkofJustice_Number | integer | No | |
MarkofJustice_SFX | effect | Yes | |
MarkofJustice_target | location | Yes | |
MarkofJustice_User | unit | Yes | |
MEB_Angle | real | No | |
MEB_Bomb | unitcode | No | |
MEB_Bombs | group | No | |
MEB_BurnAoe | real | No | |
MEB_BurnDamageBase | real | No | |
MEB_BurnDamagePerLevel | real | No | |
MEB_DamageBase | real | No | |
MEB_DamagePerLevel | real | No | |
MEB_DistanceIncrease | real | No | |
MEB_DurationBase | real | No | |
MEB_DurationPerLevel | real | No | |
MEB_ExplosionAOEBase | real | No | |
MEB_ExplosionAOPerLevel | real | No | |
MEB_Hash | hashtable | No | |
MEB_I | integervar | No | |
MEB_KnockbackDetriment | real | No | |
MEB_KnockbackStrengthBase | real | No | |
MEB_KnockbackStrengthPerLevel | real | No | |
MEB_Lightning | string | No | |
MEB_LightningHeight | real | No | |
MEB_MagneticAOEBase | real | No | |
MEB_MagneticAOEPerLevel | real | No | |
MEB_MagneticStrengthBase | real | No | |
MEB_MagneticStrengthPerLevel | real | No | |
MEB_ManaDamageBase | real | No | |
MEB_ManaDamagePerLevel | real | No | |
MEB_ManaToHealthDamageBase | real | No | |
MEB_ManaToHealthDamagePerLevel | real | No | |
MEB_RockSmash | real | No | |
MEB_SFXDeath | string | No | |
MEB_SFXKnockback | string | No | |
MEB_SFXSpawn | string | No | |
MEB_SidesBase | integer | No | |
MEB_SidesPerLevel | integer | No | |
MEB_Speed | real | No | |
MEB_Spell | abilcode | No | |
MEB_StartDistance | real | No | |
MEB_Tail | unitcode | No | |
MEB_TailDurationBase | real | No | |
MEB_TailDurationPerLevel | real | No | |
MEB_TempGroup | group | No | |
MEB_TempI | integer | No | |
MEB_TempLightning | lightning | No | |
MEB_TempPoint | location | No | |
MEB_TempPoint2 | location | No | |
MEB_TempPoint3 | location | No | |
MEB_TempReal | real | No | |
MEB_TempReal2 | real | No | |
MEB_TempU | unit | No | |
MEB_TempX | real | No | |
MEB_TempY | real | No | |
MEB_TempZ | real | No | |
MEB_TempZ2 | real | No | |
MEB_TreeChecker | unit | No | |
MEB_TreeDestroyArea | real | No | |
MEB_TreeKill | boolean | No | |
MEB_U | unit | No | |
MEB_UHandle | integer | No | |
MEB_UHandleC | integer | No | |
MeleeClass_Items | itemcode | Yes | |
MeteoriteInteger | integervar | No | |
MeteoritePoint | location | No | |
MiniDeviant_Amount | integer | No | |
MOJ_Int | integer | No | |
MOS_Caster | unit | No | |
MOS_Chance | integer | No | |
MOS_Damage | real | No | |
MOS_Level | integer | No | |
MOS_Point | location | Yes | |
MOS_Target | unit | No | |
MS_Group | group | No | |
MS_Picked_unit_loc | location | Yes | |
MS_Trigger_unit | unit | No | |
MS_Trigger_unit_loc | location | No | |
multibar_Gbartype | string | Yes | |
multibar_Gcurrent | integer | No | |
multibar_Gdir | string | Yes | |
multibar_Gdivs | integer | Yes | |
multibar_Gfiletype | string | Yes | |
MULTIBAR_HELPER_EXPERIENCE | integer | No | |
MULTIBAR_HELPER_HEALTH | integer | No | |
MULTIBAR_HELPER_MANA | integer | No | |
multibar_s_bartype | string | Yes | |
multibar_s_colstart | integer | Yes | |
multibar_s_curfill | integer | Yes | |
multibar_s_current | real | Yes | |
multibar_s_dir | string | Yes | |
multibar_s_filetype | string | Yes | |
multibar_s_max | real | Yes | |
multibar_s_numcols | integer | Yes | |
multibar_s_numdivs | integer | Yes | |
multibar_s_row | integer | Yes | |
multibar_s_whichboard | multiboard | Yes | |
multibar_sdata_free | integer | Yes | |
multibar_sdata_isUsed | boolean | Yes | |
multibar_sdata_size | integer | No | |
multibar_sdata_used | integer | No | |
MULTIBAR_TYPE_BUILD | integer | No | |
MULTIBAR_TYPE_CHUNK | integer | No | |
MULTIBAR_TYPE_EXPERIENCE | integer | No | |
MULTIBAR_TYPE_HEALTH | integer | No | |
MULTIBAR_TYPE_HEARTS | integer | No | |
MULTIBAR_TYPE_HEARTS_UP | integer | No | |
MULTIBAR_TYPE_MAC | integer | No | |
MULTIBAR_TYPE_MAGIC | integer | No | |
MULTIBAR_TYPE_MANA | integer | No | |
MULTIBAR_TYPE_ORANGE | integer | No | |
MULTIBAR_TYPE_RADIO | integer | No | |
multibarhelper_DummyHeroUnit | integer | No | |
multibarhelper_GXPForLevel | integer | Yes | |
multibarhelper_HelperArray | integer | Yes | |
multibarhelper_HelperTotal | integer | No | |
multibarhelper_MULTIBAR_PERIOD | real | No | |
multibarhelper_s_bar | integer | Yes | |
multibarhelper_s_col | integer | Yes | |
multibarhelper_s_label | boolean | Yes | |
multibarhelper_s_mtype | integer | Yes | |
multibarhelper_s_row | integer | Yes | |
multibarhelper_s_slot | integer | Yes | |
multibarhelper_s_whichunit | unit | Yes | |
multibarhelper_sdata_free | integer | Yes | |
multibarhelper_sdata_isUsed | boolean | Yes | |
multibarhelper_sdata_size | integer | No | |
multibarhelper_sdata_used | integer | No | |
MurgulWatercaster | group | No | |
MVC_PickGroup | group | No | |
MVC_Point | location | Yes | |
MVC_UnitType | unitcode | Yes | |
MVP_WavePoints | real | Yes | |
myMultiboard | multiboard | No | |
MyPlayerGroup | force | No | |
MysticArrow_AGI | integer | Yes | |
MysticArrow_Caster | unit | Yes | |
MysticArrow_ChannelBar | unit | Yes | |
MysticArrow_SFX | effect | Yes | |
NatureWardCaster | unit | No | |
NatureWards | group | No | |
NBAngle | real | No | |
NBAnglechange | real | No | |
NBBalls | unit | Yes | |
NBCaster | unit | No | |
NBCastPoint | location | No | |
NBCollisionIndicator | real | No | |
NBDamage | real | No | |
NBDegree | real | No | |
NBDistance | real | No | |
NBDummy | unit | No | |
NBFrequency | real | No | |
NBGroup | group | No | |
NBHashtable | hashtable | No | |
NBIntCaster | integer | No | |
NBPoint1 | location | No | |
NBPoint2 | location | No | |
NBPoint3 | location | No | |
NBRemaningTime | real | No | |
NBSinAC | real | No | |
NBSpeed | real | No | |
NBSpeed2 | real | No | |
NBSpeedIncreae | real | No | |
NBSpellLevel | real | No | |
NBStartPoint | location | No | |
NBWide | real | No | |
NBWide2 | real | No | |
ND | integervar | No | |
ND_Angle | real | Yes | |
ND_Caster | unit | Yes | |
ND_CastNumber | integer | No | |
ND_Distance | real | Yes | |
ND_Effect | integer | Yes | |
ND_Gyro | unit | Yes | |
ND_Off | boolean | Yes | |
ND_Point | location | Yes | |
ND_Speed | real | Yes | |
ND_Switch | integer | No | |
NewHeroBonusItems | boolean | Yes | |
NonBrainwashed_Units | group | Yes | |
nuclearstrikegroup | group | No | |
Nuke_Dummy | unit | No | |
Nuke_Number | real | No | |
Nuke_Point | location | No | |
NumberOfEnemiesWave1 | integer | No | |
NumberofTowersStanding | integer | No | |
NumHeroesGroupIn_OTArea | integer | No | |
NumHeroesGroupInBrutalDevArea | integer | No | |
NumHeroesGroupInLVLx10to12 | integer | No | |
NumHeroesGroupInLVLx12to14 | integer | No | |
NumHeroesGroupInLVLx15to17 | integer | No | |
NumHeroesGroupInLVLx18to20 | integer | No | |
NumHeroesGroupInLVLx1to3 | integer | No | |
NumHeroesGroupInLVLx20 | integer | No | |
NumHeroesGroupInLVLx2to4 | integer | No | |
NumHeroesGroupInLVLx4to7 | integer | No | |
NumHeroesGroupInLVLx8to10 | integer | No | |
NumMinions | integer | No | |
NumPlayersAtGameLoad | integer | No | |
NumUnits_EOLGroup | integer | No | |
NumUnits_HCGroup | integer | No | |
NumUnits_LightEssenceGroup | integer | No | |
NumUnits_ShadowSlashGroup | integer | No | |
NumUnitsinPlasmaDomeGroup | integer | No | |
NumUnitsInSGUnitGroup | integer | No | |
NumUnitsRF_TempGroup | integer | No | |
NumWaves | integer | No | |
NWGuard2Region | rect | No | |
o | unit | No | |
o_current_loc | location | No | |
OmegaBeam_Caster | unit | No | |
OmegaBeam_ChannelBar | unit | No | |
OmegaBeam_SFX | effect | No | |
OmegaKnight | unit | No | |
OneGreatSasquatch_Amount | integer | No | |
order | integer | No | |
orderedghoul | unit | Yes | |
orderedghoul_counter | integer | No | 1 |
output | integer | Yes | |
OverGrownTroll | unit | No | |
OverGrownTroll_Amount | integer | No | |
p | unit | No | |
p1 | location | No | |
p2 | location | No | |
p3 | location | No | |
PackHorseTimer1 | timer | No | |
PackHorseTimer10 | timer | No | |
PackHorseTimer2 | timer | No | |
PackHorseTimer3 | timer | No | |
PackHorseTimer4 | timer | No | |
PackHorseTimer5 | timer | No | |
PackHorseTimer6 | timer | No | |
PackHorseTimer7 | timer | No | |
PackHorseTimer8 | timer | No | |
PackHorseTimer9 | timer | No | |
PaladinSpellShop | unit | No | |
PD_Angle | real | Yes | |
PD_Distances | real | Yes | |
PD_Integers | integer | Yes | |
PD_ReachedDistance | real | Yes | |
PD_RealTimer | real | Yes | |
PD_SpeedUnits | real | Yes | |
PD_TempPoint | location | Yes | |
PD_TestGroup | group | No | |
PD_TreesDestroy | boolean | Yes | |
PD_Unit | unit | Yes | |
pl | location | No | |
PlasmaDo_Height_Decrease_Level | real | No | |
PlasmaDom_Area_of_Effect_Level | real | No | |
PlasmaDom_Height_Decrease_Base | real | No | |
PlasmaDome_Ability | abilcode | No | |
PlasmaDome_Area_of_Effect_Base | real | No | |
PlasmaDome_Attack_Type | attacktype | No | |
PlasmaDome_Big_Orb_Type | unitcode | No | |
PlasmaDome_Damage_Attachement | string | No | |
PlasmaDome_Damage_Base | real | No | |
PlasmaDome_Damage_Effect | string | No | |
PlasmaDome_Damage_Level | real | No | |
PlasmaDome_Damage_Type | damagetype | No | |
PlasmaDome_Distance_Base | real | No | |
PlasmaDome_Distance_Level | real | No | |
PlasmaDome_End_Effect | string | No | |
PlasmaDome_Group | group | No | |
PlasmaDome_Grow_Attachement | string | No | |
PlasmaDome_Grow_Effect | string | No | |
PlasmaDome_Grow_Timer | real | No | |
PlasmaDome_Handle_Type | unitcode | No | |
PlasmaDome_Hashtable | hashtable | No | |
PlasmaDome_Lightning_Type | string | No | |
PlasmaDome_Loop | integervar | No | |
PlasmaDome_Max_Height_Base | real | No | |
PlasmaDome_Max_Height_Level | real | No | |
PlasmaDome_Orb_Grow_Base | real | No | |
PlasmaDome_Orb_Grow_Level | real | No | |
PlasmaDome_Orbs_Amount_Base | integer | No | |
PlasmaDome_Orbs_Amount_Level | integer | No | |
PlasmaDome_Orbs_Type | unitcode | No | |
PlasmaDome_Rotation_Base | real | No | |
PlasmaDome_Rotation_Level | real | No | |
PlasmaDome_Speed_Base | real | No | |
PlasmaDome_Speed_Level | real | No | |
PlasmaDome_Starting_Height | real | No | |
PlasmaDome_TempGroup | group | No | |
PlasmaDome_TmpCaster | unit | No | |
PlasmaDome_TmpHandle | handle | No | |
PlasmaDome_TmpHandle2 | handle | No | |
PlasmaDome_TmpInteger | integer | No | |
PlasmaDome_TmpInteger2 | integer | No | |
PlasmaDome_TmpPlayer | player | No | |
PlasmaDome_TmpPoint | location | No | |
PlasmaDome_TmpPoint2 | location | No | |
PlasmaDome_TmpReal | real | No | |
PlasmaDome_TmpReal2 | real | No | |
PlasmaDome_TmpUnit | unit | No | |
PlasmaDome_TmpX | real | No | |
PlasmaDome_TmpX2 | real | No | |
PlasmaDome_TmpY | real | No | |
PlasmaDome_TmpY2 | real | No | |
Player | player | Yes | |
Player12Brown_EnemyForce | group | No | |
Player_Creep_Kills | integer | Yes | |
PlayerBackPackSTOP | trigger | Yes | |
PlayerBackPackSTOPpvpFIX | trigger | Yes | |
PlayerBeingRestrictedAccess | unit | Yes | |
PlayerColor | string | Yes | |
PlayerColoredName | string | Yes | |
PlayerCurrentGold | integer | Yes | |
PlayerCurrentValor | integer | Yes | |
PlayerDamagePoints | real | Yes | |
PlayerGold_Adjust | integer | No | |
PlayerNearUpgrader | unit | Yes | |
playerTombstone | unit | Yes | |
PlayerValorAmount | integer | Yes | |
PlayerWrongClassType | boolean | Yes | |
Point | location | No | |
point | location | No | |
Point1 | location | No | |
Point2 | location | No | |
point2 | location | No | |
portaloriginalspot | location | No | |
postionofdead_miniboss | location | No | |
powerburst | item | No | |
PowerBurst_Loc | location | No | |
PowerBurstLoc | location | No | |
PowerBurstTimer | timer | No | |
Presence_Ability_Aura | abilcode | Yes | |
Presence_Ability_Change | abilcode | No | |
Presence_Buff | buffcode | Yes | |
Presence_Caster | unit | No | |
Presence_Handle | handle | No | |
Presence_Hash | hashtable | No | |
Presence_Index_Add | integer | No | |
Presence_Index_Remove | integer | No | |
Presence_Level | integer | No | |
PrimarySoldierGroup | group | No | |
PsybladeAttackCounter | integer | Yes | |
PushBackLessThanLvl10 | trigger | Yes | |
PushBackLessThanLvl20 | trigger | Yes | |
PushBackQuest5NotActivated | trigger | Yes | |
PyroChainCaster | unit | Yes | |
Quest | quest | Yes | |
Quest_1Complete | boolean | No | |
Quest_1Increment | integer | No | 0 |
Quest_1KillCounter | integer | No | |
Quest_1Reward | real | No | |
Quest_2Complete | boolean | No | |
Quest_2Increment | integer | No | 0 |
Quest_2KillCounter | integer | No | |
Quest_2Reward | real | No | |
Quest_3Complete | boolean | No | |
Quest_3Increment | integer | No | 0 |
Quest_3KillCounter | integer | No | |
Quest_3Reward | real | No | |
Quest_4Complete | boolean | No | |
Quest_4Increment | integer | No | 0 |
Quest_4KillCounter | integer | No | |
Quest_4Reward | real | No | |
Quest_5Complete | boolean | No | |
Quest_5Increment | integer | No | 0 |
Quest_5KillCounter | integer | No | |
Quest_5Reward | real | No | |
Quest_6Complete | boolean | No | |
Quest_6Increment | integer | No | 0 |
Quest_6KillCounter | integer | No | |
Quest_6Reward | real | No | |
Quest_7Complete | boolean | No | |
Quest_7Increment | integer | No | 0 |
Quest_7KillCounter | integer | No | |
Quest_7Reward | real | No | |
Quest_Activated | boolean | Yes | |
Quest_Ping_Spot | location | No | |
QuestGenBaseCount | integer | No | |
QuestGenBaseNames | string | Yes | |
QuestGenCompleteLine | string | Yes | |
QuestGenCompleteLineCount | integer | No | |
QuestGenCurrentUnit | unit | No | |
QuestGenGreetingCount | integer | No | |
QuestGenGreetingLines | string | Yes | |
QuestGenHotspotCount | integer | Yes | |
QuestGenHotspots | location | Yes | |
QuestGenLargeHotspots | location | Yes | |
QuestGenMonsterAction | string | Yes | |
QuestGenMonsterActionCount | integer | No | |
QuestGenMonsterBaseBuildingA | unitcode | Yes | |
QuestGenMonsterBaseBuildingB | unitcode | Yes | |
QuestGenMonsterBaseUnits | unitcode | Yes | |
QuestGenMonsterCount | integer | No | |
QuestGenMonsterCrime | string | Yes | |
QuestGenMonsterCrimeCount | integer | No | |
QuestGenMonsterLevels | integer | Yes | |
QuestGenMonsterNames | string | Yes | |
QuestGenMonsters | unitcode | Yes | |
QuestGenPlayerCurrentQuest | string | Yes | |
QuestGenPlayerNumber | integer | No | |
QuestGenQuestCooldown | integer | Yes | |
QuestGenQuestGivers | group | No | |
QuestGenQuestText | string | No | |
QuestGenRetrievalItemCount | integer | No | |
QuestGenRetrievalItems | itemcode | Yes | |
QuestGenRetrievalLineCount | integer | No | |
QuestGenRetrievalLines | string | Yes | |
QuestGenRewardCount | integer | No | |
QuestGenRewardItemPercent | real | Yes | |
QuestGenRewardItems | itemcode | Yes | |
QuestGenTargetDistance | real | No | |
QuestGenXpFactor | real | No | |
RA_Color | real | Yes | |
RA_Counter | real | Yes | |
RA_Dummy | unit | Yes | |
RA_Duration | real | Yes | |
RA_HeightInc | boolean | Yes | |
RA_Integers | integer | Yes | |
RadioactiveSymbolInitiate1 | timer | No | |
RadioactiveSymbolInitiate2 | timer | No | |
RadioactiveSymbolInitiate3 | timer | No | |
RadioactiveSymbolInitiate4 | timer | No | |
RadioactiveSymbolInitiate5 | timer | No | |
RadioactiveSymbolInitiate6 | timer | No | |
RadioactiveSymbolInitiate7 | timer | No | |
Random_MovetoSpartan | location | No | |
RandomBattleArena_loc | location | No | |
randomEarthquake_locArena | location | No | |
RandomEastSpawn | integer | No | |
RandomizedSpawnPoint_Alt1 | integer | No | |
RandomizedSpawnSpot | integer | No | |
RandomNorthSpawn | integer | No | |
RandomPointHeroSpawn1 | location | No | |
RandomPointHeroSpawn10 | location | No | |
RandomPointHeroSpawn2 | location | No | |
RandomPointHeroSpawn3 | location | No | |
RandomPointHeroSpawn4 | location | No | |
RandomPointHeroSpawn5 | location | No | |
RandomPointHeroSpawn6 | location | No | |
RandomPointHeroSpawn7 | location | No | |
RandomPointHeroSpawn8 | location | No | |
RandomPointHeroSpawn9 | location | No | |
RandomPointinSoldierCollection | location | No | |
randomUnit | location | No | |
RandomWestSpawn | integer | No | |
randValueforSpawnRune | integer | No | |
RAS_Color | real | No | |
RAS_Dummy | unit | No | |
RAS_Duration | real | No | |
RAS_HeightInc | boolean | No | |
Rays | group | No | |
RC | boolean | No | |
RCR_CombineItemA | item | No | |
RCR_CombineItemB | item | No | |
RCR_CombineSFX | string | No | |
RCR_CombineTable | hashtable | No | |
RCR_DisassembleAbility | abilcode | No | |
RCR_DisassembleSFX | string | No | |
RCR_LoopA | integer | No | |
RCR_SaveA | integer | No | |
RCR_SaveAddCharges | boolean | No | |
RCR_SaveB | integer | No | |
RCR_SaveR | integer | No | |
RCR_SaveRecipeItemA | itemcode | No | |
RCR_SaveRecipeItemB | itemcode | No | |
RCR_SaveRecipeResult | itemcode | No | |
RCR_ShowText | boolean | No | |
RCR_tempForce | force | No | |
RCR_tempInt | integer | No | |
RCR_tempItem | item | No | |
RCR_tempItem2 | item | No | |
RCR_tempItemType | itemcode | No | |
RCR_tempItemType2 | itemcode | No | |
RCR_tempLoc | location | No | |
RCR_tempUnit | unit | No | |
Real | real | Yes | |
real | real | No | |
real2 | real | No | |
RedemptionField_Caster | unit | No | |
RedemptionField_ChannelBar | unit | Yes | |
RedemptionField_Group | group | No | |
RedemptionField_Point | location | Yes | |
RedemptionField_SFX | effect | Yes | |
RedemptionField_Timer | timer | No | |
RedemptionFieldSpell_Caster | unit | Yes | |
RejuvDust_AlliesInRange | group | Yes | |
RejuvDust_AOErange | rect | Yes | |
RejuvDust_Caster | unit | No | |
RejuvDust_EnemiesInRange | group | Yes | |
RejuvenationDust_Point | location | No | |
RejuvenationTimer1 | timer | No | |
RejuvenationTimer2 | timer | No | |
RejuvenationTimer3 | timer | No | |
RejuvenationTimer4 | timer | No | |
RejuvenationTimer5 | timer | No | |
RejuvenationTimer6 | timer | No | |
RejuvenationTimer7 | timer | No | |
RejuvenationTimer8 | timer | No | |
Repick | integer | Yes | |
RepickingArea | location | No | |
RespawnTimerWindow1 | timerdialog | No | |
RespawnTimerWindow10 | timerdialog | No | |
RespawnTimerWindow2 | timerdialog | No | |
RespawnTimerWindow3 | timerdialog | No | |
RespawnTimerWindow4 | timerdialog | No | |
RespawnTimerWindow5 | timerdialog | No | |
RespawnTimerWindow6 | timerdialog | No | |
RespawnTimerWindow7 | timerdialog | No | |
RespawnTimerWindow8 | timerdialog | No | |
RespawnTimerWindow9 | timerdialog | No | |
RespawnTimerWindowContainer | timerdialog | Yes | |
RestorationField | integer | No | |
RestorationField_AbilityLevel | integer | Yes | |
RestorationField_Amount | real | Yes | |
RestorationField_Angle | real | Yes | |
RestorationField_AoE | real | Yes | |
RestorationField_Caster | unit | Yes | |
RestorationField_CastNumber | integer | No | |
RestorationField_Distance | real | Yes | |
RestorationField_EffectString | string | Yes | |
RestorationField_Ground | unit | Yes | |
RestorationField_Group | group | No | |
RestorationField_Missile1 | unit | Yes | |
RestorationField_Missile2 | unit | Yes | |
RestorationField_Off | boolean | Yes | |
RestorationField_Point | location | Yes | |
RestorationField_Spam | integer | Yes | |
RestorationField_Switch | integer | No | |
RestorationField_Time | real | Yes | |
RestorationField_Units | unit | Yes | |
reviveplayer1 | location | No | |
reviveplayer10 | location | No | |
reviveplayer2 | location | No | |
reviveplayer3 | location | No | |
reviveplayer4 | location | No | |
reviveplayer5 | location | No | |
reviveplayer6 | location | No | |
reviveplayer7 | location | No | |
reviveplayer8 | location | No | |
reviveplayer9 | location | No | |
RF | integervar | No | |
RF_Ability | abilcode | No | |
RF_AbilityLevel | integer | Yes | |
RF_Amount | real | Yes | |
RF_Angle | real | Yes | |
RF_AoE | real | Yes | |
RF_AttackType | attacktype | No | |
RF_Caster | unit | Yes | |
RF_CasterPosition | location | Yes | |
RF_CastNumber | integer | No | |
RF_Damage | real | Yes | |
RF_DamageRadius | real | Yes | |
RF_DamageType | damagetype | No | |
RF_DestroyTrees | boolean | No | |
RF_Distance | real | Yes | |
RF_EffectString | string | Yes | |
RF_ExplosionEffect | string | Yes | |
RF_ExplosionEffectNumber | integer | No | |
RF_Firebolt | unit | Yes | |
RF_FireboltCount | integer | Yes | |
RF_FireboltMissile | unitcode | No | |
RF_FireboltNumber | integer | Yes | |
RF_FireboltSpawnHeight | real | Yes | |
RF_FireboltSpawnInterval | real | Yes | |
RF_FireboltTravelSpeed | real | Yes | |
RF_FireboltTravelTime | real | Yes | |
RF_Group | group | No | |
RF_Harvester | unit | No | |
RF_HarvestOrderId | ordercode | No | |
RF_HSpeed | real | Yes | |
RF_Index | integervar | No | |
RF_Level | integer | Yes | |
RF_Loop | integervar | No | |
RF_MaxIndex | integer | No | |
RF_Missile1 | unit | Yes | |
RF_Missile2 | unit | Yes | |
RF_Off | boolean | Yes | |
RF_OrderId | ordercode | No | |
RF_Owner | player | No | |
RF_PickedDest | destructable | No | |
RF_PickedUnit | unit | No | |
RF_Point | location | Yes | |
RF_rTimer | real | Yes | |
RF_Spam | integer | Yes | |
RF_StageId | integer | Yes | |
RF_Switch | integer | No | |
RF_TargetPoint | location | Yes | |
RF_TempGroup | group | No | |
RF_TempLoc | location | No | |
RF_Time | real | Yes | |
RF_TravelBySpeed | boolean | No | |
RF_Units | unit | Yes | |
RF_VSpeed | real | Yes | |
RF_X | real | No | |
RF_Y | real | No | |
RN | integer | No | |
RO | integervar | No | |
RO_AbilityLevel | integer | Yes | |
RO_Angle | real | Yes | |
RO_Aoe | real | Yes | |
RO_Caster | unit | Yes | |
RO_Duration | real | Yes | |
RO_Group | group | Yes | |
RO_IntervalTimer | real | Yes | |
RO_Location | location | Yes | |
RO_Location2 | location | Yes | |
RO_MissileCount | integer | No | |
RO_Off | boolean | Yes | |
RO_Player | player | Yes | |
RO_Power | real | Yes | |
RO_Radius | real | Yes | |
RO_SFX1 | string | No | |
RO_SFX2 | string | No | |
RO_Skip | integer | No | |
RO_Speed | real | Yes | |
RO_Times | integer | No | |
RocketSpheres_Caster | unit | Yes | |
RocketSpheres_ChannelBar | unit | Yes | |
RocketSpheres_SFX | effect | Yes | |
RogueAmount | integer | No | |
RS_ActivationTime | real | Yes | |
RS_Angle | real | Yes | |
RS_Boolean | boolean | Yes | |
RS_Caster | unit | Yes | |
RS_CurDis | real | Yes | |
RS_CurrentEffect | effect | Yes | |
RS_CurrentZ | real | Yes | |
RS_Damage | real | Yes | |
RS_HealthDamage | real | Yes | |
RS_Index | integer | Yes | |
RS_LastNode | integer | No | |
RS_LevelA | integer | Yes | |
RS_Loc | location | Yes | |
RS_ManaDamage | real | Yes | |
RS_MapMaxX | real | No | |
RS_MapMaxY | real | No | |
RS_MapMinX | real | No | |
RS_MapMinY | real | No | |
RS_MaxD | real | Yes | |
RS_MaxH | real | Yes | |
RS_NextNode | integer | Yes | |
RS_NodeNumber | integer | No | |
RS_OriginalCaster | unit | Yes | |
RS_Player | player | Yes | |
RS_PreviousNode | integer | Yes | |
RS_Real | real | Yes | |
RS_RecycleableNodesNumber | integer | No | |
RS_RecycleNodes | integer | Yes | |
RS_Speed | real | Yes | |
RS_SpellCounter | integer | No | |
RS_Target | unit | Yes | |
RS_TempGroup | group | No | |
RS_TempGroup2 | group | No | |
RS_Unit | unit | Yes | |
RS_XVelocity | real | Yes | |
RS_YVelocity | real | Yes | |
RS_ZLoc | location | No | |
RS_ZVelocity | real | Yes | |
RSCaster | unit | Yes | |
RSCount | integer | No | |
RSDamage | real | Yes | |
RSDistance | real | Yes | |
RSEffectDelayer | integer | Yes | |
RSHas | boolean | Yes | |
RSIndex | integer | No | |
RSInteger | integer | No | |
RSLastRecycled | integer | No | |
RSMax | integer | No | |
RSRecycledList | integer | Yes | |
RSRemaining | integer | Yes | |
RSTarget | unit | Yes | |
RT | trigger | No | |
RuneSpawn | rect | Yes | |
SandStorm | group | No | |
SandstormCaster | unit | No | |
Sanji | unit | Yes | |
SanjiL | location | Yes | |
SanjiReal | real | Yes | |
SasquatchOracle_Amount | integer | No | |
SasquatchOracle_Amount2 | integer | No | |
SatyrAmount | integer | No | |
SatyrHellcaster_Amount | integer | No | |
SatyrSpawnLoc | location | No | |
SavantsWrath_Caster | unit | Yes | |
SavantsWrath_ChannelBar | unit | Yes | |
SavantsWrath_SFX | effect | Yes | |
ScorchedMedallion_integer | integer | No | |
ScorchedMedallion_loc | location | No | |
ScorchedMedallion_targetloc | location | No | |
Scroll_LEGENDARY_count | integer | No | |
Scroll_MYTHICAL_count | integer | No | |
Scroll_RARE_count | integer | No | |
Scroll_UNCOMMON_count | integer | No | |
SecondarySoldierGroup | group | No | |
sellCounter | integer | Yes | |
sellTimer1 | timer | No | |
sellTimer10 | timer | No | |
sellTimer2 | timer | No | |
sellTimer3 | timer | No | |
sellTimer4 | timer | No | |
sellTimer5 | timer | No | |
sellTimer6 | timer | No | |
sellTimer7 | timer | No | |
sellTimer8 | timer | No | |
sellTimer9 | timer | No | |
SF_BouncesNumber | integer | No | |
SF_DamageBigMissiles | real | No | |
SF_DamageSmallMissiles | real | No | |
SF_DestroyTrees | boolean | No | |
SF_NumberOfSmallMissiles | integer | No | |
SF_RangeBetweenBounces | real | No | |
SF_RangeOfSmallMissiles | real | No | |
SF_TempPoint | location | Yes | |
SFX | effect | No | |
SfxNumber | integer | No | |
SGSD_Caster | unit | Yes | |
SGSD_Damage | real | Yes | |
SGSD_DamageEffect | string | Yes | |
SGSD_Index | integer | Yes | |
SGSD_LightningEffect | lightning | Yes | |
SGSD_MaxDistance | real | Yes | |
SGSD_Off | boolean | Yes | |
SGSD_TargetedUnit | unit | Yes | |
SGSD_Timer | real | Yes | |
SGSD_TimeToDoDamage | real | Yes | |
SGSystemPoint | location | Yes | |
SGSystemUnitGroup | group | Yes | |
ShadowGrip_Chargebar | texttag | Yes | |
ShadowGrip_spellpower | real | Yes | |
ShadowsCollected | integer | Yes | |
ShadowScrollAmount | integer | No | |
ShadowSlash_TargetLoc | location | No | |
ShadowSlash_UnitGroup | group | Yes | |
ShadowsRemovedPerHit | integer | Yes | |
ShadowStoneAmount | integer | No | |
Shake | real | No | |
ShatteringDestiny_Loc | location | No | |
ShatteringDestiny_TakeDMG | group | No | |
ShatteringDestiny_Timer | timer | No | |
ShieldofLight_Caster | unit | Yes | |
Shooting | location | Yes | |
ShootinGPoinT | location | No | |
ShopCategory | unitcode | Yes | |
ShopCategoryItem | itemcode | Yes | |
ShopGroup | group | Yes | |
ShopInteger | integer | No | |
ShopINTone | integer | No | |
ShopINTtwo | integer | No | |
ShopItemExchange | item | Yes | |
ShopNumber | unit | Yes | |
ShopPersonalInteger | integer | No | |
ShopPlayer | player | No | |
ShopSoldCatNumber | integer | No | |
ShopTable | hashtable | No | |
ShopTempGroup | group | No | |
ShopTempPoint | location | No | |
ShopTempUnit | unit | No | |
ShopTimer1 | timer | No | |
ShopTotalCategories | integer | No | |
ShopUnitType | unitcode | No | |
Skill_BattleFurrySpeed | abilcode | No | |
Skill_BattleFury | abilcode | No | |
Skill_Bonebreaker | abilcode | No | |
Skill_LeapofChaos | abilcode | No | |
Skill_Tornado | abilcode | No | |
SoL_Caster | unit | No | |
SOL_Int | integer | No | |
SOL_spellpowervalue | real | Yes | |
SoL_Target | unit | No | |
SoldierDefendPoint | location | No | |
SoldierDefendTimer | timer | No | |
soldiersINT | integer | No | |
soldItem | item | Yes | |
SoundPlayforDeadPlayer | player | No | |
SP_CurrentValue | real | No | |
SP_Hashtable | hashtable | No | |
SP_INTofCurrentValue | real | No | |
SP_INTofKey | integer | No | |
SP_INTofUnit | unit | No | |
SP_ItemType | itemcode | No | |
SP_Key | integer | No | |
SP_Player | player | No | |
SP_Unit | unit | No | |
SP_Value | real | No | |
SparkyUnit | unit | No | |
SpartanWarrior | unit | No | |
SpawnLocation | rect | No | |
SpawnRogueLoc | location | No | |
SpawnSatyrLoc | location | No | |
Special | string | Yes | |
SpeedSlash | real | No | |
SpellBuying_Hero | unit | Yes | |
SpellLevel | integer | No | |
SpinningWard_Caster | unit | No | |
SpinningWard_Int | integer | No | |
SS_Hashtable | hashtable | No | |
SSDummyEffect | abilcode | No | |
SSDummySkill | abilcode | No | |
SSDummyUnit | unitcode | No | |
SSHeroEffect | abilcode | No | |
SSTempInt | integer | No | |
SSTempLoc | location | No | |
SSTempLoc2 | location | No | |
SSTempLoc3 | location | No | |
SSTempUnit | unit | No | |
Star | location | No | |
Star2 | location | No | |
StarGroup | group | No | |
Start_X | real | Yes | |
Start_Y | real | Yes | |
Str_ConquerCaster | real | Yes | |
STR_leapofchaos | integer | No | |
Str_LightBeamCaster | real | No | |
SumOfPlayerLevels | integer | No | |
superminigolem_units | integer | No | |
SupremeGolem_DeathLoc | location | No | |
SW_Ability | abilcode | No | |
SW_Angle | real | Yes | |
SW_AoE | real | Yes | |
SW_AttachedModel | effect | Yes | |
SW_AttackType | attacktype | No | |
SW_BallArcHeight | real | No | |
SW_BallExDamage | real | Yes | |
SW_BallExEffect | string | Yes | |
SW_BallExNumber | integer | No | |
SW_BallExRadius | real | Yes | |
SW_BallMinDistance | real | No | |
SW_BallModel | string | No | |
SW_BallScale | real | No | |
SW_BallSpawnInterval | real | No | |
SW_BallSpeed | real | Yes | |
SW_Caster | unit | Yes | |
SW_DamageAlly | boolean | No | |
SW_DamageFlying | boolean | No | |
SW_DamageMagicImmnune | boolean | No | |
SW_DamageType | damagetype | No | |
SW_DestroyTrees | boolean | No | |
SW_Distance | real | Yes | |
SW_Dummy | unit | Yes | |
SW_DummyType | unitcode | No | |
SW_Gap | real | No | |
SW_Harvester | unit | No | |
SW_HarvestOrder | ordercode | No | |
SW_Index | integervar | No | |
SW_Interval | real | No | |
SW_Level | integer | Yes | |
SW_Loop | integervar | No | |
SW_MaxDistance | real | Yes | |
SW_MaxHeight | real | Yes | |
SW_MaxIndex | integer | No | |
SW_MissileArcHeight | real | No | |
SW_MissileModel | string | No | |
SW_MissileScale | real | No | |
SW_MissileTravelTime | real | Yes | |
SW_OrbMaxHeight | real | No | |
SW_OrbMinHeight | real | No | |
SW_OrbModel | string | No | |
SW_OrbNumber | integer | Yes | |
SW_OrbOffset | real | No | |
SW_OrbScale | real | No | |
SW_OrbSpinSpeed | real | Yes | |
SW_Owner | player | Yes | |
SW_PickedDest | destructable | No | |
SW_PickedUnit | unit | No | |
SW_RealTimer | real | Yes | |
SW_RealTimer2 | real | Yes | |
SW_Rotator | real | No | |
SW_SourceX | real | Yes | |
SW_SourceY | real | Yes | |
SW_Speed | real | Yes | |
SW_Stage | integer | Yes | |
SW_TempLoc | location | No | |
SW_WardDuration | real | Yes | |
SW_WardExBallNumber | integer | Yes | |
SW_WardExDamage | real | Yes | |
SW_WardExEffect | string | Yes | |
SW_WardExNumber | integer | No | |
SW_WardExRadius | real | Yes | |
SW_WardHeight | real | No | |
SW_WardModel | string | No | |
SW_WardScale | real | No | |
SW_WardSpinClockwise | boolean | No | |
SW_WardSpinSpeed | real | Yes | |
SW_X | real | Yes | |
SW_Y | real | Yes | |
t | unit | No | |
Target_loc | location | No | |
taurenChiefGroup | group | No | |
Temp_Group | group | No | |
Temp_Group_1 | group | No | |
Temp_Integer | integer | No | |
Temp_Integer_Guard | integer | No | |
Temp_Integer_Guard2 | integer | No | |
Temp_Lightning | lightning | No | |
Temp_Loc_1 | location | No | |
Temp_Loc_2 | location | No | |
Temp_Loc_3 | location | No | |
Temp_Point | location | No | |
Temp_Point2 | location | No | |
Temp_Point_A | location | No | |
Temp_Point_FatalSwordDummy | location | No | |
Temp_Real | real | No | |
Temp_Real_1 | real | No | |
Temp_Real_2 | real | No | |
Temp_Real_3 | real | No | |
Temp_Unit_1 | unit | No | |
Temp_Unit_2 | unit | No | |
Temp_Unit_3 | unit | No | |
Temp_Unit_4 | unit | No | |
TempBool | boolean | No | |
TempGroup | group | No | |
tempgroup | group | No | |
TempHandle | handle | No | |
TempInt | integer | No | |
TempInteger | integervar | No | |
tempinteger | integer | No | |
TempLoc45 | location | No | |
TempOffset | location | No | |
temppoint | location | No | |
TempPoint | location | No | |
temppoint2 | location | No | |
TempPoint2 | location | No | |
temppoint3 | location | No | |
TempPoint3 | location | No | |
temppoint_chargeofblood | location | No | |
TempPointCreepDeath | location | No | |
TempReal | real | No | |
tempreal | real | No | |
tempugroup | group | No | |
TempUnit | unit | No | |
tempunit2 | unit | No | |
TempUnit2 | unit | No | |
TertiarySoldierGroup | group | No | |
testgroup | group | No | |
testUnit | unit | No | |
testUnit2 | unit | No | |
theXPcount | integer | No | |
ThroneLoc | location | No | |
Timerwindow1 | timerdialog | No | |
Timerwindow10 | timerdialog | No | |
Timerwindow11 | timerdialog | No | |
Timerwindow12 | timerdialog | No | |
Timerwindow13 | timerdialog | No | |
Timerwindow2 | timerdialog | No | |
Timerwindow3 | timerdialog | No | |
Timerwindow4 | timerdialog | No | |
Timerwindow5 | timerdialog | No | |
Timerwindow6 | timerdialog | No | |
Timerwindow7 | timerdialog | No | |
Timerwindow8 | timerdialog | No | |
Timerwindow9 | timerdialog | No | |
TimetoDefend | boolean | No | |
TinkerBlinkSpot | location | No | |
tl | location | No | |
tmpCasterZ | real | No | |
tmpDiffHeight | real | No | |
tmpDistance | real | No | |
tmpHeight | real | No | |
tmpSound | sound | No | |
tmpTargetZ | real | No | |
tmpTime | real | No | |
tmpunit | unit | No | |
TOE_Group | group | No | |
TOE_Orb | unit | Yes | |
TOE_Orb_loc | location | Yes | |
TOE_Picked_unit_loc | location | No | |
TOE_Target_loc | location | Yes | |
TotalDamage | real | No | |
TotalEnemies_inWave | integer | No | |
TotalWaveTypes | integer | No | |
TowerArea | rect | Yes | |
TowerBuilderSpawnPoint | location | No | |
TowerCount | unit | Yes | |
TowerPlacement | location | Yes | |
TownCount | integer | No | |
TownGroup | group | No | |
TownUnit | unit | Yes | |
TS_Ability | abilcode | No | |
TS_Angle | real | No | |
TS_AttackType | attacktype | No | |
TS_Caster | unit | Yes | |
TS_CasterSTR | integer | Yes | |
TS_Damage | real | Yes | |
TS_DamagedEffect | string | No | |
TS_DamagedEffectAttachment | string | No | |
TS_DamageType | damagetype | No | |
TS_Distance | real | No | |
TS_ExplosionDummy | unitcode | Yes | |
TS_ExplosionDummyNum | integer | No | |
TS_ExplosionFadeRate | real | Yes | |
TS_Index | integervar | No | |
TS_Level | integer | Yes | |
TS_Loop | integervar | No | |
TS_MaxIndex | integer | No | |
TS_MinDistance | real | No | |
TS_Missile | unit | Yes | |
TS_MissileDummy | unitcode | No | |
TS_MissileSpawnOffset | real | Yes | |
TS_MissileSpeed | real | Yes | |
TS_OrgMinDistance | real | No | |
TS_Owner | player | No | |
TS_PickedUnit | unit | No | |
TS_Radius | real | Yes | |
TS_Target | unit | Yes | |
TS_TempGroup | group | No | |
TS_TempLoc | location | No | |
TS_TempLoc2 | location | No | |
TS_TempLoc3 | location | No | |
UC_Counter | integer | Yes | |
UC_Groups | group | Yes | |
UC_Inv | boolean | Yes | |
UC_SETTINGS_AreaOfEffect | real | Yes | |
UC_SETTINGS_Collosion | boolean | No | |
UC_SETTINGS_DestroyTrees_Dash | boolean | No | |
UC_SETTINGS_Invulnerable | boolean | No | |
UC_SETTINGS_Speed | real | No | |
UC_Target | unit | No | |
UC_TempPoint | location | Yes | |
UDex | integer | No | |
UDexGen | integer | No | |
UDexNext | integer | Yes | |
UDexPrev | integer | Yes | |
UDexRecycle | integer | No | |
UDexUnits | unit | Yes | |
UDexWasted | integer | No | |
UGroup | group | No | |
UMovNext | integer | Yes | |
UMovPrev | integer | Yes | |
Unit | unit | No | |
Unit1 | unit | No | |
Unit2 | unit | No | |
UnitDamageRegistered | boolean | Yes | |
UnitIndexerEnabled | boolean | No | |
UnitIndexEvent | real | No | |
UnitMoving | boolean | Yes | |
UnitMovingEvent | real | No | |
UnitMovingTempX | real | No | |
UnitMovingTempY | real | No | |
UnitMovingX | real | Yes | |
UnitMovingY | real | Yes | |
units_inHolyResonance | group | Yes | |
UnitSpeedX | real | Yes | |
UnitsThatDieNearNWGuard | group | No | |
UnitTarget | unit | No | |
UnitVarCaster10 | unit | No | |
UnitVarTarget8 | unit | No | |
UNRELATED_VARIABLE | location | No | |
UNRELATED_VARIABLE_UNIT | unit | No | |
UpgradingEquipment | dialog | No | |
UpgradingEquipment_Buttons | button | Yes | |
UpgradingEquipment_Chance | dialog | No | |
UpgradingEquipment_ChanceBut | button | Yes | |
UpgradingEquipment_Exchange | dialog | No | |
UpgradingEquipment_ExchangeNO | button | Yes | |
UpgradingEquipment_ExchangeYES | button | Yes | |
UpgradingEquipment_Info | dialog | No | |
UpgradingEquipment_InfoBut | button | Yes | |
UpgradingEquipment_Risk | dialog | No | |
UpgradingEquipment_RiskButton | button | Yes | |
USELESS_ITEMTYPE | itemcode | No | |
USELESS_LOC | location | No | |
Valor_Value | integer | No | |
ValorAmount | integer | No | |
ValorEmblem | unit | Yes | |
ValorEmblemArea | rect | Yes | |
ValorEmblemBuilder | unit | Yes | |
ValorEmblemPlacement | location | Yes | |
ValorGroup | group | No | |
ValorPoints | integer | Yes | |
VC_ActivatedSpeedMultiplyer | real | No | |
VC_Angle | real | No | |
VC_AOE | real | Yes | |
VC_AoeBase | real | No | |
VC_AoePerLevel | real | No | |
VC_CasterX | real | Yes | |
VC_CasterY | real | Yes | |
VC_Conditions | boolean | Yes | |
VC_CrushingRockSFX | string | Yes | |
VC_CurrentAngle | real | Yes | |
VC_CurrentSize | real | Yes | |
VC_DefaultTheme | integer | No | |
VC_DummyType | unitcode | No | |
VC_EffectScalingExplosionBase | real | No | |
VC_EffectScalingExplosionPL | real | No | |
VC_EffectScalingSpinRocksBase | real | No | |
VC_EffectScalingSpinRocksPL | real | No | |
VC_EffectScalingVolRockBase | real | No | |
VC_EffectScalingVolRockMaxBase | real | No | |
VC_EffectScalingVolRockMaxPL | real | No | |
VC_EffectScalingVolRockPL | real | No | |
VC_EffectScalingVolSpeedBase | real | No | |
VC_EffectScalingVolSpeedPL | real | No | |
VC_EndChannelSFX | string | Yes | |
VC_EndSpellSFX | string | Yes | |
VC_ExpirationTimer | real | Yes | |
VC_ExpireTime | real | No | |
VC_ExplosionScale | real | Yes | |
VC_FallSpeed | real | Yes | |
VC_GrowthSpeed | real | Yes | |
VC_HealthDamage | real | Yes | |
VC_HealthDamageBase | real | No | |
VC_HealthDamagePerLevel | real | No | |
VC_ImpactHeight | real | No | |
VC_Index | integervar | No | |
VC_ManaDamage | real | Yes | |
VC_ManaDamageBase | real | No | |
VC_ManaDamagePerLevel | real | No | |
VC_MaxIndex | integer | No | |
VC_MaxSize | real | Yes | |
VC_Order | string | No | |
VC_OriginalCaster | unit | Yes | |
VC_RockDistance | real | Yes | |
VC_RockDistanceBase | real | No | |
VC_RockDistancePerLevel | real | No | |
VC_RockFacingAngle | real | No | |
VC_RockSpinIncomingTimeBase | real | No | |
VC_RockSpinIncomingTimePL | real | No | |
VC_RockSpinSpeed | real | Yes | |
VC_RockSpinSpeedBase | real | No | |
VC_RockSpinSpeedPerLevel | real | No | |
VC_Rotation | real | Yes | |
VC_SpecialEffect | effect | Yes | |
VC_Spell | abilcode | No | |
VC_SpellsThemeCount | integer | No | |
VC_SpinningRocksBase | integer | No | |
VC_SpinningRocksPerLevel | integer | No | |
VC_SpinningRocksSFX | string | Yes | |
VC_StageID | integer | Yes | |
VC_SummonSFX | string | Yes | |
VC_Target | unit | Yes | |
VC_TargetX | real | Yes | |
VC_TargetY | real | Yes | |
VC_TempGroup | group | No | |
VC_TempInteger | integer | No | |
VC_TempInteger2 | integer | No | |
VC_TempPlayer | player | No | |
VC_TempPoint | location | No | |
VC_TempPoint2 | location | No | |
VC_TempReal | real | No | |
VC_TempReal2 | real | No | |
VC_TempReal3 | real | No | |
VC_TempUnit | unit | No | |
VC_TempUnit2 | unit | No | |
VC_TempUnit3 | unit | No | |
VC_TempX | real | No | |
VC_TempY | real | No | |
VC_Theme | integer | Yes | |
VC_TimerSpeed | real | No | |
VC_UnitIndex | unit | Yes | |
VC_VolRock | boolean | Yes | |
VC_VolRockFallIncomingTimeBase | real | No | |
VC_VolRockFallIncomingTimePL | real | No | |
VC_VolRockFallSpeedBase | real | No | |
VC_VolRockFallSpeedPerLevel | real | No | |
VC_ZHeight | real | Yes | |
VC_ZHeightSubRocksBase | real | No | |
VC_ZHeightSubRocksPerLevel | real | No | |
VC_ZHeightVolRockBase | real | No | |
VC_ZHeightVolRockPerLevel | real | No | |
VileAthosTimer | timer | No | |
VileScrollofAthos_Killer | unit | Yes | |
VileScrollofAthos_Loc | location | No | |
VileScrollofAthos_RandomNum | integer | No | |
VOSD_loc | location | No | |
VoulgeofSwiftDeath_integer | integer | No | |
watercaster | unit | No | |
watercaster_Group | group | No | |
Watercaster_Loc | location | No | |
wave | integer | No | |
Wave_Is_Underway | boolean | No | |
WaveEnemies_Counter | integer | No | |
WaveFullEast | boolean | No | |
WaveFullNorth | boolean | No | |
WaveFullWest | boolean | No | |
WaveResearchTypeA | techcode | Yes | |
WaveResearchTypeB | techcode | Yes | |
WaveResearchTypeC | techcode | Yes | |
WaveResearchTypeD | techcode | Yes | |
WavesGoneBy | integer | No | |
WaveThreatLevel | integer | No | |
WaveTimer | timer | No | |
WaveTypeA | unitcode | Yes | |
WaveTypeB | unitcode | Yes | |
WaveTypeC | unitcode | Yes | |
WaveTypeD | unitcode | Yes | |
WBAngel | real | Yes | |
WBArrow | unit | Yes | |
WBARROWS | group | No | |
WBCaster | unit | Yes | |
WBCollision | group | Yes | |
WBCreate_point | location | Yes | |
WBDamage_formula | real | Yes | |
WBDamage_per_fragment | real | Yes | |
WBDistance | real | Yes | |
WBDistance_fragment | real | Yes | |
WBFormula | real | Yes | |
WBKnock | integer | Yes | |
WBLoop | integervar | No | |
WBPoint | location | Yes | |
WBSpecial_effect1 | string | Yes | |
WBSpecial_effect2 | string | Yes | |
WBSpecial_effect3 | string | Yes | |
WBSpeed | real | Yes | |
WBSpeedBlast | group | Yes | |
WBTARGETED | group | No | |
WBTargeted | unit | Yes | |
WBTimes | integer | Yes | |
WD_Angle | real | No | |
WD_AoeBase | real | No | |
WD_AoePerLevel | real | No | |
WD_AttackDamageBase | real | No | |
WD_AttackDamagePerLevel | real | No | |
WD_AttackSfx | string | No | |
WD_ChaseSpeed | real | No | |
WD_CurrentTargets | group | No | |
WD_DrainAoeBase | real | No | |
WD_DrainAoePerLevel | real | No | |
WD_DrainDamageBase | real | No | |
WD_DrainDamagePerLevel | real | No | |
WD_DurationBase | real | No | |
WD_DurationPerLevel | real | No | |
WD_FlyingSpeed | real | No | |
WD_GrowthSpeedBase | real | No | |
WD_GrowthSpeedPerLevel | real | No | |
WD_Hash | hashtable | No | |
WD_HeightMultiplyer | real | No | |
WD_I | integervar | No | |
WD_Lightning | string | No | |
WD_LightningCounter | integer | No | |
WD_LightningHeight | real | No | |
WD_MaxDrainTargets | integer | No | |
WD_MaxGrowth | real | No | |
WD_RealCache | real | Yes | |
WD_Seed | unitcode | No | |
WD_SeedsBase | real | No | |
WD_SeedsPerLevel | real | No | |
WD_Spell | abilcode | No | |
WD_StartSize | real | No | |
WD_TempGroup | group | No | |
WD_TempLightning | lightning | No | |
WD_TempPoint | location | No | |
WD_TempPoint2 | location | No | |
WD_TempReal | real | No | |
WD_TempU | unit | No | |
WD_TempU2 | unit | No | |
WD_TempX | real | No | |
WD_TempY | real | No | |
WD_TempZ | real | No | |
WD_TempZ2 | real | No | |
WD_U | unit | No | |
WD_UHandle | integer | No | |
WD_UHandleC | integer | No | |
WD_Weed | unitcode | No | |
WD_WeedsGroup | group | No | |
WealthofAges_PlayerLoc | location | No | |
WealthofAges_RandomNum | integer | No | |
WeaponMetalUnsuccessful | boolean | No | |
WeaponsThatUpgrade | itemcode | Yes | |
WeaponsUpgradingBase | itemcode | Yes | |
WeaponUnsuccessful | boolean | No | |
weatherEffect | weathereffect | No | |
WhirlPoolCaster | unit | No | |
WhirlpoolHash | hashtable | No | |
WhirlPools | group | No | |
witchdoc_pos | location | No | |
Witchdoc_tempgroup | group | No | |
witchdoctor | unit | No | |
x | integer | No | |
x2 | integervar | No | |
XP_ConstantFactor | real | No | |
XP_LevelFactor | real | No | |
XP_PreviousValueFactor | real | No | |
XP_Table | real | No | |
XPForLevel | real | Yes | |
y | real | No | |
zinteger | integer | Yes | |
zpoint | location | No | |
zstring | string | Yes |
//TESH.scrollpos=3
//TESH.alwaysfold=0
/*~~~~~~~How to Import/Update this system~~~~~~~*\
1. Delete (if existing) the old Equipment System trigger
2. Copy the new Equipment system Trigger into your map
~~~~~~~How to Set Up~~~~~~~
1. Copy all the abilities used by this system (here they are all under "human") or create your own ones
they are one ability for opening the inventory, one for closing, one which makes items "clickable", and for each empty slot a ability
2. Create all your items which can be equipped and give them as ability ONLY the [clickable item] ability
3. For each equipable item create a icon ability (best if you use "channel" as base ability)
2 things to be careful with:
Make sure that the item icon's Spell ID for each type of item is distinct
i.e. Swords => acidbomb
shields => bloodlust
(be aware that the Cancel button has it's own Spell ID => absorb)
Make sure that every it em ability icon has the X and Y button coordinates matching with the Type of item it is
i.e. Necklaces = 0,0 ; Helmets = 1,0 ; Gloves = 2,0
Necklace of Power = 0,0
Glory Necklace = 0,0
Bloodlust Helmet = 1,0
Green Cap = 1,0
Gloves of the IronDwarf = 2,0
4. Create abilities for each equipable item. DONT use the same ability twice on items of different equipment classes!!
Dont give those abilities to the items! They will be given to the equipping unit ingame by this system.
I advise you to take abilities which have no icon because it would show up on the owner
(of course this can be useful if an item should grant a active ability, for example!)
if you need an icon ability which should be invisible (aura for example), create a spellbook, add that ability to it,
disable the spellbook at map start and register the spellbook as an ability given by your item ;)
5. initialize your items and classes
6. make sure that all the adjustable variables in the setup part fit your map now
~~~~~~~Hints~~~~~~~
to show/hide the rawcode of anything in the object editor just press CTRL + D
to copy the systems abilities (open,close, empty offhand,...) you have to import all the BTN files importet in this map aswell!!
aaaaaand you are done :D
gl & hf
The_Witcher
*/
//TESH.scrollpos=24
//TESH.alwaysfold=0
\* */
/****************************************************************\
* *
* *
* Advanced Equipment System *
* *
* *
* by The_Witcher *
\****************************************************************/
/* *\
--------- Introduction ---------
what this is:
- Equipment System
- MUI
- in vJass
what this is not:
- Inventory System
- in GUI/normal Jass
- exportable to GUI or normal Jass
Content:
1) How to register items
2) How to use this system
3) Additional functions
4) Trigger Events
5) To all vJassers out there
--------- 1) How to register items (1 ---------
this system isn't that perfekt that it can do everything on its own ;D
At first you have to initialize your classes.
Do this by calling:
call AdvancedEquipmentSystem_RegisterNewClass( icon, class)
"icon" is the icon ability that indicates an empty slot
"class" is a simple integer that determines the class
You also have to register all items you want to be equipable to this system.
With the following function you can do that:
call AdvancedEquipmentSystem_RegisterItem(itemid, abilities, icon, class, twohanded, animation)
"itemid" is of course the rawcode of the item the rest is assigned to
"icon" is the ability shown inside the Equipment when the item is equipped
"class" is the slot the item jumps in (be sure to adjust the x/y coordinates inside the object editor according
to the coordinates of the "empty slot" icon ability of the same class)
"twohanded" is a boolean (i think self explaining) !!works only for mainhand items!!
"animation" is a string which indicates the animation tag added when this item is equipped
ATTENTION: offhand slot items animations always overwrite mainhand slot items animations
until now your items have no effect when equipped...
you can add countless abilities to one itemtype! (actually its limited to around 8000 abilities in total :D )
to add one use:
call AdvancedEquipmentSystem_AddItemAbility( integer itemid, integer abi )
"itemid" is the rawcode of the item the rest is assigned to
"abi" is the rawcode of the ability the unit gets when it equips this item
Example:
globals
integer AMULET_CLASS = 2
endglobals
...
call AdvancedEquipmentSystem_RegisterNewClass('A00A', AMULET_CLASS)
...
call AdvancedEquipmentSystem_RegisterItem('I004', 'A008', AMULET_CLASS, false, "Alternate")
call AdvancedEquipmentSystem_AddItemAbility('I004', 'A002')
--------- 2) How to use this system (2 ---------
well its very simple to use:
call InitEquipment ( owner )
owner is the unit that gets the equipment
and thats all^^ whenever this unit uses a registered item, it will get equipped
--------- 3) Additional functions (3 ---------
function IsEquipmentClassEmpty takes unit u, integer class returns boolean
function EquipItem takes unit u, item ite returns nothing
function EquipItemById takes unit u, integer itemId returns nothing
function UnequipItemById takes unit u, integer itemid returns nothing
function UnequipItemByClass takes unit u, integer class returns nothing
function GetEquippedItemTypeId takes unit u, integer class returns integer
function ChangeEquipmentOwner takes unit u, unit newowner returns nothing
function UnequipAll takes unit u returns nothing
function EnableItemEquip takes integer itemId, integer unitType, boolean flag returns nothing
--------- 4) Trigger Events (4 ---------
function RegisterItemEquipEvent takes code func returns nothing
function RegisterItemUnequipEvent takes code func returns nothing
//use GetTriggeringItemId and GetEquippingUnit to get the involved units
--------- 5) To all vJassers out there (5 ---------
well as we understand vJass we can do things much easier ^^
the above mentioned functions are all simple wrappers for the included structs methods:
struct Equipment
methods
create takes unit u returns Equipment => creates a new Equipment for unit u
destroy takes nothing returns nothing => destroys an existing Equipment
equip takes integer itemId returns nothing => equips the given item
unequip takes integer class returns nothing => unequips whatever is in the given class
static method disable takes integer itemId, integer unitType, boolean flag returns nothing
=> disables a itemtype for a unit type so it can't equip it anymore
members
unit owner => the equipment unit, use "set yourEquipment.owner = yourunit" to transfer the Equipment to another unit
readonly EquipmentItem array Item => the equipped EquipmentItem in a slot, specified by the array index
--------- Thanks to all who gave useful critism or tips for improvement ---------
The_Witcher
//TESH.scrollpos=93
//TESH.alwaysfold=0
library AdvancedEquipmentSystem requires LinkedListModule, RegisterPlayerUnitEvent
// The_Witcher's Equipment System
//
// This is my easy to use equipment system, which adds an equipment screen to any unit you want.
// equipped items can give up abilities to the owner and can change the animations of him...
//
//
// To learn how to use this system please read the "How To Use" delivered in the demo map
//
//
// Requirements:
// JASS knowledge
// LinkedList (http://www.hiveworkshop.com/forums/jass-resources-412/snippet-linkedlistmodule-206552/)
// RegisterPlayerUnitEvent (http://www.hiveworkshop.com/forums/jass-resources-412/snippet-registerplayerunitevent-203338/)
//
// have fun^^
//**************************************************
//********************SETUP PART********************
//**************************************************
globals
// this is the rawcode of the inventory dummy unit
public constant integer INVENTORY_DUMMY = 'h007'
// this is the class you selected as mainhand class
public constant integer MAINHAND_CLASS = 0
// this is the class you selected as offhand class
public constant integer OFFHAND_CLASS = 1
// this is the amount of total classes you have
public constant integer CLASSES = 10
// this is the ability to close the inventory
public constant integer EXIT_ABILITY = 'A00G' // DONE
// this is the ability to open the inventory
public constant integer OPEN_ABILITY = 'A003' // DONE
// this is the ability which gives the dummy the same inventory as your hero has
public constant integer INVENTORY_ABILITY = 'AInv'
// this is the icon ability shown in the offhand slot when a twhoanded weapon is equipeed
public constant integer TWOHAND_ABILITY = 'A091' //DONE
public constant boolean SHOW_TWOHAND_ABILITY = true
// this is the text shown when a unit is trying to equip an item which it isnt allowed to
// example: " can't equip " becomes ingame something like Soldier can't equip Giant Sword
public constant string UNABLE_TO_EQUIP_STRING = " can't equip "
endglobals
//************************************************************
//********************SETUP PART ENDS HERE********************
//************************************************************
//*****************Don't edit anything below******************
//************************************************************
globals
private trigger OnEquip
private trigger OnUnequip
private integer TriggeringItem
private unit EquippingUnit
private hashtable table
endglobals
private struct AbilityList extends array
integer abi
implement LinkedList
static method create takes nothing returns thistype
return .createNode()
endmethod
method remove takes nothing returns nothing
call .removeNode()
call .deallocate()
endmethod
method add takes integer abi returns nothing
local thistype new = .allocate()
set new.abi = abi
call .insertNode(new)
endmethod
endstruct
// **** struct EquipmentItem ****
private struct EquipmentItem extends array
readonly integer id
readonly integer class
readonly AbilityList abilities
readonly integer icon
readonly boolean twohanded
readonly string tag
static method operator [] takes integer itemid returns EquipmentItem
return itemid - 'I000' + CLASSES + 1
endmethod
static method create takes integer id, integer icon, integer class, boolean twohanded, string animation returns EquipmentItem
local EquipmentItem this = id - 'I000' + CLASSES + 1
if id - 'I000' >= 0 then
call SaveBoolean(table, id - 'I000', 0, true)
endif
set .id = id
set .class = class
set .icon = icon
if id >= CLASSES + 1 then
set .abilities = AbilityList.create()
if class == MAINHAND_CLASS then
set .twohanded = twohanded
else
set .twohanded = false
endif
if (class == MAINHAND_CLASS or class == OFFHAND_CLASS) and id != 0 then
set .tag = animation
else
set .tag = ""
endif
endif
return this
endmethod
method addAbility takes integer abi returns nothing
call .abilities.add( abi)
endmethod
method applyAbilities takes unit u, boolean add returns nothing
local AbilityList node = .abilities.next
loop
exitwhen node.head
if add then
call UnitAddAbility(u, node.abi)
else
call UnitRemoveAbility(u, node.abi)
endif
set node = node.next
endloop
endmethod
endstruct
public function RegisterNewClass takes integer emptyicon, integer class returns nothing
call EquipmentItem.create('I000' - CLASSES - 1 + class, emptyicon, class, false, "")
endfunction
// **** struct Equipment ****
struct Equipment
private static EquipmentItem twohandIcon
private unit u
private unit dummy
readonly string animtag = ""
readonly EquipmentItem array Item [12]
static method operator [] takes unit u returns Equipment
return LoadInteger(table, GetHandleId(u), 0)
endmethod
method operator owner takes nothing returns unit
return .u
endmethod
method operator owner= takes unit new returns nothing
local integer i = 0
loop
exitwhen i >= CLASSES
if .Item[i] != 0 then
call .Item[i].applyAbilities(.u, false)
call .Item[i].applyAbilities(new, true)
endif
set i = i + 1
endloop
call AddUnitAnimationProperties(.u, .animtag, false)
call UnitRemoveAbility(.u, OPEN_ABILITY)
call AddUnitAnimationProperties(new, .animtag, true)
call UnitAddAbility(new, OPEN_ABILITY)
set .u = new
call SaveInteger(table, GetHandleId(.u), 0, this)
call SaveInteger(table, GetHandleId(.dummy), 0, this)
endmethod
method syncInventories takes nothing returns nothing
local integer i = 0
loop
exitwhen i >= 6
call RemoveItem(UnitItemInSlot(.dummy, i))
call UnitAddItemToSlotById(.dummy, GetItemTypeId(UnitItemInSlot(.u, i)), i)
call SetItemDroppable(UnitItemInSlot(.dummy, i), false)
set i = i + 1
endloop
endmethod
private method refreshAnimation takes nothing returns nothing
local string a = .Item[MAINHAND_CLASS].tag
if .Item[OFFHAND_CLASS] != 0 and .Item[OFFHAND_CLASS] != twohandIcon then
set a = .Item[OFFHAND_CLASS].tag
endif
call AddUnitAnimationProperties(.u, .animtag, false)
call AddUnitAnimationProperties(.u, a, true)
set .animtag = a
endmethod
method equipEmptyClass takes integer class returns nothing
call UnitAddAbility(.dummy, EquipmentItem(class).icon)
set .Item[class] = 0
endmethod
method equipTwohandIcon takes nothing returns nothing
call UnitAddAbility(.dummy, twohandIcon.icon)
set .Item[OFFHAND_CLASS] = twohandIcon
endmethod
method unequip takes integer class returns nothing
local integer i = 0
local EquipmentItem toRemove = .Item[class]
if toRemove != 0 then
if toRemove.twohanded then
call UnitRemoveAbility(.dummy, TWOHAND_ABILITY)
call .equipEmptyClass(OFFHAND_CLASS)
endif
call toRemove.applyAbilities(.u, false)
call UnitAddItemById(.u, toRemove.id)
set TriggeringItem = toRemove.id
set EquippingUnit = .u
call TriggerEvaluate(OnUnequip)
call UnitRemoveAbility(.dummy, toRemove.icon)
else
call UnitRemoveAbility(.dummy, EquipmentItem(class).icon)
endif
set .Item[class] = 0
call .refreshAnimation()
endmethod
method equip takes integer id returns nothing
local EquipmentItem toEquip = EquipmentItem[id]
local EquipmentItem mainEquip = .Item[MAINHAND_CLASS]
// remove existing
if mainEquip != 0 then
if toEquip.twohanded or (mainEquip.twohanded and (toEquip.class == OFFHAND_CLASS or toEquip.class == MAINHAND_CLASS)) then
call .unequip(MAINHAND_CLASS)
call .unequip(OFFHAND_CLASS)
if toEquip.class == MAINHAND_CLASS and not toEquip.twohanded then
call .equipEmptyClass(OFFHAND_CLASS)
elseif toEquip.class == OFFHAND_CLASS then
call .equipEmptyClass(MAINHAND_CLASS)
endif
endif
endif
call .unequip(toEquip.class)
// new is twohanded ?
if toEquip.twohanded then
call .unequip(OFFHAND_CLASS)
call .equipTwohandIcon()
if not SHOW_TWOHAND_ABILITY then
call UnitRemoveAbility(.dummy, twohandIcon.icon)
endif
endif
// equip new
call toEquip.applyAbilities(.u, true)
call UnitAddAbility(.dummy, toEquip.icon)
set .Item[toEquip.class] = toEquip
call .refreshAnimation()
// fire trigger
set EquippingUnit = .u
set TriggeringItem = id
call TriggerEvaluate(OnEquip)
endmethod
static method disable takes integer itemId, integer unitType, boolean flag returns nothing
call SaveBoolean(table, itemId - 'I000', unitType, flag)
endmethod
private method onDestroy takes nothing returns nothing
local integer i = 0
call RemoveUnit(.dummy)
loop
exitwhen i > 12
if .Item[i] != 0 then
call .Item[i].applyAbilities(.u, false)
endif
set i = i + 1
endloop
call AddUnitAnimationProperties(.u, .animtag, false)
call UnitRemoveAbility(.u, OPEN_ABILITY)
endmethod
static method create takes unit u returns Equipment
local Equipment this = Equipment[u]
local integer i = 0
local integer id = GetPlayerId(GetOwningPlayer(u))
if this != 0 then
call RemoveUnit(.dummy)
else
set this = Equipment.allocate()
call SaveInteger(table, GetHandleId(u), 0, this)
endif
set .u = u
set .dummy = CreateUnit(GetOwningPlayer(u), INVENTORY_DUMMY, GetUnitX(u), GetUnitY(u), 0)
call SaveInteger(table, GetHandleId(.dummy), 0, this)
call UnitAddAbility(.dummy, INVENTORY_ABILITY)
call UnitAddAbility(.dummy, EXIT_ABILITY)
call UnitAddAbility(.u, OPEN_ABILITY)
loop
exitwhen i >= CLASSES
call .equipEmptyClass(i)
set i = i + 1
endloop
return this
endmethod
// **** Other Stuff ****
private static method Access takes nothing returns boolean
local unit u = GetTriggerUnit()
local Equipment inv = Equipment[u]
local integer class
local integer i = 0
if GetSpellAbilityId() == EXIT_ABILITY then
if GetLocalPlayer() == GetOwningPlayer(inv.u) then
call ClearSelection()
call SelectUnit(inv.u, true)
endif
elseif GetSpellAbilityId() == OPEN_ABILITY then
call SetUnitX(inv.dummy, GetUnitX(inv.u))
call SetUnitY(inv.dummy, GetUnitY(inv.u))
if GetLocalPlayer() == GetOwningPlayer(inv.u) then
call ClearSelection()
call SelectUnit(inv.dummy, true)
endif
call inv.syncInventories()
elseif GetUnitTypeId(u) == INVENTORY_DUMMY then
loop
exitwhen i >= CLASSES
if inv.Item[i].icon == GetSpellAbilityId() then
set class = i
set i = CLASSES
endif
set i = i + 1
endloop
call inv.unequip(class)
call inv.equipEmptyClass(class)
call inv.syncInventories()
endif
set u = null
return false
endmethod
private static method ItemEquip takes nothing returns boolean
local unit u = GetTriggerUnit()
local item ite = GetManipulatedItem()
local integer i = 0
local Equipment inv = Equipment[u]
local EquipmentItem invIte = EquipmentItem[GetItemTypeId(ite)]
if GetItemTypeId(ite) - 'I000' >= 0 then
if LoadBoolean(table, GetItemTypeId(ite) - 'I000', 0) then
if invIte != 0 and inv != 0 then
if not LoadBoolean(table, GetItemTypeId(ite) - 'I000', GetUnitTypeId(inv.u)) then
if u == inv.u then
call inv.equip(GetItemTypeId(ite))
call RemoveItem(ite)
call inv.syncInventories()
elseif u == inv.dummy then
loop
exitwhen i >= 6
if invIte.id == GetItemTypeId(UnitItemInSlot(inv.u, i)) then
call UnitUseItem(inv.u, UnitItemInSlot(inv.u, i))
call RemoveItem(ite)
set i = 7
endif
set i = i + 1
endloop
endif
else
call DisplayTextToPlayer(GetOwningPlayer(inv.u), 0, 0, GetUnitName(inv.u) + UNABLE_TO_EQUIP_STRING + GetItemName(ite))
endif
endif
endif
endif
set u = null
set ite = null
return false
endmethod
private static method onInit takes nothing returns nothing
set OnEquip = CreateTrigger()
set OnUnequip = CreateTrigger()
call RegisterPlayerUnitEvent(EVENT_PLAYER_UNIT_USE_ITEM, function Equipment.ItemEquip)
call RegisterPlayerUnitEvent(EVENT_PLAYER_UNIT_SPELL_CAST, function Equipment.Access)
set .twohandIcon = EquipmentItem.create('I000' - 1, TWOHAND_ABILITY, 0, false, "")
set table = InitHashtable()
endmethod
implement optional SaveLoadPlugin
endstruct
// **** Trigger Events ****
function RegisterItemEquipEvent takes code func returns nothing
call TriggerAddCondition(OnEquip, Filter(func))
endfunction
function RegisterItemUnequipEvent takes code func returns nothing
call TriggerAddCondition(OnUnequip, Filter(func))
endfunction
function GetTriggeringItemId takes nothing returns integer
return TriggeringItem
endfunction
function GetEquippingUnit takes nothing returns unit
return EquippingUnit
endfunction
//wrappers
function InitEquipment takes unit whichunit returns nothing
call Equipment.create(whichunit)
endfunction
public function RegisterItem takes integer itemid, integer icon, integer class, boolean twohanded, string animation returns nothing
call EquipmentItem.create(itemid, icon, class, twohanded, animation)
endfunction
public function AddItemAbility takes integer itemid, integer abi returns nothing
call EquipmentItem[itemid].addAbility(abi)
endfunction
function EnableItemEquip takes integer itemId, integer unitType, boolean flag returns nothing
call Equipment.disable(itemId, unitType, not flag)
endfunction
function IsEquipmentClassEmpty takes unit u, integer class returns boolean
return Equipment[u].Item[class] == 0
endfunction
function EquipItem takes unit u, item ite returns nothing
call Equipment[u].equip(GetItemTypeId(ite))
call RemoveItem(ite)
endfunction
function EquipItemById takes unit u, integer itemId returns nothing
call Equipment[u].equip(itemId)
endfunction
function UnequipItemById takes unit u, integer itemid returns nothing
local integer class = EquipmentItem[itemid].class
if Equipment[u].Item[class].id == itemid then
call Equipment[u].unequip(EquipmentItem[itemid].class)
call Equipment[u].equipEmptyClass(class)
endif
endfunction
function UnequipItemByClass takes unit u, integer class returns nothing
call Equipment[u].unequip(class)
call Equipment[u].equipEmptyClass(class)
endfunction
function GetEquippedItemTypeId takes unit u, integer class returns integer
return Equipment[u].Item[class].id
endfunction
function ChangeEquipmentOwner takes unit u, unit newowner returns nothing
set Equipment[u].owner = newowner
endfunction
function UnequipAll takes unit u returns nothing
local integer i = 1
loop
call Equipment[u].unequip(i)
call Equipment[u].equipEmptyClass(i)
exitwhen i >= CLASSES
set i = i + 1
endloop
endfunction
endlibrary
//Code indented using The_Witcher's Script Language Aligner
//Download the newest version and report bugs at www.hiveworkshop.com
//TESH.scrollpos=726
//TESH.alwaysfold=0
scope SetupAdvancedEquipmentSystem initializer Initialize
globals
integer AMULET_CLASS = 2
integer ARMOR_CLASS = 3
integer BOOTS_CLASS = 4
integer GLOVES_CLASS = 5
integer RING_CLASS = 6
integer HELMET_CLASS = 7
integer SPECIAL_CLASS = 8
integer TP_CLASS = 9
endglobals
private function Initialize takes nothing returns nothing
// here you have to give an icon ability for every empty slot
// this is my setup for the testmap
// WARNING: class 0 and 1 are taken as main and offhand slots! start with 2 for new indexes
call AdvancedEquipmentSystem_RegisterNewClass('A095', AdvancedEquipmentSystem_MAINHAND_CLASS)//Mainhand //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A096', AdvancedEquipmentSystem_OFFHAND_CLASS)//Offhand //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A00A', AMULET_CLASS)//Amulet DONE
call AdvancedEquipmentSystem_RegisterNewClass('A092', ARMOR_CLASS)//Armor // DONE
call AdvancedEquipmentSystem_RegisterNewClass('A093', BOOTS_CLASS)//Boots //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A097', RING_CLASS)//Ring //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A094', HELMET_CLASS)//Helmet //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A098', SPECIAL_CLASS)//Special //DONE
call AdvancedEquipmentSystem_RegisterNewClass('A05F', TP_CLASS) //teleport
//in this part set up the items
//you can do this anytime in your map (may cause bugs if not at initialization) by using
//call AdvancedEquipmentSystem_RegisterItem(itemid, abilities, icon, class, twohanded, animation)
// look into the HowToUse for further information
// itemid | icon | class | twohanded? | animationtag
//1 HANDED SWORD
// call AdvancedEquipmentSystem_RegisterItem('I004', 'A008', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "Alternate")
// call AdvancedEquipmentSystem_AddItemAbility('I004', 'A002')
//sacred stone
// call AdvancedEquipmentSystem_RegisterItem('I000', 'A00K', SPECIAL_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I000', 'A000')
// call AdvancedEquipmentSystem_AddItemAbility('I000', 'A00Y')
// OFF HAND SWORD
// call AdvancedEquipmentSystem_RegisterItem('I02E' , 'A09A', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "Alternate")
// call AdvancedEquipmentSystem_AddItemAbility('I02E', 'A09B')
//Razor - TWO HANDED
// call AdvancedEquipmentSystem_RegisterItem('I006', 'A00J', AdvancedEquipmentSystem_MAINHAND_CLASS, true, "Channel")
// call AdvancedEquipmentSystem_AddItemAbility('I006', 'A00I')
//shield
// call AdvancedEquipmentSystem_RegisterItem('I001', 'A009', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "defend")
// call AdvancedEquipmentSystem_AddItemAbility('I001', 'A006')
//Amulet of darkness
// call AdvancedEquipmentSystem_RegisterItem('I00A', 'A00B', AMULET_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I00A', 'A00S')
//Golems Skin
// call AdvancedEquipmentSystem_RegisterItem('I003', 'A00N', ARMOR_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I003', 'A00U')
//Windwalkers
// call AdvancedEquipmentSystem_RegisterItem('I002', 'A00O', BOOTS_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I002', 'A00X')
//Stonefists
// call AdvancedEquipmentSystem_RegisterItem('I007', 'A00P', GLOVES_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I007', 'A00W')
//Arthuriel
// call AdvancedEquipmentSystem_RegisterItem('I008', 'A00Q', RING_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I008', 'A00T')
//Mask of Horror
// call AdvancedEquipmentSystem_RegisterItem('I009', 'A00R', HELMET_CLASS, false, "")
// call AdvancedEquipmentSystem_AddItemAbility('I009', 'A00V')
// THESE ARE MY ITEMS::::::
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AMULETS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Amulet of Cosmic
call AdvancedEquipmentSystem_RegisterItem('I00Z', 'A00T', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00Z', 'A0J3')
// Amulet of Golden
call AdvancedEquipmentSystem_RegisterItem('I009', 'A091', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I009', 'A0AZ')
// Amulet of Thoughts
call AdvancedEquipmentSystem_RegisterItem('I00B', 'A0A7', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00B', 'A09X')
// Amulet of Scorched
call AdvancedEquipmentSystem_RegisterItem('I00C', 'A0AC', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00C', 'A0CM')
// Amulet of Haunted
call AdvancedEquipmentSystem_RegisterItem('I00O', 'A0AD', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00O', 'A0HC')
// Amulet of Forest
call AdvancedEquipmentSystem_RegisterItem('I00Y', 'A0AI', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00Y', 'A03L')
// Amulet of Pirate
call AdvancedEquipmentSystem_RegisterItem('I00R', 'A0AT', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00R', 'A09Y')
// Amulet of Energies
call AdvancedEquipmentSystem_RegisterItem('I00S', 'A0AV', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00S', 'A03S')
// Amulet of Sting
call AdvancedEquipmentSystem_RegisterItem('I010', 'A0AW', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I010', 'A0A0')
// Amulet of Charm
call AdvancedEquipmentSystem_RegisterItem('I011', 'A0AX', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I011', 'A09W')
// Amulet of Wonders
call AdvancedEquipmentSystem_RegisterItem('I012', 'A0AY', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I012', 'A0A1')
// Amulet of Cosmic +1
call AdvancedEquipmentSystem_RegisterItem('I083', 'A0A2', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I083', 'A0AZ')
// Amulet of Golden +1
call AdvancedEquipmentSystem_RegisterItem('I087', 'A0A5', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I087', 'A0CM')
// Amulet of Thoughts +1
call AdvancedEquipmentSystem_RegisterItem('I088', 'A0A6', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I088', 'A03L')
// Amulet of Scorched +1
call AdvancedEquipmentSystem_RegisterItem('I089', 'A0A8', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I089', 'A03S')
// Amulet of Haunted +1
call AdvancedEquipmentSystem_RegisterItem('I08A', 'A0A9', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08A', 'A09W')
// Amulet of Forest +1
call AdvancedEquipmentSystem_RegisterItem('I08B', 'A0AA', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08B', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08B', 'A0AZ')
// Amulet of Pirate +1
call AdvancedEquipmentSystem_RegisterItem('I08F', 'A0AB', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08F', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08F', 'A0CM')
// Amulet of Energies +1
call AdvancedEquipmentSystem_RegisterItem('I08C', 'A0AE', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08C', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08C', 'A03L')
// Amulet of Sting +1
call AdvancedEquipmentSystem_RegisterItem('I08G', 'A0AH', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08G', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08G', 'A03S')
// Amulet of Charm +1
call AdvancedEquipmentSystem_RegisterItem('I08D', 'A0AJ', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08D', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08D', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08D', 'A0AZ')
// Amulet of Wonders +1
call AdvancedEquipmentSystem_RegisterItem('I08E', 'A0AK', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08E', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08E', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08E', 'A0CM')
// Amulet of Cosmic +2
call AdvancedEquipmentSystem_RegisterItem('I084', 'A0AM', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I084', 'A0AZ')
call AdvancedEquipmentSystem_AddItemAbility('I084', 'A0J3')
// Amulet of Golden +2
call AdvancedEquipmentSystem_RegisterItem('I008', 'A0AO', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I008', 'A03L')
// Amulet of Thoughts +2
call AdvancedEquipmentSystem_RegisterItem('I08H', 'A0B1', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08H', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08H', 'A0J3')
// Amulet of Scorched +2
call AdvancedEquipmentSystem_RegisterItem('I08I', 'A0B0', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08I', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08I', 'A0AZ')
// Amulet of Haunted +2
call AdvancedEquipmentSystem_RegisterItem('I08J', 'A0AS', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08J', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08J', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I08J', 'A0J3')
// Amulet of Forest +2
call AdvancedEquipmentSystem_RegisterItem('I08K', 'A0AR', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08K', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08K', 'A03S')
// Amulet of Pirate +2
call AdvancedEquipmentSystem_RegisterItem('I08L', 'A0AU', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08L', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08L', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08L', 'A0AZ')
call AdvancedEquipmentSystem_AddItemAbility('I08L', 'A0J3')
// Amulet of Energies +2
call AdvancedEquipmentSystem_RegisterItem('I08M', 'A0AN', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08M', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08M', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08M', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I08M', 'A0AZ')
// Amulet of Sting +2
call AdvancedEquipmentSystem_RegisterItem('I08N', 'A0B2', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08N', 'A0HC')
call AdvancedEquipmentSystem_AddItemAbility('I08N', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I08N', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I08N', 'A0CM')
// Amulet of Charm +2
call AdvancedEquipmentSystem_RegisterItem('I08O', 'A0AL', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08O', 'A0BB')
// Amulet of Wonders +2
call AdvancedEquipmentSystem_RegisterItem('I08P', 'A0B9', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08P', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I08P', 'A0A7')
// Amulet of Cosmic +3
call AdvancedEquipmentSystem_RegisterItem('I085', 'A0BE', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I085', 'A0CM')
// Amulet of Golden +3
call AdvancedEquipmentSystem_RegisterItem('I08Q', 'A0BH', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I08Q', 'A03S')
// Amulet of Thoughts +3
call AdvancedEquipmentSystem_RegisterItem('I09J', 'A0BM', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09J', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09J', 'A0AZ')
// Amulet of Scorched +3
call AdvancedEquipmentSystem_RegisterItem('I09K', 'A0BK', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09K', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09K', 'A03L')
// Amulet of Haunted +3
call AdvancedEquipmentSystem_RegisterItem('I09L', 'A0BI', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09L', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09L', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I09L', 'A0AZ')
// Amulet of Forest +3
call AdvancedEquipmentSystem_RegisterItem('I09M', 'A0BG', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09M', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09M', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I09M', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I09M', 'A0AZ')
// Amulet of Pirate +3
call AdvancedEquipmentSystem_RegisterItem('I09N', 'A0BJ', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09N', 'A0BO')
// Amulet of Energies +3
call AdvancedEquipmentSystem_RegisterItem('I09O', 'A0BF', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09O', 'A0BO')
call AdvancedEquipmentSystem_AddItemAbility('I09O', 'A0CM')
// Amulet of Sting +3
call AdvancedEquipmentSystem_RegisterItem('I09P', 'A0BL', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09P', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09P', 'A03L')
// Amulet of Charm +3
call AdvancedEquipmentSystem_RegisterItem('I09Q', 'A0BD', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09Q', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09Q', 'A09W')
// Amulet of Wonders +3
call AdvancedEquipmentSystem_RegisterItem('I09R', 'A0BN', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09R', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09R', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I09R', 'A03S')
// Amulet of Cosmic +4
call AdvancedEquipmentSystem_RegisterItem('I086', 'A0BR', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I086', 'A03L')
// Amulet of Golden +4
call AdvancedEquipmentSystem_RegisterItem('I09S', 'A0BU', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09S', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09S', 'A0AZ')
// Amulet of Thoughts +4
call AdvancedEquipmentSystem_RegisterItem('I09T', 'A0BZ', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09T', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09T', 'A03S')
// Amulet of Scorched +4
call AdvancedEquipmentSystem_RegisterItem('I09U', 'A0BX', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09U', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09U', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I09U', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I09U', 'A0AZ')
// Amulet of Haunted +4
call AdvancedEquipmentSystem_RegisterItem('I09V', 'A0BV', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09V', 'A0BB')
// Amulet of Forest +4
call AdvancedEquipmentSystem_RegisterItem('I09W', 'A0BT', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09W', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09W', 'A03L')
// Amulet of Pirate +4
call AdvancedEquipmentSystem_RegisterItem('I09X', 'A0BW', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09X', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09X', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I09X', 'A0AZ')
// Amulet of Energies +4
call AdvancedEquipmentSystem_RegisterItem('I09Y', 'A0BS', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09Y', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09Y', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I09Y', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I09Y', 'A0CM')
// Amulet of Sting +4
call AdvancedEquipmentSystem_RegisterItem('I09Z', 'A0BY', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I09Z', 'A0BB')
call AdvancedEquipmentSystem_AddItemAbility('I09Z', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I09Z', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I09Z', 'A09W')
// Amulet of Charm +4
call AdvancedEquipmentSystem_RegisterItem('I0A0', 'A0BQ', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A0', 'A0BP')
// Amulet of Wonders +4
call AdvancedEquipmentSystem_RegisterItem('I0A1', 'A0C0', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A1', 'A0BP')
call AdvancedEquipmentSystem_AddItemAbility('I0A1', 'A03L')
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ARMORS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Armor of Kobold
call AdvancedEquipmentSystem_RegisterItem('I013', 'A0C1', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I013', 'A0FI')
// Armor of Bronze
call AdvancedEquipmentSystem_RegisterItem('I017', 'A0C2', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I017', 'A07D')
// Armor of Bloodstain
call AdvancedEquipmentSystem_RegisterItem('I00A', 'A0C3', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00A', 'A0FV')
// Armor of Dragon Skin
call AdvancedEquipmentSystem_RegisterItem('I014', 'A0C4', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I014', 'A07E')
// Armor of Fire Plate
call AdvancedEquipmentSystem_RegisterItem('I015', 'A0C5', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I015', 'A0FK')
// Armor of Raging Lion
call AdvancedEquipmentSystem_RegisterItem('I016', 'A0C6', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I016', 'A0LV')
// Armor of Sacred Ghoul
call AdvancedEquipmentSystem_RegisterItem('I018', 'A0C7', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I018', 'A07F')
// Armor of Heavy Stone
call AdvancedEquipmentSystem_RegisterItem('I019', 'A0C8', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I019', 'A0M2')
// Armor of Arbalest
call AdvancedEquipmentSystem_RegisterItem('I01A', 'A0C9', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01A', 'A0EA')
// Armor of Collosus
call AdvancedEquipmentSystem_RegisterItem('I01B', 'A0CA', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01B', 'A07G')
call AdvancedEquipmentSystem_AddItemAbility('I01B', 'A0FI')
// Armor of Holy
call AdvancedEquipmentSystem_RegisterItem('I01C', 'A0CB', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01C', 'A0DN')
// Armor of Kobold +1
call AdvancedEquipmentSystem_RegisterItem('I0A2', 'A0DB', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A2', 'A07D')
// Armor of Bronze +1
call AdvancedEquipmentSystem_RegisterItem('I0A3', 'A0CK', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A3', 'A07E')
// Armor of Bloodstain +1
call AdvancedEquipmentSystem_RegisterItem('I0AL', 'A0CG', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AL', 'A0LV')
// Armor of Dragon Skin +1
call AdvancedEquipmentSystem_RegisterItem('I0AN', 'A0CV', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AN', 'A0M2')
// Armor of Fire Plate +1
call AdvancedEquipmentSystem_RegisterItem('I0B8', 'A0CZ', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B8', 'A07G')
call AdvancedEquipmentSystem_AddItemAbility('I0B8', 'A0FI')
// Armor of Raging Lion +1
call AdvancedEquipmentSystem_RegisterItem('I0A6', 'A0DF', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A6', 'A07H')
// Armor of Sacred Ghoul +1
call AdvancedEquipmentSystem_RegisterItem('I0A7', 'A0DJ', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A7', 'A07I')
// Armor of Heavy Stone +1
call AdvancedEquipmentSystem_RegisterItem('I0A8', 'A0D3', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A8', 'A0DO')
// Armor of Arbalest +1
call AdvancedEquipmentSystem_RegisterItem('I0A9', 'A0CC', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A9', 'A0DP')
// Armor of Collosus +1
call AdvancedEquipmentSystem_RegisterItem('I0AA', 'A0CR', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AA', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AA', 'A07D')
// Armor of Holy +1
call AdvancedEquipmentSystem_RegisterItem('I0AB', 'A0D7', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AB', 'A0DO')
call AdvancedEquipmentSystem_AddItemAbility('I0AB', 'A07E')
call AdvancedEquipmentSystem_AddItemAbility('I0AB', 'A07D')
// Armor of Kobold +2
call AdvancedEquipmentSystem_RegisterItem('I0AC', 'A0DC', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AC', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AC', 'A0FI')
// Armor of Bronze +2
call AdvancedEquipmentSystem_RegisterItem('I0AD', 'A0CO', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AD', 'A0LV')
// Armor of Bloodstain +2
call AdvancedEquipmentSystem_RegisterItem('I0AE', 'A0CH', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AE', 'A0M2')
call AdvancedEquipmentSystem_AddItemAbility('I0AE', 'A0FI')
// Armor of Dragon Skin +2
call AdvancedEquipmentSystem_RegisterItem('I0B7', 'A0CW', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B7', 'A07H')
// Armor of Fire Plate +2
call AdvancedEquipmentSystem_RegisterItem('I0A4', 'A0D0', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0A4', 'A0OD')
// Armor of Raging Lion +2
call AdvancedEquipmentSystem_RegisterItem('I0AF', 'A0DG', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AF', 'A0DP')
// Armor of Sacred Ghoul +2
call AdvancedEquipmentSystem_RegisterItem('I0AG', 'A0DK', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AG', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AG', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AG', 'A0FI')
// Armor of Heavy Stone +2
call AdvancedEquipmentSystem_RegisterItem('I0AH', 'A0D4', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AH', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AH', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AH', 'A07E')
// Armor of Arbalest +2
call AdvancedEquipmentSystem_RegisterItem('I0AI', 'A0CD', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AI', 'A02E')
call AdvancedEquipmentSystem_AddItemAbility('I0AI', 'A07D')
// Armor of Collosus +2
call AdvancedEquipmentSystem_RegisterItem('I0AJ', 'A0CS', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AJ', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AJ', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AJ', 'A07G')
call AdvancedEquipmentSystem_AddItemAbility('I0AJ', 'A0FI')
// Armor of Holy +2
call AdvancedEquipmentSystem_RegisterItem('I0AK', 'A0D8', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AK', 'A0DQ')
// Armor of Kobold +3
call AdvancedEquipmentSystem_RegisterItem('I0AO', 'A0DD', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AO', 'A07E')
// Armor of Bronze +3
call AdvancedEquipmentSystem_RegisterItem('I0AP', 'A0CP', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AP', 'A0M2')
// Armor of Bloodstain +3
call AdvancedEquipmentSystem_RegisterItem('I0AQ', 'A0CI', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AQ', 'A07H')
// Armor of Dragon Skin +3
call AdvancedEquipmentSystem_RegisterItem('I0AM', 'A0CX', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AM', 'A0DO')
// Armor of Fire Plate +3
call AdvancedEquipmentSystem_RegisterItem('I0AR', 'A0D1', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AR', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AR', 'A07D')
// Armor of Raging Lion +3
call AdvancedEquipmentSystem_RegisterItem('I0AS', 'A0DH', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AS', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0AS', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AS', 'A07E')
// Armor of Sacred Ghoul +3
call AdvancedEquipmentSystem_RegisterItem('I0AT', 'A0DL', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AT', 'A02E')
call AdvancedEquipmentSystem_AddItemAbility('I0AT', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AT', 'A0FI')
// Armor of Heavy Stone +3
call AdvancedEquipmentSystem_RegisterItem('I0AU', 'A0D5', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AU', 'A0DR')
// Armor of Arbalest +3
call AdvancedEquipmentSystem_RegisterItem('I0AV', 'A0CE', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AV', 'A0DQ')
call AdvancedEquipmentSystem_AddItemAbility('I0AV', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0AV', 'A0FI')
// Armor of Collosus +3
call AdvancedEquipmentSystem_RegisterItem('I0AW', 'A0CT', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AW', 'A0DS')
// Armor of Holy +3
call AdvancedEquipmentSystem_RegisterItem('I0AX', 'A0D9', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AX', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0AX', 'A07E')
// Armor of Kobold +4
call AdvancedEquipmentSystem_RegisterItem('I0AY', 'A0DE', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AY', 'A0LV')
// Armor of Bronze +4
call AdvancedEquipmentSystem_RegisterItem('I0AZ', 'A0CQ', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0AZ', 'A07H')
// Armor of Bloodstain +4
call AdvancedEquipmentSystem_RegisterItem('I0B0', 'A0CJ', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B0', 'A0DP')
// Armor of Dragon Skin +4
call AdvancedEquipmentSystem_RegisterItem('I0B1', 'A0CY', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B1', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0B1', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0B1', 'A07E')
// Armor of Fire Plate +4
call AdvancedEquipmentSystem_RegisterItem('I0B2', 'A0D2', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B2', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0B2', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0B2', 'A07G')
call AdvancedEquipmentSystem_AddItemAbility('I0B2', 'A0FI')
// Armor of Raging Lion +4
call AdvancedEquipmentSystem_RegisterItem('I0B3', 'A0DI', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B3', 'A0DQ')
call AdvancedEquipmentSystem_AddItemAbility('I0B3', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0B3', 'A0FI')
// Armor of Sacred Ghoul +4
call AdvancedEquipmentSystem_RegisterItem('I0B4', 'A0DM', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B4', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0B4', 'A07D')
// Armor of Heavy Stone +4
call AdvancedEquipmentSystem_RegisterItem('I0B6', 'A0D6', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B6', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0B6', 'A0M2')
// Armor of Arbalest +4
call AdvancedEquipmentSystem_RegisterItem('I0B5', 'A0CF', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B5', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0B5', 'A07E')
call AdvancedEquipmentSystem_AddItemAbility('I0B5', 'A07G')
call AdvancedEquipmentSystem_AddItemAbility('I0B5', 'A0FI')
// Armor of Collosus +4
call AdvancedEquipmentSystem_RegisterItem('I0B9', 'A0CU', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0B9', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0B9', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0B9', 'A07D')
// Armor of Holy +4
call AdvancedEquipmentSystem_RegisterItem('I0BA', 'A0DA', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BA', 'A0DS')
call AdvancedEquipmentSystem_AddItemAbility('I0BA', 'A0DP')
call AdvancedEquipmentSystem_AddItemAbility('I0BA', 'A07D')
call AdvancedEquipmentSystem_AddItemAbility('I0BA', 'A0LV')
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GLOVES////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Gloves of Ordinary
call AdvancedEquipmentSystem_RegisterItem('I01G', 'A0DT', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01G', 'A0H8')
// Gloves of Wind
call AdvancedEquipmentSystem_RegisterItem('I01D', 'A0DU', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01D', 'A0H9')
// Gloves of Metal
call AdvancedEquipmentSystem_RegisterItem('I01E', 'A0DV', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01E', 'A0HA')
// Gloves of Stronghold
call AdvancedEquipmentSystem_RegisterItem('I01F', 'A0DW', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01F', 'A02S')
// Gloves of Silent Touch
call AdvancedEquipmentSystem_RegisterItem('I01H', 'A0DX', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01H', 'A08F')
// Gloves of Water Essence
call AdvancedEquipmentSystem_RegisterItem('I01I', 'A0DY', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01I', 'A0HB')
// Gloves of Mighty Earth
call AdvancedEquipmentSystem_RegisterItem('I01J', 'A0DZ', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01J', 'A0HF')
// Gloves of Vampiric Bite
call AdvancedEquipmentSystem_RegisterItem('I01K', 'A0E0', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01K', 'A0HD')
// Gloves of Shining
call AdvancedEquipmentSystem_RegisterItem('I01L', 'A0E1', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01L', 'A02P')
// Gloves of High Will
call AdvancedEquipmentSystem_RegisterItem('I01M', 'A0E2', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01M', 'A08G')
// Gloves of Dark Fate
call AdvancedEquipmentSystem_RegisterItem('I01N', 'A0E3', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01N', 'A0HG')
// Gloves of Ordinary +1
call AdvancedEquipmentSystem_RegisterItem('I0BB', 'A0ET', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BB', 'A0H8')
call AdvancedEquipmentSystem_AddItemAbility('I0BB', 'A0HH')
// Gloves of Wind +1
call AdvancedEquipmentSystem_RegisterItem('I0BC', 'A0H4', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BC', 'A0HA')
// Gloves of Metal +1
call AdvancedEquipmentSystem_RegisterItem('I0BD', 'A0EL', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BD', 'A02S')
call AdvancedEquipmentSystem_AddItemAbility('I0BD', 'A0HH')
// Gloves of Stronghold +1
call AdvancedEquipmentSystem_RegisterItem('I0BE', 'A0F5', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BE', 'A0HB')
// Gloves of Silent Touch +1
call AdvancedEquipmentSystem_RegisterItem('I0BF', 'A0F1', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BF', 'A0HF')
call AdvancedEquipmentSystem_AddItemAbility('I0BF', 'A0HH')
// Gloves of Water Essence +1
call AdvancedEquipmentSystem_RegisterItem('I0BG', 'A0GV', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BG', 'A02P')
// Gloves of Mighty Earth +1
call AdvancedEquipmentSystem_RegisterItem('I0BH', 'A0EP', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BH', 'A08G')
call AdvancedEquipmentSystem_AddItemAbility('I0BH', 'A0HH')
// Gloves of Vampiric Bite +1
call AdvancedEquipmentSystem_RegisterItem('I0BI', 'A0GR', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BI', 'A0HG')
call AdvancedEquipmentSystem_AddItemAbility('I0BI', 'A0H8')
// Gloves of Shining +1
call AdvancedEquipmentSystem_RegisterItem('I0BJ', 'A0EX', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BJ', 'A02Q')
call AdvancedEquipmentSystem_AddItemAbility('I0BJ', 'A0H8')
// Gloves of High Will +1
call AdvancedEquipmentSystem_RegisterItem('I0BK', 'A0EH', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BK', 'A0M8')
// Gloves of Dark Fate +1
call AdvancedEquipmentSystem_RegisterItem('I0BL', 'A0E4', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BL', 'A0M8')
call AdvancedEquipmentSystem_AddItemAbility('I0BL', 'A0H8')
call AdvancedEquipmentSystem_AddItemAbility('I0BL', 'A0HH')
// Gloves of Ordinary +2
call AdvancedEquipmentSystem_RegisterItem('I0BM', 'A0EU', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BM', 'A0H9')
// Gloves of Wind +2
call AdvancedEquipmentSystem_RegisterItem('I0BN', 'A0H5', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BN', 'A02S')
// Gloves of Metal +2
call AdvancedEquipmentSystem_RegisterItem('I0BO', 'A0EM', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BO', 'A0HB')
// Gloves of Stronghold +2
call AdvancedEquipmentSystem_RegisterItem('I0BP', 'A0F6', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BP', 'A0HD')
// Gloves of Silent Touch +2
call AdvancedEquipmentSystem_RegisterItem('I0BQ', 'A0F2', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BQ', 'A08G')
// Gloves of Water Essence +2
call AdvancedEquipmentSystem_RegisterItem('I0BR', 'A0GW', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BR', 'A0HG')
call AdvancedEquipmentSystem_AddItemAbility('I0BR', 'A0H8')
// Gloves of Mighty Earth +2
call AdvancedEquipmentSystem_RegisterItem('I0BS', 'A0EQ', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BS', 'A0HG')
call AdvancedEquipmentSystem_AddItemAbility('I0BS', 'A0H8')
call AdvancedEquipmentSystem_AddItemAbility('I0BS', 'A0H9')
// Gloves of Vampiric Bite +2
call AdvancedEquipmentSystem_RegisterItem('I0BT', 'A0GS', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BT', 'A0M8')
call AdvancedEquipmentSystem_AddItemAbility('I0BT', 'A0H8')
// Gloves of Shining +2
call AdvancedEquipmentSystem_RegisterItem('I0BU', 'A0EY', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BU', 'A08H')
call AdvancedEquipmentSystem_AddItemAbility('I0BU', 'A0HH')
// Gloves of High Will +2
call AdvancedEquipmentSystem_RegisterItem('I0BV', 'A0EI', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BV', 'A02R')
// Gloves of Dark Fate +2
call AdvancedEquipmentSystem_RegisterItem('I0BW', 'A0EC', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BW', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0BW', 'A0H9')
// Gloves of Ordinary +3
call AdvancedEquipmentSystem_RegisterItem('I0BX', 'A0EV', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BX', 'A0H9')
call AdvancedEquipmentSystem_AddItemAbility('I0BX', 'A0HH')
// Gloves of Wind +3
call AdvancedEquipmentSystem_RegisterItem('I0BY', 'A0H6', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BY', 'A08F')
// Gloves of Metal +3
call AdvancedEquipmentSystem_RegisterItem('I0BZ', 'A0EN', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0BZ', 'A0HF')
call AdvancedEquipmentSystem_AddItemAbility('I0BZ', 'A0HH')
// Gloves of Stronghold +3
call AdvancedEquipmentSystem_RegisterItem('I0C0', 'A0F7', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C0', 'A08G')
// Gloves of Silent Touch +3
call AdvancedEquipmentSystem_RegisterItem('I0C1', 'A0F3', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C1', 'A0E8')
// Gloves of Water Essence +3
call AdvancedEquipmentSystem_RegisterItem('I0C2', 'A0GX', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C2', 'A0M8')
// Gloves of Mighty Earth +3
call AdvancedEquipmentSystem_RegisterItem('I0C3', 'A0ER', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C3', 'A08H')
// Gloves of Vampiric Bite +3
call AdvancedEquipmentSystem_RegisterItem('I0C4', 'A0GT', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C4', 'A02R')
// Gloves of Shining +3
call AdvancedEquipmentSystem_RegisterItem('I0C5', 'A0EZ', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C5', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0C5', 'A0H9')
call AdvancedEquipmentSystem_AddItemAbility('I0C5', 'A0HH')
// Gloves of High Will +3
call AdvancedEquipmentSystem_RegisterItem('I0C6', 'A0EJ', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C6', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0C6', 'A08F')
// Gloves of Dark Fate +3
call AdvancedEquipmentSystem_RegisterItem('I0C7', 'A0EE', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C7', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0C7', 'A08F')
call AdvancedEquipmentSystem_AddItemAbility('I0C7', 'A0H9')
call AdvancedEquipmentSystem_AddItemAbility('I0C7', 'A0HH')
// Gloves of Ordinary +4
call AdvancedEquipmentSystem_RegisterItem('I0C8', 'A0EW', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C8', 'A0H9')
call AdvancedEquipmentSystem_AddItemAbility('I0C8', 'A0HH')
call AdvancedEquipmentSystem_AddItemAbility('I0C8', 'A0H8')
// Gloves of Wind +4
call AdvancedEquipmentSystem_RegisterItem('I0C9', 'A0H7', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0C9', 'A08F')
call AdvancedEquipmentSystem_AddItemAbility('I0C9', 'A0H9')
// Gloves of Metal +4
call AdvancedEquipmentSystem_RegisterItem('I0CA', 'A0EO', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CA', 'A08G')
call AdvancedEquipmentSystem_AddItemAbility('I0CA', 'A0HH')
// Gloves of Stronghold +4
call AdvancedEquipmentSystem_RegisterItem('I0CB', 'A0FQ', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CB', 'A0HG')
call AdvancedEquipmentSystem_AddItemAbility('I0CB', 'A0H8')
call AdvancedEquipmentSystem_AddItemAbility('I0CB', 'A0H9')
// Gloves of Silent Touch +4
call AdvancedEquipmentSystem_RegisterItem('I0CC', 'A0F4', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CC', 'A08H')
// Gloves of Water Essence +4
call AdvancedEquipmentSystem_RegisterItem('I0CD', 'A0H0', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CD', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0CD', 'A0H8')
// Gloves of Mighty Earth +4
call AdvancedEquipmentSystem_RegisterItem('I0CE', 'A0ES', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CE', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0CE', 'A02S')
call AdvancedEquipmentSystem_AddItemAbility('I0CE', 'A0HH')
// Gloves of Vampiric Bite +4
call AdvancedEquipmentSystem_RegisterItem('I0CF', 'A0GU', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CF', 'A02R')
call AdvancedEquipmentSystem_AddItemAbility('I0CF', 'A08F')
call AdvancedEquipmentSystem_AddItemAbility('I0CF', 'A0HA')
// Gloves of Shining +4
call AdvancedEquipmentSystem_RegisterItem('I0CG', 'A0F0', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CG', 'A0HI')
// Gloves of High Will +4
call AdvancedEquipmentSystem_RegisterItem('I0CH', 'A0EK', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CH', 'A0HI')
call AdvancedEquipmentSystem_AddItemAbility('I0CH', 'A0HA')
call AdvancedEquipmentSystem_AddItemAbility('I0CH', 'A0HH')
// Gloves of Dark Fate +4
call AdvancedEquipmentSystem_RegisterItem('I0CI', 'A0EG', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CI', 'A0HI')
call AdvancedEquipmentSystem_AddItemAbility('I0CI', 'A08F')
call AdvancedEquipmentSystem_AddItemAbility('I0CI', 'A0H9')
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// RINGS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Ring of Simplicity
call AdvancedEquipmentSystem_RegisterItem('I01O', 'A0HJ', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01O', 'AIx1')
// Ring of Storing
call AdvancedEquipmentSystem_RegisterItem('I01P', 'A0HK', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01P', 'AIx2')
// Ring of Jade
call AdvancedEquipmentSystem_RegisterItem('I01Q', 'A0HL', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01Q', 'A0E7')
// Ring of Mysterious Charm
call AdvancedEquipmentSystem_RegisterItem('I00Q', 'A0HM', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00Q', 'A0MG')
// Ring of Dark Entity
call AdvancedEquipmentSystem_RegisterItem('I01R', 'A0HN', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01R', 'AIx5')
// Ring of Divinity
call AdvancedEquipmentSystem_RegisterItem('I01S', 'A0HO', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01S', 'A045')
// Ring of Fortitude
call AdvancedEquipmentSystem_RegisterItem('I00W', 'A0HP', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00W', 'A0HY')
// Ring of Royal High
call AdvancedEquipmentSystem_RegisterItem('I00V', 'A0HQ', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00V', 'A049')
// Ring of Eternal Glow
call AdvancedEquipmentSystem_RegisterItem('I00U', 'A0HR', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00U', 'A0HZ')
// Ring of Enchanted Wisdom
call AdvancedEquipmentSystem_RegisterItem('I00X', 'A0HS', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00X', 'A03J')
// Ring of Destiny
call AdvancedEquipmentSystem_RegisterItem('I01T', 'A0HT', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01T', 'A0I0')
// Ring of Simplicity +1
call AdvancedEquipmentSystem_RegisterItem('I0CJ', 'A0IY', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CJ', 'AIx2')
// Ring of Storing +1
call AdvancedEquipmentSystem_RegisterItem('I0CK', 'A0JC', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CK', 'A0MG')
// Ring of Jade +1
call AdvancedEquipmentSystem_RegisterItem('I0CL', 'A0IM', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CL', 'A045')
// Ring of Mysterious Charm +1
call AdvancedEquipmentSystem_RegisterItem('I0CM', 'A0IQ', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CM', 'A049')
// Ring of Dark Entity +1
call AdvancedEquipmentSystem_RegisterItem('I0CN', 'A0HU', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CN', 'A03J')
// Ring of Divinity +1
call AdvancedEquipmentSystem_RegisterItem('I0CO', 'A0I6', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CO', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CO', 'AIx2')
// Ring of Fortitude +1
call AdvancedEquipmentSystem_RegisterItem('I0CP', 'A0II', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CP', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CP', 'A0MG')
// Ring of Royal High +1
call AdvancedEquipmentSystem_RegisterItem('I0CQ', 'A0IU', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CQ', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CQ', 'A045')
// Ring of Eternal Glow +1
call AdvancedEquipmentSystem_RegisterItem('I0CR', 'A0IE', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CR', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CR', 'A049')
// Ring of Enchanted Wisdom +1
call AdvancedEquipmentSystem_RegisterItem('I0CS', 'A0IA', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CS', 'A0M7')
// Ring of Destiny +1
call AdvancedEquipmentSystem_RegisterItem('I0CT', 'A0I2', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CT', 'A0M7')
call AdvancedEquipmentSystem_AddItemAbility('I0CT', 'AIx2')
// Ring of Simplicity +2
call AdvancedEquipmentSystem_RegisterItem('I0CU', 'A0IZ', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CU', 'AIx2')
call AdvancedEquipmentSystem_AddItemAbility('I0CU', 'AIx1')
// Ring of Storing +2
call AdvancedEquipmentSystem_RegisterItem('I0CV', 'A0JD', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CV', 'A045')
// Ring of Jade +2
call AdvancedEquipmentSystem_RegisterItem('I0CW', 'A0IN', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CW', 'A049')
call AdvancedEquipmentSystem_AddItemAbility('I0CW', 'AIx1')
// Ring of Mysterious Charm +2
call AdvancedEquipmentSystem_RegisterItem('I0CX', 'A0IR', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CX', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CX', 'AIx2')
// Ring of Dark Entity +2
call AdvancedEquipmentSystem_RegisterItem('I0CY', 'A0HV', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CY', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CY', 'A0MG')
call AdvancedEquipmentSystem_AddItemAbility('I0CY', 'AIx1')
// Ring of Divinity +2
call AdvancedEquipmentSystem_RegisterItem('I0CZ', 'A0I7', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0CZ', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0CZ', 'A049')
// Ring of Fortitude +2
call AdvancedEquipmentSystem_RegisterItem('I0D0', 'A0IJ', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D0', 'A0M7')
call AdvancedEquipmentSystem_AddItemAbility('I0D0', 'AIx1')
// Ring of Royal High +2
call AdvancedEquipmentSystem_RegisterItem('I0D1', 'A0IV', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D1', 'A0M7')
call AdvancedEquipmentSystem_AddItemAbility('I0D1', 'A0MG')
// Ring of Eternal Glow +2
call AdvancedEquipmentSystem_RegisterItem('I0D2', 'A0IF', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D2', 'A03X')
call AdvancedEquipmentSystem_AddItemAbility('I0D2', 'AIx2')
// Ring of Enchanted Wisdom +2
call AdvancedEquipmentSystem_RegisterItem('I0D3', 'A0IB', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D3', 'A040')
// Ring of Destiny +2
call AdvancedEquipmentSystem_RegisterItem('I0D4', 'A0I3', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D4', 'A040')
call AdvancedEquipmentSystem_AddItemAbility('I0D4', 'AIx2')
call AdvancedEquipmentSystem_AddItemAbility('I0D4', 'AIx1')
// Ring of Simplicity +3
call AdvancedEquipmentSystem_RegisterItem('I0D5', 'A0J0', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D5', 'A0MG')
// Ring of Storing +3
call AdvancedEquipmentSystem_RegisterItem('I0D6', 'A0JE', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D6', 'A049')
// Ring of Jade +3
call AdvancedEquipmentSystem_RegisterItem('I0D7', 'A0IO', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D7', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0D7', 'AIx2')
// Ring of Mysterious Charm +3
call AdvancedEquipmentSystem_RegisterItem('I0D8', 'A0IS', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D8', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0D8', 'A045')
// Ring of Dark Entity +3
call AdvancedEquipmentSystem_RegisterItem('I0D9', 'A0HW', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0D9', 'A0M7')
// Ring of Divinity +3
call AdvancedEquipmentSystem_RegisterItem('I0DA', 'A0I8', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DA', 'A0M7')
call AdvancedEquipmentSystem_AddItemAbility('I0DA', 'A0MG')
// Ring of Fortitude +3
call AdvancedEquipmentSystem_RegisterItem('I0DB', 'A0IK', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DB', 'A03X')
call AdvancedEquipmentSystem_AddItemAbility('I0DB', 'AIx2')
call AdvancedEquipmentSystem_AddItemAbility('I0DB', 'AIx1')
// Ring of Royal High +3
call AdvancedEquipmentSystem_RegisterItem('I0DC', 'A0IW', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DC', 'A040')
call AdvancedEquipmentSystem_AddItemAbility('I0DC', 'AIx2')
// Ring of Eternal Glow +3
call AdvancedEquipmentSystem_RegisterItem('I0DD', 'A0IG', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DD', 'A040')
call AdvancedEquipmentSystem_AddItemAbility('I0DD', 'A045')
// Ring of Enchanted Wisdom +3
call AdvancedEquipmentSystem_RegisterItem('I0DE', 'A0IC', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DE', 'A044')
// Ring of Destiny +3
call AdvancedEquipmentSystem_RegisterItem('I0DF', 'A0I4', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DF', 'A040')
call AdvancedEquipmentSystem_AddItemAbility('I0DF', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0DF', 'A0MG')
// Ring of Simplicity +4
call AdvancedEquipmentSystem_RegisterItem('I0DG', 'A0J1', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DG', 'A045')
// Ring of Storing +4
call AdvancedEquipmentSystem_RegisterItem('I0DH', 'A0JF', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DH', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0DH', 'AIx2')
// Ring of Jade +4
call AdvancedEquipmentSystem_RegisterItem('I0DI', 'A0IP', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DI', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0DI', 'A049')
// Ring of Mysterious Charm +4
call AdvancedEquipmentSystem_RegisterItem('I0DJ', 'A0IT', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DJ', 'A0M7')
call AdvancedEquipmentSystem_AddItemAbility('I0DJ', 'A0MG')
// Ring of Dark Entity +4
call AdvancedEquipmentSystem_RegisterItem('I0DK', 'A0HX', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DK', 'A040')
// Ring of Divinity +4
call AdvancedEquipmentSystem_RegisterItem('I0DL', 'A0I9', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DL', 'A040')
call AdvancedEquipmentSystem_AddItemAbility('I0DL', 'A045')
// Ring of Fortitude +4
call AdvancedEquipmentSystem_RegisterItem('I0DM', 'A0IL', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DM', 'A044')
call AdvancedEquipmentSystem_AddItemAbility('I0DM', 'AIx2')
// Ring of Royal High +4
call AdvancedEquipmentSystem_RegisterItem('I0DN', 'A0IX', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DN', 'A044')
call AdvancedEquipmentSystem_AddItemAbility('I0DN', 'A049')
// Ring of Eternal Glow +4
call AdvancedEquipmentSystem_RegisterItem('I0DO', 'A0IH', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DO', 'A044')
call AdvancedEquipmentSystem_AddItemAbility('I0DO', 'A03J')
call AdvancedEquipmentSystem_AddItemAbility('I0DO', 'A0MG')
// Ring of Enchanted Wisdom +4
call AdvancedEquipmentSystem_RegisterItem('I0DP', 'A0ID', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DP', 'A047')
// Ring of Destiny +4
call AdvancedEquipmentSystem_RegisterItem('I0DQ', 'A0I5', RING_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DQ', 'A047')
call AdvancedEquipmentSystem_AddItemAbility('I0DQ', 'A045')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BOOTS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Boots of Basic
call AdvancedEquipmentSystem_RegisterItem('I01U', 'A0JG', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01U', 'A0L0')
// Boots of Thieves
call AdvancedEquipmentSystem_RegisterItem('I01V', 'A0JH', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01V', 'A0L1')
// Boots of Vigor
call AdvancedEquipmentSystem_RegisterItem('I01W', 'A0JI', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01W', 'A0L2')
// Boots of Muleback
call AdvancedEquipmentSystem_RegisterItem('I01Z', 'A0JJ', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01Z', 'A0LT')
// Boots of Feyleaf
call AdvancedEquipmentSystem_RegisterItem('I01Y', 'A0JK', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01Y', 'A0ME')
// Boots of Eagle Eye
call AdvancedEquipmentSystem_RegisterItem('I020', 'A0JL', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I020', 'A0L5')
// Boots of Primate
call AdvancedEquipmentSystem_RegisterItem('I021', 'A0JM', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I021', 'A0L6')
// Boots of Thrust
call AdvancedEquipmentSystem_RegisterItem('I026', 'A0JN', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I026', 'A0L7')
// Boots of Dragon Skin
call AdvancedEquipmentSystem_RegisterItem('I01X', 'A0JO', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I01X', 'A0MH')
// Boots of Fierce Wind
call AdvancedEquipmentSystem_RegisterItem('I027', 'A0JS', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I027', 'A0ML')
// Boots of Majestic Glow
call AdvancedEquipmentSystem_RegisterItem('I028', 'A0JT', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I028', 'A0LB')
// Boots of Basic +1
call AdvancedEquipmentSystem_RegisterItem('I00N', 'A0JU', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00N', 'A0L1')
// Boots of Thieves +1
call AdvancedEquipmentSystem_RegisterItem('I03Q', 'A0KQ', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03Q', 'A0LA')
// Boots of Vigor +1
call AdvancedEquipmentSystem_RegisterItem('I04H', 'A0KY', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04H', 'A0ME')
// Boots of Muleback +1
call AdvancedEquipmentSystem_RegisterItem('I03O', 'A0KF', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03O', 'A0MM')
// Boots of Feyleaf +1
call AdvancedEquipmentSystem_RegisterItem('I03L', 'A0K6', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03L', 'A0L7')
// Boots of Eagle Eye +1
call AdvancedEquipmentSystem_RegisterItem('I082', 'A0K2', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I082', 'A0L9')
// Boots of Primate +1
call AdvancedEquipmentSystem_RegisterItem('I03P', 'A0KE', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03P', 'A0LB')
// Boots of Thrust +1
call AdvancedEquipmentSystem_RegisterItem('I03R', 'A0KU', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03R', 'A0LB')
call AdvancedEquipmentSystem_AddItemAbility('I03R', 'A0L0')
// Boots of Dragon Skin +1
call AdvancedEquipmentSystem_RegisterItem('I03J', 'A0JY', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03J', 'A0MN')
// Boots of Fierce Wind +1
call AdvancedEquipmentSystem_RegisterItem('I03M', 'A0KA', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03M', 'A0LJ')
// Boots of Majestic Glow +1
call AdvancedEquipmentSystem_RegisterItem('I03N', 'A0KJ', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03N', 'A02H')
// Boots of Basic +2
call AdvancedEquipmentSystem_RegisterItem('I04I', 'A0JV', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04I', 'A0L2')
// Boots of Thieves +2
call AdvancedEquipmentSystem_RegisterItem('I04T', 'A0KR', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04T', 'A0ME')
// Boots of Vigor +2
call AdvancedEquipmentSystem_RegisterItem('I04U', 'A0KZ', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04U', 'A0L6')
// Boots of Muleback +2
call AdvancedEquipmentSystem_RegisterItem('I04V', 'A0KG', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04V', 'A0MH')
// Boots of Feyleaf +2
call AdvancedEquipmentSystem_RegisterItem('I04W', 'A0K7', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04W', 'A0LB')
// Boots of Eagle Eye +2
call AdvancedEquipmentSystem_RegisterItem('I03K', 'A0K3', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I03K', 'A0LH')
// Boots of Primate +2
call AdvancedEquipmentSystem_RegisterItem('I04X', 'A0KN', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04X', 'A0ML')
call AdvancedEquipmentSystem_AddItemAbility('I04X', 'A0L3')
// Boots of Thrust +2
call AdvancedEquipmentSystem_RegisterItem('I04Y', 'A0KV', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04Y', 'A02H')
// Boots of Dragon Skin +2
call AdvancedEquipmentSystem_RegisterItem('I04Z', 'A0JZ', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04Z', 'A0MO')
// Boots of Fierce Wind +2
call AdvancedEquipmentSystem_RegisterItem('I050', 'A0KB', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I050', 'A0LL')
call AdvancedEquipmentSystem_AddItemAbility('I050', 'A0L0')
// Boots of Majestic Glow +2
call AdvancedEquipmentSystem_RegisterItem('I04J', 'A0KK', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I04J', 'A0LM')
call AdvancedEquipmentSystem_AddItemAbility('I04J', 'A0L1')
// Boots of Basic +3
call AdvancedEquipmentSystem_RegisterItem('I051', 'A0JW', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I051', 'A0LT')
// Boots of Thieves +3
call AdvancedEquipmentSystem_RegisterItem('I052', 'A0KS', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I052', 'A0L5')
// Boots of Vigor +3
call AdvancedEquipmentSystem_RegisterItem('I079', 'A0LR', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I079', 'A0L8')
// Boots of Muleback +3
call AdvancedEquipmentSystem_RegisterItem('I07A', 'A0KH', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07A', 'A0LB')
// Boots of Feyleaf +3
call AdvancedEquipmentSystem_RegisterItem('I07B', 'A0K8', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07B', 'A0LD')
// Boots of Eagle Eye +3
call AdvancedEquipmentSystem_RegisterItem('I07C', 'A0K4', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07C', 'A0LC')
// Boots of Primate +3
call AdvancedEquipmentSystem_RegisterItem('I07E', 'A0KO', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07E', 'A0LE')
// Boots of Thrust +3
call AdvancedEquipmentSystem_RegisterItem('I07F', 'A0KW', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07F', 'A0LL')
call AdvancedEquipmentSystem_AddItemAbility('I07F', 'A0L0')
// Boots of Dragon Skin +3
call AdvancedEquipmentSystem_RegisterItem('I07H', 'A0K0', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07H', 'A0LF')
// Boots of Fierce Wind +3
call AdvancedEquipmentSystem_RegisterItem('I07V', 'A0KC', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07V', 'A0MZ')
// Boots of Majestic Glow +3
call AdvancedEquipmentSystem_RegisterItem('I07W', 'A0KL', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07W', 'A0LF')
call AdvancedEquipmentSystem_AddItemAbility('I07W', 'A0L3')
// Boots of Basic +4
call AdvancedEquipmentSystem_RegisterItem('I07I', 'A0JX', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07I', 'A0L4')
// Boots of Thieves +4
call AdvancedEquipmentSystem_RegisterItem('I07M', 'A0KT', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07M', 'A0MH')
// Boots of Vigor +4
call AdvancedEquipmentSystem_RegisterItem('I07N', 'A0LS', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07N', 'A0LB')
call AdvancedEquipmentSystem_AddItemAbility('I07N', 'A0L0')
// Boots of Muleback +4
call AdvancedEquipmentSystem_RegisterItem('I07P', 'A0KI', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07P', 'A0LC')
// Boots of Feyleaf +4
call AdvancedEquipmentSystem_RegisterItem('I07Q', 'A0K9', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07Q', 'A0LL')
// Boots of Eagle Eye +4
call AdvancedEquipmentSystem_RegisterItem('I07R', 'A0K5', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07R', 'A0LM')
call AdvancedEquipmentSystem_AddItemAbility('I07R', 'A0L1')
// Boots of Primate +4
call AdvancedEquipmentSystem_RegisterItem('I07S', 'A0KP', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07S', 'A0N0')
// Boots of Thrust +4
call AdvancedEquipmentSystem_RegisterItem('I07T', 'A0KX', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07T', 'A0N0')
call AdvancedEquipmentSystem_AddItemAbility('I07T', 'A0LT')
// Boots of Dragon Skin +4
call AdvancedEquipmentSystem_RegisterItem('I07U', 'A0K1', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07U', 'A050')
call AdvancedEquipmentSystem_AddItemAbility('I07U', 'A0LA')
// Boots of Fierce Wind +4
call AdvancedEquipmentSystem_RegisterItem('I07X', 'A0KD', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07X', 'A050')
call AdvancedEquipmentSystem_AddItemAbility('I07X', 'A0LA')
call AdvancedEquipmentSystem_AddItemAbility('I07X', 'A0L2')
// Boots of Majestic Glow +4
call AdvancedEquipmentSystem_RegisterItem('I07Y', 'A0KM', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07Y', 'A050')
call AdvancedEquipmentSystem_AddItemAbility('I07Y', 'A0MH')
call AdvancedEquipmentSystem_AddItemAbility('I07Y', 'A0L0')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HELMS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Helm of Jawbone
call AdvancedEquipmentSystem_RegisterItem('I029', 'A0N1', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I029', 'A0PS')
// Helm of Firehorn
call AdvancedEquipmentSystem_RegisterItem('I02A', 'A0N2', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02A', 'A0PT')
// Helm of Emperor
call AdvancedEquipmentSystem_RegisterItem('I02B', 'A0N3', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02B', 'A0G1')
// Helm of Titan
call AdvancedEquipmentSystem_RegisterItem('I02C', 'A0N4', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02C', 'A0FT')
// Helm of Lancelot
call AdvancedEquipmentSystem_RegisterItem('I02D', 'A0N5', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02D', 'A06G')
// Helm of Flash
call AdvancedEquipmentSystem_RegisterItem('I02E', 'A0N6', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02E', 'A0FX')
// Helm of Holy Crest
call AdvancedEquipmentSystem_RegisterItem('I00T', 'A0ND', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I00T', 'A0FO')
// Helm of Chaos
call AdvancedEquipmentSystem_RegisterItem('I02F', 'A0NE', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02F', 'A0G2')
// Helm of Night Guardian
call AdvancedEquipmentSystem_RegisterItem('I02G', 'A0NF', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02G', 'A0FW')
// Helm of Future Insight
call AdvancedEquipmentSystem_RegisterItem('I02H', 'A0NG', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02H', 'A0FB')
// Helm of Absolute Power
call AdvancedEquipmentSystem_RegisterItem('I02I', 'A0NH', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02I', 'A0PV')
// Helm of Jawbone +1
call AdvancedEquipmentSystem_RegisterItem('I0DR', 'A0PC', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DR', 'A0PT')
// Helm of Firehorn +1
call AdvancedEquipmentSystem_RegisterItem('I0DS', 'A0OW', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DS', 'A0FT')
// Helm of Emperor +1
call AdvancedEquipmentSystem_RegisterItem('I0DT', 'A0OH', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DT', 'A0FX')
// Helm of Titan +1
call AdvancedEquipmentSystem_RegisterItem('I0DU', 'A0PO', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DU', 'A0G2')
// Helm of Lancelot +1
call AdvancedEquipmentSystem_RegisterItem('I0DV', 'A0PG', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DV', 'A0FB')
// Helm of Flash +1
call AdvancedEquipmentSystem_RegisterItem('I0DW', 'A0P0', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DW', 'A0FB')
call AdvancedEquipmentSystem_AddItemAbility('I0DW', 'A0PT')
// Helm of Holy Crest +1
call AdvancedEquipmentSystem_RegisterItem('I0DX', 'A0P8', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0DX', 'A0PW')
// Helm of Chaos +1
call AdvancedEquipmentSystem_RegisterItem('I0E2', 'A0NI', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E2', 'A0PW')
call AdvancedEquipmentSystem_AddItemAbility('I0E2', 'A0PT')
// Helm of Night Guardian +1
call AdvancedEquipmentSystem_RegisterItem('I0E3', 'A0PK', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E3', 'A0PX')
// Helm of Future Insight +1
call AdvancedEquipmentSystem_RegisterItem('I0E4', 'A0P4', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E4', 'A0FE')
// Helm of Absolute Power +1
call AdvancedEquipmentSystem_RegisterItem('I0E5', 'A0O7', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E5', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0E5', 'A0PT')
// Helm of Jawbone +2
call AdvancedEquipmentSystem_RegisterItem('I0E6', 'A0PD', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E6', 'A0G1')
// Helm of Firehorn +2
call AdvancedEquipmentSystem_RegisterItem('I0E7', 'A0OX', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E7', 'A0FX')
// Helm of Emperor +2
call AdvancedEquipmentSystem_RegisterItem('I0E8', 'A0OT', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E8', 'A0FW')
// Helm of Titan +2
call AdvancedEquipmentSystem_RegisterItem('I0E9', 'A0PP', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0E9', 'A0FB')
call AdvancedEquipmentSystem_AddItemAbility('I0E9', 'A0PT')
// Helm of Lancelot +2
call AdvancedEquipmentSystem_RegisterItem('I0EA', 'A0PH', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EA', 'A04F')
// Helm of Flash +2
call AdvancedEquipmentSystem_RegisterItem('I0EB', 'A0P1', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EB', 'A04F')
call AdvancedEquipmentSystem_AddItemAbility('I0EB', 'A0G1')
// Helm of Holy Crest +2
call AdvancedEquipmentSystem_RegisterItem('I0EN', 'A0P9', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EN', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0EN', 'A0PS')
// Helm of Chaos +2
call AdvancedEquipmentSystem_RegisterItem('I0EO', 'A0NJ', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EO', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0EO', 'A0FT')
// Helm of Night Guardian +2
call AdvancedEquipmentSystem_RegisterItem('I0EP', 'A0PL', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EP', 'A0LU')
call AdvancedEquipmentSystem_AddItemAbility('I0EP', 'A0PT')
// Helm of Future Insight +2
call AdvancedEquipmentSystem_RegisterItem('I0EQ', 'A0P5', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EQ', 'A04G')
// Helm of Absolute Power +2
call AdvancedEquipmentSystem_RegisterItem('I0ER', 'A0O8', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0ER', 'A04G')
call AdvancedEquipmentSystem_AddItemAbility('I0ER', 'A0G1')
// Helm of Jawbone +3
call AdvancedEquipmentSystem_RegisterItem('I0ES', 'A0PE', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0ES', 'A0FT')
// Helm of Firehorn +3
call AdvancedEquipmentSystem_RegisterItem('I0ET', 'A0OY', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0ET', 'A0G2')
// Helm of Emperor +3
call AdvancedEquipmentSystem_RegisterItem('I0EU', 'A0OU', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EU', 'A0FB')
call AdvancedEquipmentSystem_AddItemAbility('I0EU', 'A0PT')
// Helm of Titan +3
call AdvancedEquipmentSystem_RegisterItem('I0EV', 'A0PQ', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0EV', 'A0PW')
call AdvancedEquipmentSystem_AddItemAbility('I0EV', 'A0PT')
// Helm of Lancelot +3
call AdvancedEquipmentSystem_RegisterItem('I0F4', 'A0PI', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F4', 'A0FE')
// Helm of Flash +3
call AdvancedEquipmentSystem_RegisterItem('I0F5', 'A0P2', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F5', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0F5', 'A0FT')
// Helm of Holy Crest +3
call AdvancedEquipmentSystem_RegisterItem('I0F6', 'A0PA', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F6', 'A0LU')
call AdvancedEquipmentSystem_AddItemAbility('I0F6', 'A0PT')
call AdvancedEquipmentSystem_AddItemAbility('I0F6', 'A0PS')
// Helm of Chaos +3
call AdvancedEquipmentSystem_RegisterItem('I0F7', 'A0NK', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F7', 'A04G')
call AdvancedEquipmentSystem_AddItemAbility('I0F7', 'A0PT')
// Helm of Night Guardian +3
call AdvancedEquipmentSystem_RegisterItem('I0F8', 'A0PM', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F8', 'A0M0')
call AdvancedEquipmentSystem_AddItemAbility('I0F8', 'A0PS')
// Helm of Future Insight +3
call AdvancedEquipmentSystem_RegisterItem('I0F9', 'A0P6', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0F9', 'A02D')
// Helm of Absolute Power +3
call AdvancedEquipmentSystem_RegisterItem('I0FA', 'A0O9', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FA', 'A02D')
call AdvancedEquipmentSystem_AddItemAbility('I0FA', 'A0FT')
// Helm of Jawbone +4
call AdvancedEquipmentSystem_RegisterItem('I0FJ', 'A0PF', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FJ', 'A0FX')
// Helm of Firehorn +4
call AdvancedEquipmentSystem_RegisterItem('I0FL', 'A0OZ', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FL', 'A0FB')
call AdvancedEquipmentSystem_AddItemAbility('I0FL', 'A0PT')
// Helm of Emperor +4
call AdvancedEquipmentSystem_RegisterItem('I0FN', 'A0OV', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FN', 'A04F')
call AdvancedEquipmentSystem_AddItemAbility('I0FN', 'A0G1')
// Helm of Titan +4
call AdvancedEquipmentSystem_RegisterItem('I0FP', 'A0PR', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FP', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0FP', 'A0FT')
// Helm of Lancelot +4
call AdvancedEquipmentSystem_RegisterItem('I0FQ', 'A0PJ', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FQ', 'A04G')
// Helm of Flash +4
call AdvancedEquipmentSystem_RegisterItem('I0FT', 'A0P3', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FT', 'A0M0')
call AdvancedEquipmentSystem_AddItemAbility('I0FT', 'A0PS')
// Helm of Holy Crest +4
call AdvancedEquipmentSystem_RegisterItem('I0FU', 'A0PB', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FU', 'A02D')
call AdvancedEquipmentSystem_AddItemAbility('I0FU', 'A0PT')
// Helm of Chaos +4
call AdvancedEquipmentSystem_RegisterItem('I0FW', 'A0O6', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FW', 'A0M4')
call AdvancedEquipmentSystem_AddItemAbility('I0FW', 'A0G1')
// Helm of Night Guardian +4
call AdvancedEquipmentSystem_RegisterItem('I0G1', 'A0PN', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G1', 'A04E')
call AdvancedEquipmentSystem_AddItemAbility('I0G1', 'A0FT')
// Helm of Future Insight +4
call AdvancedEquipmentSystem_RegisterItem('I0G2', 'A0P7', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G2', 'A0MB')
// Helm of Absolute Power +4
call AdvancedEquipmentSystem_RegisterItem('I0G3', 'A0OA', HELMET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G3', 'A0MB')
call AdvancedEquipmentSystem_AddItemAbility('I0G3', 'A0FX')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SPECIAL ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Orb of Frost
call AdvancedEquipmentSystem_RegisterItem('I038', 'A0PY', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I038', 'A0S5')
call AdvancedEquipmentSystem_AddItemAbility('I038', 'A04H')
call AdvancedEquipmentSystem_AddItemAbility('I038', 'AItg')
call AdvancedEquipmentSystem_AddItemAbility('I038', 'A0RH')
// Orb of Souls
call AdvancedEquipmentSystem_RegisterItem('I034', 'A0PZ', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I034', 'A0J3')
call AdvancedEquipmentSystem_AddItemAbility('I034', 'A0RI')
call AdvancedEquipmentSystem_AddItemAbility('I034', 'A0UH')
call AdvancedEquipmentSystem_AddItemAbility('I034', 'A0PS')
// Orb of Light
call AdvancedEquipmentSystem_RegisterItem('I02W', 'A0Q0', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02W', 'A0RK')
call AdvancedEquipmentSystem_AddItemAbility('I02W', 'A04I')
call AdvancedEquipmentSystem_AddItemAbility('I02W', 'AIat')
call AdvancedEquipmentSystem_AddItemAbility('I02W', 'A0RL')
// Orb of Rock
call AdvancedEquipmentSystem_RegisterItem('I02X', 'A0Q1', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02X', 'A0AZ')
call AdvancedEquipmentSystem_AddItemAbility('I02X', 'A06J')
call AdvancedEquipmentSystem_AddItemAbility('I02X', 'A054')
call AdvancedEquipmentSystem_AddItemAbility('I02X', 'A0PT')
// Orb of Swirls
call AdvancedEquipmentSystem_RegisterItem('I02Y', 'A0Q2', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02Y', 'A0J4')
call AdvancedEquipmentSystem_AddItemAbility('I02Y', 'A02B')
call AdvancedEquipmentSystem_AddItemAbility('I02Y', 'A053')
call AdvancedEquipmentSystem_AddItemAbility('I02Y', 'A0ED')
// Orb of Darkness
call AdvancedEquipmentSystem_RegisterItem('I02Z', 'A0Q3', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02Z', 'A09X')
call AdvancedEquipmentSystem_AddItemAbility('I02Z', 'A0FR')
call AdvancedEquipmentSystem_AddItemAbility('I02Z', 'A088')
call AdvancedEquipmentSystem_AddItemAbility('I02Z', 'A0G1')
// Orb of Lava
call AdvancedEquipmentSystem_RegisterItem('I030', 'A0Q4', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I030', 'A0RM')
call AdvancedEquipmentSystem_AddItemAbility('I030', 'A06K')
call AdvancedEquipmentSystem_AddItemAbility('I030', 'A0RN')
call AdvancedEquipmentSystem_AddItemAbility('I030', 'A0FL')
// Orb of Globes
call AdvancedEquipmentSystem_RegisterItem('I031', 'A0Q5', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I031', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I031', 'A0FC')
call AdvancedEquipmentSystem_AddItemAbility('I031', 'A0RO')
call AdvancedEquipmentSystem_AddItemAbility('I031', 'A0FT')
// Orb of Awe
call AdvancedEquipmentSystem_RegisterItem('I033', 'A0Q6', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I033', 'A04B')
call AdvancedEquipmentSystem_AddItemAbility('I033', 'A0F8')
call AdvancedEquipmentSystem_AddItemAbility('I033', 'A0RQ')
call AdvancedEquipmentSystem_AddItemAbility('I033', 'A0RP')
// Orb of Magnificense
call AdvancedEquipmentSystem_RegisterItem('I036', 'A0Q7', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I036', 'A0HC')
call AdvancedEquipmentSystem_AddItemAbility('I036', 'A06H')
call AdvancedEquipmentSystem_AddItemAbility('I036', 'A089')
call AdvancedEquipmentSystem_AddItemAbility('I036', 'A06G')
// Orb of Matrix
call AdvancedEquipmentSystem_RegisterItem('I039', 'A0Q8', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I039', 'A0J5')
call AdvancedEquipmentSystem_AddItemAbility('I039', 'A0RR')
call AdvancedEquipmentSystem_AddItemAbility('I039', 'A0RS')
call AdvancedEquipmentSystem_AddItemAbility('I039', 'A06G')
call AdvancedEquipmentSystem_AddItemAbility('I039', 'A0RH')
// Orb of Frost +1
call AdvancedEquipmentSystem_RegisterItem('I0G4', 'A0QH', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G4', 'A0J3')
call AdvancedEquipmentSystem_AddItemAbility('I0G4', 'A0RI')
call AdvancedEquipmentSystem_AddItemAbility('I0G4', 'A0UH')
call AdvancedEquipmentSystem_AddItemAbility('I0G4', 'A0PS')
// Orb of Souls +1
call AdvancedEquipmentSystem_RegisterItem('I0G5', 'A0R9', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G5', 'A0AZ')
call AdvancedEquipmentSystem_AddItemAbility('I0G5', 'A04I')
call AdvancedEquipmentSystem_AddItemAbility('I0G5', 'A054')
call AdvancedEquipmentSystem_AddItemAbility('I0G5', 'A0PT')
// Orb of Light +1
call AdvancedEquipmentSystem_RegisterItem('I0G6', 'A0QT', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G6', 'A09X')
call AdvancedEquipmentSystem_AddItemAbility('I0G6', 'A06J')
call AdvancedEquipmentSystem_AddItemAbility('I0G6', 'A088')
call AdvancedEquipmentSystem_AddItemAbility('I0G6', 'A0G1')
// Orb of Rock +1
call AdvancedEquipmentSystem_RegisterItem('I0G7', 'A0R5', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G7', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I0G7', 'A02B')
call AdvancedEquipmentSystem_AddItemAbility('I0G7', 'A0RO')
call AdvancedEquipmentSystem_AddItemAbility('I0G7', 'A0FT')
// Orb of Swirls +1
call AdvancedEquipmentSystem_RegisterItem('I0G8', 'A0RD', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G8', 'A0HC')
call AdvancedEquipmentSystem_AddItemAbility('I0G8', 'A0FR')
call AdvancedEquipmentSystem_AddItemAbility('I0G8', 'A089')
call AdvancedEquipmentSystem_AddItemAbility('I0G8', 'A06G')
// Orb of Darkness +1
call AdvancedEquipmentSystem_RegisterItem('I0G9', 'A0QD', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0G9', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I0G9', 'A06K')
call AdvancedEquipmentSystem_AddItemAbility('I0G9', 'A030')
call AdvancedEquipmentSystem_AddItemAbility('I0G9', 'A0FX')
// Orb of Lava +1
call AdvancedEquipmentSystem_RegisterItem('I0GA', 'A0QP', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GA', 'A09Y')
call AdvancedEquipmentSystem_AddItemAbility('I0GA', 'A0FC')
call AdvancedEquipmentSystem_AddItemAbility('I0GA', 'A0S6')
call AdvancedEquipmentSystem_AddItemAbility('I0GA', 'A0FO')
// Orb of Globes +1
call AdvancedEquipmentSystem_RegisterItem('I0GB', 'A0QL', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GB', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I0GB', 'A0F8')
call AdvancedEquipmentSystem_AddItemAbility('I0GB', 'A08A')
call AdvancedEquipmentSystem_AddItemAbility('I0GB', 'A0G2')
// Orb of Awe +1
call AdvancedEquipmentSystem_RegisterItem('I0GC', 'A0Q9', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GC', 'A0A0')
call AdvancedEquipmentSystem_AddItemAbility('I0GC', 'A06H')
call AdvancedEquipmentSystem_AddItemAbility('I0GC', 'A0N7')
call AdvancedEquipmentSystem_AddItemAbility('I0GC', 'A0FW')
// Orb of Magnificense +1
call AdvancedEquipmentSystem_RegisterItem('I0GD', 'A0QX', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GD', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I0GD', 'A0RR')
call AdvancedEquipmentSystem_AddItemAbility('I0GD', 'A0S7')
call AdvancedEquipmentSystem_AddItemAbility('I0GD', 'A0FB')
// Orb of Matrix +1
call AdvancedEquipmentSystem_RegisterItem('I0GE', 'A0R1', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GE', 'A0A1')
call AdvancedEquipmentSystem_AddItemAbility('I0GE', 'A06L')
call AdvancedEquipmentSystem_AddItemAbility('I0GE', 'A0S8')
call AdvancedEquipmentSystem_AddItemAbility('I0GE', 'A0PV')
// Orb of Frost +2
call AdvancedEquipmentSystem_RegisterItem('I0GF', 'A0QI', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GF', 'A0RK')
call AdvancedEquipmentSystem_AddItemAbility('I0GF', 'A04I')
call AdvancedEquipmentSystem_AddItemAbility('I0GF', 'Aiat')
call AdvancedEquipmentSystem_AddItemAbility('I0GF', 'A0RL')
// Orb of Souls +2
call AdvancedEquipmentSystem_RegisterItem('I0GG', 'A0RA', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GG', 'A09X')
call AdvancedEquipmentSystem_AddItemAbility('I0GG', 'A06J')
call AdvancedEquipmentSystem_AddItemAbility('I0GG', 'A088')
call AdvancedEquipmentSystem_AddItemAbility('I0GG', 'A0G1')
// Orb of Light +2
call AdvancedEquipmentSystem_RegisterItem('I0GH', 'A0QU', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GH', 'A04B')
call AdvancedEquipmentSystem_AddItemAbility('I0GH', 'A02B')
call AdvancedEquipmentSystem_AddItemAbility('I0GH', 'A0RQ')
call AdvancedEquipmentSystem_AddItemAbility('I0GH', 'A0RP')
// Orb of Rock +2
call AdvancedEquipmentSystem_RegisterItem('I0GI', 'A0R6', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GI', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I0GI', 'A0FR')
call AdvancedEquipmentSystem_AddItemAbility('I0GI', 'A030')
call AdvancedEquipmentSystem_AddItemAbility('I0GI', 'A0FX')
// Orb of Swirls +2
call AdvancedEquipmentSystem_RegisterItem('I0GJ', 'A0RE', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GJ', 'A0J7')
call AdvancedEquipmentSystem_AddItemAbility('I0GJ', 'A06K')
call AdvancedEquipmentSystem_AddItemAbility('I0GJ', 'A0GY')
call AdvancedEquipmentSystem_AddItemAbility('I0GJ', 'A0FF')
// Orb of Darkness +2
call AdvancedEquipmentSystem_RegisterItem('I0GK', 'A0QE', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GK', 'A0A0')
call AdvancedEquipmentSystem_AddItemAbility('I0GK', 'A0FC')
call AdvancedEquipmentSystem_AddItemAbility('I0GK', 'A0N7')
call AdvancedEquipmentSystem_AddItemAbility('I0GK', 'A0FW')
// Orb of Lava +2
call AdvancedEquipmentSystem_RegisterItem('I0GL', 'A0QQ', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GL', 'A0S9')
call AdvancedEquipmentSystem_AddItemAbility('I0GL', 'A0F8')
call AdvancedEquipmentSystem_AddItemAbility('I0GL', 'A08B')
call AdvancedEquipmentSystem_AddItemAbility('I0GL', 'A0SA')
// Orb of Globes +2
call AdvancedEquipmentSystem_RegisterItem('I0GM', 'A0QM', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GM', 'A03V')
call AdvancedEquipmentSystem_AddItemAbility('I0GM', 'A06H')
call AdvancedEquipmentSystem_AddItemAbility('I0GM', 'A0NL')
call AdvancedEquipmentSystem_AddItemAbility('I0GM', 'A0SB')
// Orb of Awe +2
call AdvancedEquipmentSystem_RegisterItem('I0GN', 'A0QA', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GN', 'A0SC')
call AdvancedEquipmentSystem_AddItemAbility('I0GN', 'A0RR')
call AdvancedEquipmentSystem_AddItemAbility('I0GN', 'A0SD')
call AdvancedEquipmentSystem_AddItemAbility('I0GN', 'A0SE')
// Orb of Magnificense +2
call AdvancedEquipmentSystem_RegisterItem('I0GO', 'A0QY', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GO', 'A0CL')
call AdvancedEquipmentSystem_AddItemAbility('I0GO', 'A06L')
call AdvancedEquipmentSystem_AddItemAbility('I0GO', 'A0MP')
call AdvancedEquipmentSystem_AddItemAbility('I0GO', 'A04F')
// Orb of Matrix +2
call AdvancedEquipmentSystem_RegisterItem('I0GP', 'A0R2', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GP', 'A0SF')
call AdvancedEquipmentSystem_AddItemAbility('I0GP', 'A0GZ')
call AdvancedEquipmentSystem_AddItemAbility('I0GP', 'A0NM')
call AdvancedEquipmentSystem_AddItemAbility('I0GP', 'A0SG')
// Orb of Frost +3
call AdvancedEquipmentSystem_RegisterItem('I0GQ', 'A0QJ', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GQ', 'A0AZ')
call AdvancedEquipmentSystem_AddItemAbility('I0GQ', 'A06J')
call AdvancedEquipmentSystem_AddItemAbility('I0GQ', 'A054')
call AdvancedEquipmentSystem_AddItemAbility('I0GQ', 'A0PT')
// Orb of Souls +3
call AdvancedEquipmentSystem_RegisterItem('I0GR', 'A0RB', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GR', 'A0CM')
call AdvancedEquipmentSystem_AddItemAbility('I0GR', 'A02B')
call AdvancedEquipmentSystem_AddItemAbility('I0GR', 'A0RO')
call AdvancedEquipmentSystem_AddItemAbility('I0GR', 'A0FT')
// Orb of Light +3
call AdvancedEquipmentSystem_RegisterItem('I0GS', 'A0QV', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GS', 'A03L')
call AdvancedEquipmentSystem_AddItemAbility('I0GS', 'A0FR')
call AdvancedEquipmentSystem_AddItemAbility('I0GS', 'A030')
call AdvancedEquipmentSystem_AddItemAbility('I0GS', 'A0FX')
// Orb of Rock +3
call AdvancedEquipmentSystem_RegisterItem('I0GT', 'A0R7', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GT', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I0GT', 'A06K')
call AdvancedEquipmentSystem_AddItemAbility('I0GT', 'A08A')
call AdvancedEquipmentSystem_AddItemAbility('I0GT', 'A0G2')
// Orb of Swirls +3
call AdvancedEquipmentSystem_RegisterItem('I0GU', 'A0RF', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GU', 'A09W')
call AdvancedEquipmentSystem_AddItemAbility('I0GU', 'A0FC')
call AdvancedEquipmentSystem_AddItemAbility('I0GU', 'A0S7')
call AdvancedEquipmentSystem_AddItemAbility('I0GU', 'A0FB')
// Orb of Darkness +3
call AdvancedEquipmentSystem_RegisterItem('I0GV', 'A0QF', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GV', 'A03V')
call AdvancedEquipmentSystem_AddItemAbility('I0GV', 'A0F8')
call AdvancedEquipmentSystem_AddItemAbility('I0GV', 'A0NL')
call AdvancedEquipmentSystem_AddItemAbility('I0GV', 'A0SB')
// Orb of Lava +3
call AdvancedEquipmentSystem_RegisterItem('I0GW', 'A0QR', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GW', 'A0SH')
call AdvancedEquipmentSystem_AddItemAbility('I0GW', 'A06H')
call AdvancedEquipmentSystem_AddItemAbility('I0GW', 'A074')
call AdvancedEquipmentSystem_AddItemAbility('I0GW', 'A0PW')
// Orb of Globes +3
call AdvancedEquipmentSystem_RegisterItem('I0GX', 'A0QN', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GX', 'A02C')
call AdvancedEquipmentSystem_AddItemAbility('I0GX', 'A0RR')
call AdvancedEquipmentSystem_AddItemAbility('I0GX', 'A0SI')
call AdvancedEquipmentSystem_AddItemAbility('I0GX', 'A0SJ')
// Orb of Awe +3
call AdvancedEquipmentSystem_RegisterItem('I0GY', 'A0QB', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GY', 'A0AP')
call AdvancedEquipmentSystem_AddItemAbility('I0GY', 'A06L')
call AdvancedEquipmentSystem_AddItemAbility('I0GY', 'A075')
call AdvancedEquipmentSystem_AddItemAbility('I0GY', 'A0PX')
// Orb of Magnificense +3
call AdvancedEquipmentSystem_RegisterItem('I0GZ', 'A0QZ', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0GZ', 'A0A4')
call AdvancedEquipmentSystem_AddItemAbility('I0GZ', 'A0GZ')
call AdvancedEquipmentSystem_AddItemAbility('I0GZ', 'A0M1')
call AdvancedEquipmentSystem_AddItemAbility('I0GZ', 'A0FE')
// Orb of Matrix +3
call AdvancedEquipmentSystem_RegisterItem('I0H0', 'A0R3', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H0', 'A0SK')
call AdvancedEquipmentSystem_AddItemAbility('I0H0', 'A0SL')
call AdvancedEquipmentSystem_AddItemAbility('I0H0', 'A037')
call AdvancedEquipmentSystem_AddItemAbility('I0H0', 'A0SM')
// Orb of Frost +4
call AdvancedEquipmentSystem_RegisterItem('I0H1', 'A0QK', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H1', 'A09X')
call AdvancedEquipmentSystem_AddItemAbility('I0H1', 'A0FR')
call AdvancedEquipmentSystem_AddItemAbility('I0H1', 'A088')
call AdvancedEquipmentSystem_AddItemAbility('I0H1', 'A0G1')
// Orb of Souls +4
call AdvancedEquipmentSystem_RegisterItem('I0H2', 'A0RC', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H2', 'A0HC')
call AdvancedEquipmentSystem_AddItemAbility('I0H2', 'A06K')
call AdvancedEquipmentSystem_AddItemAbility('I0H2', 'A030')
call AdvancedEquipmentSystem_AddItemAbility('I0H2', 'A0FX')
// Orb of Light +4
call AdvancedEquipmentSystem_RegisterItem('I0H3', 'A0QW', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H3', 'A09Y')
call AdvancedEquipmentSystem_AddItemAbility('I0H3', 'A0FC')
call AdvancedEquipmentSystem_AddItemAbility('I0H3', 'A0N7')
call AdvancedEquipmentSystem_AddItemAbility('I0H3', 'A0FW')
// Orb of Rock +4
call AdvancedEquipmentSystem_RegisterItem('I0H4', 'A0R8', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H4', 'A0A0')
call AdvancedEquipmentSystem_AddItemAbility('I0H4', 'A0F8')
call AdvancedEquipmentSystem_AddItemAbility('I0H4', 'A0NL')
call AdvancedEquipmentSystem_AddItemAbility('I0H4', 'A0SB')
// Orb of Swirls +4
call AdvancedEquipmentSystem_RegisterItem('I0H5', 'A0RG', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H5', 'A0A1')
call AdvancedEquipmentSystem_AddItemAbility('I0H5', 'A06H')
call AdvancedEquipmentSystem_AddItemAbility('I0H5', 'A0MP')
call AdvancedEquipmentSystem_AddItemAbility('I0H5', 'A04F')
// Orb of Darkness +4
call AdvancedEquipmentSystem_RegisterItem('I0H6', 'A0QG', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H6', 'A0SN')
call AdvancedEquipmentSystem_AddItemAbility('I0H6', 'A0RR')
call AdvancedEquipmentSystem_AddItemAbility('I0H6', 'A075')
call AdvancedEquipmentSystem_AddItemAbility('I0H6', 'A0PX')
// Orb of Lava +4
call AdvancedEquipmentSystem_RegisterItem('I0H7', 'A0QS', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H7', 'A0CL')
call AdvancedEquipmentSystem_AddItemAbility('I0H7', 'A06L')
call AdvancedEquipmentSystem_AddItemAbility('I0H7', 'A0NA')
call AdvancedEquipmentSystem_AddItemAbility('I0H7', 'A0SO')
// Orb of Globes +4
call AdvancedEquipmentSystem_RegisterItem('I0H8', 'A0QO', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H8', 'A0SP')
call AdvancedEquipmentSystem_AddItemAbility('I0H8', 'A0GZ')
call AdvancedEquipmentSystem_AddItemAbility('I0H8', 'A0SQ')
call AdvancedEquipmentSystem_AddItemAbility('I0H8', 'A0SR')
// Orb of Awe +4
call AdvancedEquipmentSystem_RegisterItem('I0H9', 'A0QC', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0H9', 'A0SS')
call AdvancedEquipmentSystem_AddItemAbility('I0H9', 'A0SL')
call AdvancedEquipmentSystem_AddItemAbility('I0H9', 'A0SU')
call AdvancedEquipmentSystem_AddItemAbility('I0H9', 'A0ST')
// Orb of Magnificense +4
call AdvancedEquipmentSystem_RegisterItem('I0HA', 'A0R0', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HA', 'A0SV')
call AdvancedEquipmentSystem_AddItemAbility('I0HA', 'A0FJ')
call AdvancedEquipmentSystem_AddItemAbility('I0HA', 'A03A')
call AdvancedEquipmentSystem_AddItemAbility('I0HA', 'A04G')
// Orb of Matrix +4
call AdvancedEquipmentSystem_RegisterItem('I0HB', 'A0R4', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HB', 'A0SW')
call AdvancedEquipmentSystem_AddItemAbility('I0HB', 'A03S')
call AdvancedEquipmentSystem_AddItemAbility('I0HB', 'A0NC')
call AdvancedEquipmentSystem_AddItemAbility('I0HB', 'A0SX')
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// WEAPON ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Weapon of Initiation
call AdvancedEquipmentSystem_RegisterItem('I02J', 'A0SY', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02J', 'A0UH')
// Weapon of Swift Kill
call AdvancedEquipmentSystem_RegisterItem('I02K', 'A0SZ', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02K', 'A054')
// Weapon of Searing
call AdvancedEquipmentSystem_RegisterItem('I02L', 'A0T0', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02L', 'A088')
// Weapon of Devouring
call AdvancedEquipmentSystem_RegisterItem('I02M', 'A0T1', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02M', 'A0RO')
// Weapon of Glistening
call AdvancedEquipmentSystem_RegisterItem('I02O', 'A0T2', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02O', 'A089')
// Weapon of Darkness
call AdvancedEquipmentSystem_RegisterItem('I02Q', 'A0T3', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02Q', 'A030')
// Weapon of Blood Elf
call AdvancedEquipmentSystem_RegisterItem('I02R', 'A0T4', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02R', 'A0S6')
// Weapon of Watery Mist
call AdvancedEquipmentSystem_RegisterItem('I02S', 'A0T5', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02S', 'A08A')
// Weapon of New Dimensions
call AdvancedEquipmentSystem_RegisterItem('I02T', 'A0T6', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02T', 'A0N7')
// Weapon of Molt
call AdvancedEquipmentSystem_RegisterItem('I02U', 'A0T7', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02U', 'A0S7')
// Weapon of the Unknown
call AdvancedEquipmentSystem_RegisterItem('I02V', 'A0T8', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I02V', 'A0S8')
// Weapon of Initiation +1
call AdvancedEquipmentSystem_RegisterItem('I0HC', 'A0TP', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HC', 'A054')
// Weapon of Swift Kill +1
call AdvancedEquipmentSystem_RegisterItem('I0HD', 'A0U5', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HD', 'A0RO')
// Weapon of Searing +1
call AdvancedEquipmentSystem_RegisterItem('I0HE', 'A0U1', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HE', 'A030')
// Weapon of Devouring +1
call AdvancedEquipmentSystem_RegisterItem('I0HF', 'A0TH', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HF', 'A08A')
// Weapon of Glistening +1
call AdvancedEquipmentSystem_RegisterItem('I0HG', 'A0TL', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HG', 'A0S7')
// Weapon of Darkness +1
call AdvancedEquipmentSystem_RegisterItem('I0HH', 'A0TD', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HH', 'A0NL')
// Weapon of Blood Elf +1
call AdvancedEquipmentSystem_RegisterItem('I0HI', 'A0T9', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HI', 'A074')
// Weapon of Watery Mist +1
call AdvancedEquipmentSystem_RegisterItem('I0HJ', 'A0U9', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HJ', 'A0SI')
// Weapon of New Dimensions +1
call AdvancedEquipmentSystem_RegisterItem('I0HK', 'A0TX', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HK', 'A075')
// Weapon of Molt +1
call AdvancedEquipmentSystem_RegisterItem('I0HL', 'A0TT', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HL', 'A0M1')
// Weapon of the Unknown +1
call AdvancedEquipmentSystem_RegisterItem('I0HM', 'A0UD', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HM', 'A037')
// Weapon of Initiation +2
call AdvancedEquipmentSystem_RegisterItem('I0HN', 'A0TQ', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HN', 'A088')
// Weapon of Swift Kill +2
call AdvancedEquipmentSystem_RegisterItem('I0HO', 'A0U6', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HO', 'A030')
// Weapon of Searing +2
call AdvancedEquipmentSystem_RegisterItem('I0HP', 'A0U2', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HP', 'A0N7')
// Weapon of Devouring +2
call AdvancedEquipmentSystem_RegisterItem('I0HQ', 'A0TI', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HQ', 'A0NL')
// Weapon of Glistening +2
call AdvancedEquipmentSystem_RegisterItem('I0HR', 'A0TM', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HR', 'A0MP')
// Weapon of Darkness +2
call AdvancedEquipmentSystem_RegisterItem('I0HS', 'A0TE', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HS', 'A075')
// Weapon of Blood Elf +2
call AdvancedEquipmentSystem_RegisterItem('I0HT', 'A0TA', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HT', 'A0NA')
// Weapon of Watery Mist +2
call AdvancedEquipmentSystem_RegisterItem('I0HU', 'A0UA', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HU', 'A0SQ')
// Weapon of New Dimensions +2
call AdvancedEquipmentSystem_RegisterItem('I0HV', 'A0TY', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HV', 'A0SU')
// Weapon of Molt +2
call AdvancedEquipmentSystem_RegisterItem('I0HW', 'A0TU', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HW', 'A03A')
// Weapon of the Unknown +2
call AdvancedEquipmentSystem_RegisterItem('I0HX', 'A0UE', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HX', 'A0NC')
// Weapon of Initiation +3
call AdvancedEquipmentSystem_RegisterItem('I0HY', 'A0TR', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HY', 'A0RO')
// Weapon of Swift Kill +3
call AdvancedEquipmentSystem_RegisterItem('I0HZ', 'A0U7', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0HZ', 'A08A')
// Weapon of Searing +3
call AdvancedEquipmentSystem_RegisterItem('I0I0', 'A0U3', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I0', 'A0NL')
// Weapon of Devouring +3
call AdvancedEquipmentSystem_RegisterItem('I0I1', 'A0TJ', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I1', 'A0SI')
// Weapon of Glistening +3
call AdvancedEquipmentSystem_RegisterItem('I0I2', 'A0TN', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I2', 'A0M1')
// Weapon of Darkness +3
call AdvancedEquipmentSystem_RegisterItem('I0I3', 'A0TF', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I3', 'A0SQ')
// Weapon of Blood Elf +3
call AdvancedEquipmentSystem_RegisterItem('I0I4', 'A0TB', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I4', 'A077')
// Weapon of Watery Mist +3
call AdvancedEquipmentSystem_RegisterItem('I0I5', 'A0UB', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I5', 'A03A')
call AdvancedEquipmentSystem_AddItemAbility('I0I5', 'A054')
// Weapon of New Dimensions +3
call AdvancedEquipmentSystem_RegisterItem('I0I6', 'A0TZ', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I6', 'A0NP')
call AdvancedEquipmentSystem_AddItemAbility('I0I6', 'A0UH')
// Weapon of Molt +3
call AdvancedEquipmentSystem_RegisterItem('I0I7', 'A0TV', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I7', 'A03D')
call AdvancedEquipmentSystem_AddItemAbility('I0I6', 'A0UH')
// Weapon of the Unknown +3
call AdvancedEquipmentSystem_RegisterItem('I0I8', 'A0UF', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I8', 'A03F')
call AdvancedEquipmentSystem_AddItemAbility('I0I6', 'A054')
// Weapon of Initiation +4
call AdvancedEquipmentSystem_RegisterItem('I0I9', 'A0TS', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0I9', 'A030')
// Weapon of Swift Kill +4
call AdvancedEquipmentSystem_RegisterItem('I0IA', 'A0U8', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IA', 'A0NL')
// Weapon of Searing +4
call AdvancedEquipmentSystem_RegisterItem('I0IB', 'A0U4', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IB', 'A075')
// Weapon of Devouring +4
call AdvancedEquipmentSystem_RegisterItem('I0IC', 'A0TK', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IC', 'A0SQ')
// Weapon of Glistening +4
call AdvancedEquipmentSystem_RegisterItem('I0ID', 'A0TO', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0ID', 'A03A')
// Weapon of Darkness +4
call AdvancedEquipmentSystem_RegisterItem('I0IE', 'A0TG', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IE', 'A0NP')
call AdvancedEquipmentSystem_AddItemAbility('I0IE', 'A0UH')
// Weapon of Blood Elf +4
call AdvancedEquipmentSystem_RegisterItem('I0IF', 'A0TC', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IF', 'A03F')
// Weapon of Watery Mist +4
call AdvancedEquipmentSystem_RegisterItem('I0IG', 'A0UC', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IG', 'A03H')
call AdvancedEquipmentSystem_AddItemAbility('I0IG', 'A088')
// Weapon of New Dimensions +4
call AdvancedEquipmentSystem_RegisterItem('I0IH', 'A0U0', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IH', 'A02X')
call AdvancedEquipmentSystem_AddItemAbility('I0IH', 'A0RO')
// Weapon of Molt +4
call AdvancedEquipmentSystem_RegisterItem('I0II', 'A0TW', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0II', 'A031')
// Weapon of the Unknown +4
call AdvancedEquipmentSystem_RegisterItem('I0IJ', 'A0UG', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IJ', 'A031')
call AdvancedEquipmentSystem_AddItemAbility('I0IJ', 'A030')
// Sublime Tempest
call AdvancedEquipmentSystem_RegisterItem('I0FI', 'A0RT', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FI', 'A0O0')
call AdvancedEquipmentSystem_AddItemAbility('I0FI', 'A03A')
call AdvancedEquipmentSystem_AddItemAbility('I0FI', 'A04F')
call AdvancedEquipmentSystem_AddItemAbility('I0FI', 'A0OB')
// Empyrean Fate
call AdvancedEquipmentSystem_RegisterItem('I0FK', 'A0RU', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FK', 'A0O1')
call AdvancedEquipmentSystem_AddItemAbility('I0FK', 'A039')
call AdvancedEquipmentSystem_AddItemAbility('I0FK', 'A0FE')
call AdvancedEquipmentSystem_AddItemAbility('I0FK', 'A0FJ')
// Wealth of Ages
call AdvancedEquipmentSystem_RegisterItem('I0FM', 'A0RV', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FM', 'A0NP')
call AdvancedEquipmentSystem_AddItemAbility('I0FM', 'A0FK')
call AdvancedEquipmentSystem_AddItemAbility('I0FM', 'A06H')
// Vile Scroll of Achos
call AdvancedEquipmentSystem_RegisterItem('I0FO', 'A0RW', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FO', 'A0M1')
call AdvancedEquipmentSystem_AddItemAbility('I0FO', 'A0OC')
call AdvancedEquipmentSystem_AddItemAbility('I0FO', 'A07G')
// Shattering Destiny
call AdvancedEquipmentSystem_RegisterItem('I0FR', 'A0RX', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FR', 'A0OD')
call AdvancedEquipmentSystem_AddItemAbility('I0FR', 'A0OB')
// Fiendish Apocrypha of Thimil
call AdvancedEquipmentSystem_RegisterItem('I0FS', 'A0RY', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FS', 'A0M8')
call AdvancedEquipmentSystem_AddItemAbility('I0FS', 'A08B')
call AdvancedEquipmentSystem_AddItemAbility('I0FS', 'A0FK')
call AdvancedEquipmentSystem_AddItemAbility('I0FS', 'A0OF')
// The Taranis Fragments
call AdvancedEquipmentSystem_RegisterItem('I0FV', 'A0RZ', AMULET_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0FV', 'A034')
call AdvancedEquipmentSystem_AddItemAbility('I0FV', 'A0FB')
call AdvancedEquipmentSystem_AddItemAbility('I0FV', 'A0OG')
call AdvancedEquipmentSystem_AddItemAbility('I0FV', 'A09W')
// Brazier of Gainful Movement
call AdvancedEquipmentSystem_RegisterItem('I07D', 'A0S0', BOOTS_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07D', 'A076')
// Bodily Studded Speutrem
call AdvancedEquipmentSystem_RegisterItem('I07G', 'A0S1', ARMOR_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07G', 'A04G')
call AdvancedEquipmentSystem_AddItemAbility('I07G', 'A0EA')
call AdvancedEquipmentSystem_AddItemAbility('I07G', 'A0FI')
call AdvancedEquipmentSystem_AddItemAbility('I07G', 'A0B3')
// Illusionary Presence
call AdvancedEquipmentSystem_RegisterItem('I07L', 'A0S2', AdvancedEquipmentSystem_MAINHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07L', 'A0M1')
call AdvancedEquipmentSystem_AddItemAbility('I07L', 'A08G')
call AdvancedEquipmentSystem_AddItemAbility('I07L', 'A028')
// Scorched Medallion
call AdvancedEquipmentSystem_RegisterItem('I0IK', 'A0S3', SPECIAL_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I0IK', 'A04F')
call AdvancedEquipmentSystem_AddItemAbility('I0IK', 'A0MP')
call AdvancedEquipmentSystem_AddItemAbility('I0IK', 'A08F')
call AdvancedEquipmentSystem_AddItemAbility('I0IK', 'A07F')
// Voulge of Swift Death
call AdvancedEquipmentSystem_RegisterItem('I07O', 'A0S4', AdvancedEquipmentSystem_OFFHAND_CLASS, false, "")
call AdvancedEquipmentSystem_AddItemAbility('I07O', 'A0M1')
call AdvancedEquipmentSystem_AddItemAbility('I07O', 'A02Q')
endfunction
endscope
//Code indented using The_Witcher's Script Language Aligner
//Download the newest version and report bugs at www.hiveworkshop.com
//TESH.scrollpos=0
//TESH.alwaysfold=0
library LinkedListModule /* v2.2.0
Easy implementation of linked lists into structs.
***********************************************************************
*
* module LinkedList
*
* - Implement at the top of your struct, must extend array
*
* thistype next
* thistype prev
* boolean head
*
* readonly static thistype base
* - Precreated head, useful for non-dynamic lists.
*
* static method allocate takes nothing returns thistype
* method deallocate takes nothing returns nothing
*
* static method createNode takes nothing returns thistype
* - Allocates a new node pointing towards itself.
* - These nodes are considered "heads" therefore it's head
* - boolean member is set to true.
* method insertNode takes thistype toInsert returns thistype
* - Inserts the node into the list after 'this' node.
* method removeNode takes nothing returns nothing
* - Removes the node from the list.
* method clearNode takes nothing returns nothing
* - Deallocates all the instances within the node's range
* method flushNode takes nothing returns nothing
* - Clears and deallocates the node.
*
********************************************************************* */
module LinkedList
//private static integer instanceCount = 0
readonly static integer instanceCount = 0
boolean head
thistype next
thistype prev
static method operator base takes nothing returns thistype
return 8190
endmethod
static method allocate takes nothing returns thistype
local thistype this=thistype(0).prev
if this == 0 then
debug if instanceCount == 8190 then
debug call BJDebugMsg("[LinkedList] Error: attempted to allocate too many instances.")
debug return 0
debug endif
set instanceCount=instanceCount+1
return instanceCount
endif
set thistype(0).prev=this.prev
return this
endmethod
method deallocate takes nothing returns nothing
set this.prev=thistype(0).prev
set thistype(0).prev=this
set this.head=false
endmethod
static method createNode takes nothing returns thistype
local thistype this=allocate()
set this.next=this
set this.prev=this
set this.head=true
return this
endmethod
method clearNode takes nothing returns nothing
if this != this.next then
set this.next.prev=thistype(0).prev
set thistype(0).prev=this.prev
set this.next=this
set this.prev=this
endif
endmethod
method flushNode takes nothing returns nothing
set this.next.prev=thistype(0).prev
set thistype(0).prev=this
set head=false
endmethod
method insertNode takes thistype toInsert returns nothing
set this.prev.next=toInsert
set toInsert.prev=this.prev
set this.prev=toInsert
set toInsert.next=this
endmethod
method removeNode takes nothing returns nothing
set this.prev.next=this.next
set this.next.prev=this.prev
endmethod
private static method onInit takes nothing returns nothing
set thistype(8190).next=8190
set thistype(8190).prev=8190
set thistype(8190).head=true
endmethod
static if DEBUG_MODE then
method print takes nothing returns nothing
local string s=""
local thistype exit=this
set this=this.next
loop
set s=s+I2S(this)
set this=this.next
exitwhen this == exit
set s=s+" - "
endloop
call BJDebugMsg("[ "+s+" ]")
endmethod
endif
endmodule
endlibrary
//TESH.scrollpos=21
//TESH.alwaysfold=0
/**************************************************************
*
* RegisterPlayerUnitEvent
* v5.0.0.0
* By Magtheridon96
*
* I would like to give a special thanks to Bribe, azlier
* and BBQ for improving this library. For modularity, it only
* supports player unit events.
*
* Functions passed to RegisterPlayerUnitEvent must
* return false. They can return nothing as well. (Which is a Pro)
*
* Warning:
* --------
*
* - Don't use TriggerSleepAction inside registered code.
*
* API:
* ----
*
* - function RegisterPlayerUnitEvent
* takes
* playerunitevent whichEvent : The event you would like to register
* code whichFunction : The code you would like to register
* returns
* nothing
*
* - Registers code that will execute when an event fires.
*
* - function RegisterPlayerUnitEventForPlayer
* takes
* playerunitevent whichEvent : The event you would like to register
* code whichFunction : The code you would like to register
* player whichPlayer : The player you would like to register the event for
* returns
* nothing
*
* - Registers code that will execute when an event fires for a certain player.
*
**************************************************************/
library RegisterPlayerUnitEvent // Special Thanks to Bribe and azlier
globals
private trigger array t
endglobals
function RegisterPlayerUnitEvent takes playerunitevent p, code c returns nothing
local integer i = GetHandleId(p)
local integer k = 15
if t[i] == null then
set t[i] = CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(t[i], Player(k), p, null)
exitwhen k == 0
set k = k - 1
endloop
endif
call TriggerAddCondition(t[i], Filter(c))
endfunction
function RegisterPlayerUnitEventForPlayer takes playerunitevent p, code c, player pl returns nothing
local integer i = 260 + 16 * GetHandleId(p) + GetPlayerId(pl)
if t[i] == null then
set t[i] = CreateTrigger()
call TriggerRegisterPlayerUnitEvent(t[i], pl, p, null)
endif
call TriggerAddCondition(t[i], Filter(c))
endfunction
endlibrary
//TESH.scrollpos=2266
//TESH.alwaysfold=0
function Trig_RCR_Config_Actions takes nothing returns nothing
call InitHashtableBJ( )
set udg_RCR_CombineTable = GetLastCreatedHashtableBJ()
// --------------------------------------------------------------------------------
// SYSTEM VARIABLES
// --------------------------------------------------------------------------------
// Set the combine SFX
set udg_RCR_CombineSFX = "Abilities\\Spells\\Items\\AIam\\AIamTarget.mdl"
// Set the disassemble SFX
// --------------------------------------------------------------------------------
// SETTINGS
// --------------------------------------------------------------------------------
// Show text when items combined/disassembled
set udg_RCR_ShowText = true
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES BOOTS UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Boots of Basic +1
set udg_RCR_SaveRecipeItemA = 'I01U'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I00N'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thieves +1
set udg_RCR_SaveRecipeItemA = 'I01V'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03Q'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Vigor +1
set udg_RCR_SaveRecipeItemA = 'I01W'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I04H'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Muleback +1
set udg_RCR_SaveRecipeItemA = 'I01Z'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03O'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Feyleaf +1
set udg_RCR_SaveRecipeItemA = 'I01Y'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03L'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Eagle Eye +1
set udg_RCR_SaveRecipeItemA = 'I020'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I082'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Primate +1
set udg_RCR_SaveRecipeItemA = 'I021'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03P'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thrust +1
set udg_RCR_SaveRecipeItemA = 'I026'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03R'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Dragon Skin +1
set udg_RCR_SaveRecipeItemA = 'I01X'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03J'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Fierce Wind +1
set udg_RCR_SaveRecipeItemA = 'I027'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03M'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Majestic Glow +1
set udg_RCR_SaveRecipeItemA = 'I028'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I03N'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES BOOTS RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Boots of Basic +2
set udg_RCR_SaveRecipeItemA = 'I00N'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04I'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thieves +2
set udg_RCR_SaveRecipeItemA = 'I03Q'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04T'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Vigor +2
set udg_RCR_SaveRecipeItemA = 'I04H'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04U'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Muleback +2
set udg_RCR_SaveRecipeItemA = 'I03O'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04V'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Feyleaf +2
set udg_RCR_SaveRecipeItemA = 'I03L'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04W'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Eagle Eye +2
set udg_RCR_SaveRecipeItemA = 'I082'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I03K'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Primate +2
set udg_RCR_SaveRecipeItemA = 'I03P'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04X'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thrust +2
set udg_RCR_SaveRecipeItemA = 'I03R'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04Y'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Dragon Skin +2
set udg_RCR_SaveRecipeItemA = 'I03J'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04Z'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Fierce Wind +2
set udg_RCR_SaveRecipeItemA = 'I03M'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I050'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Majestic Glow +2
set udg_RCR_SaveRecipeItemA = 'I03N'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I04J'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES BOOTS MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Boots of Basic +3
set udg_RCR_SaveRecipeItemA = 'I04I'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I051'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thieves +3
set udg_RCR_SaveRecipeItemA = 'I04T'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I052'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Vigor +3
set udg_RCR_SaveRecipeItemA = 'I04U'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I079'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Muleback +3
set udg_RCR_SaveRecipeItemA = 'I04V'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07A'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Feyleaf +3
set udg_RCR_SaveRecipeItemA = 'I04W'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07B'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Eagle Eye +3
set udg_RCR_SaveRecipeItemA = 'I03K'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07C'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Primate +3
set udg_RCR_SaveRecipeItemA = 'I04X'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07E'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thrust +3
set udg_RCR_SaveRecipeItemA = 'I04Y'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07F'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Dragon Skin +3
set udg_RCR_SaveRecipeItemA = 'I04Z'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07H'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Fierce Wind +3
set udg_RCR_SaveRecipeItemA = 'I050'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07V'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Majestic Glow +3
set udg_RCR_SaveRecipeItemA = 'I04J'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I07W'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES BOOTS LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Boots of Basic +4
set udg_RCR_SaveRecipeItemA = 'I051'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07I'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thieves +4
set udg_RCR_SaveRecipeItemA = 'I052'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07M'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Vigor +4
set udg_RCR_SaveRecipeItemA = 'I079'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07N'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Muleback +4
set udg_RCR_SaveRecipeItemA = 'I07A'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07P'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Feyleaf +4
set udg_RCR_SaveRecipeItemA = 'I07B'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07Q'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Eagle Eye +4
set udg_RCR_SaveRecipeItemA = 'I07C'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07R'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Primate +4
set udg_RCR_SaveRecipeItemA = 'I07E'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07S'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Thrust +4
set udg_RCR_SaveRecipeItemA = 'I07F'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07T'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Dragon Skin +4
set udg_RCR_SaveRecipeItemA = 'I07H'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07U'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Fierce Wind +4
set udg_RCR_SaveRecipeItemA = 'I07V'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07X'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Boots of Majestic Glow +4
set udg_RCR_SaveRecipeItemA = 'I07W'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I07Y'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES AMULET UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Amulet of Cosmic +1
set udg_RCR_SaveRecipeItemA = 'I00Z'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I083'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Golden +1
set udg_RCR_SaveRecipeItemA = 'I009'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I087'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Thoughts +1
set udg_RCR_SaveRecipeItemA = 'I00B'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I088'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Scorched +1
set udg_RCR_SaveRecipeItemA = 'I00C'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I089'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Haunted +1
set udg_RCR_SaveRecipeItemA = 'I00O'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08A'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Forest +1
set udg_RCR_SaveRecipeItemA = 'I00Y'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08B'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Pirate +1
set udg_RCR_SaveRecipeItemA = 'I00R'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08F'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Energies +1
set udg_RCR_SaveRecipeItemA = 'I00S'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08C'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Sting +1
set udg_RCR_SaveRecipeItemA = 'I010'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08G'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Charm+1
set udg_RCR_SaveRecipeItemA = 'I011'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08D'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Wonders +1
set udg_RCR_SaveRecipeItemA = 'I012'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I08E'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES AMULET RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Amulet of Cosmic +2
set udg_RCR_SaveRecipeItemA = 'I083'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I084'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Golden +2
set udg_RCR_SaveRecipeItemA = 'I087'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I008'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Thoughts +2
set udg_RCR_SaveRecipeItemA = 'I088'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08H'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Scorched +2
set udg_RCR_SaveRecipeItemA = 'I089'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08I'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Haunted +2
set udg_RCR_SaveRecipeItemA = 'I08A'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08J'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Forest +2
set udg_RCR_SaveRecipeItemA = 'I08B'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08K'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Pirate +2
set udg_RCR_SaveRecipeItemA = 'I08F'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08L'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Energies +2
set udg_RCR_SaveRecipeItemA = 'I08C'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08M'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Sting +2
set udg_RCR_SaveRecipeItemA = 'I08G'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08N'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Charm+2
set udg_RCR_SaveRecipeItemA = 'I08D'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08O'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Wonders +2
set udg_RCR_SaveRecipeItemA = 'I08E'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I08P'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES AMULET MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Amulet of Cosmic +3
set udg_RCR_SaveRecipeItemA = 'I084'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I085'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Golden +3
set udg_RCR_SaveRecipeItemA = 'I008'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I08Q'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Thoughts +3
set udg_RCR_SaveRecipeItemA = 'I08H'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09J'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Scorched +3
set udg_RCR_SaveRecipeItemA = 'I08I'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09K'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Haunted +3
set udg_RCR_SaveRecipeItemA = 'I08J'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09L'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Forest +3
set udg_RCR_SaveRecipeItemA = 'I08K'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09M'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Pirate +3
set udg_RCR_SaveRecipeItemA = 'I08L'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09N'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Energies +3
set udg_RCR_SaveRecipeItemA = 'I08M'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09O'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Sting +3
set udg_RCR_SaveRecipeItemA = 'I08N'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09P'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Charm+3
set udg_RCR_SaveRecipeItemA = 'I08O'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09Q'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Wonders +3
set udg_RCR_SaveRecipeItemA = 'I08P'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I09R'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES AMULET LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Amulet of Cosmic +4
set udg_RCR_SaveRecipeItemA = 'I085'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I086'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Golden +4
set udg_RCR_SaveRecipeItemA = 'I08Q'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09S'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Thoughts +4
set udg_RCR_SaveRecipeItemA = 'I09J'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09T'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Scorched +4
set udg_RCR_SaveRecipeItemA = 'I09K'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09U'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Haunted +4
set udg_RCR_SaveRecipeItemA = 'I09L'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09V'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Forest +4
set udg_RCR_SaveRecipeItemA = 'I09M'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09W'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Pirate +4
set udg_RCR_SaveRecipeItemA = 'I09N'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09X'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Energies +4
set udg_RCR_SaveRecipeItemA = 'I09O'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09Y'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Sting +4
set udg_RCR_SaveRecipeItemA = 'I09P'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I09Z'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Charm+4
set udg_RCR_SaveRecipeItemA = 'I09Q'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0A0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Amulet of Wonders +4
set udg_RCR_SaveRecipeItemA = 'I09R'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0A1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES ARMOR UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Armor of Kobold +1
set udg_RCR_SaveRecipeItemA = 'I013'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bronze +1
set udg_RCR_SaveRecipeItemA = 'I017'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bloodstain +1
set udg_RCR_SaveRecipeItemA = 'I00A'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0AL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Dragon Skin +1
set udg_RCR_SaveRecipeItemA = 'I014'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0AN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Fire Plate +1
set udg_RCR_SaveRecipeItemA = 'I015'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0B8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Raging Lion +1
set udg_RCR_SaveRecipeItemA = 'I016'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Sacred Ghoul +1
set udg_RCR_SaveRecipeItemA = 'I018'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Heavy Stone +1
set udg_RCR_SaveRecipeItemA = 'I019'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Arbalest +1
set udg_RCR_SaveRecipeItemA = 'I01A'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0A9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Collosus +1
set udg_RCR_SaveRecipeItemA = 'I01B'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0AA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Holy +1
set udg_RCR_SaveRecipeItemA = 'I01C'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0AB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES ARMOR RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Armor of Kobold +2
set udg_RCR_SaveRecipeItemA = 'I0A2'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bronze +2
set udg_RCR_SaveRecipeItemA = 'I0A3'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bloodstain +2
set udg_RCR_SaveRecipeItemA = 'I0AL'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Dragon Skin +2
set udg_RCR_SaveRecipeItemA = 'I0AN'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0B7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Fire Plate +2
set udg_RCR_SaveRecipeItemA = 'I0B8'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0A4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Raging Lion +2
set udg_RCR_SaveRecipeItemA = 'I0A6'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Sacred Ghoul +2
set udg_RCR_SaveRecipeItemA = 'I0A7'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Heavy Stone +2
set udg_RCR_SaveRecipeItemA = 'I0A8'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Arbalest +2
set udg_RCR_SaveRecipeItemA = 'I0A9'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Collosus +2
set udg_RCR_SaveRecipeItemA = 'I0AA'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Holy +2
set udg_RCR_SaveRecipeItemA = 'I0AB'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0AK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES ARMOR MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Armor of Kobold +3
set udg_RCR_SaveRecipeItemA = 'I0AC'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bronze +3
set udg_RCR_SaveRecipeItemA = 'I0AD'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bloodstain +3
set udg_RCR_SaveRecipeItemA = 'I0AE'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Dragon Skin +3
set udg_RCR_SaveRecipeItemA = 'I0B7'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Fire Plate +3
set udg_RCR_SaveRecipeItemA = 'I0A4'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Raging Lion +3
set udg_RCR_SaveRecipeItemA = 'I0AF'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Sacred Ghoul +3
set udg_RCR_SaveRecipeItemA = 'I0AG'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Heavy Stone +3
set udg_RCR_SaveRecipeItemA = 'I0AH'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Arbalest +3
set udg_RCR_SaveRecipeItemA = 'I0AI'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Collosus +3
set udg_RCR_SaveRecipeItemA = 'I0AJ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Holy +3
set udg_RCR_SaveRecipeItemA = 'I0AK'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0AX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES ARMOR LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Armor of Kobold +4
set udg_RCR_SaveRecipeItemA = 'I0AO'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0AY'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bronze +4
set udg_RCR_SaveRecipeItemA = 'I0AP'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0AZ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Bloodstain +4
set udg_RCR_SaveRecipeItemA = 'I0AQ'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Dragon Skin +4
set udg_RCR_SaveRecipeItemA = 'I0AM'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Fire Plate +4
set udg_RCR_SaveRecipeItemA = 'I0AR'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Raging Lion +4
set udg_RCR_SaveRecipeItemA = 'I0AS'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Sacred Ghoul +4
set udg_RCR_SaveRecipeItemA = 'I0AT'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Heavy Stone +4
set udg_RCR_SaveRecipeItemA = 'I0AU'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Arbalest +4
set udg_RCR_SaveRecipeItemA = 'I0AV'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Collosus +4
set udg_RCR_SaveRecipeItemA = 'I0AW'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0B9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Armor of Holy +4
set udg_RCR_SaveRecipeItemA = 'I0AX'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0BA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES GLOVES UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Gloves of Ordinary +1
set udg_RCR_SaveRecipeItemA = 'I01G'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Wind +1
set udg_RCR_SaveRecipeItemA = 'I01D'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Metal +1
set udg_RCR_SaveRecipeItemA = 'I01E'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Stronghold +1
set udg_RCR_SaveRecipeItemA = 'I01F'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Silent Touch +1
set udg_RCR_SaveRecipeItemA = 'I01H'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Water Essence +1
set udg_RCR_SaveRecipeItemA = 'I01I'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Mighty Earth +1
set udg_RCR_SaveRecipeItemA = 'I01J'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Vampiric Bite +1
set udg_RCR_SaveRecipeItemA = 'I01K'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Shining +1
set udg_RCR_SaveRecipeItemA = 'I01L'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of High Will +1
set udg_RCR_SaveRecipeItemA = 'I01M'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Dark Fate +1
set udg_RCR_SaveRecipeItemA = 'I01N'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0BL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES GLOVES RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Gloves of Ordinary +2
set udg_RCR_SaveRecipeItemA = 'I0BB'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Wind +2
set udg_RCR_SaveRecipeItemA = 'I0BC'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Metal +2
set udg_RCR_SaveRecipeItemA = 'I0BD'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Stronghold +2
set udg_RCR_SaveRecipeItemA = 'I0BE'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Silent Touch +2
set udg_RCR_SaveRecipeItemA = 'I0BF'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Water Essence +2
set udg_RCR_SaveRecipeItemA = 'I0BG'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Mighty Earth +2
set udg_RCR_SaveRecipeItemA = 'I0BH'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Vampiric Bite +2
set udg_RCR_SaveRecipeItemA = 'I0BI'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Shining +2
set udg_RCR_SaveRecipeItemA = 'I0BJ'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of High Will +2
set udg_RCR_SaveRecipeItemA = 'I0BK'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Dark Fate +2
set udg_RCR_SaveRecipeItemA = 'I0BL'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0BW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES GLOVES MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Gloves of Ordinary +3
set udg_RCR_SaveRecipeItemA = 'I0BM'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0BX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Wind +3
set udg_RCR_SaveRecipeItemA = 'I0BN'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0BY'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Metal +3
set udg_RCR_SaveRecipeItemA = 'I0BO'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0BZ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Stronghold +3
set udg_RCR_SaveRecipeItemA = 'I0BP'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Silent Touch +3
set udg_RCR_SaveRecipeItemA = 'I0BQ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Water Essence +3
set udg_RCR_SaveRecipeItemA = 'I0BR'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Mighty Earth +3
set udg_RCR_SaveRecipeItemA = 'I0BS'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Vampiric Bite +3
set udg_RCR_SaveRecipeItemA = 'I0BT'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Shining +3
set udg_RCR_SaveRecipeItemA = 'I0BU'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of High Will +3
set udg_RCR_SaveRecipeItemA = 'I0BV'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Dark Fate +3
set udg_RCR_SaveRecipeItemA = 'I0BW'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0C7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// RECIPES GLOVES LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Gloves of Ordinary +4
set udg_RCR_SaveRecipeItemA = 'I0BX'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0C8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Wind +4
set udg_RCR_SaveRecipeItemA = 'I0BY'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0C9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Metal +4
set udg_RCR_SaveRecipeItemA = 'I0BZ'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Stronghold +4
set udg_RCR_SaveRecipeItemA = 'I0C0'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Silent Touch +4
set udg_RCR_SaveRecipeItemA = 'I0C1'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Water Essence +4
set udg_RCR_SaveRecipeItemA = 'I0C2'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Mighty Earth +4
set udg_RCR_SaveRecipeItemA = 'I0C3'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Vampiric Bite +4
set udg_RCR_SaveRecipeItemA = 'I0C4'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Shining +4
set udg_RCR_SaveRecipeItemA = 'I0C5'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of High Will +4
set udg_RCR_SaveRecipeItemA = 'I0C6'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Gloves of Dark Fate +4
set udg_RCR_SaveRecipeItemA = 'I0C7'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0CI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES RINGS UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Ring of Simplicity +1
set udg_RCR_SaveRecipeItemA = 'I01O'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Storing +1
set udg_RCR_SaveRecipeItemA = 'I01P'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Jade +1
set udg_RCR_SaveRecipeItemA = 'I01Q'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Mysterious Charm +1
set udg_RCR_SaveRecipeItemA = 'I00Q'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Dark Entity +1
set udg_RCR_SaveRecipeItemA = 'I01R'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Divinity +1
set udg_RCR_SaveRecipeItemA = 'I01S'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Fortitude +1
set udg_RCR_SaveRecipeItemA = 'I00W'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Royal High +1
set udg_RCR_SaveRecipeItemA = 'I00V'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Eternal Glow +1
set udg_RCR_SaveRecipeItemA = 'I00U'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Enchanted Wisdom +1
set udg_RCR_SaveRecipeItemA = 'I00X'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Destiny +1
set udg_RCR_SaveRecipeItemA = 'I01T'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0CT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES RINGS RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Ring of Simplicity +2
set udg_RCR_SaveRecipeItemA = 'I0CJ'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Storing +2
set udg_RCR_SaveRecipeItemA = 'I0CK'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Jade +2
set udg_RCR_SaveRecipeItemA = 'I0CL'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Mysterious Charm +2
set udg_RCR_SaveRecipeItemA = 'I0CM'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Dark Entity +2
set udg_RCR_SaveRecipeItemA = 'I0CN'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CY'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Divinity +2
set udg_RCR_SaveRecipeItemA = 'I0CO'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0CZ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Fortitude +2
set udg_RCR_SaveRecipeItemA = 'I0CP'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0D0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Royal High +2
set udg_RCR_SaveRecipeItemA = 'I0CQ'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0D1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Eternal Glow +2
set udg_RCR_SaveRecipeItemA = 'I0CR'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0D2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Enchanted Wisdom +2
set udg_RCR_SaveRecipeItemA = 'I0CS'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0D3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Destiny +2
set udg_RCR_SaveRecipeItemA = 'I0CT'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0D4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES RINGS MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Ring of Simplicity +3
set udg_RCR_SaveRecipeItemA = 'I0CU'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0D5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Storing +3
set udg_RCR_SaveRecipeItemA = 'I0CV'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0D6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Jade +3
set udg_RCR_SaveRecipeItemA = 'I0CW'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0D7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Mysterious Charm +3
set udg_RCR_SaveRecipeItemA = 'I0CX'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0D8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Dark Entity +3
set udg_RCR_SaveRecipeItemA = 'I0CY'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0D9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Divinity +3
set udg_RCR_SaveRecipeItemA = 'I0CZ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Fortitude +3
set udg_RCR_SaveRecipeItemA = 'I0D0'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Royal High +3
set udg_RCR_SaveRecipeItemA = 'I0D1'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Eternal Glow +3
set udg_RCR_SaveRecipeItemA = 'I0D2'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Enchanted Wisdom +3
set udg_RCR_SaveRecipeItemA = 'I0D3'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Destiny +3
set udg_RCR_SaveRecipeItemA = 'I0D4'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0DF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES RINGS LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Ring of Simplicity +4
set udg_RCR_SaveRecipeItemA = 'I0D5'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Storing +4
set udg_RCR_SaveRecipeItemA = 'I0D6'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Jade +4
set udg_RCR_SaveRecipeItemA = 'I0D7'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Mysterious Charm +4
set udg_RCR_SaveRecipeItemA = 'I0D8'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Dark Entity +4
set udg_RCR_SaveRecipeItemA = 'I0D9'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Divinity +4
set udg_RCR_SaveRecipeItemA = 'I0DA'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Fortitude +4
set udg_RCR_SaveRecipeItemA = 'I0DB'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Royal High +4
set udg_RCR_SaveRecipeItemA = 'I0DC'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Eternal Glow +4
set udg_RCR_SaveRecipeItemA = 'I0DD'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Enchanted Wisdom +4
set udg_RCR_SaveRecipeItemA = 'I0DE'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Ring of Destiny +4
set udg_RCR_SaveRecipeItemA = 'I0DF'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0DQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES HELMS UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Helm of Jawbone +1
set udg_RCR_SaveRecipeItemA = 'I029'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Firehorn +1
set udg_RCR_SaveRecipeItemA = 'I02A'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Emperor +1
set udg_RCR_SaveRecipeItemA = 'I02B'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Titan +1
set udg_RCR_SaveRecipeItemA = 'I02C'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Lancelot +1
set udg_RCR_SaveRecipeItemA = 'I02D'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Flash +1
set udg_RCR_SaveRecipeItemA = 'I02E'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Holy Crest +1
set udg_RCR_SaveRecipeItemA = 'I00T'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0DX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Chaos +1
set udg_RCR_SaveRecipeItemA = 'I02F'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0E2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Night Guardian +1
set udg_RCR_SaveRecipeItemA = 'I02G'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0E3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Future Insight +1
set udg_RCR_SaveRecipeItemA = 'I02H'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0E4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Absolute Power +1
set udg_RCR_SaveRecipeItemA = 'I02I'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0E5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES HELMS RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Helm of Jawbone +2
set udg_RCR_SaveRecipeItemA = 'I0DR'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0E6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Firehorn +2
set udg_RCR_SaveRecipeItemA = 'I0DS'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0E7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Emperor +2
set udg_RCR_SaveRecipeItemA = 'I0DT'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0E8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Titan +2
set udg_RCR_SaveRecipeItemA = 'I0DU'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0E9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Lancelot +2
set udg_RCR_SaveRecipeItemA = 'I0DV'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Flash +2
set udg_RCR_SaveRecipeItemA = 'I0DW'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Holy Crest +2
set udg_RCR_SaveRecipeItemA = 'I0DX'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Chaos +2
set udg_RCR_SaveRecipeItemA = 'I0E2'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Night Guardian +2
set udg_RCR_SaveRecipeItemA = 'I0E3'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Future Insight +2
set udg_RCR_SaveRecipeItemA = 'I0E4'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0EQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Absolute Power +2
set udg_RCR_SaveRecipeItemA = 'I0E5'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0ER'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES HELMS MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Helm of Jawbone +3
set udg_RCR_SaveRecipeItemA = 'I0E6'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0ES'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Firehorn +3
set udg_RCR_SaveRecipeItemA = 'I0E7'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0ET'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Emperor +3
set udg_RCR_SaveRecipeItemA = 'I0E8'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0EU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Titan +3
set udg_RCR_SaveRecipeItemA = 'I0E9'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0EV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Lancelot +3
set udg_RCR_SaveRecipeItemA = 'I0EA'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Flash +3
set udg_RCR_SaveRecipeItemA = 'I0EB'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Holy Crest +3
set udg_RCR_SaveRecipeItemA = 'I0EN'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Chaos +3
set udg_RCR_SaveRecipeItemA = 'I0EO'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Night Guardian +3
set udg_RCR_SaveRecipeItemA = 'I0EP'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Future Insight +3
set udg_RCR_SaveRecipeItemA = 'I0EQ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0F9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Absolute Power +3
set udg_RCR_SaveRecipeItemA = 'I0ER'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0FA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES HELMS LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Helm of Jawbone +4
set udg_RCR_SaveRecipeItemA = 'I0ES'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Firehorn +4
set udg_RCR_SaveRecipeItemA = 'I0ET'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Emperor +4
set udg_RCR_SaveRecipeItemA = 'I0EU'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Titan +4
set udg_RCR_SaveRecipeItemA = 'I0EV'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Lancelot +4
set udg_RCR_SaveRecipeItemA = 'I0F4'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Flash +4
set udg_RCR_SaveRecipeItemA = 'I0F5'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Holy Crest +4
set udg_RCR_SaveRecipeItemA = 'I0F6'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Chaos +4
set udg_RCR_SaveRecipeItemA = 'I0F7'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0FW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Night Guardian +4
set udg_RCR_SaveRecipeItemA = 'I0F8'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0G1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Future Insight +4
set udg_RCR_SaveRecipeItemA = 'I0F9'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0G2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Helm of Absolute Power +4
set udg_RCR_SaveRecipeItemA = 'I0FA'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0G3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES SPECIAL UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Orb of Frost +1
set udg_RCR_SaveRecipeItemA = 'I038'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Souls +1
set udg_RCR_SaveRecipeItemA = 'I034'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Light +1
set udg_RCR_SaveRecipeItemA = 'I02W'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Rock +1
set udg_RCR_SaveRecipeItemA = 'I02X'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Swirls +1
set udg_RCR_SaveRecipeItemA = 'I02Y'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Darkness +1
set udg_RCR_SaveRecipeItemA = 'I02Z'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0G9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Lava +1
set udg_RCR_SaveRecipeItemA = 'I030'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0GA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Globes +1
set udg_RCR_SaveRecipeItemA = 'I031'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0GB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Awe +1
set udg_RCR_SaveRecipeItemA = 'I033'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0GC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Magnificense +1
set udg_RCR_SaveRecipeItemA = 'I036'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0GD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Matrix +1
set udg_RCR_SaveRecipeItemA = 'I039'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0GE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES SPECIAL RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Orb of Frost +2
set udg_RCR_SaveRecipeItemA = 'I0G4'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Souls +2
set udg_RCR_SaveRecipeItemA = 'I0G5'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Light +2
set udg_RCR_SaveRecipeItemA = 'I0G6'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Rock +2
set udg_RCR_SaveRecipeItemA = 'I0G7'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Swirls +2
set udg_RCR_SaveRecipeItemA = 'I0G8'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Darkness +2
set udg_RCR_SaveRecipeItemA = 'I0G9'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Lava +2
set udg_RCR_SaveRecipeItemA = 'I0GA'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Globes +2
set udg_RCR_SaveRecipeItemA = 'I0GB'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Awe +2
set udg_RCR_SaveRecipeItemA = 'I0GC'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Magnificense +2
set udg_RCR_SaveRecipeItemA = 'I0GD'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Matrix +2
set udg_RCR_SaveRecipeItemA = 'I0GE'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0GP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES SPECIAL MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Orb of Frost +3
set udg_RCR_SaveRecipeItemA = 'I0GF'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Souls +3
set udg_RCR_SaveRecipeItemA = 'I0GG'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Light +3
set udg_RCR_SaveRecipeItemA = 'I0GH'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Rock +3
set udg_RCR_SaveRecipeItemA = 'I0GI'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Swirls +3
set udg_RCR_SaveRecipeItemA = 'I0GJ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Darkness +3
set udg_RCR_SaveRecipeItemA = 'I0GK'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Lava +3
set udg_RCR_SaveRecipeItemA = 'I0GL'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Globes +3
set udg_RCR_SaveRecipeItemA = 'I0GM'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Awe +3
set udg_RCR_SaveRecipeItemA = 'I0GN'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GY'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Magnificense +3
set udg_RCR_SaveRecipeItemA = 'I0GO'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0GZ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Matrix +3
set udg_RCR_SaveRecipeItemA = 'I0GP'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0H0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES SPECIAL LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Orb of Frost +4
set udg_RCR_SaveRecipeItemA = 'I0GQ'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Souls +4
set udg_RCR_SaveRecipeItemA = 'I0GR'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Light +4
set udg_RCR_SaveRecipeItemA = 'I0GS'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Rock +4
set udg_RCR_SaveRecipeItemA = 'I0GT'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Swirls +4
set udg_RCR_SaveRecipeItemA = 'I0GU'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Darkness +4
set udg_RCR_SaveRecipeItemA = 'I0GV'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Lava +4
set udg_RCR_SaveRecipeItemA = 'I0GW'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Globes +4
set udg_RCR_SaveRecipeItemA = 'I0GX'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Awe +4
set udg_RCR_SaveRecipeItemA = 'I0GY'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0H9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Magnificense +4
set udg_RCR_SaveRecipeItemA = 'I0GZ'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0HA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Orb of Matrix +4
set udg_RCR_SaveRecipeItemA = 'I0H0'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0HB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------=
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES WEAPON UNCOMMON
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Weapon of Initiation +1
set udg_RCR_SaveRecipeItemA = 'I02J'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Swift Kill +1
set udg_RCR_SaveRecipeItemA = 'I02K'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HD'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Searing +1
set udg_RCR_SaveRecipeItemA = 'I02L'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Devouring +1
set udg_RCR_SaveRecipeItemA = 'I02M'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Glistening +1
set udg_RCR_SaveRecipeItemA = 'I02O'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Darkness +1
set udg_RCR_SaveRecipeItemA = 'I02Q'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Blood Elf +1
set udg_RCR_SaveRecipeItemA = 'I02R'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HI'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Watery Mist +1
set udg_RCR_SaveRecipeItemA = 'I02S'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of New Dimensions +1
set udg_RCR_SaveRecipeItemA = 'I02T'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HK'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Molt +1
set udg_RCR_SaveRecipeItemA = 'I02U'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HL'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of the Unknown +1
set udg_RCR_SaveRecipeItemA = 'I02V'
set udg_RCR_SaveRecipeItemB = 'I024'
set udg_RCR_SaveRecipeResult = 'I0HM'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES WEAPON RARE
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Weapon of Initiation +2
set udg_RCR_SaveRecipeItemA = 'I0HC'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HN'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Swift Kill +2
set udg_RCR_SaveRecipeItemA = 'I0HD'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HO'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Searing +2
set udg_RCR_SaveRecipeItemA = 'I0HE'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HP'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Devouring +2
set udg_RCR_SaveRecipeItemA = 'I0HF'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HQ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Glistening +2
set udg_RCR_SaveRecipeItemA = 'I0HG'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HR'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Darkness +2
set udg_RCR_SaveRecipeItemA = 'I0HH'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HS'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Blood Elf +2
set udg_RCR_SaveRecipeItemA = 'I0HI'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HT'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Watery Mist +2
set udg_RCR_SaveRecipeItemA = 'I0HJ'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HU'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of New Dimensions +2
set udg_RCR_SaveRecipeItemA = 'I0HK'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HV'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Molt +2
set udg_RCR_SaveRecipeItemA = 'I0HL'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HW'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of the Unknown +2
set udg_RCR_SaveRecipeItemA = 'I0HM'
set udg_RCR_SaveRecipeItemB = 'I07Z'
set udg_RCR_SaveRecipeResult = 'I0HX'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES WEAPON MYTHICAL
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Weapon of Initiation +3
set udg_RCR_SaveRecipeItemA = 'I0HN'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0HY'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Swift Kill +3
set udg_RCR_SaveRecipeItemA = 'I0HO'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0HZ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Searing +3
set udg_RCR_SaveRecipeItemA = 'I0HP'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I0'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Devouring +3
set udg_RCR_SaveRecipeItemA = 'I0HQ'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I1'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Glistening +3
set udg_RCR_SaveRecipeItemA = 'I0HR'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I2'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Darkness +3
set udg_RCR_SaveRecipeItemA = 'I0HS'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I3'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Blood Elf +3
set udg_RCR_SaveRecipeItemA = 'I0HT'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I4'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Watery Mist +3
set udg_RCR_SaveRecipeItemA = 'I0HU'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I5'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of New Dimensions +3
set udg_RCR_SaveRecipeItemA = 'I0HV'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I6'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Molt +3
set udg_RCR_SaveRecipeItemA = 'I0HW'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I7'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of the Unknown +3
set udg_RCR_SaveRecipeItemA = 'I0HX'
set udg_RCR_SaveRecipeItemB = 'I025'
set udg_RCR_SaveRecipeResult = 'I0I8'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// RECIPES WEAPON LEGENDARY
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Weapon of Initiation +4
set udg_RCR_SaveRecipeItemA = 'I0HY'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0I9'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Swift Kill +4
set udg_RCR_SaveRecipeItemA = 'I0HZ'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IA'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Searing +4
set udg_RCR_SaveRecipeItemA = 'I0I0'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IB'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Devouring +4
set udg_RCR_SaveRecipeItemA = 'I0I1'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IC'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Glistening +4
set udg_RCR_SaveRecipeItemA = 'I0I2'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0ID'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Darkness +4
set udg_RCR_SaveRecipeItemA = 'I0I3'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IE'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Blood Elf +4
set udg_RCR_SaveRecipeItemA = 'I0I4'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IF'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Watery Mist +4
set udg_RCR_SaveRecipeItemA = 'I0I5'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IG'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of New Dimensions +4
set udg_RCR_SaveRecipeItemA = 'I0I6'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IH'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of Molt +4
set udg_RCR_SaveRecipeItemA = 'I0I7'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0II'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
// Weapon of the Unknown +4
set udg_RCR_SaveRecipeItemA = 'I0I8'
set udg_RCR_SaveRecipeItemB = 'I081'
set udg_RCR_SaveRecipeResult = 'I0IJ'
call TriggerExecute( gg_trg_RCR_SaveRecipe )
// --------------------------------------------------------------------------------
endfunction
//===========================================================================
function InitTrig_RCR_Config takes nothing returns nothing
set gg_trg_RCR_Config = CreateTrigger( )
call TriggerAddAction( gg_trg_RCR_Config, function Trig_RCR_Config_Actions )
endfunction
function Trig_RCR_SaveRecipe_Actions takes nothing returns nothing
set udg_RCR_SaveA = udg_RCR_SaveRecipeItemA
set udg_RCR_SaveB = udg_RCR_SaveRecipeItemB
set udg_RCR_SaveR = udg_RCR_SaveRecipeResult
// For combining
call SaveIntegerBJ( udg_RCR_SaveR, udg_RCR_SaveA, udg_RCR_SaveB, udg_RCR_CombineTable )
call SaveIntegerBJ( udg_RCR_SaveR, udg_RCR_SaveB, udg_RCR_SaveA, udg_RCR_CombineTable )
// For charges
call SaveBooleanBJ( udg_RCR_SaveAddCharges, udg_RCR_SaveR, udg_RCR_SaveA, udg_RCR_CombineTable )
call SaveBooleanBJ( udg_RCR_SaveAddCharges, udg_RCR_SaveR, udg_RCR_SaveB, udg_RCR_CombineTable )
// For disassembly
call SaveIntegerBJ( udg_RCR_SaveA, ( udg_RCR_SaveR * -1 ), ( udg_RCR_SaveR * -1 ), udg_RCR_CombineTable )
call SaveIntegerBJ( udg_RCR_SaveB, ( udg_RCR_SaveA * -1 ), ( udg_RCR_SaveR * -1 ), udg_RCR_CombineTable )
endfunction
//===========================================================================
function InitTrig_RCR_SaveRecipe takes nothing returns nothing
set gg_trg_RCR_SaveRecipe = CreateTrigger( )
call TriggerAddAction( gg_trg_RCR_SaveRecipe, function Trig_RCR_SaveRecipe_Actions )
endfunction
//TESH.scrollpos=62
//TESH.alwaysfold=0
function Trig_RCR_Combine_Conditions takes nothing returns boolean
if ( not ( GetOrderTargetItem() != null ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010Func004C takes nothing returns boolean
if ( not ( udg_RCR_SaveAddCharges == true ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010Func005C takes nothing returns boolean
if ( not ( udg_RCR_CombineSFX != "" ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010Func006C takes nothing returns boolean
if ( not ( udg_RCR_ShowText == true ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010Func007Func001C takes nothing returns boolean
if ( not ( GetItemCharges(udg_RCR_CombineItemB) > 1 ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010Func007C takes nothing returns boolean
if ( not ( GetItemCharges(udg_RCR_CombineItemA) > 1 ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011Func010C takes nothing returns boolean
if ( not ( udg_RCR_SaveR != 0 ) ) then
return false
endif
if ( not ( udg_RCR_SaveA != udg_RCR_SaveB ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Func011C takes nothing returns boolean
if ( not ( udg_RCR_CombineItemA != null ) ) then
return false
endif
if ( not ( udg_RCR_CombineItemB != null ) ) then
return false
endif
if ( not ( udg_RCR_CombineItemA != udg_RCR_CombineItemB ) ) then
return false
endif
return true
endfunction
function Trig_RCR_Combine_Actions takes nothing returns nothing
set udg_RCR_tempUnit = GetTriggerUnit()
// null previous variables
set udg_RCR_SaveR = 0
set udg_RCR_SaveAddCharges = false
set udg_RCR_CombineItemA = null
set udg_RCR_CombineItemB = null
set udg_RCR_LoopA = GetIssuedOrderId()-852001
set udg_RCR_CombineItemB = UnitItemInSlotBJ(udg_RCR_tempUnit, udg_RCR_LoopA)
set udg_RCR_CombineItemA = GetOrderTargetItem()
// Now check recipes
if ( Trig_RCR_Combine_Func011C() ) then
// Retrieve recipe result
set udg_RCR_SaveRecipeItemA = GetItemTypeId(udg_RCR_CombineItemA)
set udg_RCR_SaveRecipeItemB = GetItemTypeId(udg_RCR_CombineItemB)
set udg_RCR_SaveA = udg_RCR_SaveRecipeItemA
set udg_RCR_SaveB = udg_RCR_SaveRecipeItemB
set udg_RCR_SaveR = LoadIntegerBJ(udg_RCR_SaveA, udg_RCR_SaveB, udg_RCR_CombineTable)
set udg_RCR_tempItemType = udg_RCR_SaveR
set udg_RCR_SaveAddCharges = LoadBooleanBJ(udg_RCR_SaveR, udg_RCR_SaveA, udg_RCR_CombineTable)
// Verify result
if ( Trig_RCR_Combine_Func011Func010C() ) then
call UnitRemoveItemSwapped( udg_RCR_CombineItemA, udg_RCR_tempUnit )
call UnitRemoveItemSwapped( udg_RCR_CombineItemB, udg_RCR_tempUnit )
call UnitAddItemByIdSwapped( udg_RCR_tempItemType, udg_RCR_tempUnit )
if ( Trig_RCR_Combine_Func011Func010Func004C() ) then
call SetItemCharges( GetLastCreatedItem(), ( GetItemCharges(udg_RCR_CombineItemA) + GetItemCharges(udg_RCR_CombineItemB) ) )
else
endif
if ( Trig_RCR_Combine_Func011Func010Func005C() ) then
call AddSpecialEffectTargetUnitBJ( "origin", udg_RCR_tempUnit, udg_RCR_CombineSFX )
call DestroyEffect( GetLastCreatedEffectBJ() )
else
endif
if ( Trig_RCR_Combine_Func011Func010Func006C() ) then
set udg_RCR_tempForce = GetForceOfPlayer(GetOwningPlayer(udg_RCR_tempUnit))
call QuestMessageBJ( udg_RCR_tempForce, bj_QUESTMESSAGE_ITEMACQUIRED, ( "|cff00ffffITEM|r - " + ( ( GetItemName(udg_RCR_CombineItemA) + " combined with " ) + ( GetItemName(udg_RCR_CombineItemB) + ( " to create " + GetItemName(GetLastCreatedItem()) ) ) ) ) )
call DestroyForce(udg_RCR_tempForce)
else
endif
if ( Trig_RCR_Combine_Func011Func010Func007C() ) then
call SetItemCharges( udg_RCR_CombineItemA, ( GetItemCharges(udg_RCR_CombineItemA) - 1 ) )
call UnitAddItemSwapped( udg_RCR_CombineItemA, udg_RCR_tempUnit )
call RemoveItem( udg_RCR_CombineItemB )
else
if ( Trig_RCR_Combine_Func011Func010Func007Func001C() ) then
call SetItemCharges( udg_RCR_CombineItemB, ( GetItemCharges(udg_RCR_CombineItemB) - 1 ) )
call UnitAddItemSwapped( udg_RCR_CombineItemB, udg_RCR_tempUnit )
call RemoveItem( udg_RCR_CombineItemA )
else
call RemoveItem( udg_RCR_CombineItemA )
call RemoveItem( udg_RCR_CombineItemB )
endif
endif
else
endif
else
endif
endfunction
//===========================================================================
function InitTrig_RCR_Combine takes nothing returns nothing
set gg_trg_RCR_Combine = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_RCR_Combine, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddCondition( gg_trg_RCR_Combine, Condition( function Trig_RCR_Combine_Conditions ) )
call TriggerAddAction( gg_trg_RCR_Combine, function Trig_RCR_Combine_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
//=======================================================================================================
// 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
//TESH.scrollpos=75
//TESH.alwaysfold=0
//***************************************************************************************
//* *
//* ITEM RESTRICTION SYSTEM (IRS) *
//* *
//* Author: Doomlord *
//* Version: 1.0f *
//* *
//* Credits: *
//* + Vexorian: SimError [url]http://www.wc3c.net/showthread.php?t=101260[/url] *
//* + Magtheridon96: Help with code optimization *
//* + SeriousEnemy: Help with code optimization *
//* *
//***************************************************************************************
//*************************************************************************
//* INTRODUCTION: *
//* *
//* A simple system that allows for easy registration of requirements to *
//* carry a specific item type. This system also utilizes Custom Scripts *
//* to make it GUI-friendly. *
//* *
//* In addition, there is a tiny snippet that allows you to register *
//* unit type(s) as a "class". This can be referenced later by using the *
//* hashtable key (<Unit Raw Code>, 0) from IRS_Hashtable which will *
//* give you the class string of said unit. *
//* *
//*************************************************************************
//*******************
//* REQUIREMENTS: *
//* *
//* None *
//* *
//*******************
//************************************************************************************************************************************************
//* INSTALLATION INSTRUCTION: *
//* *
//* Step 1: Copy the code for SimError to your map's Map Header Custom Code. *
//* *
//* Step 2: Copy the whole IRS folder to your map. Don't forget to turn on "Automatically create unknown variables while pasting trigger data". *
//* *
//* Step 3: Create a trigger that runs at Map Initialization. It will be where you register the items and Heroes. *
//* *
//* Step 4: Register your desired unit type(s) as specific classes. Multiple unit types can be registered as one single type of Hero class. *
//* *
//* Step 5: Register your items as examplified in the Item Declaration trigger. Remember to use Map Initialization event. *
//* *
//************************************************************************************************************************************************
//**************************************************************************************
//* Class Registration API *
//* *
//* call IRS_ClassRegistration (integer unitRawCode, string className) *
//* *
//**************************************************************************************
//**************************************************************************
//* Item Requirement Registration API *
//* *
//* call IRS_ItemRegistration (
//* 1 - integer itemRawCode
//* 2 - string itemClass
//* 3 - string heroClass
//* 4 - integer minLvl
//* 5 - integer minStr
//* 6 - integer minAgi
//* 7 - integer minInt
//* 8 - integer rangeFilter ( both melee/range = 0, range = 1, melee = 2,
//* *
//**************************************************************************
//=====================================================================================
// Item Pickup Check
function IRS_ItemAcquireCheck takes nothing returns boolean
local unit u = GetTriggerUnit ()
local player p = GetOwningPlayer(u)
local item it = GetManipulatedItem ()
local integer i = GetItemTypeId (it)
local integer k
local integer j = 0
if LoadStr(udg_IRS_Hashtable, GetUnitTypeId(u), 0) != LoadStr(udg_IRS_Hashtable, i, 1) and LoadStr(udg_IRS_Hashtable, GetUnitTypeId(u), 0) != LoadStr(udg_IRS_Hashtable, i, 7) and LoadStr(udg_IRS_Hashtable, i, 1) != null then
call IRS_SimError(p, udg_IRS_String[0] + " " + LoadStr(udg_IRS_Hashtable, i, 1))
call UnitRemoveItem(u, it)
return false
endif
loop
exitwhen j > 5
if LoadStr(udg_IRS_Hashtable, GetItemTypeId(UnitItemInSlot (u, j)), 0) == LoadStr(udg_IRS_Hashtable, i, 0) and UnitItemInSlot (u, j) != it and LoadStr(udg_IRS_Hashtable, i, 0) != null then
if udg_IRS_Switch then
call IRS_SimNotify(p, udg_IRS_String[6] + " " + LoadStr(udg_IRS_Hashtable, i, 0))
call UnitRemoveItem(u, UnitItemInSlot (u, j))
call UnitRemoveItem(u, it)
call UnitAddItem(u, it)
else
call IRS_SimError(p, udg_IRS_String[1] + " " + LoadStr(udg_IRS_Hashtable, i, 0))
call UnitRemoveItem(u, it)
endif
return false
endif
set j = j + 1
endloop
set k = LoadInteger(udg_IRS_Hashtable, i, 2)
if GetUnitLevel(u) < k and LoadStr(udg_IRS_Hashtable, GetUnitTypeId(u), 0) != LoadStr(udg_IRS_Hashtable, i, 7) then
call IRS_SimError(p, udg_IRS_String[2] + " " + I2S(k))
call UnitRemoveItem(u, it)
return false
endif
set k = LoadInteger(udg_IRS_Hashtable, i, 3)
if GetHeroStr(u, true) < k then
call IRS_SimError(p, udg_IRS_String[3] + " " + I2S(k))
call UnitRemoveItem(u, it)
return false
endif
set k = LoadInteger(udg_IRS_Hashtable, i, 4)
if GetHeroAgi(u, true) < k then
call IRS_SimError(p, udg_IRS_String[4] + " " + I2S(k))
call UnitRemoveItem(u, it)
return false
endif
set k = LoadInteger(udg_IRS_Hashtable, i, 5)
if GetHeroInt(u, true) < k then
call IRS_SimError(p, udg_IRS_String[5] + " " + I2S(k))
call UnitRemoveItem(u, it)
return false
endif
set k = LoadInteger(udg_IRS_Hashtable, i, 6)
if k >= 0 and k <= 2 then
if k == 1 then
if IsUnitType(u, UNIT_TYPE_MELEE_ATTACKER) then
call IRS_SimError(p, udg_IRS_String[7])
call UnitRemoveItem(u, it)
return false
endif
elseif k == 2 then
if IsUnitType(u, UNIT_TYPE_RANGED_ATTACKER) then
call IRS_SimError(p, udg_IRS_String[8])
call UnitRemoveItem(u, it)
return false
endif
endif
else
call IRS_SimError(p, "Invalid range filter value for item")
endif
set p = null
set it = null
set u = null
return false
endfunction
// Class Registration
function IRS_ClassRegistration takes integer unitType, string class returns nothing
call SaveStr (udg_IRS_Hashtable, unitType, 0, class)
endfunction
// Item Requirement Registration
function IRS_RegisterRestrictedItem takes integer itemRawCode, string itemClass, string heroClass, integer minLvl, integer minStr, integer minAgi, integer minInt, integer rangeFilter, string heroClass2 returns nothing
call SaveStr (udg_IRS_Hashtable, itemRawCode, 0, itemClass)
call SaveStr (udg_IRS_Hashtable, itemRawCode, 1, heroClass)
call SaveInteger (udg_IRS_Hashtable, itemRawCode, 2, minLvl)
call SaveInteger (udg_IRS_Hashtable, itemRawCode, 3, minStr)
call SaveInteger (udg_IRS_Hashtable, itemRawCode, 4, minAgi)
call SaveInteger (udg_IRS_Hashtable, itemRawCode, 5, minInt)
call SaveInteger (udg_IRS_Hashtable, itemRawCode, 6, rangeFilter)
call SaveStr (udg_IRS_Hashtable, itemRawCode, 7, heroClass2)
endfunction
//===========================================================================
function InitTrig_IRS takes nothing returns nothing
local trigger acquireItem = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(acquireItem, EVENT_PLAYER_UNIT_PICKUP_ITEM)
call TriggerAddCondition(acquireItem, Condition(function IRS_ItemAcquireCheck))
set udg_IRS_Hashtable = InitHashtable()
set acquireItem = null
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
[tabs]
[tab=Foreword]
This system allows a unit to guard a certain place or point and attacks any entruders that goes within the guarded perimeter.
[/tab]
[tab=Installation]
- Be sure to check the 'Automatically create unknown variables while pasting trigger data' via File>>>Preferences>>>General tab
- Copy the Unit Indexer to your map (or any Unit Indexer will do)
- Copy the Guard Post folder to your map, be sure to check the ''
[/tab]
[tab=Instructions]
[B]First, set certain variables;[/B]
[COLOR="Orange"]GP_GuardingUnit[/COLOR] = The unit you want to be guarding
[COLOR="Orange"]GP_GuardWhere[/COLOR] = The point where the unit is guarding
[COLOR="orange"]GP_Perimeter[/COLOR] = Guard units will attack any enemy that is in range
[COLOR="orange"]GP_FacingAngle[/COLOR] = This is optional, when unit has no work he will face that angle
[COLOR="orange"]GP_EngageWhileTraveling[/COLOR] = Also optional, default is false, it engages anemy units while going to the place he guards
[B]Then at the last, run the;[/B]
[trigger]Trigger - Run Guard Post Form <gen> (ignoring conditions)[/trigger]
[B]Like this;[/B]
[trigger]
All Units
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Unit Group - Pick every unit in (Units in (Playable map area)) and do (Actions)
Loop - Actions
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- Sets the Guard unit --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Set GP_GuardingUnit = (Picked unit)
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- Sets the location point of where the unit will guard --------
-------- You do not need to remove the location coz it will be removed from the system automatically --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Set GP_GuardWhere = (Position of (Picked unit))
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- Sets the range perimeter from the location where the unit is guarding --------
-------- If an enemy unit is in range, he will engage --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Set GP_Perimeter = 1000.00
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- Facing angle and Engage while traveling are optional --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Set GP_FacingAngle = 30.00
Set GP_EngageWhileTraveling = True
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- Store the guard unit to the system --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Trigger - Run Guard Post Form <gen> (ignoring conditions)
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
-------- If you want to remove the unit from the system, just do this --------
-------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------
Set GP_GuardingUnit = Mountain King 0010 <gen>
Trigger - Run Guard Post Remove <gen> (ignoring conditions)
[/trigger]
[B][I]For more info, check the [COLOR="Orange"]Demo and Instructions [/COLOR]folder[/I][/B]
[/tab]
[tab=Trigger]
[trigger]
Guard Post Setup
Events
Map initialization
Conditions
Actions
-------- All settings here are default and recommended --------
-------- ======================================= --------
-------- The minimum perimeter of the location where the unit is guarding --------
-------- ======================================= --------
Set GP_MinimumPerimeter = 200.00
-------- ======================================= --------
-------- If the unit doesnt have orders or no more enemies around, it will go back to it's guarding post --------
-------- Calculation is 1x3 since the Movement is every 3 seconds --------
-------- ======================================= --------
Set GP_MinimumDelayBackToBase = 1
[/trigger]
[trigger]
Guard Post Form
Events
Conditions
Actions
-------- ======================================= --------
-------- Take note that if you cause an error message, the location variable will leak --------
-------- ======================================= --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_GuardingUnit Equal to No unit
Then - Actions
Game - Display to (All players) the text: Guard Post Error: C...
Skip remaining actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Perimeter Less than GP_MinimumPerimeter
Then - Actions
Game - Display to (All players) the text: (Guard Post Error: + (Minimum Perimeter should be + (String(GP_MinimumPerimeter))))
Skip remaining actions
Else - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(GP_GuardingUnit is in GP_GuardingGroup) Equal to True
Then - Actions
Game - Display to (All players) the text: (Guard Post Error: + ((Name of GP_GuardingUnit) + is already added as a guard, remove it first))
Skip remaining actions
Else - Actions
AI - Ignore GP_GuardingUnit's guard position
Set GP_UI = (Custom value of GP_GuardingUnit)
Set GP_U[GP_UI] = GP_GuardingUnit
Set GP_Per[GP_UI] = GP_Perimeter
Set GP_Fac[GP_UI] = GP_FacingAngle
Set GP_BackToBase[GP_UI] = GP_MinimumDelayBackToBase
Set GP_Back[GP_UI] = GP_MinimumDelayBackToBase
Set GP_Engage[GP_UI] = GP_EngageWhileTraveling
Set GP_EngageWhileTraveling = False
Unit - Order GP_GuardingUnit to Attack-Move To GP_GuardWhere
Custom script: set udg_GP_X[udg_GP_UI] = GetLocationX(udg_GP_GuardWhere)
Custom script: set udg_GP_Y[udg_GP_UI] = GetLocationY(udg_GP_GuardWhere)
Custom script: call RemoveLocation(udg_GP_GuardWhere)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Index Equal to 0
Then - Actions
Trigger - Turn on Guard Post Movements <gen>
Else - Actions
Set GP_Index = (GP_Index + 1)
Unit Group - Add GP_U[GP_UI] to GP_GuardingGroup
[/trigger]
[trigger]
Guard Post Movements
Events
Time - Every 3.00 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in GP_GuardingGroup and do (Actions)
Loop - Actions
Custom script: local unit first
Custom script: local real xGuard
Custom script: local real yGuard
Set GP_UI = (Custom value of (Picked unit))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(GP_U[GP_UI] is alive) Equal to True
Then - Actions
Custom script: set xGuard = GetUnitX(udg_GP_U[udg_GP_UI])
Custom script: set yGuard = GetUnitY(udg_GP_U[udg_GP_UI])
Custom script: set udg_GP_Distance = (udg_GP_X[udg_GP_UI] - xGuard)*(udg_GP_X[udg_GP_UI] - xGuard)+(udg_GP_Y[udg_GP_UI] - yGuard*(udg_GP_Y[udg_GP_UI] - yGuard))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Distance Greater than or equal to (GP_Per[GP_UI] x GP_Per[GP_UI])
Then - Actions
-------- ======================================= --------
-------- Engage enemies while going to base if the condition is true --------
-------- Or just moves to the base if away from perimeter --------
-------- ======================================= --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Engage[GP_UI] Equal to True
Then - Actions
Custom script: call IssuePointOrderById(udg_GP_U[udg_GP_UI], 851983, udg_GP_X[udg_GP_UI], udg_GP_Y[udg_GP_UI])
Else - Actions
Custom script: call IssuePointOrderById(udg_GP_U[udg_GP_UI], 851986, udg_GP_X[udg_GP_UI], udg_GP_Y[udg_GP_UI])
Else - Actions
-------- ======================================= --------
-------- Searches for enemy units within the perimeter --------
-------- ======================================= --------
Custom script: call GroupEnumUnitsInRange(udg_GP_TempGroup, udg_GP_X[udg_GP_UI], udg_GP_Y[udg_GP_UI], udg_GP_Per[udg_GP_UI], null)
Custom script: loop
Custom script: set first = FirstOfGroup(udg_GP_TempGroup)
Custom script: exitwhen first==null
Custom script: if not IsUnitType(first, UNIT_TYPE_DEAD) and IsUnitEnemy(udg_GP_U[udg_GP_UI], GetOwningPlayer(first)) then
Custom script: call IssuePointOrderById(udg_GP_U[udg_GP_UI], 851983, GetUnitX(first), GetUnitY(first))
Custom script: endif
Custom script: call GroupRemoveUnit(udg_GP_TempGroup, first)
Custom script: endloop
-------- ======================================= --------
-------- Setting unit's facing angle if no order is available --------
-------- ======================================= --------
Custom script: if GetUnitCurrentOrder(udg_GP_U[udg_GP_UI])==0 then
Custom script: call SetUnitFacing(udg_GP_U[udg_GP_UI], udg_GP_Fac[udg_GP_UI])
-------- ======================================= --------
-------- Back to base, recycles every XXX seconds if order is 0 --------
-------- ======================================= --------
Set GP_BackToBase[GP_UI] = (GP_BackToBase[GP_UI] - GP_Back[GP_UI])
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_BackToBase[GP_UI] Equal to 0
Then - Actions
Set GP_BackToBase[GP_UI] = GP_Back[GP_UI]
Custom script: call IssuePointOrderById(udg_GP_U[udg_GP_UI], 851983, udg_GP_X[udg_GP_UI], udg_GP_Y[udg_GP_UI])
Else - Actions
Custom script: endif
Else - Actions
Unit Group - Remove GP_U[GP_UI] from GP_GuardingGroup
Set GP_Index = (GP_Index - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Index Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
[/trigger]
[trigger]
Guard Post Remove
Events
Conditions
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(GP_GuardingUnit is in GP_GuardingGroup) Equal to True
Then - Actions
Unit Group - Remove GP_GuardingUnit from GP_GuardingGroup
Set GP_Index = (GP_Index - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
GP_Index Equal to 0
Then - Actions
Game - Display to (All players) the text: adasdadadOFF
Trigger - Turn off Guard Post Movements <gen>
Else - Actions
Else - Actions
Game - Display to (All players) the text: (Guard Post Error: + ((Name of GP_GuardingUnit) + is not recognized to be removed from system.))
[/trigger]
[/tab]
[tab=Credits]
Bribe for his [thread=197329]UnitIndexer[/thread]
[/tab]
[tab=Bugs]
-
[/tab]
[tab=Changelogs]
v 1.3
- All jass codes are converted to GUI
- Simple constant guarding of location is applied
[/tab]
[/tabs]
//TESH.scrollpos=36
//TESH.alwaysfold=0
library MoveSpeedXGUI /* v1.1.0.0
*************************************************************************************
*
* This library allows you to set unit movement speeds beyond 522 without bugs.
* This is an extension of the library MoveSpeedX, but is formatted for GUI use.
* Credits to Jesus4Lyf for the original system.
*
************************************************************************************
*
* SETTINGS
*/
globals
private constant real PERIOD = 0.03125
// This is the period on which all units will be run.
// If you lower this value, movement bonuses will be smoother,
// but will require more processing power (lag more).
// Also, the lower this is, the higher the move speed can be
// before it starts bugging on waypoints. The lowest valid
// period is 0.00125. A period of 0.00625 is very robust.
private constant real MARGIN = 0.01
// This is the margin of approximation when comparing reals.
// You will most likely not need to change this.
endglobals
/*
************************************************************************************
*
* Functions
*
* function GetUnitMoveSpeedX takes unit whichUnit returns real
* - Returns a unit movement speed. The GUI function will
* - not return the correct value. This function will always
* - return the correct value regardless of whether the unit
* - has a movement speed beyond 522.
*
************************************************************************************
*
* REQUIREMENTS
*
* 1. JassNewGen Pack v5d
* 2. JassHelper 0.A.2.B
* 3. Any unit indexer
*
* HOW TO IMPLEMENT
*
* 1. Copy the 'folder' MoveSpeedX.
* 2. Paste it into your map.
* 3. Open "Advanced -> Gameplay Constants".
* 4. Checkmark "Use Custom Gameplay Constants".
* 5. Find the field, "Movement - Unit Speed - Maximum", change
* that to 522.
* 6. Find the field, "Movement - Unit Speed - Minimum", hold
* shift and click, and change it to 0.
* 7. Read HOW TO USE.
*
************************************************************************************
*
* HOW TO USE
*
* This system will automatically work by itself. You can use the
* normal GUI function for modifying unit movement speeds. Simply
* use "Unit - Set Movement Speed", input whatever value you want,
* and you are good to go! It will handle values beyond 522 by itself.
*
* HOWEVER, the GUI function will not return correct values if a unit
* has a movement speed greater than 522. To fix this, use the function
* GetUnitMoveSpeedX to return the correct value. A sample is given in
* the trigger "Speed Change" in the test map.
*
************************************************************************************
*
* NOTES
*
* Units that were issued orders as groups might not *always* end up in the proper
* "order". (they might not end up in an organized formation) They do sometimes though.
* This is only for units with speeds above 522.
*
* This also will not factor in bonuses and probably not slows either.
*
* Units may waddle around the point for a little bit. Reduce PERIOD to fix
* it a little bit. I recommend about 0.02 if you have really high speeds.
*
************************************************************************************/
private function ApproxEqual takes real A, real B returns boolean
return (A >= (B - MARGIN)) and (A <= (B + MARGIN))
endfunction
private module M
private static trigger issued = CreateTrigger()
thistype next
thistype prev
boolean enabled
unit curr
real speed
real x
real y
real ox
real oy
method destroy takes nothing returns nothing
set this.next.prev = this.prev
set this.prev.next = this.next
set this.enabled = false
endmethod
private static method periodic takes nothing returns nothing
local thistype this = thistype(0).next // first instance in list
local real nx // the x-coordinate after tick
local real ny // the y-coordinate after tick
local real dx // distance between new-x and old-x
local real dy // distance between new-y and old-y
local real d // distance between new point and old point
local integer order // the unit's current order
local unit u // unit being affected
loop
exitwhen this == 0
set u = .curr
set nx = GetUnitX(u)
set ny = GetUnitY(u)
if IsUnitType(u, UNIT_TYPE_DEAD) then
call this.destroy()
elseif not ApproxEqual(nx, .x) or not ApproxEqual(ny, .y) then
if (not IsUnitPaused(u)) and GetUnitAbilityLevel(u, 'BSTN') == 0 and GetUnitAbilityLevel(u, 'BPSE') == 0 then
set order = GetUnitCurrentOrder(u)
set dx = nx - .x
set dy = ny - .y
set d = SquareRoot(dx * dx + dy * dy)
set dx = dx / d * .speed // move the unit offset-x by this
set dy = dy / d * .speed // move the unit offset-y by this
if (order == 851986 or order == 851971) and /*
*/ (this.ox - nx)*(this.ox - nx) < (dx*dx) and /*
*/ (this.oy - ny)*(this.oy - ny) < (dy*dy) then
// if the unit is issued a move or smart order and they are near their destination
// then move them there instantly (removes a bit of glitchyness towards the end)
call SetUnitX(u, .ox)
call SetUnitY(u, .oy)
set .x = .ox
set .y = .oy
call IssueImmediateOrderById(u, 851972) // order them to stop
else
set .x = nx + dx
set .y = ny + dy
call SetUnitX(u, .x)
call SetUnitY(u, .y)
endif
endif
endif
set this = this.next
endloop
set u = null
endmethod
static method create takes unit whichUnit, real newSpeed returns thistype
local thistype this = GetUnitUserData(whichUnit)
set this.next = thistype(0).next
set thistype(0).next.prev = this
set thistype(0).next = this
set this.prev = 0
set this.curr = whichUnit
set this.speed = (newSpeed - 522) * PERIOD
set this.x = GetUnitX(whichUnit)
set this.y = GetUnitY(whichUnit)
set this.enabled = true
return this
endmethod
static method update takes unit whichUnit, real newSpeed returns nothing
local thistype this = GetUnitUserData(whichUnit)
if this.enabled then
if newSpeed > 522 then
set this.speed = (newSpeed - 522) * PERIOD
else
call this.destroy()
endif
elseif newSpeed > 522 then
call thistype.create(whichUnit, newSpeed)
endif
endmethod
private static method storeOrderPoint takes nothing returns boolean
local thistype this = GetUnitUserData(GetTriggerUnit())
set this.ox = GetOrderPointX()
set this.oy = GetOrderPointY()
return false
endmethod
private static method onInit takes nothing returns nothing
call TimerStart(CreateTimer(), PERIOD, true, function thistype.periodic)
call TriggerRegisterAnyUnitEventBJ(issued, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerAddCondition(issued, Condition(function thistype.storeOrderPoint))
endmethod
endmodule
private struct MoveSpeedStruct extends array
implement M
endstruct
function GetUnitMoveSpeedX takes unit whichUnit returns real
if MoveSpeedStruct(GetUnitUserData(whichUnit)).enabled then
return udg_UnitSpeedX[GetUnitUserData(whichUnit)]
endif
return GetUnitMoveSpeed(whichUnit)
endfunction
function SetUnitMoveSpeedX takes unit whichUnit, real newSpeed returns nothing
call MoveSpeedStruct.update(whichUnit, newSpeed)
set udg_UnitSpeedX[GetUnitUserData(whichUnit)] = newSpeed
endfunction
hook SetUnitMoveSpeed SetUnitMoveSpeedX
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library xebasic
//**************************************************************************
//
// xebasic 0.4
// =======
// XE_DUMMY_UNITID : Rawcode of the dummy unit in your map. It should
// use the dummy.mdx model, so remember to import it as
// well, just use copy&paste to copy the dummy from the
// xe map to yours, then change the rawcode.
//
// XE_HEIGHT_ENABLER: Medivh's raven form ability, you may need to change
// this rawcode to another spell that morphs into a flier
// in case you modified medivh's spell in your map.
//
// XE_TREE_RECOGNITION: The ancients' Eat tree ability, same as with medivh
// raven form, you might have to change it.
//
// XE_ANIMATION_PERIOD: The global period of animation used by whatever
// timer that depends on it, if you put a low value
// the movement will look good but it may hurt your
// performance, if instead you use a high value it
// will not lag but will be fast.
//
// XE_MAX_COLLISION_SIZE: The maximum unit collision size in your map, if
// you got a unit bigger than 197.0 it would be
// a good idea to update this constant, since some
// enums will not find it. Likewise, if none of
// your units can go bellow X and X is much smaller
// than 197.0, it would be a good idea to update
// as well, since it will improve the performance
// those enums.
//
// Notice you probably don't have to update this library, unless I specify
// there are new constants which would be unlikely.
//
//**************************************************************************
//===========================================================================
globals
constant integer XE_DUMMY_UNITID = 'e009'
constant integer XE_HEIGHT_ENABLER = 'Amrf'
constant integer XE_TREE_RECOGNITION = 'Aeat'
constant real XE_ANIMATION_PERIOD = 0.025
constant real XE_MAX_COLLISION_SIZE = 197.0
endglobals
endlibrary
//TESH.scrollpos=3
//TESH.alwaysfold=0
library xepreload initializer init requires xebasic, optional TimerUtils
//******************************************************************************
// xepreload 0.8
// ---------
// Ah, the joy of preloading abilities, it is such a necessary evil...
// Notice you are not supposed to use this system in places outside map init
//
// This one does the preloading and tries to minimize the hit on loading time
// for example, it only needs one single native call per ability preloaded.
//
//******************************************************************************
//==============================================================================
globals
private unit dum=null
endglobals
private keyword DebugIdInteger2IdString
//inline friendly (when debug mode is off..)
function XE_PreloadAbility takes integer abilid returns nothing
call UnitAddAbility(dum, abilid)
static if DEBUG_MODE then
if(dum==null) then
call BJDebugMsg("XE_PreloadAbility: do not load abilities after map init or during structs' onInit")
elseif GetUnitAbilityLevel(dum, abilid) == 0 then
call BJDebugMsg("XE_PreloadAbility: Ability "+DebugIdInteger2IdString.evaluate(abilid)+" does not exist.")
endif
endif
endfunction
// ................................................................................
//================================================================================
// Convert a integer id value into a 4-letter id code.
// * Taken from cheats.j so I don't have to code it again.
// * Used only on debug so making a whole library for it seemed silly
// * Private so people don't begin using xepreload just to call this function....
// * It will not work correctly if you paste this code in the custom script section
// due to the infamous % bug. Then again, if you do that then you probably
// deserve it....
//
private function DebugIdInteger2IdString takes integer value returns string
local string charMap = ".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~................................................................................................................................."
local string result = ""
local integer remainingValue = value
local integer charValue
local integer byteno
set byteno = 0
loop
set charValue = ModuloInteger(remainingValue, 256)
set remainingValue = remainingValue / 256
set result = SubString(charMap, charValue, charValue + 1) + result
set byteno = byteno + 1
exitwhen byteno == 4
endloop
return result
endfunction
//--------------------------------
private function kill takes nothing returns nothing
call RemoveUnit(dum)
set dum=null
static if (LIBRARY_TimerUtils ) then
call ReleaseTimer( GetExpiredTimer() )
else
call DestroyTimer(GetExpiredTimer())
endif
endfunction
private function init takes nothing returns nothing
local timer t
set dum = CreateUnit( Player(15), XE_DUMMY_UNITID, 0,0,0)
if( dum == null) then
debug call BJDebugMsg("xePreload : XE_DUMMY_UNITID ("+DebugIdInteger2IdString.evaluate(XE_DUMMY_UNITID)+") not added correctly to the map.")
endif
static if (LIBRARY_TimerUtils) then
set t=NewTimer()
else
set t=CreateTimer()
endif
call TimerStart(t,0.0,false,function kill)
set t=null
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library xefx initializer init requires xebasic
//**************************************************
// xefx 0.7
// --------
// Recommended: ARGB (adds ARGBrecolor method)
// For your movable fx needs
//
//**************************************************
//==================================================
globals
private constant integer MAX_INSTANCES = 8190 //change accordingly.
private constant real RECYCLE_DELAY = 4.0
//recycling, in order to show the effect correctly, must wait some time before
//removing the unit.
private timer recycler
private timer NOW
endglobals
private struct recyclebin extends array
unit u
real schedule
static recyclebin end=0
static recyclebin begin=0
static method Recycle takes nothing returns nothing
call RemoveUnit(.begin.u) //this unit is private, systems shouldn't mess with it.
set .begin.u=null
set .begin=recyclebin(integer(.begin)+1)
if(.begin==.end) then
set .begin=0
set .end=0
else
call TimerStart(recycler, .begin.schedule-TimerGetElapsed(NOW), false, function recyclebin.Recycle)
endif
endmethod
endstruct
private function init takes nothing returns nothing
set recycler=CreateTimer()
set NOW=CreateTimer()
call TimerStart(NOW,43200,true,null)
endfunction
struct xefx[MAX_INSTANCES]
public integer tag=0
private unit dummy
private effect fx=null
private real zang=0.0
private integer r=255
private integer g=255
private integer b=255
private integer a=255
private integer abil=0
static method create takes real x, real y, real facing returns xefx
local xefx this=xefx.allocate()
set this.dummy= CreateUnit(Player(15), XE_DUMMY_UNITID, x,y, facing*bj_RADTODEG)
call UnitAddAbility(this.dummy,XE_HEIGHT_ENABLER)
call UnitAddAbility(this.dummy,'Aloc')
call UnitRemoveAbility(this.dummy,XE_HEIGHT_ENABLER)
call SetUnitX(this.dummy,x)
call SetUnitY(this.dummy,y)
return this
endmethod
method operator owner takes nothing returns player
return GetOwningPlayer(this.dummy)
endmethod
method operator owner= takes player p returns nothing
call SetUnitOwner(this.dummy,p,false)
endmethod
method operator teamcolor= takes playercolor c returns nothing
call SetUnitColor(this.dummy,c)
endmethod
method operator scale= takes real value returns nothing
call SetUnitScale(this.dummy,value,value,value)
endmethod
//! textmacro XEFX_colorstuff takes colorname, colorvar
method operator $colorname$ takes nothing returns integer
return this.$colorvar$
endmethod
method operator $colorname$= takes integer value returns nothing
set this.$colorvar$=value
call SetUnitVertexColor(this.dummy,this.r,this.g,this.b,this.a)
endmethod
//! endtextmacro
//! runtextmacro XEFX_colorstuff("red","r")
//! runtextmacro XEFX_colorstuff("green","g")
//! runtextmacro XEFX_colorstuff("blue","b")
//! runtextmacro XEFX_colorstuff("alpha","a")
method recolor takes integer r, integer g , integer b, integer a returns nothing
set this.r=r
set this.g=g
set this.b=b
set this.a=a
call SetUnitVertexColor(this.dummy,this.r,this.g,this.b,this.a)
endmethod
implement optional ARGBrecolor
method operator abilityid takes nothing returns integer
return this.abil
endmethod
method operator abilityid= takes integer a returns nothing
if(this.abil!=0) then
call UnitRemoveAbility(this.dummy,this.abil)
endif
if(a!=0) then
call UnitAddAbility(this.dummy,a)
endif
set this.abil=a
endmethod
method operator abilityLevel takes nothing returns integer
return GetUnitAbilityLevel( this.dummy, this.abil)
endmethod
method operator abilityLevel= takes integer newLevel returns nothing
call SetUnitAbilityLevel(this.dummy, this.abil, newLevel)
endmethod
method flash takes string fx returns nothing
call DestroyEffect(AddSpecialEffectTarget(fx,this.dummy,"origin"))
endmethod
method operator xyangle takes nothing returns real
return GetUnitFacing(this.dummy)*bj_DEGTORAD
endmethod
method operator xyangle= takes real value returns nothing
call SetUnitFacing(this.dummy,value*bj_RADTODEG)
endmethod
method operator zangle takes nothing returns real
return this.zang
endmethod
method operator zangle= takes real value returns nothing
local integer i=R2I(value*bj_RADTODEG+90.5)
set this.zang=value
if(i>=180) then
set i=179
elseif(i<0) then
set i=0
endif
call SetUnitAnimationByIndex(this.dummy, i )
endmethod
method operator x takes nothing returns real
return GetUnitX(this.dummy)
endmethod
method operator y takes nothing returns real
return GetUnitY(this.dummy)
endmethod
method operator z takes nothing returns real
return GetUnitFlyHeight(this.dummy)
endmethod
method operator z= takes real value returns nothing
call SetUnitFlyHeight(this.dummy,value,0)
endmethod
method operator x= takes real value returns nothing
call SetUnitX(this.dummy,value)
endmethod
method operator y= takes real value returns nothing
call SetUnitY(this.dummy,value)
endmethod
method operator fxpath= takes string newpath returns nothing
if (this.fx!=null) then
call DestroyEffect(this.fx)
endif
if (newpath=="") then
set this.fx=null
else
set this.fx=AddSpecialEffectTarget(newpath,this.dummy,"origin")
endif
endmethod
method hiddenReset takes string newfxpath, real newfacing returns nothing
local real x = GetUnitX(this.dummy)
local real y = GetUnitY(this.dummy)
local real z = this.z
local real za = this.zangle
local integer level = this.abilityLevel
set fxpath=null
call RemoveUnit(this.dummy)
set this.dummy= CreateUnit(Player(15), XE_DUMMY_UNITID, x,y, newfacing*bj_RADTODEG)
if(level != 0) then
call UnitAddAbility(this.dummy, abilityid)
endif
call UnitAddAbility(this.dummy,XE_HEIGHT_ENABLER)
call UnitAddAbility(this.dummy,'Aloc')
call UnitRemoveAbility(this.dummy,XE_HEIGHT_ENABLER)
call SetUnitX(this.dummy,x)
call SetUnitY(this.dummy,y)
set this.z = z
set zangle = za
endmethod
private method onDestroy takes nothing returns nothing
if(this.abil!=0) then
call UnitRemoveAbility(this.dummy,this.abil)
endif
if(this.fx!=null) then
call DestroyEffect(this.fx)
set this.fx=null
endif
if (recyclebin.end==MAX_INSTANCES) then
//I'd like to see this happen...
call TimerStart(recycler,0,false,function recyclebin.Recycle)
call ExplodeUnitBJ(this.dummy)
else
set recyclebin.end.u=this.dummy
set recyclebin.end.schedule=TimerGetElapsed(NOW)+RECYCLE_DELAY
set recyclebin.end= recyclebin( integer(recyclebin.end)+1)
if( recyclebin.end==1) then
call TimerStart(recycler, RECYCLE_DELAY, false, function recyclebin.Recycle)
endif
call SetUnitOwner(this.dummy,Player(15),false)
endif
set this.dummy=null
endmethod
method hiddenDestroy takes nothing returns nothing
call ShowUnit(dummy,false)
call destroy()
endmethod
endstruct
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library xecollider initializer init requires xefx, xebasic
//****************************************************************
//*
//* xecollider 0.8
//* --------------
//* A xecollider object is a special effect that has a collision
//* size that can trigger a hit event and also many options to
//* configure its automatic movement.
//*
//* Please use .terminate() instead of .destroy() this ensures
//* that it will be safe to destroy it (else you would have to
//* worry about destroying it during the animation loop/etc.)
//*
//* To use this struct is a little different than the other
//* current parts of xe. Instead of just creating the xecollider
//* (which works, but it would only be a xefx that can have speed)
//* you probably need to make it do something special on the
//* unit hit event... For this reason, you need to make a new
//* struct extending xecollider that declares an onUnitHit method
//* you may also declare a loopControl method, very useful, can
//* help you reduce 'attaching'.
//*
//****************************************************************
//================================================================
globals
private constant real DEFAULT_COLLISION_SIZE = 50.0 // These are defaults, on one hand you can change them
private constant real DEFAULT_MAX_SPEED = 1500.0 // on the other hand, if a spell relies on the defaults
private constant real DEFAULT_EXPIRATION_TIME = 100. // changing them would make the behavior vary...
private constant real PI2 = 6.28318 //It might not be wise to change this
endglobals
//===========================================================================
// So, this exists merely so you can declare your own event handler methods
// if interfaces make your brain blow out, please skip the next four lines.
//
private interface eventHandler
method onUnitHit takes unit hitTarget returns nothing defaults nothing
method loopControl takes nothing returns nothing defaults nothing
endinterface
//===========================================================================
struct xecollider extends eventHandler
// use terminate() instead of .destroy() to "kill" the collider.
// don't worry, terminate will call destroy automatically.
//============================================================================
// delegates:
// We are delegating a xefx object so that people call all the xefx methods
// and member from a xecollider object. This means that from a user
// perspective a xecollider is also an instance of xefx.
//
// Notable ones are: .x , .y , .fxpath and .z ,
// check out xefx's documentation for more info.
//
private delegate xefx fx
//##==========================================================================
// public variables:
//
public real expirationTime = DEFAULT_EXPIRATION_TIME
// Movement speed for the missile.
public real speed = 0.0
// Speed added per second (notice you can use a negative value here)
public real acceleration = 0.0
// If there is acceleration, it is wise to have a cap...
public real maxSpeed = DEFAULT_MAX_SPEED
public real minSpeed = 0.0
public real angleSpeed = 0.0 //The increment in radians per second to the
// direction angle, allows curved movement.
private static integer lastSeen = 0
private group seen
private boolean silent = false
//##==========================================================================
// public methods:
//
//----
// Well, it is a good idea to actually create the missiles.
// notice that if your custom missile struct needs to declare its own create
// method, you can call this as allocate(x,y,dir).
//
// Sorry, no Loc version.
//
public static method create takes real x, real y, real dir returns xecollider
local xecollider xc= xecollider.allocate()
set xc.fx = xefx.create(x,y,dir)
set xc.dir=dir
set xecollider.V[xecollider.N]=xc
set xecollider.N=xecollider.N+1
if(xecollider.N==1) then
call TimerStart(xecollider.T, XE_ANIMATION_PERIOD, true, xecollider.timerLoopFunction )
endif
if(.lastSeen < integer(xc)) then //with this I do group recycling
set .lastSeen = integer(xc)
set xc.seen = CreateGroup()
endif
return xc
endmethod
//----
// The direction is just the angle in radians to which the missile's model faces
// and the automatic movement uses.
//
method operator direction takes nothing returns real
return this.dir
endmethod
method operator direction= takes real v returns nothing
set this.dir=v
set this.fx.xyangle=v
endmethod
//----
// The collisionSize
//
method operator collisionSize takes nothing returns real
return this.csize
endmethod
method operator collisionSize= takes real value returns nothing
set this.csize = value
//good long attribute name, but we use csize in the loop
//don't worry this gets inlined, it would also be helpful if
//I ever decide to add a control for assignment.
endmethod
//---
// targetUnit is a unit to follow (or try to follow), notice that homing
// options require an angleSpeed different to 0.0
//
public method operator targetUnit takes nothing returns unit
return this.homingTargetUnit
endmethod
public method operator targetUnit= takes unit u returns nothing
if(u==null) then
set this.angleMode= ANGLE_NO_MOVEMENT
else
set this.angleMode= ANGLE_HOMING_UNIT
endif
set this.homingTargetUnit=u
endmethod
//----
// targetPoint is a point to reach (or try to reach), notice that homing
// options require an angleSpeed different to 0.0
//
public method setTargetPoint takes real x, real y returns nothing
set this.angleMode= ANGLE_HOMING_POINT
set this.homingTargetX=x
set this.homingTargetY=y
endmethod
public method setTargetPointLoc takes location loc returns nothing
set this.angleMode= ANGLE_HOMING_POINT
set this.homingTargetX=GetLocationX(loc)
set this.homingTargetY=GetLocationY(loc)
endmethod
public method operator targetPointX takes nothing returns real
return this.homingTargetX
endmethod
public method operator targetPointY takes nothing returns real
return this.homingTargetY
endmethod
//----
// Call this in case you used targetUnit or TargetPoint so the missile
// forgets the order to home that target.
//
public method forgetTarget takes nothing returns nothing
set this.angleMode = ANGLE_NO_MOVEMENT
endmethod
public method operator rotating takes nothing returns boolean
return (angleMode ==ANGLE_ROTATING)
endmethod
public method operator rotating= takes boolean val returns nothing
if(val) then
set angleMode = ANGLE_ROTATING
elseif (angleMode == ANGLE_ROTATING) then
set angleMode = ANGLE_NO_MOVEMENT
endif
endmethod
method terminate takes nothing returns nothing
set this.dead=true
set this.fxpath=""
endmethod
/* declare hiddenDestroy so people don't call directly on the delegate xefx */
method hiddenDestroy takes nothing returns nothing
set silent = true
call terminate()
endmethod
//--------
private static timer T
private static integer N=0
private static xecollider array V
private static code timerLoopFunction //I use a code var so create can be above the timerloop function, more readable
private boolean dead=false
private real csize = DEFAULT_COLLISION_SIZE
private real dir
private static constant integer ANGLE_HOMING_UNIT =1
private static constant integer ANGLE_HOMING_POINT=2
private static constant integer ANGLE_NO_MOVEMENT=0
private static constant integer ANGLE_ROTATING=3
private integer angleMode =0
private unit homingTargetUnit = null
private real homingTargetX
private real homingTargetY
private method onDestroy takes nothing returns nothing
call GroupClear(this.seen)
if(this.silent) then
call this.fx.hiddenDestroy()
else
call this.fx.destroy()
endif
endmethod
private static xecollider cinstance
private static real newx
private static real newy
private static group enumGroup
private static boolexpr enumBoolexpr
private static unit array picked
private static integer pickedN
static method timerLoop takes nothing returns nothing
local integer i=0
local integer j=0
local integer c=0
local xecollider this
local real d
local real ns
local real wa
local real df1
local real df2
local unit u
loop
exitwhen (i== xecollider.N )
set this=.V[i] //adopt-a-instance
set this.expirationTime = this.expirationTime - XE_ANIMATION_PERIOD
if(.dead or (this.expirationTime <=0.0) ) then
call this.destroy()
else
set ns=this.angleSpeed*XE_ANIMATION_PERIOD
if (ns!=0.0) then
if(this.angleMode== ANGLE_HOMING_UNIT ) then
set u=this.homingTargetUnit
if ( (GetUnitTypeId(u)==0) or IsUnitType(u, UNIT_TYPE_DEAD) ) then
set this.angleMode= ANGLE_NO_MOVEMENT
set this.homingTargetUnit = null
else
set this.homingTargetX=GetUnitX(u)
set this.homingTargetY=GetUnitY(u)
endif
set u=null
endif
if (this.angleMode == ANGLE_ROTATING) then
//nothing (ns is already ns)
elseif( this.angleMode != ANGLE_NO_MOVEMENT) then
if(ns<=0) then
set ns=-ns
endif
set wa=Atan2(this.homingTargetY - this.y , this.homingTargetX-this.x)
//if(wa<0.0) then
// set wa=wa+PI2
//endif
set df1=wa-this.dir
set df2=(PI2+wa)-this.dir
if (df1<=0) then
if(df2<=0) then
if(df2>=df1) then
set df1=df2
endif
else
if(-df1>=df2) then
set df1=df2
endif
endif
else
if(df2<=0) then
if(-df2<=df1) then
set df1=df2
endif
else
if(df2<=df1) then
set df1=df2
endif
endif
endif
if(df1<=0) then
if(-df1>=ns) then
set ns=-ns
else
set ns=df1
endif
else
if(df1<=ns) then
set ns=df1
endif
endif
else
set ns = 0
endif
set d=this.dir
set d = d + ns
if(d>=PI2) then
set d=d - PI2
elseif(d<0) then
set d=d + PI2
endif
set this.dir = d
set this.xyangle = d
endif
// function calls are expensive, damned we are, long code inside of loop
// correct software dev. tells us this should go to another function,
// but this is Jass, not real life.
set .cinstance = this
set ns = this.speed + this.acceleration*XE_ANIMATION_PERIOD
if ( ns<this.minSpeed) then
set ns=this.minSpeed
elseif (ns>this.maxSpeed) then
set ns=this.maxSpeed
endif
set d=((this.speed+ns)/2) * XE_ANIMATION_PERIOD
set this.speed=ns
set .newx= .x+d*Cos(this.dir)
set .newy= .y+d*Sin(this.dir)
set .x=.newx
set .y=.newy
set xecollider.pickedN = 0
call GroupEnumUnitsInRange( .enumGroup, .newx, .newy, .csize + XE_MAX_COLLISION_SIZE, .enumBoolexpr)
call GroupClear(this.seen)
set j=0
loop
exitwhen (j==xecollider.pickedN)
call GroupAddUnit( this.seen, xecollider.picked[j])
set j=j+1
endloop
set .V[c]=this
set c=c+1
if( this.loopControl.exists and not this.dead ) then
call this.loopControl()
endif
endif
set i=i+1
endloop
//call BJDebugMsg("}")
set xecollider.N=c
if(c==0) then
call PauseTimer(xecollider.T)
endif
endmethod
private static method inRangeEnum takes nothing returns boolean
local xecollider this= .cinstance //adopt-a-instance
local unit u=GetFilterUnit()
if not IsUnitType(u, UNIT_TYPE_DEAD) and not(this.dead) and (GetUnitTypeId(u)!=XE_DUMMY_UNITID) and IsUnitInRangeXY(u, .newx, .newy, .csize) then
// ah, the advantages of a standardized unit id...
set xecollider.picked[xecollider.pickedN] = u
set xecollider.pickedN=xecollider.pickedN + 1
if not IsUnitInGroup (u, this.seen ) then
call this.onUnitHit(u)
endif
endif
set u=null
return false
endmethod
//============================================================================
// you aren't supposed to call doInit yourself, try not to do it.
//
static method doInit takes nothing returns nothing
set xecollider.enumGroup = CreateGroup()
set xecollider.enumBoolexpr = Condition( function xecollider.inRangeEnum)
set xecollider.timerLoopFunction = (function xecollider.timerLoop)
set xecollider.T=CreateTimer()
endmethod
endstruct
private function init takes nothing returns nothing
call xecollider.doInit()
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library GroupUtils initializer Init requires optional xebasic
//******************************************************************************
//* BY: Rising_Dusk
//*
//* This library is a combination of several features relevant to groups. First
//* and foremost, it contains a group stack that you can access dynamic groups
//* from. It also provides means to refresh groups and clear any shadow
//* references within them. The included boolexprs are there for backwards
//* compatibility with maps that happen to use them. Since the 1.24c patch,
//* null boolexprs used in GroupEnumUnits* calls no longer leak, so there is no
//* performance gain to using the BOOLEXPR_TRUE constant.
//*
//* Instead of creating/destroying groups, we have moved on to recycling them.
//* NewGroup pulls a group from the stack and ReleaseGroup adds it back. Always
//* remember to call ReleaseGroup on a group when you are done using it. If you
//* fail to do so enough times, the stack will overflow and no longer work.
//*
//* GroupRefresh cleans a group of any shadow references which may be clogging
//* its hashtable. If you remove a unit from the game who is a member of a unit
//* group, it will 'effectively' remove the unit from the group, but leave a
//* shadow in its place. Calling GroupRefresh on a group will clean up any
//* shadow references that may exist within it. It is only worth doing this on
//* groups that you plan to have around for awhile.
//*
//* Constants that can be used from the library:
//* [group] ENUM_GROUP As you might expect, this group is good for
//* when you need a group just for enumeration.
//* [boolexpr] BOOLEXPR_TRUE This is a true boolexpr, which is important
//* because a 'null' boolexpr in enumeration
//* calls results in a leak. Use this instead.
//* [boolexpr] BOOLEXPR_FALSE This exists mostly for completeness.
//*
//* This library also includes a simple implementation of a group enumeration
//* call that factors collision of units in a given area of effect. This is
//* particularly useful because GroupEnumUnitsInRange doesn't factor collision.
//*
//* In your map, you can just replace all instances of GroupEnumUnitsInRange
//* with GroupEnumUnitsInArea with identical arguments and your spells will
//* consider all units colliding with the area of effect. After calling this
//* function as you would normally call GroupEnumUnitsInRange, you are free to
//* do anything with the group that you would normally do.
//*
//* If you don't use xebasic in your map, you may edit the MAX_COLLISION_SIZE
//* variable below and the library will use that as the added radius to check.
//* If you use xebasic, however, the script will automatically use xe's
//* collision size variable.
//*
//* You are also able to use GroupUnitsInArea. This function returns all units
//* within the area, no matter what they are, which can be convenient for those
//* instances where you actually want that.
//*
//* Example usage:
//* local group MyGroup = NewGroup()
//* call GroupRefresh(MyGroup)
//* call ReleaseGroup(MyGroup)
//* call GroupEnumUnitsInArea(ENUM_GROUP, x, y, 350., BOOLEXPR_TRUE)
//* call GroupUnitsInArea(ENUM_GROUP, x, y, 350.)
//*
globals
//If you don't have xebasic in your map, this value will be used instead.
//This value corresponds to the max collision size of a unit in your map.
private constant real MAX_COLLISION_SIZE = 197.
//If you are insane and don't care about any of the protection involved in
//this library, but want this script to be really fast, set this to true.
private constant boolean LESS_SAFETY = false
endglobals
globals
//* Constants that are available to the user
group ENUM_GROUP = CreateGroup()
boolexpr BOOLEXPR_TRUE = null
boolexpr BOOLEXPR_FALSE = null
endglobals
globals
//* Hashtable for debug purposes
private hashtable ht = InitHashtable()
//* Temporary references for GroupRefresh
private boolean Flag = false
private group Refr = null
//* Arrays and counter for the group stack
private group array Groups
private integer Count = 0
//* Variables for use with the GroupUnitsInArea function
private real X = 0.
private real Y = 0.
private real R = 0.
private hashtable H = InitHashtable()
endglobals
private function HookDestroyGroup takes group g returns nothing
if g == ENUM_GROUP then
call BJDebugMsg(SCOPE_PREFIX+"Warning: ENUM_GROUP destroyed")
endif
endfunction
debug hook DestroyGroup HookDestroyGroup
private function AddEx takes nothing returns nothing
if Flag then
call GroupClear(Refr)
set Flag = false
endif
call GroupAddUnit(Refr, GetEnumUnit())
endfunction
function GroupRefresh takes group g returns nothing
set Flag = true
set Refr = g
call ForGroup(Refr, function AddEx)
if Flag then
call GroupClear(g)
endif
endfunction
function NewGroup takes nothing returns group
if Count == 0 then
set Groups[0] = CreateGroup()
else
set Count = Count - 1
endif
static if not LESS_SAFETY then
call SaveInteger(ht, 0, GetHandleId(Groups[Count]), 1)
endif
return Groups[Count]
endfunction
function ReleaseGroup takes group g returns boolean
local integer id = GetHandleId(g)
static if LESS_SAFETY then
if g == null then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Null groups cannot be released")
return false
elseif Count == 8191 then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Max groups achieved, destroying group")
call DestroyGroup(g)
return false
endif
else
if g == null then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Null groups cannot be released")
return false
elseif not HaveSavedInteger(ht, 0, id) then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Group not part of stack")
return false
elseif LoadInteger(ht, 0, id) == 2 then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Groups cannot be multiply released")
return false
elseif Count == 8191 then
debug call BJDebugMsg(SCOPE_PREFIX+"Error: Max groups achieved, destroying group")
call DestroyGroup(g)
return false
endif
call SaveInteger(ht, 0, id, 2)
endif
call GroupClear(g)
set Groups[Count] = g
set Count = Count + 1
return true
endfunction
private function Filter takes nothing returns boolean
return IsUnitInRangeXY(GetFilterUnit(), X, Y, R)
endfunction
private function HookDestroyBoolExpr takes boolexpr b returns nothing
local integer bid = GetHandleId(b)
if HaveSavedHandle(H, 0, bid) then
//Clear the saved boolexpr
call DestroyBoolExpr(LoadBooleanExprHandle(H, 0, bid))
call RemoveSavedHandle(H, 0, bid)
endif
endfunction
hook DestroyBoolExpr HookDestroyBoolExpr
private constant function GetRadius takes real radius returns real
static if LIBRARY_xebasic then
return radius+XE_MAX_COLLISION_SIZE
else
return radius+MAX_COLLISION_SIZE
endif
endfunction
function GroupEnumUnitsInArea takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
local real prevX = X
local real prevY = Y
local real prevR = R
local integer bid = 0
//Set variables to new values
set X = x
set Y = y
set R = radius
if filter == null then
//Adjusts for null boolexprs passed to the function
set filter = Condition(function Filter)
else
//Check for a saved boolexpr
set bid = GetHandleId(filter)
if HaveSavedHandle(H, 0, bid) then
//Set the filter to use to the saved one
set filter = LoadBooleanExprHandle(H, 0, bid)
else
//Create a new And() boolexpr for this filter
set filter = And(Condition(function Filter), filter)
call SaveBooleanExprHandle(H, 0, bid, filter)
endif
endif
//Enumerate, if they want to use the boolexpr, this lets them
call GroupEnumUnitsInRange(whichGroup, x, y, GetRadius(radius), filter)
//Give back original settings so nested enumerations work
set X = prevX
set Y = prevY
set R = prevR
endfunction
function GroupUnitsInArea takes group whichGroup, real x, real y, real radius returns nothing
local real prevX = X
local real prevY = Y
local real prevR = R
//Set variables to new values
set X = x
set Y = y
set R = radius
//Enumerate
call GroupEnumUnitsInRange(whichGroup, x, y, GetRadius(radius), Condition(function Filter))
//Give back original settings so nested enumerations work
set X = prevX
set Y = prevY
set R = prevR
endfunction
private function True takes nothing returns boolean
return true
endfunction
private function False takes nothing returns boolean
return false
endfunction
private function Init takes nothing returns nothing
set BOOLEXPR_TRUE = Condition(function True)
set BOOLEXPR_FALSE = Condition(function False)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Configurations_Ex_JASS takes nothing returns nothing
// Ending Effect, an Effect created at the End of the KB on the KBed Unit
set udg_KB3D_EndFx = ""
// ------------------------
// AoE End Damage, Damage dealt to enemy units in the AoE at the End of the KB
set udg_KB3D_AoEEndDamage = 0.00
// ------------------------
// AoE KB, if true, KBs Enemy units within the AoE, Range, Speed, Angle, are automatic
set udg_KB3D_AoEKB = false
// ------------------------
// End when Dead, if true, the KB will end if the KBed unit is dead, TRUE by default
set udg_KB3D_EndwhenDead = true
// ------------------------
// KB the Target, When the Targeted Unit is hit, it will be KBed depending on the speed of the original KB
set udg_KB3D_KBTarget = false
// ------------------------
// Stop Time, Maximum Time the KB will last, Note that if the KBed unit is flying at this time, it will be stuck
set udg_KB3D_StopTime = 0.00
// ------------------------
// Kill at Time, When this time is reached, the KBed unit will be killed, if this number is higher than KB3D_StopTime, EndWhenDead will be automatically turned on no matter what
set udg_KB3D_KillatTime = 0.00
// ------------------------
// Acceleration, Speed Added/s to the KB speed
set udg_KB3D_Accel = 0.00
// ------------------------
// Allow going outside playable bounds, Allows the KBed unit to go out of the Playable Bounds, SAFETY notice: this will not crash the game
set udg_KB3D_AllowOutSiding = false
// ------------------------
// Angle, The KB's line angle, this will be useless if KB3D_Targeted_Unit is not null
set udg_KB3D_Angle = 0.00
// ------------------------
// Area of Effect, Range where the Line Damage is applied to units
set udg_KB3D_AoE = 0.00
// ------------------------
// Area of Effect Damage, Makes the KB3D_Damager, damage enemy units within KB3D_AoE by this value as a DPS
set udg_KB3D_AoEDamage = 0.00
// ------------------------
// Attack Type, Attack type of ALL damagings in the Instance
set udg_KB3D_AttackType = ATTACK_TYPE_MELEE
// ------------------------
// Damage Type, Damage type of ALL damagings in the Instance
set udg_KB3D_DamageType = DAMAGE_TYPE_MAGIC
// ------------------------
// Damager, Source of ALL damagings in the Instance
set udg_KB3D_Damager = null
// ------------------------
// Destroy Trees?, Destroy Trees around the KBed unit while he is KBed?
set udg_KB3D_DestroyTree = false
// ------------------------
// Disable Unit?, Disable the KBed Unit's Movement and Turning?
set udg_KB3D_DisableUnit = false
// ------------------------
// End When Hit?, Ends the KB if the KBed Unit hits the Targeted Unit
set udg_KB3D_EndWhenHit = false
// ------------------------
// Face KB Anlge, makes the KBed Unit Face the Anlge of the KB during the KB
set udg_KB3D_FaceAngle = false
// ------------------------
// Effect, Effect created on the Unit's Location if he is not flying, and applied on the Unit if he is flying on the Attach Point
set udg_KB3D_Fx = ""
// ------------------------
// Attachment Point, location on the KBed unit where Effects are attached
set udg_KB3D_Fx_Attach = ""
// ------------------------
// Impact Damage, Damaged dealt to the KBed Unit if he hits an obstacle
set udg_KB3D_ImpactDamage = 0.00
// ------------------------
// Kill When Hit?, Kills the KBed Unit if he hits the Targeted Unit, Automatically set EndWhenHit to true
set udg_KB3D_KillWhenHit = false
// ------------------------
// Kill if Out of Playable Bounds, Kills the KBed Unit if he gets out of Playable Bounds, this automatically sets KB3D_AllowOutSiding to TRUE
set udg_KB3D_KillifOutSider = false
// ------------------------
// Line Damage, Damage dealt to enemy units in the AoE around the KBed Unit
set udg_KB3D_LineDamage = 0.00
// ------------------------
// Loop Damage, DPS dealt to the KBed Unit
set udg_KB3D_LoopDamage = 0.00
// ------------------------
// Max Range, Maximum Range possible of the Knock-Back
set udg_KB3D_Range = 0.00
// ------------------------
// Base KB Speed, Base Speed when starting the Knock-Back
set udg_KB3D_Speed = 0.00
// ------------------------
// Target Damage, Damage dealt to the Targeted Unit when both KBed Unit and Targeted Unit hit each other, only happens once
set udg_KB3D_TargetDamage = 0.00
// ------------------------
// Targeted Unit, if not null, makes the KBed Unit act like a homing missile targeting this unit, it also used for other functions
set udg_KB3D_Targeted_Unit = null
// ------------------------
// Trail Effect, Effect Attached on the KBed Unit all along the Knock-Back and Destroyed at the end of the KB
set udg_KB3D_TrailFx = ""
// ------------------------
// Knock-Backed Unit, the Knock-Backed Unit who all actions orbit around
set udg_KB3D_Unit = null
// ------------------------
// Stop at Unpathable, Makes it impossible for the KBed Unit to path throught Unpathable Terrain
set udg_KB3D_UnpathableStop = true
// ------------------------
// Z Offset, Max Flying Height reached while Knockbacking
set udg_KB3D_Zoffset = 0.00
// ------------------------
// Registed All of the Settings
// Note that this function MUST check conditions of the trigger, or else, nothing will be registered
call ConditionalTriggerExecute( udg_KB3D_Registration )
// You can use the following to know how much the knock-back will last -- this can vary if the KB is homed on a moving unit
set udg_KB3D_Time = udg_KB3D_Time
//This ^ variable lets you know how much approximatively, the KB will last
endfunction
//===========================================================================
function InitTrig_Configurations_Ex_JASS takes nothing returns nothing
local trigger x = CreateTrigger( )
set x = null
endfunction
//TESH.scrollpos=69
//TESH.alwaysfold=0
/////////////////////////////////////////////////////////////////////////////
// //
// Knock-Back 3D v. 1.5.3 [JASS - GUI] //
// by JAD aka DotCa //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// System Informations: //
// //
// The System is a well performing, ultra-purpose knockback (see uses //
// below ) Coded in JASS making it possible for all users to take //
// advantage of it, and GUI friendly to use, see Examples in the triggers //
// above //
// Configurations have default values: //
// //
// - KB3D_EndWhenDead ==> TRUE by default //
// - KB3D_UnpathaableStop ==> TRUE by default //
// - KB3D_AttackType ==> ATTACK_TYPE_NORMAL //
// - KB3D_DamageType ==> DAMAGE_TYPE_MAGIC //
// - Other Booleans are FALSE by default //
// //
// The System also uses Always positive values for some configurations //
// to not make the knockback go worng, those configurations are: //
// //
// "KB3D_Range" - "KB3D_Speed" - "KB3D_ZOffset" - "KB3D_AoE" //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// System Requirements: Basic WE - (NONE) //
// //
// The System uses implemented CheckWalkability System by PurgeandFire //
// You "can" remove the initialization trigger of PnF's System since //
// it is directly implemented in the System, all will work fine with or //
// without removing your Initializer trigger //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// Credits: //
// //
// *WEHZ & TS Helpers Group for helping in Script Fixes //
// *Barry the Moose for helping in main codes and fixes //
// *PurgeandFire for his CheckWalkability System //
// *Vexorian / Nestharus for the GetCollision function //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// How to Import? //
// //
// 1. Check that Create Unknown Variables is ticked in your WE Settings //
// 2. Copy the Paste this Trigger //
// 3. Congratulations, the System is now implemented in your map //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// How to Use? //
// //
// 1. There are 5 Examples of use in the KB3D Example Folder //
// 2. Documentations are there in each of the 5 examples to help you //
// 3. The KB3D System is an Ultra-Purpose System where you can use it for://
// -Projectiles, the system supports homing so a projectile is easy //
// -Jump, the System's smoothness in the fly is useful for a jump spell//
// -And of course, a 2D Knock-Back //
// -And More depending on your imagination //
// //
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// //
// Bug Reports - Feedbacks //
// //
// * We count on you to report bugs in the system, also telling the source//
// * Feedbacks about the system are much appreciated //
// * We mostly hope suggestions about enhancements for the System //
// //
/////////////////////////////////////////////////////////////////////////////
function SaveAttackTypeHandle takes hashtable hash, integer parentKey, integer childKey, attacktype at returns nothing
call SaveInteger(hash, parentKey, childKey, GetHandleId(at))
endfunction
function LoadAttackTypeHandle takes hashtable hash, integer parentKey, integer childKey returns attacktype
return ConvertAttackType(LoadInteger(hash, parentKey, childKey))
endfunction
function SaveDamageTypeHandle takes hashtable hash, integer parentKey, integer childKey, damagetype dt returns nothing
call SaveInteger(hash, parentKey, childKey, GetHandleId(dt))
endfunction
function LoadDamageTypeHandle takes hashtable hash, integer parentKey, integer childKey returns damagetype
return ConvertDamageType(LoadInteger(hash, parentKey, childKey))
endfunction
function KB3D_AlwaysNeg takes real R returns real//Used for redering some values always lower than 0
if R > 0 then
return R * -1
endif
return R
endfunction
function KB3D_AlwaysPos takes real R returns real//Used for redering some values always higher than 0
if R < 0 then
return R * -1
endif
return R
endfunction
function KB3D_InBetween takes real Min, real R, real Max returns real//Used to maintain values between 2 others
if R < Min then
return Min
elseif R > Max then
return Max
endif
return R
endfunction
function KB3D_IsInBetween takes real Min, real R, real Max returns boolean//Used to maintain values between 2 others
if R < Min then
return false
elseif R > Max then
return false
endif
return true
endfunction
function KB3D_RegisterUnitCollision takes unit u, real x, real y, integer i returns real //Somehow a library for UnitCollision function
local real l = 0
local real h = 300
local real m = 150
local real nm
loop
if (IsUnitInRangeXY(u, x+m, y, 0)) then
set l = m
else
set h = m
endif
set nm = (l+h)/2
exitwhen nm+.001 > m and nm-.001 < m
set m = nm
endloop
set m = R2I(m*10)/10.
call SaveReal( udg_KB3D_HA, 16, GetUnitTypeId(u), m )
return m
endfunction
function KB3D_GetUnitCollision takes unit u returns real//Used to know the collision of a unit //Credits to Netharus// converted by malhorne
local integer i = GetUnitTypeId(u)
if HaveSavedReal( udg_KB3D_HA, 16, i) then
return LoadReal(udg_KB3D_HA, 16, i)
endif
return KB3D_RegisterUnitCollision(u, GetUnitX(u), GetUnitY(u), i)
endfunction
function KB3D_Tree_Check takes destructable D returns boolean //Checks if a destructable is a tree
return (IssueTargetOrder( udg_KB3D_Harvester, "harvest", D ) and (IssueImmediateOrder(udg_KB3D_Harvester, "stop")) )
endfunction
function KB3D_KillEnumDest takes nothing returns nothing //Function used in Enumeration loop
local destructable D = GetEnumDestructable()
if ( KB3D_Tree_Check(D) ) and (GetUnitFlyHeight(LoadUnitHandle(udg_KB3D_HA, 0, R2I(udg_KB3D_Reals[0]))) < GetDestructableOccluderHeight(D)) then
call KillDestructable(D)
set D = null
endif
endfunction
function KB3D_CircleTreeKill takes real radius, real x, real y returns nothing//To destroy trees around the unit
local rect r = Rect(x-radius, y-radius, x+radius, y+radius)
call EnumDestructablesInRect(r, null, function KB3D_KillEnumDest)
call RemoveRect(r)
set r = null
endfunction
function KB3D_CW_Loop takes nothing returns nothing//function for item group loop for Check Walkability System
if IsItemVisible(GetEnumItem()) then
set udg_CP_HiddenItems[udg_CP_HiddenItemsIndex] = GetEnumItem()
call SetItemVisible(udg_CP_HiddenItems[udg_CP_HiddenItemsIndex], false)
set udg_CP_HiddenItemsIndex = ( udg_CP_HiddenItemsIndex + 1 )
endif
endfunction
function KB3D_CW takes real x, real y returns boolean//Check Walkability System by PnF
local real x2 = 0
local real y2 = 0
call MoveRectTo(udg_CP_Rect, x, y)
call EnumItemsInRect(udg_CP_Rect, null, function KB3D_CW_Loop )
call SetItemPosition(udg_CP_Item, x, y)
set x2 = GetItemX(udg_CP_Item)
set y2 = GetItemY(udg_CP_Item)
call SetItemVisible(udg_CP_Item, false)
loop
exitwhen udg_CP_HiddenItemsIndex <= 0
set udg_CP_HiddenItemsIndex = udg_CP_HiddenItemsIndex - 1
call SetItemVisible(udg_CP_HiddenItems[udg_CP_HiddenItemsIndex], true)
set udg_CP_HiddenItems[udg_CP_HiddenItemsIndex] = null
endloop
return (((x2-x)*(x2-x) + (y2-y)*(y2-y) <= 100) and (not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY)))
endfunction
function KB3D_ClearInstance takes integer i returns nothing
local integer x = 0
call DestroyGroup(LoadGroupHandle(udg_KB3D_HA, 27, i))
loop
exitwhen x > 100
call RemoveSavedHandle(udg_KB3D_HA, x, i)
call SaveReal(udg_KB3D_HA, x, i, 0)
set x = x +1
endloop
endfunction
function MoveUnit_3D takes unit U, real x, real y, real z, real MaxZ, boolean P, boolean OS, boolean KiOS returns nothing
call SetUnitFlyHeight(U, KB3D_InBetween(GetUnitDefaultFlyHeight(U), z, 9999), 0)
if ( not(P) or ( KB3D_CW(x, y) ) or (OS) ) then
if (OS) then
call SetUnitX(U, KB3D_InBetween(udg_KB3D_Reals[6], x, udg_KB3D_Reals[5]))
call SetUnitY(U, KB3D_InBetween(udg_KB3D_Reals[8], y, udg_KB3D_Reals[7]))
if (KiOS) and (not(KB3D_IsInBetween(udg_KB3D_Reals[2], x, udg_KB3D_Reals[1])) or not(KB3D_IsInBetween(udg_KB3D_Reals[4], x, udg_KB3D_Reals[3]))) then
call KillUnit(U)
endif
else
call SetUnitX(U, KB3D_InBetween(udg_KB3D_Reals[2], x, udg_KB3D_Reals[1]))
call SetUnitY(U, KB3D_InBetween(udg_KB3D_Reals[4], y, udg_KB3D_Reals[3]))
endif
endif
endfunction
function KB3D_LineDamageLoop takes nothing returns boolean
local unit U = GetFilterUnit()
local integer Loop = R2I(udg_KB3D_Reals[0])
local unit Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
local attacktype AType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
local damagetype DType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
local real LineD = LoadReal(udg_KB3D_HA, 28, Loop)
local unit U1 = LoadUnitHandle(udg_KB3D_HA, 0, Loop)
local group G = LoadGroupHandle(udg_KB3D_HA, 27, Loop)
if ( not( IsUnitType(U, UNIT_TYPE_STRUCTURE) ) and not( IsUnitType(U, UNIT_TYPE_MECHANICAL) ) and( IsUnitEnemy(U, GetOwningPlayer(U1))) and not ( IsUnitInGroup(U, G) ) ) then
call GroupAddUnit(G, U)
call UnitDamageTarget(Damager, U, LineD, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)
endif
set G = null
set U = null
set U1 = null
set Damager = null
set AType = null
set DType = null
return false
endfunction
function KB3D_AoEDamageLoop takes nothing returns boolean
local unit U = GetFilterUnit()
local integer Loop = R2I(udg_KB3D_Reals[0])
local unit Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
local attacktype AType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
local damagetype DType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
local real AoED = LoadReal(udg_KB3D_HA, 32, Loop)
local unit U1 = LoadUnitHandle(udg_KB3D_HA, 0, Loop)
if ( not( IsUnitType(U, UNIT_TYPE_STRUCTURE) ) and not( IsUnitType(U, UNIT_TYPE_MECHANICAL) ) and( IsUnitEnemy(U, GetOwningPlayer(U1))) ) then
call UnitDamageTarget(Damager, U, AoED * 0.031250000, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)
endif
set U = null
set U1 = null
set Damager = null
set AType = null
set DType = null
return false
endfunction
function KB3D_AoEEndDamage takes nothing returns boolean
local unit U = GetFilterUnit()
local integer Loop = R2I(udg_KB3D_Reals[0])
local unit Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
local attacktype AType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
local damagetype DType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
local real D = LoadReal(udg_KB3D_HA, 38, Loop)
local unit U1 = LoadUnitHandle(udg_KB3D_HA, 0, Loop)
if ( not( IsUnitType(U, UNIT_TYPE_STRUCTURE) ) and not( IsUnitType(U, UNIT_TYPE_MECHANICAL) ) and( IsUnitEnemy(U, GetOwningPlayer(U1))) ) then
call UnitDamageTarget(Damager, U, D, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)
endif
set U = null
set U1 = null
set Damager = null
set AType = null
set DType = null
return false
endfunction
function KB3D_GiveKBto takes unit U1, unit U2, integer Loop returns nothing
set udg_KB3D_AoEEndDamage = LoadReal(udg_KB3D_HA, 38, Loop)
set udg_KB3D_EndwhenDead = LoadBoolean(udg_KB3D_HA, 35, Loop)
set udg_KB3D_Accel = -2000
set udg_KB3D_AllowOutSiding = LoadBoolean(udg_KB3D_HA, 34, Loop)
set udg_KB3D_Angle = (LoadReal(udg_KB3D_HA, 5, Loop)*180/3.14159)
set udg_KB3D_AoE = LoadReal(udg_KB3D_HA, 29, Loop)
set udg_KB3D_AoEDamage = LoadReal(udg_KB3D_HA, 32, Loop)
set udg_KB3D_AttackType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
set udg_KB3D_DamageType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
set udg_KB3D_Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
set udg_KB3D_DestroyTree = LoadBoolean(udg_KB3D_HA, 8, Loop)
set udg_KB3D_DisableUnit = LoadBoolean(udg_KB3D_HA, 6, Loop)
set udg_KB3D_FaceAngle = LoadBoolean(udg_KB3D_HA, 31, Loop)
set udg_KB3D_Fx = LoadStr(udg_KB3D_HA, 9, Loop)
set udg_KB3D_Fx_Attach = LoadStr(udg_KB3D_HA, 10, Loop)
set udg_KB3D_ImpactDamage = LoadReal(udg_KB3D_HA, 17, Loop)
set udg_KB3D_LineDamage = LoadReal(udg_KB3D_HA, 28, Loop)
set udg_KB3D_LoopDamage = LoadReal(udg_KB3D_HA, 18, Loop)/0.031250000
set udg_KB3D_Range = 99999
set udg_KB3D_Speed = LoadReal(udg_KB3D_HA, 2, Loop)/0.031250000
set udg_KB3D_Unit = U1
set udg_KB3D_Zoffset = LoadReal(udg_KB3D_HA, 3, Loop)-GetUnitDefaultFlyHeight(U2) / 1.85
call ConditionalTriggerExecute( udg_KB3D_Registration )
endfunction
function KB3D_AoEGiveKBto takes unit U1, unit U2, integer Loop returns nothing
local real x1 = GetUnitX(U1)
local real y1 = GetUnitY(U1)
local real x2 = GetUnitX(U2)
local real y2 = GetUnitY(U2)
set udg_KB3D_AoE = LoadReal(udg_KB3D_HA, 29, Loop)
set udg_KB3D_EndwhenDead = LoadBoolean(udg_KB3D_HA, 35, Loop)
set udg_KB3D_Accel = -550
set udg_KB3D_AllowOutSiding = LoadBoolean(udg_KB3D_HA, 34, Loop)
set udg_KB3D_Angle = Atan2(y1 - y2, x1 - x2)*180/3.14159
set udg_KB3D_AoEDamage = LoadReal(udg_KB3D_HA, 32, Loop)
set udg_KB3D_AttackType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
set udg_KB3D_DamageType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
set udg_KB3D_Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
set udg_KB3D_DestroyTree = LoadBoolean(udg_KB3D_HA, 8, Loop)
set udg_KB3D_DisableUnit = LoadBoolean(udg_KB3D_HA, 6, Loop)
set udg_KB3D_FaceAngle = LoadBoolean(udg_KB3D_HA, 31, Loop)
set udg_KB3D_Fx = LoadStr(udg_KB3D_HA, 9, Loop)
set udg_KB3D_Fx_Attach = LoadStr(udg_KB3D_HA, 10, Loop)
set udg_KB3D_ImpactDamage = LoadReal(udg_KB3D_HA, 17, Loop)
set udg_KB3D_LineDamage = LoadReal(udg_KB3D_HA, 28, Loop)
set udg_KB3D_LoopDamage = LoadReal(udg_KB3D_HA, 18, Loop)/0.031250000
set udg_KB3D_Range = 9999
set udg_KB3D_Speed = udg_KB3D_AoE*2
set udg_KB3D_Unit = U1
set udg_KB3D_Zoffset = 2*(udg_KB3D_AoE - SquareRoot(x2 * x1 + y2 * y1)*3.14159/180)
call ConditionalTriggerExecute( udg_KB3D_Registration )
endfunction
function KB3D_AoEKB takes nothing returns boolean
local unit U = GetFilterUnit()
local integer Loop = R2I(udg_KB3D_Reals[0])
local unit U1 = LoadUnitHandle(udg_KB3D_HA, 0, Loop)
if ( not( IsUnitType(U, UNIT_TYPE_STRUCTURE) ) and not( IsUnitType(U, UNIT_TYPE_MECHANICAL) ) and( IsUnitEnemy(U, GetOwningPlayer(U1))) ) then
call KB3D_AoEGiveKBto(U, U1, Loop)
endif
set U = null
set U1 = null
return false
endfunction
function KB3D_Loop takes integer Loop returns nothing//Main Trigger Loop
//Create all the nessesary locals
local unit U = LoadUnitHandle(udg_KB3D_HA, 0, Loop)
local real X = GetUnitX(U)
local real Y = GetUnitY(U)
local real Z = GetUnitFlyHeight(U)
local real x
local real y
local real z
local real Range = LoadReal(udg_KB3D_HA, 1, Loop)
local real Speed = LoadReal(udg_KB3D_HA, 2, Loop)
local real Zoffset = LoadReal(udg_KB3D_HA, 3, Loop)
local real Accel = LoadReal(udg_KB3D_HA, 4, Loop)
local real Angle
local real ZSpeed = LoadReal(udg_KB3D_HA, 12, Loop)
local real ZAccel = LoadReal(udg_KB3D_HA, 13, Loop)
local real ImpactD = LoadReal(udg_KB3D_HA, 17, Loop)
local real LoopD = LoadReal(udg_KB3D_HA, 18, Loop)
local real TargetD = LoadReal(udg_KB3D_HA, 19, Loop)
local real LineD = LoadReal(udg_KB3D_HA, 28, Loop)
local real AoE = LoadReal(udg_KB3D_HA, 29, Loop)
local real ZT = LoadReal(udg_KB3D_HA, 26, Loop)
local real AoED = LoadReal(udg_KB3D_HA, 32, Loop)
local real Time = LoadReal(udg_KB3D_HA, 41, Loop) + 0.031250000
local real KillatTime = LoadReal(udg_KB3D_HA, 36, Loop)
local real StopTime = LoadReal(udg_KB3D_HA, 37, Loop)
local real AoEEndDamage = LoadReal(udg_KB3D_HA, 38, Loop)
local unit Target = LoadUnitHandle(udg_KB3D_HA, 5, Loop)
local unit Damager = LoadUnitHandle(udg_KB3D_HA, 22, Loop)
local boolean DisableUnit = LoadBoolean(udg_KB3D_HA, 6, Loop)
local boolean UnpathableStop = LoadBoolean(udg_KB3D_HA, 7, Loop)
local boolean DestroyTree = LoadBoolean(udg_KB3D_HA, 8, Loop)
local boolean KillWhenHit = LoadBoolean(udg_KB3D_HA, 24, Loop)
local boolean EndWhenHit = LoadBoolean(udg_KB3D_HA, 25, Loop)
local boolean KiOS = LoadBoolean(udg_KB3D_HA, 33, Loop)
local boolean OS = LoadBoolean(udg_KB3D_HA, 34, Loop)
local boolean B = false
local boolean b = false
local boolean EndwhenDead = LoadBoolean(udg_KB3D_HA, 35, Loop)
local boolean KBTarget = LoadBoolean(udg_KB3D_HA, 39, Loop)
local boolean AoEKB = LoadBoolean(udg_KB3D_HA, 40, Loop)
local string Fx = LoadStr(udg_KB3D_HA, 9, Loop)
local string Attach = LoadStr(udg_KB3D_HA, 10, Loop)
local string EndFx = LoadStr(udg_KB3D_HA, 42, Loop)
local attacktype AType = LoadAttackTypeHandle(udg_KB3D_HA, 20, Loop)
local damagetype DType = LoadDamageTypeHandle(udg_KB3D_HA, 21, Loop)
local group g
//end of locals
//Loop Damage Execution
if not (LoopD == 0) and not (Damager == null ) then
call UnitDamageTarget(Damager, U, LoopD, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)
endif
//Calculate the Angle
if ( Target == null ) then
set Angle = LoadReal(udg_KB3D_HA, 5, Loop) + LoadReal(udg_KB3D_HA, 30, Loop)//if there is no unit target
else
set Angle = Atan2(GetUnitY(Target) - Y, GetUnitX(Target) - X)//if there is a unit target
endif
//Make Unit Face Angle
if LoadBoolean(udg_KB3D_HA, 31, Loop) then
call SetUnitFacing(U, Angle * (180 / 3.14159))
endif
//Calculate 3D coordinates
set Speed = Speed + ( Accel )//Increase the KB speed depending on the Acceleration
set Range = Range - ( Speed )//Decrease distance traveled
set ZSpeed = ZSpeed + ( ZAccel )//change the fly changing rate //Acceleration is for smoothness
set x = X + ( Speed * Cos(Angle) )//new X location of the KBed unit
set y = Y + ( Speed * Sin(Angle) )//new Y location of the KBed unit
set z = Z + ( ZSpeed * 0.031250000 )//new Z Offset of the KBed unit
set ZT = ZT + ( ZSpeed * 0.031250000 )//Total Height Changings
//Move the unit according to the X, Y, Z
call MoveUnit_3D(U, x, y, z, Zoffset, UnpathableStop, OS, KiOS)
//Destroy Trees around the Unit depending on the unit's Collision Size
if (DestroyTree) then
set udg_KB3D_Reals[0] = I2R(Loop)
call KB3D_CircleTreeKill( KB3D_InBetween(100, 4 * KB3D_GetUnitCollision(U), 500), x, y )
endif
//Create the Effect on the unit
if not (Fx == "") then
if ( z > 20 ) then
if not (Attach == "") then
call DestroyEffect(AddSpecialEffectTarget(Fx, U, Attach))//attach the effect on the unit if he is flying
endif
else
call DestroyEffect(AddSpecialEffect(Fx, x, y))//create the effect on his location if he is not flying
endif
endif
//Initiate Impact Damage
if ( (UnpathableStop) and not ( KB3D_CW(x, y) ) ) and (not (ImpactD == 0) and not (Damager == null ) ) then//if the terrain is unpathable or if unpathable stop is disabled then..
if ( KB3D_CW(x, y) ) then
call SaveBoolean(udg_KB3D_HA, 23, Loop, true)
endif
if ( LoadBoolean(udg_KB3D_HA, 23, Loop) ) then
call UnitDamageTarget(Damager, U, ImpactD, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)//Apply Impact Damage to the unit
call SaveBoolean(udg_KB3D_HA, 23, Loop, false)
endif
endif
//Initiate Line Damage
if not(LineD == 0) and not(Damager == null) and not(AoE == 0) then
set g = CreateGroup()
set udg_KB3D_Reals[0] = I2R(Loop)
call GroupEnumUnitsInRange(udg_KB3D_Group, x, y, KB3D_AlwaysPos(AoE), Filter(function KB3D_LineDamageLoop))
call DestroyGroup(g)
set g = null
endif
//Initiate AoE Damage
if not(AoED == 0) and not(Damager == null) and not(AoE == 0) then
set g = CreateGroup()
set udg_KB3D_Reals[0] = I2R(Loop)
call GroupEnumUnitsInRange(udg_KB3D_Group, x, y, KB3D_AlwaysPos(AoE), Filter(function KB3D_AoEDamageLoop))
call DestroyGroup(g)
set g = null
endif
//Disable the unit partially
if ( DisableUnit ) then
call SetUnitPropWindow(U, 0)
call SetUnitTurnSpeed(U, 0)
endif
//Initiate Target-Related Actions
if not(Target == null) then
if (SquareRoot ( ( GetUnitX(Target) - x ) * ( GetUnitX(Target) - x ) + ( GetUnitY(Target) - y ) * ( GetUnitY(Target) - y ) ) < Speed) then//when the target and the unit are close
if not (TargetD == 0) and not(Damager == null) then//Damage the Target
call UnitDamageTarget(Damager, Target, TargetD, true, false, AType, DType, WEAPON_TYPE_WHOKNOWS)
call SaveReal(udg_KB3D_HA, 19, Loop, 0)
endif
if KBTarget then//KB the Target
call KB3D_GiveKBto(Target, U, Loop)
call SaveBoolean( udg_KB3D_HA, 39, udg_KB3D_Counter, false )
endif
if (KillWhenHit) then//Kill the Unit
call KillUnit(U)
endif
if (EndWhenHit) then//End the KB
call SaveReal(udg_KB3D_HA, 4, Loop, KB3D_AlwaysNeg(Speed))
call SaveReal(udg_KB3D_HA, 3, Loop, GetUnitFlyHeight(U) - ZT)
endif
endif
endif
//Kill the Unit at the time
if not(KillatTime == 0) and ( Time > KillatTime ) then
call KillUnit(U)
endif
//Save Changes in the Hashtable
call SaveReal(udg_KB3D_HA, 1, Loop, Range)
call SaveReal(udg_KB3D_HA, 2, Loop, Speed)
call SaveReal(udg_KB3D_HA, 5, Loop, Angle)
call SaveReal(udg_KB3D_HA, 12, Loop, ZSpeed)
call SaveReal(udg_KB3D_HA, 26, Loop, ZT)
call SaveReal(udg_KB3D_HA, 41, Loop, Time)
//set B to if Stop time is exceeded
set B = ( not(StopTime == 0) and ( Time > StopTime ) )
//Inititate End of the KB
if ( (Speed <= 0) or ( Range <= 0 ) or ( B ) ) then
call SaveBoolean(udg_KB3D_HA, 100, Loop, false)
set udg_KB3D_Instances = udg_KB3D_Instances - 1
if ( GetWidgetLife(U) <= 0 ) then
call SetUnitFlyHeight(U, GetUnitDefaultFlyHeight(U), 750 )
endif
call SetUnitPropWindow(U, LoadReal(udg_KB3D_HA, 15, Loop)*3.14159/180)
call SetUnitTurnSpeed(U, GetUnitDefaultTurnSpeed(U))
if HaveSavedHandle(udg_KB3D_HA, 14, Loop) then
call DestroyEffect(LoadEffectHandle(udg_KB3D_HA, 14, Loop))
endif
set b = true
elseif ( GetWidgetLife(U) <= 0 ) and (EndwhenDead) then
call SaveBoolean(udg_KB3D_HA, 100, Loop, false)
set udg_KB3D_Instances = udg_KB3D_Instances - 1
if ( GetWidgetLife(U) <= 0 ) then
call SetUnitFlyHeight(U, GetUnitDefaultFlyHeight(U), 750 )
endif
call SetUnitPropWindow(U, LoadReal(udg_KB3D_HA, 15, Loop)*3.14159/180)
call SetUnitTurnSpeed(U, GetUnitDefaultTurnSpeed(U))
if HaveSavedHandle(udg_KB3D_HA, 14, Loop) then
call DestroyEffect(LoadEffectHandle(udg_KB3D_HA, 14, Loop))
endif
set b = true
endif
//variable b refers to if the KB has ended
//AoE damage at the end of the KB
if (b) and not(AoEEndDamage == 0) and not(Damager == null) and not(AoE == 0) then
set g = CreateGroup()
set udg_KB3D_Reals[0] = I2R(Loop)
call GroupEnumUnitsInRange(udg_KB3D_Group, x, y, KB3D_AlwaysPos(AoE), Filter(function KB3D_AoEEndDamage))
call DestroyGroup(g)
set g = null
endif
//AoE Knock-back at the end of the KB
if (b) and (AoEKB) and not(AoE == 0) then
set g = CreateGroup()
set udg_KB3D_Reals[0] = I2R(Loop)
call GroupEnumUnitsInRange(udg_KB3D_Group, x, y, KB3D_AlwaysPos(AoE), Filter(function KB3D_AoEKB))
call DestroyGroup(g)
set g = null
endif
//Create End Effect
if b and not(EndFx == "") then
if ( z > 20 ) and not (Attach == "") then
call DestroyEffect(AddSpecialEffectTarget(EndFx, U, Attach))//attach the effect on the unit if he is flying
else
call DestroyEffect(AddSpecialEffect(EndFx, x, y))//create the effect on his location if he is not flying
endif
endif
//Clear Instance
if b then
call KB3D_ClearInstance(Loop)
endif
//Clear locals
set U = null
set Target = null
set Damager = null
endfunction
function KB3D_Loop_Actions takes nothing returns nothing//loop triggerer
local integer x = 0
loop
exitwhen x >= udg_KB3D_Counter
set x = x + 1
if ( LoadBoolean(udg_KB3D_HA, 100, x) ) then
call KB3D_Loop(x)
endif
endloop
if ( udg_KB3D_Instances == 0 ) then
set udg_KB3D_Counter = 0
call PauseTimer(udg_KB3D_Timer)
endif
endfunction
function KB3D_Registration takes nothing returns boolean//register an instance in the System
local real Time
local real R
local real R1
set udg_KB3D_Arc = KB3D_InBetween(-10, udg_KB3D_Arc, 10)
set udg_KB3D_Range = KB3D_InBetween(0.01, KB3D_AlwaysPos(udg_KB3D_Range), KB3D_AlwaysPos(udg_KB3D_Range))
set udg_KB3D_Speed = KB3D_InBetween(0.01, KB3D_AlwaysPos(udg_KB3D_Speed), KB3D_AlwaysPos(udg_KB3D_Speed))
set udg_KB3D_Counter = udg_KB3D_Counter + 1
set udg_KB3D_Instances = udg_KB3D_Instances + 1
set udg_KB3D_Zoffset = (1.85 * KB3D_AlwaysPos(udg_KB3D_Zoffset)) + GetUnitDefaultFlyHeight(udg_KB3D_Unit)
set udg_KB3D_StopTime = KB3D_AlwaysPos(udg_KB3D_StopTime)
set udg_KB3D_KillatTime = KB3D_AlwaysPos(udg_KB3D_KillatTime)
set udg_KB3D_AoE = KB3D_AlwaysPos(udg_KB3D_AoE)
call SaveUnitHandle( udg_KB3D_HA, 0, udg_KB3D_Counter, udg_KB3D_Unit )
call SaveReal( udg_KB3D_HA, 1, udg_KB3D_Counter, udg_KB3D_Range )
call SaveReal( udg_KB3D_HA, 2, udg_KB3D_Counter, udg_KB3D_Speed * 0.031250000 )
call SaveReal( udg_KB3D_HA, 4, udg_KB3D_Counter, udg_KB3D_Accel * 0.031250000 * 0.031250000 )
if ( udg_KB3D_Targeted_Unit == null ) then
call SaveReal( udg_KB3D_HA, 5, udg_KB3D_Counter, udg_KB3D_Angle * 3.14159 / 180 )
else
call SaveUnitHandle( udg_KB3D_HA, 5, udg_KB3D_Counter, udg_KB3D_Targeted_Unit )
endif
call SaveBoolean( udg_KB3D_HA, 6, udg_KB3D_Counter, udg_KB3D_DisableUnit )
call SaveBoolean( udg_KB3D_HA, 7, udg_KB3D_Counter, udg_KB3D_UnpathableStop )
call SaveBoolean( udg_KB3D_HA, 8, udg_KB3D_Counter, udg_KB3D_DestroyTree )
call SaveStr( udg_KB3D_HA, 9, udg_KB3D_Counter, udg_KB3D_Fx )
call SaveStr( udg_KB3D_HA, 10, udg_KB3D_Counter, udg_KB3D_Fx_Attach )
if ( udg_KB3D_Accel == 0.00 ) then
set Time = udg_KB3D_Range / (udg_KB3D_Speed)//calculating time for the knockback if Acceleration = 0
else
if ( udg_KB3D_Accel > 0 ) then
set Time = (( -2*(udg_KB3D_Speed) + SquareRoot((4*udg_KB3D_Speed) + (8*udg_KB3D_Accel*udg_KB3D_Range ) ) / (2*udg_KB3D_Accel) ))//calculating time for the knockback if Acceleration > 0
endif
if ( udg_KB3D_Accel < 0 ) then
set R = ( - 1 * (udg_KB3D_Speed) / udg_KB3D_Accel )
set R1 = (0.5 * udg_KB3D_Accel * R * R) + ((udg_KB3D_Speed) * R)
if R1 < udg_KB3D_Range then
set Time = R//calculating time for the knockback if Acceleration < 0 and if the speed will be = 0 before reaching max range
else
set Time = KB3D_AlwaysPos(( -2*(udg_KB3D_Speed) + SquareRoot(KB3D_AlwaysPos((4*(udg_KB3D_Speed)*(udg_KB3D_Speed)) + (8*udg_KB3D_Accel*udg_KB3D_Range) )) ) / (2*udg_KB3D_Accel) )//calculating time for the knockback if Acceleration < 0 and if the speed will be > 0 before reaching max range
endif
endif
endif
call SaveReal( udg_KB3D_HA, 11, udg_KB3D_Counter, Time )
call SaveBoolean( udg_KB3D_HA, 100, udg_KB3D_Counter, true )
if UnitAddAbility(udg_KB3D_Unit, 'Amrf') then
call UnitRemoveAbility(udg_KB3D_Unit, 'Amrf')
endif
call SaveReal( udg_KB3D_HA, 3, udg_KB3D_Counter, udg_KB3D_Zoffset )
call SaveReal( udg_KB3D_HA, 12, udg_KB3D_Counter, (udg_KB3D_Zoffset / ( Time / 2)) )
call SaveReal( udg_KB3D_HA, 13, udg_KB3D_Counter, ( -1 * udg_KB3D_Zoffset / ( Time / 2) ) / ( Time / 2) * 0.031250000 )
if not (udg_KB3D_TrailFx == "") and not (udg_KB3D_Fx_Attach == "") then
call SaveEffectHandle(udg_KB3D_HA, 14, udg_KB3D_Counter, AddSpecialEffectTarget(udg_KB3D_TrailFx, udg_KB3D_Unit, udg_KB3D_Fx_Attach))
endif
call SaveReal( udg_KB3D_HA, 15, udg_KB3D_Counter, GetUnitDefaultPropWindow(udg_KB3D_Unit) )
call SaveReal( udg_KB3D_HA, 17, udg_KB3D_Counter, udg_KB3D_ImpactDamage )
call SaveReal( udg_KB3D_HA, 18, udg_KB3D_Counter, udg_KB3D_LoopDamage * 0.031250000 )
call SaveReal( udg_KB3D_HA, 19, udg_KB3D_Counter, udg_KB3D_TargetDamage )
call SaveAttackTypeHandle( udg_KB3D_HA, 20, udg_KB3D_Counter, udg_KB3D_AttackType )
call SaveDamageTypeHandle( udg_KB3D_HA, 21, udg_KB3D_Counter, udg_KB3D_DamageType )
call SaveUnitHandle( udg_KB3D_HA, 22, udg_KB3D_Counter, udg_KB3D_Damager )
call SaveBoolean( udg_KB3D_HA, 23, udg_KB3D_Counter, true )
call SaveBoolean( udg_KB3D_HA, 24, udg_KB3D_Counter, udg_KB3D_KillWhenHit )
if (udg_KB3D_KillWhenHit) then
set udg_KB3D_EndWhenHit = true
endif
call SaveBoolean( udg_KB3D_HA, 25, udg_KB3D_Counter, udg_KB3D_EndWhenHit )
call SaveGroupHandle(udg_KB3D_HA, 27, udg_KB3D_Counter, CreateGroup() )
call SaveReal( udg_KB3D_HA, 28, udg_KB3D_Counter, udg_KB3D_LineDamage )
call SaveReal( udg_KB3D_HA, 29, udg_KB3D_Counter, KB3D_AlwaysPos(udg_KB3D_AoE) )
call SaveReal( udg_KB3D_HA, 30, udg_KB3D_Counter, udg_KB3D_Arc * (3.14159/180) )
call SaveBoolean( udg_KB3D_HA, 31, udg_KB3D_Counter, udg_KB3D_FaceAngle )
call SaveReal( udg_KB3D_HA, 32, udg_KB3D_Counter, udg_KB3D_AoEDamage )
call SaveBoolean( udg_KB3D_HA, 33, udg_KB3D_Counter, udg_KB3D_KillifOutSider )
if (udg_KB3D_KillifOutSider) then
set udg_KB3D_AllowOutSiding = true
endif
call SaveBoolean( udg_KB3D_HA, 34, udg_KB3D_Counter, udg_KB3D_AllowOutSiding )
if udg_KB3D_KillatTime > udg_KB3D_StopTime then
set udg_KB3D_EndwhenDead = true
endif
call SaveBoolean( udg_KB3D_HA, 35, udg_KB3D_Counter, udg_KB3D_EndwhenDead )
call SaveReal( udg_KB3D_HA, 36, udg_KB3D_Counter, udg_KB3D_KillatTime )
call SaveReal( udg_KB3D_HA, 37, udg_KB3D_Counter, udg_KB3D_StopTime )
call SaveReal( udg_KB3D_HA, 38, udg_KB3D_Counter, udg_KB3D_AoEEndDamage )
call SaveBoolean( udg_KB3D_HA, 39, udg_KB3D_Counter, udg_KB3D_KBTarget )
call SaveBoolean( udg_KB3D_HA, 40, udg_KB3D_Counter, udg_KB3D_AoEKB )
call SaveStr(udg_KB3D_HA, 42, udg_KB3D_Counter, udg_KB3D_EndFx )
//Nulling
set udg_KB3D_Accel = 0.00
set udg_KB3D_AllowOutSiding = false
set udg_KB3D_Angle = 0.00
set udg_KB3D_AoE = 0.00
set udg_KB3D_Arc = 0.00
set udg_KB3D_AoEDamage = 0.00
set udg_KB3D_AttackType = ATTACK_TYPE_NORMAL
set udg_KB3D_DamageType = DAMAGE_TYPE_MAGIC
set udg_KB3D_Damager = null
set udg_KB3D_DestroyTree = false
set udg_KB3D_DisableUnit = false
set udg_KB3D_EndWhenHit = false
set udg_KB3D_Fx = ""
set udg_KB3D_EndFx = ""
set udg_KB3D_Fx_Attach = ""
set udg_KB3D_ImpactDamage = 0.00
set udg_KB3D_KillWhenHit = false
set udg_KB3D_FaceAngle = false
set udg_KB3D_KillifOutSider = false
set udg_KB3D_LineDamage = 0.00
set udg_KB3D_LoopDamage = 0.00
set udg_KB3D_Range = 0.00
set udg_KB3D_Speed = 0.00
set udg_KB3D_TargetDamage = 0.00
set udg_KB3D_Targeted_Unit = null
set udg_KB3D_TrailFx = ""
set udg_KB3D_Unit = null
set udg_KB3D_UnpathableStop = true
set udg_KB3D_Zoffset = 0.00
set udg_KB3D_AoEEndDamage = 0.00
set udg_KB3D_AoEKB = false
set udg_KB3D_EndwhenDead = true
set udg_KB3D_KBTarget = false
set udg_KB3D_StopTime = 0.00
set udg_KB3D_KillatTime = 0.00
if ( udg_KB3D_Counter == 1 ) then
call TimerStart(udg_KB3D_Timer, 0.031250000, true, function KB3D_Loop_Actions )
endif
set udg_KB3D_Time = Time
return false
endfunction
//===========================================================================
function InitTrig_KB3D takes nothing returns nothing
////////REGISTRATION
set udg_KB3D_Registration = CreateTrigger( )
call TriggerAddCondition( udg_KB3D_Registration, Condition(function KB3D_Registration) )
set udg_KB3D_Harvester = CreateUnit(Player(15), 'hpea', 0, 0, 0)
call ShowUnit(udg_KB3D_Harvester, false)
call UnitAddAbility(udg_KB3D_Harvester, 'Aloc')
set udg_KB3D_HA = InitHashtable()
////////Check Walkability System by PnF
set udg_CP_Rect = Rect(0, 0, 128.00, 128.00)
set udg_CP_Item = CreateItem('wtlg', 0, 0)
call SetItemVisible( udg_CP_Item, false )
////////InitReals
set udg_KB3D_Reals[1] = GetRectMaxX(bj_mapInitialPlayableArea)
set udg_KB3D_Reals[2] = GetRectMinX(bj_mapInitialPlayableArea)
set udg_KB3D_Reals[3] = GetRectMaxY(bj_mapInitialPlayableArea)
set udg_KB3D_Reals[4] = GetRectMinY(bj_mapInitialPlayableArea)
set udg_KB3D_Reals[5] = GetRectMaxX(GetWorldBounds())
set udg_KB3D_Reals[6] = GetRectMinX(GetWorldBounds())
set udg_KB3D_Reals[7] = GetRectMaxY(GetWorldBounds())
set udg_KB3D_Reals[8] = GetRectMinY(GetWorldBounds())
endfunction
//TESH.scrollpos=212
//TESH.alwaysfold=0
function Trig_Item_Grade_Drop_Initialize_JASS_Actions takes nothing returns nothing
// ------------------------------------------------** Creep Item Drop Uncommon**------------------------------------------------------------------
set udg_itemgradeset = 1
loop
exitwhen udg_itemgradeset > 4
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IM'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 5
loop
exitwhen udg_itemgradeset > 9
set udg_CreepItemDropUncommon[5] = 'I0IO'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 10
loop
exitwhen udg_itemgradeset > 14
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IP'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 15
loop
exitwhen udg_itemgradeset > 19
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IQ'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 20
loop
exitwhen udg_itemgradeset > 24
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IR'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 25
loop
exitwhen udg_itemgradeset > 29
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IS'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 30
loop
exitwhen udg_itemgradeset > 34
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IT'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 35
loop
exitwhen udg_itemgradeset > 39
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IU'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 40
loop
exitwhen udg_itemgradeset > 44
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IV'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 45
loop
exitwhen udg_itemgradeset > 49
set udg_CreepItemDropUncommon[udg_itemgradeset] = 'I0IW'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_CreepItemDropUncommon[50] = 'I0IX'
// ------------------------------------------------** Creep Item Drop Rare **------------------------------------------------------------------
set udg_itemgradeset = 1
loop
exitwhen udg_itemgradeset > 4
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0IN'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 5
loop
exitwhen udg_itemgradeset > 9
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0IY'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 10
loop
exitwhen udg_itemgradeset > 14
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0IZ'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 15
loop
exitwhen udg_itemgradeset > 19
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J0'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 20
loop
exitwhen udg_itemgradeset > 24
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J1'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 25
loop
exitwhen udg_itemgradeset > 29
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J2'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 30
loop
exitwhen udg_itemgradeset > 34
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J3'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 35
loop
exitwhen udg_itemgradeset > 39
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J4'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 40
loop
exitwhen udg_itemgradeset > 44
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J5'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 45
loop
exitwhen udg_itemgradeset > 49
set udg_CreepItemDropRare[udg_itemgradeset] = 'I0J6'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_CreepItemDropRare[50] = 'I0J7'
// ------------------------------------------------** Creep Item Drop Mythical **------------------------------------------------------------------
set udg_itemgradeset = 1
loop
exitwhen udg_itemgradeset > 4
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0A5'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 5
loop
exitwhen udg_itemgradeset > 9
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0J8'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 10
loop
exitwhen udg_itemgradeset > 14
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0J9'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 15
loop
exitwhen udg_itemgradeset > 19
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JA'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 20
loop
exitwhen udg_itemgradeset > 24
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JB'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 25
loop
exitwhen udg_itemgradeset > 29
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JC'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 30
loop
exitwhen udg_itemgradeset > 34
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JD'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 35
loop
exitwhen udg_itemgradeset > 39
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JE'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 40
loop
exitwhen udg_itemgradeset > 44
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JF'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 45
loop
exitwhen udg_itemgradeset > 49
set udg_CreepItemDropMythical[udg_itemgradeset] = 'I0JG'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_CreepItemDropMythical[50] = 'I0JH'
// ------------------------------------------------** Creep Item Drop Legendary **------------------------------------------------------------------
set udg_itemgradeset = 1
loop
exitwhen udg_itemgradeset > 4
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I09I'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 5
loop
exitwhen udg_itemgradeset > 9
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JI'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 10
loop
exitwhen udg_itemgradeset > 14
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JJ'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 15
loop
exitwhen udg_itemgradeset > 19
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JK'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 20
loop
exitwhen udg_itemgradeset > 24
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JL'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 25
loop
exitwhen udg_itemgradeset > 29
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JM'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 30
loop
exitwhen udg_itemgradeset > 34
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JN'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 35
loop
exitwhen udg_itemgradeset > 39
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JO'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 40
loop
exitwhen udg_itemgradeset > 44
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JP'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_itemgradeset = 45
loop
exitwhen udg_itemgradeset > 49
set udg_CreepItemDropLegendary[udg_itemgradeset] = 'I0JQ'
set udg_itemgradeset = udg_itemgradeset + 1
endloop
set udg_CreepItemDropLegendary[50] = 'I0JR'
endfunction
//===========================================================================
function InitTrig_Item_Grade_Drop_Initialize_JASS takes nothing returns nothing
set gg_trg_Item_Grade_Drop_Initialize_JASS = CreateTrigger( )
call TriggerAddAction( gg_trg_Item_Grade_Drop_Initialize_JASS, function Trig_Item_Grade_Drop_Initialize_JASS_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Uncommon_Gift_Level_JASS_Func001C takes nothing returns boolean
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IM' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IO' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IP' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IQ' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IR' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IS' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IT' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IU' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IV' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IW' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IX' ) ) then
return true
endif
return false
endfunction
function Trig_Uncommon_Gift_Level_JASS_Conditions takes nothing returns boolean
if ( not Trig_Uncommon_Gift_Level_JASS_Func001C() ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IX' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IW' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IV' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IU' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IT' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IS' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IR' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IQ' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IP' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IO' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IM' ) ) then
return false
endif
return true
endfunction
function Trig_Uncommon_Gift_Level_JASS_Actions takes nothing returns nothing
if ( Trig_Uncommon_Gift_Level_JASS_Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 1 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 5 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 10 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 15 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 20 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 25 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 30 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 35 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 40 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 45 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Uncommon_Gift_Level_JASS_Func002Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 50 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endfunction
//===========================================================================
function InitTrig_Uncommon_Gift_Level_JASS takes nothing returns nothing
set gg_trg_Uncommon_Gift_Level_JASS = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Uncommon_Gift_Level_JASS, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddCondition( gg_trg_Uncommon_Gift_Level_JASS, Condition( function Trig_Uncommon_Gift_Level_JASS_Conditions ) )
call TriggerAddAction( gg_trg_Uncommon_Gift_Level_JASS, function Trig_Uncommon_Gift_Level_JASS_Actions )
endfunction
function Trig_Rare_Gifts_JASS_Func002C takes nothing returns boolean
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IN' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IY' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0IZ' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J0' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J1' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J2' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J3' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J4' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J5' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J6' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J7' ) ) then
return true
endif
return false
endfunction
function Trig_Rare_Gifts_JASS_Conditions takes nothing returns boolean
if ( not Trig_Rare_Gifts_JASS_Func002C() ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J7' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J6' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J5' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J4' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J3' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J2' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J1' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J0' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IZ' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IY' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0IN' ) ) then
return false
endif
return true
endfunction
function Trig_Rare_Gifts_JASS_Actions takes nothing returns nothing
if ( Trig_Rare_Gifts_JASS_Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 11 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 51 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 101 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 151 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 201 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 251 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 301 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 351 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 401 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 451 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Rare_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 501 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endfunction
//===========================================================================
function InitTrig_Rare_Gifts_JASS takes nothing returns nothing
set gg_trg_Rare_Gifts_JASS = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Rare_Gifts_JASS, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddCondition( gg_trg_Rare_Gifts_JASS, Condition( function Trig_Rare_Gifts_JASS_Conditions ) )
call TriggerAddAction( gg_trg_Rare_Gifts_JASS, function Trig_Rare_Gifts_JASS_Actions )
endfunction
function Trig_Mythical_Gifts_JASS_Func002C takes nothing returns boolean
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0A5' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J8' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0J9' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JA' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JB' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JC' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JD' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JE' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JF' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JG' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JH' ) ) then
return true
endif
return false
endfunction
function Trig_Mythical_Gifts_JASS_Conditions takes nothing returns boolean
if ( not Trig_Mythical_Gifts_JASS_Func002C() ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JH' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JG' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JF' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JE' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JD' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JC' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JB' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JA' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J9' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0J8' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0A5' ) ) then
return false
endif
return true
endfunction
function Trig_Mythical_Gifts_JASS_Actions takes nothing returns nothing
if ( Trig_Mythical_Gifts_JASS_Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 12 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 52 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 102 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 152 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 202 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 252 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 302 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 352 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 402 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 452 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Mythical_Gifts_JASS_Func001Func001Func001Func002Func002Func002Func002Func002Func002Func002Func002C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 502 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endfunction
//===========================================================================
function InitTrig_Mythical_Gifts_JASS takes nothing returns nothing
set gg_trg_Mythical_Gifts_JASS = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Mythical_Gifts_JASS, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddCondition( gg_trg_Mythical_Gifts_JASS, Condition( function Trig_Mythical_Gifts_JASS_Conditions ) )
call TriggerAddAction( gg_trg_Mythical_Gifts_JASS, function Trig_Mythical_Gifts_JASS_Actions )
endfunction
//TESH.scrollpos=38
//TESH.alwaysfold=0
function Trig_Legendary_Gifts_JASS_Func002C takes nothing returns boolean
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I09I' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JI' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JJ' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JK' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JL' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JM' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JN' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JO' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JP' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JQ' ) ) then
return true
endif
if ( ( GetItemTypeId(GetManipulatedItem()) == 'I0JR' ) ) then
return true
endif
return false
endfunction
function Trig_Legendary_Gifts_JASS_Conditions takes nothing returns boolean
if ( not Trig_Legendary_Gifts_JASS_Func002C() ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JR' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JQ' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JP' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JO' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JN' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JM' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JL' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JK' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JJ' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I0JI' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Func001C takes nothing returns boolean
if ( not ( GetItemTypeId(GetManipulatedItem()) == 'I09I' ) ) then
return false
endif
return true
endfunction
function Trig_Legendary_Gifts_JASS_Actions takes nothing returns nothing
if ( Trig_Legendary_Gifts_JASS_Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 13 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 53 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 103 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 153 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 203 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 253 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 303 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 353 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 403 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 453 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
if ( Trig_Legendary_Gifts_JASS_Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001Func001C() ) then
call UnitAddItemByIdSwapped( ChooseRandomItemExBJ(( 503 + 0 ), ITEM_TYPE_CAMPAIGN), GetTriggerUnit() )
else
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endfunction
//===========================================================================
function InitTrig_Legendary_Gifts_JASS takes nothing returns nothing
set gg_trg_Legendary_Gifts_JASS = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Legendary_Gifts_JASS, EVENT_PLAYER_UNIT_USE_ITEM )
call TriggerAddCondition( gg_trg_Legendary_Gifts_JASS, Condition( function Trig_Legendary_Gifts_JASS_Conditions ) )
call TriggerAddAction( gg_trg_Legendary_Gifts_JASS, function Trig_Legendary_Gifts_JASS_Actions )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
//==Fiery Damnation v1.31==
//Credits got to: HINDYhat for teaching jass :p
//Needs jngp
//2oo9 by Squiggy
scope FieryDamnation initializer Init //Yea, the first scope handles the dummycreation and the order to move forward
globals //I've seperated the globals into two blocks - the first one's important to modify the spell
private constant integer SPELLID = 'A0BC' //We set up the constants for the spellid, the dummyability, the angle in which the dummies appear
private constant integer ABILITYID = 'A0BA' //and the dummyid as well as the path to the effect which is done when casting
private constant integer DUMMYID = 'n029'
private constant integer DUMMY2ID = 'n02A'
private constant string EFFPATH = "Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl"
private constant string EFFPATH2 = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl"
private constant real LIFEFACTOR = 5
endglobals
globals
private player p
endglobals
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELLID //First, check which ability is cast
endfunction
private function Conditions2 takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) == DUMMYID //We check which unit dies
endfunction
private function Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local real expTime
local real x = GetUnitX(caster)
local real y = GetUnitY(caster)
local real facing = GetUnitFacing(caster)-30 //Here, we set the angle in which to first dummy should move to the caster's - 30
local real dx
local real dy
local unit u
local integer I = 0
local location targloc = GetSpellTargetLoc()
set p = GetOwningPlayer(caster)
set dx = GetLocationX(targloc)-x
set dy = GetLocationY(targloc)-y
set expTime = SquareRoot(dx * dx + dy * dy)/425
loop
exitwhen I == 3
set dx = x+700*Cos((facing+I*30)*bj_DEGTORAD) //Here we set up the targetpoint
set dy = y+700*Sin((facing+I*30)*bj_DEGTORAD)
set u = CreateUnit(p, DUMMYID, x, y, facing+I*30) //The dummy
call IssuePointOrder(u, "move", dx, dy)
call UnitApplyTimedLife(u, 'BTLF', expTime)
call SetUnitAbilityLevel(u, ABILITYID, GetUnitAbilityLevel(caster, SPELLID)) //Now we align the dummy's immolation ability to the caster's level of the ability
call DestroyEffect(AddSpecialEffect(EFFPATH,x, y)) //And last, some effect
set I = I + 1
endloop
set caster = null
call RemoveLocation(targloc)
set targloc = null
set u = null
endfunction
private function Actions2 takes nothing returns nothing //Now the second actions-function is to handle everything what happens when the dummy dies
local unit u = GetTriggerUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real exptimer = GetUnitAbilityLevel(u, ABILITYID) //We set the timer of the dummy to lvl
set u = CreateUnit(GetOwningPlayer(u), DUMMY2ID, x, y, 90) //We spawn the new dummy
call UnitApplyTimedLife(u, 'BTLF', exptimer*(LIFEFACTOR)) //And now we attach the timer to it
call DestroyEffect(AddSpecialEffect(EFFPATH2,x, y)) //It's ordered to cast 'fan of knives'
set u = null
endfunction
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
local trigger t2 = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function Conditions))
call TriggerAddAction(t, function Actions)
call TriggerRegisterAnyUnitEventBJ(t2, EVENT_PLAYER_UNIT_DEATH)
call TriggerAddCondition(t2, Condition(function Conditions2))
call TriggerAddAction(t2, function Actions2)
endfunction
endscope
//TESH.scrollpos=163
//TESH.alwaysfold=0
scope fireWall initializer Init
// Fire Wall spell v1.01
// made by MaskedPoptart
//
// inspired by the spell of the same name in diablo 2
//================== START SETUP SECTION =======================
//If you understand what something does, go ahead and change it as you desire.
globals
private constant integer SPELL_ID = 'A0B8' //CHANGE THIS. rawcode of your FireWall ability in object editor.
private constant string FLAME_EFFECT = "Environment\\LargeBuildingFire\\LargeBuildingFire2.mdl"
private constant string FLAME_EFFECT2 = "Abilities\\Spells\\Other\\ImmolationRed\\ImmolationREDTarget.mdl"
private constant real FLAME_SPACING = 40.0
private constant real FLAME_SPAWN_INTERVAL = 0.0029*FLAME_SPACING
private constant real DAMAGE_INTERVAL = 0.2 //how often units are damaged by the fire wall, in seconds.
//increase the interval slightly if it causes the game to slow down.
private constant real DAMAGE_RADIUS = 150.0 //the maximum distance a unit can be from the wall and still be
//damaged. if this number is less than 0.5*FLAME_SPACING, units will be able to walk through the wall undamaged.
private constant string FIRE_DAMAGE_UNIT_EFFECT = "Abilities\\Spells\\Other\\ImmolationRed\\ImmolationRedDamage.mdl"
private constant string FIRE_DAMAGE_UNIT_ATTACH = "chest"
private constant real FIRE_DAMAGE_UNIT_EFFECT_LENGTH = 1.2
private constant string FIRE_DAMAGE_DEST_EFFECT = "Environment\\LargeBuildingFire\\LargeBuildingFire2.mdl"
private constant string FIRE_DAMAGE_DEST_ATTACH = "Stump0"
private constant real FIRE_DAMAGE_DEST_EFFECT_LENGTH = 0.967
private constant boolean DAMAGE_DESTRUCTABLES = true
endglobals
//returns the length of time that the wall will burn
private function GetDuration takes integer level returns real
return 10.
endfunction
//returns how long the wall is
private function GetWallLength takes integer level returns real
return 256.
endfunction
//returns the damage per second that the wall causes
private function GetDPS takes integer level returns real
return 50.0
endfunction
//used by the damage filters
private function IsValidUnitTarget takes unit u, player ownerOfCaster returns boolean
return not IsUnitType(u, UNIT_TYPE_DEAD) and/*
*/ not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and/*
*/ IsUnitType(u, UNIT_TYPE_GROUND) and/*
*/ (IsUnitEnemy(u, ownerOfCaster) or/*
*/ GetOwningPlayer(u) == Player(PLAYER_NEUTRAL_PASSIVE))
endfunction
//used by the damage filters
private function IsValidDestTarget takes destructable d returns boolean
return GetDestructableLife(d) > 0
endfunction
//=================== END SETUP SECTION =======================
// DON'T TOUCH ANY OF THE CRAP AFTER THIS LINE
//returns the number of flames that make up the wall
private function GetNumFlames takes integer level returns integer
return R2I(GetWallLength(level)/FLAME_SPACING)
endfunction
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELL_ID
endfunction
//each flame of the wall has its own struct instance
struct Flame
//each flame has two effects for optimal eye candy
private effect flameEffect
private effect flameEffect2
//each flame has a position, of course...
readonly real flameX
readonly real flameY
//each flame is spawned at a different time, so it needs a timer to tell it when to burn out.
private timer flameTimer
//returns true if flame is currently burning
readonly boolean isBurning
static method Destroy takes nothing returns nothing
local thistype f = GetTimerData(GetExpiredTimer())
call f.destroy()
endmethod
static method create takes real x, real y, integer level returns thistype
local thistype f = thistype.allocate()
set f.isBurning = true
set f.flameX = x
set f.flameY = y
set f.flameEffect = AddSpecialEffect(FLAME_EFFECT, x, y)
set f.flameEffect2 = AddSpecialEffect(FLAME_EFFECT2, x, y)
set f.flameTimer = NewTimer()
call SetTimerData(f.flameTimer, f)
//destroy f after GetDuration seconds
call TimerStart(f.flameTimer, GetDuration(level), false, function thistype.Destroy)
return f
endmethod
private method onDestroy takes nothing returns nothing
//put out the flame, clean up stuff
set this.isBurning = false
call DestroyEffect(this.flameEffect)
call DestroyEffect(this.flameEffect2)
call ReleaseTimer(this.flameTimer)
set this.flameTimer = null
endmethod
endstruct
private keyword FireWall
globals
//for use in the damage filters (below)
private rect destructableDamageRect
private group tempGroup = CreateGroup()
private FireWall tempFireWall
endglobals
//each "FireWall" instance contains a bunch of Flame instances as well as other properties
struct FireWall
private unit caster //caster of the spell
private player owner //owner of caster
private IntegerList flames //flames is a List of Flame struct objects.
//It's better to use a List than an array in this situation because arrays
//make terrible struct members, etc. See List documentation if you care.
private integer level //level of the spell
private real centerX //target x of casted spell
private real centerY //target y of casted spell
private real normalX //x component of perpendicular normalized vector (????)
private real normalY //y component of perpendicular normalized vector (don't worry about it)
private timer flameSpawnTimer //this is a repeating timer that will gradually form the wall by
//spawning pairs of flames.
private integer totalWidth //how many flames to spawn on each side of the wall
private integer currentWidth//how many flames are currently on each side of the wall (while spawning)
private timer damageTimer //this timer damages units near each flame, every DAMAGE_INTERVAL seconds
private static hashtable damagedTargets //this keeps track of units and/or destructables that were
//already damaged by this wall, during this DAMAGE_INTERVAL
private static boolexpr DamageUnitExpr //stores Filter(function thistype.DamageUnitFilter)
private static boolexpr DamageDestExpr //stores Filter(function thistype.DamageDestFilter)
//this method is used to periodically add one flame to both sides of the wall,
//if the total number of flames in the wall is supposed to be odd.
method addFlamesOdd takes nothing returns nothing
local integer i = this.currentWidth
local real x
local real y
set x = this.centerX + i*FLAME_SPACING*this.normalX //see how we can use vectors to efficiently
set y = this.centerY + i*FLAME_SPACING*this.normalY //form a perpendicular wall of flame objects?
call this.flames.addLast(Flame.create(x, y, this.level)) //create a flame and add it to the
//end of the list.
set x = this.centerX - i*FLAME_SPACING*this.normalX
set y = this.centerY - i*FLAME_SPACING*this.normalY
call this.flames.addFirst(Flame.create(x, y, this.level))//create a flame and add it to the
//start of the list.
//notice that we are able to keep the list sorted according to the order of the flames
// in the wall.
set this.currentWidth = i + 1
if(this.currentWidth>this.totalWidth)then //if we've spawned all the flames,
call ReleaseTimer(this.flameSpawnTimer) //stop the spawn timer
endif
endmethod
//Timers can't execute instance methods, so it executes a static method that redirects
//to an instance method, using the stored TimerData.
static method AddFlamesOdd takes nothing returns nothing
local thistype fw = GetTimerData(GetExpiredTimer())
call fw.addFlamesOdd()
endmethod
//this method is used to periodically add one flame to both sides of the wall,
//if the total number of flames in the wall is supposed to be even.
method addFlamesEven takes nothing returns nothing
local integer i = this.currentWidth
local real x
local real y
set x = this.centerX + (i+.5)*FLAME_SPACING*this.normalX
set y = this.centerY + (i+.5)*FLAME_SPACING*this.normalY
call this.flames.addLast(Flame.create(x, y, this.level))//same deal as addFlamesOdd
set x = this.centerX - (i+.5)*FLAME_SPACING*this.normalX
set y = this.centerY - (i+.5)*FLAME_SPACING*this.normalY
call this.flames.addFirst(Flame.create(x, y, this.level))
set this.currentWidth = i + 1
if(this.currentWidth>this.totalWidth)then
call ReleaseTimer(this.flameSpawnTimer)
endif
endmethod
static method AddFlamesEven takes nothing returns nothing
local thistype fw = GetTimerData(GetExpiredTimer())
call fw.addFlamesEven()
endmethod
//I don't like looping through groups twice, so I filter out units AND damage them
//in the filter.
static method DamageUnitFilter takes nothing returns boolean
local unit u = GetFilterUnit()
local real d = GetDPS(tempFireWall.level)*DAMAGE_INTERVAL
if(IsValidUnitTarget(u, tempFireWall.owner) /*
*/and LoadInteger(.damagedTargets, tempFireWall, GetHandleId(u)) == 0)then
//Usually one unit will be in range of more than one flame of the same wall. To keep
// the unit from being damaged multiple times by the same wall, we attach an integer
// to it in the static hashtable damagedTargets.
// 0 == not damaged yet this interval.
// 1 == already damaged this interval.
call UnitDamageTarget(tempFireWall.caster, u, d, false, true, ATTACK_TYPE_MAGIC,/*
*/ DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS)
//here we use TimedBuffEffects to make the fire damage effect appear on the unit
// without stacking on previous fire damage effects
call AddBuffEffectTarget(FIRE_DAMAGE_UNIT_EFFECT, u,/*
*/ FIRE_DAMAGE_UNIT_ATTACH, FIRE_DAMAGE_UNIT_EFFECT_LENGTH)
//unit has now been damaged, so save 1 in the hashtable
call SaveInteger(.damagedTargets, tempFireWall, GetHandleId(u), 1)
endif
return false
endmethod
//same as above, but for destructables
static method DamageDestFilter takes nothing returns boolean
local destructable dest = GetFilterDestructable()
local real dmg = GetDPS(tempFireWall.level)*DAMAGE_INTERVAL
if(IsValidDestTarget(dest) /*
*/and LoadInteger(.damagedTargets, tempFireWall, GetHandleId(dest)) == 0)then
call UnitDamageTarget(tempFireWall.caster, dest, dmg, false, true, ATTACK_TYPE_MAGIC,/*
*/DAMAGE_TYPE_FIRE, WEAPON_TYPE_WHOKNOWS)
call SaveInteger(.damagedTargets, tempFireWall, GetHandleId(dest), 1)
endif
return false
endmethod
static method onInit takes nothing returns nothing
//this isn't completely necessary, but it keeps us from having to do an extra function call every loop.
set .DamageDestExpr = Filter(function thistype.DamageDestFilter)
set .DamageUnitExpr = Filter(function thistype.DamageUnitFilter)
endmethod
//This method loops through all the flames in the list.
//Each flame finds units in range of it, and damages them if they pass the conditions.
//keep in mind the filter checks the conditions and does the damaging.
method damageAllFlames takes nothing returns nothing
local Flame iFlame //current Flame object
local integer i //current index
if(this.flames.size>0)then
call FlushChildHashtable(.damagedTargets, this) //reset hashtable at start of each interval
set i = 0 //start at first index of list
loop
exitwhen i>=this.flames.size //stop after last index of list
set iFlame = Flame(this.flames[i]) //set iFlame to object stored at index i in the flames IntegerList
if(iFlame.isBurning)then //if flame is burning
set tempFireWall = this //store this FireWall in a temp global, damage units near iFlame's position.
call GroupEnumUnitsInRange(tempGroup, iFlame.flameX, iFlame.flameY, DAMAGE_RADIUS, .DamageUnitExpr)
if(DAMAGE_DESTRUCTABLES)then
call SetRect(destructableDamageRect, iFlame.flameX-DAMAGE_RADIUS, /*
*/iFlame.flameY-DAMAGE_RADIUS, iFlame.flameX+DAMAGE_RADIUS, iFlame.flameY+DAMAGE_RADIUS)
call EnumDestructablesInRect(destructableDamageRect, .DamageDestExpr, null)
endif
else
call this.flames.remove(i) //remove flame from list
endif
set i = i + 1
endloop
else
//individual flames burn out automatically because of their timers.
//after they burn out, we remove them from the list (see above).
//if there are no flames left (flames.size == 0), destroy this FireWall.
call this.destroy()
endif
endmethod
static method DamageAllFlames takes nothing returns nothing
local thistype fw = GetTimerData(GetExpiredTimer())
call fw.damageAllFlames()
endmethod
static method create takes unit caster, real targetX, real targetY, integer level returns thistype
local thistype fw = thistype.allocate()
local integer numFlames = GetNumFlames(level)
local real Dx = targetX - GetUnitX(caster) //Dx = x distance from caster to target
local real Dy = targetY - GetUnitY(caster) //Dy = y distance from caster to target
local real D = SquareRoot(Dx*Dx + Dy*Dy) //D = combined distance
local integer i
set fw.caster = caster
set fw.owner = GetOwningPlayer(caster)
set fw.centerX = targetX
set fw.centerY = targetY
set fw.normalX = -Dy/D //remember how to get a perpendicular line you take the negative reciprocal?
set fw.normalY = Dx/D //and to get a vector of length 1, you divide each component by the current length
set fw.level = level
set fw.flames = IntegerList.create() //initialize the IntegerList so it can store stuff.
set fw.totalWidth = numFlames/2 //width is from the center to the edge, remember?
set fw.flameSpawnTimer = NewTimer()
call SetTimerData(fw.flameSpawnTimer, fw)
if(numFlames/2*2 != numFlames)then //if numFlames is 3, for example, 3/2 =1.5 but 1.5 is converted to an
//integer by cutting off the stuff after the decimal. So, 3/2 = 1. 1*2 != 3, so 3 must be odd.
//Basically this checks if numFlames is odd.
call fw.flames.addLast(Flame.create(targetX, targetY, level))//create one flame at the center
set fw.currentWidth = 1
call TimerStart(fw.flameSpawnTimer, FLAME_SPAWN_INTERVAL, true, function thistype.AddFlamesOdd)
else
set fw.currentWidth = 0
call fw.addFlamesEven()//create two flames equally spaced from the center
call TimerStart(fw.flameSpawnTimer, FLAME_SPAWN_INTERVAL, true, function thistype.AddFlamesEven)
endif
set fw.damageTimer = NewTimer()
call SetTimerData(fw.damageTimer, fw)
call TimerStart(fw.damageTimer, DAMAGE_INTERVAL, true, function thistype.DamageAllFlames)
set fw.damagedTargets = InitHashtable()
return fw
endmethod
private method onDestroy takes nothing returns nothing
//clean up crap
call ReleaseTimer(this.damageTimer)
set this.damageTimer = null
call this.flames.destroy()
set this.flames = 0
set this.caster = null
call FlushChildHashtable(this.damagedTargets, this)
set this.damagedTargets = null
endmethod
endstruct
private function Actions takes nothing returns nothing
call FireWall.create(GetTriggerUnit(), GetSpellTargetX(), GetSpellTargetY(), GetUnitAbilityLevel(GetTriggerUnit(), SPELL_ID))
endfunction
private function Init takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trig, Condition(function Conditions))
call TriggerAddAction(trig, function Actions)
set destructableDamageRect = Rect(0.0, 0.0, 1.0, 1.0)
endfunction
endscope
//TESH.scrollpos=9
//TESH.alwaysfold=0
library_once TimerUtils initializer init
//*********************************************************************
//* TimerUtils (Blue flavor for 1.23b or later)
//* ----------
//*
//* To implement it , create a custom text trigger called TimerUtils
//* and paste the contents of this script there.
//*
//* To copy from a map to another, copy the trigger holding this
//* library to your map.
//*
//* (requires vJass) More scripts: htt://www.wc3campaigns.net
//*
//* For your timer needs:
//* * Attaching
//* * Recycling (with double-free protection)
//*
//* set t=NewTimer() : Get a timer (alternative to CreateTimer)
//* ReleaseTimer(t) : Relese a timer (alt to DestroyTimer)
//* SetTimerData(t,2) : Attach value 2 to timer
//* GetTimerData(t) : Get the timer's value.
//* You can assume a timer's value is 0
//* after NewTimer.
//*
//* Blue Flavor: Slower than the red flavor, it got a 408000 handle id
//* limit, which means that if more than 408000 handle ids
//* are used in your map, TimerUtils might fail, this
//* value is quite big and it is much bigger than the
//* timer limit in Red flavor.
//*
//********************************************************************
//==================================================================================================
globals
private hashtable hasht //I <3 blizz
endglobals
//It is dependent on jasshelper's recent inlining optimization in order to perform correctly.
function SetTimerData takes timer t, integer value returns nothing
call SaveInteger(hasht,0, GetHandleId(t), value)
endfunction
function GetTimerData takes timer t returns integer
return LoadInteger(hasht, 0, GetHandleId(t))
endfunction
//==========================================================================================
globals
private timer array tT
private integer tN = 0
private constant integer HELD=0x28829022
//use a totally random number here, the more improbable someone uses it, the better.
endglobals
//==========================================================================================
function NewTimer takes nothing returns timer
if (tN==0) then
set tT[0]=CreateTimer()
else
set tN=tN-1
endif
call SetTimerData(tT[tN],0)
return tT[tN]
endfunction
//==========================================================================================
function ReleaseTimer takes timer t returns nothing
if(t==null) then
debug call BJDebugMsg("Warning: attempt to release a null timer")
return
endif
if (tN==8191) then
debug call BJDebugMsg("Warning: Timer stack is full, destroying timer!!")
//stack is full, the map already has much more troubles than the chance of bug
call DestroyTimer(t)
else
call PauseTimer(t)
if(GetTimerData(t)==HELD) then
debug call BJDebugMsg("Warning: ReleaseTimer: Double free!")
return
endif
call SetTimerData(t,HELD)
set tT[tN]=t
set tN=tN+1
endif
endfunction
private function init takes nothing returns nothing
set hasht = InitHashtable()
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
/*TimedBuffEffects by MaskedPoptart
based off TimedHandles by TriggerHappy187
This is a library I threw together for the Firewall spell (and for fun).
Its sole purpose is to put special effects on units to imitate the effects created by buffs.
It has one public function:
function AddBuffEffectTarget takes string modelName, widget target, string attach, real duration returns nothing
It puts a special effect on a unit, and destroys the effect after the specified
amount of time. If the duration is 0, the effect will not expire until the unit dies.
If that unit already has an effect of the same model, on the same body part,
it will not place a new special effect, but will update the timer. If that unit dies, all the
special effects it has will be destroyed.
Feel free to use it for whatever you want. Edit it only if you need to and give credits to MaskedPoptart
for the original. I do not plan on releasing this as an individual system.
*/
library TimedEffects initializer Init requires TimerUtils, List
private struct EffectData
private effect effectVar
private widget target
private string modelName
private string attach
private timer tim
IntegerList list
static hashtable duplicateEffects = InitHashtable()
//this hashtable is used to prevent duplicates of the same effects in the same places on the same unit
private static method remove takes nothing returns nothing
local thistype d = GetTimerData(GetExpiredTimer())
call d.destroy()
endmethod
method onDestroy takes nothing returns nothing
call ReleaseTimer(this.tim)
call DestroyEffect(this.effectVar)
call SaveInteger(.duplicateEffects, (GetHandleId(this.target)-0x100000)/*
*/ * StringHash(this.modelName), StringHash(this.attach), 0)
set this.effectVar = null
set this.target = null
set this.tim = null
call this.list.remove(this.list.indexOf(this))
endmethod
static method create takes string modelName, widget target, string attach, real duration,/*
*/ IntegerList list returns thistype
local integer ID_target = GetHandleId(target)-0x100000
local integer SH_modelName = StringHash(modelName)
local integer SH_attach = StringHash(attach)
local thistype d = LoadInteger(.duplicateEffects, ID_target*SH_modelName, SH_attach)
if(d == 0)then
set d = thistype.allocate()
set d.effectVar = AddSpecialEffectTarget(modelName, target, attach)
set d.target = target
set d.modelName = modelName
set d.attach = attach
set d.tim = NewTimer()
set d.list = list
call list.addLast(d)
call SaveInteger(.duplicateEffects, ID_target*SH_modelName, SH_attach, d)
call SetTimerData(d.tim, d)
else
call PauseTimer(d.tim)
endif
if(duration != 0)then
call TimerStart(d.tim, duration, false, function thistype.remove)
endif
return d
endmethod
endstruct
private struct EffectTarget
widget target
IntegerList effectDataList //a list of all the effectData instances on this unit
static hashtable attachedData = InitHashtable()
//this hashtable is used to attach a struct of this type to the target
static method create takes string modelName, widget target, string attach, real duration returns thistype
local integer HI_target = GetHandleId(target)
local thistype d = LoadInteger(.attachedData, 0, HI_target)
local EffectData newEffect
if(d ==0)then
set d = thistype.allocate()
set d.effectDataList = IntegerList.create()
set d.target = target
call SaveInteger(.attachedData, 0, HI_target, d)
endif
set newEffect = EffectData.create(modelName, target, attach, duration, d.effectDataList)
return d
endmethod
method onDestroy takes nothing returns nothing
local EffectData currentEffectData
loop
exitwhen this.effectDataList.size == 0
set currentEffectData = EffectData(this.effectDataList[0])
call currentEffectData.destroy()
endloop
call this.effectDataList.destroy()
call SaveInteger(.attachedData, 0, GetHandleId(this.target), 0)
set this.target = null
endmethod
endstruct
function AddBuffEffectTarget takes string modelName, widget target, string attach, real duration returns nothing
call EffectTarget.create(modelName, target, attach, duration)
endfunction
private function DestroyUnitEffects takes nothing returns nothing
local unit killedUnit = GetTriggerUnit()
local EffectTarget et = LoadInteger(EffectTarget.attachedData, 0, GetHandleId(killedUnit))
if(et != 0)then
call et.destroy()
endif
endfunction
private function Init takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_DEATH)
call TriggerAddAction(trig, function DestroyUnitEffects)
endfunction
endlibrary
//TESH.scrollpos=0
//TESH.alwaysfold=0
library List
//==================================================================================
// List version 1.1
//----------------------------
// Use this version in your map.
//==================================================================================
// - made by MaskedPoptart
// - imitates the functionality of ArrayLists (from Java)
// using a hashtable.
//==================================================================================
// Basic Usage:
// set arr = IntegerList.create() - instantiate a List of integers
// arr.size - get the current number of elements
// call arr.addLast(5732) - add 5732 to the end of the list,
// increase .size by 1
// arr.removeLast() - remove the last element in the list,
// decrease .size by 1, return removed element
// arr.remove(6) - remove the 6th element, decrease .size by 1,
// return removed element, shift elements down
// arr[3] - get the element at index 3
// set arr[23] = 815 - replace the value at index 23 with 815
// call arr.clear() - remove all objects from the list
// call arr.destroy() - clear list and recycle the struct index
//
// WARNING: Most attempts to work with indexes <0 or >=.size will fail and
// generate an error message in debug mode. Returns default to 0 for integers/
// reals, null for handles, false for booleans, etc.
//
// LEAK WARNING: List does no automatic garbage collection. If a List
// is the only place you store a variable, make sure the variable will not leak when
// you remove it or replace it.
//===================================================================================
// Credits:
// - Vexorian for JassHelper
// - Vexorian for Table 3.0 (which I used for reference)
// - All the other people who worked on JassNewGenPack
//===================================================================================
globals
private constant integer MAX_INSTANCES = 8190
endglobals
//! textmacro List takes type, listType, typeName
struct $listType$List [MAX_INSTANCES]
private integer min = -1
private integer max = 0
private static hashtable contents = InitHashtable()
private static $type$ tempObject
private static $type$ DEFAULT_VALUE
private static method onInit takes nothing returns nothing
set thistype.DEFAULT_VALUE = Load$typeName$(thistype.contents,0,0)
endmethod
private method getActualIndex takes integer publicIndex returns integer
return publicIndex + this.min + 1
endmethod
private method getPublicIndex takes integer actualIndex returns integer
return actualIndex - this.min - 1
endmethod
private method isValidIndex takes integer actualIndex returns boolean
return actualIndex > this.min and actualIndex < this.max
endmethod
//---------------------USER METHODS------------------------
method operator size takes nothing returns integer
return this.max-this.min-1
endmethod
method addFirst takes $type$ object returns nothing
call Save$typeName$(this.contents, integer(this), this.min, object)
set this.min = this.min - 1
endmethod
method addLast takes $type$ object returns nothing
call Save$typeName$(this.contents, integer(this), this.max, object)
set this.max = this.max + 1
endmethod
method removeFirst takes nothing returns $type$
if(this.size>0)then
set this.min = this.min + 1
return Load$typeName$(this.contents, integer(this), this.min)
endif
debug call BJDebugMsg("ERROR: $listType$List \"removeFirst\" method. Cannot remove from an empty List.")
return this.DEFAULT_VALUE
endmethod
method removeLast takes nothing returns $type$
if(this.size>0)then
set this.max = this.max - 1
return Load$typeName$(this.contents, integer(this), this.max)
endif
debug call BJDebugMsg("ERROR: $listType$List \"removeLast\" method. Cannot remove from an empty List.")
return this.DEFAULT_VALUE
endmethod
method operator [] takes integer index returns $type$
local integer actualIndex = this.getActualIndex(index)
if(this.isValidIndex(actualIndex))then
return Load$typeName$(this.contents, integer(this), actualIndex)
endif
debug call BJDebugMsg("ERROR: $listType$List \"[]\" method. Index Out of Bounds ("+I2S(index)+").")
return this.DEFAULT_VALUE
endmethod
method operator []= takes integer index, $type$ object returns nothing
local integer actualIndex = this.getActualIndex(index)
if(this.isValidIndex(actualIndex))then
call Save$typeName$(this.contents, integer(this), actualIndex, object)
debug else
debug call BJDebugMsg("ERROR: $listType$List \"[]=\" method. Index Out of Bounds ("+I2S(index)+").")
endif
endmethod
method add takes integer index, $type$ object returns nothing
local integer i
local integer actualIndex = this.getActualIndex(index)
if(actualIndex > this.min and actualIndex <= this.max)then
if(actualIndex <= 0.5*(this.min+this.max))then
set actualIndex = actualIndex - 1
set i = this.min
loop
exitwhen i >= actualIndex
call Save$typeName$(this.contents, integer(this), i, Load$typeName$(this.contents, integer(this), i+1))
set i = i + 1
endloop
set this.min = this.min - 1
else
set i = this.max
loop
exitwhen i <= actualIndex
call Save$typeName$(this.contents, integer(this), i, Load$typeName$(this.contents, integer(this), i-1))
set i = i - 1
endloop
set this.max = this.max + 1
endif
call Save$typeName$(this.contents, integer(this), actualIndex, object)
debug else
debug call BJDebugMsg("ERROR: $listType$List \"add\" method. Index Out of Bounds ("+I2S(index)+").")
endif
endmethod
method remove takes integer index returns $type$
local integer i
local integer actualIndex = this.getActualIndex(index)
if(this.isValidIndex(actualIndex))then
set this.tempObject = Load$typeName$(this.contents, integer(this), actualIndex)
set i = actualIndex
if(actualIndex <= 0.5*(this.min+this.max))then
set this.min = this.min + 1
loop
exitwhen i <= this.min
call Save$typeName$(this.contents, integer(this), i, Load$typeName$(this.contents, integer(this), i-1))
set i = i - 1
endloop
else
set this.max = this.max - 1
loop
exitwhen i >= this.max
call Save$typeName$(this.contents, integer(this), i, Load$typeName$(this.contents, integer(this), i+1))
set i = i + 1
endloop
endif
return this.tempObject
endif
debug call BJDebugMsg("ERROR: $listType$List \"remove\" method. Index Out of Bounds ("+I2S(index)+").")
return this.DEFAULT_VALUE
endmethod
method clear takes nothing returns nothing
call FlushChildHashtable(this.contents, integer(this))
set this.min = -1
set this.max = 0
endmethod
method removeRange takes integer fromIndex, integer toIndex returns nothing
local integer i
local integer actualFromIndex = this.getActualIndex(fromIndex)
local integer actualToIndex = this.getActualIndex(toIndex-1)
if(this.isValidIndex(actualFromIndex))then
if(this.isValidIndex(actualToIndex) and toIndex>fromIndex)then
if(actualFromIndex-this.min < this.max-actualToIndex)then
set i = actualFromIndex
loop
set i = i - 1
exitwhen i<=this.min
call Save$typeName$(this.contents, integer(this), i-fromIndex+toIndex, Load$typeName$(this.contents, integer(this), i))
endloop
set this.min = this.min-fromIndex+toIndex
else
set i = actualToIndex
loop
set i = i + 1
exitwhen i>=this.max
call Save$typeName$(this.contents, integer(this), i+fromIndex-toIndex, Load$typeName$(this.contents, integer(this), i))
endloop
set this.max = this.max+fromIndex-toIndex
endif
debug else
debug call BJDebugMsg("ERROR: $listType$List \"removeRange\" method. Index Out of Bounds ("+I2S(toIndex)+").")
endif
debug else
debug call BJDebugMsg("ERROR: $listType$List \"removeRange\" method. Index Out of Bounds ("+I2S(fromIndex)+").")
endif
endmethod
method indexOf takes $type$ object returns integer
local integer i = this.min
loop
set i = i + 1
exitwhen i>=this.max
if(Load$typeName$(this.contents, integer(this), i) == object)then
return this.getPublicIndex(i)
endif
endloop
return -1
endmethod
method lastIndexOf takes $type$ object returns integer
local integer i = this.max
loop
set i = i - 1
exitwhen i<=this.min
if(Load$typeName$(this.contents, integer(this), i) == object)then
return this.getPublicIndex(i)
endif
endloop
return -1
endmethod
method swap takes integer index1, integer index2 returns nothing
local integer actualIndex1 = this.getActualIndex(index1)
local integer actualIndex2 = this.getActualIndex(index2)
if(this.isValidIndex(actualIndex1))then
if(this.isValidIndex(actualIndex2))then
set this.tempObject = Load$typeName$(this.contents, integer(this), actualIndex1)
call Save$typeName$(this.contents, integer(this), actualIndex1, Load$typeName$(this.contents, integer(this), actualIndex2))
call Save$typeName$(this.contents, integer(this), actualIndex2, this.tempObject)
debug else
debug call BJDebugMsg("ERROR: $listType$List \"swap\" method. Index Out of Bounds ("+I2S(index2)+").")
endif
debug else
debug call BJDebugMsg("ERROR: $listType$List \"swap\" method. Index Out of Bounds ("+I2S(index1)+").")
endif
endmethod
method exists takes integer index returns boolean
return index >= 0 and index < this.size
endmethod
method isEmpty takes nothing returns boolean
return this.max == 0
endmethod
//------------------END USER METHODS----------------------
private method onDestroy takes nothing returns nothing
call this.clear()
endmethod
endstruct
//! endtextmacro
//runtextmacro List( "type", "listType", "typeName" )
//type = type of object to store. must be exact.
//listType = prefix to the List struct name. can be whatever you want.
//ex: Timer --> TimerList
//typeName = suffix in Save, Load hashtable functions. must be exact.
//ex: Str --> LoadStr
//! runtextmacro List( "integer", "Integer", "Integer" )
// runtextmacro List( "string", "String", "Str" )
// runtextmacro List( "real", "Real", "Real" )
// runtextmacro List( "boolean", "Boolean", "Boolean" )
// runtextmacro List( "player", "Player", "PlayerHandle" )
// runtextmacro List( "unit", "Unit", "UnitHandle" )
// runtextmacro List( "item", "Item", "ItemHandle" )
// runtextmacro List( "widget", "Widget", "WidgetHandle" )
// runtextmacro List( "timer", "Timer", "TimerHandle" )
// runtextmacro List( "effect", "Effect", "EffectHandle" )
// runtextmacro List( "rect", "Rect", "RectHandle" )
// runtextmacro List( "group", "Group", "GroupHandle" )
// runtextmacro List( "force", "Force", "ForceHandle" )
// Add as many handle list types as you want, and comment out the ones you do not use
// so they do not take up unnecessary space in your map script.
endlibrary
//TESH.scrollpos=39
//TESH.alwaysfold=0
//*************************************************************
//TEST THE SPELL FIRST TO CONFIGURE ANYTHING BELOW THIS
//*************************************************************
function Trig_FS_Actions takes nothing returns nothing
set udg_SP_Unit = GetTriggerUnit()
call TriggerExecute( gg_trg_SP_Get )
endfunction
function FS_Ability takes nothing returns integer
return 'A00C'
//Raw code of the ability
endfunction
function FS_Animation takes nothing returns integer
return 2
//Animation index
endfunction
function FS_ChargeTime takes nothing returns real
return 0.
//Time to charge the attack
endfunction
function FS_DistanceM takes nothing returns real
return 150.
//Distance after the attack
endfunction
function FS_Effect1 takes nothing returns string
return "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl"
//Weapon effect
endfunction
function FS_Effect1AP takes nothing returns string
return "weapon"
//Weapon attach point
endfunction
function FS_Effect2 takes nothing returns string
return "war3mapImported\\CurseBolt.mdx"
//Movement effect
endfunction
function FS_Effect3 takes nothing returns string
return "Objects\\Spawnmodels\\Undead\\UndeadBlood\\UndeadBloodNecromancer.mdl"
//Blood effect
endfunction
function FS_Velocity takes nothing returns real
return 2500.
//Movement speed
endfunction
function FS_Range takes nothing returns real
return 125.
//Attack range
endfunction
function FS_AttackType takes nothing returns attacktype
return ATTACK_TYPE_MAGIC
//Attack type
endfunction
function FS_DamageType takes nothing returns damagetype
return DAMAGE_TYPE_NORMAL
//Damage type
endfunction
function FS_WeaponType takes nothing returns weapontype
return WEAPON_TYPE_METAL_MEDIUM_SLICE
//Weapon type
endfunction
function FS_Damage takes integer level returns real
return 130. * level + udg_SP_CurrentValue
//Damage per level
endfunction
function FS_RechargeEnergy takes nothing returns real
return 0.
//Time to recharge the energy
endfunction
function FS_TimerInterval takes nothing returns real
return 0.025
//FPS || Default = 0.025 (1 / 0.025 = 40 FPS)
endfunction
//*************************************************************
//TOUCH ANYTHING BELOW THIS ONLY IF YOU KNOW JASS
//*************************************************************
function FS_Distance takes unit c, unit tar returns real
return SquareRoot((GetUnitX(tar) - GetUnitX(c)) * (GetUnitX(tar) - GetUnitX(c)) + (GetUnitY(tar) - GetUnitY(c)) * (GetUnitY(tar) - GetUnitY(c)))
endfunction
function FS_Loop takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = GetHandleId(t)
local unit c = LoadUnitHandle(udg_FS_HashTable, i, 0)
local unit tar = LoadUnitHandle(udg_FS_HashTable, i, 1)
local integer level = LoadInteger(udg_FS_HashTable, i, 2)
local real ready = LoadReal(udg_FS_HashTable, i, 3)
local real distance = LoadReal(udg_FS_HashTable, i, 4)
local real angle = LoadReal(udg_FS_HashTable, i, 5)
local boolean finish = LoadBoolean(udg_FS_HashTable, i, 6)
local boolean attack = LoadBoolean(udg_FS_HashTable, i, 7)
local real interval = LoadReal(udg_FS_HashTable, i, 9)
local real wait = LoadReal(udg_FS_HashTable, i, 10)
local real x
local real y
local real int = FS_TimerInterval()
if distance < FS_DistanceM() and not IsTerrainPathable(GetUnitX(c), GetUnitY(c), PATHING_TYPE_WALKABILITY) == true then
if ready > int and not finish and not IsUnitType(c, UNIT_TYPE_DEAD) then
call SaveReal(udg_FS_HashTable, i, 3, ready - int)
else
call SaveBoolean(udg_FS_HashTable, i, 6, true)
endif
if finish then
set x = GetUnitX(c) + FS_Velocity() * int * Cos(angle * bj_DEGTORAD)
set y = GetUnitY(c) + FS_Velocity() * int * Sin(angle * bj_DEGTORAD)
call DestroyEffect(AddSpecialEffect(FS_Effect2(), x, y))
if distance > (0. - 10.) and not attack then
if FS_Distance(c, tar) <= FS_Range() then
call DestroyEffect(LoadEffectHandle(udg_FS_HashTable, i, 8))
call UnitDamageTarget(c, tar, FS_Damage(level), true, false, FS_AttackType(), FS_DamageType(), FS_WeaponType())
call SetUnitTimeScale(c, 0)
call SaveBoolean(udg_FS_HashTable, i, 7, true)
else
call LoadEffectHandle(udg_FS_HashTable, i, 8)
call SaveBoolean(udg_FS_HashTable, i, 7, true)
endif
endif
if attack then
call DestroyEffect(AddSpecialEffectTarget(FS_Effect3(), tar, "chest"))
call DestroyEffect(AddSpecialEffectTarget(FS_Effect3(), c, "weapon"))
endif
call SetUnitX(c, x)
call SetUnitY(c, y)
call SaveReal(udg_FS_HashTable, i, 4, distance + FS_Velocity() * int)
endif
else
if wait > int and attack then
call SaveReal(udg_FS_HashTable, i, 10, wait - int)
else
call SetUnitPathing(c, true)
call SetUnitTimeScale(c, 1)
call SetUnitAnimation(c, "stand")
call PauseUnit(c, false)
call PauseTimer(t)
call FlushChildHashtable(udg_FS_HashTable, i)
call DestroyTimer(t)
endif
endif
set c = null
set tar = null
set t = null
endfunction
function FS_Actions takes nothing returns boolean
local unit c
local unit tar
local integer level
local timer t
local integer i
local real int = FS_TimerInterval()
if GetSpellAbilityId() == FS_Ability() then
set c = GetTriggerUnit()
set tar = GetSpellTargetUnit()
set level = GetUnitAbilityLevel(c, FS_Ability())
set t = CreateTimer()
set i = GetHandleId(t)
call SaveAgentHandle(udg_FS_HashTable, i, 0, c)
call SaveAgentHandle(udg_FS_HashTable, i, 1, tar)
call SaveInteger(udg_FS_HashTable, i, 2, level)
call SaveReal(udg_FS_HashTable, i, 3, FS_ChargeTime())
call SaveReal(udg_FS_HashTable, i, 4, 0 - FS_Distance(c, tar))
call SaveReal(udg_FS_HashTable, i, 5, bj_RADTODEG * Atan2(GetUnitY(tar) - GetUnitY(c), GetUnitX(tar) - GetUnitX(c)))
call SaveBoolean(udg_FS_HashTable, i, 6, false)
call SaveBoolean(udg_FS_HashTable, i, 7, false)
call SaveAgentHandle(udg_FS_HashTable, i, 8, AddSpecialEffectTarget(FS_Effect1(), c, FS_Effect1AP()))
call SaveReal(udg_FS_HashTable, i, 9, 0)
call SaveReal(udg_FS_HashTable, i, 10, FS_RechargeEnergy())
call TimerStart(t, int, true, function FS_Loop)
call PauseUnit(c, true)
call SetUnitPathing(c, false)
call SetUnitAnimation(c, "stand")
call SetUnitAnimationByIndex(c, FS_Animation())
set c = null
set tar = null
set t = null
endif
return false
endfunction
function InitTrig_FS takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t, Condition(function FS_Actions))
set udg_FS_HashTable = InitHashtable()
set t = null
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
1. SPELL IMPORTING
1.1 In this spell we used some things from Object Editor
The list of them is:
a) Dummy ( UNIT ) - unit
b) Dummy ( ARROW ) - unit
c) Flame ( DUMMY ) - ability
d) Burning Arrow - ability
e) Flamestrike Effect - effect
f) Burning Arrow - buff
1.2 I used many variables in this spell, so to don`t copy the one by one go to
"File" -> "Preferences" -> and tick "Automaticly create unknown variables while pasting trigger data"
1.3 Now we just need these triggers:
a) Hashtable (you can just copy these actions into your map initialization trigger)
b) BA Init
c) BA Loop
BE SURE YOU HAVE ALL OF THESE THINGS ON YOUR MAP, ELSE SPELL WON`T WORK
2. FEW WORDS ABOUT WORKING OF THE SPELL
2.1 DISTANCE CALCULATING
I used a pretty different method of calculating a distance (THX to calex3, because I`ve had my own idea, but
it wasnt perfect at all, so I improved it a little bit, like it was in his spell "Power Hook")
So how is it working:
Every 0.03 second arrow moves by 25. In BA Init trigger I used calculating:
Distance = 20 + 10 x level of ability
so on first level it`s distance will be 750 (30*25)
To calculate your distance simply do such calculating:
x/25 = d
where x is your number and d is the result distance.
2.2 INSTANT DAMAGE
I haven`t done anything hard with this damage calculating, so I hope you will find out it by yourself.
2.3 DOT DAMAGE AND RANGE OF FLAMESTRIKES
Damage of flamestrikes can be set in Object Editor in Flame ( DUMMY ) spell right fields, as well the range of
flamestrikes.
2.4 THE DISTANCE BETWEEN FLAMESTRIKES
Currently I have the distance between flamestrikes to 125 (my counter of this is set to 5, so the BA Loop trigger will
have to run 5 times to cast a flamestrike, so again a little bit calculating:
25*5 = 125
If you want to change this, to cast it more/less often, simply change that 5 in condition
(Load 5 of (Key (Picked unit)) from BA_Hashtable) Equal to 5
//TESH.scrollpos=0
//TESH.alwaysfold=0
//=============================================================================
// Passive Polymorph
// By: scorpion182
//
// Gives a percent chance to turns a target enemy unit into a sheep.
//
//
//
// Spell Requires: Passive Polymorph ability
// Polymorph Dummy ability
// Dummy unit
//
// Implementation:
// Simply copy the forementioned requirements to your map, go through the
// options below and enjoy!
//=============================================================================
//Configuration Options:
//=============================================================================
constant function Dummy_Caster takes nothing returns integer
return 'e00B' // rawcode of Dummy Caster unit
endfunction
constant function PP_AbilId takes nothing returns integer
return 'A07U' // ability rawcode of Passive Polymorph ability
endfunction
constant function PP_Dummy_AbilId takes nothing returns integer
return 'A07S' // ability rawcode of Polymorph Dummy ability
endfunction
constant function PP_Chance takes integer lvl returns integer
return 1+3*lvl // % chance
endfunction
//Configuration end
//=============================================================================
function PP_Conditions takes nothing returns boolean
if GetUnitAbilityLevel(GetAttacker(),PP_AbilId())==0 then
return false
endif
if IsUnitIllusion(GetAttacker())==true then
return false
endif
if IsPlayerEnemy(GetOwningPlayer(GetAttacker()),GetOwningPlayer(GetTriggerUnit()))==false then
return false
endif
if GetUnitAbilityLevel(GetTriggerUnit(),'Bply')>0 then
return false
endif
return true
endfunction
function PP_Main takes nothing returns nothing
local unit target=GetTriggerUnit()
local unit caster=GetAttacker()
local unit dummy
if(GetRandomInt(1,100)<=PP_Chance(GetUnitAbilityLevel(caster,PP_AbilId()))) then
set dummy=CreateUnit(GetOwningPlayer(caster),Dummy_Caster(),GetUnitX(target),GetUnitY(target),0)
call UnitApplyTimedLife(dummy,'BTLF',1.0)
call UnitAddAbility(dummy,PP_Dummy_AbilId())
call SetUnitAbilityLevel(dummy,PP_Dummy_AbilId(),GetUnitAbilityLevel(caster,PP_AbilId()))
call IssueTargetOrder(dummy,"polymorph",target)
endif
set caster=null
set dummy=null
set target=null
endfunction
//===========================================================================
function InitTrig_Advanced_Evasion takes nothing returns nothing
set gg_trg_Advanced_Evasion = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ(gg_trg_Advanced_Evasion,EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_Advanced_Evasion,Condition(function PP_Conditions))
call TriggerAddAction( gg_trg_Advanced_Evasion, function PP_Main )
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
// CONFIGURATION
// Constants
// Main spell raw code
constant function SS_GetSpellID takes nothing returns integer
return 'A090'
endfunction
// Main projectile dummy raw code
constant function SS_DummyID takes nothing returns integer
return 'h00G'
endfunction
// Main projectile model effect
constant function SS_Sfx takes nothing returns string
return "Abilities\\Weapons\\SentinelMissile\\SentinelMissile.mdl"
endfunction
// Blood effect
constant function SS_Sfx1 takes nothing returns string
return "Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl"
endfunction
// Attachment point
constant function SS_AttachPoint takes nothing returns string
return "origin"
endfunction
// Movement interval
constant function SS_Interval takes nothing returns real
return 0.03125
endfunction
// Should a unit be hit only once or not?
// True = yes, a unit will be hit only once
// False = no, a unit can be hit multiple times
constant function SS_HitOnce takes nothing returns boolean
return false
endfunction
// Should smart homing be enabled?
// True = enable smart homing, the shuriken will change target if the current homed unit is dead
// False = disable smart homing
constant function SS_SmartHoming takes nothing returns boolean
return true
endfunction
// Filter valid units
function SS_FilterUnit takes unit caster, unit u returns boolean
return IsUnitEnemy(u, GetOwningPlayer(caster)) and GetWidgetLife(u) > 0.405 and GetUnitAbilityLevel(u, 'Avul') == 0 and not IsUnitType (u, UNIT_TYPE_MAGIC_IMMUNE) and not IsUnitType (u, UNIT_TYPE_STRUCTURE)
endfunction
// Get Abilities Level
function SS_SpellLvl takes unit caster returns integer
return GetUnitAbilityLevel (caster, SS_GetSpellID()) // Get the spell level of the caster
endfunction
// Level dependable values
// Main target damage
function SS_Damage takes integer level returns real
return 25 + level*100.
endfunction
// The damage change (%) for each target after the last
// Set to positive if you want the spell to deals lesser damage with each bounce
// Set to negative if you want the spell to deals greater damage with each bounce
function SS_DamageRate takes integer level returns real
return 11 + level*1.
endfunction
// Area of Effect
function SS_AoE takes integer level returns real
return 500 + level*100.
endfunction
// Number of bounces
function SS_Bounce takes integer level returns integer
return 2 + level
endfunction
// Projectile Speed
function SS_Speed takes integer level returns real
return (800. + level*150.)/(1/SS_Interval())
endfunction
// Attack - Damage - Weapon type
// Attack type
function SS_AttackType takes nothing returns attacktype
return ATTACK_TYPE_NORMAL
endfunction
// Damage type
function SS_DamageType takes nothing returns damagetype
return DAMAGE_TYPE_MAGIC
endfunction
// Weapon type
function SS_WeaponType takes nothing returns weapontype
return WEAPON_TYPE_METAL_MEDIUM_SLICE
endfunction
// END CONFIGURATION
// SPELL FUNCTIONS
// Here we create a list of units that can be picked from
function SS_MakeList takes nothing returns boolean
local unit u = GetFilterUnit()
local integer i = LoadInteger(udg_SS_Hashtable, -4, 0)
local integer ID = LoadInteger(udg_SS_Hashtable, -4, -3)
local boolean b = SS_FilterUnit(LoadUnitHandle(udg_SS_Hashtable, -4, -2), u) and u != LoadUnitHandle(udg_SS_Hashtable, -4, -1)
if not SS_HitOnce() then
if b then
set i = i + 1
call SaveUnitHandle(udg_SS_Hashtable, -4, i, u)
endif
else
if b and not IsUnitInGroup(u, LoadGroupHandle(udg_SS_Hashtable, ID, 6)) then
set i = i + 1
call SaveUnitHandle(udg_SS_Hashtable, -4, i, u)
endif
endif
call SaveInteger(udg_SS_Hashtable, -4, 0, i)
set u = null
return false
endfunction
// The loop where we index, deindex, and recycle everything
// This is also the main function of the spell
function SS_TimerLoop takes nothing returns nothing
local integer ID
local integer listmax = LoadInteger(udg_SS_Hashtable, -1, 0 )
local unit caster
local unit target
local unit dummy
local integer i = 0
local real x1
local real y1
local real x2
local real y2
local unit u
local real angle
local integer i1
local group g
local group g1
local integer i2
local integer i3
// Now we start looping through all the spell instances
loop
exitwhen i >= listmax
// First we load the saved values of a spell instance
set i = i + 1
set ID = LoadInteger(udg_SS_Hashtable, -1, i)
set caster = LoadUnitHandle(udg_SS_Hashtable, ID, 1)
set target = LoadUnitHandle(udg_SS_Hashtable, ID, 2)
set dummy = LoadUnitHandle(udg_SS_Hashtable, ID, 3)
set g1 = LoadGroupHandle(udg_SS_Hashtable, ID, 6)
set x1 = GetUnitX(dummy)
set y1 = GetUnitY(dummy)
set x2 = GetUnitX(target)
set y2 = GetUnitY(target)
set i1 = SS_SpellLvl(caster)
set i2 = LoadInteger (udg_SS_Hashtable, ID, 5)
if (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) < 900 then
if caster != target then
// The shuriken collided with an enemy so we will deal damage
call DestroyEffect (AddSpecialEffectTarget(SS_Sfx1(), target, SS_AttachPoint()))
call DestroyEffect (AddSpecialEffectTarget(SS_Sfx(), target, SS_AttachPoint()))
call UnitDamageTarget(caster, target, SS_Damage(i1)*Pow(1 - (SS_DamageRate(i1)/100), SS_Bounce(i1)-i2), false, false, SS_AttackType(), SS_DamageType(), SS_WeaponType())
if SS_HitOnce() then
call GroupAddUnit(g1,target)
endif
else
// The shuriken returned to the caster and thus we will destroy the dummy and begin deindexing and recycling
call KillUnit (dummy)
call DestroyEffect (AddSpecialEffect(SS_Sfx(), x1, y1))
call DestroyGroup (g1)
if listmax != i then
call SaveInteger(udg_SS_Hashtable, LoadInteger(udg_SS_Hashtable, -1 , listmax), 0, i)
call SaveInteger(udg_SS_Hashtable, -1, i, LoadInteger(udg_SS_Hashtable, -1, listmax))
call RemoveSavedInteger(udg_SS_Hashtable, -1, listmax)
set i = i -1
endif
set listmax = listmax -1
call SaveInteger(udg_SS_Hashtable, -1, 0, listmax )
if LoadInteger(udg_SS_Hashtable, 0, 0) + 1 == LoadInteger(udg_SS_Hashtable, 0, -1) then
call FlushChildHashtable(udg_SS_Hashtable, 0)
call PauseTimer(LoadTimerHandle(udg_SS_Hashtable, -2, 0))
else
call SaveInteger (udg_SS_Hashtable, 0, 0, LoadInteger(udg_SS_Hashtable, 0, 0) + 1)
call SaveInteger(udg_SS_Hashtable, 0, LoadInteger(udg_SS_Hashtable, 0, 0), ID)
endif
call FlushChildHashtable(udg_SS_Hashtable, ID)
endif
// Now we check how many bounces are left and choose the next target
if i2 > 1 then
set g = CreateGroup()
call SaveUnitHandle(udg_SS_Hashtable, -4, -1, target)
call SaveUnitHandle(udg_SS_Hashtable, -4, -2, caster)
call SaveInteger(udg_SS_Hashtable, -4, -3, ID)
call GroupEnumUnitsInRange(g, x1, y1, SS_AoE(i1), Condition(function SS_MakeList))
call DestroyGroup(g)
set g = null
set i3 = LoadInteger(udg_SS_Hashtable, -4, 0)
if i3 == 0 then
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, caster)
else
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, LoadUnitHandle(udg_SS_Hashtable, -4, GetRandomInt(1, i3)))
call SaveInteger(udg_SS_Hashtable, ID, 5, i2 - 1)
call FlushChildHashtable(udg_SS_Hashtable, -4)
endif
else
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, caster)
endif
else
if IsUnitType(caster, UNIT_TYPE_DEAD) then
call KillUnit (dummy)
call DestroyEffect (AddSpecialEffect(SS_Sfx(), x1, y1))
call DestroyGroup (g1)
if listmax != i then
call SaveInteger(udg_SS_Hashtable, LoadInteger(udg_SS_Hashtable, -1 , listmax), 0, i)
call SaveInteger(udg_SS_Hashtable, -1, i, LoadInteger(udg_SS_Hashtable, -1, listmax))
call RemoveSavedInteger(udg_SS_Hashtable, -1, listmax)
set i = i -1
endif
set listmax = listmax -1
call SaveInteger(udg_SS_Hashtable, -1, 0, listmax)
if LoadInteger(udg_SS_Hashtable, 0, 0) + 1 == LoadInteger(udg_SS_Hashtable, 0, -1) then
call FlushChildHashtable(udg_SS_Hashtable, 0)
call PauseTimer(LoadTimerHandle(udg_SS_Hashtable, -2, 0))
else
call SaveInteger (udg_SS_Hashtable, 0, 0, LoadInteger(udg_SS_Hashtable, 0, 0) + 1)
call SaveInteger(udg_SS_Hashtable, 0, LoadInteger(udg_SS_Hashtable, 0, 0), ID)
endif
call FlushChildHashtable(udg_SS_Hashtable, ID)
endif
if IsUnitType(target, UNIT_TYPE_DEAD) then
if SS_SmartHoming() then
set g = CreateGroup()
call SaveUnitHandle(udg_SS_Hashtable, -4, -1, target)
call SaveUnitHandle(udg_SS_Hashtable, -4, -2, caster)
call SaveInteger(udg_SS_Hashtable, -4, -3, ID)
call GroupEnumUnitsInRange(g, x1, y1, SS_AoE(i1), Condition(function SS_MakeList))
call DestroyGroup(g)
set g = null
set i3 = LoadInteger(udg_SS_Hashtable, -4, 0)
if i3 == 0 then
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, caster)
else
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, LoadUnitHandle(udg_SS_Hashtable, -4, GetRandomInt(1, i3)))
call SaveInteger(udg_SS_Hashtable, ID, 5, i2 - 1)
call FlushChildHashtable(udg_SS_Hashtable, -4)
endif
else
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, caster)
endif
else
// Move all the projectiles!
set angle = Atan2(y2-y1, x2-x1)
call SetUnitX(dummy, x1 + (SS_Speed(i1))*Cos(angle))
call SetUnitY(dummy, y1 + (SS_Speed(i1))*Sin(angle))
call SetUnitFacing(dummy, angle*bj_RADTODEG)
endif
endif
set caster = null
set target = null
set dummy = null
set g1 = null
endloop
endfunction
// Initiate function
function Trig_SS_Conditions takes nothing returns boolean
local unit caster
local unit target
local integer ID
local integer listmax
local real x1
local real y1
local real x2
local real y2
if GetSpellAbilityId() == SS_GetSpellID() then
set caster = GetTriggerUnit()
set target = GetSpellTargetUnit()
set x1 = GetUnitX(caster)
set y1 = GetUnitY(caster)
set x2 = GetUnitX(target)
set y2 = GetUnitY(target)
set ID = LoadInteger(udg_SS_Hashtable, 0, 0)
// Now we start indexing the spell
if ID>0 then
call SaveInteger(udg_SS_Hashtable, 0, 0, ID - 1)
set ID = LoadInteger (udg_SS_Hashtable, 0, ID)
else
set ID = LoadInteger(udg_SS_Hashtable, 0, -1) + 1
call SaveInteger(udg_SS_Hashtable, 0,-1, ID)
if ID == 1 then
call TimerStart (LoadTimerHandle(udg_SS_Hashtable, -2, 0), SS_Interval(), true, function SS_TimerLoop)
endif
endif
// Save the values related to this spell instance
call SaveUnitHandle(udg_SS_Hashtable, ID, 1, caster)
call SaveUnitHandle(udg_SS_Hashtable, ID, 2, target)
call SaveUnitHandle (udg_SS_Hashtable, ID, 3, CreateUnit(GetTriggerPlayer(), SS_DummyID(), x1, y1, Atan2(y2-y1, x2-x1)*bj_RADTODEG))
call SaveInteger(udg_SS_Hashtable, ID, 5, SS_Bounce(SS_SpellLvl(caster)))
call SaveGroupHandle(udg_SS_Hashtable, ID, 6, CreateGroup())
set listmax = LoadInteger (udg_SS_Hashtable, -1, 0) + 1
call SaveInteger( udg_SS_Hashtable, -1, 0, listmax )
call SaveInteger (udg_SS_Hashtable, -1, listmax, ID)
call SaveInteger (udg_SS_Hashtable, ID, 0, listmax)
set caster = null
set target = null
endif
return false
endfunction
//===========================================================================
function InitTrig_Slice_n_Dice takes nothing returns nothing
local trigger SS = CreateTrigger()
set udg_SS_Hashtable = InitHashtable ()
call SaveTimerHandle (udg_SS_Hashtable, -2, 0, CreateTimer())
call TriggerRegisterAnyUnitEventBJ(SS, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(SS, Condition( function Trig_SS_Conditions ) )
set SS = null
endfunction