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); } } }
/// <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); }
/// <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); }
public static NPCEntry GetEntry(NPCId id, uint difficultyIndex) { return(NPCMgr.GetEntry(id)?.GetEntry(difficultyIndex)); }
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); //} }