Is it possible to show COE rotation only the witchdoctor or necromancer, not myself?
Which part is wrong?
How should I change this part "var player = Hud.Game.Players.FirstOrDefault(p => p.CoordinateKnown); " ?
Or is the other part wrong?
plz help me
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Turbo.Plugins.Default;
namespace Turbo.Plugins.wq
{
using System.Text;
public class ConventionOfElementsAndBrokenPromissesBuffOnCenterPlugin : BasePlugin, IInGameTopPainter {
public bool HideWhenUiIsHidden { get; set; }
public BuffPainter BuffPainter { get; set; }
public float PositionOffset { get; set; }
public float IconSizeMultiplier{get; set;}
public const int ConventionElementID = 430674;
private BuffRuleCalculator ruleCalculatorCoE;
public ConventionOfElementsAndBrokenPromissesBuffOnCenterPlugin() {
Enabled = true;
PositionOffset = 0.04f;
IconSizeMultiplier = 2.0f;
}
public override void Load(IController hud) {
base.Load(hud);
HideWhenUiIsHidden = false;
BuffPainter = new BuffPainter(Hud, true)
{
Opacity = 1.0f,
TimeLeftFont = Hud.Render.CreateFont("tahoma", 35, 255, 255, 255, 255, true, false, 255, 0, 0, 0, true),
};
ruleCalculatorCoE = new BuffRuleCalculator(Hud);
ruleCalculatorCoE.SizeMultiplier = IconSizeMultiplier;
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 1, MinimumIconCount = 0, DisableName = true }); // Arcane
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 2, MinimumIconCount = 0, DisableName = true }); // Cold
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 3, MinimumIconCount = 0, DisableName = true }); // Fire
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 4, MinimumIconCount = 0, DisableName = true }); // Holy
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 5, MinimumIconCount = 0, DisableName = true }); // Lightning
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 6, MinimumIconCount = 0, DisableName = true }); // Physical
ruleCalculatorCoE.Rules.Add(new BuffRule(ConventionElementID) { IconIndex = 7, MinimumIconCount = 0, DisableName = true }); // Poison
}
private List<BuffPaintInfo> GeneratePaintList() {
var player = Hud.Game.Players.FirstOrDefault(p => p.CoordinateKnown);
var paintInfoList = new List<BuffPaintInfo>();
//Add Convention Of Elements and caculate timedown
var elementPaintInfo = GetElementPaintInfo();
if(elementPaintInfo != null) {
paintInfoList.Add(elementPaintInfo);
}
return paintInfoList;
}
private IEnumerable<BuffRule> GetCurrentRules(HeroClass heroClass) {
for (int i = 1; i <= 7; i++)
{
switch (heroClass)
{
case HeroClass.Barbarian: if (i == 1 || i == 4 || i == 7) continue; break;
case HeroClass.Crusader: if (i == 1 || i == 2 || i == 7) continue; break;
case HeroClass.DemonHunter: if (i == 1 || i == 4 || i == 7) continue; break;
case HeroClass.Monk: if (i == 1 || i == 7) continue; break;
case HeroClass.Necromancer: if (i == 1 || i == 3 || i == 4 || i == 5) continue; break;
case HeroClass.WitchDoctor: if (i == 1 || i == 4 || i == 5) continue; break;
case HeroClass.Wizard: if (i == 4 || i == 6 || i == 7) continue; break;
}
yield return ruleCalculatorCoE.Rules[i - 1];
}
}
private BuffPaintInfo GetElementPaintInfo() {
var player = Hud.Game.Players.FirstOrDefault(p => p.CoordinateKnown);
var classSpecificRules = GetCurrentRules(player.HeroClassDefinition.HeroClass);
ruleCalculatorCoE.CalculatePaintInfo(player, classSpecificRules);
if (ruleCalculatorCoE.PaintInfoList.Count == 0) return null;
if (!ruleCalculatorCoE.PaintInfoList.Any(info => info.TimeLeft > 0)) return null;
var buff = player.Powers.GetBuff(ConventionElementID);
if ((buff == null) || (buff.IconCounts[0] <= 0)) return null;
var bestElementIndex = LocateBestElement();
var currentElementIndex = LocateCurrentElement();
var paintInfo = ruleCalculatorCoE.PaintInfoList[currentElementIndex];
if (bestElementIndex == currentElementIndex) {
paintInfo.TimeLeftNumbersOverride = false;
} else if(bestElementIndex > currentElementIndex) {
paintInfo.TimeLeft += (bestElementIndex - currentElementIndex - 1) * 4;
} else {
paintInfo.TimeLeft += (ruleCalculatorCoE.PaintInfoList.Count - 1 - currentElementIndex + bestElementIndex) * 4;
}
return paintInfo;
}
private int LocateCurrentElement() {
for (int index = 0; index < ruleCalculatorCoE.PaintInfoList.Count; index++) {
if (ruleCalculatorCoE.PaintInfoList[index].TimeLeft > 0) return index;
}
return 0;
}
private int LocateBestElement() {
var player = Hud.Game.Players.FirstOrDefault(p => p.CoordinateKnown);
var highestElementalBonus = player.Offense.HighestElementalDamageBonus;
var list = ruleCalculatorCoE.PaintInfoList;
for(int index = 0; index < list.Count - 1; index++) {
var best = false;
var info = list[index];
switch (info.Rule.IconIndex) {
case 1: best = player.Offense.BonusToArcane == highestElementalBonus; break;
case 2: best = player.Offense.BonusToCold == highestElementalBonus; break;
case 3: best = player.Offense.BonusToFire == highestElementalBonus; break;
case 4: best = player.Offense.BonusToHoly == highestElementalBonus; break;
case 5: best = player.Offense.BonusToLightning == highestElementalBonus; break;
case 6: best = player.Offense.BonusToPhysical == highestElementalBonus; break;
case 7: best = player.Offense.BonusToPoison == highestElementalBonus; break;
}
if (best) return index;
}
return 0;
}
private void debug(string message) {
Hud.TextLog.Log("Debug", message);
}
public void PaintTopInGame(ClipState clipState) {
if (clipState != ClipState.BeforeClip) return;
if (HideWhenUiIsHidden && Hud.Render.UiHidden) return;
foreach (var player in Hud.Game.Players)
{
if (player.HeroClassDefinition.HeroClass == HeroClass.Necromancer)
{
if(!Enabled) return;
var paintInfoList = GeneratePaintList();
if (paintInfoList == null || paintInfoList.Count == 0) return;
var x = 0;
var y = Hud.Window.Size.Height * 0.20f - Hud.Window.Size.Height * PositionOffset;
BuffPainter.PaintHorizontalCenter(paintInfoList, x, y, Hud.Window.Size.Width, ruleCalculatorCoE.StandardIconSize, ruleCalculatorCoE.StandardIconSpacing);
}
}
}
}
}