/// <summary> /// loads WOW Talent and Spec info into cached list /// </summary> public static void Update() { using (StyxWoW.Memory.AcquireFrame()) { // With Legion, Low levels are an auto selected spec now. We want to keep using Lowbie behaviors pre level 10 CurrentSpec = StyxWoW.Me.Level < 10 ? WoWSpec.None : StyxWoW.Me.Specialization; Talents.Clear(); TalentId = new int[7]; // Always 21 talents. 7 rows of 3 talents. for (int row = 0; row < 7; row++) { for (int col = 0; col < 3; col++) { var selected = Lua.GetReturnVal <bool>(string.Format("local t = select(4, GetTalentInfo({0}, {1}, GetActiveSpecGroup())) if t then return 1 end return nil", row + 1, col + 1), 0); int index = 1 + row * 3 + col; var t = new Talent { Index = index, Selected = selected }; Talents.Add(t); if (selected) { TalentId[row] = index; } } } SpellCount = (uint)SpellManager.Spells.Count; SpellBookSignature = CalcSpellBookSignature(); } }
// Passives /// <summary> /// please use this when adding any type of passive /// </summary> /// <param name="passive"></param> public override void AddPassive(Passive passive) { if (initalized) { InitPassive(passive); } else { passive.PartialInit(this); } bool add = true; if (passive is Buff) { add = AddBuff((Buff)passive); } if (passive is TalentTrigger) { TalentTriggers.Add((TalentTrigger)passive); } if (passive is Talent) { Talents.Add((Talent)passive); } if (add) { passives.Add(passive); } }
public override void Read() { uint count = _worldPacket.ReadBits <uint>(6); for (uint i = 0; i < count; ++i) { Talents.Add(_worldPacket.ReadUInt16()); } }
public void SetTalents(ReplayMatchPlayerTalent playerTalentList) { HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName1); var talent1 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName1); var talent4 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName4); var talent7 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName7); var talent10 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName10); var talent13 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName13); var talent16 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName16); var talent20 = HeroesIcons.HeroBuilds().GetHeroInfo(playerTalentList.Character).GetTalent(playerTalentList.TalentName20); Talents.Add(talent1.GetIcon()); Talents.Add(talent4.GetIcon()); Talents.Add(talent7.GetIcon()); Talents.Add(talent10.GetIcon()); Talents.Add(talent13.GetIcon()); Talents.Add(talent16.GetIcon()); Talents.Add(talent20.GetIcon()); TalentNames.Add(talent1.Name); TalentNames.Add(talent4.Name); TalentNames.Add(talent7.Name); TalentNames.Add(talent10.Name); TalentNames.Add(talent13.Name); TalentNames.Add(talent16.Name); TalentNames.Add(talent20.Name); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent1.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent4.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent7.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent10.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent13.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent16.Name}:</c> {talent1.Tooltip.Short}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent20.Name}:</c> {talent1.Tooltip.Short}"); TalentFullTooltips.Add(talent1.Tooltip.Full); TalentFullTooltips.Add(talent4.Tooltip.Full); TalentFullTooltips.Add(talent7.Tooltip.Full); TalentFullTooltips.Add(talent10.Tooltip.Full); TalentFullTooltips.Add(talent13.Tooltip.Full); TalentFullTooltips.Add(talent16.Tooltip.Full); TalentFullTooltips.Add(talent20.Tooltip.Full); TalentSubInfo.Add(talent1.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent4.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent7.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent10.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent13.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent16.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent20.Tooltip.GetTalentSubInfo()); }
public void SetTalents(ReplayMatchPlayerTalent playerTalentList) { Talent talent1 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName1); Talent talent4 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName4); Talent talent7 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName7); Talent talent10 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName10); Talent talent13 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName13); Talent talent16 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName16); Talent talent20 = HeroesIcons.HeroesData(Build).HeroData(playerTalentList.Character).GetTalent(playerTalentList.TalentName20); Talents.Add(talent1.AbilityTalentImage()); Talents.Add(talent4.AbilityTalentImage()); Talents.Add(talent7.AbilityTalentImage()); Talents.Add(talent10.AbilityTalentImage()); Talents.Add(talent13.AbilityTalentImage()); Talents.Add(talent16.AbilityTalentImage()); Talents.Add(talent20.AbilityTalentImage()); TalentNames.Add(talent1.Name); TalentNames.Add(talent4.Name); TalentNames.Add(talent7.Name); TalentNames.Add(talent10.Name); TalentNames.Add(talent13.Name); TalentNames.Add(talent16.Name); TalentNames.Add(talent20.Name); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent1.Name}:</c> {talent1.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent4.Name}:</c> {talent4.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent7.Name}:</c> {talent7.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent10.Name}:</c> {talent10.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent13.Name}:</c> {talent13.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent16.Name}:</c> {talent16.Tooltip?.ShortTooltip?.ColoredText}"); TalentShortTooltips.Add($"<c val=\"FFFFFF\">{talent20.Name}:</c> {talent20.Tooltip?.ShortTooltip?.ColoredText}"); TalentFullTooltips.Add(talent1.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent4.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent7.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent10.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent13.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent16.Tooltip?.FullTooltip?.ColoredText); TalentFullTooltips.Add(talent20.Tooltip?.FullTooltip?.ColoredText); TalentSubInfo.Add(talent1.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent4.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent7.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent10.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent13.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent16.Tooltip.GetTalentSubInfo()); TalentSubInfo.Add(talent20.Tooltip.GetTalentSubInfo()); }
private void refreshTalents() { List <int> list = new List <int>(); foreach (Profession profession in Professions) { foreach (Talent talent in profession.talents) { if (!list.Contains(talent.Id)) { list.Add(talent.Id); Talents.Add(talent); } } } }
public RangeHero(HeroTable hero) { Talents.Add("L1", hero.TalentL1); Talents.Add("L2", hero.TalentL2); Talents.Add("L3", hero.TalentL3); Talents.Add("L4", hero.TalentL4); Talents.Add("R1", hero.TalentR1); Talents.Add("R2", hero.TalentR2); Talents.Add("R3", hero.TalentR3); Talents.Add("R4", hero.TalentR4); Name = hero.Name; Hp = hero.Hp; Mana = hero.Mana; IncHp = hero.IncHp; IncMana = hero.IncMana; MainAttribute = hero.MainAttribute; Strength = hero.Strength; Agility = hero.Agility; Intelligence = hero.Intelligence; IncStrength = hero.IncStrength; IncAgility = hero.IncAgility; IncIntelligence = hero.IncIntelligence; Damage = hero.Damage; Armor = hero.Armor; AttackSpeed = hero.AttackSpeed; Speed = hero.Speed; Description = hero.Description; AttackRange = (int)hero.AttackRange; ProjectileSpeed = (int)hero.ProjectileSpeed; using (DotaBaseContext context = new DotaBaseContext()) { List <AbilityTable> abilities = context.AbilityTable.ToList(); DefaultSpell First = new DefaultSpell(abilities.First(x => x.Name == hero.FirstSpell)); FirstSpell = First; DefaultSpell Second = new DefaultSpell(abilities.First(x => x.Name == hero.SecondSpell)); SecondSpell = Second; DefaultSpell Third = new DefaultSpell(abilities.First(x => x.Name == hero.ThirdSpell)); ThirdSpell = Third; Ultimate Ulti = new Ultimate(abilities.First(x => x.Name == hero.Ultimate)); Ultimate = Ulti; } }
public static void Update() { // Keep the frame stuck so we can do a bunch of injecting at once. using (StyxWoW.Memory.AcquireFrame()) { CurrentSpec = StyxWoW.Me.Specialization; Talents.Clear(); TalentId = new int[6]; // Always 18 talents. 6 rows of 3 talents. for (int index = 1; index <= 6 * 3; index++) { var selected = Lua.GetReturnVal <bool>( string.Format( "local t= select(5,GetTalentInfo({0})) if t == true then return 1 end return nil", index), 0); var t = new Talent { Index = index, Selected = selected }; Talents.Add(t); TalentId[(index - 1) / 3] = index; } Glyphs.Clear(); GlyphId = new int[6]; // 6 glyphs all the time. Plain and simple! for (int i = 1; i <= 6; i++) { List <string> glyphInfo = Lua.GetReturnValues(String.Format("return GetGlyphSocketInfo({0})", i)); // add check for 4 members before access because empty sockets weren't returning 'nil' as documented if (glyphInfo != null && glyphInfo.Count >= 4 && glyphInfo[3] != "nil" && !string.IsNullOrEmpty(glyphInfo[3])) { GlyphId[i - 1] = int.Parse(glyphInfo[3]); Glyphs.Add(WoWSpell.FromId(GlyphId[i - 1]).Name.Replace("Glyph of ", "")); } } } }
public static void Update() { // Don't bother if we're < 10 if (StyxWoW.Me.Level < 10) { CurrentSpec = TalentSpec.Lowbie; return; } WoWClass myClass = StyxWoW.Me.Class; int treeOne = 0, treeTwo = 0, treeThree = 0; bool isExtraSpec = false; // Keep the frame stuck so we can do a bunch of injecting at once. using (new FrameLock()) { Talents.Clear(); for (int tab = 1; tab <= 3; tab++) { var numTalents = Lua.GetReturnVal <int>("return GetNumTalents(" + tab + ")", 0); for (int index = 1; index <= numTalents; index++) { var rank = Lua.GetReturnVal <int>(string.Format("return GetTalentInfo({0}, {1})", tab, index), 4); var t = new Talent { Tab = tab - 1, Index = index - 1, Count = rank }; Talents.Add(t); // Thick Hide - Only used by tanking druids if (myClass == WoWClass.Druid && tab == 2 && index == 11 && rank != 0) { isExtraSpec = true; } // Renewed Hope if (myClass == WoWClass.Priest && tab == 1 && index == 8 && rank != 0) { isExtraSpec = true; } switch (tab) { case 1: treeOne += rank; break; case 2: treeTwo += rank; break; case 3: treeThree += rank; break; } } } Glyphs.Clear(); var glyphCount = Lua.GetReturnVal <int>("return GetNumGlyphSockets()", 0); if (glyphCount != 0) { for (int i = 1; i <= glyphCount; i++) { List <string> glyphInfo = Lua.GetReturnValues(String.Format("return GetGlyphSocketInfo({0})", i)); if (glyphInfo != null && glyphInfo[3] != "nil" && !string.IsNullOrEmpty(glyphInfo[3])) { Glyphs.Add(WoWSpell.FromId(int.Parse(glyphInfo[3])).Name.Replace("Glyph of ", "")); } } } } if (treeOne == 0 && treeTwo == 0 && treeThree == 0) { CurrentSpec = TalentSpec.Lowbie; return; } int max = Math.Max(Math.Max(treeOne, treeTwo), treeThree); // Altarboy.Logger.Log("[Talents] Best Tree: " + max); // Altarboy.Logger.Log("[Talents] Is Special Spec: " + isExtraSpec); int specMask = ((int)StyxWoW.Me.Class << 8); // Bear tanks, healing disc priests, etc. if (isExtraSpec) { specMask += TalentFlagIsextraspec; } if (max == treeOne) { CurrentSpec = (TalentSpec)(specMask + 0); } else if (max == treeTwo) { CurrentSpec = (TalentSpec)(specMask + 1); } else { CurrentSpec = (TalentSpec)(specMask + 2); } }
public static void Update() { // Don't bother if we're < 10 if (StyxWoW.Me.Level < 10) { CurrentSpec = WoWSpec.None; return; } // Keep the frame stuck so we can do a bunch of injecting at once. using (StyxWoW.Memory.AcquireFrame()) { CurrentSpec = StyxWoW.Me.Specialization; Talents.Clear(); var numTalents = Lua.GetReturnVal <int>("return GetNumTalents()", 0); for (int index = 0; index <= numTalents; index++) { var selected = Lua.GetReturnVal <int>(string.Format("return GetTalentInfo({0})", index), 4); switch (selected) { case 1: { var t = new Talent { Index = index, Count = 1 }; //Name = talentName CLULogger.TroubleshootLog("[TalentManager] - Talent {0} chosen", index); Talents.Add(t); } break; } } foreach (var talent in Talents) { if (StyxWoW.Me.Class == WoWClass.DeathKnight) { // Set the Blood DK Tier one Talent here switch (talent.Index) { case 1: CLUSettings.Instance.DeathKnight.DeathKnightTierOneTalent = DeathKnightTierOneTalent.RoilingBlood; CLULogger.TroubleshootLog("TalentManager - Setting DeathKnightTierOneTalent to {0}", DeathKnightTierOneTalent.RoilingBlood); break; case 2: CLUSettings.Instance.DeathKnight.DeathKnightTierOneTalent = DeathKnightTierOneTalent.PlagueLeech; CLULogger.TroubleshootLog("TalentManager - Setting DeathKnightTierOneTalent to {0}", DeathKnightTierOneTalent.PlagueLeech); break; case 3: CLUSettings.Instance.DeathKnight.DeathKnightTierOneTalent = DeathKnightTierOneTalent.UnholyBlight; CLULogger.TroubleshootLog("TalentManager - Setting DeathKnightTierOneTalent to {0}", DeathKnightTierOneTalent.UnholyBlight); break; } } } Glyphs.Clear(); var glyphCount = Lua.GetReturnVal <int>("return GetNumGlyphSockets()", 0); CLULogger.TroubleshootLog("Glyphdetection - GetNumGlyphSockets {0}", glyphCount); if (glyphCount != 0) { for (int i = 1; i <= glyphCount; i++) { List <string> glyphInfo = Lua.GetReturnValues(String.Format("return GetGlyphSocketInfo({0})", i), "glyphs.lua"); var lua = String.Format("local enabled, glyphType, glyphTooltipIndex, glyphSpellID, icon = GetGlyphSocketInfo({0});if (enabled) then return glyphSpellID else return 0 end", i); var glyphSpellId = Lua.GetReturnVal <int>(lua, 0); try { if (glyphSpellId > 0) { CLULogger.TroubleshootLog("Glyphdetection - SpellId: {0},Name:{1} ,WoWSpell: {2}", glyphSpellId, WoWSpell.FromId(glyphSpellId).Name, WoWSpell.FromId(glyphSpellId)); Glyphs.Add(WoWSpell.FromId(glyphSpellId).Name.Replace("Glyph of ", "")); } else { CLULogger.TroubleshootLog("Glyphdetection - Couldn't find all values to detect the Glyph in slot {0}", i); } } catch (Exception ex) { CLULogger.DiagnosticLog("We couldn't detect your Glyphs"); CLULogger.DiagnosticLog("Report this message to us: " + ex); } } } } }