public Talent(TalentCollection talents, TalentEntry entry, int rank) { m_rank = -1; Talents = talents; Entry = entry; Rank = rank; }
public Talent(TalentCollection talents, TalentEntry entry, int rank) { this.m_rank = -1; this.Talents = talents; this.Entry = entry; this.Rank = rank; }
/// <summary> /// Whether the given talent can be learned by an average player. /// Does not check for available Talent points, since that is checked when the Rank is changed. /// </summary> public virtual bool CanLearn(TalentEntry entry, int rank) { TalentTree tree = entry.Tree; int num = rank - GetRank(entry.Id); if (tree.Class != Owner.Class || m_treePoints[tree.TabIndex] < entry.RequiredTreePoints || (rank > entry.Spells.Length || num < 1) || FreeTalentPoints < num) { return(false); } if (entry.RequiredId == TalentId.None) { return(true); } Talent talent; if (!ById.TryGetValue(entry.RequiredId, out talent)) { return(false); } if (entry.RequiredRank != 0U) { return(talent.Rank >= entry.RequiredRank); } return(true); }
internal void AddExisting(TalentEntry entry, int rank) { Talent talent = new Talent(this, entry); rank = Math.Max(0, rank - 1); talent.SetRankSilently(rank); ById[entry.Id] = talent; }
/// <summary>Tries to learn the given talent on the given rank</summary> /// <returns>Whether it was learnt</returns> public Talent Learn(TalentEntry entry, int rank) { if (!CanLearn(entry, rank)) { return(null); } return(Set(entry, rank)); }
public override bool CanLearn(TalentEntry entry, int rank) { if (entry.Tree.Id == ((NPC)this.Owner).PetTalentType.GetTalentTreeId()) { return(base.CanLearn(entry, rank)); } return(false); }
/// <summary>Tries to learn the given talent on the given rank</summary> /// <returns>Whether it was learnt</returns> public Talent Learn(TalentEntry entry, int rank) { if (!this.CanLearn(entry, rank)) { return((Talent)null); } return(this.Set(entry, rank)); }
/// <summary> /// Whether the given talent can be learned by this Character /// </summary> public bool CanLearn(TalentId id, int rank) { TalentEntry entry = TalentMgr.GetEntry(id); if (entry != null) { return(CanLearn(entry, rank)); } return(false); }
public Talent Learn(TalentId id, int rank) { TalentEntry entry = TalentMgr.GetEntry(id); if (entry != null) { return(Learn(entry, rank)); } return(null); }
/// <summary> /// Sets the given talent to the given rank without any checks /// </summary> public Talent Set(TalentEntry entry, int rank) { Talent talent; if (!ById.TryGetValue(entry.Id, out talent)) { ById.Add(entry.Id, talent = new Talent(this, entry, rank)); } else { talent.Rank = rank; } return(talent); }
/// <summary> /// Whether the given talent can be learned by an average player. /// Does not check for available Talent points, since that is checked when the Rank is changed. /// </summary> public virtual bool CanLearn(TalentEntry entry, int rank) { var tree = entry.Tree; var diff = rank - GetRank(entry.Id); if (tree.Class != Owner.Class || m_treePoints[tree.TabIndex] < entry.RequiredTreePoints || rank > entry.Spells.Length || diff < 1) { return(false); } // requires another talent? Talent reqTalent; return (FreeTalentPoints >= diff && (entry.RequiredId == TalentId.None || (ById.TryGetValue(entry.RequiredId, out reqTalent) && (entry.RequiredRank == 0 || reqTalent.Rank >= entry.RequiredRank)))); }
public override bool CanLearn(TalentEntry entry, int rank) { return entry.Tree.Id != ((NPC)Owner).PetTalentType.GetTalentTreeId() && base.CanLearn(entry, rank); }
/// <summary> /// Depends on SpellHandler /// </summary> internal static void Initialize() { var treeReader = new MappedDBCReader<TalentTree, TalentTreeConverter>( RealmServerConfiguration.GetDBCFile("TalentTab.dbc")); foreach (var tree in treeReader.Entries.Values) { ArrayUtil.Set(ref TalentTrees, (uint)tree.Id, tree); var trees = TreesByClass[(uint)tree.Class]; if (trees == null) { TreesByClass[(uint)tree.Class] = trees = new TalentTree[MaxTabCount]; } trees[tree.TabIndex] = tree; } var talentReader = new ListDBCReader<TalentEntry, TalentConverter>( RealmServerConfiguration.GetDBCFile("Talent.dbc")); foreach (var talent in talentReader.EntryList) { ArrayUtil.Set(ref Entries, (uint)talent.Id, talent); talent.Tree.Talents.Add(talent); var talentRow = talent.Tree.TalentTable[talent.Row]; if (talentRow == null) { talent.Tree.TalentTable[talent.Row] = talentRow = new TalentEntry[MaxTalentColCount]; } talentRow[talent.Col] = talent; foreach (var spell in talent.Spells) { if (spell != null) { //if (spell.Talent != null) //{ // log.Warn("Spell {0} has Talents: {1} + {2}", spell, spell.Talent, talent); //} spell.Talent = talent; spell.ClassId = talent.Tree.Class; } } } // calculate total count of Ranks per Tree and the index of each Talent foreach (var tree in treeReader.Entries.Values) { var rankCount = 0; foreach (var talent in tree.Talents) { rankCount += talent.MaxRank; } tree.TotalRankCount = rankCount; ArrayUtil.Prune(ref tree.TalentTable); uint talentIndex = 0; for (var rowNum = 0; rowNum < tree.TalentTable.Length; rowNum++) { if (tree.TalentTable[rowNum] != null) { ArrayUtil.Prune(ref tree.TalentTable[rowNum]); var row = tree.TalentTable[rowNum]; for (var colNum = 0; colNum < row.Length; colNum++) { var talent = row[colNum]; if (talent != null) { talent.Index = talentIndex; talentIndex += (uint)talent.MaxRank; } } } } } } // end initialize
internal Talent(TalentCollection talents, TalentEntry entry) { Talents = talents; Entry = entry; }
public override bool CanLearn(TalentEntry entry, int rank) { return(entry.Tree.Id == ((NPC)Owner).PetTalentType.GetTalentTreeId() && base.CanLearn(entry, rank)); }
/// <summary> /// Depends on SpellHandler /// </summary> internal static void Initialize() { var treeReader = new MappedDBCReader <TalentTree, TalentTreeConverter>( RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_TALENTTREES)); //Init our GlyphInfoHolder GlyphInfoHolder.Init(); foreach (var tree in treeReader.Entries.Values) { ArrayUtil.Set(ref TalentTrees, (uint)tree.Id, tree); var trees = TreesByClass[(uint)tree.Class]; if (trees == null) { TreesByClass[(uint)tree.Class] = trees = new TalentTree[MaxTabCount]; } trees[tree.TabIndex] = tree; } var talentReader = new ListDBCReader <TalentEntry, TalentConverter>( RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_TALENTS)); foreach (var talent in talentReader.EntryList) { if (talent == null) { continue; } ArrayUtil.Set(ref Entries, (uint)talent.Id, talent); talent.Tree.Talents.Add(talent); var talentRow = talent.Tree.TalentTable[talent.Row]; if (talentRow == null) { talent.Tree.TalentTable[talent.Row] = talentRow = new TalentEntry[MaxTalentColCount]; } talentRow[talent.Col] = talent; for (var i = 0; i < talent.Spells.Length; i++) { var spell = talent.Spells[i]; if (spell != null) { //if (spell.Talent != null) //{ // log.Warn("Spell {0} has Talents: {1} + {2}", spell, spell.Talent, talent); //} spell.Talent = talent; spell.ClassId = talent.Tree.Class; spell.Rank = i + 1; } } } // calculate total count of Ranks per Tree and the index of each Talent foreach (var tree in treeReader.Entries.Values) { var rankCount = 0; foreach (var talent in tree.Talents) { rankCount += talent.MaxRank; } tree.TotalRankCount = rankCount; ArrayUtil.Prune(ref tree.TalentTable); uint talentIndex = 0; for (var rowNum = 0; rowNum < tree.TalentTable.Length; rowNum++) { if (tree.TalentTable[rowNum] != null) { ArrayUtil.Prune(ref tree.TalentTable[rowNum]); var row = tree.TalentTable[rowNum]; for (var colNum = 0; colNum < row.Length; colNum++) { var talent = row[colNum]; if (talent != null) { talent.Index = talentIndex; talentIndex += (uint)talent.MaxRank; } } } } } } // end initialize
internal Talent(TalentCollection talents, TalentEntry entry) { this.Talents = talents; this.Entry = entry; }
/// <summary> /// Depends on SpellHandler /// </summary> internal static void Initialize() { var treeReader = new MappedDBCReader<TalentTree, TalentTreeConverter>( RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_TALENTTREES)); //Init our GlyphInfoHolder GlyphInfoHolder.Init(); foreach (var tree in treeReader.Entries.Values) { ArrayUtil.Set(ref TalentTrees, (uint)tree.Id, tree); if ((uint)tree.Class >= TreesByClass.Length) { log.Error("Talent Tree out of range {1}:{0} TreeByClass.Length {2}", tree.Class, (uint) tree.Class, TreesByClass.Length); continue; } var trees = TreesByClass[(uint)tree.Class]; if (trees == null) { TreesByClass[(uint)tree.Class] = trees = new TalentTree[MaxTabCount]; } trees[tree.TabIndex] = tree; } var talentReader = new ListDBCReader<TalentEntry, TalentConverter>( RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_TALENTS)); foreach (var talent in talentReader.EntryList) { if (talent == null) continue; ArrayUtil.Set(ref Entries, (uint)talent.Id, talent); talent.Tree.Talents.Add(talent); var talentRow = talent.Tree.TalentTable[talent.Row]; if (talentRow == null) { talent.Tree.TalentTable[talent.Row] = talentRow = new TalentEntry[MaxTalentColCount]; } talentRow[talent.Col] = talent; for (var i = 0; i < talent.Spells.Length; i++) { var spell = talent.Spells[i]; if (spell != null) { //if (spell.Talent != null) //{ // log.Warn("Spell {0} has Talents: {1} + {2}", spell, spell.Talent, talent); //} spell.Talent = talent; spell.ClassId = talent.Tree.Class; spell.Rank = i + 1; } } } // calculate total count of Ranks per Tree and the index of each Talent foreach (var tree in treeReader.Entries.Values) { var rankCount = 0; foreach (var talent in tree.Talents) { rankCount += talent.MaxRank; } tree.TotalRankCount = rankCount; ArrayUtil.Prune(ref tree.TalentTable); uint talentIndex = 0; for (var rowNum = 0; rowNum < tree.TalentTable.Length; rowNum++) { if (tree.TalentTable[rowNum] != null) { ArrayUtil.Prune(ref tree.TalentTable[rowNum]); var row = tree.TalentTable[rowNum]; for (var colNum = 0; colNum < row.Length; colNum++) { var talent = row[colNum]; if (talent != null) { talent.Index = talentIndex; talentIndex += (uint)talent.MaxRank; } } } } } } // end initialize