Esempio n. 1
0
 public static void Apply(this Action <NPCEntry> cb, params NPCId[] ids)
 {
     foreach (NPCId id in ids)
     {
         NPCEntry entry = NPCMgr.GetEntry(id);
         if (entry != null)
         {
             cb(entry);
         }
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Returns the NPCEntry for the given difficulty
        /// </summary>
        public NPCEntry GetEntry(uint difficultyIndex)
        {
            var id = DifficultyOverrideEntryIds.Get(difficultyIndex);

            if (id != 0)
            {
                var entry = NPCMgr.GetEntry(id);
                if (entry != null)
                {
                    return(entry);
                }
            }
            return(this);
        }
Esempio n. 3
0
        /// <summary>
        /// Is called to initialize the object; usually after a set of other operations have been performed or if
        /// the right time has come and other required steps have been performed.
        /// </summary>
        public void FinalizeAfterLoad()
        {
            NPCId          = (NPCId)Id;
            SetFlagIndeces = Utility.GetSetIndices((uint)Flags);
            DefaultFaction = FactionMgr.Get(DefaultFactionId);

            if (AuraIds != null)
            {
                var auras = new List <Spell>(AuraIds.Length);
                foreach (var auraId in AuraIds)
                {
                    var spell = SpellHandler.Get(auraId);
                    if (spell != null)
                    {
                        auras.Add(spell);
                    }
                }
                Auras = auras.ToArray();
            }
            else
            {
                Auras = Spell.EmptyArray;
            }

            var entry = NPCMgr.GetEntry(Id);

            if (entry != null)
            {
                // set the prototype
                entry.Prototype = this;
                Entry           = entry;
            }

            InstanceTypeHandlers = NPCMgr.GetNPCTypeHandlers(this);
            SpawnTypeHandlers    = NPCMgr.GetNPCSpawnTypeHandlers(this);
        }
Esempio n. 4
0
 public static NPCEntry GetEntry(NPCId id, uint difficultyIndex)
 {
     return(NPCMgr.GetEntry(id)?.GetEntry(difficultyIndex));
 }
Esempio n. 5
0
        public void Dump(IndentTextWriter writer)
        {
            writer.WriteLine("{3}{0} (Id: {1}, {2})", DefaultName, Id, NPCId, Rank != 0 ? Rank + " " : "");
            if (!string.IsNullOrEmpty(DefaultTitle))
            {
                writer.WriteLine("Title: " + DefaultTitle);
            }
            if (Type != 0)
            {
                writer.WriteLine("Type: " + Type);
            }
            if (EntryFlags != 0)
            {
                writer.WriteLine("EntryFlags: " + EntryFlags);
            }
            if (Family != null)
            {
                writer.WriteLine("Family: " + Family);
            }
            if (IsLeader)
            {
                writer.WriteLine("Leader");
            }

            writer.WriteLine("DisplayIds: " + DisplayIds.ToString(", "));
            if (TrainerEntry != null)
            {
                writer.WriteLine("Trainer "
                                 //+ "for {0} {1}",
                                 //             TrainerEntry.RequiredRace != 0 ? TrainerEntry.RequiredRace.ToString() : "",
                                 //             TrainerEntry.RequiredClass != 0 ? TrainerEntry.RequiredClass.ToString() : ""
                                 );
            }

            WriteFaction(writer);
            writer.WriteLineNotDefault(IsBoss, "Boss");
            writer.WriteLine("Level: {0} - {1}", MinLevel, MaxLevel);
            writer.WriteLine("Health: {0} - {1}", MinHealth, MaxHealth);

            writer.WriteLineNotDefault(MinMana, "Mana: {0} - {1}", MinMana, MaxMana);
            writer.WriteLineNotDefault(NPCFlags, "Flags: " + NPCFlags);
            writer.WriteLineNotDefault(DynamicFlags, "DynamicFlags: " + DynamicFlags);
            writer.WriteLineNotDefault(UnitFlags, "UnitFlags: " + UnitFlags);
            writer.WriteLineNotDefault(ExtraFlags, "ExtraFlags: " + string.Format("0x{0:X}", ExtraFlags));
            writer.WriteLineNotDefault(AttackTime + OffhandAttackTime, "AttackTime: " + AttackTime, "Offhand: " + OffhandAttackTime);
            writer.WriteLineNotDefault(RangedAttackTime, "RangedAttackTime: " + RangedAttackTime);
            writer.WriteLineNotDefault(AttackPower, "AttackPower: " + AttackPower);
            writer.WriteLineNotDefault(RangedAttackPower, "RangedAttackPower: " + RangedAttackPower);
            //writer.WriteLineNotDefault(OffhandAttackPower, "OffhandAttackPower: " + OffhandAttackPower);
            writer.WriteLineNotDefault(MinDamage + MaxDamage, "Damage: {0} - {1}", MinDamage, MaxDamage);
            writer.WriteLineNotDefault(RangedMinDamage + RangedMaxDamage, "RangedDamage: {0} - {1}", RangedMinDamage,
                                       RangedMaxDamage);
            writer.WriteLineNotDefault(OffhandMinDamage + OffhandMaxDamage, "OffhandDamage: {0} - {1}", OffhandMinDamage,
                                       OffhandMaxDamage);
            var resistances = new List <string>(8);

            for (var i = 0; i < Resistances.Length; i++)
            {
                var res = Resistances[i];
                if (res > 0)
                {
                    resistances.Add(string.Format("{0}: {1}", (DamageSchool)i, res));
                }
            }
            if (Scale != 1)
            {
                writer.WriteLine("Scale: " + Scale);
            }

            var cr = GetRandomModel().CombatReach;
            var br = GetRandomModel().BoundingRadius;

            writer.WriteLine("CombatReach: " + cr);
            writer.WriteLine("BoundingRadius: " + br);
            writer.WriteLineNotDefault(resistances.Count, "Resistances: " + resistances.ToString(", "));
            writer.WriteLineNotDefault(MoneyDrop, "MoneyDrop: " + MoneyDrop);
            writer.WriteLineNotDefault(InvisibilityType, "Invisibility: " + InvisibilityType);
            writer.WriteLineNotDefault(MovementType, "MovementType: " + MovementType);
            writer.WriteLineNotDefault(WalkSpeed + RunSpeed + FlySpeed, "Speeds - Walking: {0}, Running: {1}, Flying: {2} ",
                                       WalkSpeed, RunSpeed, FlySpeed);
            writer.WriteLineNotDefault(LootId + SkinLootId + PickPocketLootId, "{0}{1}{2}",
                                       LootId != 0 ? "Lootable " : "",
                                       SkinLootId != 0 ? "Skinnable " : "",
                                       PickPocketLootId != 0 ? "Pickpocketable" : "");
            if (AddonData != null)
            {
                writer.WriteLineNotDefault(AddonData.MountModelId, "Mount: " + AddonData.MountModelId);
                writer.WriteLineNotDefault(AddonData.Auras.Count, "Auras: " + AddonData.Auras.ToString(", "));
            }
            var spells = Spells;

            if (spells != null && spells.Count > 0)
            {
                writer.WriteLine("Spells: " + Spells.ToString(", "));
            }
            if (Equipment != null)
            {
                writer.WriteLine("Equipment: {0}", Equipment.ItemIds.Where(id => id != 0).ToString(", "));
            }

            if (DifficultyOverrideEntryIds != null && DifficultyOverrideEntryIds.Any(id => id != 0))
            {
                var parts = new List <string>(4);
                for (var i = 0u; i < 3; i++)
                {
                    var id = DifficultyOverrideEntryIds[i];
                    if (id != 0)
                    {
                        var                entry = NPCMgr.GetEntry(id);
                        MapTemplate        map;
                        MapDifficultyEntry diff;
                        if (entry != null && (map = GetMapTemplate()) != null && (diff = map.GetDifficulty(i)) != null)
                        {
                            parts.Add(string.Format("{0} ({1}) = " + id + " (" + (uint)id + ")", diff.IsHeroic ? "Heroic" : "Normal", diff.MaxPlayerCount));
                        }
                        else
                        {
                            parts.Add("(unknown difficulty) = " + id + " (" + (uint)id + ")");
                        }
                    }
                }
                writer.WriteLine("DifficultyOverrides: {0}", parts.ToString("; "));
            }

            if (KillCreditIds != null && KillCreditIds.Any(id => id != 0))
            {
                var parts = new List <string>(2);
                for (var i = 0u; i < UnitConstants.MaxKillCredits; i++)
                {
                    var id = KillCreditIds[i];
                    if (id != 0)
                    {
                        var entry = NPCMgr.GetEntry(id);
                        if (entry != null)
                        {
                            parts.Add(id + " (" + (uint)id + ")");
                        }
                    }
                }
                writer.WriteLine("KillCredits: {0}", parts.ToString("; "));
            }


            //if (inclFaction)
            //{
            //    writer.WriteLineNotDefault(DefaultFactionId, "Faction: " + DefaultFactionId);
            //}
        }