// Non-WDB data but nevertheless data that should be saved to creature_template public static string NpcTemplateNonWDB(Dictionary <Guid, Unit> units) { if (units.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template)) { return(string.Empty); } var levels = GetLevels(units); var templates = new StoreDictionary <uint, UnitTemplateNonWDB>(); foreach (var unit in units) { if (templates.ContainsKey(unit.Key.GetEntry())) { continue; } var npc = unit.Value; var template = new UnitTemplateNonWDB { GossipMenuId = npc.GossipId, MinLevel = levels[unit.Key.GetEntry()].Item1, MaxLevel = levels[unit.Key.GetEntry()].Item2, Faction = npc.Faction.GetValueOrDefault(35), Faction2 = npc.Faction.GetValueOrDefault(35), NpcFlag = (uint)npc.NpcFlags.GetValueOrDefault(NPCFlags.None), SpeedRun = npc.Movement.RunSpeed, SpeedWalk = npc.Movement.WalkSpeed, BaseAttackTime = npc.MeleeTime.GetValueOrDefault(2000), RangedAttackTime = npc.RangedTime.GetValueOrDefault(2000), UnitClass = (uint)npc.Class.GetValueOrDefault(Class.Warrior), UnitFlag = (uint)npc.UnitFlags.GetValueOrDefault(UnitFlags.None), UnitFlag2 = (uint)npc.UnitFlags2.GetValueOrDefault(UnitFlags2.None), DynamicFlag = (uint)npc.DynamicFlags.GetValueOrDefault(UnitDynamicFlags.None), VehicleId = npc.Movement.VehicleId, HoverHeight = npc.HoverHeight.GetValueOrDefault(1.0f) }; if (template.Faction == 1 || template.Faction == 2 || template.Faction == 3 || template.Faction == 4 || template.Faction == 5 || template.Faction == 6 || template.Faction == 115 || template.Faction == 116 || template.Faction == 1610 || template.Faction == 1629 || template.Faction == 2203 || template.Faction == 2204) // player factions { template.Faction = 35; } template.UnitFlag &= ~(uint)UnitFlags.IsInCombat; template.UnitFlag &= ~(uint)UnitFlags.PetIsAttackingTarget; template.UnitFlag &= ~(uint)UnitFlags.PlayerControlled; template.UnitFlag &= ~(uint)UnitFlags.Silenced; template.UnitFlag &= ~(uint)UnitFlags.PossessedByPlayer; templates.Add(unit.Key.GetEntry(), template, null); } var templatesDb = SQLDatabase.GetDict <uint, UnitTemplateNonWDB>(templates.Keys()); return(SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.Unit)); }
public static string NpcTemplateNonWDB(Dictionary <WowGuid, Unit> units) { if (units.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template)) { return(string.Empty); } var levels = GetLevels(units); var templates = new StoreDictionary <uint, UnitTemplateNonWDB>(); foreach (var unit in units) { if (templates.ContainsKey(unit.Key.GetEntry())) { continue; } var npc = unit.Value; var template = new UnitTemplateNonWDB { GossipMenuId = npc.GossipId, MinLevel = levels[unit.Key.GetEntry()].Item1, MaxLevel = levels[unit.Key.GetEntry()].Item2, Faction = npc.Faction.GetValueOrDefault(35), NpcFlag = (uint)npc.NpcFlags.GetValueOrDefault(NPCFlags.None), SpeedRun = npc.Movement.RunSpeed, SpeedWalk = npc.Movement.WalkSpeed, BaseAttackTime = npc.MeleeTime.GetValueOrDefault(2000), RangedAttackTime = npc.RangedTime.GetValueOrDefault(2000), UnitClass = (uint)npc.Class.GetValueOrDefault(Class.Warrior), UnitFlag = (uint)npc.UnitFlags.GetValueOrDefault(UnitFlags.None), UnitFlag2 = (uint)npc.UnitFlags2.GetValueOrDefault(UnitFlags2.None), DynamicFlag = (uint)npc.DynamicFlags.GetValueOrDefault(UnitDynamicFlags.None), VehicleId = npc.Movement.VehicleId, HoverHeight = npc.HoverHeight.GetValueOrDefault(1.0f) }; if (template.Faction == 1 || template.Faction == 2 || template.Faction == 3 || template.Faction == 4 || template.Faction == 5 || template.Faction == 6 || template.Faction == 115 || template.Faction == 116 || template.Faction == 1610 || template.Faction == 1629 || template.Faction == 2203 || template.Faction == 2204) // player factions { template.Faction = 35; } template.UnitFlag &= ~(uint)UnitFlags.IsInCombat; template.UnitFlag &= ~(uint)UnitFlags.PetIsAttackingTarget; template.UnitFlag &= ~(uint)UnitFlags.PlayerControlled; template.UnitFlag &= ~(uint)UnitFlags.Silenced; template.UnitFlag &= ~(uint)UnitFlags.PossessedByPlayer; template.DynamicFlag &= ~(uint)UnitDynamicFlags.Lootable; template.DynamicFlag &= ~(uint)UnitDynamicFlags.Tapped; template.DynamicFlag &= ~(uint)UnitDynamicFlags.TappedByPlayer; template.DynamicFlag &= ~(uint)UnitDynamicFlags.TappedByAllThreatList; // has trainer flag but doesn't have prof nor class trainer flag if ((template.NpcFlag & (uint)NPCFlags.Trainer) != 0 && ((template.NpcFlag & (uint)NPCFlags.ProfessionTrainer) == 0 || (template.NpcFlag & (uint)NPCFlags.ClassTrainer) == 0)) { var name = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false); var firstIndex = name.LastIndexOf('<'); var lastIndex = name.LastIndexOf('>'); if (firstIndex != -1 && lastIndex != -1) { var subname = name.Substring(firstIndex + 1, lastIndex - firstIndex - 1); if (_professionTrainers.Contains(subname)) { template.NpcFlag |= (uint)NPCFlags.ProfessionTrainer; } else if (_classTrainers.Contains(subname)) { template.NpcFlag |= (uint)NPCFlags.ClassTrainer; } } } templates.Add(unit.Key.GetEntry(), template); } var templatesDb = SQLDatabase.GetDict <uint, UnitTemplateNonWDB>(templates.Keys()); return(SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.Unit)); }