Suggestions for archon/cm skill changes
I turned to an archon/cm build today with my wizard and found some problems during combat. I'm listing the changes I made to the code and mentioning what these changes do, if giles or moley like them please include them in the next release (all the changes were made to the 1.4.8 build since the newest one has avoidance problems):
Line 5600-5608 (archon activation), code changed from this:
Code:
// Archon
if (!bBuffsOnly && hashPowerHotbarAbilities.Contains(SNOPower.Wizard_Archon) &&
(iElitesWithinRange[RANGE_30] > 0 || iAnythingWithinRange[RANGE_25] >= 4 || playerStatus.dCurrentHealthPct <= 0.6 || (targetCurrent.bThisEliteRareUnique && targetCurrent.fRadiusDistance <= 30f)) &&
playerStatus.dCurrentEnergy >= 25 &&
(GilesUseTimer(SNOPower.Wizard_Archon, true) ||
(settings.bEnableCriticalMass && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Wizard_Archon]).TotalMilliseconds >= 20000)) &&
PowerManager.CanCast(SNOPower.Wizard_Archon))
to this:
Code:
// Archon
if (!bBuffsOnly && hashPowerHotbarAbilities.Contains(SNOPower.Wizard_Archon) &&
(iElitesWithinRange[RANGE_30] > 0 || iAnythingWithinRange[RANGE_25] >= 0 || (targetCurrent.bThisEliteRareUnique && targetCurrent.fRadiusDistance <= 30f)) &&
(GilesUseTimer(SNOPower.Wizard_Archon, true) ||
(settings.bEnableCriticalMass && DateTime.Now.Subtract(dictAbilityLastUse[SNOPower.Wizard_Archon]).TotalMilliseconds >= 20000)) &&
PowerManager.CanCast(SNOPower.Wizard_Archon))
I removed some checks and made it so archon activates in the face of any one enemy, be it normal or elite, solo or many.
Line 5728-5750 (archon skill usage), changed code from this:
Code:
// Archon form
// Arcane Blast
if (!bBuffsOnly && !playerStatus.bIsIncapacitated &&
(iElitesWithinRange[RANGE_15] > 0 || iAnythingWithinRange[RANGE_15] > 2 ||
(targetCurrent.bThisEliteRareUnique && targetCurrent.fRadiusDistance <= 15f)) &&
GilesUseTimer(SNOPower.Wizard_Archon_ArcaneBlast) && PowerManager.CanCast(SNOPower.Wizard_Archon_ArcaneBlast))
{
return new GilesPower(SNOPower.Wizard_Archon_ArcaneBlast, 0f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_SLOWLY);
}
// Arcane Strike
if (!bBuffsOnly && !playerStatus.bIsIncapacitated && iAnythingWithinRange[RANGE_15] >= 4 && GilesUseTimer(SNOPower.Wizard_Archon_ArcaneStrike))
{
return new GilesPower(SNOPower.Wizard_Archon_ArcaneStrike, 16f, new Vector3(targetCurrent.vThisPosition.X, targetCurrent.vThisPosition.Y, targetCurrent.vThisPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_SLOWLY);
}
// Disintegrate
if (!bBuffsOnly && !bAvoidanceEmergency && !playerStatus.bIsIncapacitated)
{
if (bUnsafeCasting)
return new GilesPower(SNOPower.Wizard_Archon_DisintegrationWave, 35f, vNullLocation, -1, targetCurrent.iThisACDGUID, USE_COMBAT_ONLY, USE_INSTANTLY);
return new GilesPower(SNOPower.Wizard_Archon_DisintegrationWave, 35f, new Vector3(targetCurrent.vThisPosition.X, targetCurrent.vThisPosition.Y, targetCurrent.vThisPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_INSTANTLY);
}
to this:
Code:
// Archon form
// Arcane Blast
if (!bBuffsOnly && !playerStatus.bIsIncapacitated &&
(iElitesWithinRange[RANGE_15] > 0 || iAnythingWithinRange[RANGE_15] > 2 ||
(targetCurrent.bThisEliteRareUnique && targetCurrent.fRadiusDistance <= 15f)) &&
GilesUseTimer(SNOPower.Wizard_Archon_ArcaneBlast) && PowerManager.CanCast(SNOPower.Wizard_Archon_ArcaneBlast))
{
return new GilesPower(SNOPower.Wizard_Archon_ArcaneBlast, 7f, vNullLocation, iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_SLOWLY);
}
// Disintegrate
if (!bBuffsOnly && !bAvoidanceEmergency && !playerStatus.bIsIncapacitated)
{
if (bUnsafeCasting)
return new GilesPower(SNOPower.Wizard_Archon_DisintegrationWave, 35f, vNullLocation, -1, targetCurrent.iThisACDGUID, USE_COMBAT_ONLY, USE_INSTANTLY);
return new GilesPower(SNOPower.Wizard_Archon_DisintegrationWave, 35f, new Vector3(targetCurrent.vThisPosition.X, targetCurrent.vThisPosition.Y, targetCurrent.vThisPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_INSTANTLY);
}
// Arcane Strike
if (!bBuffsOnly && !playerStatus.bIsIncapacitated && iAnythingWithinRange[RANGE_15] >= 4 && GilesUseTimer(SNOPower.Wizard_Archon_ArcaneStrike))
{
return new GilesPower(SNOPower.Wizard_Archon_ArcaneStrike, 16f, new Vector3(targetCurrent.vThisPosition.X, targetCurrent.vThisPosition.Y, targetCurrent.vThisPosition.Z + iThisHeight), iCurrentWorldID, -1, USE_COMBAT_ONLY, USE_SLOWLY);
}
I gave disintegrate priority over arcane strike because it was seriously messing close combat, my wizard would get stuck trying to arcane strike a monster and she would die from a group. Now she only uses disintegrate and arcane blast when ready. Also changed arcane blast's radius to 7f.
For people wanting to try an archon/cm build I also suggest disabling health globe pickup through the trinity settings because a wizard in archon trying to reach a health globe in the middle of combat instead of fighting = dead wizard (unless you have some pickup radius - I don't.
Remaining archon wizards' issues:
1) The bot can't disable the archon buff to recast energy armor/magic weapon right now, which means you'll remain unbuffed until it runs out.
2)The current trinity setup which gives very high priority on mid-combat loot pickup hurts this build, it would really help if monsters were dead before picking anything up. Missing loot is not an issue to ranged classes I think, you don't chase after far away mobs, you just kill them from afar
Lastly, for people not wanting to make the changes themselves, here is my edited .cs (reminder that this is a modified 1.4.8 file, NOT the latest version - which means no teleport for example) :