Пример #1
0
        // 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));
        }
Пример #2
0
        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));
        }