MUFFDIVER
Member
- Joined
- Jun 15, 2014
- Messages
- 72
- Reaction score
- 1
|☠|witch|☠|doctor|☠|
As the title suggests...
WitchDoctor: Community Enhanced Combat Profile.
I think we have an opportunity here for us to create a resource that could contribute towards designing 'enhanced' combat.cs profiles.
I have seen MANY posts with very helpful tips, fixes, adjustments, improvements and so on. Problem is... the information can be so damn hard to locate sometimes and lots of the best stuff is scattered throughout random posts all over the forum which makes it nearly impossible to find.
We can bring all that information together just by providing a specific location for other people to share their knowledge. Provide a little code... write a brief description and the result of the changes in designated post\section = fountain of knowledge
>WitchDoctor: Community Enhanced Combat Profile.
>Crusader: Community Enhanced Combat Profile.
...or similar... whatever.
In the "spoiler!" area below you will find most of the edits I've made to my WitchDoctorCombat.cs
The "spoiler!" is just a preview - If you want the (complete) code\file you can find it on the bottom of this post.
// Soul Harvest: CHANGED TO HARVEST WHEN ANY 6 MOBS ARE IN A 12 FOOT RADIOUS OR AN ELITE IN 12F ALSO CHANGED FROM 16F
// ORIGINAL: (TargetUtil.AnyMobsInRange(16f, GetBuffStacks(SNOPower.Witchdoctor_SoulHarvest) + 1, false) || (hasSwallowYourSoul && Player.PrimaryResourcePct <= 0.50) || TargetUtil.IsEliteTargetInRange(16f)))
if (CanCast(SNOPower.Witchdoctor_SoulHarvest) &&
(GetBuffStacks(SNOPower.Witchdoctor_SoulHarvest) < 5) && (TargetUtil.AnyMobsInRange(12f, 6) || (hasSwallowYourSoul && Player.PrimaryResourcePct <= 0.50) || TargetUtil.IsEliteTargetInRange(12f)))
{
return new TrinityPower(SNOPower.Witchdoctor_SoulHarvest);
}
// Gargantuan Wrathful Protector: CHANGED TO ANYMOBSINRANGE (ANY 3 MOBS WITHIN 20 FEET OR AN ELITE IN 30 FEET = CAST)
// ORIGINAL: if (hasWrathfulProtector && TargetUtil.IsEliteTargetInRange(30f))
if (hasWrathfulProtector && (TargetUtil.AnyMobsInRange(20, 3)) || TargetUtil.IsEliteTargetInRange(30f))
{
return new TrinityPower(SNOPower.Witchdoctor_Gargantuan);
}
// Gargantuan regular
if (!hasRestlessGiant && !hasWrathfulProtector && Trinity.PlayerOwnedGargantuanCount == 0)
{
return new TrinityPower(SNOPower.Witchdoctor_Gargantuan);
}
}
// Zombie Dogs NON SACRIFICE BUILD: CHANGED TO RECAST WHEN # OF DOGS IS 3 INSTEAD OF THE ORIGINAL 2 = CAST
// ORIGINAL: if (!hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) && Trinity.PlayerOwnedZombieDogCount <= 2)
if (!hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) && Trinity.PlayerOwnedZombieDogCount <= 3)
{
return new TrinityPower(SNOPower.Witchdoctor_SummonZombieDog);
}
// Zombie Dogs SACRIFICE BUILD: CHANGED TO SACRIFICE WHEN # OF DOGS IS 4 INSTEAD OF THE ORIGINAL 2 = CAST
// ORIGINAL: (LastPowerUsed == SNOPower.Witchdoctor_Sacrifice || Trinity.PlayerOwnedZombieDogCount <= 2) &&
if (hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) &&
(LastPowerUsed == SNOPower.Witchdoctor_Sacrifice || Trinity.PlayerOwnedZombieDogCount <= 4) &&
CombatBase.LastPowerUsed != SNOPower.Witchdoctor_SummonZombieDog)
{
return new TrinityPower(SNOPower.Witchdoctor_SummonZombieDog);
}
// Big Bad Voodoo: CHANGED TO 12F VS 30F AND SET TO MATCH WITH FETISH TRIGGERS
// MATCHED TRIGGERS WITH FETISH ARMY TO FIRE AT SAME TIME = MAXIMUM DAMAGE
// ORIGINAL: (TargetUtil.EliteOrTrashInRange(25f) || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 30f)))
if (CanCast(SNOPower.Witchdoctor_BigBadVoodoo) &&
(TargetUtil.EliteOrTrashInRange(12f)/*ORIG: 25f*/ || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 12f/*ORIG: 30f*/)))
{
return new TrinityPower(SNOPower.Witchdoctor_BigBadVoodoo);
}
// Piranhas: CHANGED TO ELITEORTRASHINRANGE (ANY 3 ELITEORTRASHINRANGE MOBS CLUSTERED IN 15\45 FEET = CAST AT CLUSTER)
// ORIGINAL: (TargetUtil.ClusterExists(15f, 45f, 2, true) || TargetUtil.AnyElitesInRange(45f)) &&
if (CanCast(SNOPower.Witchdoctor_Piranhas) && Player.PrimaryResource >= 250 &&
(TargetUtil.ClusterExists(15f, 45f, 3, true) || TargetUtil.EliteOrTrashInRange(45f)) &&
Player.PrimaryResource >= 250)
{
var bestClusterPoint = TargetUtil.GetBestClusterPoint(15f);
return new TrinityPower(SNOPower.Witchdoctor_Piranhas, 25f, bestClusterPoint);
}
// Horrify Buff at 35% health -- Frightening Aspect -- Courtesy of Marta11: Spam Horrify:Frightening Aspect
// ORIGINAL: if (CanCast(SNOPower.Witchdoctor_Horrify) && Player.CurrentHealthPct <= 0.35 && hasFrighteningAspect)
if (CanCast(SNOPower.Witchdoctor_Horrify) && TargetUtil.AnyMobsInRange(horrifyRadius, 0))
{
return new TrinityPower(SNOPower.Witchdoctor_Horrify);
}
// Fetish Army: DISABLE "CAST OFF COOLDOWN" TO ASSURE FETISH AND BIG BAD VOODOO CAST AT THE SAME TIME.
// MATCHED TRIGGERS WITH BIG BAD VOODOO TO MAXIMIZE DAMAGE
// ORIGINAL: (TargetUtil.EliteOrTrashInRange(30f) || TargetUtil.IsEliteTargetInRange(30f) || Settings.Combat.WitchDoctor.UseFetishArmyOffCooldown))
if (CanCast(SNOPower.Witchdoctor_FetishArmy) &&
(TargetUtil.EliteOrTrashInRange(12f)/*ORIG: 30f*/ || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 12f/*ORIG: 30f*/)))
{
return new TrinityPower(SNOPower.Witchdoctor_FetishArmy);
}
// TESTING CAST DURATION OF VAMPIRE BATS - NEED LONG BLASTS VS QUICK BLASTS COSTING 225 MANA EACH
// ORIGINAL: SpellHistory.TimeSinceUse(SNOPower.Witchdoctor_Firebats) <= TimeSpan.FromMilliseconds(250d));
// SCRATCH: Seems to be length of time between use vs length of cast.
SpellHistory.TimeSinceUse(SNOPower.Witchdoctor_Firebats) <= TimeSpan.FromMilliseconds(1000d));
A little about submissions below:
If this idea works there will obviously have to be some sort of structure to keep things reasonably organized so if you post could you please:
1) Start with a couple details... what the code does etc....
2) DemonBuddy Version the code was last used on (if known).
3) Who wrote the code or location where the code was found (if known).
4) Lastly please use the CODE tag or ideally use the SPOILER tag to keep the huge walls of code to a minimum.
Thanks!
How to use the tags:
[C0DE] TEXT BETWEEN [/C0DE]
and
[SP0ILER] TEXT BETWEEN [/SP0ILER]
I used zero's for the letter O just to avoid it actually using the function...
Use the proper spelling and letters... numbers will not work.
Download the WitchDoctor profile I use (below):
*All the code I shared above is included the file - no editing required.
*Tested on: Demonbuddy v1.1 r1923 b363 & 418 beta
*File Location: ..DemonBuddy\Plugins\Trinity\Combat\Abilities\WitchDoctorCombat.cs
As the title suggests...
WitchDoctor: Community Enhanced Combat Profile.
I think we have an opportunity here for us to create a resource that could contribute towards designing 'enhanced' combat.cs profiles.
I have seen MANY posts with very helpful tips, fixes, adjustments, improvements and so on. Problem is... the information can be so damn hard to locate sometimes and lots of the best stuff is scattered throughout random posts all over the forum which makes it nearly impossible to find.
We can bring all that information together just by providing a specific location for other people to share their knowledge. Provide a little code... write a brief description and the result of the changes in designated post\section = fountain of knowledge

