Example #1
0
 public Talent(TalentCollection talents, TalentEntry entry, int rank)
 {
     m_rank  = -1;
     Talents = talents;
     Entry   = entry;
     Rank    = rank;
 }
Example #2
0
 public Talent(TalentCollection talents, TalentEntry entry, int rank)
 {
     this.m_rank  = -1;
     this.Talents = talents;
     this.Entry   = entry;
     this.Rank    = rank;
 }
Example #3
0
		public Talent(TalentCollection talents, TalentEntry entry, int rank)
		{
			m_rank = -1;
			Talents = talents;
			Entry = entry;
			Rank = rank;
		}
Example #4
0
        /// <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);
        }
Example #5
0
        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;
        }
Example #6
0
 /// <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));
 }
Example #7
0
 public override bool CanLearn(TalentEntry entry, int rank)
 {
     if (entry.Tree.Id == ((NPC)this.Owner).PetTalentType.GetTalentTreeId())
     {
         return(base.CanLearn(entry, rank));
     }
     return(false);
 }
Example #8
0
 /// <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));
 }
Example #9
0
        /// <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);
        }
Example #10
0
        public Talent Learn(TalentId id, int rank)
        {
            TalentEntry entry = TalentMgr.GetEntry(id);

            if (entry != null)
            {
                return(Learn(entry, rank));
            }
            return(null);
        }
Example #11
0
        /// <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);
        }
Example #12
0
        /// <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))));
        }
Example #13
0
		public override bool CanLearn(TalentEntry entry, int rank)
		{
			return entry.Tree.Id != ((NPC)Owner).PetTalentType.GetTalentTreeId() && base.CanLearn(entry, rank);
		}
Example #14
0
		/// <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
Example #15
0
 internal Talent(TalentCollection talents, TalentEntry entry)
 {
     Talents = talents;
     Entry   = entry;
 }
Example #16
0
 public override bool CanLearn(TalentEntry entry, int rank)
 {
     return(entry.Tree.Id == ((NPC)Owner).PetTalentType.GetTalentTreeId() && base.CanLearn(entry, rank));
 }
Example #17
0
        /// <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
Example #18
0
 internal Talent(TalentCollection talents, TalentEntry entry)
 {
     this.Talents = talents;
     this.Entry   = entry;
 }
Example #19
0
		internal Talent(TalentCollection talents, TalentEntry entry)
		{
			Talents = talents;
			Entry = entry;
		}
Example #20
0
		/// <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