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 result = string.Empty; const string tableName = "creature_template"; var rowsIns = new List<QueryBuilder.SQLUpdateRow>(); uint count = 0; var templates = new StoreDictionary<uint, UnitTemplateNonWDB>(); foreach (var unit in units) { if (templates.ContainsKey(unit.Key.GetEntry())) continue; var row = new QueryBuilder.SQLUpdateRow(); 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; 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)) { 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); } row.AddValue("minlevel", template.MinLevel); row.AddValue("maxlevel", template.MaxLevel); row.AddValue("faction", template.Faction); row.AddValue("npcflag", template.NpcFlag); row.AddValue("speed_walk", template.SpeedWalk); row.AddValue("speed_run", template.SpeedRun); row.AddWhere("entry", unit.Key.GetEntry()); row.Table = tableName; rowsIns.Add(row); count++; templates.Add(unit.Key.GetEntry(), template); } //result += new QueryBuilder.SQLDelete(Tuple.Create("@ID+0", "@ID+" + (count - 1)), "entry", tableName).Build(); result += new QueryBuilder.SQLUpdate(rowsIns).Build(); return result; /*var templatesDb = SQLDatabase.GetDict<uint, UnitTemplateNonWDB>(templates.Keys()); return SQLUtil.CompareDicts(templates, templatesDb, 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 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); }
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); }
// 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; const string tableName = "creature_template"; var levels = GetLevels(units); var templates = new Dictionary<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), SpeedWalk = npc.Movement.RunSpeed, SpeedRun = 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), 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); } var db = SQLDatabase.GetDict<uint, UnitTemplateNonWDB>(templates.Keys.ToList()); if (db == null) return ""; var rows = new List<QueryBuilder.SQLUpdateRow>(); foreach (var unit in templates) { var row = new QueryBuilder.SQLUpdateRow(); var npcLocal = unit.Value; UnitTemplateNonWDB npcRemote; if (!db.TryGetValue(unit.Key, out npcRemote)) continue; if (!Utilities.EqualValues(npcLocal.GossipMenuId, npcRemote.GossipMenuId)) row.AddValue("gossip_menu_id", npcLocal.GossipMenuId); if (!Utilities.EqualValues(npcLocal.MinLevel, npcRemote.MinLevel)) row.AddValue("minlevel", npcLocal.MinLevel); if (!Utilities.EqualValues(npcLocal.MaxLevel, npcRemote.MaxLevel)) row.AddValue("maxlevel", npcLocal.MaxLevel); if (!Utilities.EqualValues(npcLocal.Faction, npcRemote.Faction)) { row.AddValue("faction_A", npcLocal.Faction); row.AddValue("faction_H", npcLocal.Faction); } if (!Utilities.EqualValues(npcLocal.NpcFlag, npcRemote.NpcFlag)) row.AddValue("npcflag", npcLocal.NpcFlag); if (!Utilities.EqualValues(npcLocal.SpeedWalk, npcRemote.SpeedWalk)) row.AddValue("speed_walk", npcLocal.SpeedWalk); if (!Utilities.EqualValues(npcLocal.SpeedRun, npcRemote.SpeedRun)) row.AddValue("speed_run", npcLocal.SpeedRun); if (!Utilities.EqualValues(npcLocal.BaseAttackTime, npcRemote.BaseAttackTime)) row.AddValue("baseattacktime", npcLocal.BaseAttackTime); if (!Utilities.EqualValues(npcLocal.RangedAttackTime, npcRemote.RangedAttackTime)) row.AddValue("rangeattacktime", npcLocal.RangedAttackTime); if (!Utilities.EqualValues(npcLocal.UnitClass, npcRemote.UnitClass)) row.AddValue("unit_class", npcLocal.UnitClass); if (!Utilities.EqualValues(npcLocal.UnitFlag, npcRemote.UnitFlag)) row.AddValue("unit_flags", npcLocal.UnitFlag); if (!Utilities.EqualValues(npcLocal.DynamicFlag, npcRemote.DynamicFlag)) row.AddValue("dynamicflags", npcLocal.DynamicFlag); if (!Utilities.EqualValues(npcLocal.VehicleId, npcRemote.VehicleId)) row.AddValue("VehicleId", npcLocal.VehicleId); if (!Utilities.EqualValues(npcLocal.HoverHeight, npcRemote.UnitClass)) row.AddValue("HoverHeight", npcLocal.HoverHeight); if (row.ValueCount != 0) { row.AddWhere("entry", unit.Key); row.Table = tableName; row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int) unit.Key, false); rows.Add(row); } } return new QueryBuilder.SQLUpdate(rows).Build(); }