Hey, I tweaked my settings again and it seems to be working slightly better. I modified Rend again - it should use it a LOT more than even my last modified version. Demon Mines are still sketchy, but everything else seems to be considerably better (at least for me) for act 3 purposes.
Now in a more serious coding sense, I've been messing around with fixing Siegebreaker - I'll have more time to actually read through his code later and I'll try to make a fix on that.
My bot doesnt use frenzy anymore after replacing plugin with this update, had to return to original pluginHey, I tweaked my settings again and it seems to be working slightly better. I modified Rend again - it should use it a LOT more than even my last modified version. Demon Mines are still sketchy, but everything else seems to be considerably better (at least for me) for act 3 purposes.
Now in a more serious coding sense, I've been messing around with fixing Siegebreaker - I'll have more time to actually read through his code later and I'll try to make a fix on that.
private static readonly List<int> listActorSNOIgnoreBlacklist = new List<int> {
5840, 111456, 5013, 5014, 205756, 205746, 4182, 4183, 4644, 4062, 4538, 52693, 162575, 2928, 51291, 51292,
96132, 90958, 90959, 80980, 51292, 51291, 2928, 3546, 129345, 81857, 138428, 81857, 60583, 170038, 174854, 190390,
194263, 5482, 174900, 219702, 221225, 87189, 90072, 107031, 106584, 186130, 187265, 201426, 201242, 200969, 201423,
201438, 201464, 201454, 108012, 103279, 89578, 74004, 84531, 84538, 89579, 190492, 209133, 6318, 107705, 105681, 89934,
89933, 182276, 117574, 182271, 182283, 182278, 128895, 81980, 82111, 81226, 81227, 107067, 103217, 105763, 110959, 106749,
107107, 107112, 106731, 107752, 107829, 90321, 107828, 121327, 3865, 150825, 185391
};
private static readonly List<int> listAvoidanceSNODefaults = new List<int>
{
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Demon Mine Arm Pools
219702, 84608, 5482, 4803, 95868, 108869, 223675, 161822, 161833, 5212, 150825, 3865
};
private static List<int> listAvoidanceSNO = new List<int>(listAvoidanceSNODefaults);
// How much health to look for and avoid each AOE (1 = 100% health, 0.5 = 50% health etc.)
private static readonly Dictionary<int, double> dictAvoidanceHealthDefaults = new Dictionary<int, double>
{
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Demon Mine Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 0.55}, {4803, 1}, {95868, 0.7}, {108869, 0.5}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 0.4}, {150825, 1}, {3865, 1}
//{ 219702, 1 }, {84608, 1}, {5482, 1}, {4803, 1}, {95868, 1}, {108869, 1}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}
};
private static Dictionary<int, double> dictAvoidanceHealth = new Dictionary<int, double>(dictAvoidanceHealthDefaults);
// The rough radius of each avoidance thing (from centre to edge!) in feet
private static readonly Dictionary<int, double> dictAvoidanceRadius = new Dictionary<int, double>
{
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Demon Mine Arm Pools
{ 219702, 15 }, {84608, 8}, {5482, 13}, {4803, 20}, {95868, 8}, {108869, 13}, {223675, 20}, {161822, 14}, {161833, 14}, {5212, 16}, {150825, 10}, {3865, 14}
};
dictAvoidanceHealth = new Dictionary<int, double> {
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Mines Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 0.55}, {4803, 1}, {95868, 0.75}, {108869, 0.55}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 0.5}, {150825, 1}, {3865, 1}
};
break;
case ActorClass.Monk:
iEmergencyHealthLimit = 0.46;
iHealthGlobeHealthLimit = 0.6;
dictAvoidanceHealth = new Dictionary<int, double> {
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Mines Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 0.55}, {4803, 1}, {95868, 0.75}, {108869, 0.55}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 0.5}, {150825, 1}, {3865, 1}
};
break;
case ActorClass.Wizard:
iEmergencyHealthLimit = 0.70;
iHealthGlobeHealthLimit = 0.8;
dictAvoidanceHealth = new Dictionary<int, double> {
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Mines Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 1}, {4803, 1}, {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1}, {3865, 1}
};
break;
case ActorClass.WitchDoctor:
iEmergencyHealthLimit = 0.70;
iHealthGlobeHealthLimit = 0.8;
dictAvoidanceHealth = new Dictionary<int, double> {
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Mines Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 1}, {4803, 1}, {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1}, {3865, 1}
};
break;
case ActorClass.DemonHunter:
iEmergencyHealthLimit = 0.70;
iHealthGlobeHealthLimit = 0.8;
dictAvoidanceHealth = new Dictionary<int, double> {
// Arcane Desecrator Poison Tree Molten Core Molten Trail Plague Cloud Ice Balls Belial 1 Belial 2 Bees-Wasps Mines Arm Pools
{ 219702, 1 }, {84608, 1}, {5482, 1}, {4803, 1}, {95868, 0.95}, {108869, 0.85}, {223675, 1}, {161822, 1}, {161833, 1}, {5212, 1}, {150825, 1}, {3865, 1}
};
break;
// Rend when enough enemies within close range
if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f &&
powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
(DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
// Ability to spam rend every 1.7 seconds if you have high fury
(iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
iMyCachedPrimaryResource >= 30)
{
return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
}
// Do we need this? Testing...
//Navigator.PlayerMover.MoveStop();
bForceNewTargetFind = true;
// Force avoidance for 5 seconds if out of combat
//if (bOutOfCombatAvoidance && DateTime.Now.Subtract(lastTimeInCombat).TotalSeconds < 5)
//{
// FindSafeZone(true);
// iEmergencyLoops = 0;
// return RunStatus.Running;
//}
{SNOPower.Barbarian_Rend, 2000}
// Revenge used off-cooldown
if (!bBuffsOnly && !bMeIncapacitated && powerHotbarAbilities.Contains(SNOPower.Barbarian_Revenge) && fDistanceFromTarget <= 15f &&
DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Revenge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Revenge] &&
PowerManager.CanCast(SNOPower.Barbarian_Revenge))
{
return new GilesPower(SNOPower.Barbarian_Revenge, 15f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
}
// Rend when enough enemies within close range
if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f &&
powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
(DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
// Ability to spam rend every 1.7 seconds if you have high fury
(iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
iMyCachedPrimaryResource >= 30)
{
return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
}
// Rend when enough enemies within close range
if (!bBuffsOnly && !bMeIncapacitated && fDistanceFromTarget <= 13f &&
powerHotbarAbilities.Contains(SNOPower.Barbarian_Rend) &&
(DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Rend] ||
// Ability to spam rend every 1.7 seconds if you have high fury
(iMyCachedPrimaryPercent >= 0.7 && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Rend]).TotalMilliseconds >= 1500)) &&
iMyCachedPrimaryResource >= 30)
{
return new GilesPower(SNOPower.Barbarian_Rend, 13f, new Vector3(vCurrentTargetPosition.X, vCurrentTargetPosition.Y, vCurrentTargetPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
}
// Revenge used off-cooldown
if (!bBuffsOnly && !bMeIncapacitated && powerHotbarAbilities.Contains(SNOPower.Barbarian_Revenge) && fDistanceFromTarget <= 15f &&
DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Barbarian_Revenge]).TotalMilliseconds >= dictAbilityRepeatDelay[SNOPower.Barbarian_Revenge] &&
PowerManager.CanCast(SNOPower.Barbarian_Revenge))
{
return new GilesPower(SNOPower.Barbarian_Revenge, 15f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, FOR_SLOW_USE);
}
it is giving up following goblins even though prioritize selected
it is giving up following goblins even though prioritize selected