>WitchDoctor: Community Enhanced Combat Profile.
>Crusader: Community Enhanced Combat Profile.
...or similar... whatever.
In the "spoiler!" area below you will find most of the edits I've made to my WitchDoctorCombat.cs
The "spoiler!" is just a preview - If you want the (complete) code\file you can find it on the bottom of this post.
// Soul Harvest: CHANGED TO HARVEST WHEN ANY 6 MOBS ARE IN A 12 FOOT RADIOUS OR AN ELITE IN 12F ALSO CHANGED FROM 16F
// ORIGINAL: (TargetUtil.AnyMobsInRange(16f, GetBuffStacks(SNOPower.Witchdoctor_SoulHarvest) + 1, false) || (hasSwallowYourSoul && Player.PrimaryResourcePct <= 0.50) || TargetUtil.IsEliteTargetInRange(16f)))
if (CanCast(SNOPower.Witchdoctor_SoulHarvest) &&
(GetBuffStacks(SNOPower.Witchdoctor_SoulHarvest) < 5) && (TargetUtil.AnyMobsInRange(12f, 6) || (hasSwallowYourSoul && Player.PrimaryResourcePct <= 0.50) || TargetUtil.IsEliteTargetInRange(12f)))
{
return new TrinityPower(SNOPower.Witchdoctor_SoulHarvest);
}
// Gargantuan Wrathful Protector: CHANGED TO ANYMOBSINRANGE (ANY 3 MOBS WITHIN 20 FEET OR AN ELITE IN 30 FEET = CAST)
// ORIGINAL: if (hasWrathfulProtector && TargetUtil.IsEliteTargetInRange(30f))
if (hasWrathfulProtector && (TargetUtil.AnyMobsInRange(20, 3)) || TargetUtil.IsEliteTargetInRange(30f))
{
return new TrinityPower(SNOPower.Witchdoctor_Gargantuan);
}
// Gargantuan regular
if (!hasRestlessGiant && !hasWrathfulProtector && Trinity.PlayerOwnedGargantuanCount == 0)
{
return new TrinityPower(SNOPower.Witchdoctor_Gargantuan);
}
}
// Zombie Dogs NON SACRIFICE BUILD: CHANGED TO RECAST WHEN # OF DOGS IS 3 INSTEAD OF THE ORIGINAL 2 = CAST
// ORIGINAL: if (!hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) && Trinity.PlayerOwnedZombieDogCount <= 2)
if (!hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) && Trinity.PlayerOwnedZombieDogCount <= 3)
{
return new TrinityPower(SNOPower.Witchdoctor_SummonZombieDog);
}
// Zombie Dogs SACRIFICE BUILD: CHANGED TO SACRIFICE WHEN # OF DOGS IS 4 INSTEAD OF THE ORIGINAL 2 = CAST
// ORIGINAL: (LastPowerUsed == SNOPower.Witchdoctor_Sacrifice || Trinity.PlayerOwnedZombieDogCount <= 2) &&
if (hasSacrifice && CanCast(SNOPower.Witchdoctor_SummonZombieDog) &&
(LastPowerUsed == SNOPower.Witchdoctor_Sacrifice || Trinity.PlayerOwnedZombieDogCount <= 4) &&
CombatBase.LastPowerUsed != SNOPower.Witchdoctor_SummonZombieDog)
{
return new TrinityPower(SNOPower.Witchdoctor_SummonZombieDog);
}
// Big Bad Voodoo: CHANGED TO 12F VS 30F AND SET TO MATCH WITH FETISH TRIGGERS
// MATCHED TRIGGERS WITH FETISH ARMY TO FIRE AT SAME TIME = MAXIMUM DAMAGE
// ORIGINAL: (TargetUtil.EliteOrTrashInRange(25f) || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 30f)))
if (CanCast(SNOPower.Witchdoctor_BigBadVoodoo) &&
(TargetUtil.EliteOrTrashInRange(12f)/*ORIG: 25f*/ || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 12f/*ORIG: 30f*/)))
{
return new TrinityPower(SNOPower.Witchdoctor_BigBadVoodoo);
}
// Piranhas: CHANGED TO ELITEORTRASHINRANGE (ANY 3 ELITEORTRASHINRANGE MOBS CLUSTERED IN 15\45 FEET = CAST AT CLUSTER)
// ORIGINAL: (TargetUtil.ClusterExists(15f, 45f, 2, true) || TargetUtil.AnyElitesInRange(45f)) &&
if (CanCast(SNOPower.Witchdoctor_Piranhas) && Player.PrimaryResource >= 250 &&
(TargetUtil.ClusterExists(15f, 45f, 3, true) || TargetUtil.EliteOrTrashInRange(45f)) &&
Player.PrimaryResource >= 250)
{
var bestClusterPoint = TargetUtil.GetBestClusterPoint(15f);
return new TrinityPower(SNOPower.Witchdoctor_Piranhas, 25f, bestClusterPoint);
}
// Horrify Buff at 35% health -- Frightening Aspect -- Courtesy of Marta11: Spam Horrify:Frightening Aspect
// ORIGINAL: if (CanCast(SNOPower.Witchdoctor_Horrify) && Player.CurrentHealthPct <= 0.35 && hasFrighteningAspect)
if (CanCast(SNOPower.Witchdoctor_Horrify) && TargetUtil.AnyMobsInRange(horrifyRadius, 0))
{
return new TrinityPower(SNOPower.Witchdoctor_Horrify);
}
// Fetish Army: DISABLE "CAST OFF COOLDOWN" TO ASSURE FETISH AND BIG BAD VOODOO CAST AT THE SAME TIME.
// MATCHED TRIGGERS WITH BIG BAD VOODOO TO MAXIMIZE DAMAGE
// ORIGINAL: (TargetUtil.EliteOrTrashInRange(30f) || TargetUtil.IsEliteTargetInRange(30f) || Settings.Combat.WitchDoctor.UseFetishArmyOffCooldown))
if (CanCast(SNOPower.Witchdoctor_FetishArmy) &&
(TargetUtil.EliteOrTrashInRange(12f)/*ORIG: 30f*/ || (CurrentTarget.IsBoss && CurrentTarget.Distance <= 12f/*ORIG: 30f*/)))
{
return new TrinityPower(SNOPower.Witchdoctor_FetishArmy);
}
// TESTING CAST DURATION OF VAMPIRE BATS - NEED LONG BLASTS VS QUICK BLASTS COSTING 225 MANA EACH
// ORIGINAL: SpellHistory.TimeSinceUse(SNOPower.Witchdoctor_Firebats) <= TimeSpan.FromMilliseconds(250d));
// SCRATCH: Seems to be length of time between use vs length of cast.
SpellHistory.TimeSinceUse(SNOPower.Witchdoctor_Firebats) <= TimeSpan.FromMilliseconds(1000d));
A little about submissions below:
If this idea works there will obviously have to be some sort of structure to keep things reasonably organized so if you post could you please:
1) Start with a couple details... what the code does etc....
2) DemonBuddy Version the code was last used on (if known).
3) Who wrote the code or location where the code was found (if known).
4) Lastly please use the CODE tag or ideally use the SPOILER tag to keep the huge walls of code to a minimum.
Thanks!
How to use the tags:
[C0DE] TEXT BETWEEN [/C0DE]
and
[SP0ILER] TEXT BETWEEN [/SP0ILER]
I used zero's for the letter O just to avoid it actually using the function...
Use the proper spelling and letters... numbers will not work.
Download the WitchDoctor profile I use (below):
*All the code I shared above is included the file - no editing required.
*Tested on: Demonbuddy v1.1 r1923 b363 & 418 beta
*File Location: ..DemonBuddy\Plugins\Trinity\Combat\Abilities\WitchDoctorCombat.cs
Attachments
Last edited: