Compare commits

...

2 Commits

Author SHA1 Message Date
Bouletmarc 3452fa405a V2.99 2024-05-03 18:54:13 -04:00
Bouletmarc b2a25d55cf V2.98 2024-05-03 17:43:07 -04:00
53 changed files with 6609 additions and 1707 deletions

View File

@ -342,14 +342,14 @@ public class Baal
}
//START CASTING IN ADVANCE
if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > 6)
if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > CharConfig.BaalWavesCastDelay)
{
Form1_0.Battle_0.SetSkills();
Form1_0.Battle_0.CastSkillsNoMove();
}
//STOP CASTING ERROR DETECTING MOBS/BAAL MOVED
/*if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > 25)
if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > 25)
{
TimeSinceLastWaveDone = DateTime.MaxValue;
TimeSinceLastWaveSet = false;
@ -369,7 +369,7 @@ public class Baal
CheckingThroneBackMode = 0;
return;
}
}*/
}
//STOP CASTING
if (Form1_0.MobsStruc_0.GetMobs("", "", true, 30, IgnoredMobs))

View File

@ -13,8 +13,13 @@ public class BaalLeech
Form1 Form1_0;
//##############
//EXTRAS FEATURES
public bool BaalLeechFight = false;
//##############
public int CurrentStep = 0;
public int MaxGameTimeToEnter = (3 * 60); //3mins
public int MaxGameTimeToEnter = CharConfig.MaxTimeEnterGame; //3mins
public int MaxTimeWaitedForTP = (2 * 60); //2mins
public int TimeWaitedForTP = 0;
public bool PrintedInfos = false;
@ -196,7 +201,7 @@ public class BaalLeech
if (IsPortalAtGoodLocation())
{
Form1_0.Battle_0.CastDefense();
Form1_0.WaitDelay(600);
Form1_0.WaitDelay(CharConfig.LeechEnterTPDelay);
WaitedEnteringPortal = true;
}
else
@ -329,7 +334,8 @@ public class BaalLeech
else
{
//Form1_0.Town_0.GetCorpse();
Form1_0.Battle_0.DoBattleScript(10);
if (!BaalLeechFight) Form1_0.Battle_0.DoBattleScript(10);
else Form1_0.Battle_0.DoBattleScript(30);
}
//detect last wave

View File

@ -139,21 +139,15 @@ public class Chaos
}
//####
if (!FastChaos)
if (Form1_0.Mover_0.MoveToLocation(EntrancePos.X, EntrancePos.Y))
{
if (Form1_0.Mover_0.MoveToLocation(EntrancePos.X, EntrancePos.Y))
{
if (Form1_0.PublicGame && !Form1_0.Town_0.TPSpawned) Form1_0.Town_0.SpawnTP();
Form1_0.Town_0.TPSpawned = false;
if (Form1_0.PublicGame && !Form1_0.Town_0.TPSpawned) Form1_0.Town_0.SpawnTP();
if (!Form1_0.Town_0.TPSpawned) Form1_0.Battle_0.CastDefense();
Form1_0.Town_0.TPSpawned = false;
BufferPathFindingMoveSize = Form1_0.PathFinding_0.AcceptMoveOffset;
Form1_0.PathFinding_0.AcceptMoveOffset = 15;
BufferPathFindingMoveSize = Form1_0.PathFinding_0.AcceptMoveOffset;
Form1_0.PathFinding_0.AcceptMoveOffset = 15;
CurrentStep++;
}
}
else
{
CurrentStep++;
}
}
@ -193,14 +187,14 @@ public class Chaos
if (CurrentSealPos.Y == 5275) SealType = 1;
else SealType = 2;
if (SealType == 1) Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7691, Y = 5292 }, 4, !FastChaos);
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7695, Y = 5316 }, 4, !FastChaos);
if (SealType == 1) Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7691, Y = 5292 }, 4, true);
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7695, Y = 5316 }, 4, true);
Form1_0.SetGameStatus("WAITING VIZIER " + (TryCountWaitingUniqueBoss + 1) + "/1");
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Grand Vizier of Chaos", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 2)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Grand Vizier of Chaos", false, 200, new List<long>());
@ -252,12 +246,12 @@ public class Chaos
Form1_0.Battle_0.CastDefense();
Form1_0.InventoryStruc_0.DumpBadItemsOnGround();
MovedToTPPos = true;
Form1_0.PathFinding_0.MoveToObject("DiabloSeal5", 4, !FastChaos);
Form1_0.PathFinding_0.MoveToObject("DiabloSeal5", 4, true);
}
else
{
if (!MovedToTPPos) Form1_0.PathFinding_0.MoveToThisPos(TPPos, 4, !FastChaos);
else Form1_0.PathFinding_0.MoveToObject("DiabloSeal5", 4, !FastChaos);
if (!MovedToTPPos) Form1_0.PathFinding_0.MoveToThisPos(TPPos, 4, true);
else Form1_0.PathFinding_0.MoveToObject("DiabloSeal5", 4, true);
}
}
}
@ -283,7 +277,7 @@ public class Chaos
}
else
{
Form1_0.PathFinding_0.MoveToObject("DiabloSeal4", 4, !FastChaos);
Form1_0.PathFinding_0.MoveToObject("DiabloSeal4", 4, true);
}
}
@ -323,17 +317,17 @@ public class Chaos
if (SealType == 1)
{
Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7794, Y = 5227 }, 4, !FastChaos);
Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7794, Y = 5227 }, 4, true);
//NTM_MoveTo(108, 7797, 5201);
//for (int i = 0; i < 3; i += 1) NTM_TeleportTo(7794, 5227);
}
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7798, Y = 5186 }, 4, !FastChaos);
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7798, Y = 5186 }, 4, true);
Form1_0.SetGameStatus("WAITING LORD DE SEIS " + (TryCountWaitingUniqueBoss + 1) + "/1");
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Lord De Seis", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 2)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Lord De Seis", false, 200, new List<long>());
@ -381,7 +375,7 @@ public class Chaos
}
else
{
Form1_0.PathFinding_0.MoveToObject("DiabloSeal3", 4, !FastChaos);
Form1_0.PathFinding_0.MoveToObject("DiabloSeal3", 4, true);
}
}
@ -406,7 +400,7 @@ public class Chaos
}
else
{
Form1_0.PathFinding_0.MoveToObject("DiabloSeal2", 4, !FastChaos);
Form1_0.PathFinding_0.MoveToObject("DiabloSeal2", 4, true);
}
}
@ -440,13 +434,13 @@ public class Chaos
else SealType = 2;
if (SealType == 1) SealType = 1; // temp
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7933, Y = 5299 }, 4, !FastChaos);
else Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 7933, Y = 5299 }, 4, true);
Form1_0.SetGameStatus("WAITING INFECTOR " + (TryCountWaitingUniqueBoss + 1) + "/1");
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Winged Death", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 2)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Winged Death", false, 200, new List<long>());
@ -498,15 +492,15 @@ public class Chaos
}
else
{
Form1_0.PathFinding_0.MoveToObject("DiabloSeal1", 4, !FastChaos);
Form1_0.PathFinding_0.MoveToObject("DiabloSeal1", 4, true);
}
}
if (CurrentStep == 8)
{
if (Form1_0.PathFinding_0.MoveToThisPos(DiabloSpawnPos, 4, !FastChaos))
if (Form1_0.PathFinding_0.MoveToThisPos(DiabloSpawnPos, 4, true))
{
//Form1_0.PathFinding_0.MoveToThisPos(DiabloSpawnPos, 4, !FastChaos);
//Form1_0.PathFinding_0.MoveToThisPos(DiabloSpawnPos, 4, true);
Form1_0.Battle_0.CastDefense();
CurrentStep++;
}

View File

@ -12,7 +12,7 @@ public class ChaosLeech
Form1 Form1_0;
public int CurrentStep = 0;
public int MaxGameTimeToEnter = (4 * 60); //6mins
public int MaxGameTimeToEnter = CharConfig.MaxTimeEnterGame; //6mins
public int MaxTimeWaitedForTP = (2 * 60) * 2; //2mins
public int TimeWaitedForTP = 0;
public bool PrintedInfos = false;
@ -196,7 +196,7 @@ public class ChaosLeech
}
else
{
Form1_0.WaitDelay(450);
Form1_0.WaitDelay(CharConfig.LeechEnterTPDelay);
TimeWaitedForTP++;
}
}

View File

@ -141,7 +141,7 @@ public class Mephisto
}
}
Form1_0.WaitDelay(800);
Form1_0.WaitDelay(CharConfig.MephistoRedPortalEnterDelay);
Form1_0.Town_0.FastTowning = false;
Form1_0.Town_0.UseLastTP = false;

View File

@ -138,7 +138,7 @@ public class AndarielRush
if (Form1_0.Mover_0.MoveToLocation(22561, 9553))
{
DetectedBoss = false;
Form1_0.WaitDelay(100);
//Form1_0.WaitDelay(100);
CurrentStep++;
}
}

View File

@ -228,7 +228,7 @@ public class BaalRush
}
//START CASTING IN ADVANCE
if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > 3)
if ((DateTime.Now - TimeSinceLastWaveDone).TotalSeconds > CharConfig.BaalWavesCastDelay)
{
Form1_0.Battle_0.SetSkills();
Form1_0.Battle_0.CastSkillsNoMove();
@ -339,7 +339,7 @@ public class BaalRush
{
Form1_0.SetGameStatus("MOVING TO BAAL");
Form1_0.PathFinding_0.MoveToThisPos(new Position { X = 15134, Y = 5927 });
Form1_0.WaitDelay(50); //wait a bit to detect baal
//Form1_0.WaitDelay(50); //wait a bit to detect baal
CurrentStep++;
}
@ -357,22 +357,11 @@ public class BaalRush
}
else
{
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
Form1_0.ItemsStruc_0.GrabAllItemsForGold();
Form1_0.Potions_0.CanUseSkillForRegen = true;
//Form1_0.LeaveGame(true);
Form1_0.Town_0.FastTowning = false;
Form1_0.Town_0.UseLastTP = false;
ScriptDone = true;
if (Form1_0.Battle_0.EndBossBattle())
{
ScriptDone = true;
}
}
}
else

View File

@ -195,7 +195,7 @@ public class ChaosRush
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Grand Vizier of Chaos", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 5)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Grand Vizier of Chaos", false, 200, new List<long>());
@ -301,7 +301,7 @@ public class ChaosRush
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Lord De Seis", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 5)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Lord De Seis", false, 200, new List<long>());
@ -410,7 +410,7 @@ public class ChaosRush
bool UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Infector of Souls", false, 200, new List<long>());
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < 5)
while (!UniqueDetected && (DateTime.Now - StartTimeUniqueBossWaiting).TotalSeconds < CharConfig.ChaosWaitingSealBossDelay)
{
UniqueDetected = Form1_0.MobsStruc_0.GetMobs("getSuperUniqueName", "Infector of Souls", false, 200, new List<long>());
@ -538,23 +538,10 @@ public class ChaosRush
Form1_0.Battle_0.DoBattleScript(15);
}
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
Form1_0.ItemsStruc_0.GrabAllItemsForGold();
Form1_0.Potions_0.CanUseSkillForRegen = true;
Form1_0.PathFinding_0.AcceptMoveOffset = BufferPathFindingMoveSize;
Form1_0.Town_0.UseLastTP = false;
Form1_0.Town_0.FastTowning = false;
ScriptDone = true;
if (Form1_0.Battle_0.EndBossBattle())
{
ScriptDone = true;
}
return;
//Form1_0.LeaveGame(true);
}

View File

@ -229,22 +229,11 @@ public class DurielRush
}
else
{
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
Form1_0.ItemsStruc_0.GrabAllItemsForGold();
Form1_0.Potions_0.CanUseSkillForRegen = true;
Form1_0.Town_0.UseLastTP = false;
Form1_0.Town_0.FastTowning = false;
ScriptDone = true;
if (Form1_0.Battle_0.EndBossBattle())
{
ScriptDone = true;
}
return;
//Form1_0.LeaveGame(true);
}

View File

@ -154,42 +154,34 @@ public class MephistoRush
}
else
{
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
Form1_0.ItemsStruc_0.GrabAllItemsForGold();
Form1_0.Potions_0.CanUseSkillForRegen = true;
//Position ThisFinalPosition = Form1_0.MapAreaStruc_0.GetPositionOfObject("object", "portal", 102 - 1, new List<int>() { });
//if (Form1_0.Mover_0.MoveToLocation(ThisFinalPosition.X, ThisFinalPosition.Y))
while (Form1_0.PlayerScan_0.levelNo == (int)Enums.Area.DuranceOfHateLevel3)
if (Form1_0.Battle_0.EndBossBattle())
{
if (Form1_0.Mover_0.MoveToLocation(17601, 8070))
//Position ThisFinalPosition = Form1_0.MapAreaStruc_0.GetPositionOfObject("object", "portal", 102 - 1, new List<int>() { });
//if (Form1_0.Mover_0.MoveToLocation(ThisFinalPosition.X, ThisFinalPosition.Y))
while (Form1_0.PlayerScan_0.levelNo == (int)Enums.Area.DuranceOfHateLevel3)
{
Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, 17601, 8070);
//Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, ThisFinalPosition.X, ThisFinalPosition.Y);
if (Form1_0.Mover_0.MoveToLocation(17601, 8070))
{
Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, 17601, 8070);
//Position itemScreenPos = Form1_0.GameStruc_0.World2Screen(Form1_0.PlayerScan_0.xPosFinal, Form1_0.PlayerScan_0.yPosFinal, ThisFinalPosition.X, ThisFinalPosition.Y);
Form1_0.KeyMouse_0.MouseClicc_RealPos(itemScreenPos.X, itemScreenPos.Y - 15);
Form1_0.KeyMouse_0.MouseClicc_RealPos(itemScreenPos.X, itemScreenPos.Y - 15);
Form1_0.PlayerScan_0.GetPositions();
Form1_0.PlayerScan_0.GetPositions();
}
}
Form1_0.WaitDelay(CharConfig.MephistoRedPortalEnterDelay);
Form1_0.Town_0.FastTowning = false;
Form1_0.Town_0.UseLastTP = false;
ScriptDone = true;
return;
//Form1_0.LeaveGame(true);
}
Form1_0.WaitDelay(700);
Form1_0.Town_0.FastTowning = false;
Form1_0.Town_0.UseLastTP = false;
ScriptDone = true;
return;
//Form1_0.LeaveGame(true);
}
}
else

View File

@ -42,7 +42,7 @@ public class TerrorZones
return;
}
Form1_0.Town_0.ScriptTownAct = 5; //set to town act 5 when running this script
Form1_0.Town_0.ScriptTownAct = Form1_0.AreaScript_0.GetActFromArea(TerrorZonesAreas[CurrentTerrorZonesIndex]); //set to town act 5 when running this script
if (!Form1_0.Running || !Form1_0.GameStruc_0.IsInGame())
{
@ -55,6 +55,8 @@ public class TerrorZones
Form1_0.SetGameStatus("GO TO WP");
CurrentStep = 0;
//Console.WriteLine(TerrorZonesAreas[CurrentTerrorZonesIndex]);
if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.BloodMoor) Form1_0.PathFinding_0.MoveToNextArea(Enums.Area.BloodMoor);
else if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.SewersLevel1Act2) Form1_0.PathFinding_0.MoveToNextArea(Enums.Area.SewersLevel1Act2);
else if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.OuterSteppes) Form1_0.PathFinding_0.MoveToNextArea(Enums.Area.OuterSteppes);
@ -148,6 +150,11 @@ public class TerrorZones
Form1_0.PathFinding_0.MoveToExit(Enums.Area.TowerCellarLevel4);
Form1_0.PathFinding_0.MoveToExit(Enums.Area.TowerCellarLevel5);
}
else if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.Barracks)
{
Form1_0.Town_0.GoToWPArea(1, 5);
Form1_0.PathFinding_0.MoveToNextArea(Enums.Area.Barracks);
}
else if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.JailLevel1) Form1_0.Town_0.GoToWPArea(1, 6);
else if (TerrorZonesAreas[CurrentTerrorZonesIndex] == Area.JailLevel2)
{

View File

@ -163,5 +163,33 @@ public static class CharConfig
//public static int ScreenY = 1080;
//public static int ScreenYMenu = 180; //REMOVE 180 PIXEL FROM THE BOTTOM SCREEN TO NOT CLIC ANY BOTTOM MENU BUTTONS
//#######################################
//BOT DELAYS/ADVANCED SETTINGS
//#######################################
public static int MaxDelayNewGame = 250;
public static int WaypointEnterDelay = 350;
public static int MaxMercReliveTries = 3;
public static int MaxItemIDTries = 10;
public static int MaxItemGrabTries = 50;
public static int MaxItemStashTries = 6;
public static int StashFullTries = 15;
public static int MaxShopTries = 6;
public static int MaxRepairTries = 3;
public static int MaxGambleTries = 3;
public static int MaxBattleAttackTries = 8;
public static int TakeHPPotionDelay = 3500;
public static int TakeManaPotionDelay = 2500;
public static double OverallDelaysMultiplyer = 1.0;
public static int EndBattleGrabDelay = 5; //multiplyed over 10x (50 real Delay)
public static int MaxTimeEnterGame = 180;
public static int BaalWavesCastDelay = 6;
public static int ChaosWaitingSealBossDelay = 2;
public static int RecastBODelay = 180;
public static int TownSwitchAreaDelay = 2;
public static int PublicGameTPRespawnDelay = 180;
public static int PlayerMaxHPCheckDelay = 2000;
public static int LeechEnterTPDelay = 600;
public static int MephistoRedPortalEnterDelay = 800;
public static int CubeItemPlaceDelay = 16;
}

View File

@ -6,6 +6,7 @@ using System.Text;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Globalization;
public class SettingsLoader
{
@ -388,6 +389,34 @@ public class SettingsLoader
if (Splitted[0] == "KeyOpenInventory") AllLines[i] = "KeyOpenInventory=" + CharConfig.KeyOpenInventory;
if (Splitted[0] == "KeyForceMovement") AllLines[i] = "KeyForceMovement=" + CharConfig.KeyForceMovement;
if (Splitted[0] == "KeySwapWeapon") AllLines[i] = "KeySwapWeapon=" + CharConfig.KeySwapWeapon;
//###########################################
//Advanced Bot Settings
if (Splitted[0] == "MaxDelayNewGame") AllLines[i] = "MaxDelayNewGame=" + CharConfig.MaxDelayNewGame;
if (Splitted[0] == "WaypointEnterDelay") AllLines[i] = "WaypointEnterDelay=" + CharConfig.WaypointEnterDelay;
if (Splitted[0] == "MaxMercReliveTries") AllLines[i] = "MaxMercReliveTries=" + CharConfig.MaxMercReliveTries;
if (Splitted[0] == "MaxItemIDTries") AllLines[i] = "MaxItemIDTries=" + CharConfig.MaxItemIDTries;
if (Splitted[0] == "MaxItemGrabTries") AllLines[i] = "MaxItemGrabTries=" + CharConfig.MaxItemGrabTries;
if (Splitted[0] == "MaxItemStashTries") AllLines[i] = "MaxItemStashTries=" + CharConfig.MaxItemStashTries;
if (Splitted[0] == "StashFullTries") AllLines[i] = "StashFullTries=" + CharConfig.StashFullTries;
if (Splitted[0] == "MaxShopTries") AllLines[i] = "MaxShopTries=" + CharConfig.MaxShopTries;
if (Splitted[0] == "MaxRepairTries") AllLines[i] = "MaxRepairTries=" + CharConfig.MaxRepairTries;
if (Splitted[0] == "MaxGambleTries") AllLines[i] = "MaxGambleTries=" + CharConfig.MaxGambleTries;
if (Splitted[0] == "MaxBattleAttackTries") AllLines[i] = "MaxBattleAttackTries=" + CharConfig.MaxBattleAttackTries;
if (Splitted[0] == "TakeHPPotionDelay") AllLines[i] = "TakeHPPotionDelay=" + CharConfig.TakeHPPotionDelay;
if (Splitted[0] == "TakeManaPotionDelay") AllLines[i] = "TakeManaPotionDelay=" + CharConfig.TakeManaPotionDelay;
if (Splitted[0] == "EndBattleGrabDelay") AllLines[i] = "EndBattleGrabDelay=" + CharConfig.EndBattleGrabDelay;
if (Splitted[0] == "MaxTimeEnterGame") AllLines[i] = "MaxTimeEnterGame=" + CharConfig.MaxTimeEnterGame;
if (Splitted[0] == "BaalWavesCastDelay") AllLines[i] = "BaalWavesCastDelay=" + CharConfig.BaalWavesCastDelay;
if (Splitted[0] == "ChaosWaitingSealBossDelay") AllLines[i] = "ChaosWaitingSealBossDelay=" + CharConfig.ChaosWaitingSealBossDelay;
if (Splitted[0] == "RecastBODelay") AllLines[i] = "RecastBODelay=" + CharConfig.RecastBODelay;
if (Splitted[0] == "TownSwitchAreaDelay") AllLines[i] = "TownSwitchAreaDelay=" + CharConfig.TownSwitchAreaDelay;
if (Splitted[0] == "PublicGameTPRespawnDelay") AllLines[i] = "PublicGameTPRespawnDelay=" + CharConfig.PublicGameTPRespawnDelay;
if (Splitted[0] == "PlayerMaxHPCheckDelay") AllLines[i] = "PlayerMaxHPCheckDelay=" + CharConfig.PlayerMaxHPCheckDelay;
if (Splitted[0] == "LeechEnterTPDelay") AllLines[i] = "LeechEnterTPDelay=" + CharConfig.LeechEnterTPDelay;
if (Splitted[0] == "MephistoRedPortalEnterDelay") AllLines[i] = "MephistoRedPortalEnterDelay=" + CharConfig.MephistoRedPortalEnterDelay;
if (Splitted[0] == "CubeItemPlaceDelay") AllLines[i] = "CubeItemPlaceDelay=" + CharConfig.CubeItemPlaceDelay;
if (Splitted[0] == "OverallDelaysMultiplyer") AllLines[i] = "OverallDelaysMultiplyer=" + CharConfig.OverallDelaysMultiplyer;
}
}
@ -782,6 +811,8 @@ public class SettingsLoader
//Form1_0.ItemsAlert_0.PickItemsUnique = new string[AllNormal.Count];
//for (int i = 0; i < AllNormal.Count; i++) Form1_0.ItemsAlert_0.PickItemsUnique[i] = AllNormal[i];
Form1_0.ItemsAlert_0.CheckItemNames();
}
catch
{
@ -1405,6 +1436,34 @@ public class SettingsLoader
{
Enum.TryParse(Params[1], out CharConfig.KeySwapWeapon);
}
//###########################################
//Advanced Bot Settings
if (Params[0].Contains("MaxDelayNewGame")) CharConfig.MaxDelayNewGame = int.Parse(Params[1]);
if (Params[0].Contains("WaypointEnterDelay")) CharConfig.WaypointEnterDelay = int.Parse(Params[1]);
if (Params[0].Contains("MaxMercReliveTries")) CharConfig.MaxMercReliveTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxItemIDTries")) CharConfig.MaxItemIDTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxItemGrabTries")) CharConfig.MaxItemGrabTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxItemStashTries")) CharConfig.MaxItemStashTries = int.Parse(Params[1]);
if (Params[0].Contains("StashFullTries")) CharConfig.StashFullTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxShopTries")) CharConfig.MaxShopTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxRepairTries")) CharConfig.MaxRepairTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxGambleTries")) CharConfig.MaxGambleTries = int.Parse(Params[1]);
if (Params[0].Contains("MaxBattleAttackTries")) CharConfig.MaxBattleAttackTries = int.Parse(Params[1]);
if (Params[0].Contains("TakeHPPotionDelay")) CharConfig.TakeHPPotionDelay = int.Parse(Params[1]);
if (Params[0].Contains("TakeManaPotionDelay")) CharConfig.TakeManaPotionDelay = int.Parse(Params[1]);
if (Params[0].Contains("EndBattleGrabDelay")) CharConfig.EndBattleGrabDelay = int.Parse(Params[1]);
if (Params[0].Contains("MaxTimeEnterGame")) CharConfig.MaxTimeEnterGame = int.Parse(Params[1]);
if (Params[0].Contains("BaalWavesCastDelay")) CharConfig.BaalWavesCastDelay = int.Parse(Params[1]);
if (Params[0].Contains("ChaosWaitingSealBossDelay")) CharConfig.ChaosWaitingSealBossDelay = int.Parse(Params[1]);
if (Params[0].Contains("RecastBODelay")) CharConfig.RecastBODelay = int.Parse(Params[1]);
if (Params[0].Contains("TownSwitchAreaDelay")) CharConfig.TownSwitchAreaDelay = int.Parse(Params[1]);
if (Params[0].Contains("PublicGameTPRespawnDelay")) CharConfig.PublicGameTPRespawnDelay = int.Parse(Params[1]);
if (Params[0].Contains("PlayerMaxHPCheckDelay")) CharConfig.PlayerMaxHPCheckDelay = int.Parse(Params[1]);
if (Params[0].Contains("LeechEnterTPDelay")) CharConfig.LeechEnterTPDelay = int.Parse(Params[1]);
if (Params[0].Contains("MephistoRedPortalEnterDelay")) CharConfig.MephistoRedPortalEnterDelay = int.Parse(Params[1]);
if (Params[0].Contains("CubeItemPlaceDelay")) CharConfig.CubeItemPlaceDelay = int.Parse(Params[1]);
if (Params[0].Contains("OverallDelaysMultiplyer")) CharConfig.OverallDelaysMultiplyer = double.Parse(Params[1], System.Globalization.CultureInfo.InvariantCulture);
}
}
}

View File

@ -40,7 +40,7 @@ using static MapAreaStruc;
public partial class Form1 : Form
{
public string BotVersion = "V2.97";
public string BotVersion = "V2.99";
public string D2_LOD_113C_Path = "";
@ -188,8 +188,8 @@ public partial class Form1 : Form
public OverlayForm overlayForm;
public ScriptsLoader ScriptsLoader_0;
public TerrorZones TerrorZones_0;
public AreaScript AreaScript_0;
// REQUIRED CONSTS
const int PROCESS_QUERY_INFORMATION = 0x0400;
@ -351,6 +351,7 @@ public partial class Form1 : Form
Nihlatak_0 = new Nihlatak();
Frozenstein_0 = new Frozenstein();
TerrorZones_0 = new TerrorZones();
AreaScript_0 = new AreaScript();
AndarielRush_0 = new AndarielRush();
DarkWoodRush_0 = new DarkWoodRush();
@ -427,6 +428,7 @@ public partial class Form1 : Form
Nihlatak_0.SetForm1(Form1_0);
Frozenstein_0.SetForm1(Form1_0);
TerrorZones_0.SetForm1(Form1_0);
AreaScript_0.SetForm1(Form1_0);
AndarielRush_0.SetForm1(Form1_0);
DarkWoodRush_0.SetForm1(Form1_0);
@ -932,7 +934,7 @@ public partial class Form1 : Form
//PatternsScan_0.ScanUnitsNumber = 2600;
//PatternsScan_0.ScanUnitsNumber = 2400;
//PatternsScan_0.ScanUnitsNumber = 2048;
PatternsScan_0.ResetV1Scanning();
//PatternsScan_0.ResetV1Scanning();
PatternsScan_0.StartIndexItem_V2 = long.MaxValue; //UNITS SCAN V2
PatternsScan_0.StartIndexItemLast_V2 = long.MaxValue; //UNITS SCAN V2
Town_0.TriedToShopCount = 0;
@ -1015,18 +1017,33 @@ public partial class Form1 : Form
CurrentGameNumberSinceStart++;
SettingsLoader_0.SaveOthersSettings();
ItemsStruc_0.BadItemsOnCursorIDList = new List<long>();
ItemsStruc_0.BadItemsOnGroundPointerList = new List<long>();
ItemsStruc_0.AvoidItemsOnGroundPointerList = new List<long>();
ItemsStruc_0.BadItemsOnGroundPointerList = new Dictionary<string, bool>();
ItemsStruc_0.AvoidItemsOnGroundPointerList = new Dictionary<string, bool>();
SetDeadCount = false;
GameStruc_0.ChickenTry = 0;
MercStruc_0.MercOwnerID = 0;
Battle_0.TimeSinceLastCast = DateTime.MaxValue;
ItemsAlert_0.CheckItemNames();
//ItemsAlert_0.CheckItemNames();
ItemsAlert_0.RemoveNotPickingItems();
//##############################
MapAreaStruc_0.ScanMapStruc();
//pointer fix???
PointerError = false;
Form1_0.PatternsScan_0.GetUnitsScannedCount(1);
if (Form1_0.PatternsScan_0.ScannedItemsCount < 100)
{
method_1("Detected Poiters Error, Restarting Bot...", Color.Red);
HasPointers = false;
PointerError = true;
//PatternsScan_0.PatternScan();
}
}
public bool PointerError = false;
public void IncreaseDeadCount()
{
if (!SetDeadCount)
@ -1066,8 +1083,14 @@ public partial class Form1 : Form
{
GameStruc_0.SetNewGame();
SetNewGame();
//if (!CharConfig.IsRushing) WaitDelay(400); //wait here because 'loading' menu is not correct
if (!CharConfig.IsRushing) WaitDelay(250); //wait here because 'loading' menu is not correct
if (PointerError)
{
Startt();
/*SetProcessingTime();
if (Running) LoopTimer.Start();*/
return;
}
if (!CharConfig.IsRushing) WaitDelay(CharConfig.MaxDelayNewGame); //wait here because 'loading' menu is not correct
if (CharConfig.IsRushing) PlayerScan_0.ScanForLeecher();
//if (PatternsScan_0.StartIndexItem_V2 == long.MaxValue) PatternsScan_0.DetectFirstUnitPointer(); //UNITS SCAN V2
Town_0.GetCorpse();
@ -1082,8 +1105,14 @@ public partial class Form1 : Form
{
GameStruc_0.SetNewGame();
SetNewGame();
//if (!CharConfig.IsRushing) WaitDelay(400); //wait here because 'loading' menu is not correct
if (!CharConfig.IsRushing) WaitDelay(250); //wait here because 'loading' menu is not correct
if (PointerError)
{
Startt();
/*SetProcessingTime();
if (Running) LoopTimer.Start();*/
return;
}
if (!CharConfig.IsRushing) WaitDelay(CharConfig.MaxDelayNewGame); //wait here because 'loading' menu is not correct
if (CharConfig.IsRushing) PlayerScan_0.ScanForLeecher();
//if (PatternsScan_0.StartIndexItem_V2 == long.MaxValue) PatternsScan_0.DetectFirstUnitPointer(); //UNITS SCAN V2
Town_0.GetCorpse();
@ -1109,7 +1138,6 @@ public partial class Form1 : Form
SetProcessingTime();
if (Running) LoopTimer.Start();
return;
}
}
@ -1129,6 +1157,7 @@ public partial class Form1 : Form
//PlayerScan_0.ScanForLeecher();
//ItemsStruc_0.GetItems(true);
//overlayForm.SetAllOverlay();
//GameStruc_0.GetTerrorZones();
//Running = false;
//if (Running) LoopTimer.Start();
@ -1516,6 +1545,7 @@ public partial class Form1 : Form
if (!PrintedGameTime)
{
PatternsScan_0.ResetV1Scanning();
MapAreaStruc_0.AllMapData.Clear();
overlayForm.ClearAllOverlay();
GameStruc_0.LogGameTime();
@ -1825,8 +1855,8 @@ public partial class Form1 : Form
TimeSpan ThisTime = DateTime.Now - TimeStart;
int CurrentWait = 0;
//while (CurrentWait < DelayTime)
while (ThisTime.TotalMilliseconds < (DelayTime * 10))
int WaitingDelay = (int) ((DelayTime * 10.0) * CharConfig.OverallDelaysMultiplyer);
while (ThisTime.TotalMilliseconds < WaitingDelay)
{
SetProcessingTime();
Thread.Sleep(1);
@ -2024,7 +2054,7 @@ public partial class Form1 : Form
private void tabControl2_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl2.SelectedIndex == 0) ItemsStruc_0.DebugItems();
if (tabControl2.SelectedIndex == 1) Form1_0.MobsStruc_0.DebuggingMobs = true;
if (tabControl2.SelectedIndex == 1) { Form1_0.MobsStruc_0.DebuggingMobs = true; overlayForm.ShowMobs = true; }
if (tabControl2.SelectedIndex == 2) ObjectsStruc_0.DebugObjects();
if (tabControl2.SelectedIndex == 3) MapAreaStruc_0.DebugMapData();
if (tabControl2.SelectedIndex == 4) PathFinding_0.DebugMapCollision();

119
FormAdvancedSettings.Designer.cs generated Normal file
View File

@ -0,0 +1,119 @@

partial class FormAdvancedSettings
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAdvancedSettings));
this.dataGridViewAdvanced = new System.Windows.Forms.DataGridView();
this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.label20 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdvanced)).BeginInit();
this.SuspendLayout();
//
// dataGridViewAdvanced
//
this.dataGridViewAdvanced.AllowUserToAddRows = false;
this.dataGridViewAdvanced.AllowUserToDeleteRows = false;
this.dataGridViewAdvanced.AllowUserToResizeRows = false;
this.dataGridViewAdvanced.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridViewAdvanced.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewAdvanced.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column2});
this.dataGridViewAdvanced.EnableHeadersVisualStyles = false;
this.dataGridViewAdvanced.Location = new System.Drawing.Point(12, 37);
this.dataGridViewAdvanced.MultiSelect = false;
this.dataGridViewAdvanced.Name = "dataGridViewAdvanced";
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dataGridViewAdvanced.RowHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dataGridViewAdvanced.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
this.dataGridViewAdvanced.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
this.dataGridViewAdvanced.Size = new System.Drawing.Size(329, 212);
this.dataGridViewAdvanced.TabIndex = 15;
//
// Column2
//
this.Column2.HeaderText = "Value";
this.Column2.Name = "Column2";
//
// label20
//
this.label20.AutoSize = true;
this.label20.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label20.ForeColor = System.Drawing.Color.Blue;
this.label20.Location = new System.Drawing.Point(76, 6);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(193, 20);
this.label20.TabIndex = 14;
this.label20.Text = "Advanced Bot Settings";
//
// button2
//
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button2.ForeColor = System.Drawing.SystemColors.ControlText;
this.button2.Image = global::app.Properties.Resources.Save;
this.button2.Location = new System.Drawing.Point(293, 3);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(48, 29);
this.button2.TabIndex = 16;
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// FormAdvancedSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlDark;
this.ClientSize = new System.Drawing.Size(352, 256);
this.Controls.Add(this.button2);
this.Controls.Add(this.dataGridViewAdvanced);
this.Controls.Add(this.label20);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormAdvancedSettings";
this.Text = "BMBot - Advanced Settings";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormAdvancedSettings_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdvanced)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewAdvanced;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Button button2;
}

144
FormAdvancedSettings.cs Normal file
View File

@ -0,0 +1,144 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
public partial class FormAdvancedSettings : Form
{
Form1 Form1_0;
public FormAdvancedSettings(Form1 form1_1)
{
Form1_0 = form1_1;
InitializeComponent();
LoadSettings();
}
public void LoadSettings()
{
int RowsIndex = 0;
dataGridViewAdvanced.Rows.Clear();
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxDelayNewGame;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "New Game Delay (ms*10)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.WaypointEnterDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Waypoint Enter Delay (ms*10)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxMercReliveTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Merc Relive Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxItemIDTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Item ID Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxItemGrabTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Item Grab Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxItemStashTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Item Stash Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.StashFullTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Stash Full Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxShopTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Shop Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxRepairTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Repair Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxGambleTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Gamble Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxBattleAttackTries;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Battle Attack Tries";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.TakeHPPotionDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Take HP Potion Delay (ms)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.TakeManaPotionDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Take Mana Potion Delay (ms)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.OverallDelaysMultiplyer;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Overall Delays Multiplyer";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.EndBattleGrabDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "End Battle Grab Delay (ms*100)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MaxTimeEnterGame;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Max Game Time To Enter (sec)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.BaalWavesCastDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Baal Waves Cast Delay (sec)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.ChaosWaitingSealBossDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Chaos Waiting Seal Boss Delay (sec)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.RecastBODelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Recast BO Delay (sec)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.TownSwitchAreaDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Town Switch Area Delay (sec)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.PublicGameTPRespawnDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Public Game TP Respawn Delay (ms*10)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.PlayerMaxHPCheckDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Player MaxHP Check Delay (ms)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.LeechEnterTPDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Leech Enter TP Delay (ms*10)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.MephistoRedPortalEnterDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Mephisto Red Portal Enter Delay (ms*10)";
dataGridViewAdvanced.Rows.Add();
dataGridViewAdvanced.Rows[dataGridViewAdvanced.Rows.Count - 1].Cells[0].Value = CharConfig.CubeItemPlaceDelay;
dataGridViewAdvanced.Rows[RowsIndex++].HeaderCell.Value = "Cube Item Place Delay (ms*10)";
}
public void SaveSettings()
{
int RowsIndex = 0;
CharConfig.MaxDelayNewGame = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.WaypointEnterDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxMercReliveTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxItemIDTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxItemGrabTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxItemStashTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.StashFullTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxShopTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxRepairTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxGambleTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxBattleAttackTries = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.TakeHPPotionDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.TakeManaPotionDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.OverallDelaysMultiplyer = double.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString(), System.Globalization.CultureInfo.InvariantCulture);
CharConfig.EndBattleGrabDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MaxTimeEnterGame = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.BaalWavesCastDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.ChaosWaitingSealBossDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.RecastBODelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.TownSwitchAreaDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.PublicGameTPRespawnDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.PlayerMaxHPCheckDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.LeechEnterTPDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.MephistoRedPortalEnterDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
CharConfig.CubeItemPlaceDelay = int.Parse(dataGridViewAdvanced.Rows[RowsIndex++].Cells[0].Value.ToString());
}
private void FormAdvancedSettings_FormClosing(object sender, FormClosingEventArgs e)
{
SaveSettings();
}
private void button2_Click(object sender, EventArgs e)
{
SaveSettings();
}
}

3824
FormAdvancedSettings.resx Normal file

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,10 @@ partial class FormCharSettings
this.label1 = new System.Windows.Forms.Label();
this.comboBoxType = new System.Windows.Forms.ComboBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.comboBoxKeyForceMovement = new System.Windows.Forms.ComboBox();
this.label31 = new System.Windows.Forms.Label();
this.comboBoxKeyOpenInventory = new System.Windows.Forms.ComboBox();
this.label30 = new System.Windows.Forms.Label();
this.textBoxBattleCry = new System.Windows.Forms.ComboBox();
this.textBoxBattleOrder = new System.Windows.Forms.ComboBox();
this.textBoxBattleCommand = new System.Windows.Forms.ComboBox();
@ -97,6 +101,7 @@ partial class FormCharSettings
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.checkBoxTownMercDead = new System.Windows.Forms.CheckBox();
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.checkBoxKillOnlySuperUnique = new System.Windows.Forms.CheckBox();
this.checkBoxUseKeys = new System.Windows.Forms.CheckBox();
this.checkBoxClearAfterBoss = new System.Windows.Forms.CheckBox();
this.comboBoxAvoidImmune = new System.Windows.Forms.ComboBox();
@ -111,6 +116,7 @@ partial class FormCharSettings
this.buttonSaveAsChar = new System.Windows.Forms.Button();
this.buttonReload = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.comboBoxKeyWeaponSwap = new System.Windows.Forms.ComboBox();
this.label23 = new System.Windows.Forms.Label();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.panelGamble = new System.Windows.Forms.Panel();
@ -123,12 +129,6 @@ partial class FormCharSettings
this.panelHelpKeys = new System.Windows.Forms.Panel();
this.button2 = new System.Windows.Forms.Button();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.checkBoxKillOnlySuperUnique = new System.Windows.Forms.CheckBox();
this.comboBoxKeyOpenInventory = new System.Windows.Forms.ComboBox();
this.label30 = new System.Windows.Forms.Label();
this.comboBoxKeyForceMovement = new System.Windows.Forms.ComboBox();
this.label31 = new System.Windows.Forms.Label();
this.comboBoxKeyWeaponSwap = new System.Windows.Forms.ComboBox();
this.label32 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
@ -204,6 +204,42 @@ partial class FormCharSettings
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Skills Shortcuts Keys";
//
// comboBoxKeyForceMovement
//
this.comboBoxKeyForceMovement.FormattingEnabled = true;
this.comboBoxKeyForceMovement.Location = new System.Drawing.Point(121, 288);
this.comboBoxKeyForceMovement.Name = "comboBoxKeyForceMovement";
this.comboBoxKeyForceMovement.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyForceMovement.TabIndex = 46;
this.toolTip1.SetToolTip(this.comboBoxKeyForceMovement, "Set the Key to Force the Player Movement");
//
// label31
//
this.label31.AutoSize = true;
this.label31.Location = new System.Drawing.Point(10, 291);
this.label31.Name = "label31";
this.label31.Size = new System.Drawing.Size(111, 13);
this.label31.TabIndex = 45;
this.label31.Text = "Force Movement Key:";
//
// comboBoxKeyOpenInventory
//
this.comboBoxKeyOpenInventory.FormattingEnabled = true;
this.comboBoxKeyOpenInventory.Location = new System.Drawing.Point(121, 266);
this.comboBoxKeyOpenInventory.Name = "comboBoxKeyOpenInventory";
this.comboBoxKeyOpenInventory.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyOpenInventory.TabIndex = 44;
this.toolTip1.SetToolTip(this.comboBoxKeyOpenInventory, "Set the Key to Open the inventory");
//
// label30
//
this.label30.AutoSize = true;
this.label30.Location = new System.Drawing.Point(10, 269);
this.label30.Name = "label30";
this.label30.Size = new System.Drawing.Size(104, 13);
this.label30.TabIndex = 43;
this.label30.Text = "Open Inventory Key:";
//
// textBoxBattleCry
//
this.textBoxBattleCry.FormattingEnabled = true;
@ -873,6 +909,18 @@ partial class FormCharSettings
this.groupBox5.TabStop = false;
this.groupBox5.Text = "Extras";
//
// checkBoxKillOnlySuperUnique
//
this.checkBoxKillOnlySuperUnique.AutoSize = true;
this.checkBoxKillOnlySuperUnique.Location = new System.Drawing.Point(13, 147);
this.checkBoxKillOnlySuperUnique.Name = "checkBoxKillOnlySuperUnique";
this.checkBoxKillOnlySuperUnique.Size = new System.Drawing.Size(134, 17);
this.checkBoxKillOnlySuperUnique.TabIndex = 44;
this.checkBoxKillOnlySuperUnique.Text = "Kill only Unique\'s Mobs";
this.toolTip1.SetToolTip(this.checkBoxKillOnlySuperUnique, "Enable this will make the bot Kill only the Uniques Mobs while moving Thru Path (" +
"Exemple: Chaos, Cows, Etc..)");
this.checkBoxKillOnlySuperUnique.UseVisualStyleBackColor = true;
//
// checkBoxUseKeys
//
this.checkBoxUseKeys.AutoSize = true;
@ -1027,6 +1075,15 @@ partial class FormCharSettings
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// comboBoxKeyWeaponSwap
//
this.comboBoxKeyWeaponSwap.FormattingEnabled = true;
this.comboBoxKeyWeaponSwap.Location = new System.Drawing.Point(126, 346);
this.comboBoxKeyWeaponSwap.Name = "comboBoxKeyWeaponSwap";
this.comboBoxKeyWeaponSwap.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyWeaponSwap.TabIndex = 48;
this.toolTip1.SetToolTip(this.comboBoxKeyWeaponSwap, "Set the Key to Swap Weapons");
//
// label23
//
this.label23.AutoSize = true;
@ -1145,63 +1202,6 @@ partial class FormCharSettings
this.saveFileDialog1.Filter = "Char Settings|*.txt";
this.saveFileDialog1.Title = "Open Current Char Settings to a New File";
//
// checkBoxKillOnlySuperUnique
//
this.checkBoxKillOnlySuperUnique.AutoSize = true;
this.checkBoxKillOnlySuperUnique.Location = new System.Drawing.Point(13, 147);
this.checkBoxKillOnlySuperUnique.Name = "checkBoxKillOnlySuperUnique";
this.checkBoxKillOnlySuperUnique.Size = new System.Drawing.Size(136, 17);
this.checkBoxKillOnlySuperUnique.TabIndex = 44;
this.checkBoxKillOnlySuperUnique.Text = "Kill only Super Unique\'s";
this.toolTip1.SetToolTip(this.checkBoxKillOnlySuperUnique, "Enable this will make the bot Kill only the Super Uniques Mobs while moving Thru " +
"Path (Exemple: Chaos, Cows, Etc..)");
this.checkBoxKillOnlySuperUnique.UseVisualStyleBackColor = true;
//
// comboBoxKeyOpenInventory
//
this.comboBoxKeyOpenInventory.FormattingEnabled = true;
this.comboBoxKeyOpenInventory.Location = new System.Drawing.Point(121, 266);
this.comboBoxKeyOpenInventory.Name = "comboBoxKeyOpenInventory";
this.comboBoxKeyOpenInventory.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyOpenInventory.TabIndex = 44;
this.toolTip1.SetToolTip(this.comboBoxKeyOpenInventory, "Set the Key to Open the inventory");
//
// label30
//
this.label30.AutoSize = true;
this.label30.Location = new System.Drawing.Point(10, 269);
this.label30.Name = "label30";
this.label30.Size = new System.Drawing.Size(104, 13);
this.label30.TabIndex = 43;
this.label30.Text = "Open Inventory Key:";
//
// comboBoxKeyForceMovement
//
this.comboBoxKeyForceMovement.FormattingEnabled = true;
this.comboBoxKeyForceMovement.Location = new System.Drawing.Point(121, 288);
this.comboBoxKeyForceMovement.Name = "comboBoxKeyForceMovement";
this.comboBoxKeyForceMovement.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyForceMovement.TabIndex = 46;
this.toolTip1.SetToolTip(this.comboBoxKeyForceMovement, "Set the Key to Force the Player Movement");
//
// label31
//
this.label31.AutoSize = true;
this.label31.Location = new System.Drawing.Point(10, 291);
this.label31.Name = "label31";
this.label31.Size = new System.Drawing.Size(111, 13);
this.label31.TabIndex = 45;
this.label31.Text = "Force Movement Key:";
//
// comboBoxKeyWeaponSwap
//
this.comboBoxKeyWeaponSwap.FormattingEnabled = true;
this.comboBoxKeyWeaponSwap.Location = new System.Drawing.Point(126, 346);
this.comboBoxKeyWeaponSwap.Name = "comboBoxKeyWeaponSwap";
this.comboBoxKeyWeaponSwap.Size = new System.Drawing.Size(67, 21);
this.comboBoxKeyWeaponSwap.TabIndex = 48;
this.toolTip1.SetToolTip(this.comboBoxKeyWeaponSwap, "Set the Key to Swap Weapons");
//
// label32
//
this.label32.AutoSize = true;

View File

@ -108,22 +108,18 @@ public partial class FormItems : Form
}
else
{
comboBoxName.Items.Add("helm");
comboBoxName.Items.Add("gloves");
comboBoxName.Items.Add("boots");
comboBoxName.Items.Add("belt");
comboBoxName.Items.Add("ring");
comboBoxName.Items.Add("amulet");
comboBoxName.Items.Add("armor");
comboBoxName.Items.Add("circlet");
comboBoxName.Items.Add("gold");
comboBoxName.Items.Add("jewel");
foreach(var ThisDir in Form1_0.ItemsAlert_0.typeMapping)
{
comboBoxName.Items.Add(ThisDir.Key);
}
}
comboBoxName.SelectedIndex = 0;
}
public void LoadSettings()
{
Form1_0.SettingsLoader_0.LoadThisFileSettings(Form1_0.SettingsLoader_0.File_ItemsSettings);
listViewUnique.Items.Clear();
listViewKeys.Items.Clear();
listViewGems.Items.Clear();

185
FormSettings.Designer.cs generated
View File

@ -50,7 +50,7 @@ partial class FormSettings
System.Windows.Forms.ListViewItem listViewItem20 = new System.Windows.Forms.ListViewItem("Nihlatak");
System.Windows.Forms.ListViewItem listViewItem21 = new System.Windows.Forms.ListViewItem("Baal");
System.Windows.Forms.ListViewItem listViewItem22 = new System.Windows.Forms.ListViewItem("Baal Leech");
System.Windows.Forms.ListViewItem listViewItem23 = new System.Windows.Forms.ListViewItem("Terror Zones (NOT WORKING!)");
System.Windows.Forms.ListViewItem listViewItem23 = new System.Windows.Forms.ListViewItem("Terror Zones");
System.Windows.Forms.ListViewItem listViewItem24 = new System.Windows.Forms.ListViewItem("Waypoint Taker");
System.Windows.Forms.ListViewItem listViewItem25 = new System.Windows.Forms.ListViewItem("Dark Wood");
System.Windows.Forms.ListViewItem listViewItem26 = new System.Windows.Forms.ListViewItem("Tristram");
@ -96,7 +96,6 @@ partial class FormSettings
this.label1LeechName = new System.Windows.Forms.Label();
this.textBox1LeechName = new System.Windows.Forms.TextBox();
this.checkBoxShowOverlay = new System.Windows.Forms.CheckBox();
this.button2 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.buttonBaalApply = new System.Windows.Forms.Button();
@ -108,7 +107,6 @@ partial class FormSettings
this.buttonBaalAddMob = new System.Windows.Forms.Button();
this.buttonBaalClearMob = new System.Windows.Forms.Button();
this.label13 = new System.Windows.Forms.Label();
this.buttonReload = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.checkBoxOverlayShowMobs = new System.Windows.Forms.CheckBox();
this.checkBoxOverlayShowWP = new System.Windows.Forms.CheckBox();
@ -120,14 +118,12 @@ partial class FormSettings
this.checkBoxOverlayShowExits = new System.Windows.Forms.CheckBox();
this.checkBoxOverlayShowPath = new System.Windows.Forms.CheckBox();
this.checkBoxOverlayShowNPC = new System.Windows.Forms.CheckBox();
this.buttonOverlaySettings = new System.Windows.Forms.Button();
this.textBoxStartKey = new System.Windows.Forms.ComboBox();
this.comboBoxPauseResume = new System.Windows.Forms.ComboBox();
this.checkBoxLogOrangeError = new System.Windows.Forms.CheckBox();
this.textBoxSearchGame = new System.Windows.Forms.TextBox();
this.textBox2LeechName = new System.Windows.Forms.TextBox();
this.textBoxAvoidWords = new System.Windows.Forms.TextBox();
this.checkBoxFastChaos = new System.Windows.Forms.CheckBox();
this.button4 = new System.Windows.Forms.Button();
this.panelBaalFeature = new System.Windows.Forms.Panel();
this.groupBox2 = new System.Windows.Forms.GroupBox();
@ -149,6 +145,15 @@ partial class FormSettings
this.label19 = new System.Windows.Forms.Label();
this.panelChaosFeature = new System.Windows.Forms.Panel();
this.label18 = new System.Windows.Forms.Label();
this.checkBoxFastChaos = new System.Windows.Forms.CheckBox();
this.buttonOverlaySettings = new System.Windows.Forms.Button();
this.buttonReload = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.panelBaalLeech = new System.Windows.Forms.Panel();
this.checkBoxBaalLeechFightMobs = new System.Windows.Forms.CheckBox();
this.label20 = new System.Windows.Forms.Label();
this.button6 = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownRunNumber)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownMaxTime)).BeginInit();
@ -160,6 +165,7 @@ partial class FormSettings
this.panelOverlay.SuspendLayout();
this.groupBoxSearch.SuspendLayout();
this.panelChaosFeature.SuspendLayout();
this.panelBaalLeech.SuspendLayout();
this.SuspendLayout();
//
// listViewRunScripts
@ -536,19 +542,6 @@ partial class FormSettings
this.toolTip1.SetToolTip(this.checkBoxShowOverlay, "Show Graphics Overlay (Maphack, Bot Infos, Etc..)");
this.checkBoxShowOverlay.UseVisualStyleBackColor = true;
//
// button2
//
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button2.ForeColor = System.Drawing.SystemColors.ControlText;
this.button2.Image = global::app.Properties.Resources.Save;
this.button2.Location = new System.Drawing.Point(189, 6);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(48, 29);
this.button2.TabIndex = 13;
this.toolTip1.SetToolTip(this.button2, "Save current Settings");
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// label1
//
this.label1.AutoSize = true;
@ -654,19 +647,6 @@ partial class FormSettings
this.label13.Text = "!";
this.toolTip1.SetToolTip(this.label13, "Double Clic on a Run script to edit it\'s features (if there is any)");
//
// buttonReload
//
this.buttonReload.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.buttonReload.ForeColor = System.Drawing.SystemColors.ControlText;
this.buttonReload.Image = global::app.Properties.Resources.Load;
this.buttonReload.Location = new System.Drawing.Point(12, 6);
this.buttonReload.Name = "buttonReload";
this.buttonReload.Size = new System.Drawing.Size(34, 29);
this.buttonReload.TabIndex = 17;
this.toolTip1.SetToolTip(this.buttonReload, "Load/Import from a previous Settings File");
this.buttonReload.UseVisualStyleBackColor = true;
this.buttonReload.Click += new System.EventHandler(this.buttonReload_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(61, 219);
@ -788,17 +768,6 @@ partial class FormSettings
this.toolTip1.SetToolTip(this.checkBoxOverlayShowNPC, "Enable this to Kill Baal");
this.checkBoxOverlayShowNPC.UseVisualStyleBackColor = true;
//
// buttonOverlaySettings
//
this.buttonOverlaySettings.Image = global::app.Properties.Resources.Application;
this.buttonOverlaySettings.Location = new System.Drawing.Point(172, 595);
this.buttonOverlaySettings.Name = "buttonOverlaySettings";
this.buttonOverlaySettings.Size = new System.Drawing.Size(31, 25);
this.buttonOverlaySettings.TabIndex = 9;
this.toolTip1.SetToolTip(this.buttonOverlaySettings, "Edit Overlay Settings");
this.buttonOverlaySettings.UseVisualStyleBackColor = true;
this.buttonOverlaySettings.Click += new System.EventHandler(this.buttonOverlaySettings_Click);
//
// textBoxStartKey
//
this.textBoxStartKey.FormattingEnabled = true;
@ -854,17 +823,6 @@ partial class FormSettings
this.textBoxAvoidWords.TabIndex = 31;
this.toolTip1.SetToolTip(this.textBoxAvoidWords, "Add the Words you want to avoid entering the game");
//
// checkBoxFastChaos
//
this.checkBoxFastChaos.AutoSize = true;
this.checkBoxFastChaos.Location = new System.Drawing.Point(14, 33);
this.checkBoxFastChaos.Name = "checkBoxFastChaos";
this.checkBoxFastChaos.Size = new System.Drawing.Size(79, 17);
this.checkBoxFastChaos.TabIndex = 12;
this.checkBoxFastChaos.Text = "Fast Chaos";
this.toolTip1.SetToolTip(this.checkBoxFastChaos, "Enable this to perform a Fast Chaos (Only Kill Seals Boss)");
this.checkBoxFastChaos.UseVisualStyleBackColor = true;
//
// button4
//
this.button4.Location = new System.Drawing.Point(61, 82);
@ -1073,7 +1031,7 @@ partial class FormSettings
this.panelChaosFeature.Controls.Add(this.checkBoxFastChaos);
this.panelChaosFeature.Controls.Add(this.label18);
this.panelChaosFeature.Controls.Add(this.button4);
this.panelChaosFeature.Location = new System.Drawing.Point(523, 293);
this.panelChaosFeature.Location = new System.Drawing.Point(523, 268);
this.panelChaosFeature.Name = "panelChaosFeature";
this.panelChaosFeature.Size = new System.Drawing.Size(203, 114);
this.panelChaosFeature.TabIndex = 22;
@ -1090,12 +1048,120 @@ partial class FormSettings
this.label18.TabIndex = 12;
this.label18.Text = "Chaos Run Features";
//
// checkBoxFastChaos
//
this.checkBoxFastChaos.AutoSize = true;
this.checkBoxFastChaos.Location = new System.Drawing.Point(14, 33);
this.checkBoxFastChaos.Name = "checkBoxFastChaos";
this.checkBoxFastChaos.Size = new System.Drawing.Size(79, 17);
this.checkBoxFastChaos.TabIndex = 12;
this.checkBoxFastChaos.Text = "Fast Chaos";
this.toolTip1.SetToolTip(this.checkBoxFastChaos, "Enable this to perform a Fast Chaos (Only Kill Seals Boss)");
this.checkBoxFastChaos.UseVisualStyleBackColor = true;
//
// buttonOverlaySettings
//
this.buttonOverlaySettings.Image = global::app.Properties.Resources.Application;
this.buttonOverlaySettings.Location = new System.Drawing.Point(172, 595);
this.buttonOverlaySettings.Name = "buttonOverlaySettings";
this.buttonOverlaySettings.Size = new System.Drawing.Size(31, 25);
this.buttonOverlaySettings.TabIndex = 9;
this.toolTip1.SetToolTip(this.buttonOverlaySettings, "Edit Overlay Settings");
this.buttonOverlaySettings.UseVisualStyleBackColor = true;
this.buttonOverlaySettings.Click += new System.EventHandler(this.buttonOverlaySettings_Click);
//
// buttonReload
//
this.buttonReload.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.buttonReload.ForeColor = System.Drawing.SystemColors.ControlText;
this.buttonReload.Image = global::app.Properties.Resources.Load;
this.buttonReload.Location = new System.Drawing.Point(12, 6);
this.buttonReload.Name = "buttonReload";
this.buttonReload.Size = new System.Drawing.Size(34, 29);
this.buttonReload.TabIndex = 17;
this.toolTip1.SetToolTip(this.buttonReload, "Load/Import from a previous Settings File");
this.buttonReload.UseVisualStyleBackColor = true;
this.buttonReload.Click += new System.EventHandler(this.buttonReload_Click);
//
// button2
//
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button2.ForeColor = System.Drawing.SystemColors.ControlText;
this.button2.Image = global::app.Properties.Resources.Save;
this.button2.Location = new System.Drawing.Point(189, 6);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(48, 29);
this.button2.TabIndex = 13;
this.toolTip1.SetToolTip(this.button2, "Save current Settings");
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button5
//
this.button5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
this.button5.Location = new System.Drawing.Point(53, 6);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(131, 29);
this.button5.TabIndex = 29;
this.button5.Text = "Advanced Settings";
this.toolTip1.SetToolTip(this.button5, "Load/Import from a previous Settings File");
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// panelBaalLeech
//
this.panelBaalLeech.Controls.Add(this.checkBoxBaalLeechFightMobs);
this.panelBaalLeech.Controls.Add(this.label20);
this.panelBaalLeech.Controls.Add(this.button6);
this.panelBaalLeech.Location = new System.Drawing.Point(523, 388);
this.panelBaalLeech.Name = "panelBaalLeech";
this.panelBaalLeech.Size = new System.Drawing.Size(203, 114);
this.panelBaalLeech.TabIndex = 23;
this.panelBaalLeech.Visible = false;
//
// checkBoxBaalLeechFightMobs
//
this.checkBoxBaalLeechFightMobs.AutoSize = true;
this.checkBoxBaalLeechFightMobs.Location = new System.Drawing.Point(14, 33);
this.checkBoxBaalLeechFightMobs.Name = "checkBoxBaalLeechFightMobs";
this.checkBoxBaalLeechFightMobs.Size = new System.Drawing.Size(78, 17);
this.checkBoxBaalLeechFightMobs.TabIndex = 12;
this.checkBoxBaalLeechFightMobs.Text = "Fight Mobs";
this.toolTip1.SetToolTip(this.checkBoxBaalLeechFightMobs, "Enable this to fight mobs during the leech, if set to false it will fight mobs on" +
"ly nearby the leech spot\r\n");
this.checkBoxBaalLeechFightMobs.UseVisualStyleBackColor = true;
//
// label20
//
this.label20.AutoSize = true;
this.label20.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label20.ForeColor = System.Drawing.Color.Blue;
this.label20.Location = new System.Drawing.Point(27, 11);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(151, 13);
this.label20.TabIndex = 12;
this.label20.Text = "Baal Leech Run Features";
//
// button6
//
this.button6.Location = new System.Drawing.Point(61, 82);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(75, 23);
this.button6.TabIndex = 12;
this.button6.Text = "Apply";
this.toolTip1.SetToolTip(this.button6, "Apply and Leave this menu");
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button6_Click);
//
// FormSettings
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlDark;
this.ClientSize = new System.Drawing.Size(251, 691);
this.ClientSize = new System.Drawing.Size(250, 691);
this.Controls.Add(this.panelBaalLeech);
this.Controls.Add(this.button5);
this.Controls.Add(this.panelChaosFeature);
this.Controls.Add(this.groupBoxSearch);
this.Controls.Add(this.checkBoxLogOrangeError);
@ -1147,6 +1213,8 @@ partial class FormSettings
this.groupBoxSearch.PerformLayout();
this.panelChaosFeature.ResumeLayout(false);
this.panelChaosFeature.PerformLayout();
this.panelBaalLeech.ResumeLayout(false);
this.panelBaalLeech.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -1229,7 +1297,12 @@ partial class FormSettings
private System.Windows.Forms.TextBox textBoxAvoidWords;
private System.Windows.Forms.Label label17;
private System.Windows.Forms.Panel panelChaosFeature;
private System.Windows.Forms.CheckBox checkBoxFastChaos;
private System.Windows.Forms.Label label18;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.CheckBox checkBoxFastChaos;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Panel panelBaalLeech;
private System.Windows.Forms.CheckBox checkBoxBaalLeechFightMobs;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Button button6;
}

View File

@ -38,6 +38,9 @@ public partial class FormSettings : Form
panelChaosFeature.Visible = false;
panelChaosFeature.Location = new System.Drawing.Point(23, 197);
panelBaalLeech.Visible = false;
panelBaalLeech.Location = new System.Drawing.Point(23, 197);
LoadSettings();
}
@ -129,6 +132,8 @@ public partial class FormSettings : Form
listViewBaalLeaveOnMobs.Items.Add(item);
}
checkBoxBaalLeechFightMobs.Checked = Form1_0.BaalLeech_0.BaalLeechFight;
//###################
//SPECIALS CHAOS FEATURES
checkBoxFastChaos.Checked = Form1_0.Chaos_0.FastChaos;
@ -311,6 +316,8 @@ public partial class FormSettings : Form
Form1_0.Baal_0.LeaveIfMobsIsPresent_Count.Add(int.Parse(listViewBaalLeaveOnMobs.Items[i].SubItems[1].Text));
}
Form1_0.BaalLeech_0.BaalLeechFight = checkBoxBaalLeechFightMobs.Checked;
//###################
//SPECIALS CHAOS FEATURES
Form1_0.Chaos_0.FastChaos = checkBoxFastChaos.Checked;
@ -406,6 +413,10 @@ public partial class FormSettings : Form
checkBoxKillBaal.Checked = Form1_0.Baal_0.KillBaal;
panelBaalFeature.Visible = true;
}
else if (listViewRunScripts.SelectedItems[0].Text == "Baal Leech")
{
panelBaalLeech.Visible = true;
}
else if (listViewRunScripts.SelectedItems[0].Text == "Chaos")
{
panelChaosFeature.Visible = true;
@ -471,4 +482,15 @@ public partial class FormSettings : Form
{
panelChaosFeature.Visible = false;
}
private void button5_Click(object sender, EventArgs e)
{
FormAdvancedSettings FormAdvancedSettings_0 = new FormAdvancedSettings(Form1_0);
FormAdvancedSettings_0.ShowDialog();
}
private void button6_Click(object sender, EventArgs e)
{
panelBaalLeech.Visible = false;
}
}

View File

@ -460,7 +460,7 @@ public partial class OverlayForm : Form
{
if (Form1_0.ItemsStruc_0.IsGrabbingItemOnGround)
{
string ItemTxt = Form1_0.ItemsStruc_0.ItemNAAME + "(" + Form1_0.ItemsStruc_0.txtFileNo + "), Pos:" + Form1_0.ItemsStruc_0.itemx + ", " + Form1_0.ItemsStruc_0.itemy + " (tries:" + (Form1_0.ItemsStruc_0.TriesToPickItemCount + 1) + "/50)";
string ItemTxt = Form1_0.ItemsStruc_0.ItemNAAME + "(" + Form1_0.ItemsStruc_0.txtFileNo + "), Pos:" + Form1_0.ItemsStruc_0.itemx + ", " + Form1_0.ItemsStruc_0.itemy + " (tries:" + (Form1_0.ItemsStruc_0.TriesToPickItemCount + 1) + "/" + CharConfig.MaxItemGrabTries + ")";
DrawString(e, ItemTxt, drawFontBold, drawBrushWhite, 560, 910, true);
}
else if (Form1_0.Battle_0.DoingBattle || Form1_0.Battle_0.ClearingArea)

32
Scripts/AreaScript.cs Normal file
View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class AreaScript
{
Form1 Form1_0;
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
}
public int GetActFromArea(Enums.Area ThisArea)
{
int TownAct = 1;
if ((int)ThisArea >= 1 && (int)ThisArea < 40) TownAct = 1;
if ((int)ThisArea >= 40 && (int)ThisArea < 75) TownAct = 2;
if ((int)ThisArea >= 75 && (int)ThisArea < 103) TownAct = 3;
if ((int)ThisArea >= 103 && (int)ThisArea < 109) TownAct = 4;
if ((int)ThisArea >= 109) TownAct = 5;
return TownAct;
}
public bool IsThisTZAreaInSameAct(int DoingTZAreaAct, Enums.Area ThisTZArea)
{
return (GetActFromArea(ThisTZArea) == DoingTZAreaAct);
}
}

View File

