// Non-WDB data but nevertheless data that should be saved to gameobject_template public static string GameobjectTemplateNonWDB(Dictionary<Guid, GameObject> gameobjects) { if (gameobjects.Count == 0) return String.Empty; var templates = new StoreDictionary<uint, GameObjectTemplateNonWDB>(); foreach (var goT in gameobjects) { if (templates.ContainsKey(goT.Key.GetEntry())) continue; var go = goT.Value; var template = new GameObjectTemplateNonWDB { Size = go.Size.GetValueOrDefault(1.0f), Faction = go.Faction.GetValueOrDefault(0), Flags = go.Flags.GetValueOrDefault(GameObjectFlag.None) }; 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 = 0; template.Flags &= ~GameObjectFlag.Triggered; template.Flags &= ~GameObjectFlag.Damaged; template.Flags &= ~GameObjectFlag.Destroyed; templates.Add(goT.Key.GetEntry(), template, null); } var templatesDb = SQLDatabase.GetDict<uint, GameObjectTemplateNonWDB>(templates.Keys()); return SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.GameObject); }
public static string CreatureEquip(Dictionary <Guid, Unit> units) { if (units.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) { return(string.Empty); } var equips = new StoreDictionary <ushort, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var entry = (ushort)unit.Key.GetEntry(); if (npc.Equipment == null || npc.Equipment.Length != 3) { continue; } if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) { continue; } if (equips.ContainsKey(entry)) { var existingEquip = equips[entry].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) { equips.Remove(entry); // no conflicts } continue; } equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2]; equips.Add(entry, equip); } var entries = equips.Keys(); var equipsDb = SQLDatabase.GetDict <ushort, CreatureEquipment>(entries); return(SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit)); }
public static string ModelData(Dictionary <Guid, Unit> units) { if (units.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_model_info)) { return(string.Empty); } // Build a dictionary with model data; model is the key var models = new StoreDictionary <uint, ModelData>(); foreach (var npc in units.Select(unit => unit.Value)) { uint modelId; if (npc.Model.HasValue) { modelId = npc.Model.Value; } else { continue; } // Do not add duplicate models if (models.ContainsKey(modelId)) { continue; } float scale = npc.Size.GetValueOrDefault(1.0f); var model = new ModelData { BoundingRadius = npc.BoundingRadius.GetValueOrDefault(0.306f) / scale, CombatReach = npc.CombatReach.GetValueOrDefault(1.5f) / scale, Gender = npc.Gender.GetValueOrDefault(Gender.Male) }; models.Add(modelId, model, null); } var entries = models.Keys(); var modelsDb = SQLDatabase.GetDict <uint, ModelData>(entries, "modelid"); return(SQLUtil.CompareDicts(models, modelsDb, StoreNameType.None, "modelid")); }
// Non-WDB data but nevertheless data that should be saved to gameobject_template public static string GameobjectTemplateNonWDB(Dictionary <Guid, GameObject> gameobjects) { if (gameobjects.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gameobject_template)) { return(string.Empty); } var templates = new StoreDictionary <uint, GameObjectTemplateNonWDB>(); foreach (var goT in gameobjects) { if (templates.ContainsKey(goT.Key.GetEntry())) { continue; } var go = goT.Value; var template = new GameObjectTemplateNonWDB { Size = go.Size.GetValueOrDefault(1.0f), Faction = go.Faction.GetValueOrDefault(0), Flags = go.Flags.GetValueOrDefault(GameObjectFlag.None) }; 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 = 0; } template.Flags &= ~GameObjectFlag.Triggered; template.Flags &= ~GameObjectFlag.Damaged; template.Flags &= ~GameObjectFlag.Destroyed; templates.Add(goT.Key.GetEntry(), template, null); } var templatesDb = SQLDatabase.GetDict <uint, GameObjectTemplateNonWDB>(templates.Keys()); return(SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.GameObject)); }
// 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)); }
public static string ModelData(Dictionary<WowGuid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_model_info)) return string.Empty; // Build a dictionary with model data; model is the key var models = new StoreDictionary<uint, ModelData>(); foreach (var npc in units.Select(unit => unit.Value)) { if (Settings.AreaFilters.Length > 0) if (!(npc.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) continue; if (Settings.MapFilters.Length > 0) if (!(npc.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) continue; uint modelId; if (npc.Model.HasValue) modelId = npc.Model.Value; else continue; // Do not add duplicate models if (models.ContainsKey(modelId)) continue; float scale = npc.Size.GetValueOrDefault(1.0f); var model = new ModelData { BoundingRadius = npc.BoundingRadius.GetValueOrDefault(0.306f) / scale, CombatReach = npc.CombatReach.GetValueOrDefault(1.5f) / scale, Gender = npc.Gender.GetValueOrDefault(Gender.Male) }; models.Add(modelId, model); } var entries = models.Keys(); var modelsDb = SQLDatabase.GetDict<uint, ModelData>(entries, "DisplayID"); return SQLUtil.CompareDicts(models, modelsDb, StoreNameType.None, "DisplayID"); }
public static string CreatureEquip(Dictionary<WowGuid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) return string.Empty; var rows = new List<QueryBuilder.SQLInsertRow>(); var equips = new StoreDictionary<uint, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var CreatureID = unit.Key.GetEntry(); var row = new QueryBuilder.SQLInsertRow(); if (Settings.AreaFilters.Length > 0) if (!(npc.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) continue; if (Settings.MapFilters.Length > 0) if (!(npc.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) continue; if (npc.Equipment == null || npc.Equipment.Length != 3) continue; if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) continue; if (equips.ContainsKey(CreatureID)) { var existingEquip = equips[CreatureID].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) equips.Remove(CreatureID); // no conflicts continue; } /*equip.ID = 1; equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2];*/ row.AddValue("CreatureID", CreatureID); row.AddValue("ID", 1); row.AddValue("ItemID1", npc.Equipment[0]); row.AddValue("ItemID2", npc.Equipment[1]); row.AddValue("ItemID3", npc.Equipment[2]); equips.Add(CreatureID, equip); rows.Add(row); } var entries = equips.Keys(); //var equipsDb = SQLDatabase.GetDict<uint, CreatureEquipment>(entries); //return SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit); return new QueryBuilder.SQLInsert("creature_equip_template", rows, withDelete: true).Build(); }
public static string CreatureDifficultyMisc(Dictionary<WowGuid, Unit> units) { if (!ClientVersion.AddedInVersion(ClientType.WarlordsOfDraenor)) return string.Empty; if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template)) return string.Empty; var templates = new StoreDictionary<uint, CreatureDifficultyMisc>(); foreach (var unit in units) { if (SQLDatabase.CreatureDifficultyStores != null) { foreach (var creatureDiff in SQLDatabase.CreatureDifficultyStores) { if (!Utilities.EqualValues(unit.Key.GetEntry(), creatureDiff.Value.CreatureID)) continue; if (templates.ContainsKey(creatureDiff.Key)) continue; var npc = unit.Value; var template = new CreatureDifficultyMisc { CreatureId = unit.Key.GetEntry(), GossipMenuId = npc.GossipId, 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) }; 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; if (!ClientVersion.AddedInVersion(ClientType.WarlordsOfDraenor)) { template.DynamicFlag &= ~(uint)UnitDynamicFlags.Lootable; template.DynamicFlag &= ~(uint)UnitDynamicFlags.Tapped; template.DynamicFlag &= ~(uint)UnitDynamicFlags.TappedByPlayer; template.DynamicFlag &= ~(uint)UnitDynamicFlags.TappedByAllThreatList; } else { template.DynamicFlag &= ~(uint)UnitDynamicFlagsWOD.Lootable; template.DynamicFlag &= ~(uint)UnitDynamicFlagsWOD.Tapped; template.DynamicFlag &= ~(uint)UnitDynamicFlagsWOD.TappedByPlayer; template.DynamicFlag &= ~(uint)UnitDynamicFlagsWOD.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(creatureDiff.Key, template); } } } var templatesDb = SQLDatabase.GetDict<uint, CreatureDifficultyMisc>(templates.Keys(), "Id"); return SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.Unit, "Id"); }
public static string CreatureEquip(Dictionary<Guid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) return string.Empty; var equips = new StoreDictionary<ushort, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var entry = (ushort)unit.Key.GetEntry(); if (npc.Equipment == null || npc.Equipment.Length != 3) continue; if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) continue; if (equips.ContainsKey(entry)) { var existingEquip = equips[entry].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) equips.Remove(entry); // no conflicts continue; } equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2]; equips.Add(entry, equip); } var entries = equips.Keys(); var equipsDb = SQLDatabase.GetDict<ushort, CreatureEquipment>(entries); return SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit); }
// 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 ModelData(Dictionary<Guid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_model_info)) return string.Empty; // Build a dictionary with model data; model is the key var models = new StoreDictionary<uint, ModelData>(); foreach (var npc in units.Select(unit => unit.Value)) { uint modelId; if (npc.Model.HasValue) modelId = npc.Model.Value; else continue; // Do not add duplicate models if (models.ContainsKey(modelId)) continue; var model = new ModelData { BoundingRadius = npc.BoundingRadius.GetValueOrDefault(0.306f), CombatReach = npc.CombatReach.GetValueOrDefault(1.5f), Gender = npc.Gender.GetValueOrDefault(Gender.Male) }; models.Add(modelId, model, null); } var entries = models.Keys(); var modelsDb = SQLDatabase.GetDict<uint, ModelData>(entries, "modelid"); return SQLUtil.CompareDicts(models, modelsDb, StoreNameType.None, "modelid"); }
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); }
public static string GameobjectTemplateNonWDB(Dictionary<WowGuid, GameObject> gameobjects) { if (gameobjects.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gameobject_template)) return string.Empty; var templates = new StoreDictionary<uint, GameObjectTemplateNonWDB>(); foreach (var goT in gameobjects) { if (templates.ContainsKey(goT.Key.GetEntry())) continue; var go = goT.Value; if (Settings.AreaFilters.Length > 0) if (!(go.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) continue; if (Settings.MapFilters.Length > 0) if (!(go.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) continue; var template = new GameObjectTemplateNonWDB { Size = go.Size.GetValueOrDefault(1.0f), Faction = go.Faction.GetValueOrDefault(0), Flags = go.Flags.GetValueOrDefault(GameObjectFlag.None) }; 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 = 0; template.Flags &= ~GameObjectFlag.Triggered; template.Flags &= ~GameObjectFlag.Damaged; template.Flags &= ~GameObjectFlag.Destroyed; templates.Add(goT.Key.GetEntry(), template); } var templatesDb = SQLDatabase.GetDict<uint, GameObjectTemplateNonWDB>(templates.Keys()); return SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.GameObject); }
public static string NpcTemplateNonWDB(Dictionary<WowGuid, Unit> units) { if (ClientVersion.AddedInVersion(ClientType.WarlordsOfDraenor)) return string.Empty; 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 = (int) levels[unit.Key.GetEntry()].Item1, MaxLevel = (int) 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)) { UnitTemplate unitData; var subname = GetSubName((int)unit.Key.GetEntry(), false); // Fall back if (Storage.UnitTemplates.TryGetValue(unit.Key.GetEntry(), out unitData)) { if (unitData.SubName.Length > 0) template.NpcFlag |= ProcessNpcFlags(unitData.SubName); else // If the SubName doesn't exist or is cached, fall back to DB method template.NpcFlag |= ProcessNpcFlags(subname); } else // In case we have NonWDB data which doesn't have an entry in UnitTemplates template.NpcFlag |= ProcessNpcFlags(subname); } templates.Add(unit.Key.GetEntry(), template); } var templatesDb = SQLDatabase.GetDict<uint, UnitTemplateNonWDB>(templates.Keys()); return SQLUtil.CompareDicts(templates, templatesDb, StoreNameType.Unit); }