@ -21,7 +21,6 @@ public class Battle
public int AttackNotRegisteredCount = 0;
public int MoveTryCount = 0;
public int MaxAttackTry = 8; //edit this after knowing we used attack correctly
public int MaxMoveTry = 5;
public bool FirstAttackCasted = false;
@ -50,16 +49,16 @@ public class Battle
public bool EndBossBattle()
{
Form1_0.KeyMouse_0.ReleaseKey(CharConfig.KeyForceMovement);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(5);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (!Form1_0.ItemsStruc_0.GetItems(true)) Form1_0.WaitDelay(CharConfig.EndBattleGrabDelay);
if (CharConfig.ClearAfterBoss)
{
@ -514,6 +513,8 @@ public class Battle
if (Form1_0.MobsStruc_0.GetMobs("", "", true, ClearingSize, IgnoredMobsPointer))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && (Enums.Area) Form1_0.PlayerScan_0.levelNo == Enums.Area.ThroneOfDestruction) Form1_0.Baal_0.TimeSinceLastWaveDone = DateTime.MaxValue;
DoingBattle = true;
SetBattleMoveAcceptOffset();
Form1_0.Mover_0.MoveAcceptOffset = 2;
@ -556,7 +557,7 @@ public class Battle
{
if (ClearingFullArea && (AllRooms_InArea.Count - IgnoredRooms_InArea.Count) > 0)
{
if ((DateTime.Now - TimeSinceLastCast).TotalMinutes > 3)
if ((DateTime.Now - TimeSinceLastCast).TotalSeconds > CharConfig.RecastBODelay)
{
CastDefense();
}
@ -643,6 +644,7 @@ public class Battle
if (Form1_0.MobsStruc_0.GetMobs("", "", true, MaxDistance, new List<long>()))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && (Enums.Area)Form1_0.PlayerScan_0.levelNo == Enums.Area.ThroneOfDestruction) Form1_0.Baal_0.TimeSinceLastWaveDone = DateTime.MaxValue;
DoingBattle = true;
SetBattleMoveAcceptOffset();
Form1_0.Mover_0.MoveAcceptOffset = 2;
@ -692,6 +694,7 @@ public class Battle
if (Form1_0.MobsStruc_0.GetMobs(LastMobType, LastMobName, false, 200, IgnoredIDList))
{
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && Form1_0.MobsStruc_0.MobsName == "BaalSubject5") Form1_0.Baal_0.Wave5Detected = true;
if (CharConfig.RunBaalScript && !Form1_0.Baal_0.ScriptDone && (Enums.Area)Form1_0.PlayerScan_0.levelNo == Enums.Area.ThroneOfDestruction) Form1_0.Baal_0.TimeSinceLastWaveDone = DateTime.MaxValue;
if (Form1_0.MobsStruc_0.MobsHP > 0)
{
DoingBattle = true;
@ -816,7 +819,7 @@ public class Battle
AttackNotRegisteredCount++;
//Form1_0.method_1("Attack not registered! " + AttackNotRegisteredCount + "/" + MaxAttackTry, Color.OrangeRed);
if (AttackNotRegisteredCount >= MaxAttackTry)
if (AttackNotRegisteredCount >= CharConfig.MaxBattleAttackTries)
{
AttackNotRegisteredCount = 0;
MoveTryCount++;

View File

@ -225,7 +225,7 @@ public class Cubing
if (CurrentRecipeItemInStashNumber[i] == 2) Form1_0.KeyMouse_0.MouseClicc(340, 200); //clic shared stash1
if (CurrentRecipeItemInStashNumber[i] == 3) Form1_0.KeyMouse_0.MouseClicc(450, 200); //clic shared stash2
if (CurrentRecipeItemInStashNumber[i] == 4) Form1_0.KeyMouse_0.MouseClicc(600, 200); //clic shared stash3
Form1_0.WaitDelay(16);
Form1_0.WaitDelay(CharConfig.CubeItemPlaceDelay);
//select the item
Dictionary<string, int> itemScreenPos = ConvertIndexToXY(CurrentRecipeItemLocations[i]);
@ -243,7 +243,7 @@ public class Cubing
if (Form1_0.StashStruc_0.CubeStashNumber == 2) Form1_0.KeyMouse_0.MouseClicc(340, 200); //clic shared stash1
if (Form1_0.StashStruc_0.CubeStashNumber == 3) Form1_0.KeyMouse_0.MouseClicc(450, 200); //clic shared stash2
if (Form1_0.StashStruc_0.CubeStashNumber == 4) Form1_0.KeyMouse_0.MouseClicc(600, 200); //clic shared stash3
Form1_0.WaitDelay(16);
Form1_0.WaitDelay(CharConfig.CubeItemPlaceDelay);
//clic on cube to send item to cube
itemScreenPos = ConvertIndexToXY(Form1_0.StashStruc_0.CubeIndex);

View File

@ -22,22 +22,19 @@ public class Gamble
public bool CanStillGamble()
{
string GambleThisItem = CharConfig.GambleItems[GambleType];
return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + 75000);
//GET THE VENDOR PRICE (NOT WORKING)
/*string GambleThisItem = CharConfig.GambleItems[GambleType];
if (Form1_0.ItemsStruc_0.GetShopItem(GambleThisItem, true))
{
return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + Form1_0.ItemsStruc_0.GetValuesFromStats(Enums.Attribute.Value));
}
}*/
//#######
/*if (GambleType == 0)
{
return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + 50000); //gamble ring
}
if (GambleType >= 1)
{
return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + 63000); //gamble ammy
}*/
return false;
//if (GambleType == 0) return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + 50000); //gamble ring
//if (GambleType >= 1) return (Form1_0.PlayerScan_0.PlayerGoldInStash >= CharConfig.GambleUntilGoldAmount + 63000); //gamble ammy
//return false;
}
public void RunGambleScript()

View File

@ -157,7 +157,7 @@ public class Potions
{
bool UsedPot = false;
TimeSpan ThisTimeCheck = DateTime.Now - LastTimeSinceUsedHPPot;
if (ThisTimeCheck.TotalMilliseconds > 3500)
if (ThisTimeCheck.TotalMilliseconds > CharConfig.TakeHPPotionDelay)
{
for (int i = 0; i < CharConfig.BeltPotTypeToHave.Length; i++)
{
@ -191,7 +191,7 @@ public class Potions
{
bool UsedPot = false;
TimeSpan ThisTimeCheck = DateTime.Now - LastTimeSinceUsedManaPot;
if (ThisTimeCheck.TotalMilliseconds > 2500)
if (ThisTimeCheck.TotalMilliseconds > CharConfig.TakeManaPotionDelay)
{
for (int i = 0; i < CharConfig.BeltPotTypeToHave.Length; i++)
{

View File

@ -120,7 +120,7 @@ public class Stash
if (TryStashCount >= 4)
{
RunningScriptCount++;
if (RunningScriptCount >= 15) StashFull = true;
if (RunningScriptCount >= CharConfig.StashFullTries) StashFull = true;
//StashFull = true; //##################################################
i = 40; //stash is full, dont try others items to stash
break;

View File

@ -24,10 +24,11 @@ public class Town
public int TriedToStashCount = 0;
public int TriedToGambleCount = 0;
public int TriedToShopCount = 0;
public int TriedToShopCount2 = 0;
public int TriedToRepairCount = 0;
public int TriedToMercCount = 0;
public int TriedToUseTPCount = 0;
public int CurrentScript = 0;
public int TriedToShopCount2 = 0;
public bool TownScriptDone = false;
public uint LastUsedTPID = 0;
@ -51,6 +52,7 @@ public class Town
TriedToGambleCount = 0;
TriedToShopCount = 0;
TriedToShopCount2 = 0;
TriedToRepairCount = 0;
TriedToMercCount = 0;
TriedToUseTPCount = 0;
Towning = false;
@ -62,7 +64,7 @@ public class Town
if (Form1_0.PublicGame)
{
DateTime StartWaitingChangeArea = DateTime.Now;
while (GetInTown() && (DateTime.Now - StartWaitingChangeArea).TotalSeconds < 2)
while (GetInTown() && (DateTime.Now - StartWaitingChangeArea).TotalSeconds < CharConfig.TownSwitchAreaDelay)
{
Form1_0.PlayerScan_0.GetPositions();
Form1_0.overlayForm.UpdateOverlay();
@ -70,9 +72,9 @@ public class Town
Form1_0.ItemsStruc_0.GetItems(false);
}
if ((DateTime.Now - StartWaitingChangeArea).TotalSeconds < 2)
if ((DateTime.Now - StartWaitingChangeArea).TotalSeconds < CharConfig.TownSwitchAreaDelay)
{
Form1_0.WaitDelay(300);
Form1_0.WaitDelay(CharConfig.PublicGameTPRespawnDelay);
Form1_0.Town_0.SpawnTP();
}
@ -279,53 +281,53 @@ public class Town
//ID Items
if (CurrentScript == 1)
{
if (!Form1_0.InventoryStruc_0.HasUnidItemInInventory() || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount < 50))
if (!Form1_0.InventoryStruc_0.HasUnidItemInInventory() || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount < CharConfig.MaxItemGrabTries))
{
CurrentScript++;
}
if (TriedToCainCount2 >= 10)
if (TriedToCainCount2 >= CharConfig.MaxItemIDTries)
{
CurrentScript++;
}
//Go see Cain if we cannot ID at shop
if (CharConfig.IDAtShop && Form1_0.Shop_0.HasUnidItem && TriedToCainCount2 < 10)
if (CharConfig.IDAtShop && Form1_0.Shop_0.HasUnidItem && TriedToCainCount2 < CharConfig.MaxItemIDTries)
{
Form1_0.SetGameStatus("TOWN-CAIN");
Form1_0.SetGameStatus("TOWN-CAIN (" + (TriedToCainCount2 + 1) + "/" + CharConfig.MaxItemIDTries + ")");
MoveToCain();
AlreadyGoneToShop = false;
TriedToCainCount = 10;
TriedToCainCount = CharConfig.MaxItemIDTries;
TriedToCainCount2++;
return;
}
if (CurrentScript == 1)
{
if (TriedToCainCount >= 10)
if (TriedToCainCount >= CharConfig.MaxItemIDTries)
{
if (CharConfig.IDAtShop) Form1_0.Shop_0.HasUnidItem = true;
else
{
TriedToCainCount = 10;
TriedToCainCount2 = 10;
TriedToCainCount = CharConfig.MaxItemIDTries;
TriedToCainCount2 = CharConfig.MaxItemIDTries;
CurrentScript++;
}
return;
}
if (Form1_0.InventoryStruc_0.HasUnidItemInInventory() && TriedToCainCount < 10)
if (Form1_0.InventoryStruc_0.HasUnidItemInInventory() && TriedToCainCount < CharConfig.MaxItemIDTries)
{
if (!CharConfig.IDAtShop)
{
Form1_0.SetGameStatus("TOWN-CAIN");
Form1_0.SetGameStatus("TOWN-CAIN (" + (TriedToCainCount + 1) + "/" + CharConfig.MaxItemIDTries + ")");
MoveToCain();
TriedToCainCount++;
}
else
{
AlreadyGoneToShop = true;
Form1_0.SetGameStatus("TOWN-SHOP (ID)");
Form1_0.SetGameStatus("TOWN-SHOP (IDENTIFY ITEMS) (" + (TriedToCainCount + 1) + "/" + CharConfig.MaxItemIDTries + ")");
MoveToStore();
TriedToCainCount++;
}
@ -343,7 +345,7 @@ public class Town
ShouldReliveMerc = !Form1_0.MercStruc_0.MercAlive;
}
if (!ShouldReliveMerc || TriedToMercCount >= 3
if (!ShouldReliveMerc || TriedToMercCount >= CharConfig.MaxMercReliveTries
|| (Form1_0.PlayerScan_0.PlayerGoldInventory + Form1_0.PlayerScan_0.PlayerGoldInStash) < 75000)
{
CurrentScript++;
@ -351,10 +353,10 @@ public class Town
if (CurrentScript == 2)
{
if (ShouldReliveMerc && TriedToMercCount < 3
if (ShouldReliveMerc && TriedToMercCount < CharConfig.MaxMercReliveTries
&& (Form1_0.PlayerScan_0.PlayerGoldInventory + Form1_0.PlayerScan_0.PlayerGoldInStash) >= 75000)
{
Form1_0.SetGameStatus("TOWN-MERC");
Form1_0.SetGameStatus("TOWN-MERC (" + (TriedToMercCount + 1) + "/" + CharConfig.MaxMercReliveTries + ")");
MoveToMerc();
TriedToMercCount++;
}
@ -370,9 +372,9 @@ public class Town
if (CurrentScript == 3)
{
if (Form1_0.InventoryStruc_0.HasUnidItemInInventory()
&& (!FastTowning || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount >= 50))
&& TriedToCainCount2 < 10
&& TriedToCainCount < 10)
&& (!FastTowning || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount >= CharConfig.MaxItemGrabTries))
&& TriedToCainCount2 < CharConfig.MaxItemIDTries
&& TriedToCainCount < CharConfig.MaxItemIDTries)
{
//return to identify script, still contain unid item
CurrentScript = 1;
@ -381,19 +383,19 @@ public class Town
}
if ((!Form1_0.InventoryStruc_0.ContainStashItemInInventory() && (Form1_0.PlayerScan_0.PlayerGoldInventory < 35000))
|| TriedToStashCount >= 6 || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount < 50 && Form1_0.ItemsStruc_0.TriesToPickItemCount >= 0))
|| TriedToStashCount >= CharConfig.MaxItemStashTries || (FastTowning && Form1_0.ItemsStruc_0.TriesToPickItemCount < CharConfig.MaxItemGrabTries && Form1_0.ItemsStruc_0.TriesToPickItemCount >= 0))
{
CurrentScript++;
}
if (CurrentScript == 3)
{
if ((Form1_0.InventoryStruc_0.ContainStashItemInInventory() || (Form1_0.PlayerScan_0.PlayerGoldInventory >= 35000)) && TriedToStashCount < 6)
if ((Form1_0.InventoryStruc_0.ContainStashItemInInventory() || (Form1_0.PlayerScan_0.PlayerGoldInventory >= 35000)) && TriedToStashCount < CharConfig.MaxItemStashTries)
{
string DescTxt = "";
if (Form1_0.InventoryStruc_0.ContainStashItemInInventory()) DescTxt += " (ITEM)";
if ((Form1_0.PlayerScan_0.PlayerGoldInventory >= 35000)) DescTxt += " (GOLD)";
Form1_0.SetGameStatus("TOWN-STASH" + DescTxt + " (" + (TriedToStashCount + 1) + "/" + 6 + ")");
Form1_0.SetGameStatus("TOWN-STASH" + DescTxt + " (" + (TriedToStashCount + 1) + "/" + CharConfig.MaxItemStashTries + ")");
MoveToStash(true);
TriedToStashCount++;
}
@ -407,17 +409,17 @@ public class Town
{
CurrentScript++;
}
if (!Form1_0.Gamble_0.CanGamble() || TriedToGambleCount >= 3 || FastTowning)
if (!Form1_0.Gamble_0.CanGamble() || TriedToGambleCount >= CharConfig.MaxGambleTries || FastTowning)
{
CurrentScript++;
}
if (CurrentScript == 4)
{
if (Form1_0.Gamble_0.CanGamble() && TriedToGambleCount < 3 && !FastTowning)
if (Form1_0.Gamble_0.CanGamble() && TriedToGambleCount < CharConfig.MaxGambleTries && !FastTowning)
{
TriedToStashCount = 0;
Form1_0.SetGameStatus("TOWN-GAMBLE (" + (TriedToGambleCount + 1) + "/" + 3 + ")");
Form1_0.SetGameStatus("TOWN-GAMBLE (" + (TriedToGambleCount + 1) + "/" + CharConfig.MaxGambleTries + ")");
MoveToGamble();
TriedToGambleCount++;
}
@ -443,7 +445,7 @@ public class Town
}
else
{
if (!Form1_0.Shop_0.ShouldShop() || TriedToShopCount >= 6)
if (!Form1_0.Shop_0.ShouldShop() || TriedToShopCount >= CharConfig.MaxShopTries)
{
//Console.WriteLine("town shop done");
CurrentScript++;
@ -451,7 +453,7 @@ public class Town
if (CurrentScript == 5)
{
if (Form1_0.Shop_0.ShouldShop() && TriedToShopCount < 6)
if (Form1_0.Shop_0.ShouldShop() && TriedToShopCount < CharConfig.MaxShopTries)
{
string DescTxt = "";
if (Form1_0.Shop_0.ShopForSellingitem) DescTxt += " (SELL)";
@ -461,7 +463,7 @@ public class Town
if (Form1_0.Shop_0.ShopForKey) DescTxt += " (KEYS)";
if (Form1_0.Shop_0.ShopForRegainHP) DescTxt += " (REGEN HP)";
Form1_0.SetGameStatus("TOWN-SHOP" + DescTxt + " (" + (TriedToShopCount + 1) + "/" + 6 + ")");
Form1_0.SetGameStatus("TOWN-SHOP" + DescTxt + " (" + (TriedToShopCount + 1) + "/" + CharConfig.MaxShopTries + ")");
//Console.WriteLine("town moving to shop");
MoveToStore();
TriedToShopCount++;
@ -475,18 +477,18 @@ public class Town
//check for repair
if (CurrentScript == 6)
{
if (!Form1_0.Repair_0.GetShouldRepair() || TriedToShopCount >= 12 || FastTowning)
if (!Form1_0.Repair_0.GetShouldRepair() || TriedToRepairCount >= CharConfig.MaxRepairTries || FastTowning)
{
CurrentScript++;
}
if (CurrentScript == 6)
{
if (Form1_0.Repair_0.GetShouldRepair() && TriedToShopCount < 12 && !FastTowning)
if (Form1_0.Repair_0.GetShouldRepair() && TriedToRepairCount < CharConfig.MaxRepairTries && !FastTowning)
{
Form1_0.SetGameStatus("TOWN-REPAIR" + " (" + (TriedToShopCount + 1) + "/" + 12 + ")");
Form1_0.SetGameStatus("TOWN-REPAIR" + " (" + (TriedToRepairCount + 1) + "/" + CharConfig.MaxRepairTries + ")");
MoveToRepair();
TriedToShopCount++;
TriedToRepairCount++;
}
}
}
@ -697,7 +699,7 @@ public class Town
Form1_0.KeyMouse_0.MouseClicc(285, 260 + (ThisIndexx * 60));
Form1_0.UIScan_0.WaitTilUIClose("waypointMenu");
Form1_0.UIScan_0.WaitTilUIClose("loading");
Form1_0.WaitDelay(350);
Form1_0.WaitDelay(CharConfig.WaypointEnterDelay);
}
public void SelectTownWP()
@ -713,7 +715,7 @@ public class Town
Form1_0.KeyMouse_0.MouseClicc(285, 270); //select first wp
Form1_0.UIScan_0.WaitTilUIClose("waypointMenu");
Form1_0.UIScan_0.WaitTilUIClose("loading");
Form1_0.WaitDelay(350);
Form1_0.WaitDelay(CharConfig.WaypointEnterDelay);
}
public bool ShouldBeInTown()
@ -724,7 +726,7 @@ public class Town
bool ShouldBe = false;
if (Form1_0.InventoryStruc_0.HasUnidItemInInventory() && !FastTowning) ShouldBe = true;
if (Form1_0.InventoryStruc_0.ContainStashItemInInventory() && !FastTowning) ShouldBe = true;
if (Form1_0.ItemsStruc_0.TriesToPickItemCount >= 50)
if (Form1_0.ItemsStruc_0.TriesToPickItemCount >= CharConfig.MaxItemGrabTries)
{
if (Form1_0.InventoryStruc_0.HasUnidItemInInventory()) ShouldBe = true;
if (Form1_0.InventoryStruc_0.ContainStashItemInInventory()) ShouldBe = true;
@ -914,7 +916,7 @@ public class Town
//MISSING TOWN ACT HERE -> DONT GAMBLE IN OTHER TOWN ACT
if (TownAct != 5)
{
TriedToGambleCount = 15;
TriedToGambleCount = CharConfig.MaxGambleTries + 5;
return;
}

View File

@ -104,3 +104,32 @@ ShowPathFinding=true
ShowExits=true
ShowMapHackShowLines=true
ShowUnitsScanCount=false
//#######################################
//BOT DELAYS/ADVANCED SETTINGS
//#######################################
MaxDelayNewGame=250
WaypointEnterDelay=350
MaxMercReliveTries=3
MaxItemIDTries=10
MaxItemGrabTries=50
MaxItemStashTries=6
StashFullTries=15
MaxShopTries=6
MaxRepairTries=3
MaxGambleTries=3
MaxBattleAttackTries=8
TakeHPPotionDelay=3500
TakeManaPotionDelay=2500
OverallDelaysMultiplyer=1.0
EndBattleGrabDelay=5
MaxTimeEnterGame=180
BaalWavesCastDelay=6
ChaosWaitingSealBossDelay=2
RecastBODelay=180
TownSwitchAreaDelay=2
PublicGameTPRespawnDelay=180
PlayerMaxHPCheckDelay=2000
LeechEnterTPDelay=600
MephistoRedPortalEnterDelay=800
CubeItemPlaceDelay=16

View File

@ -129,6 +129,9 @@ Perfect Diamond
//#######################################
//###### NORMAL ITEMS
//#######################################
//##### Gold
//[Name] == Gold && [Quality] == normal && [GoldInPlayer] >= 5000 // Gold
//##### Helms (Exceptional)
[Name] == WarHat && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [EnhancedDefense] >= 10 // Delirium or Dream
[Name] == Sallet && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [EnhancedDefense] >= 10 // Delirium or Dream
@ -235,79 +238,79 @@ Perfect Diamond
//##### Belts
//##### Barbarian Helms (Elite)
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//##### Druid Pelts (Elite)
[Name] == BloodSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == SunSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == EarthSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == SkySpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == DreamSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == BloodSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == SunSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == EarthSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == SkySpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == DreamSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == BloodSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == SunSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == EarthSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == SkySpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == DreamSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == BloodSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == SunSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == EarthSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == SkySpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == DreamSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//##### Necromancer Shrunken Heads (Elite)
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//##### Axes
@ -382,10 +385,10 @@ Perfect Diamond
//##### Scepters
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [SkillBlessedHammer]+[SkillConcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [SkillBlessedHammer]+[SkillConcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [SkillFistOfTheHeavens]+[SkillConviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [SkillFistOfTheHeavens]+[SkillConviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [Skillblessedhammer]+[Skillconcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [Skillblessedhammer]+[Skillconcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [Skillfistoftheheavens]+[Skillconviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [Skillfistoftheheavens]+[Skillconviction] >= 5 // Call to Arms
//##### Spears (Elite)
[Name] == HyperionSpear && [Quality] == superior && [Flag] == ethereal && [Sockets] == 6 && [EnhancedDamage] >= 10 // Breath of the Dying
@ -436,12 +439,12 @@ Perfect Diamond
//##### Throwing
//##### Wands
//[Type] == wand && [Quality] == superior && [Sockets] != 1 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // White
//[Type] == wand && [Quality] == normal && [Sockets] != 1 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // White
//[Type] == wand && [Quality] == superior && [Sockets] != 1 && [Skillbonespear]+[Skillbonespirit] >= 5 // White
//[Type] == wand && [Quality] == normal && [Sockets] != 1 && [Skillbonespear]+[Skillbonespirit] >= 5 // White
//##### Amazon Weapons (Elite)
[Name] == MatriarchalBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowAndCrossbowSkillTab] >= 2 // Faith
[Name] == GrandMatronBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowAndCrossbowSkillTab] >= 2 // Faith
[Name] == MatriarchalBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowandCrossbowSkillTab] >= 2 // Faith
[Name] == GrandMatronBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowandCrossbowSkillTab] >= 2 // Faith
//##### Assassin Katars
//[Name] == Suwayyah && [Quality] == superior && [Flag] != ethereal && [Sockets] == 0 && [EnhancedDamage] >= 10 // Chaos
@ -484,7 +487,7 @@ Perfect Diamond
//[Name] == DuskShroud && [Quality] == unique && [Flag] != ethereal && [PassiveColdMastery] >= 15 // Ormus' Robes
[Name] == BalrogSkin && [Quality] == unique && [AllSkills] >= 2 && [EnhancedDefense] >= 165 // Arkaine's Valor
[Name] == WireFleece && [Quality] == unique && [Flag] == ethereal && [EnhancedDefense] >= 180 // The Gladiator's Bane
[Name] == KrakenShell && [Quality] == unique && [DamageResist] >= 20 && [Strength] >= 45 // Leviathan
[Name] == KrakenShell && [Quality] == unique && [DamageReduced] >= 20 && [Strength] >= 45 // Leviathan
[Name] == SacredArmor && [Quality] == unique && [Strength] >= 25 // Tyrael's Might
//##### Shields
@ -494,8 +497,8 @@ Perfect Diamond
//##### Gloves
[Name] == ChainGloves && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 25 && [MagicFind] >= 40 // Chance Guards
//[Name] == LightGauntlets && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 25 // Magefist
//[Name] == BattleGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 64 && [EnhancedDefense] >= 25 && [FCR] >= 20 // Magefist
//[Name] == CrusaderGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 90 && [EnhancedDefense] >= 25 && [FCR] >= 20 // Magefist
//[Name] == BattleGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 64 && [EnhancedDefense] >= 25 && [FasterCastRate] >= 20 // Magefist
//[Name] == CrusaderGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 90 && [EnhancedDefense] >= 25 && [FasterCastRate] >= 20 // Magefist
[Name] == VampireboneGloves && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 100 && [Strength] >= 10 && [LifeLeech] >= 8 // Dracul's Grasp
[Name] == OgreGauntlets && [Quality] == unique && [Flag] != ethereal // Steelrend
@ -508,12 +511,12 @@ Perfect Diamond
[Name] == MyrmidonGreaves && [Quality] == unique && [Flag] != ethereal // Gore Rider
//[Name] == ScarabshellBoots && [Quality] == unique && [Flag] != ethereal // Sandstorm Trek
[Name] == ScarabshellBoots && [Quality] == unique // Sandstorm Trek
//[Name] == BoneweaveBoots && [Quality] == unique && [Flag] != ethereal && [Strength] >= 15 && [SkillSkeletonMastery] >= 2 // Marrowwalk
//[Name] == BoneweaveBoots && [Quality] == unique && [Flag] != ethereal && [Strength] >= 15 && [Skillskeletonmastery] >= 2 // Marrowwalk
//[Name] == MyrmidonGreaves && [Quality] == unique && [Dexterity] >= 20 && [ShadowDisciplinesSkillTab] >= 1 // Shadow Dancer
//##### Belts
//[Name] == HeavyBelt && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 50 && [GoldFind] >= 80 // Goldwrap
//[Name] == DemonhideSash && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 165 && [DamageResist] >= 12 && [LifeLeech] >= 8 // String of Ears
//[Name] == DemonhideSash && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 165 && [DamageReduced] >= 12 && [LifeLeech] >= 8 // String of Ears
[Name] == WarBelt && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 180 // Thundergod's Vigor
[Name] == SpiderwebSash && [Quality] == unique && [Flag] != ethereal // Arachnid Mesh
[Name] == VampirefangBelt && [Quality] == unique && [Flag] != ethereal && [LifeLeech] >= 7 // Nosferatu's Coil
@ -534,7 +537,7 @@ Perfect Diamond
//##### Necromancer Shrunken Heads
//[Name] == HierophantTrophy && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 180 // Homunculus
//[Name] == BloodlordSkull && [Quality] == unique && [Flag] != ethereal && [NecromancerSummoningSkillTab]+[PoisonAndBoneSkillTab]+[CursesSkillTab] >= 7 // Darkforce Spawn
//[Name] == BloodlordSkull && [Quality] == unique && [Flag] != ethereal && [NecromancerSummoningSkillTab]+[PoisonandBoneSkillTab]+[CursesSkillTab] >= 7 // Darkforce Spawn
//##### Axes
[Name] == EttinAxe && [Quality] == unique && [Flag] == ethereal && [Sockets] >= 4 && [EnhancedDamage] >= 240 // Rune Master
@ -552,7 +555,7 @@ Perfect Diamond
//[Name] == BoneKnife && [Quality] == unique // Wizardspike
//##### Maces
//[Name] == Scourge && [Quality] == unique && [EnhancedDamage] >= 270 && [IAS] == 30 // Stormlash
//[Name] == Scourge && [Quality] == unique && [EnhancedDamage] >= 270 && [IncreasedAttackSpeed] == 30 // Stormlash
//##### Polearms
//[Name] == OgreAxe && [Quality] == unique && [Flag] == ethereal && [EnhancedDamage] >= 290 // Bonehew
@ -560,9 +563,9 @@ Perfect Diamond
//[Name] == CrypticAxe && [Quality] == unique && [Flag] == ethereal && [Sockets] >= 3 && [EnhancedDamage] >= 230 // Tomb Reaver
//##### Scepters
//[Name] == MightyScepter && [Quality] == unique && [Sockets] >= 2 && [EnhancedDamage] >= 270 && [AddPaladinSkills] >= 3 && [IAS] >= 20 // Heaven's Light
//[Name] == MightyScepter && [Quality] == unique && [Sockets] >= 2 && [EnhancedDamage] >= 270 && [AddPaladinSkills] >= 3 && [IncreasedAttackSpeed] >= 20 // Heaven's Light
//[Name] == MightyScepter && [Quality] == unique && [EnhancedDamage] >= 270 && [NormalDamage] >= 90 && [RequirementPercent] <= -60 // The Redeemer
//[Name] == Caduceus && [Quality] == unique && [EnhancedDamage] >= 260 && [PalidinCombatSkillTab] >= 3 // Astreon's Iron Ward
//[Name] == Caduceus && [Quality] == unique && [EnhancedDamage] >= 260 && [PaladinCombatSkillTab] >= 3 // Astreon's Iron Ward
//##### Spears
//[Name] == Fuscina && [Quality] == unique && [Flag] == ethereal && [EnhancedDamage] >= 180 // Kelpie Snare
@ -580,8 +583,8 @@ Perfect Diamond
//[Name] == WingedAxe && [Quality] == unique && [EnhancedDamage] >= 180 // Lacerator
//##### Wands
//[Name] == LichWand && [Quality] == unique && [SkillBoneSpirit]+[SkillBoneSpear] >= 4 && [SkillBoneWall]+[SkillBoneArmor]+[SkillTeeth] >= 12 // Boneshade
//[Name] == UnearthedWand && [Quality] == unique && [PassivePoisPierce] >= 45 && [PoisonAndBoneSkillTab] >= 2 // Death's Web
//[Name] == LichWand && [Quality] == unique && [Skillbonespirit]+[Skillbonespear] >= 4 && [Skillbonewall]+[Skillbonearmor]+[Skillteeth] >= 12 // Boneshade
//[Name] == UnearthedWand && [Quality] == unique && [PassivePoisPierce] >= 45 && [PoisonandBoneSkillTab] >= 2 // Death's Web
//[Name] == Burnt Wand && [Quality] == unique // Suicide Branch
//##### Amazon Weapons
@ -624,7 +627,7 @@ Perfect Diamond
[Name] == Amulet && [Quality] == unique && [LifeLeech] >= 6 && [ManaLeech] >= 15 // Crescent Moon
[Name] == Amulet && [Quality] == unique && [PoisonResist] == 75 // Atma's Scarab
[Name] == Amulet && [Quality] == unique && [HPRegen] == 10 // The Rising Sun
//[Name] == Amulet && [Quality] == unique && [LightResist] == 35 // Highlord's Wrath
//[Name] == Amulet && [Quality] == unique && [LightningResist] == 35 // Highlord's Wrath
[Name] == Amulet && [Quality] == unique && [Strength] == 5 && [ColdResist] >= 20 // Mara's Kaleidoscope
//[Name] == Amulet && [Quality] == unique && [DefensiveAurasSkillTab] == 1 // Seraph's Hymn
[Name] == Amulet && [Quality] == unique && [AttackRating] >= 430 && [ColdResist] >= 30 // Metalgrid
@ -657,8 +660,15 @@ Perfect Diamond
//#######################################
//###### Potions
//#######################################
//[Name] == PotionofLife
//[Name] == MinorHealingPotion
//[Name] == LightHealingPotion
//[Name] == HealingPotion
//[Name] == GreaterHealingPotion
[Name] == SuperHealingPotion
//[Name] == MinorManaPotion
//[Name] == LightManaPotion
//[Name] == ManaPotion
//[Name] == GreaterManaPotion
[Name] == SuperManaPotion
//[Name] == RejuvenationPotion
@ -668,18 +678,17 @@ Perfect Diamond
//#######################################
//###### SET ITEMS
//#######################################
//##### Angelic Raiment
//[Name] == RingMail && [Quality] == set // Angelic Mantle
//[Name] == Sabre && [Quality] == set // Angelic Sickle
//[Name] == Saber && [Quality] == set // Angelic Sickle
//[Name] == Ring && [Quality] == set && [LifeMax] == 20 // Angelic Halo
//[Name] == Amulet && [Quality] == set && [LightRadius] == 3 && [DamageTakenGoesToMana] == 20 // Angelic Wings
//##### Arcanna's Tricks
//[Name] == Amulet && [Quality] == set && [MaxMana] == 15 // Arcanna's Sign
//[Name] == Amulet && [Quality] == set && [ManaMax] == 15 // Arcanna's Sign
//[Name] == SkullCap && [Quality] == set // Arcanna's Head
//[Name] == LightPlate && [Quality] == set // Arcanna's Flesh
//[Name] == WarStaff && [Quality] == set // Arcanna's Deathwand
@ -687,7 +696,7 @@ Perfect Diamond
//##### Arctic Gear
//[Name] == QuiltedArmor && [Quality] == set // Arctic Furs
//[Name] == LightBelt && [Quality] == set // Arctic Binding
//[Name] == LightGauntlets && [Quality] == set && [LifeMax] == 20 && [IAS] == 10 // Arctic Mitts
//[Name] == LightGauntlets && [Quality] == set && [LifeMax] == 20 && [IncreasedAttackSpeed] == 10 // Arctic Mitts
//[Name] == ShortWarBow && [Quality] == set // Arctic Horn
//##### Berseker's Arsenal
@ -697,7 +706,7 @@ Perfect Diamond
//##### Cathan's Traps
//[Name] == Ring && [Quality] == set && [LifeLeech] == 6 && [NormalDamageReduction] == 2 // Cathan's Seal
//[Name] == Amulet && [Quality] == set && [FHR] == 10 && [LightningMaxDamage] == 5 // Cathan's Sigil
//[Name] == Amulet && [Quality] == set && [FasterHitRecovery] == 10 && [LightningMaxDamage] == 5 // Cathan's Sigil
//[Name] == ChainMail && [Quality] == set // Cathan's Mesh
//[Name] == Mask && [Quality] == set // Cathan's Visage
@ -722,13 +731,13 @@ Perfect Diamond
//[Name] == ChainBoots && [Quality] == set // Hsarus' Iron Heel
//##### Infernal Tools
//[Name] == Cap && [Quality] == set && [FireResist] == 10 && [LightResist] == 10 && [ColdResist] == 10 && [PoisonResist] == 10 // Infernal Cranium
//[Name] == Cap && [Quality] == set && [FireResist] == 10 && [LightningResist] == 10 && [ColdResist] == 10 && [PoisonResist] == 10 // Infernal Cranium
//[Name] == GrimWand && [Quality] == set // Infernal Touch
//[Name] == HeavyBelt && [Quality] == set && [LifeMax] == 20 && [EnhancedDefense] == 25 // Infernal Sign
//##### Iratha's Finery
//[Name] == HeavyBelt && [Quality] == set && [MinDamage] == 5 // Iratha's Cord
//[Name] == Crown && [Quality] == set && [FireResist] == 30 && [LightResist] == 30 // Iratha's Coil
//[Name] == Crown && [Quality] == set && [FireResist] == 30 && [LightningResist] == 30 // Iratha's Coil
//[Name] == Amulet && [Quality] == set && [PoisonResist] == 30 && [PoisonLength] == -75 // Iratha's Collar
//[Name] == LightGauntlets && [Quality] == set && [ColdResist] == 30 // Iratha's Cuff
@ -742,7 +751,7 @@ Perfect Diamond
//[Name] == KiteShield && [Quality] == set // Milabrega's Orb
//[Name] == AncientArmor && [Quality] == set // Milabrega's Robe
//[Name] == WarScepter && [Quality] == set // Milabrega's Rod
//[Name] == Crown && [Quality] == set && [LifeMax] == 15 && [MaxMana] == 15 // Milabrega's Diadem
//[Name] == Crown && [Quality] == set && [LifeMax] == 15 && [ManaMax] == 15 // Milabrega's Diadem
//##### Sigon's Steel
//[Name] == GreatHelm && [Quality] == set // Sigon's Visor
@ -760,7 +769,7 @@ Perfect Diamond
//[Name] == Amulet && [Quality] == set && [MagicDamageReduction] == 1 && [NormalDamageReduction] == 2 // Tancred's Weird
//##### Vidala's Rig
//[Name] == Amulet && [Quality] == set && [ColdResist] == 20 && [MaxMana] == 15 // Vidala's Snare
//[Name] == Amulet && [Quality] == set && [ColdResist] == 20 && [ManaMax] == 15 // Vidala's Snare
//[Name] == LongBattleBow && [Quality] == set // Vidala's Barb
//[Name] == LeatherArmor && [Quality] == set // Vidala's Ambush
//[Name] == LightPlatedBoots && [Quality] == set // Vidala's Fetlock
@ -820,7 +829,7 @@ Perfect Diamond
//[Name] == BattleGauntlets && [Quality] == set // M'avina's Icy Clutch
//[Name] == SharkskinBelt && [Quality] == set // M'avina's Tenet
//##### Natalya's OdiumMaxHP
//##### Natalya's OdiumLifeMax
//[Name] == GrimHelm && [Quality] == set // Natalya's Totem
//[Name] == ScissorsSuwayyah && [Quality] == set // Natalya's Mark
//[Name] == LoricatedMail && [Quality] == set // Natalya's Shadow
@ -912,6 +921,12 @@ Perfect Diamond
//[Name] == ArchonPlate && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 3 && [PoisonLengthResist] >= 75
//##### Armor
[Name] == LightPlate && [Quality] == magic && [Sockets] == 3 && [LifeMax] == 80 && [LevelRequire] <= 30 // LLD
[Name] == MagePlate && [Quality] == magic && [Sockets] == 3 && [LifeMax] == 80 && [LevelRequire] <= 30 // LLD
[Name] == AncientArmor && [Quality] == magic && [Sockets] == 4 && [LifeMax] >= 95 // 4os/95+ life or 4os/24fhr armor
[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4 && [LifeMax] >= 95 // 4os/95+ life or 4os/24fhr armor
[Name] == AncientArmor && [Quality] == magic && [Sockets] == 4 && [FasterHitRecovery] == 24 // 4os/95+ life or 4os/24fhr armor
[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4 && [FasterHitRecovery] == 24 // 4os/95+ life or 4os/24fhr armor
//[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4
//[Name] == ArchonPlate && [Quality] == magic && [LifeMax] >= 80 && [Sockets] == 4
//[Name] == ArchonPlate && [Quality] == magic && [Strength] >= 20 && [Sockets] == 4
@ -964,7 +979,28 @@ Perfect Diamond
//[Name] == DuskShroud && [Quality] == magic && [LifeMax] >= 90 && [Sockets] == 3
//##### Shields
//[Name] == Monarch && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 4 && [Defense] >= 140 && [FasterBlockRate5] >= 30
[Name] == Monarch && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 4 && [Defense] >= 140 && [FasterBlockRate] >= 30
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == BarbedShield && [Quality] == magic && [PaladinCombatSkillTab] == 2 && [FasterBlockRate] == 30 // LLD
//##### Shields (Elite)
//[Name] == Heater && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30
@ -1039,6 +1075,7 @@ Perfect Diamond
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [Strength] >= 10 && [ManaLeech] >= 3
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [Dexterity] >= 10 && [ManaLeech] >= 3
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [AddSkillTab] >= 2 && [Strength]+[Dexterity] >= 15
[Type] == gloves && [Quality] == magic && [JavelinandSpearSkillTab] == 3 && [IncreasedAttackSpeed] == 20 // 3/20 gloves
//##### Boots
//[Type] == boots && [Quality] == rare && [Flag] != ethereal && [FasterRunWalk] >= 30 && [FasterHitRecovery] >= 10 && [FireResist]+[LightningResist]+[ColdResist]+[PoisonResist] >= 80
@ -1049,17 +1086,17 @@ Perfect Diamond
//[Type] == belt && [Quality] == rare && [Flag] != ethereal && [FasterHitRecovery] >= 24 && [Strength] >= 20 && [GoldFind] >= 60
//##### Barbarian Helms (Exceptional)
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
@ -1074,17 +1111,17 @@ Perfect Diamond
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [GoldFind] >= 60
//##### Barbarian Helms (Elite)
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
@ -1099,37 +1136,37 @@ Perfect Diamond
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [GoldFind] >= 60
//##### Barbarian Helms
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//##### Druid Pelts (Exceptional)
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//##### Druid Pelts (Elite)
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//##### Druid Pelts
//[Type] == pelt && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Type] == pelt && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//##### Paladin Shields (Elite)
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
@ -1138,11 +1175,11 @@ Perfect Diamond
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [FireResist] >= 30
@ -1156,11 +1193,11 @@ Perfect Diamond
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
@ -1196,17 +1233,17 @@ Perfect Diamond
//[Type] == auricshields && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddPaladinSkills] >= 2 && [FasterBlockRate] >= 30
//##### Necromancer Shrunken Heads (Exceptional)
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//##### Necromancer Shrunken Heads
//[Type] == voodooheads && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Type] == voodooheads && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//##### Axes
//[Type] == axe && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 250 && [MaxDamagePerLevel] >= 4 && [AttackRatingPerLevel] >= 33 && [IncreasedAttackSpeed] >= 20
@ -1269,6 +1306,17 @@ Perfect Diamond
//[Type] == assassinclaw && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 250 && [MaxDamagePerLevel] >= 4 && [AttackRatingPerLevel] >= 33 && [IncreasedAttackSpeed] >= 20
//[Type] == handtohand && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 400 && [IncreasedAttackSpeed] >= 20
//[Type] == assassinclaw && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 400 && [IncreasedAttackSpeed] >= 20
[Name] == GreaterTalons && [Quality] == magic && [AddAssassinSkills] == 2 && [Skilllightningsentry] == 3 // 5/6LS GT
[Name] == GreaterTalons && [Quality] == magic && [TrapsSkillTab] == 3 && [Skilllightningsentry] == 3 // 5/6LS GT
[Name] == GreaterTalons && [Quality] == magic && [AttackRatingPerLevel] > 15 && [IncreasedAttackSpeed] >= 30 && [Skilllightningsentry] == 3 // fool's IncreasedAttackSpeed LS claw
[Name] == RunicTalons && [Quality] == magic && [AttackRatingPerLevel] > 15 && [IncreasedAttackSpeed] >= 30 && [Skilllightningsentry] == 3 // fool's IncreasedAttackSpeed LS claw
[Name] == GreaterTalons && [Quality] == magic && [Sockets] == 3 && [IncreasedAttackSpeed] >= 30 // 3os IncreasedAttackSpeed claw
[Name] == RunicTalons && [Quality] == magic && [Sockets] == 3 && [IncreasedAttackSpeed] >= 30 // 3os IncreasedAttackSpeed claw
[Type] == handtohand && [Quality] == magic && [AddAssassinSkills] == 2 && [Skilllightningsentry] == 3 // 5/6LS any claw (gt/rt/sq/ss)
[Type] == handtohand && [Quality] == magic && [TrapsSkillTab] == 3 && [Skilllightningsentry] == 3 // 5/6LS any claw (gt/rt/sq/ss)
[Type] == handtohand && [Quality] == magic && [ShadowDisciplinesSkillTab] == 3 && [Skillfade] == 3 // prebuff 6 venom or 6 fade claw
[Type] == handtohand && [Quality] == magic && [ShadowDisciplinesSkillTab] == 3 && [Skillvenom] == 3 // prebuff 6 venom or 6 fade claw
[Name] == FeralClaws && [Quality] == magic && [MartialArtsSkillTab] ==3 && [Sockets] == 2
//##### Sorceress Orbs
@ -1288,6 +1336,14 @@ Perfect Diamond
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Dexterity] >= 10 && [FasterRunWalk] >= 30
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Strength] >= 20 && [FasterCastRate] >= 20
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Dexterity] >= 10 && [FasterCastRate] >= 20
[Type] == circlet && [Quality] == rare && [ItemChargedSkill] == 54 // rare Tele Circlet
[Type] == circlet && [Quality] == rare && [AddBarbarianSkills] == 2 && [GoldFind] == 70 && [Sockets] >= 0 // Gf Barb
[Type] == circlet && [Quality] == rare && [AddClassSkills] >= 2 && [FasterCastRate] >= 20 && [Sockets] == 2 // All 2 Class Skills/20/2 FasterCastRate Circlets
[Type] == circlet && [Quality] == rare && [AddClassSkills] >= 2 && [FasterCastRate] >= 20 && [Sockets] == 2 // All 2 Tree Skills/20/2 FasterCastRate Circlets
//[Type] == circlet && [Quality] == rare && [Flag] != ethereal
//[Name] == Tiara && [Quality] == rare && [Flag] != ethereal
//[Name] == Coronet && [Quality] == rare && [Flag] != ethereal
//[Name] == Diadem && [Quality] == rare && [Flag] != ethereal
//##### Rings
[Name] == Ring && [Quality] == magic && [FasterCastRate] >= 10 && [FireResist] >= 14 && [LightningResist] >= 14
@ -1343,7 +1399,7 @@ Perfect Diamond
[Name] == Jewel && [Quality] == rare && [EnhancedDamage] >= 26 && [FasterHitRecovery] >= 7 && [MinDamage] >= 6 && [Dexterity] >= 7
[Name] == Jewel && [Quality] == rare && [EnhancedDamage] >= 26 && [FasterHitRecovery] >= 7 && [MaxDamage] >= 6 && [Dexterity] >= 7
[Name] == Jewel && [Quality] == rare && [FireResist]+[LightningResist]+[ColdResist]+[PoisonResist] >= 28 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
[Name] == Jewel && [Quality] == rare && [DamageToMana] >= 10 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
[Name] == Jewel && [Quality] == rare && [DamageTakenGoesToMana] >= 10 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
//##### Small Charms
[Name] == SmallCharm && [Quality] == magic && [MaxDamage] >= 3 && [AttackRating] >= 12 && [LifeMax] >= 12
@ -1432,7 +1488,7 @@ Perfect Diamond
//[Name] == GrandCharm && [Quality] == magic && [PoisonandBoneSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [NecromancerSummoningSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [NecromancerSummoningSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [PalidinCombatSkillTab] == 1 // paladin combat
//[Name] == GrandCharm && [Quality] == magic && [PaladinCombatSkillTab] == 1 // paladin combat
//[Name] == GrandCharm && [Quality] == magic && [BarbarianCombatSkillTab] == 1 // barbarian combat
//[Name] == GrandCharm && [Quality] == magic && [ElementalSkillTab] == 1 // elemental
//[Name] == GrandCharm && [Quality] == magic && [TrapsSkillTab] == 1 // trap
@ -1441,3 +1497,4 @@ Perfect Diamond
//#######################################
//###### CUSTOM CREATED ITEMS
//#######################################

View File

@ -28,6 +28,8 @@ public class BeltStruc
public int ForceMANAPotionQty = 0;
public bool HasPotInBadSpot = false;
public bool GrabBothRV = false;
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
@ -66,13 +68,22 @@ public class BeltStruc
//####
//Console.WriteLine("" + MissingHPPot + MissingManaPot + MissingRVPot);
GrabBothRV = false;
for (int i = 0; i < 4; i++)
{
if (CharConfig.BeltPotTypeToHave[i] == 2)
{
GrabBothRV = true;
break;
}
}
if (MissingHPPot || MissingManaPot || MissingRVPot)
{
ItemIsPotion();
if (MissingHPPot && IsItemHPPotion) return true;
if (MissingManaPot && IsItemManaPotion) return true;
//if (MissingRVPot && IsItemRVPotion) return true;
if (MissingRVPot && IsItemRVPotion && GrabBothRV) return true;
if (MissingRVPot && IsItemFullRVPotion) return true;
}
return false;

View File

@ -268,6 +268,54 @@ public static class Enums
Misc = 16,
}
public enum ItemType
{
amulet,
gold,
ring,
jewel,
axe,
wand,
club,
scepter,
mace,
hammer,
sword,
knife,
thrownweapon,
throwingaxe,
javelin,
spear,
polearm,
staff,
bow,
crossbow,
helm,
armor,
shield,
gloves,
boots,
belt,
circlet,
assassinclaw,
orb,
amazonbow,
amazonspear,
amazonjavelin,
pelt,
primalhelm,
auricshields,
voodooheads,
runes,
ubers,
tokens,
chippedgems,
flawedgems,
gems,
flawlessgems,
perfectgems
}
public enum ItemDestination
{
Unspecified = 0,

View File

@ -34,10 +34,10 @@ public class GameStruc
public List<string> AllGamesTriedNames = new List<string>();
public bool AlreadyChickening = false;
public bool TypedSearchGames = false;
public int CurrentTZAct = 1;
[DllImport("user32.dll")] static extern short VkKeyScan(char ch);
[StructLayout(LayoutKind.Explicit)]
@ -582,12 +582,24 @@ public class GameStruc
public List<Area> GetTerrorZones()
{
List<Area> areas = new List<Area>();
bool SetActArea = false;
for (int i = 0; i < 7; i++)
{
uint tzArea = Form1_0.Mem_0.ReadUInt32Raw((IntPtr) ((long)Form1_0.BaseAddress + (0x299E2D8 + (i * 4))));
//uint tzArea = Form1_0.Mem_0.ReadUInt32Raw((IntPtr) ((long)Form1_0.BaseAddress + (0x299E2D8 + (i * 4))));
uint tzArea = Form1_0.Mem_0.ReadUInt32Raw((IntPtr)((long)Form1_0.BaseAddress + (0x29E9558 + (i * 4))));
if (tzArea != 0)
{
areas.Add((Area)tzArea);
if (!SetActArea)
{
CurrentTZAct = Form1_0.AreaScript_0.GetActFromArea((Area)tzArea);
SetActArea = true;
}
if (Form1_0.AreaScript_0.IsThisTZAreaInSameAct(CurrentTZAct, ((Area)tzArea)))
{
//Console.WriteLine("Added TZ: " + ((Area)tzArea));
areas.Add((Area)tzArea);
}
}
}

View File

@ -21,6 +21,7 @@ using System.Security.Cryptography;
using static System.Net.Mime.MediaTypeNames;
using System.Text.RegularExpressions;
using System.Security.AccessControl;
using static Enums;
public class ItemsAlert
{
@ -46,9 +47,60 @@ public class ItemsAlert
public Dictionary<string, Dictionary<string, string>> PickItemsNormal_ByType_Operators = new Dictionary<string, Dictionary<string, string>>();
public Dictionary<string, string> PickItemsNormal_ByTypeDesc = new Dictionary<string, string>();
public Dictionary<string, List<string>> typeMapping = new Dictionary<string, List<string>>();
public void SetForm1(Form1 form1_1)
{
Form1_0 = form1_1;
typeMapping = new Dictionary<string, List<string>>()
{
{"amulet", new List<string>{"Amulet"}},
{"gold", new List<string>{"Gold"}},
{"ring", new List<string>{"Ring"}},
{"jewel", new List<string>{"Jewel"}},
{"axe", new List<string>{"HandAxe", "Axe", "DoubleAxe", "MilitaryPick", "WarAxe", "LargeAxe", "BroadAxe", "BattleAxe", "GreatAxe", "GiantAxe", "Hatchet", "Cleaver", "TwinAxe", "Crowbill", "Naga", "MilitaryAxe", "BeardedAxe", "Tabar", "GothicAxe", "AncientAxe", "Tomahawk", "SmallCrescent", "EttinAxe", "WarSpike", "BerserkerAxe", "FeralAxe", "SilverEdgedAxe", "Decapitator", "ChampionAxe", "GloriousAxe"}},
{"wand", new List<string>{"Wand", "YewWand", "BoneWand", "GrimWand", "BurntWand", "PetrifiedWand", "TombWand", "GraveWand", "PolishedWand", "GhostWand", "LichWand", "UnearthedWand"}},
{"club", new List<string>{"Club", "SpikedClub", "Cudgel", "BarbedClub", "Truncheon", "TyrantClub"}},
{"scepter", new List<string>{"Scepter", "GrandScepter", "WarScepter", "RuneScepter", "HolyWaterSprinkler", "DivineScepter", "MightyScepter", "SeraphRod", "Caduceus"}},
{"mace", new List<string>{"Mace", "MorningStar", "Flail", "FlangedMace", "JaggedStar", "Knout", "ReinforcedMace", "DevilStar", "Scourge"}},
{"hammer", new List<string>{"WarHammer", "Maul", "GreatMaul", "BattleHammer", "WarClub", "MartelDeFer", "LegendaryMallet", "OgreMaul", "ThunderMaul"}},
{"sword", new List<string>{"ShortSword", "Scimitar", "Sabre", "Falchion", "CrystalSword", "BroadSword", "LongSword", "WarSword", "TwoHandedSword", "Claymore", "GiantSword", "BastardSword", "Flamberge", "GreatSword", "Gladius", "Cutlass", "Shamshir", "Tulwar", "DimensionalBlade", "BattleSword", "RuneSword", "AncientSword", "Espandon", "DacianFalx", "TuskSword", "GothicSword", "Zweihander", "ExecutionerSword", "Falcata", "Ataghan", "ElegantBlade", "HydraEdge", "PhaseBlade", "ConquestSword", "CrypticSword", "MythicalSword", "LegendSword", "HighlandBlade", "BalrogBlade", "ChampionSword", "ColossusSword", "ColossusBlade"}},
{"knife", new List<string>{"Dagger", "Dirk", "Kris", "Blade", "Poignard", "Rondel", "Cinquedeas", "Stiletto", "BoneKnife", "MithrilPoint", "FangedKnife", "LegendSpike"}},
{"thrownweapon", new List<string>{"ThrowingKnife", "BalancedKnife", "BattleDart", "WarDart", "FlyingKnife", "WingedKnife"}},
{"throwingaxe", new List<string>{"ThrowingAxe", "BalancedAxe", "Francisca", "Hurlbat", "FlyingAxe", "WingedAxe"}},
{"javelin", new List<string>{"Javelin", "Pilum", "ShortSpear", "Glaive", "ThrowingSpear", "WarJavelin", "GreatPilum", "Simbilan", "Spiculum", "Harpoon", "HyperionJavelin", "StygianPilum", "BalrogSpear", "GhostGlaive", "WingedHarpoon"}},
{"spear", new List<string>{"Spear", "Trident", "Brandistock", "Spetum", "Pike", "WarSpear", "Fuscina", "WarFork", "Yari", "Lance", "HyperionSpear", "StygianPike", "Mancatcher", "GhostSpear", "WarPike"}},
{"polearm", new List<string>{"Bardiche", "Voulge", "Scythe", "Poleaxe", "Halberd", "WarScythe", "LochaberAxe", "Bill", "BattleScythe", "Partizan", "BecDeCorbin", "GrimScythe", "OgreAxe", "ColossusVoulge", "Thresher", "CrypticAxe", "GreatPoleaxe", "GiantThresher"}},
{"staff", new List<string>{"ShortStaff", "LongStaff", "GnarledStaff", "BattleStaff", "WarStaff", "JoStaff", "QuarterStaff", "CedarStaff", "GothicStaff", "RuneStaff", "WalkingStick", "Stalagmite", "ElderStaff", "Shillelagh", "ArchonStaff"}},
{"bow", new List<string>{"ShortBow", "HuntersBow", "LongBow", "CompositeBow", "ShortBattleBow", "LongBattleBow", "ShortWarBow", "LongWarBow", "EdgeBow", "RazorBow", "CedarBow", "DoubleBow", "ShortSiegeBow", "LargeSiegeBow", "RuneBow", "GothicBow", "SpiderBow", "BladeBow", "ShadowBow", "GreatBow", "DiamondBow", "CrusaderBow", "WardBow", "HydraBow"}},
{"crossbow", new List<string>{"LightCrossbow", "Crossbow", "HeavyCrossbow", "RepeatingCrossbow", "Arbalest", "SiegeCrossbow", "Ballista", "ChuKoNu", "PelletBow", "GorgonCrossbow", "ColossusCrossbow", "DemonCrossBow"}},
{"helm", new List<string>{"Cap", "SkullCap", "Helm", "FullHelm", "GreatHelm", "Crown", "Mask", "BoneHelm", "WarHat", "Sallet", "Casque", "Basinet", "WingedHelm", "GrandCrown", "DeathMask", "GrimHelm", "Shako", "Hydraskull", "Armet", "GiantConch", "SpiredHelm", "Corona", "DemonHead", "BoneVisage"}},
{"armor", new List<string>{"QuiltedArmor", "LeatherArmor", "HardLeatherArmor", "StuddedLeather", "RingMail", "ScaleMail", "ChainMail", "BreastPlate", "SplintMail", "PlateMail", "FieldPlate", "GothicPlate", "FullPlateMail", "AncientArmor", "LightPlate", "GhostArmor", "SerpentskinArmor", "DemonhideArmor", "TrellisedArmor", "LinkedMail", "TigulatedMail", "MeshArmor", "Cuirass", "RussetArmor", "TemplarCoat", "SharktoothArmor", "EmbossedPlate", "ChaosArmor", "OrnatePlate", "MagePlate", "DuskShroud", "Wyrmhide", "ScarabHusk", "WireFleece", "DiamondMail", "LoricatedMail", "Boneweave", "GreatHauberk", "BalrogSkin", "HellforgePlate", "KrakenShell", "LacqueredPlate", "ShadowPlate", "SacredArmor", "ArchonPlate"}},
{"shield", new List<string>{"Buckler", "SmallShield", "LargeShield", "KiteShield", "TowerShield", "GothicShield", "BoneShield", "SpikedShield", "Defender", "RoundShield", "Scutum", "DragonShield", "Pavise", "AncientShield", "GrimShield", "BarbedShield", "Heater", "Luna", "Hyperion", "Monarch", "Aegis", "Ward", "TrollNest", "BladeBarrier"}},
{"gloves", new List<string>{"LeatherGloves", "HeavyGloves", "ChainGloves", "LightGauntlets", "Gauntlets", "DemonhideGloves", "SharkskinGloves", "HeavyBracers", "BattleGauntlets", "WarGauntlets", "BrambleMitts", "VampireboneGloves", "Vambraces", "CrusaderGauntlets", "OgreGauntlets"}},
{"boots", new List<string>{"Boots", "HeavyBoots", "ChainBoots", "LightPlatedBoots", "Greaves", "DemonhideBoots", "SharkskinBoots", "MeshBoots", "BattleBoots", "WarBoots", "WyrmhideBoots", "ScarabshellBoots", "BoneweaveBoots", "MirroredBoots", "MyrmidonGreaves"}},
{"belt", new List<string>{"Sash", "LightBelt", "Belt", "HeavyBelt", "PlatedBelt", "DemonhideSash", "SharkskinBelt", "MeshBelt", "BattleBelt", "WarBelt", "SpiderwebSash", "VampirefangBelt", "MithrilCoil", "TrollBelt", "ColossusGirdle"}},
{"circlet", new List<string>{"Circlet", "Coronet", "Tiara", "Diadem"}},
{"assassinclaw", new List<string>{"Katar", "WristBlade", "HatchetHands", "Cestus", "Claws", "BladeTalons", "ScissorsKatar", "Quhab", "WristSpike", "Fascia", "HandScythe", "GreaterClaws", "GreaterTalons", "ScissorsQuhab", "Suwayyah", "WristSword", "WarFist", "BattleCestus", "FeralClaws", "RunicTalons", "ScissorsSuwayyah"}},
{"handtohand", new List<string>{"Katar", "WristBlade", "HatchetHands", "Cestus", "Claws", "BladeTalons", "ScissorsKatar", "Quhab", "WristSpike", "Fascia", "HandScythe", "GreaterClaws", "GreaterTalons", "ScissorsQuhab", "Suwayyah", "WristSword", "WarFist", "BattleCestus", "FeralClaws", "RunicTalons", "ScissorsSuwayyah"}},
{"orb", new List<string>{"EagleOrb", "SacredGlobe", "SmokedSphere", "ClaspedOrb", "JaredsStone", "GlowingOrb", "CrystallineGlobe", "CloudySphere", "SparklingBall", "SwirlingCrystal", "HeavenlyStone", "EldritchOrb", "DemonHeart", "VortexOrb", "DimensionalShard"}},
{"amazonbow", new List<string>{"StagBow", "ReflexBow", "AshwoodBow", "CeremonialBow", "MatriarchalBow", "GrandMatronBow"}},
{"amazonspear", new List<string>{"MaidenSpear", "MaidenPike", "CeremonialSpear", "CeremonialPike", "MatriarchalSpear", "MatriarchalPike"}},
{"amazonjavelin", new List<string>{"MaidenJavelin", "CeremonialJavelin", "MatriarchalJavelin"}},
{"pelt", new List<string>{"WolfHead", "HawkHelm", "Antlers", "FalconMask", "SpiritMask", "AlphaHelm", "GriffonHeaddress", "HuntersGuise", "SacredFeathers", "TotemicMask", "BloodSpirit", "SunSpirit", "EarthSpirit", "SkySpirit", "DreamSpirit"}},
{"primalhelm", new List<string>{"JawboneCap", "FangedHelm", "HornedHelm", "AssaultHelmet", "AvengerGuard", "JawboneVisor", "LionHelm", "RageMask", "SavageHelmet", "SlayerGuard", "CarnageHelm", "FuryVisor", "DestroyerHelm", "ConquerorCrown", "GuardianCrown"}},
{"auricshields", new List<string>{"Targe", "Rondache", "HeraldicShield", "AerinShield", "CrownShield", "AkaranTarge", "AkaranRondache", "ProtectorShield", "GildedShield", "RoyalShield", "SacredTarge", "SacredRondache", "KurastShield", "ZakarumShield", "VortexShield"}},
{"voodooheads", new List<string>{"PreservedHead", "ZombieHead", "UnravellerHead", "GargoyleHead", "DemonHeadShield", "MummifiedTrophy", "FetishTrophy", "SextonTrophy", "CantorTrophy", "HierophantTrophy", "MinionSkull", "HellspawnSkull", "OverseerSkull", "SuccubusSkull", "BloodlordSkull"}},
{"runes", new List<string>{"ElRune", "EldRune", "TirRune", "NefRune", "EthRune", "IthRune", "TalRune", "RalRune", "OrtRune", "ThulRune", "AmnRune", "SolRune", "ShaelRune", "DolRune", "HelRune", "IoRune", "LumRune", "KoRune", "FalRune", "LemRune", "PulRune", "UmRune", "MalRune", "IstRune", "GulRune", "VexRune", "OhmRune", "LoRune", "SurRune", "BerRune", "JahRune", "ChamRune", "ZodRune"}},
{"ubers", new List<string>{"KeyOfTerror", "KeyOfHate", "KeyOfDestruction", "DiablosHorn", "BaalsEye", "MephistosBrain"}},
{"tokens", new List<string>{"TokenofAbsolution", "TwistedEssenceOfSuffering", "ChargedEssenceOfHatred", "BurningEssenceOfTerror", "FesteringEssenceOfDestruction"}},
{"chippedgems", new List<string>{"ChippedAmethyst", "ChippedDiamond", "ChippedEmerald", "ChippedRuby", "ChippedSapphire", "ChippedSkull", "ChippedTopaz"}},
{"flawedgems", new List<string>{"FlawedAmethyst", "FlawedDiamond", "FlawedEmerald", "FlawedRuby", "FlawedSapphire", "FlawedSkull", "FlawedTopaz"}},
{"gems", new List<string>{"Amethyst", "Diamond", "Emerald", "Ruby", "Skull", "Sapphire", "Topaz"}},
{"flawlessgems", new List<string>{"FlawlessAmethyst", "FlawlessDiamond", "FlawlessEmerald", "FlawlessRuby", "FlawlessSapphire", "FlawlessSkull", "FlawlessTopaz"}},
{"perfectgems", new List<string>{"PerfectAmethyst", "PerfectDiamond", "PerfectEmerald", "PerfectRuby", "PerfectSapphire", "PerfectSkull", "PerfectTopaz"}}
};
}
public void CheckItemNames()
@ -77,8 +129,8 @@ public class ItemsAlert
}
foreach (var ThisDir in PickItemsNormal_ByName)
{
if (ThisDir.Value)
{
//if (ThisDir.Value)
//{
bool FoundItemName = false;
string CheckName = Regex.Replace(ThisDir.Key, @"[\d-]", string.Empty);
@ -95,8 +147,91 @@ public class ItemsAlert
{
Form1_0.method_1("Item '" + CheckName + "' from the pickit doesn't exist", Color.Red);
}
else
{
if (PickItemsNormal_ByName_Stats.ContainsKey(ThisDir.Key))
{
foreach (var ThisDir2 in PickItemsNormal_ByName_Stats[ThisDir.Key])
{
//Console.WriteLine(Form1_0.ItemsStruc_0.ItemNAAME + ":" + ThisDir2.Key + "=" + ThisDir2.Value);
Form1_0.ItemsStruc_0.IsItemHaveSameStatMultiCheck(ThisDir2.Key, ThisDir2.Value, PickItemsNormal_ByName_Operators[ThisDir.Key][ThisDir2.Key]);
}
}
}
//}
}
}
public void RemoveNotPickingItems()
{
//Remove all the items that are disabled in the Pickit to improve Pickit performance
List<string> KeysToRemove = new List<string>();
foreach (var ThisDir in PickItemsRunesKeyGems)
{
if (!ThisDir.Value)
{
KeysToRemove.Add(ThisDir.Key);
}
}
for (int i = 0; i < KeysToRemove.Count; i++)
{
PickItemsRunesKeyGems.Remove(KeysToRemove[i]);
PickItemsRunesKeyGems_Quantity.Remove(KeysToRemove[i]);
}
//#######
KeysToRemove.Clear();
foreach (var ThisDir in PickItemsPotions)
{
if (!ThisDir.Value)
{
KeysToRemove.Add(ThisDir.Key);
}
}
for (int i = 0; i < KeysToRemove.Count; i++)
{
PickItemsPotions.Remove(KeysToRemove[i]);
}
//#######
KeysToRemove.Clear();
foreach (var ThisDir in PickItemsNormal_ByName)
{
if (!ThisDir.Value)
{
KeysToRemove.Add(ThisDir.Key);
}
}
for (int i = 0; i < KeysToRemove.Count; i++)
{
PickItemsNormal_ByName.Remove(KeysToRemove[i]);
PickItemsNormal_ByName_Flags.Remove(KeysToRemove[i]);
PickItemsNormal_ByName_Quality.Remove(KeysToRemove[i]);
PickItemsNormal_ByName_Class.Remove(KeysToRemove[i]);
PickItemsNormal_ByName_Stats.Remove(KeysToRemove[i]);
PickItemsNormal_ByName_Operators.Remove(KeysToRemove[i]);
PickItemsNormal_ByNameDesc.Remove(KeysToRemove[i]);
}
//#######
KeysToRemove.Clear();
foreach (var ThisDir in PickItemsNormal_ByType)
{
if (!ThisDir.Value)
{
KeysToRemove.Add(ThisDir.Key);
}
}
for (int i = 0; i < KeysToRemove.Count; i++)
{
PickItemsNormal_ByType.Remove(KeysToRemove[i]);
PickItemsNormal_ByType_Flags.Remove(KeysToRemove[i]);
PickItemsNormal_ByType_Quality.Remove(KeysToRemove[i]);
PickItemsNormal_ByType_Class.Remove(KeysToRemove[i]);
PickItemsNormal_ByType_Stats.Remove(KeysToRemove[i]);
PickItemsNormal_ByType_Operators.Remove(KeysToRemove[i]);
PickItemsNormal_ByTypeDesc.Remove(KeysToRemove[i]);
}
}
public bool ShouldKeepItem()
@ -161,7 +296,25 @@ public class ItemsAlert
{
if (!Form1_0.ItemsStruc_0.identified)
{
if (!Keeping) return true;
if (!Keeping)
{
bool SameStats = true;
//Check for sockets stats
if (PickItemsNormal_ByName_Stats.ContainsKey(ThisNamee))
{
foreach (var ThisDir2 in PickItemsNormal_ByName_Stats[ThisNamee])
{
if (ThisDir2.Key == "Sockets")
{
if (!Form1_0.ItemsStruc_0.IsItemHaveSameStatMultiCheck(ThisDir2.Key, ThisDir2.Value, PickItemsNormal_ByName_Operators[ThisNamee][ThisDir2.Key])) SameStats = false;
break;
}
}
}
return SameStats;
}
}
else
{
@ -216,7 +369,25 @@ public class ItemsAlert
{
if (!Form1_0.ItemsStruc_0.identified)
{
if (!Keeping) return true;
if (!Keeping)
{
bool SameStats = true;
//Check for sockets stats
if (PickItemsNormal_ByType_Stats.ContainsKey(ThisNamee))
{
foreach (var ThisDir2 in PickItemsNormal_ByType_Stats[ThisNamee])
{
if (ThisDir2.Key == "Sockets")
{
if (!Form1_0.ItemsStruc_0.IsItemHaveSameStatMultiCheck(ThisDir2.Key, ThisDir2.Value, PickItemsNormal_ByType_Operators[ThisNamee][ThisDir2.Key])) SameStats = false;
break;
}
}
}
return SameStats;
}
}
else
{
@ -244,7 +415,23 @@ public class ItemsAlert
public bool IsItemThisType(string ItemTypee)
{
if (ItemTypee == "helm")
if (typeMapping.ContainsKey(ItemTypee))
{
for (int i = 0; i < typeMapping[ItemTypee].Count; i++)
{
if (typeMapping[ItemTypee][i] == Form1_0.ItemsStruc_0.ItemNAAME.Replace(" ", ""))
{
return true;
}
}
}
else
{
Form1_0.method_1("Item '[Type] == " + ItemTypee + "' doesn't exist!", Color.Red);
return false;
}
/*if (ItemTypee == "helm")
{
if (Form1_0.ItemsStruc_0.ItemNAAME.Contains("Mask")
|| Form1_0.ItemsStruc_0.ItemNAAME.Contains("Helm")
@ -346,7 +533,7 @@ public class ItemsAlert
if (ItemTypee == "jewel")
{
if (Form1_0.ItemsStruc_0.ItemNAAME == "Jewel") return true;
}
}*/
return false;
}
@ -358,7 +545,20 @@ public class ItemsAlert
public string GetItemType()
{
if (Form1_0.ItemsStruc_0.ItemNAAME.Contains("Mask")
foreach (var ThisTypee in typeMapping)
{
for (int i = 0; i < typeMapping[ThisTypee.Key].Count; i++)
{
if (typeMapping[ThisTypee.Key][i] == Form1_0.ItemsStruc_0.ItemNAAME.Replace(" ", ""))
{
return ThisTypee.Key;
}
}
}
//Form1_0.method_1("Couldn't get the Item Type for: " + Form1_0.ItemsStruc_0.ItemNAAME, Color.Red);
return "";
/*if (Form1_0.ItemsStruc_0.ItemNAAME.Contains("Mask")
|| Form1_0.ItemsStruc_0.ItemNAAME.Contains("Helm")
|| Form1_0.ItemsStruc_0.ItemNAAME.Contains("Crown")
|| Form1_0.ItemsStruc_0.ItemNAAME == "Demonhead"
@ -431,6 +631,6 @@ public class ItemsAlert
}
if (Form1_0.ItemsStruc_0.ItemNAAME == "Gold") return "gold";
if (Form1_0.ItemsStruc_0.ItemNAAME == "Jewel") return "jewel";
return "";
return "";*/
}
}

File diff suppressed because it is too large Load Diff

View File

@ -54,73 +54,80 @@ public class MercStruc
public bool GetMercInfos()
{
MercAlive = true;
txtFileNo = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
int MercCount = 1;
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
try
{
MercPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
if (MercPointerLocation > 0)
MercAlive = true;
txtFileNo = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
int MercCount = 1;
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
Mercdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(MercPointerLocation, ref Mercdatastruc, 144);
txtFileNo = BitConverter.ToUInt32(Mercdatastruc, 4);
pUnitData = BitConverter.ToInt64(Mercdatastruc, 0x10);
mode = BitConverter.ToUInt32(Mercdatastruc, 0x0c);
ushort isUnique = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)pUnitData + 0x18);
GetUnitPathData();
GetStatsAddr();
//Console.WriteLine(Form1_0.NPCStruc_0.getNPC_ID((int) txtFileNo));
//Console.WriteLine(txtFileNo.ToString() + ", isUnique:" + isUnique + ", isPlayerMinion:" + isPlayerMinion + ", mode:" + mode + ", pos:" + xPosFinal + ", " + yPosFinal);
//if (IsMerc((int) txtFileNo))
if (isUnique == 0 && (txtFileNo == 338) && mode != 0 && mode != 12)
//if (isUnique == 0 && (txtFileNo == 338) && mode == 1)
MercPointerLocation = ThisCurrentPointer.Key;
if (MercPointerLocation > 0)
{
if (xPosFinal != 0 && yPosFinal != 0)
Mercdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(MercPointerLocation, ref Mercdatastruc, 144);
txtFileNo = BitConverter.ToUInt32(Mercdatastruc, 4);
pUnitData = BitConverter.ToInt64(Mercdatastruc, 0x10);
mode = BitConverter.ToUInt32(Mercdatastruc, 0x0c);
ushort isUnique = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)pUnitData + 0x18);
GetUnitPathData();
GetStatsAddr();
//Console.WriteLine(Form1_0.NPCStruc_0.getNPC_ID((int) txtFileNo));
//Console.WriteLine(txtFileNo.ToString() + ", isUnique:" + isUnique + ", isPlayerMinion:" + isPlayerMinion + ", mode:" + mode + ", pos:" + xPosFinal + ", " + yPosFinal);
//if (IsMerc((int) txtFileNo))
if (isUnique == 0 && (txtFileNo == 338) && mode != 0 && mode != 12)
//if (isUnique == 0 && (txtFileNo == 338) && mode == 1)
{
Int64 pUnitDataPtr = BitConverter.ToInt64(Mercdatastruc, 0x10);
//uint dwOwnerId = Form1_0.Mem_0.ReadUInt32Raw((IntPtr)(pUnitDataPtr + 0x0c));
//uint dwOwnerId = BitConverter.ToUInt32(Mercdatastruc, 8);
if (xPosFinal != 0 && yPosFinal != 0)
{
Int64 pUnitDataPtr = BitConverter.ToInt64(Mercdatastruc, 0x10);
//uint dwOwnerId = Form1_0.Mem_0.ReadUInt32Raw((IntPtr)(pUnitDataPtr + 0x0c));
//uint dwOwnerId = BitConverter.ToUInt32(Mercdatastruc, 8);
if (Form1_0.Mem_0.ReadByteRaw((IntPtr)(pUnitDataPtr + 0x32)) != 0x0e && Form1_0.Mem_0.ReadByteRaw((IntPtr)(pUnitDataPtr + 0x33)) != 0x04)
//if (dwOwnerId == MercOwnerID && MercOwnerID != 0)
//{
//SetHPFromStats();
/*string SavePathh = Form1_0.ThisEndPath + "DumpMercStruc" + MercCount;
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, Mercdatastruc);*/
if (Form1_0.Mem_0.ReadByteRaw((IntPtr)(pUnitDataPtr + 0x32)) != 0x0e && Form1_0.Mem_0.ReadByteRaw((IntPtr)(pUnitDataPtr + 0x33)) != 0x04)
//if (dwOwnerId == MercOwnerID && MercOwnerID != 0)
//{
//SetHPFromStats();
/*string SavePathh = Form1_0.ThisEndPath + "DumpMercStruc" + MercCount;
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, Mercdatastruc);*/
/*byte[] buffff = new byte[144];
long pStatsListExPtr = BitConverter.ToInt64(Mercdatastruc, 0x10);
Form1_0.Mem_0.ReadRawMemory(pStatsListExPtr, ref buffff, 500);
/*byte[] buffff = new byte[144];
long pStatsListExPtr = BitConverter.ToInt64(Mercdatastruc, 0x10);
Form1_0.Mem_0.ReadRawMemory(pStatsListExPtr, ref buffff, 500);
//pStatsListExPtr = BitConverter.ToInt64(buffff, 8);
//Form1_0.Mem_0.ReadRawMemory(pStatsListExPtr, ref buffff, 500);
//uint dwOwnerId = BitConverter.ToUInt32(buffff, 0x0c);
//uint flags = BitConverter.ToUInt32(buffff, 0x18);
//pStatsListExPtr = BitConverter.ToInt64(buffff, 8);
//Form1_0.Mem_0.ReadRawMemory(pStatsListExPtr, ref buffff, 500);
//uint dwOwnerId = BitConverter.ToUInt32(buffff, 0x0c);
//uint flags = BitConverter.ToUInt32(buffff, 0x18);
string SavePathh2 = Form1_0.ThisEndPath + "DumpMercStrucBuf" + MercCount;
File.Create(SavePathh2).Dispose();
File.WriteAllBytes(SavePathh2, buffff);*/
string SavePathh2 = Form1_0.ThisEndPath + "DumpMercStrucBuf" + MercCount;
File.Create(SavePathh2).Dispose();
File.WriteAllBytes(SavePathh2, buffff);*/
//Console.WriteLine(txtFileNo.ToString() + ", isUnique:" + isUnique + ", ownerID:" + dwOwnerId.ToString("X") + ", mode:" + mode + ", pos:" + xPosFinal + ", " + yPosFinal);
//Console.WriteLine(flags);
//MercCount++;
//Console.WriteLine(txtFileNo.ToString() + ", isUnique:" + isUnique + ", ownerID:" + dwOwnerId.ToString("X") + ", mode:" + mode + ", pos:" + xPosFinal + ", " + yPosFinal);
//Console.WriteLine(flags);
//MercCount++;
SetHPFromStats();
Form1_0.Grid_SetInfos("Merc", MercHP.ToString() + "/" + MercMaxHP.ToString());
return true;
//}
SetHPFromStats();
Form1_0.Grid_SetInfos("Merc", MercHP.ToString() + "/" + MercMaxHP.ToString());
return true;
//}
}
}
}
}
}
catch
{
Form1_0.method_1("Couldn't 'GetMercInfos()'", Color.Red);
}
Form1_0.Grid_SetInfos("Merc", "Not alive/detected");
MercAlive = false;

View File

@ -148,9 +148,9 @@ public class MobsStruc
try
{
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
MobsPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
MobsPointerLocation = ThisCurrentPointer.Key;
if (MobsPointerLocation > 0)
{
//mobsdatastruc = new byte[144];
@ -202,7 +202,7 @@ public class MobsStruc
}
catch
{
Form1_0.method_1("Couldn't get Mobs Count!", Color.Red);
Form1_0.method_1("Couldn't 'GetMobsCount()'", Color.Red);
}
return Count;
@ -221,9 +221,9 @@ public class MobsStruc
try
{
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
MobsPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
MobsPointerLocation = ThisCurrentPointer.Key;
if (MobsPointerLocation > 0)
{
//mobsdatastruc = new byte[144];
@ -269,7 +269,7 @@ public class MobsStruc
{
if ((xPosFinalAll != 0 && yPosFinalAll != 0 && Form1_0.checkBoxShowOnlyValidMobs.Checked) || !Form1_0.checkBoxShowOnlyValidMobs.Checked)
{
Form1_0.AppendTextDebugMobs("ID:" + txtFileNo2 + "(" + (EnumsMobsNPC.MonsterType)((int)txtFileNo2) + ") at:" + xPosFinalAll + ", " + yPosFinalAll + " - HP:" + MobsHPAll + Environment.NewLine);
Form1_0.AppendTextDebugMobs("ID:" + txtFileNo2 + "(" + (EnumsMobsNPC.MonsterType)((int)txtFileNo2) + ") at:" + xPosFinalAll + ", " + yPosFinalAll + " - HP:" + MobsHPAll + ", Type:" + ((Enums.MonsterType) GetMonsterType(flag)) + Environment.NewLine);
}
}
@ -288,7 +288,7 @@ public class MobsStruc
}
catch
{
Form1_0.method_1("Couldn't get All Mobs Nearby!", Color.Red);
Form1_0.method_1("Couldn't 'GetAllMobsNearby()'", Color.Red);
}
return monsterPositions2;
@ -432,25 +432,221 @@ public class MobsStruc
public bool GetMobs(string MobType, string MobName, bool Nearest, int MaxMobDistance, List<long> IgnoredListPointers)
{
txtFileNo = 0;
MobsName = "";
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
long NearestMobPointer = 0;
int LastDiffX = 999;
int LastDiffY = 999;
bool GoodMob = false;
if (CharConfig.KillOnlySuperUnique && MobType == "" && MobName == "" && Nearest
&& (Enums.Area) Form1_0.PlayerScan_0.levelNo != Enums.Area.ThroneOfDestruction)
try
{
MobType = "getSuperUniqueName";
}
txtFileNo = 0;
MobsName = "";
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
long NearestMobPointer = 0;
int LastDiffX = 999;
int LastDiffY = 999;
bool GoodMob = false;
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
{
MobsPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
if (MobsPointerLocation > 0 && !IsIgnored(IgnoredListPointers))
//Set Kill Only the Uniques Mobs
if (CharConfig.KillOnlySuperUnique && MobType == "" && MobName == ""
&& (Enums.Area)Form1_0.PlayerScan_0.levelNo != Enums.Area.ThroneOfDestruction)
{
MobType = "getUniqueName";
}
//Set Fast Chaos Only Super Uniques
if (Form1_0.Chaos_0.FastChaos && MobType == "" && MobName == ""
&& (Enums.Area)Form1_0.PlayerScan_0.levelNo == Enums.Area.ChaosSanctuary)
{
MobType = "getSuperUniqueName";
}
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
MobsPointerLocation = ThisCurrentPointer.Key;
if (MobsPointerLocation > 0 && !IsIgnored(IgnoredListPointers))
{
//mobsdatastruc = new byte[144];
//Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation, ref mobsdatastruc, 144);
//txtFileNo = BitConverter.ToUInt32(mobsdatastruc, 4);
CurrentPointerBytes = new byte[4];
Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation + 4, ref CurrentPointerBytes, CurrentPointerBytes.Length);
txtFileNo = BitConverter.ToUInt32(CurrentPointerBytes, 0);
MobsName = ((EnumsMobsNPC.MonsterType)((int)txtFileNo)).ToString();
//long pStatsListExPtr = BitConverter.ToInt64(mobsdatastruc, 0x88);
CurrentPointerBytes = new byte[8];
Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation + 0x88, ref CurrentPointerBytes, CurrentPointerBytes.Length);
long pStatsListExPtr = BitConverter.ToInt64(CurrentPointerBytes, 0);
MobsStates = Form1_0.PlayerScan_0.GetStates(pStatsListExPtr);
bool isPlayerMinion = false;
if (getPlayerMinion((int)txtFileNo) != "") isPlayerMinion = true;
else isPlayerMinion = ((Form1_0.Mem_0.ReadUInt32((IntPtr)(pStatsListExPtr + 0xAC8 + 0xc)) & 31) == 1); //is a revive
//Console.WriteLine("found near mob " + txtFileNo + " at: " + xPosFinal + ", " + yPosFinal);
if (Form1_0.NPCStruc_0.HideNPC((int)txtFileNo) == 0
&& Form1_0.NPCStruc_0.getTownNPC((int)txtFileNo) == ""
&& !isPlayerMinion
&& !Form1_0.PlayerScan_0.HasState(EnumsStates.State.Revive, MobsStates))
//&& !ShouldBeIgnored(txtFileNo))
{
GetUnitPathData();
GetStatsAddr();
int MobHPBuffer = GetHPFromStats();
CurrentPointerBytes = new byte[8];
Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation + 0x10, ref CurrentPointerBytes, CurrentPointerBytes.Length);
long unitDataPtr = BitConverter.ToInt64(CurrentPointerBytes, 0);
byte flag = Form1_0.Mem_0.ReadByteRaw((IntPtr)(unitDataPtr + 0x1A));
/*if (MobType == "getBossName"
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.Champion)
{
continue;
}
if (MobType == "getSuperUniqueName"
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.Champion
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.SuperUnique)
{
continue;
}*/
if ((MobType == "getUniqueName" || MobType == "getSuperUniqueName" || MobType == "getBossName")
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.Champion
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.SuperUnique
&& (Enums.MonsterType)GetMonsterType(flag) != Enums.MonsterType.Unique)
{
continue;
}
//Avoid Immunes
if (CharConfig.AvoidColdImmune
|| CharConfig.AvoidFireImmune
|| CharConfig.AvoidLightImmune
|| CharConfig.AvoidPoisonImmune
|| CharConfig.AvoidMagicImmune)
{
if (IsImmune(Enums.StatResist.ColdImmune) && CharConfig.AvoidColdImmune
|| IsImmune(Enums.StatResist.FireImmune) && CharConfig.AvoidFireImmune
|| IsImmune(Enums.StatResist.LightImmune) && CharConfig.AvoidLightImmune
|| IsImmune(Enums.StatResist.PoisonImmune) && CharConfig.AvoidPoisonImmune
|| IsImmune(Enums.StatResist.MagicImmune) && CharConfig.AvoidMagicImmune)
{
//Form1_0.method_1(MobName + ", isImmune", Color.Red);
if (MobType != "getBossName" && MobType != "getSuperUniqueName") continue; //go to next mobs
}
}
bool IsMobInBound = true;
if (MobType != "getBossName" && MobType != "getSuperUniqueName") IsMobInBound = IsThisMobInBound();
//Form1_0.method_1(MobName + ", isInBound: " + IsMobInBound + ", HP Buffer: " + MobHPBuffer, Color.Red);
//Console.WriteLine("found near mob " + txtFileNo + " at: " + xPosFinal + ", " + yPosFinal + " HP:" + MobHPBuffer);
if ((MobHPBuffer > 0 || (MobHPBuffer == 0 && MobName != ""))
&& (xPosFinal != 0 && yPosFinal != 0)//)
&& IsMobInBound)
{
if (CharConfig.LeaveDiabloClone && (EnumsMobsNPC.MonsterType)txtFileNo == EnumsMobsNPC.MonsterType.Diabloclone)
{
Form1_0.method_1("DClone found near, leaving game!", Color.Red);
Form1_0.LeaveGame(false);
Form1_0.WaitDelay(100);
return false;
}
//get nearest mobs in all mobs
if (Nearest)
{
int DiffXPlayer = xPosFinal - Form1_0.PlayerScan_0.xPosFinal;
int DiffYPlayer = yPosFinal - Form1_0.PlayerScan_0.yPosFinal;
if (DiffXPlayer < 0) DiffXPlayer = -DiffXPlayer;
if (DiffYPlayer < 0) DiffYPlayer = -DiffYPlayer;
if (DiffXPlayer <= LastDiffX
&& DiffYPlayer <= LastDiffY
&& DiffXPlayer <= MaxMobDistance
&& DiffYPlayer <= MaxMobDistance)
{
NearestMobPointer = MobsPointerLocation;
LastDiffX = DiffXPlayer;
LastDiffY = DiffYPlayer;
}
xPosFinal = 0;
yPosFinal = 0;
}
if (MobType == "") GoodMob = true;
//get the mobs by name and type
if (MobType == "getBossName")
{
if (getBossName((int)txtFileNo) == MobName)
{
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
if (MobType == "getPlayerMinion")
{
if (getPlayerMinion((int)txtFileNo) == MobName)
{
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
if (MobType == "getSuperUniqueName" || MobType == "getUniqueName")
{
if ((MobName == "" && getSuperUniqueName((int)txtFileNo) != "") || (MobName != "" && getSuperUniqueName((int)txtFileNo) == MobName))
{
//Console.WriteLine(getSuperUniqueName((int)txtFileNo));
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
}
}
}
}
//Form1_0.method_1("Nearest: " + Nearest + ", NearestMobPointer: 0x" + NearestMobPointer.ToString("X") + ", GoodMob:" + GoodMob, Color.Red);
//load nearest mobs
if (Nearest && NearestMobPointer != 0 && GoodMob)
{
MobsPointerLocation = NearestMobPointer;
//mobsdatastruc = new byte[144];
//Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation, ref mobsdatastruc, 144);
//txtFileNo = BitConverter.ToUInt32(mobsdatastruc, 4);
@ -460,175 +656,21 @@ public class MobsStruc
txtFileNo = BitConverter.ToUInt32(CurrentPointerBytes, 0);
MobsName = ((EnumsMobsNPC.MonsterType)((int)txtFileNo)).ToString();
//long pStatsListExPtr = BitConverter.ToInt64(mobsdatastruc, 0x88);
CurrentPointerBytes = new byte[8];
Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation + 0x88, ref CurrentPointerBytes, CurrentPointerBytes.Length);
long pStatsListExPtr = BitConverter.ToInt64(CurrentPointerBytes, 0);
GetUnitPathData();
GetStatsAddr();
MobsHP = GetHPFromStats();
MobsStates = Form1_0.PlayerScan_0.GetStates(pStatsListExPtr);
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
bool isPlayerMinion = false;
if (getPlayerMinion((int)txtFileNo) != "") isPlayerMinion = true;
else isPlayerMinion = ((Form1_0.Mem_0.ReadUInt32((IntPtr)(pStatsListExPtr + 0xAC8 + 0xc)) & 31) == 1); //is a revive
//Console.WriteLine("found near mob " + txtFileNo + " at: " + xPosFinal + ", " + yPosFinal);
if (Form1_0.NPCStruc_0.HideNPC((int)txtFileNo) == 0
&& Form1_0.NPCStruc_0.getTownNPC((int)txtFileNo) == ""
&& !isPlayerMinion
&& !Form1_0.PlayerScan_0.HasState(EnumsStates.State.Revive, MobsStates))
//&& !ShouldBeIgnored(txtFileNo))
{
GetUnitPathData();
GetStatsAddr();
int MobHPBuffer = GetHPFromStats();
//Avoid Immunes
if (CharConfig.AvoidColdImmune
|| CharConfig.AvoidFireImmune
|| CharConfig.AvoidLightImmune
|| CharConfig.AvoidPoisonImmune
|| CharConfig.AvoidMagicImmune)
{
if (IsImmune(Enums.StatResist.ColdImmune) && CharConfig.AvoidColdImmune
|| IsImmune(Enums.StatResist.FireImmune) && CharConfig.AvoidFireImmune
|| IsImmune(Enums.StatResist.LightImmune) && CharConfig.AvoidLightImmune
|| IsImmune(Enums.StatResist.PoisonImmune) && CharConfig.AvoidPoisonImmune
|| IsImmune(Enums.StatResist.MagicImmune) && CharConfig.AvoidMagicImmune)
{
//Form1_0.method_1(MobName + ", isImmune", Color.Red);
if (MobType != "getBossName" && MobType != "getSuperUniqueName") continue; //go to next mobs
}
}
bool IsMobInBound = true;
if (MobType != "getBossName" && MobType != "getSuperUniqueName") IsMobInBound = IsThisMobInBound();
//Form1_0.method_1(MobName + ", isInBound: " + IsMobInBound + ", HP Buffer: " + MobHPBuffer, Color.Red);
//Console.WriteLine("found near mob " + txtFileNo + " at: " + xPosFinal + ", " + yPosFinal + " HP:" + MobHPBuffer);
if ((MobHPBuffer > 0 || (MobHPBuffer == 0 && MobName != ""))
&& (xPosFinal != 0 && yPosFinal != 0)//)
&& IsMobInBound)
{
if (CharConfig.LeaveDiabloClone && (EnumsMobsNPC.MonsterType)txtFileNo == EnumsMobsNPC.MonsterType.Diabloclone)
{
Form1_0.method_1("DClone found near, leaving game!", Color.Red);
Form1_0.LeaveGame(false);
Form1_0.WaitDelay(100);
return false;
}
//get nearest mobs in all mobs
if (Nearest)
{
int DiffXPlayer = xPosFinal - Form1_0.PlayerScan_0.xPosFinal;
int DiffYPlayer = yPosFinal - Form1_0.PlayerScan_0.yPosFinal;
if (DiffXPlayer < 0) DiffXPlayer = -DiffXPlayer;
if (DiffYPlayer < 0) DiffYPlayer = -DiffYPlayer;
if (DiffXPlayer <= LastDiffX
&& DiffYPlayer <= LastDiffY
&& DiffXPlayer <= MaxMobDistance
&& DiffYPlayer <= MaxMobDistance)
{
NearestMobPointer = MobsPointerLocation;
LastDiffX = DiffXPlayer;
LastDiffY = DiffYPlayer;
}
xPosFinal = 0;
yPosFinal = 0;
}
if (MobType == "") GoodMob = true;
//get the mobs by name and type
if (MobType == "getBossName")
{
if (getBossName((int)txtFileNo) == MobName)
{
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
if (MobType == "getPlayerMinion")
{
if (getPlayerMinion((int)txtFileNo) == MobName)
{
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
if (MobType == "getSuperUniqueName")
{
if ((MobName == "" && getSuperUniqueName((int)txtFileNo) != "") || (MobName != "" && getSuperUniqueName((int)txtFileNo) == MobName))
{
if (!Nearest)
{
MobsHP = MobHPBuffer;
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
}
else
{
GoodMob = true;
}
}
}
}
}
return true;
}
}
//Form1_0.method_1("Nearest: " + Nearest + ", NearestMobPointer: 0x" + NearestMobPointer.ToString("X") + ", GoodMob:" + GoodMob, Color.Red);
//load nearest mobs
if (Nearest && NearestMobPointer != 0 && GoodMob)
catch
{
MobsPointerLocation = NearestMobPointer;
//mobsdatastruc = new byte[144];
//Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation, ref mobsdatastruc, 144);
//txtFileNo = BitConverter.ToUInt32(mobsdatastruc, 4);
CurrentPointerBytes = new byte[4];
Form1_0.Mem_0.ReadRawMemory(MobsPointerLocation + 4, ref CurrentPointerBytes, CurrentPointerBytes.Length);
txtFileNo = BitConverter.ToUInt32(CurrentPointerBytes, 0);
MobsName = ((EnumsMobsNPC.MonsterType)((int)txtFileNo)).ToString();
GetUnitPathData();
GetStatsAddr();
MobsHP = GetHPFromStats();
LastMobsPointerLocation = MobsPointerLocation;
LastMobtxtFileNo = txtFileNo;
LastMobPos.X = xPosFinal;
LastMobPos.Y = yPosFinal;
return true;
Form1_0.method_1("Couldn't 'GetMobs()'", Color.Red);
}
return false;

View File

@ -41,9 +41,9 @@ public class NPCStruc
try
{
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
NPCPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
NPCPointerLocation = ThisCurrentPointer.Key;
if (NPCPointerLocation > 0)
{
NPCdatastruc = new byte[144];
@ -73,7 +73,7 @@ public class NPCStruc
}
catch
{
Form1_0.method_1("Couldn't get All NPC Nearby!", Color.Red);
Form1_0.method_1("Couldn't 'GetAllNPCNearby()'", Color.Red);
}
return npcPositions2;
@ -98,30 +98,37 @@ public class NPCStruc
public bool GetNPC(string MobName)
{
txtFileNo = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
for (int i = 0; i < Form1_0.PatternsScan_0.AllNPCPointers.Count; i++)
try
{
NPCPointerLocation = Form1_0.PatternsScan_0.AllNPCPointers[i];
if (NPCPointerLocation > 0)
txtFileNo = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("NPC");
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllNPCPointers)
{
NPCdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(NPCPointerLocation, ref NPCdatastruc, 144);
txtFileNo = BitConverter.ToUInt32(NPCdatastruc, 4);
GetUnitPathData();
//Console.WriteLine((int)txtFileNo + " at: " + xPosFinal + ", " + yPosFinal);
if (Regex.Replace(((EnumsMobsNPC.MonsterType)((int)txtFileNo)).ToString(), @"[\d-]", string.Empty) == MobName)
NPCPointerLocation = ThisCurrentPointer.Key;
if (NPCPointerLocation > 0)
{
if (xPosFinal != 0 && yPosFinal != 0)
NPCdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(NPCPointerLocation, ref NPCdatastruc, 144);
txtFileNo = BitConverter.ToUInt32(NPCdatastruc, 4);
GetUnitPathData();
//Console.WriteLine((int)txtFileNo + " at: " + xPosFinal + ", " + yPosFinal);
if (Regex.Replace(((EnumsMobsNPC.MonsterType)((int)txtFileNo)).ToString(), @"[\d-]", string.Empty) == MobName)
{
return true;
if (xPosFinal != 0 && yPosFinal != 0)
{
return true;
}
}
}
}
}
catch
{
Form1_0.method_1("Couldn't 'GetNPC()'", Color.Red);
}
return false;
}

View File

@ -59,38 +59,46 @@ public class ObjectsStruc
public List<int[]> GetAllObjectsNearby(string ObjectType)
{
//"object", "GoodChest"
Form1_0.PatternsScan_0.scanForUnitsPointer("objects");
List<int[]> objectsPositions2 = new List<int[]>();
for (int i = 0; i < Form1_0.PatternsScan_0.AllObjectsPointers.Count; i++)
try
{
ObjectPointerLocation = Form1_0.PatternsScan_0.AllObjectsPointers[i];
if (ObjectPointerLocation > 0)
//"object", "GoodChest"
Form1_0.PatternsScan_0.scanForUnitsPointer("objects");
List<int[]> objectsPositions2 = new List<int[]>();
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllObjectsPointers)
{
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
//ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
//GetUnitData();
GetUnitPathData();
//Form1_0.method_1("Object: " + getObjectName((int)txtFileNo) + " - " + itemx + ", " + itemy, Color.DarkOrchid);
if (itemx != 0 && itemy != 0)
ObjectPointerLocation = ThisCurrentPointer.Key;
if (ObjectPointerLocation > 0)
{
if (getObjectName((int)txtFileNo) == ObjectType)
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
//ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
//GetUnitData();
GetUnitPathData();
//Form1_0.method_1("Object: " + getObjectName((int)txtFileNo) + " - " + itemx + ", " + itemy, Color.DarkOrchid);
if (itemx != 0 && itemy != 0)
{
//objectsPositions2.Add(Tuple.Create((int)itemx, (int)itemy));
objectsPositions2.Add(new int[2] { (int)itemx, (int)itemy });
if (getObjectName((int)txtFileNo) == ObjectType)
{
//objectsPositions2.Add(Tuple.Create((int)itemx, (int)itemy));
objectsPositions2.Add(new int[2] { (int)itemx, (int)itemy });
}
}
}
}
}
return objectsPositions2;
return objectsPositions2;
}
catch
{
Form1_0.method_1("Couldn't 'GetAllObjectsNearby()'", Color.Red);
}
return new List<int[]>();
}
public void DebugObjects()
@ -105,124 +113,131 @@ public class ObjectsStruc
public bool GetObjects(string ObjectType, bool Nearest, List<uint> IgnoredIDList = null, int MaxDistance = 999, string PortalOwner = "", int PortalArea = 0)
{
txtFileNo = 0;
ObjectUnitID = 0;
NearestObjectPointer = 0;
LastDiffX = 999;
LastDiffY = 999;
long LastPointer = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("objects");
for (int i = 0; i < Form1_0.PatternsScan_0.AllObjectsPointers.Count; i++)
try
{
ObjectPointerLocation = Form1_0.PatternsScan_0.AllObjectsPointers[i];
if (ObjectPointerLocation > 0)
txtFileNo = 0;
ObjectUnitID = 0;
NearestObjectPointer = 0;
LastDiffX = 999;
LastDiffY = 999;
long LastPointer = 0;
Form1_0.PatternsScan_0.scanForUnitsPointer("objects");
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllObjectsPointers)
{
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitData();
GetUnitPathData();
//Form1_0.method_1("Object: " + getObjectName((int)txtFileNo) + " - " + itemx + ", " + itemy, Color.DarkOrchid);
if (DebuggingObjects)
ObjectPointerLocation = ThisCurrentPointer.Key;
if (ObjectPointerLocation > 0)
{
if ((itemx != 0 && itemy != 0 && Form1_0.checkBoxShowValidObjectOnly.Checked) || !Form1_0.checkBoxShowValidObjectOnly.Checked)
{
Form1_0.AppendTextDebugObjects("ID:" + txtFileNo + "(" + getObjectName((int)txtFileNo) + ") at:" + itemx + ", " + itemy + Environment.NewLine);
}
}
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
if (ObjectType == "TownPortal")
{
if (isPortal((int)txtFileNo) == 1)
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitData();
GetUnitPathData();
//Form1_0.method_1("Object: " + getObjectName((int)txtFileNo) + " - " + itemx + ", " + itemy, Color.DarkOrchid);
if (DebuggingObjects)
{
if (ObjectUnitID != 0 && ObjectUnitID != 4 && !IsIgnoredID(IgnoredIDList) && itemx != 0 && itemy != 0)
if ((itemx != 0 && itemy != 0 && Form1_0.checkBoxShowValidObjectOnly.Checked) || !Form1_0.checkBoxShowValidObjectOnly.Checked)
{
//Form1_0.method_1("PortalID: 0x" + ObjectUnitID.ToString("X") + " to Area: " + interactType + " (" + ((Enums.Area)interactType) + ")", System.Drawing.Color.DarkMagenta);
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
Form1_0.AppendTextDebugObjects("ID:" + txtFileNo + "(" + getObjectName((int)txtFileNo) + ") at:" + itemx + ", " + itemy + Environment.NewLine);
}
}
//string SavePathh = Form1_0.ThisEndPath + "PortalStrucpPath";
//File.Create(SavePathh).Dispose();
//File.WriteAllBytes(SavePathh, pPath);
if ((PortalOwner != "" && ObjectOwnerName == PortalOwner)
|| PortalOwner == "")
if (ObjectType == "TownPortal")
{
if (isPortal((int)txtFileNo) == 1)
{
if (ObjectUnitID != 0 && ObjectUnitID != 4 && !IsIgnoredID(IgnoredIDList) && itemx != 0 && itemy != 0)
{
if ((PortalArea != 0 && interactType == PortalArea)
|| PortalArea == 0)
//Form1_0.method_1("PortalID: 0x" + ObjectUnitID.ToString("X") + " to Area: " + interactType + " (" + ((Enums.Area)interactType) + ")", System.Drawing.Color.DarkMagenta);
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
//string SavePathh = Form1_0.ThisEndPath + "PortalStrucpPath";
//File.Create(SavePathh).Dispose();
//File.WriteAllBytes(SavePathh, pPath);
if ((PortalOwner != "" && ObjectOwnerName == PortalOwner)
|| PortalOwner == "")
{
LastPointer = ObjectPointerLocation;
SetNearestObject(Nearest);
//return true;
if ((PortalArea != 0 && interactType == PortalArea)
|| PortalArea == 0)
{
LastPointer = ObjectPointerLocation;
SetNearestObject(Nearest);
//return true;
}
}
}
}
}
else if (ObjectType == "AllChests")
{
if (isChest((int)txtFileNo) == 1 && !IsIgnoredID(IgnoredIDList))
{
if (itemx != 0 && itemy != 0)
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
SetNearestObject(Nearest);
if (!Nearest)
{
return true;
}
}
}
}
else
{
if (getObjectName((int)txtFileNo) == ObjectType && !IsIgnoredID(IgnoredIDList))
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
if (itemx != 0 && itemy != 0)
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
SetNearestObject(Nearest);
if (!Nearest)
{
return true;
}
}
}
}
}
else if (ObjectType == "AllChests")
{
if (isChest((int)txtFileNo) == 1 && !IsIgnoredID(IgnoredIDList))
{
if (itemx != 0 && itemy != 0)
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
SetNearestObject(Nearest);
if (!Nearest)
{
return true;
}
}
}
}
else
{
if (getObjectName((int)txtFileNo) == ObjectType && !IsIgnoredID(IgnoredIDList))
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
if (itemx != 0 && itemy != 0)
{
//Form1_0.method_1("Object: " + itemx + ", " + itemy + " - " + getObjectName((int)txtFileNo), Color.DarkOrchid);
SetNearestObject(Nearest);
if (!Nearest)
{
return true;
}
}
}
}
}
}
//load nearest objects
if (Nearest && NearestObjectPointer != 0)
{
ObjectPointerLocation = NearestObjectPointer;
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitPathData();
if (MaxDistance != 999)
//load nearest objects
if (Nearest && NearestObjectPointer != 0)
{
if (itemx != 0 && itemy != 0)
{
int DiffXPlayer = itemx - Form1_0.PlayerScan_0.xPosFinal;
int DiffYPlayer = itemy - Form1_0.PlayerScan_0.yPosFinal;
if (DiffXPlayer < 0) DiffXPlayer = -DiffXPlayer;
if (DiffYPlayer < 0) DiffYPlayer = -DiffYPlayer;
ObjectPointerLocation = NearestObjectPointer;
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(ObjectPointerLocation, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitPathData();
if (DiffXPlayer <= MaxDistance
&& DiffYPlayer <= MaxDistance)
if (MaxDistance != 999)
{
if (itemx != 0 && itemy != 0)
{
return true;
int DiffXPlayer = itemx - Form1_0.PlayerScan_0.xPosFinal;
int DiffYPlayer = itemy - Form1_0.PlayerScan_0.yPosFinal;
if (DiffXPlayer < 0) DiffXPlayer = -DiffXPlayer;
if (DiffYPlayer < 0) DiffYPlayer = -DiffYPlayer;
if (DiffXPlayer <= MaxDistance
&& DiffYPlayer <= MaxDistance)
{
return true;
}
else
{
return false;
}
}
else
{
@ -231,29 +246,29 @@ public class ObjectsStruc
}
else
{
return false;
return true;
}
}
else
if (Nearest && NearestObjectPointer == 0)
{
return false;
}
if (ObjectType == "TownPortal" && LastPointer > 0)
{
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(LastPointer, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitPathData();
return true;
}
}
if (Nearest && NearestObjectPointer == 0)
catch
{
return false;
}
if (ObjectType == "TownPortal" && LastPointer > 0)
{
//objectdatastruc = new byte[144];
objectdatastruc = new byte[64];
Form1_0.Mem_0.ReadRawMemory(LastPointer, ref objectdatastruc, objectdatastruc.Length);
txtFileNo = BitConverter.ToUInt32(objectdatastruc, 4);
ObjectUnitID = BitConverter.ToUInt32(objectdatastruc, 0x08);
GetUnitPathData();
return true;
Form1_0.method_1("Couldn't 'GetObjects()'", Color.Red);
}
return false;

View File

@ -14,10 +14,10 @@ public class PatternsScan
public byte[] UnitBuffer = new byte[] { };
public List<long> AllItemsPointers = new List<long>();
public List<long> AllObjectsPointers = new List<long>(); //->refer to all gameobjects
public List<long> AllPlayersPointers = new List<long>();
public List<long> AllNPCPointers = new List<long>();
public Dictionary<long, bool> AllItemsPointers = new Dictionary<long, bool>();
public Dictionary<long, bool> AllObjectsPointers = new Dictionary<long, bool>(); //->refer to all gameobjects
public Dictionary<long, bool> AllPlayersPointers = new Dictionary<long, bool>();
public Dictionary<long, bool> AllNPCPointers = new Dictionary<long, bool>();
public List<long> AllPossiblePointers = new List<long>();
@ -26,7 +26,7 @@ public class PatternsScan
public List<long> AllPossibleObjectsPointers = new List<long>();
public List<long> AllPossibleNPCPointers = new List<long>();
public List<long> AllScannedPointers = new List<long>();
public Dictionary<long, bool> AllScannedPointers = new Dictionary<long, bool>();
//"04 00 00 00 ?? ?? 00 00";
byte[] ThisCheckbytes = new byte[] { 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00 };
@ -656,10 +656,10 @@ public class PatternsScan
public void UnitPatternScanV1(string SearchUnitsType)
{
if (SearchUnitsType == "item") AllItemsPointers = new List<long>();
if (SearchUnitsType == "player") AllPlayersPointers = new List<long>();
if (SearchUnitsType == "objects") AllObjectsPointers = new List<long>();
if (SearchUnitsType == "NPC") AllNPCPointers = new List<long>();
if (SearchUnitsType == "item") AllItemsPointers = new Dictionary<long, bool>();
if (SearchUnitsType == "player") AllPlayersPointers = new Dictionary<long, bool>();
if (SearchUnitsType == "objects") AllObjectsPointers = new Dictionary<long, bool>();
if (SearchUnitsType == "NPC") AllNPCPointers = new Dictionary<long, bool>();
StartIndexItem = long.MaxValue;
@ -725,13 +725,13 @@ public class PatternsScan
//Console.WriteLine("Unit start: 0x" + CheckThisI.ToString("X"));
//Console.WriteLine("Unit end: 0x" + (CheckThisI + ((0x48 * ScanUnitsNumber / 2)) + ((0x170 * ScanUnitsNumber / 2))).ToString("X"));
AllScannedPointers = new List<long>();
AllScannedPointers = new Dictionary<long, bool>();
for (int i = 0; i < ScanUnitsNumber; i++)
{
if ((i % 2) == 1) CheckThisI += 0x48;
else CheckThisI += 0x170;
AllScannedPointers.Add(CheckThisI);
AllScannedPointers.Add(CheckThisI, true);
if (SearchUnitsType == "item")
{
@ -764,11 +764,11 @@ public class PatternsScan
if (SearchUnitsType == "item")
{
for (int i = 0; i < AllItemsPointers.Count; i++)
foreach (var ThisCurrentPointer in AllItemsPointers)
{
CheckThisI = AllItemsPointers[i];
CheckThisI = ThisCurrentPointer.Key;
if (!Form1_0.ItemsStruc_0.IsIncludedInList(AllScannedPointers, CheckThisI))
if (!AllScannedPointers.ContainsKey(CheckThisI))
{
//AllScannedPointers.Add(CheckThisI);
//Form1_0.method_1("Missed item pointer: " + CheckThisI.ToString("X"), Color.Red);
@ -781,11 +781,11 @@ public class PatternsScan
}
if (SearchUnitsType == "player")
{
for (int i = 0; i < AllPlayersPointers.Count; i++)
foreach (var ThisCurrentPointer in AllPlayersPointers)
{
CheckThisI = AllPlayersPointers[i];
CheckThisI = ThisCurrentPointer.Key;
if (!Form1_0.ItemsStruc_0.IsIncludedInList(AllScannedPointers, CheckThisI))
if (!AllScannedPointers.ContainsKey(CheckThisI))
{
//AllScannedPointers.Add(CheckThisI);
//Form1_0.method_1("Missed player pointer: " + CheckThisI.ToString("X"), Color.Red);
@ -798,11 +798,11 @@ public class PatternsScan
}
if (SearchUnitsType == "objects")
{
for (int i = 0; i < AllObjectsPointers.Count; i++)
foreach (var ThisCurrentPointer in AllObjectsPointers)
{
CheckThisI = AllObjectsPointers[i];
CheckThisI = ThisCurrentPointer.Key;
if (!Form1_0.ItemsStruc_0.IsIncludedInList(AllScannedPointers, CheckThisI))
if (!AllScannedPointers.ContainsKey(CheckThisI))
{
//AllScannedPointers.Add(CheckThisI);
//Form1_0.method_1("Missed object pointer: " + CheckThisI.ToString("X"), Color.Red);
@ -815,11 +815,11 @@ public class PatternsScan
}
if (SearchUnitsType == "NPC")
{
for (int i = 0; i < AllNPCPointers.Count; i++)
foreach (var ThisCurrentPointer in AllNPCPointers)
{
CheckThisI = AllNPCPointers[i];
CheckThisI = ThisCurrentPointer.Key;
if (!Form1_0.ItemsStruc_0.IsIncludedInList(AllScannedPointers, CheckThisI))
if (!AllScannedPointers.ContainsKey(CheckThisI))
{
//AllScannedPointers.Add(CheckThisI);
//Form1_0.method_1("Missed npc pointer: " + CheckThisI.ToString("X"), Color.Red);
@ -858,18 +858,12 @@ public class PatternsScan
{
if (AllItemsPointers.Count > 0)
{
for (int i = 0; i < AllItemsPointers.Count; i++)
{
if (AllItemsPointers[i] == TPoiinter)
{
return;
}
}
AllItemsPointers.Add(TPoiinter);
if (AllItemsPointers.ContainsKey(TPoiinter)) return;
AllItemsPointers.Add(TPoiinter, true);
}
else
{
AllItemsPointers.Add(TPoiinter);
AllItemsPointers.Add(TPoiinter, true);
}
}
@ -877,18 +871,12 @@ public class PatternsScan
{
if (AllPlayersPointers.Count > 0)
{
for (int i = 0; i < AllPlayersPointers.Count; i++)
{
if (AllPlayersPointers[i] == TPoiinter)
{
return;
}
}
AllPlayersPointers.Add(TPoiinter);
if (AllPlayersPointers.ContainsKey(TPoiinter)) return;
AllPlayersPointers.Add(TPoiinter, true);
}
else
{
AllPlayersPointers.Add(TPoiinter);
AllPlayersPointers.Add(TPoiinter, true);
}
}
@ -896,18 +884,12 @@ public class PatternsScan
{
if (AllObjectsPointers.Count > 0)
{
for (int i = 0; i < AllObjectsPointers.Count; i++)
{
if (AllObjectsPointers[i] == TPoiinter)
{
return;
}
}
AllObjectsPointers.Add(TPoiinter);
if (AllObjectsPointers.ContainsKey(TPoiinter)) return;
AllObjectsPointers.Add(TPoiinter, true);
}
else
{
AllObjectsPointers.Add(TPoiinter);
AllObjectsPointers.Add(TPoiinter, true);
}
}
@ -915,18 +897,12 @@ public class PatternsScan
{
if (AllNPCPointers.Count > 0)
{
for (int i = 0; i < AllNPCPointers.Count; i++)
{
if (AllNPCPointers[i] == TPoiinter)
{
return;
}
}
AllNPCPointers.Add(TPoiinter);
if (AllNPCPointers.ContainsKey(TPoiinter)) return;
AllNPCPointers.Add(TPoiinter, true);
}
else
{
AllNPCPointers.Add(TPoiinter);
AllNPCPointers.Add(TPoiinter, true);
}
}
}

View File

@ -435,7 +435,7 @@ public class PlayerScan
TimeSinceSameHP = DateTime.Now;
TimeSinceSameHPSet = true;
}
if ((DateTime.Now - TimeSinceSameHP).TotalSeconds > 2 && MaxHPValueWithBO != PlayerMaxHP)
if ((DateTime.Now - TimeSinceSameHP).TotalSeconds > CharConfig.PlayerMaxHPCheckDelay && MaxHPValueWithBO != PlayerMaxHP)
{
MaxHPValueWithBO = PlayerMaxHP;
MaxManaValueWithBO = PlayerMaxMana;
@ -561,172 +561,237 @@ public class PlayerScan
{
FoundPlayer = false;
int SizeArray = 0;
int SizeIncrement = 0;
byte[] unitTableBufferT = new byte[] { };
if (QuickScan)
try
{
SizeArray = (128 + 516) * 8;
SizeIncrement = 8;
unitTableBufferT = new byte[SizeArray];
long UnitOffset = (long)Form1_0.BaseAddress + (long)Form1_0.offsets["unitTable"] + Form1_0.UnitStrucOffset;
Form1_0.Mem_0.ReadRawMemory(UnitOffset, ref unitTableBufferT, SizeArray);
}
else
{
Form1_0.PatternsScan_0.scanForUnitsPointer("player");
SizeArray = Form1_0.PatternsScan_0.AllPlayersPointers.Count;
SizeIncrement = 1;
}
PlayerStrucCount = 0;
for (int i = 0; i < SizeArray; i += SizeIncrement)
{
long UnitPointerLocation = 0;
int SizeArray = 0;
int SizeIncrement = 0;
byte[] unitTableBufferT = new byte[] { };
if (QuickScan)
{
UnitPointerLocation = BitConverter.ToInt64(unitTableBufferT, i);
}
else
{
UnitPointerLocation = Form1_0.PatternsScan_0.AllPlayersPointers[i];
}
SizeArray = (128 + 516) * 8;
SizeIncrement = 8;
unitTableBufferT = new byte[SizeArray];
long UnitOffset = (long)Form1_0.BaseAddress + (long)Form1_0.offsets["unitTable"] + Form1_0.UnitStrucOffset;
Form1_0.Mem_0.ReadRawMemory(UnitOffset, ref unitTableBufferT, SizeArray);
if (UnitPointerLocation > 0)
{
byte[] itemdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(UnitPointerLocation, ref itemdatastruc, 144);
// Do ONLY UnitType:0 && TxtFileNo:3
//if (BitConverter.ToUInt32(itemdatastruc, 0) == 0 && BitConverter.ToUInt32(itemdatastruc, 4) == 3)
if (BitConverter.ToUInt32(itemdatastruc, 0) == 0)
PlayerStrucCount = 0;
for (int i = 0; i < SizeArray; i += SizeIncrement)
{
PlayerStrucCount++;
//Form1_0.method_1("PPointerLocation: 0x" + (UnitPointerLocation).ToString("X"));
long UnitPointerLocation = BitConverter.ToInt64(unitTableBufferT, i);
long pUnitDataPtr = BitConverter.ToInt64(itemdatastruc, 0x10);
byte[] pUnitData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(pUnitDataPtr, ref pUnitData, 144);
string name = "";
for (int i2 = 0; i2 < 16; i2++)
if (UnitPointerLocation > 0)
{
if (pUnitData[i2] != 0x00)
byte[] itemdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(UnitPointerLocation, ref itemdatastruc, 144);
// Do ONLY UnitType:0 && TxtFileNo:3
//if (BitConverter.ToUInt32(itemdatastruc, 0) == 0 && BitConverter.ToUInt32(itemdatastruc, 4) == 3)
if (BitConverter.ToUInt32(itemdatastruc, 0) == 0)
{
name += (char)pUnitData[i2];
PlayerStrucCount++;
//Form1_0.method_1("PPointerLocation: 0x" + (UnitPointerLocation).ToString("X"));
long pUnitDataPtr = BitConverter.ToInt64(itemdatastruc, 0x10);
byte[] pUnitData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(pUnitDataPtr, ref pUnitData, 144);
string name = "";
for (int i2 = 0; i2 < 16; i2++)
{
if (pUnitData[i2] != 0x00)
{
name += (char)pUnitData[i2];
}
}
//name = name.Replace("?", "");
//Form1_0.method_1("PNAME: " + name, Color.Red);
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 0));
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 4));
long ppath = BitConverter.ToInt64(itemdatastruc, 0x38);
byte[] ppathData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(ppath, ref ppathData, 144);
//if posX equal not zero
if (BitConverter.ToInt16(ppathData, 2) != 0 && name == CharConfig.PlayerCharName)
{
Form1_0.method_1("------------------------------------------", Color.DarkBlue);
PlayerPointer = UnitPointerLocation;
Form1_0.Grid_SetInfos("Pointer", "0x" + PlayerPointer.ToString("X"));
FoundPlayer = true;
unitId = BitConverter.ToUInt32(itemdatastruc, 0x08);
Form1_0.method_1("Player ID: 0x" + unitId.ToString("X"), Color.DarkBlue);
/*string SavePathh = Form1_0.ThisEndPath + "DumpPlayerStruc";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, itemdatastruc);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerUnitData";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, pUnitData);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerPath";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, ppathData);*/
return;
}
}
}
//name = name.Replace("?", "");
//Form1_0.method_1("PNAME: " + name, Color.Red);
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 0));
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 4));
long ppath = BitConverter.ToInt64(itemdatastruc, 0x38);
byte[] ppathData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(ppath, ref ppathData, 144);
//if posX equal not zero
if (BitConverter.ToInt16(ppathData, 2) != 0 && name == CharConfig.PlayerCharName)
{
Form1_0.method_1("------------------------------------------", Color.DarkBlue);
PlayerPointer = UnitPointerLocation;
Form1_0.Grid_SetInfos("Pointer", "0x" + PlayerPointer.ToString("X"));
FoundPlayer = true;
unitId = BitConverter.ToUInt32(itemdatastruc, 0x08);
Form1_0.method_1("Player ID: 0x" + unitId.ToString("X"), Color.DarkBlue);
/*string SavePathh = Form1_0.ThisEndPath + "DumpPlayerStruc";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, itemdatastruc);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerUnitData";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, pUnitData);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerPath";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, ppathData);*/
return;
}
}
}
else
{
Form1_0.PatternsScan_0.scanForUnitsPointer("player");
PlayerStrucCount = 0;
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllPlayersPointers)
{
long UnitPointerLocation = ThisCurrentPointer.Key;
if (UnitPointerLocation > 0)
{
byte[] itemdatastruc = new byte[144];
Form1_0.Mem_0.ReadRawMemory(UnitPointerLocation, ref itemdatastruc, 144);
// Do ONLY UnitType:0 && TxtFileNo:3
//if (BitConverter.ToUInt32(itemdatastruc, 0) == 0 && BitConverter.ToUInt32(itemdatastruc, 4) == 3)
if (BitConverter.ToUInt32(itemdatastruc, 0) == 0)
{
PlayerStrucCount++;
//Form1_0.method_1("PPointerLocation: 0x" + (UnitPointerLocation).ToString("X"));
long pUnitDataPtr = BitConverter.ToInt64(itemdatastruc, 0x10);
byte[] pUnitData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(pUnitDataPtr, ref pUnitData, 144);
string name = "";
for (int i2 = 0; i2 < 16; i2++)
{
if (pUnitData[i2] != 0x00)
{
name += (char)pUnitData[i2];
}
}
//name = name.Replace("?", "");
//Form1_0.method_1("PNAME: " + name, Color.Red);
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 0));
//Console.WriteLine(BitConverter.ToUInt32(itemdatastruc, 4));
long ppath = BitConverter.ToInt64(itemdatastruc, 0x38);
byte[] ppathData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(ppath, ref ppathData, 144);
//if posX equal not zero
if (BitConverter.ToInt16(ppathData, 2) != 0 && name == CharConfig.PlayerCharName)
{
Form1_0.method_1("------------------------------------------", Color.DarkBlue);
PlayerPointer = UnitPointerLocation;
Form1_0.Grid_SetInfos("Pointer", "0x" + PlayerPointer.ToString("X"));
FoundPlayer = true;
unitId = BitConverter.ToUInt32(itemdatastruc, 0x08);
Form1_0.method_1("Player ID: 0x" + unitId.ToString("X"), Color.DarkBlue);
/*string SavePathh = Form1_0.ThisEndPath + "DumpPlayerStruc";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, itemdatastruc);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerUnitData";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, pUnitData);
SavePathh = Form1_0.ThisEndPath + "DumpPlayerPath";
File.Create(SavePathh).Dispose();
File.WriteAllBytes(SavePathh, ppathData);*/
return;
}
}
}
}
}
}
catch
{
Form1_0.method_1("Couldn't 'scanForPlayer()'", Color.Red);
}
}
public bool ScanForOthersPlayers(long ThisUnitID, string ThisPlayerName, bool GetCorpseOnly)
{
//this can be used to get self corpse??
Form1_0.PatternsScan_0.scanForUnitsPointer("player");
for (int i = 0; i < Form1_0.PatternsScan_0.AllPlayersPointers.Count; i++)
try
{
long UnitPointerLocation = Form1_0.PatternsScan_0.AllPlayersPointers[i];
if (UnitPointerLocation > 0)
//this can be used to get self corpse??
Form1_0.PatternsScan_0.scanForUnitsPointer("player");
foreach (var ThisCurrentPointer in Form1_0.PatternsScan_0.AllPlayersPointers)
{
byte[] itemdatastruc = new byte[0x98];
Form1_0.Mem_0.ReadRawMemory(UnitPointerLocation, ref itemdatastruc, itemdatastruc.Length);
long pInventory = BitConverter.ToInt64(itemdatastruc, 0x90);
if (pInventory > 0)
long UnitPointerLocation = ThisCurrentPointer.Key;
if (UnitPointerLocation > 0)
{
unitIdOther = BitConverter.ToUInt32(itemdatastruc, 0x08);
byte[] itemdatastruc = new byte[0x98];
Form1_0.Mem_0.ReadRawMemory(UnitPointerLocation, ref itemdatastruc, itemdatastruc.Length);
long OtherpathAddress = Form1_0.Mem_0.ReadInt64Raw((IntPtr)(PlayerPointer + 0x38));
long OtherxPos = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x02));
long OtheryPos = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x06));
long OtherxPosOffset = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x00));
long OtheryPosOffset = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x04));
long OtherxPosOffsetPercent = (OtherxPosOffset / 65536); //get percentage
long OtheryPosOffsetPercent = (OtheryPosOffset / 65536); //get percentage
xPosFinalOtherP = (ushort)(OtherxPos + OtherxPosOffsetPercent);
yPosFinalOtherP = (ushort)(OtheryPos + OtheryPosOffsetPercent);
long pUnitDataPtr = BitConverter.ToInt64(itemdatastruc, 0x10);
byte[] pUnitData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(pUnitDataPtr, ref pUnitData, 144);
string name = "";
for (int i2 = 0; i2 < 16; i2++)
long pInventory = BitConverter.ToInt64(itemdatastruc, 0x90);
if (pInventory > 0)
{
if (pUnitData[i2] != 0x00)
{
name += (char)pUnitData[i2];
}
else
{
break;
}
}
pNameOther = name;
unitIdOther = BitConverter.ToUInt32(itemdatastruc, 0x08);
IsCorpse = false;
if (Form1_0.Mem_0.ReadByteRaw((IntPtr)(PlayerPointer + 0x1A6)) == 1)
{
IsCorpse = true;
}
if (xPosFinalOtherP > 1 && yPosFinalOtherP > 1)
{
if (unitIdOther != 0)
long OtherpathAddress = Form1_0.Mem_0.ReadInt64Raw((IntPtr)(PlayerPointer + 0x38));
long OtherxPos = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x02));
long OtheryPos = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x06));
long OtherxPosOffset = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x00));
long OtheryPosOffset = Form1_0.Mem_0.ReadUInt16Raw((IntPtr)(OtherpathAddress + 0x04));
long OtherxPosOffsetPercent = (OtherxPosOffset / 65536); //get percentage
long OtheryPosOffsetPercent = (OtheryPosOffset / 65536); //get percentage
xPosFinalOtherP = (ushort)(OtherxPos + OtherxPosOffsetPercent);
yPosFinalOtherP = (ushort)(OtheryPos + OtheryPosOffsetPercent);
long pUnitDataPtr = BitConverter.ToInt64(itemdatastruc, 0x10);
byte[] pUnitData = new byte[144];
Form1_0.Mem_0.ReadRawMemory(pUnitDataPtr, ref pUnitData, 144);
string name = "";
for (int i2 = 0; i2 < 16; i2++)
{
if (unitIdOther == ThisUnitID)
if (pUnitData[i2] != 0x00)
{
if (!GetCorpseOnly || (GetCorpseOnly && IsCorpse))
{
return true;
}
name += (char)pUnitData[i2];
}
else
{
break;
}
}
if (ThisPlayerName != "")
{
//Form1_0.method_1("TEST player corpse scan name: " + ThisPlayerName + "|" + IsCorpse, Color.OrangeRed);
pNameOther = name;
if (pNameOther == ThisPlayerName)
IsCorpse = false;
if (Form1_0.Mem_0.ReadByteRaw((IntPtr)(PlayerPointer + 0x1A6)) == 1)
{
IsCorpse = true;
}
if (xPosFinalOtherP > 1 && yPosFinalOtherP > 1)
{
if (unitIdOther != 0)
{
if (!GetCorpseOnly || (GetCorpseOnly && IsCorpse))
if (unitIdOther == ThisUnitID)
{
return true;
if (!GetCorpseOnly || (GetCorpseOnly && IsCorpse))
{
return true;
}
}
}
if (ThisPlayerName != "")
{
//Form1_0.method_1("TEST player corpse scan name: " + ThisPlayerName + "|" + IsCorpse, Color.OrangeRed);
if (pNameOther == ThisPlayerName)
{
if (!GetCorpseOnly || (GetCorpseOnly && IsCorpse))
{
return true;
}
}
}
}
@ -734,6 +799,10 @@ public class PlayerScan
}
}
}
catch
{
Form1_0.method_1("Couldn't 'ScanForOthersPlayers()'", Color.Red);
}
return false;
}

View File

@ -150,6 +150,12 @@
<Compile Include="Config\ScriptsLoader - Copier.cs" />
<Compile Include="Config\ScriptsLoader.cs" />
<Compile Include="Config\SettingsLoader.cs" />
<Compile Include="FormAdvancedSettings.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormAdvancedSettings.Designer.cs">
<DependentUpon>FormAdvancedSettings.cs</DependentUpon>
</Compile>
<Compile Include="FormCharSettings.cs">
<SubType>Form</SubType>
</Compile>
@ -181,6 +187,7 @@
<DependentUpon>OverlayForm.cs</DependentUpon>
</Compile>
<Compile Include="PathFinding.cs" />
<Compile Include="Scripts\AreaScript.cs" />
<Compile Include="Scripts\Battle.cs" />
<Compile Include="Scripts\Cubing.cs" />
<Compile Include="Scripts\Gamble.cs" />
@ -224,6 +231,9 @@
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormAdvancedSettings.resx">
<DependentUpon>FormAdvancedSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormCharSettings.resx">
<DependentUpon>FormCharSettings.cs</DependentUpon>
</EmbeddedResource>

View File

@ -104,3 +104,32 @@ ShowPathFinding=true
ShowExits=true
ShowMapHackShowLines=true
ShowUnitsScanCount=false
//#######################################
//BOT DELAYS/ADVANCED SETTINGS
//#######################################
MaxDelayNewGame=250
WaypointEnterDelay=350
MaxMercReliveTries=3
MaxItemIDTries=10
MaxItemGrabTries=50
MaxItemStashTries=6
StashFullTries=15
MaxShopTries=6
MaxRepairTries=3
MaxGambleTries=3
MaxBattleAttackTries=8
TakeHPPotionDelay=3500
TakeManaPotionDelay=2500
OverallDelaysMultiplyer=1.0
EndBattleGrabDelay=5
MaxTimeEnterGame=180
BaalWavesCastDelay=6
ChaosWaitingSealBossDelay=2
RecastBODelay=180
TownSwitchAreaDelay=2
PublicGameTPRespawnDelay=180
PlayerMaxHPCheckDelay=2000
LeechEnterTPDelay=600
MephistoRedPortalEnterDelay=800
CubeItemPlaceDelay=16

View File

@ -129,6 +129,9 @@ Perfect Diamond
//#######################################
//###### NORMAL ITEMS
//#######################################
//##### Gold
//[Name] == Gold && [Quality] == normal && [GoldInPlayer] >= 5000 // Gold
//##### Helms (Exceptional)
[Name] == WarHat && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [EnhancedDefense] >= 10 // Delirium or Dream
[Name] == Sallet && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [EnhancedDefense] >= 10 // Delirium or Dream
@ -235,79 +238,79 @@ Perfect Diamond
//##### Belts
//##### Barbarian Helms (Elite)
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillBattleCommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillbattlecommand] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillFindItem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillfinditem] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillBattleOrders]+[SkillShout] >= 5 // Delirium
//[Name] == CarnageHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == FuryVisor && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == DestroyerHelm && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == ConquerorCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//[Name] == GuardianCrown && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillbattleorders]+[Skillshout] >= 5 // Delirium
//##### Druid Pelts (Elite)
[Name] == BloodSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == SunSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == EarthSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == SkySpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == DreamSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
[Name] == BloodSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == SunSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == EarthSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == SkySpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
[Name] == DreamSpirit && [Quality] == superior && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == BloodSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == SunSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == EarthSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == SkySpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == DreamSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [SkillHurricane]+[SkillTornado] >= 5 // Delirium
//[Name] == BloodSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == SunSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == EarthSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == SkySpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//[Name] == DreamSpirit && [Quality] == normal && [Flag] != ethereal && [Sockets] == 3 && [Skillhurricane]+[Skilltornado] >= 5 // Delirium
//##### Necromancer Shrunken Heads (Elite)
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == superior && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillbonespear]+[Skillbonespirit] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [SkillPoisonExplosion]+[SkillPoisonNova] >= 5 // Splender
//[Name] == MinionSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == HellspawnSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == OverseerSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == SuccubusSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//[Name] == BloodlordSkull && [Quality] == normal && [Flag] != ethereal && [Sockets] == 2 && [Skillpoisonexplosion]+[Skillpoisonnova] >= 5 // Splender
//##### Axes
@ -382,10 +385,10 @@ Perfect Diamond
//##### Scepters
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [SkillBlessedHammer]+[SkillConcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [SkillBlessedHammer]+[SkillConcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [SkillFistOfTheHeavens]+[SkillConviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [SkillFistOfTheHeavens]+[SkillConviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [Skillblessedhammer]+[Skillconcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [Skillblessedhammer]+[Skillconcentration] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == superior && [Sockets] == 5 && [Skillfistoftheheavens]+[Skillconviction] >= 5 // Call to Arms
//[Type] == scepter && [Quality] == normal && [Sockets] == 5 && [Skillfistoftheheavens]+[Skillconviction] >= 5 // Call to Arms
//##### Spears (Elite)
[Name] == HyperionSpear && [Quality] == superior && [Flag] == ethereal && [Sockets] == 6 && [EnhancedDamage] >= 10 // Breath of the Dying
@ -436,12 +439,12 @@ Perfect Diamond
//##### Throwing
//##### Wands
//[Type] == wand && [Quality] == superior && [Sockets] != 1 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // White
//[Type] == wand && [Quality] == normal && [Sockets] != 1 && [SkillBoneSpear]+[SkillBoneSpirit] >= 5 // White
//[Type] == wand && [Quality] == superior && [Sockets] != 1 && [Skillbonespear]+[Skillbonespirit] >= 5 // White
//[Type] == wand && [Quality] == normal && [Sockets] != 1 && [Skillbonespear]+[Skillbonespirit] >= 5 // White
//##### Amazon Weapons (Elite)
[Name] == MatriarchalBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowAndCrossbowSkillTab] >= 2 // Faith
[Name] == GrandMatronBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowAndCrossbowSkillTab] >= 2 // Faith
[Name] == MatriarchalBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowandCrossbowSkillTab] >= 2 // Faith
[Name] == GrandMatronBow && [Quality] == superior && [Sockets] == 4 && [EnhancedDamage] >= 10 && [BowandCrossbowSkillTab] >= 2 // Faith
//##### Assassin Katars
//[Name] == Suwayyah && [Quality] == superior && [Flag] != ethereal && [Sockets] == 0 && [EnhancedDamage] >= 10 // Chaos
@ -484,7 +487,7 @@ Perfect Diamond
//[Name] == DuskShroud && [Quality] == unique && [Flag] != ethereal && [PassiveColdMastery] >= 15 // Ormus' Robes
[Name] == BalrogSkin && [Quality] == unique && [AllSkills] >= 2 && [EnhancedDefense] >= 165 // Arkaine's Valor
[Name] == WireFleece && [Quality] == unique && [Flag] == ethereal && [EnhancedDefense] >= 180 // The Gladiator's Bane
[Name] == KrakenShell && [Quality] == unique && [DamageResist] >= 20 && [Strength] >= 45 // Leviathan
[Name] == KrakenShell && [Quality] == unique && [DamageReduced] >= 20 && [Strength] >= 45 // Leviathan
[Name] == SacredArmor && [Quality] == unique && [Strength] >= 25 // Tyrael's Might
//##### Shields
@ -494,8 +497,8 @@ Perfect Diamond
//##### Gloves
[Name] == ChainGloves && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 25 && [MagicFind] >= 40 // Chance Guards
//[Name] == LightGauntlets && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 25 // Magefist
//[Name] == BattleGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 64 && [EnhancedDefense] >= 25 && [FCR] >= 20 // Magefist
//[Name] == CrusaderGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 90 && [EnhancedDefense] >= 25 && [FCR] >= 20 // Magefist
//[Name] == BattleGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 64 && [EnhancedDefense] >= 25 && [FasterCastRate] >= 20 // Magefist
//[Name] == CrusaderGauntlets && [Quality] == unique && [Flag] != ethereal && [Defense] >= 90 && [EnhancedDefense] >= 25 && [FasterCastRate] >= 20 // Magefist
[Name] == VampireboneGloves && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 100 && [Strength] >= 10 && [LifeLeech] >= 8 // Dracul's Grasp
[Name] == OgreGauntlets && [Quality] == unique && [Flag] != ethereal // Steelrend
@ -508,12 +511,12 @@ Perfect Diamond
[Name] == MyrmidonGreaves && [Quality] == unique && [Flag] != ethereal // Gore Rider
//[Name] == ScarabshellBoots && [Quality] == unique && [Flag] != ethereal // Sandstorm Trek
[Name] == ScarabshellBoots && [Quality] == unique // Sandstorm Trek
//[Name] == BoneweaveBoots && [Quality] == unique && [Flag] != ethereal && [Strength] >= 15 && [SkillSkeletonMastery] >= 2 // Marrowwalk
//[Name] == BoneweaveBoots && [Quality] == unique && [Flag] != ethereal && [Strength] >= 15 && [Skillskeletonmastery] >= 2 // Marrowwalk
//[Name] == MyrmidonGreaves && [Quality] == unique && [Dexterity] >= 20 && [ShadowDisciplinesSkillTab] >= 1 // Shadow Dancer
//##### Belts
//[Name] == HeavyBelt && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 50 && [GoldFind] >= 80 // Goldwrap
//[Name] == DemonhideSash && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 165 && [DamageResist] >= 12 && [LifeLeech] >= 8 // String of Ears
//[Name] == DemonhideSash && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 165 && [DamageReduced] >= 12 && [LifeLeech] >= 8 // String of Ears
[Name] == WarBelt && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 180 // Thundergod's Vigor
[Name] == SpiderwebSash && [Quality] == unique && [Flag] != ethereal // Arachnid Mesh
[Name] == VampirefangBelt && [Quality] == unique && [Flag] != ethereal && [LifeLeech] >= 7 // Nosferatu's Coil
@ -534,7 +537,7 @@ Perfect Diamond
//##### Necromancer Shrunken Heads
//[Name] == HierophantTrophy && [Quality] == unique && [Flag] != ethereal && [EnhancedDefense] >= 180 // Homunculus
//[Name] == BloodlordSkull && [Quality] == unique && [Flag] != ethereal && [NecromancerSummoningSkillTab]+[PoisonAndBoneSkillTab]+[CursesSkillTab] >= 7 // Darkforce Spawn
//[Name] == BloodlordSkull && [Quality] == unique && [Flag] != ethereal && [NecromancerSummoningSkillTab]+[PoisonandBoneSkillTab]+[CursesSkillTab] >= 7 // Darkforce Spawn
//##### Axes
[Name] == EttinAxe && [Quality] == unique && [Flag] == ethereal && [Sockets] >= 4 && [EnhancedDamage] >= 240 // Rune Master
@ -552,7 +555,7 @@ Perfect Diamond
//[Name] == BoneKnife && [Quality] == unique // Wizardspike
//##### Maces
//[Name] == Scourge && [Quality] == unique && [EnhancedDamage] >= 270 && [IAS] == 30 // Stormlash
//[Name] == Scourge && [Quality] == unique && [EnhancedDamage] >= 270 && [IncreasedAttackSpeed] == 30 // Stormlash
//##### Polearms
//[Name] == OgreAxe && [Quality] == unique && [Flag] == ethereal && [EnhancedDamage] >= 290 // Bonehew
@ -560,9 +563,9 @@ Perfect Diamond
//[Name] == CrypticAxe && [Quality] == unique && [Flag] == ethereal && [Sockets] >= 3 && [EnhancedDamage] >= 230 // Tomb Reaver
//##### Scepters
//[Name] == MightyScepter && [Quality] == unique && [Sockets] >= 2 && [EnhancedDamage] >= 270 && [AddPaladinSkills] >= 3 && [IAS] >= 20 // Heaven's Light
//[Name] == MightyScepter && [Quality] == unique && [Sockets] >= 2 && [EnhancedDamage] >= 270 && [AddPaladinSkills] >= 3 && [IncreasedAttackSpeed] >= 20 // Heaven's Light
//[Name] == MightyScepter && [Quality] == unique && [EnhancedDamage] >= 270 && [NormalDamage] >= 90 && [RequirementPercent] <= -60 // The Redeemer
//[Name] == Caduceus && [Quality] == unique && [EnhancedDamage] >= 260 && [PalidinCombatSkillTab] >= 3 // Astreon's Iron Ward
//[Name] == Caduceus && [Quality] == unique && [EnhancedDamage] >= 260 && [PaladinCombatSkillTab] >= 3 // Astreon's Iron Ward
//##### Spears
//[Name] == Fuscina && [Quality] == unique && [Flag] == ethereal && [EnhancedDamage] >= 180 // Kelpie Snare
@ -580,8 +583,8 @@ Perfect Diamond
//[Name] == WingedAxe && [Quality] == unique && [EnhancedDamage] >= 180 // Lacerator
//##### Wands
//[Name] == LichWand && [Quality] == unique && [SkillBoneSpirit]+[SkillBoneSpear] >= 4 && [SkillBoneWall]+[SkillBoneArmor]+[SkillTeeth] >= 12 // Boneshade
//[Name] == UnearthedWand && [Quality] == unique && [PassivePoisPierce] >= 45 && [PoisonAndBoneSkillTab] >= 2 // Death's Web
//[Name] == LichWand && [Quality] == unique && [Skillbonespirit]+[Skillbonespear] >= 4 && [Skillbonewall]+[Skillbonearmor]+[Skillteeth] >= 12 // Boneshade
//[Name] == UnearthedWand && [Quality] == unique && [PassivePoisPierce] >= 45 && [PoisonandBoneSkillTab] >= 2 // Death's Web
//[Name] == Burnt Wand && [Quality] == unique // Suicide Branch
//##### Amazon Weapons
@ -624,7 +627,7 @@ Perfect Diamond
[Name] == Amulet && [Quality] == unique && [LifeLeech] >= 6 && [ManaLeech] >= 15 // Crescent Moon
[Name] == Amulet && [Quality] == unique && [PoisonResist] == 75 // Atma's Scarab
[Name] == Amulet && [Quality] == unique && [HPRegen] == 10 // The Rising Sun
//[Name] == Amulet && [Quality] == unique && [LightResist] == 35 // Highlord's Wrath
//[Name] == Amulet && [Quality] == unique && [LightningResist] == 35 // Highlord's Wrath
[Name] == Amulet && [Quality] == unique && [Strength] == 5 && [ColdResist] >= 20 // Mara's Kaleidoscope
//[Name] == Amulet && [Quality] == unique && [DefensiveAurasSkillTab] == 1 // Seraph's Hymn
[Name] == Amulet && [Quality] == unique && [AttackRating] >= 430 && [ColdResist] >= 30 // Metalgrid
@ -657,8 +660,15 @@ Perfect Diamond
//#######################################
//###### Potions
//#######################################
//[Name] == PotionofLife
//[Name] == MinorHealingPotion
//[Name] == LightHealingPotion
//[Name] == HealingPotion
//[Name] == GreaterHealingPotion
[Name] == SuperHealingPotion
//[Name] == MinorManaPotion
//[Name] == LightManaPotion
//[Name] == ManaPotion
//[Name] == GreaterManaPotion
[Name] == SuperManaPotion
//[Name] == RejuvenationPotion
@ -668,18 +678,17 @@ Perfect Diamond
//#######################################
//###### SET ITEMS
//#######################################
//##### Angelic Raiment
//[Name] == RingMail && [Quality] == set // Angelic Mantle
//[Name] == Sabre && [Quality] == set // Angelic Sickle
//[Name] == Saber && [Quality] == set // Angelic Sickle
//[Name] == Ring && [Quality] == set && [LifeMax] == 20 // Angelic Halo
//[Name] == Amulet && [Quality] == set && [LightRadius] == 3 && [DamageTakenGoesToMana] == 20 // Angelic Wings
//##### Arcanna's Tricks
//[Name] == Amulet && [Quality] == set && [MaxMana] == 15 // Arcanna's Sign
//[Name] == Amulet && [Quality] == set && [ManaMax] == 15 // Arcanna's Sign
//[Name] == SkullCap && [Quality] == set // Arcanna's Head
//[Name] == LightPlate && [Quality] == set // Arcanna's Flesh
//[Name] == WarStaff && [Quality] == set // Arcanna's Deathwand
@ -687,7 +696,7 @@ Perfect Diamond
//##### Arctic Gear
//[Name] == QuiltedArmor && [Quality] == set // Arctic Furs
//[Name] == LightBelt && [Quality] == set // Arctic Binding
//[Name] == LightGauntlets && [Quality] == set && [LifeMax] == 20 && [IAS] == 10 // Arctic Mitts
//[Name] == LightGauntlets && [Quality] == set && [LifeMax] == 20 && [IncreasedAttackSpeed] == 10 // Arctic Mitts
//[Name] == ShortWarBow && [Quality] == set // Arctic Horn
//##### Berseker's Arsenal
@ -697,7 +706,7 @@ Perfect Diamond
//##### Cathan's Traps
//[Name] == Ring && [Quality] == set && [LifeLeech] == 6 && [NormalDamageReduction] == 2 // Cathan's Seal
//[Name] == Amulet && [Quality] == set && [FHR] == 10 && [LightningMaxDamage] == 5 // Cathan's Sigil
//[Name] == Amulet && [Quality] == set && [FasterHitRecovery] == 10 && [LightningMaxDamage] == 5 // Cathan's Sigil
//[Name] == ChainMail && [Quality] == set // Cathan's Mesh
//[Name] == Mask && [Quality] == set // Cathan's Visage
@ -722,13 +731,13 @@ Perfect Diamond
//[Name] == ChainBoots && [Quality] == set // Hsarus' Iron Heel
//##### Infernal Tools
//[Name] == Cap && [Quality] == set && [FireResist] == 10 && [LightResist] == 10 && [ColdResist] == 10 && [PoisonResist] == 10 // Infernal Cranium
//[Name] == Cap && [Quality] == set && [FireResist] == 10 && [LightningResist] == 10 && [ColdResist] == 10 && [PoisonResist] == 10 // Infernal Cranium
//[Name] == GrimWand && [Quality] == set // Infernal Touch
//[Name] == HeavyBelt && [Quality] == set && [LifeMax] == 20 && [EnhancedDefense] == 25 // Infernal Sign
//##### Iratha's Finery
//[Name] == HeavyBelt && [Quality] == set && [MinDamage] == 5 // Iratha's Cord
//[Name] == Crown && [Quality] == set && [FireResist] == 30 && [LightResist] == 30 // Iratha's Coil
//[Name] == Crown && [Quality] == set && [FireResist] == 30 && [LightningResist] == 30 // Iratha's Coil
//[Name] == Amulet && [Quality] == set && [PoisonResist] == 30 && [PoisonLength] == -75 // Iratha's Collar
//[Name] == LightGauntlets && [Quality] == set && [ColdResist] == 30 // Iratha's Cuff
@ -742,7 +751,7 @@ Perfect Diamond
//[Name] == KiteShield && [Quality] == set // Milabrega's Orb
//[Name] == AncientArmor && [Quality] == set // Milabrega's Robe
//[Name] == WarScepter && [Quality] == set // Milabrega's Rod
//[Name] == Crown && [Quality] == set && [LifeMax] == 15 && [MaxMana] == 15 // Milabrega's Diadem
//[Name] == Crown && [Quality] == set && [LifeMax] == 15 && [ManaMax] == 15 // Milabrega's Diadem
//##### Sigon's Steel
//[Name] == GreatHelm && [Quality] == set // Sigon's Visor
@ -760,7 +769,7 @@ Perfect Diamond
//[Name] == Amulet && [Quality] == set && [MagicDamageReduction] == 1 && [NormalDamageReduction] == 2 // Tancred's Weird
//##### Vidala's Rig
//[Name] == Amulet && [Quality] == set && [ColdResist] == 20 && [MaxMana] == 15 // Vidala's Snare
//[Name] == Amulet && [Quality] == set && [ColdResist] == 20 && [ManaMax] == 15 // Vidala's Snare
//[Name] == LongBattleBow && [Quality] == set // Vidala's Barb
//[Name] == LeatherArmor && [Quality] == set // Vidala's Ambush
//[Name] == LightPlatedBoots && [Quality] == set // Vidala's Fetlock
@ -820,7 +829,7 @@ Perfect Diamond
//[Name] == BattleGauntlets && [Quality] == set // M'avina's Icy Clutch
//[Name] == SharkskinBelt && [Quality] == set // M'avina's Tenet
//##### Natalya's OdiumMaxHP
//##### Natalya's OdiumLifeMax
//[Name] == GrimHelm && [Quality] == set // Natalya's Totem
//[Name] == ScissorsSuwayyah && [Quality] == set // Natalya's Mark
//[Name] == LoricatedMail && [Quality] == set // Natalya's Shadow
@ -912,6 +921,12 @@ Perfect Diamond
//[Name] == ArchonPlate && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 3 && [PoisonLengthResist] >= 75
//##### Armor
[Name] == LightPlate && [Quality] == magic && [Sockets] == 3 && [LifeMax] == 80 && [LevelRequire] <= 30 // LLD
[Name] == MagePlate && [Quality] == magic && [Sockets] == 3 && [LifeMax] == 80 && [LevelRequire] <= 30 // LLD
[Name] == AncientArmor && [Quality] == magic && [Sockets] == 4 && [LifeMax] >= 95 // 4os/95+ life or 4os/24fhr armor
[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4 && [LifeMax] >= 95 // 4os/95+ life or 4os/24fhr armor
[Name] == AncientArmor && [Quality] == magic && [Sockets] == 4 && [FasterHitRecovery] == 24 // 4os/95+ life or 4os/24fhr armor
[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4 && [FasterHitRecovery] == 24 // 4os/95+ life or 4os/24fhr armor
//[Name] == ArchonPlate && [Quality] == magic && [Sockets] == 4
//[Name] == ArchonPlate && [Quality] == magic && [LifeMax] >= 80 && [Sockets] == 4
//[Name] == ArchonPlate && [Quality] == magic && [Strength] >= 20 && [Sockets] == 4
@ -964,7 +979,28 @@ Perfect Diamond
//[Name] == DuskShroud && [Quality] == magic && [LifeMax] >= 90 && [Sockets] == 3
//##### Shields
//[Name] == Monarch && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 4 && [Defense] >= 140 && [FasterBlockRate5] >= 30
[Name] == Monarch && [Quality] == magic && [Flag] != ethereal && [Sockets] >= 4 && [Defense] >= 140 && [FasterBlockRate] >= 30
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == Monarch && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [FasterHitRecovery] == 17 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [FasterBlockRate] == 30 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [LifeMax] >= 60 // Paladin Jmod
[Name] == CrownShield && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == RoyalShield && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == SacredTarge && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == SacredRondache && [Quality] == Magic && [Sockets] == 4 && [RequirementPercent] == -30 // Paladin Jmod
[Name] == BarbedShield && [Quality] == magic && [PaladinCombatSkillTab] == 2 && [FasterBlockRate] == 30 // LLD
//##### Shields (Elite)
//[Name] == Heater && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30
@ -1039,6 +1075,7 @@ Perfect Diamond
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [Strength] >= 10 && [ManaLeech] >= 3
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [Dexterity] >= 10 && [ManaLeech] >= 3
//[Type] == gloves && [Quality] == rare && [Flag] != ethereal && [IncreasedAttackSpeed] >= 20 && [AddSkillTab] >= 2 && [Strength]+[Dexterity] >= 15
[Type] == gloves && [Quality] == magic && [JavelinandSpearSkillTab] == 3 && [IncreasedAttackSpeed] == 20 // 3/20 gloves
//##### Boots
//[Type] == boots && [Quality] == rare && [Flag] != ethereal && [FasterRunWalk] >= 30 && [FasterHitRecovery] >= 10 && [FireResist]+[LightningResist]+[ColdResist]+[PoisonResist] >= 80
@ -1049,17 +1086,17 @@ Perfect Diamond
//[Type] == belt && [Quality] == rare && [Flag] != ethereal && [FasterHitRecovery] >= 24 && [Strength] >= 20 && [GoldFind] >= 60
//##### Barbarian Helms (Exceptional)
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == RageMask && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == SavageHelmet && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == JawboneVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//[Name] == LionHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
@ -1074,17 +1111,17 @@ Perfect Diamond
//[Name] == SlayerGuard && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [GoldFind] >= 60
//##### Barbarian Helms (Elite)
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [SkillBattleOrders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == DestroyerHelm && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == ConquerorCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [Skillbattleorders] >= 3
//[Name] == CarnageHelm && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//[Name] == FuryVisor && [Quality] == magic && [Flag] != ethereal && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
@ -1099,37 +1136,37 @@ Perfect Diamond
//[Name] == GuardianCrown && [Quality] == magic && [Flag] != ethereal && [WarCriesSkillTab] >= 3 && [GoldFind] >= 60
//##### Barbarian Helms
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [SkillBattleOrders] >= 3
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [Skillbattleorders] >= 3
//[Type] == primalhelm && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddBarbarianSkills] >= 2 && [GoldFind] >= 60
//##### Druid Pelts (Exceptional)
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == AlphaHelm && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
[Name] == GriffonHeadress && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == Hunter'sGuise && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SacredFeathers && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == TotemicMask && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//##### Druid Pelts (Elite)
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [SkillTornado] >= 3
//[Name] == BloodSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SunSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == EarthSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == SkySpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//[Name] == DreamSpirit && [Quality] == magic && [Flag] != ethereal && [ElementalSkillTab] >= 3 && [Skilltornado] >= 3
//##### Druid Pelts
//[Type] == pelt && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddDruidSkills] >= 2 && [SkillTornado] >= 3
//[Type] == pelt && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddDruidSkills] >= 2 && [Skilltornado] >= 3
//##### Paladin Shields (Elite)
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
@ -1138,11 +1175,11 @@ Perfect Diamond
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [FireResist] >= 30
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [FireResist] >= 30
@ -1156,11 +1193,11 @@ Perfect Diamond
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [AddPaladinSkills] == 2 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PalidinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == KurastShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == ZakarumShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == VortexShield && [Quality] == magic && [Flag] != ethereal && [PaladinCombatSkillTab] == 3 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredTarge && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
//[Name] == SacredRondache && [Quality] == magic && [Flag] != ethereal && [Sockets] == 4 && [FasterBlockRate] == 30 && [EnhancedDamage] >= 60 && [AttackRating] >= 120
@ -1196,17 +1233,17 @@ Perfect Diamond
//[Type] == auricshields && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddPaladinSkills] >= 2 && [FasterBlockRate] >= 30
//##### Necromancer Shrunken Heads (Exceptional)
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonAndBoneSkillTab] >= 3 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == MummifiedTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == FetishTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == SextonTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//[Name] == HierophantTrophy && [Quality] == magic && [Flag] != ethereal && [PoisonandBoneSkillTab] >= 3 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//##### Necromancer Shrunken Heads
//[Type] == voodooheads && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddNecromancerSkillss] >= 2 && [SkillBoneSpear]+[SkillBoneSpirit]+[SkillPoisonNova] >= 4
//[Type] == voodooheads && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddNecromancerSkills] >= 2 && [Skillbonespear]+[Skillbonespirit]+[Skillpoisonnova] >= 4
//##### Axes
//[Type] == axe && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 250 && [MaxDamagePerLevel] >= 4 && [AttackRatingPerLevel] >= 33 && [IncreasedAttackSpeed] >= 20
@ -1269,6 +1306,17 @@ Perfect Diamond
//[Type] == assassinclaw && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 250 && [MaxDamagePerLevel] >= 4 && [AttackRatingPerLevel] >= 33 && [IncreasedAttackSpeed] >= 20
//[Type] == handtohand && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 400 && [IncreasedAttackSpeed] >= 20
//[Type] == assassinclaw && [Quality] == rare && [Flag] == ethereal && [Sockets] >= 2 && [EnhancedDamage] >= 400 && [IncreasedAttackSpeed] >= 20
[Name] == GreaterTalons && [Quality] == magic && [AddAssassinSkills] == 2 && [Skilllightningsentry] == 3 // 5/6LS GT
[Name] == GreaterTalons && [Quality] == magic && [TrapsSkillTab] == 3 && [Skilllightningsentry] == 3 // 5/6LS GT
[Name] == GreaterTalons && [Quality] == magic && [AttackRatingPerLevel] > 15 && [IncreasedAttackSpeed] >= 30 && [Skilllightningsentry] == 3 // fool's IncreasedAttackSpeed LS claw
[Name] == RunicTalons && [Quality] == magic && [AttackRatingPerLevel] > 15 && [IncreasedAttackSpeed] >= 30 && [Skilllightningsentry] == 3 // fool's IncreasedAttackSpeed LS claw
[Name] == GreaterTalons && [Quality] == magic && [Sockets] == 3 && [IncreasedAttackSpeed] >= 30 // 3os IncreasedAttackSpeed claw
[Name] == RunicTalons && [Quality] == magic && [Sockets] == 3 && [IncreasedAttackSpeed] >= 30 // 3os IncreasedAttackSpeed claw
[Type] == handtohand && [Quality] == magic && [AddAssassinSkills] == 2 && [Skilllightningsentry] == 3 // 5/6LS any claw (gt/rt/sq/ss)
[Type] == handtohand && [Quality] == magic && [TrapsSkillTab] == 3 && [Skilllightningsentry] == 3 // 5/6LS any claw (gt/rt/sq/ss)
[Type] == handtohand && [Quality] == magic && [ShadowDisciplinesSkillTab] == 3 && [Skillfade] == 3 // prebuff 6 venom or 6 fade claw
[Type] == handtohand && [Quality] == magic && [ShadowDisciplinesSkillTab] == 3 && [Skillvenom] == 3 // prebuff 6 venom or 6 fade claw
[Name] == FeralClaws && [Quality] == magic && [MartialArtsSkillTab] ==3 && [Sockets] == 2
//##### Sorceress Orbs
@ -1288,6 +1336,14 @@ Perfect Diamond
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Dexterity] >= 10 && [FasterRunWalk] >= 30
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Strength] >= 20 && [FasterCastRate] >= 20
[Type] == circlet && [Quality] == rare && [Flag] != ethereal && [Sockets] >= 2 && [AddClassSkills] >= 2 && [Dexterity] >= 10 && [FasterCastRate] >= 20
[Type] == circlet && [Quality] == rare && [ItemChargedSkill] == 54 // rare Tele Circlet
[Type] == circlet && [Quality] == rare && [AddBarbarianSkills] == 2 && [GoldFind] == 70 && [Sockets] >= 0 // Gf Barb
[Type] == circlet && [Quality] == rare && [AddClassSkills] >= 2 && [FasterCastRate] >= 20 && [Sockets] == 2 // All 2 Class Skills/20/2 FasterCastRate Circlets
[Type] == circlet && [Quality] == rare && [AddClassSkills] >= 2 && [FasterCastRate] >= 20 && [Sockets] == 2 // All 2 Tree Skills/20/2 FasterCastRate Circlets
//[Type] == circlet && [Quality] == rare && [Flag] != ethereal
//[Name] == Tiara && [Quality] == rare && [Flag] != ethereal
//[Name] == Coronet && [Quality] == rare && [Flag] != ethereal
//[Name] == Diadem && [Quality] == rare && [Flag] != ethereal
//##### Rings
[Name] == Ring && [Quality] == magic && [FasterCastRate] >= 10 && [FireResist] >= 14 && [LightningResist] >= 14
@ -1343,7 +1399,7 @@ Perfect Diamond
[Name] == Jewel && [Quality] == rare && [EnhancedDamage] >= 26 && [FasterHitRecovery] >= 7 && [MinDamage] >= 6 && [Dexterity] >= 7
[Name] == Jewel && [Quality] == rare && [EnhancedDamage] >= 26 && [FasterHitRecovery] >= 7 && [MaxDamage] >= 6 && [Dexterity] >= 7
[Name] == Jewel && [Quality] == rare && [FireResist]+[LightningResist]+[ColdResist]+[PoisonResist] >= 28 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
[Name] == Jewel && [Quality] == rare && [DamageToMana] >= 10 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
[Name] == Jewel && [Quality] == rare && [DamageTakenGoesToMana] >= 10 && [FasterHitRecovery] >= 7 && [RequirementPercent] <= -15
//##### Small Charms
[Name] == SmallCharm && [Quality] == magic && [MaxDamage] >= 3 && [AttackRating] >= 12 && [LifeMax] >= 12
@ -1432,7 +1488,7 @@ Perfect Diamond
//[Name] == GrandCharm && [Quality] == magic && [PoisonandBoneSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [NecromancerSummoningSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [NecromancerSummoningSkillTab] == 1
//[Name] == GrandCharm && [Quality] == magic && [PalidinCombatSkillTab] == 1 // paladin combat
//[Name] == GrandCharm && [Quality] == magic && [PaladinCombatSkillTab] == 1 // paladin combat
//[Name] == GrandCharm && [Quality] == magic && [BarbarianCombatSkillTab] == 1 // barbarian combat
//[Name] == GrandCharm && [Quality] == magic && [ElementalSkillTab] == 1 // elemental
//[Name] == GrandCharm && [Quality] == magic && [TrapsSkillTab] == 1 // trap
@ -1441,3 +1497,4 @@ Perfect Diamond
//#######################################
//###### CUSTOM CREATED ITEMS
//#######################################

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
f3f9e2fc4c4ac7c9b2bd1c1dce802ea9904236ec8e2824a29b8e92ac8b49669b
0d9e997fba28e6b8c8fd081b7e48ee7bf126721731758b7ff8acbbb5adf5c63b

View File

@ -41,3 +41,4 @@ C:\Users\boule\OneDrive\Documents\Visual Studio 2022\Projects\D2R-BMBot-main\obj
C:\Users\boule\OneDrive\Documents\Visual Studio 2022\Projects\D2R-BMBot-main\obj\Debug\app.csproj.Up2Date
C:\Users\boule\OneDrive\Documents\Visual Studio 2022\Projects\D2R-BMBot-main\obj\Debug\app.exe
C:\Users\boule\OneDrive\Documents\Visual Studio 2022\Projects\D2R-BMBot-main\obj\Debug\app.pdb
C:\Users\boule\OneDrive\Documents\Visual Studio 2022\Projects\D2R-BMBot-main\obj\Debug\FormAdvancedSettings.resources

Binary file not shown.

Binary file not shown.