public void LoadBattleMastersEntry()
        {
            uint oldMSTime = Time.GetMSTime();

            mBattleMastersMap.Clear();                                  // need for reload case

            SQLResult result = DB.World.Query("SELECT entry, bg_template FROM battlemaster_entry");

            if (result.IsEmpty())
            {
                Log.outInfo(LogFilter.ServerLoading, "Loaded 0 battlemaster entries. DB table `battlemaster_entry` is empty!");
                return;
            }

            uint count = 0;

            do
            {
                uint             entry = result.Read <uint>(0);
                CreatureTemplate cInfo = Global.ObjectMgr.GetCreatureTemplate(entry);
                if (cInfo != null)
                {
                    if (!cInfo.Npcflag.HasAnyFlag(NPCFlags.BattleMaster))
                    {
                        Log.outError(LogFilter.Sql, "Creature (Entry: {0}) listed in `battlemaster_entry` is not a battlemaster.", entry);
                    }
                }
                else
                {
                    Log.outError(LogFilter.Sql, "Creature (Entry: {0}) listed in `battlemaster_entry` does not exist.", entry);
                    continue;
                }

                uint bgTypeId = result.Read <uint>(1);
                if (!CliDB.BattlemasterListStorage.ContainsKey(bgTypeId))
                {
                    Log.outError(LogFilter.Sql, "Table `battlemaster_entry` contain entry {0} for not existed Battleground type {1}, ignored.", entry, bgTypeId);
                    continue;
                }

                ++count;
                mBattleMastersMap[entry] = (BattlegroundTypeId)bgTypeId;
            }while (result.NextRow());

            CheckBattleMasters();

            Log.outInfo(LogFilter.ServerLoading, "Loaded {0} battlemaster entries in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
        }
Beispiel #2
0
        public bool LoadFromDB(SQLFields fields)
        {
            Id          = fields.Read <uint>(0);
            auctioneer  = fields.Read <ulong>(1);
            itemGUIDLow = fields.Read <ulong>(2);
            itemEntry   = fields.Read <uint>(3);
            itemCount   = fields.Read <uint>(4);
            owner       = fields.Read <ulong>(5);
            buyout      = fields.Read <ulong>(6);
            expire_time = fields.Read <uint>(7);
            bidder      = fields.Read <ulong>(8);
            bid         = fields.Read <ulong>(9);
            startbid    = fields.Read <ulong>(10);
            deposit     = fields.Read <ulong>(11);

            CreatureData auctioneerData = Global.ObjectMgr.GetCreatureData(auctioneer);

            if (auctioneerData == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing auctioneer (GUID : {1})", Id, auctioneer);
                return(false);
            }

            CreatureTemplate auctioneerInfo = Global.ObjectMgr.GetCreatureTemplate(auctioneerData.id);

            if (auctioneerInfo == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing auctioneer (GUID : {1} Entry: {2})", Id, auctioneer, auctioneerData.id);
                return(false);
            }

            factionTemplateId = auctioneerInfo.Faction;
            auctionHouseEntry = Global.AuctionMgr.GetAuctionHouseEntry(factionTemplateId, ref houseId);
            if (auctionHouseEntry == null)
            {
                Log.outError(LogFilter.Server, "Auction {0} has auctioneer (GUID : {1} Entry: {2}) with wrong faction {3}", Id, auctioneer, auctioneerData.id, factionTemplateId);
                return(false);
            }

            // check if sold item exists for guid
            // and itemEntry in fact (GetAItem will fail if problematic in result check in AuctionHouseMgr.LoadAuctionItems)
            if (!Global.AuctionMgr.GetAItem(itemGUIDLow))
            {
                Log.outError(LogFilter.Server, "Auction {0} has not a existing item : {1}", Id, itemGUIDLow);
                return(false);
            }
            return(true);
        }
 public CreatureTemplateProfileForm(CreatureTemplate t)
 {
     this.InitializeComponent();
     this.TypeBox.Items.Add(CreatureTemplateType.Functional);
     this.TypeBox.Items.Add(CreatureTemplateType.Class);
     this.RoleBox.Items.Add(RoleType.Artillery);
     this.RoleBox.Items.Add(RoleType.Brute);
     this.RoleBox.Items.Add(RoleType.Controller);
     this.RoleBox.Items.Add(RoleType.Lurker);
     this.RoleBox.Items.Add(RoleType.Skirmisher);
     this.RoleBox.Items.Add(RoleType.Soldier);
     this.fTemplate            = t.Copy();
     this.NameBox.Text         = this.fTemplate.Name;
     this.TypeBox.SelectedItem = this.fTemplate.Type;
     this.RoleBox.SelectedItem = this.fTemplate.Role;
     this.LeaderBox.Checked    = this.fTemplate.Leader;
 }
Beispiel #4
0
        public bool LoadFromFieldList(SQLFields fields)
        {
            // Loads an AuctionEntry item from a field list. Unlike "LoadFromDB()", this one
            //  does not require the AuctionEntryMap to have been loaded with items. It simply
            //  acts as a wrapper to fill out an AuctionEntry struct from a field list

            Id          = fields.Read <uint>(0);
            auctioneer  = fields.Read <uint>(1);
            itemGUIDLow = fields.Read <uint>(2);
            itemEntry   = fields.Read <uint>(3);
            itemCount   = fields.Read <uint>(4);
            owner       = fields.Read <uint>(5);
            buyout      = fields.Read <uint>(6);
            expire_time = fields.Read <uint>(7);
            bidder      = fields.Read <uint>(8);
            bid         = fields.Read <uint>(9);
            startbid    = fields.Read <uint>(10);
            deposit     = fields.Read <uint>(11);

            CreatureData auctioneerData = Global.ObjectMgr.GetCreatureData(auctioneer);

            if (auctioneerData == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has not a existing auctioneer (GUID : {1})", Id, auctioneer);
                return(false);
            }

            CreatureTemplate auctioneerInfo = Global.ObjectMgr.GetCreatureTemplate(auctioneerData.id);

            if (auctioneerInfo == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has not a existing auctioneer (GUID : {1} Entry: {2})", Id, auctioneer, auctioneerData.id);
                return(false);
            }

            factionTemplateId = auctioneerInfo.Faction;
            auctionHouseEntry = Global.AuctionMgr.GetAuctionHouseEntry(factionTemplateId);

            if (auctionHouseEntry == null)
            {
                Log.outError(LogFilter.Server, "AuctionEntry:LoadFromFieldList() - Auction {0} has auctioneer (GUID : {1} Entry: {2}) with wrong faction {3}", Id, auctioneer, auctioneerData.id, factionTemplateId);
                return(false);
            }

            return(true);
        }
Beispiel #5
0
        public static CreatureTemplate FindTemplate(Guid template_id, SearchType search_type)
        {
            CreatureTemplate creatureTemplate;
            CreatureTemplate creatureTemplate1;

            if (search_type == SearchType.External || search_type == SearchType.Global)
            {
                List <Library> .Enumerator enumerator = Session.Libraries.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        CreatureTemplate creatureTemplate2 = enumerator.Current.FindTemplate(template_id);
                        if (creatureTemplate2 == null)
                        {
                            continue;
                        }
                        creatureTemplate1 = creatureTemplate2;
                        return(creatureTemplate1);
                    }
                    if ((search_type == SearchType.Project || search_type == SearchType.Global) && Session.Project != null)
                    {
                        creatureTemplate = Session.Project.Library.FindTemplate(template_id);
                        if (creatureTemplate != null)
                        {
                            return(creatureTemplate);
                        }
                    }
                    return(null);
                }
                finally
                {
                    ((IDisposable)enumerator).Dispose();
                }
            }
            if ((search_type == SearchType.Project || search_type == SearchType.Global) && Session.Project != null)
            {
                creatureTemplate = Session.Project.Library.FindTemplate(template_id);
                if (creatureTemplate != null)
                {
                    return(creatureTemplate);
                }
            }
            return(null);
        }
Beispiel #6
0
        public static uint SelectPetDisplay(BattlePetSpeciesRecord speciesEntry)
        {
            CreatureTemplate creatureTemplate = Global.ObjectMgr.GetCreatureTemplate(speciesEntry.CreatureID);

            if (creatureTemplate != null)
            {
                if (!speciesEntry.GetFlags().HasFlag(BattlePetSpeciesFlags.RandomDisplay))
                {
                    CreatureModel creatureModel = creatureTemplate.GetRandomValidModel();
                    if (creatureModel != null)
                    {
                        return(creatureModel.CreatureDisplayID);
                    }
                }
            }

            return(0);
        }
Beispiel #7
0
        void HandleCreatureQuery(QueryCreature packet)
        {
            CreatureTemplate ci = Global.ObjectMgr.GetCreatureTemplate(packet.CreatureID);

            if (ci != null)
            {
                if (!WorldConfig.GetBoolValue(WorldCfg.CacheDataQueries))
                {
                    ci.InitializeQueryData();
                }

                QueryCreatureResponse queryCreatureResponse = ci.QueryData;

                LocaleConstant loc = GetSessionDbLocaleIndex();
                if (loc != LocaleConstant.enUS)
                {
                    CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(ci.Entry);
                    if (creatureLocale != null)
                    {
                        string name    = queryCreatureResponse.Stats.Name[0];
                        string nameAlt = queryCreatureResponse.Stats.NameAlt[0];

                        ObjectManager.GetLocaleString(creatureLocale.Name, loc, ref name);
                        ObjectManager.GetLocaleString(creatureLocale.NameAlt, loc, ref nameAlt);
                        ObjectManager.GetLocaleString(creatureLocale.Title, loc, ref queryCreatureResponse.Stats.Title);
                        ObjectManager.GetLocaleString(creatureLocale.TitleAlt, loc, ref queryCreatureResponse.Stats.TitleAlt);

                        queryCreatureResponse.Stats.Name[0]    = name;
                        queryCreatureResponse.Stats.NameAlt[0] = nameAlt;
                    }
                }

                SendPacket(queryCreatureResponse);
            }
            else
            {
                Log.outDebug(LogFilter.Network, $"WORLD: CMSG_QUERY_CREATURE - NO CREATURE INFO! (ENTRY: {packet.CreatureID})");

                QueryCreatureResponse response = new QueryCreatureResponse();
                response.CreatureID = packet.CreatureID;
                SendPacket(response);
            }
        }
        public DamageModListForm(CreatureTemplate template)
        {
            InitializeComponent();

            Application.Idle += new EventHandler(Application_Idle);

            fTemplate = template;

            fModifierTemplates = new List <DamageModifierTemplate>();
            foreach (DamageModifierTemplate mod in fTemplate.DamageModifierTemplates)
            {
                fModifierTemplates.Add(mod.Copy());
            }

            update_damage_list();

            ResistBox.Text     = fTemplate.Resist;
            VulnerableBox.Text = fTemplate.Vulnerable;
            ImmuneBox.Text     = fTemplate.Immune;
        }
Beispiel #9
0
        public CreatureTemplate CreateCreatureTemplate(object[] data)
        {
            long entry = long.Parse(data[0].ToString());
            string name = data[10].ToString();
            string subname = data[11].ToString();
            int minlevel = int.Parse(data[14].ToString());
            int maxlevel = int.Parse(data[15].ToString());
            float mindmg = float.Parse(data[24].ToString());
            float maxdmg = float.Parse(data[25].ToString());
            int[] modelids = new int[4];
            int health = int.Parse(data[17].ToString());
            int mana = int.Parse(data[18].ToString());

            for (int i = 0; i < modelids.Length; i++)
                modelids[i] = int.Parse(data[6 + i].ToString());

            CreatureTemplate ct = new CreatureTemplate(entry, name, subname, minlevel, maxlevel, mindmg, maxdmg, health, mana, modelids);

            return ct;
        }
 private void testCreatureViaEntry()
 {
     try
     {
         int entry           = 2;
         CreatureTemplate ct = con.GetCreature(core, entry);
         if (ct == null)
         {
             MessageBox.Show("No creature found with entry" + entry + "found !");
         }
         else
         {
             MessageBox.Show(ct.ToString());
         }
     }
     catch (MySqlException ex)
     {
         MessageBox.Show("Creature Via Entry Error: " + ex.Message);
     }
 }
        public override void AddedToContainer()
        {
            base.AddedToContainer();

            var builder = new FieldBuilder();

            builder.BuildSessionStart(this);

            var templateNameTextField = builder.AddTextField("Template Name: ");

            var creatureTypesComboBox = builder.AddComboBoxField("Creature Type: ");
            var creatureTypeList      = Globals.GetAllTypesDeriving(typeof(ICreature), Assembly.GetExecutingAssembly());

            creatureTypesComboBox.Items.AddRange(creatureTypeList.Select(s => s.Name));
            creatureTypesComboBox.Index = 0;

            builder.AddResizableButtonField("OK", delegate(object sender)
            {
                if (creatureTypesComboBox.Index == -1)
                {
                    AlertForm.ShowDialogue(Parent, null, "Select a creature type.");
                }
                else
                {
                    Result = new CreatureTemplate();
                    Result.TemplateName = templateNameTextField.Text;
                    Result.Creature     = (ICreature)Activator.CreateInstance(creatureTypeList[creatureTypesComboBox.Index]);

                    EditCreatureTemplateForm.ShowDialogue(Parent, Result);

                    Close();
                }
            });

            builder.BuildSessionEnd();

            X = (Parent.Width / 2) - (Width / 2);
            Y = (Parent.Height / 2) - (Height / 2);

            CanResizeFormVertically = false;
        }
Beispiel #12
0
        public static Library FindLibrary(CreatureTemplate ct)
        {
            if (ct == null)
            {
                return(null);
            }

            foreach (Library lib in Libraries)
            {
                foreach (CreatureTemplate item in lib.Templates)
                {
                    if (item == null)
                    {
                        continue;
                    }

                    if (item.ID == ct.ID)
                    {
                        return(lib);
                    }
                }
            }

            if (fProject != null)
            {
                foreach (CreatureTemplate item in fProject.Library.Templates)
                {
                    if (item == null)
                    {
                        continue;
                    }

                    if (item.ID == ct.ID)
                    {
                        return(fProject.Library);
                    }
                }
            }

            return(null);
        }
Beispiel #13
0
        void HandleScriptEffect(uint effIndex)
        {
            Creature targetCreature = GetHitCreature();

            if (targetCreature)
            {
                if (targetCreature.IsPet())
                {
                    CreatureTemplate ci = targetCreature.GetCreatureTemplate();
                    switch (ci.Family)
                    {
                    case CreatureFamily.Succubus:
                        targetCreature.CastSpell(targetCreature, SpellIds.DemonicEmpowermentSuccubus, true);
                        break;

                    case CreatureFamily.Voidwalker:
                    {
                        SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(SpellIds.DemonicEmpowermentVoidwalker, GetCastDifficulty());
                        int       hp        = (int)targetCreature.CountPctFromMaxHealth(GetCaster().CalculateSpellDamage(targetCreature, spellInfo, 0));
                        targetCreature.CastCustomSpell(targetCreature, SpellIds.DemonicEmpowermentVoidwalker, hp, 0, 0, true);
                        break;
                    }

                    case CreatureFamily.Felguard:
                        targetCreature.CastSpell(targetCreature, SpellIds.DemonicEmpowermentFelguard, true);
                        break;

                    case CreatureFamily.Felhunter:
                        targetCreature.CastSpell(targetCreature, SpellIds.DemonicEmpowermentFelhunter, true);
                        break;

                    case CreatureFamily.Imp:
                        targetCreature.CastSpell(targetCreature, SpellIds.DemonicEmpowermentImp, true);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
 private void OKBtn_Click(object sender, EventArgs e)
 {
     this.fCreature.Name     = this.NameBox.Text;
     this.fCreature.Level    = (int)this.LevelBox.Value;
     this.fCreature.Size     = (CreatureSize)this.SizeBox.SelectedItem;
     this.fCreature.Origin   = (CreatureOrigin)this.OriginBox.SelectedItem;
     this.fCreature.Type     = (CreatureType)this.TypeBox.SelectedItem;
     this.fCreature.Keywords = this.KeywordBox.Text;
     if (this.fCreature is NPC)
     {
         CreatureTemplate selectedItem = this.TemplateBox.SelectedItem as CreatureTemplate;
         (this.fCreature as NPC).TemplateID = (selectedItem != null ? selectedItem.ID : Guid.Empty);
         return;
     }
     this.fCreature.Role     = this.fRole;
     this.fCreature.Category = this.CatBox.Text;
     if (this.fCreature.Role is Minion)
     {
         this.fCreature.HP = 1;
     }
 }
Beispiel #15
0
        public CreatureTemplate GetCreature(Core c, int entry)
        {
            MySqlCommand command = Connection.CreateCommand();

            command.CommandText = c.GetCreatureSelect(entry);
            MySqlDataReader  Reader = command.ExecuteReader();
            CreatureTemplate ct     = null;

            while (Reader.Read())
            {
                object[] row = new object[Reader.FieldCount];
                for (int i = 0; i < Reader.FieldCount; i++)
                {
                    row[i] = Reader.GetValue(i);
                }
                ct = c.CreateCreatureTemplate(row);
                break;
            }
            Reader.Close();
            command.Dispose();
            return(ct);
        }
Beispiel #16
0
        void OnHitTarget(uint effIndex)
        {
            Unit     caster         = GetCaster();
            Creature targetCreature = GetHitCreature();

            if (targetCreature)
            {
                if (targetCreature.IsPet())
                {
                    CreatureTemplate ci = targetCreature.GetCreatureTemplate();
                    switch (ci.Family)
                    {
                    case CreatureFamily.Succubus:
                        caster.CastSpell(caster, SpellIds.DemonSoulSuccubus);
                        break;

                    case CreatureFamily.Voidwalker:
                        caster.CastSpell(caster, SpellIds.DemonSoulVoidwalker);
                        break;

                    case CreatureFamily.Felguard:
                        caster.CastSpell(caster, SpellIds.DemonSoulFelguard);
                        break;

                    case CreatureFamily.Felhunter:
                        caster.CastSpell(caster, SpellIds.DemonSoulFelhunter);
                        break;

                    case CreatureFamily.Imp:
                        caster.CastSpell(caster, SpellIds.DemonSoulImp);
                        break;

                    default:
                        break;
                    }
                }
            }
        }
Beispiel #17
0
        public static Dictionary <int, CreatureTemplate> LoadCreatureTemplates()
        {
            var dict = new Dictionary <int, CreatureTemplate>();

            using (var conn = new MySqlConnection(ConnectionString))
            {
                var command =
                    new MySqlCommand(
                        "SELECT entry,name,npcflag,unit_flags,dynamicflags,VehicleId,AIName,InhabitType,ScriptName,WDBVerified FROM creature_template WHERE VehicleId <>0",
                        conn);

                conn.Open();

                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var creatureTemplate = new CreatureTemplate
                        {
                            Id           = reader[0].ToUInt32(),
                            Name         = reader[1].ToString(),
                            NPCFlag      = reader[2].ToUInt32(),
                            UnitFlags    = reader[3].ToUInt32(),
                            DynamicFlags = reader[4].ToUInt32(),
                            VehicleId    = reader[5].ToUInt32(),
                            AIName       = reader[6].ToString(),
                            InhabitType  = reader[7].ToUInt32(),
                            ScriptName   = reader[8].ToString(),
                            WDBVerified  = reader[9].ToUInt32()
                        };

                        dict[creatureTemplate.Id.ToInt32()] = creatureTemplate;
                    }
                }
            }

            return(dict);
        }
            public CharacterInfo(SQLFields fields)
            {
                //         0                1                2                3                 4                  5                6                7
                // "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.skin, characters.face, characters.hairStyle, "
                //  8                     9                       10                         11                         12                         13
                // "characters.hairColor, characters.facialStyle, characters.customDisplay1, characters.customDisplay2, characters.customDisplay3, characters.level, "
                //  14               15              16                     17                     18
                // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
                //  19                    20                      21                   22                   23                     24                   25
                // "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, "
                //  26                     27               28                      29                            30                         31
                // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"

                Guid             = ObjectGuid.Create(HighGuid.Player, fields.Read <ulong>(0));
                Name             = fields.Read <string>(1);
                RaceId           = fields.Read <byte>(2);
                ClassId          = (Class)fields.Read <byte>(3);
                SexId            = fields.Read <byte>(4);
                SkinId           = fields.Read <byte>(5);
                FaceId           = fields.Read <byte>(6);
                HairStyle        = fields.Read <byte>(7);
                HairColor        = fields.Read <byte>(8);
                FacialHair       = fields.Read <byte>(9);
                CustomDisplay[0] = fields.Read <byte>(10);
                CustomDisplay[1] = fields.Read <byte>(11);
                CustomDisplay[2] = fields.Read <byte>(12);
                ExperienceLevel  = fields.Read <byte>(13);
                ZoneId           = fields.Read <uint>(14);
                MapId            = fields.Read <uint>(15);
                PreloadPos       = new Vector3(fields.Read <float>(16), fields.Read <float>(17), fields.Read <float>(18));

                ulong guildId = fields.Read <ulong>(19);

                if (guildId != 0)
                {
                    GuildGuid = ObjectGuid.Create(HighGuid.Guild, guildId);
                }

                PlayerFlags  playerFlags  = (PlayerFlags)fields.Read <uint>(20);
                AtLoginFlags atLoginFlags = (AtLoginFlags)fields.Read <ushort>(21);

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Resurrect))
                {
                    playerFlags &= ~PlayerFlags.Ghost;
                }

                if (playerFlags.HasAnyFlag(PlayerFlags.Ghost))
                {
                    Flags |= CharacterFlags.Ghost;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Rename))
                {
                    Flags |= CharacterFlags.Rename;
                }

                if (fields.Read <uint>(26) != 0)
                {
                    Flags |= CharacterFlags.LockedByBilling;
                }

                if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read <string>(31)))
                {
                    Flags |= CharacterFlags.Declined;
                }

                if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
                {
                    Flags2 = CharacterCustomizeFlags.Customize;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction))
                {
                    Flags2 = CharacterCustomizeFlags.Faction;
                }
                else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
                {
                    Flags2 = CharacterCustomizeFlags.Race;
                }

                Flags3     = 0;
                Flags4     = 0;
                FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);

                // show pet at selection character in character list only for non-ghost character
                if (!playerFlags.HasAnyFlag(PlayerFlags.Ghost) && (ClassId == Class.Warlock || ClassId == Class.Hunter || ClassId == Class.Deathknight))
                {
                    CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read <uint>(22));
                    if (creatureInfo != null)
                    {
                        PetCreatureDisplayId = fields.Read <uint>(23);
                        PetExperienceLevel   = fields.Read <ushort>(24);
                        PetCreatureFamilyId  = (uint)creatureInfo.Family;
                    }
                }

                BoostInProgress  = false;
                ProfessionIds[0] = 0;
                ProfessionIds[1] = 0;

                StringArguments equipment = new StringArguments(fields.Read <string>(25));

                ListPosition   = fields.Read <byte>(27);
                LastPlayedTime = fields.Read <uint>(28);

                var spec = Global.DB2Mgr.GetChrSpecializationByIndex(ClassId, fields.Read <byte>(29));

                if (spec != null)
                {
                    SpecID = (ushort)spec.Id;
                }

                LastLoginVersion = fields.Read <uint>(30);

                for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot)
                {
                    VisualItems[slot].InvType          = (byte)equipment.NextUInt32();
                    VisualItems[slot].DisplayId        = equipment.NextUInt32();
                    VisualItems[slot].DisplayEnchantId = equipment.NextUInt32();
                    VisualItems[slot].Subclass         = (byte)equipment.NextUInt32();
                }
            }
Beispiel #19
0
        public static void HandleCreatureQueryResponse(Packet packet)
        {
            var entry = packet.ReadEntry("Entry");

            CreatureTemplate creature = new CreatureTemplate
            {
                Entry = (uint)entry.Key
            };

            Bit hasData = packet.ReadBit();

            if (!hasData)
            {
                return; // nothing to do
            }
            packet.ResetBitReader();
            uint titleLen      = packet.ReadBits(11);
            uint titleAltLen   = packet.ReadBits(11);
            uint cursorNameLen = packet.ReadBits(6);

            creature.RacialLeader = packet.ReadBit("Leader");

            var stringLens = new int[4][];

            for (int i = 0; i < 4; i++)
            {
                stringLens[i]    = new int[2];
                stringLens[i][0] = (int)packet.ReadBits(11);
                stringLens[i][1] = (int)packet.ReadBits(11);
            }

            for (var i = 0; i < 4; ++i)
            {
                if (stringLens[i][0] > 1)
                {
                    string name = packet.ReadCString("Name");
                    if (i == 0)
                    {
                        creature.Name = name;
                    }
                }
                if (stringLens[i][1] > 1)
                {
                    string nameAlt = packet.ReadCString("NameAlt");
                    if (i == 0)
                    {
                        creature.FemaleName = nameAlt;
                    }
                }
            }

            creature.TypeFlags  = packet.ReadUInt32E <CreatureTypeFlag>("Flags");
            creature.TypeFlags2 = packet.ReadUInt32("Flags2");

            creature.Type   = packet.ReadInt32E <CreatureType>("CreatureType");
            creature.Family = packet.ReadInt32E <CreatureFamily>("CreatureFamily");
            creature.Rank   = packet.ReadInt32E <CreatureRank>("Classification");
            packet.ReadInt32("UnkBCC");

            creature.KillCredits = new uint?[2];
            for (int i = 0; i < 2; ++i)
            {
                creature.KillCredits[i] = (uint)packet.ReadInt32("ProxyCreatureID", i);
            }

            var displayIdCount = packet.ReadUInt32("DisplayIdCount");

            packet.ReadSingle("TotalProbability");

            for (var i = 0; i < displayIdCount; ++i)
            {
                CreatureTemplateModel model = new CreatureTemplateModel
                {
                    CreatureID = (uint)entry.Key,
                    Idx        = (uint)i
                };

                model.CreatureDisplayID = (uint)packet.ReadInt32("CreatureDisplayID", i);
                model.DisplayScale      = packet.ReadSingle("DisplayScale", i);
                model.Probability       = packet.ReadSingle("Probability", i);

                Storage.CreatureTemplateModels.Add(model, packet.TimeSpan);
            }

            creature.HealthModifier = packet.ReadSingle("HpMulti");
            creature.ManaModifier   = packet.ReadSingle("EnergyMulti");

            uint questItems = packet.ReadUInt32("QuestItems");

            creature.MovementID             = (uint)packet.ReadInt32("CreatureMovementInfoID");
            creature.HealthScalingExpansion = packet.ReadInt32E <ClientType>("HealthScalingExpansion");
            creature.RequiredExpansion      = packet.ReadInt32E <ClientType>("RequiredExpansion");
            creature.VignetteID             = (uint)packet.ReadInt32("VignetteID");
            creature.UnitClass = (uint)packet.ReadInt32E <Class>("UnitClass");
            packet.ReadInt32("CreatureDifficultyID");
            creature.WidgetSetID = packet.ReadInt32("WidgetSetID");
            creature.WidgetSetUnitConditionID = packet.ReadInt32("WidgetSetUnitConditionID");

            if (titleLen > 1)
            {
                creature.SubName = packet.ReadCString("Title");
            }

            if (titleAltLen > 1)
            {
                creature.TitleAlt = packet.ReadCString("TitleAlt");
            }

            if (cursorNameLen > 1)
            {
                creature.IconName = packet.ReadCString("CursorName");
            }

            for (uint i = 0; i < questItems; ++i)
            {
                CreatureTemplateQuestItem questItem = new CreatureTemplateQuestItem
                {
                    CreatureEntry = (uint)entry.Key,
                    Idx           = i,
                    ItemId        = (uint)packet.ReadInt32 <ItemId>("QuestItem", i)
                };

                Storage.CreatureTemplateQuestItems.Add(questItem, packet.TimeSpan);
            }

            packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE");

            Storage.CreatureTemplates.Add(creature.Entry.Value, creature, packet.TimeSpan);

            if (ClientLocale.PacketLocale != LocaleConstant.enUS)
            {
                CreatureTemplateLocale localesCreature = new CreatureTemplateLocale
                {
                    ID       = (uint)entry.Key,
                    Name     = creature.Name,
                    NameAlt  = creature.FemaleName,
                    Title    = creature.SubName,
                    TitleAlt = creature.TitleAlt
                };

                Storage.LocalesCreatures.Add(localesCreature, packet.TimeSpan);
            }

            ObjectName objectName = new ObjectName
            {
                ObjectType = StoreNameType.Unit,
                ID         = entry.Key,
                Name       = creature.Name
            };

            Storage.ObjectNames.Add(objectName, packet.TimeSpan);
        }
 private void MenuBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
 {
     if (e.Url.Scheme == "masterplan")
     {
         e.Cancel = true;
         if (e.Url.LocalPath == "new")
         {
             this.OnNewProjectClicked();
         }
         if (e.Url.LocalPath == "open")
         {
             this.OnOpenProjectClicked();
         }
         if (e.Url.LocalPath == "last")
         {
             this.OnOpenLastProjectClicked();
         }
         if (e.Url.LocalPath == "delve")
         {
             this.OnDelveClicked();
         }
         if (e.Url.LocalPath == "premade")
         {
             this.OnPremadeClicked();
         }
         if (e.Url.LocalPath == "genesis")
         {
             Creature creature = new Creature()
             {
                 Name = "New Creature"
             };
             (new CreatureBuilderForm(creature)).ShowDialog();
         }
         if (e.Url.LocalPath == "exodus")
         {
             CreatureTemplate creatureTemplate = new CreatureTemplate()
             {
                 Name = "New Template"
             };
             (new CreatureTemplateBuilderForm(creatureTemplate)).ShowDialog();
         }
         if (e.Url.LocalPath == "minos")
         {
             Trap trap = new Trap()
             {
                 Name = "New Trap"
             };
             trap.Attacks.Add(new TrapAttack());
             (new TrapBuilderForm(trap)).ShowDialog();
         }
         if (e.Url.LocalPath == "excalibur")
         {
             MagicItem magicItem = new MagicItem()
             {
                 Name = "New Magic Item"
             };
             (new MagicItemBuilderForm(magicItem)).ShowDialog();
         }
         if (e.Url.LocalPath == "indiana")
         {
             Artifact artifact = new Artifact()
             {
                 Name = "New Artifact"
             };
             (new ArtifactBuilderForm(artifact)).ShowDialog();
         }
         if (e.Url.LocalPath == "manual")
         {
             this.open_manual();
         }
     }
 }
Beispiel #21
0
        static bool Complete(StringArguments args, CommandHandler handler)
        {
            Player player = handler.GetSelectedPlayer();

            if (!player)
            {
                handler.SendSysMessage(CypherStrings.NoCharSelected);
                return(false);
            }

            // .quest complete #entry
            // number or [name] Shift-click form |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r
            string cId = handler.ExtractKeyFromLink(args, "Hquest");

            if (!uint.TryParse(cId, out uint entry))
            {
                return(false);
            }

            Quest quest = Global.ObjectMgr.GetQuestTemplate(entry);

            // If player doesn't have the quest
            if (quest == null || player.GetQuestStatus(entry) == QuestStatus.None || Global.DisableMgr.IsDisabledFor(DisableType.Quest, entry, null))
            {
                handler.SendSysMessage(CypherStrings.CommandQuestNotfound, entry);
                return(false);
            }

            for (int i = 0; i < quest.Objectives.Count; ++i)
            {
                QuestObjective obj = quest.Objectives[i];

                switch (obj.Type)
                {
                case QuestObjectiveType.Item:
                {
                    uint curItemCount        = player.GetItemCount((uint)obj.ObjectID, true);
                    List <ItemPosCount> dest = new();
                    InventoryResult     msg  = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, (uint)obj.ObjectID, (uint)(obj.Amount - curItemCount));
                    if (msg == InventoryResult.Ok)
                    {
                        Item item = player.StoreNewItem(dest, (uint)obj.ObjectID, true);
                        player.SendNewItem(item, (uint)(obj.Amount - curItemCount), true, false);
                    }
                    break;
                }

                case QuestObjectiveType.Monster:
                {
                    CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate((uint)obj.ObjectID);
                    if (creatureInfo != null)
                    {
                        for (int z = 0; z < obj.Amount; ++z)
                        {
                            player.KilledMonster(creatureInfo, ObjectGuid.Empty);
                        }
                    }
                    break;
                }

                case QuestObjectiveType.GameObject:
                {
                    for (int z = 0; z < obj.Amount; ++z)
                    {
                        player.KillCreditGO((uint)obj.ObjectID);
                    }
                    break;
                }

                case QuestObjectiveType.MinReputation:
                {
                    int curRep = player.GetReputationMgr().GetReputation((uint)obj.ObjectID);
                    if (curRep < obj.Amount)
                    {
                        FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(obj.ObjectID);
                        if (factionEntry != null)
                        {
                            player.GetReputationMgr().SetReputation(factionEntry, obj.Amount);
                        }
                    }
                    break;
                }

                case QuestObjectiveType.MaxReputation:
                {
                    int curRep = player.GetReputationMgr().GetReputation((uint)obj.ObjectID);
                    if (curRep > obj.Amount)
                    {
                        FactionRecord factionEntry = CliDB.FactionStorage.LookupByKey(obj.ObjectID);
                        if (factionEntry != null)
                        {
                            player.GetReputationMgr().SetReputation(factionEntry, obj.Amount);
                        }
                    }
                    break;
                }

                case QuestObjectiveType.Money:
                {
                    player.ModifyMoney(obj.Amount);
                    break;
                }

                case QuestObjectiveType.PlayerKills:
                {
                    for (var z = 0; z < obj.Amount; ++z)
                    {
                        player.KilledPlayerCredit(ObjectGuid.Empty);
                    }
                    break;
                }
                }
            }

            player.CompleteQuest(entry);
            return(true);
        }
Beispiel #22
0
        static bool HandleListCreatureCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
            string id = handler.ExtractKeyFromLink(args, "Hcreature_entry");

            if (string.IsNullOrEmpty(id))
            {
                return(false);
            }

            if (!uint.TryParse(id, out uint creatureId) || creatureId == 0)
            {
                handler.SendSysMessage(CypherStrings.CommandInvalidcreatureid, creatureId);
                return(false);
            }

            CreatureTemplate cInfo = Global.ObjectMgr.GetCreatureTemplate(creatureId);

            if (cInfo == null)
            {
                handler.SendSysMessage(CypherStrings.CommandInvalidcreatureid, creatureId);
                return(false);
            }

            if (!uint.TryParse(args.NextString(), out uint count))
            {
                count = 10;
            }

            if (count == 0)
            {
                return(false);
            }

            uint      creatureCount = 0;
            SQLResult result        = DB.World.Query("SELECT COUNT(guid) FROM creature WHERE id='{0}'", creatureId);

            if (!result.IsEmpty())
            {
                creatureCount = result.Read <uint>(0);
            }

            if (handler.GetSession() != null)
            {
                Player player = handler.GetSession().GetPlayer();
                result = DB.World.Query("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '{0}', 2) + POW(position_y - '{1}', 2) + POW(position_z - '{2}', 2)) AS order_ FROM creature WHERE id = '{3}' ORDER BY order_ ASC LIMIT {4}",
                                        player.GetPositionX(), player.GetPositionY(), player.GetPositionZ(), creatureId, count);
            }
            else
            {
                result = DB.World.Query("SELECT guid, position_x, position_y, position_z, map FROM creature WHERE id = '{0}' LIMIT {1}",
                                        creatureId, count);
            }

            if (!result.IsEmpty())
            {
                do
                {
                    ulong  guid      = result.Read <ulong>(0);
                    float  x         = result.Read <float>(1);
                    float  y         = result.Read <float>(2);
                    float  z         = result.Read <float>(3);
                    ushort mapId     = result.Read <ushort>(4);
                    bool   liveFound = false;

                    // Get map (only support base map from console)
                    Map thisMap;
                    if (handler.GetSession() != null)
                    {
                        thisMap = handler.GetSession().GetPlayer().GetMap();
                    }
                    else
                    {
                        thisMap = Global.MapMgr.FindBaseNonInstanceMap(mapId);
                    }

                    // If map found, try to find active version of this creature
                    if (thisMap)
                    {
                        var creBounds = thisMap.GetCreatureBySpawnIdStore().LookupByKey(guid);
                        if (!creBounds.Empty())
                        {
                            foreach (var creature in creBounds)
                            {
                                if (handler.GetSession())
                                {
                                    handler.SendSysMessage(CypherStrings.CreatureListChat, guid, guid, cInfo.Name, x, y, z, mapId, creature.GetGUID().ToString(), creature.IsAlive() ? "*" : " ");
                                }
                                else
                                {
                                    handler.SendSysMessage(CypherStrings.CreatureListConsole, guid, cInfo.Name, x, y, z, mapId, creature.GetGUID().ToString(), creature.IsAlive() ? "*" : " ");
                                }
                            }
                            liveFound = true;
                        }
                    }

                    if (!liveFound)
                    {
                        if (handler.GetSession())
                        {
                            handler.SendSysMessage(CypherStrings.CreatureListChat, guid, guid, cInfo.Name, x, y, z, mapId, "", "");
                        }
                        else
                        {
                            handler.SendSysMessage(CypherStrings.CreatureListConsole, guid, cInfo.Name, x, y, z, mapId, "", "");
                        }
                    }
                }while (result.NextRow());
            }

            handler.SendSysMessage(CypherStrings.CommandListcreaturemessage, creatureId, creatureCount);

            return(true);
        }
Beispiel #23
0
        public static void HandleCreatureQueryResponse(Packet packet)
        {
            PacketQueryCreatureResponse response = packet.Holder.QueryCreatureResponse = new PacketQueryCreatureResponse();
            var entry = packet.ReadEntry("Entry");

            if (entry.Value)
            {
                return;
            }

            CreatureTemplate creature = new CreatureTemplate
            {
                Entry = (uint)entry.Key
            };

            response.Entry   = (uint)entry.Key;
            response.HasData = true;

            var name = new string[4];

            for (int i = 0; i < name.Length; i++)
            {
                name[i] = packet.ReadCString("Name", i);
            }
            creature.Name = response.Name = name[0];

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914))
            {
                var femaleName = new string[4];
                for (int i = 0; i < femaleName.Length; i++)
                {
                    femaleName[i] = packet.ReadCString("Female Name", i);
                }
                creature.FemaleName = response.NameAlt = femaleName[0];
            }

            creature.SubName = response.Title = packet.ReadCString("Sub Name");

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_0_5_16048))
            {
                creature.TitleAlt = response.TitleAlt = packet.ReadCString("TitleAlt");
            }

            creature.IconName = response.IconName = packet.ReadCString("Icon Name");

            creature.TypeFlags = packet.ReadUInt32E <CreatureTypeFlag>("Type Flags");
            response.TypeFlags = (uint?)creature.TypeFlags ?? 0;

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_1_0_13914))                          // Might be earlier or later
            {
                creature.TypeFlags2 = response.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum
            }
            creature.Type   = packet.ReadInt32E <CreatureType>("Type");
            creature.Family = packet.ReadInt32E <CreatureFamily>("Family");
            creature.Rank   = packet.ReadInt32E <CreatureRank>("Rank");

            response.Type   = (int?)creature.Type ?? 0;
            response.Family = (int?)creature.Family ?? 0;
            response.Rank   = (int?)creature.Rank ?? 0;

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767))
            {
                creature.KillCredits = new uint?[2];
                for (int i = 0; i < 2; ++i)
                {
                    creature.KillCredits[i] = packet.ReadUInt32("Kill Credit", i);
                    response.KillCredits.Add(creature.KillCredits[i] ?? 0);
                }
            }
            else // Did they stop sending pet spell data after 3.1?
            {
                if (ClientVersion.RemovedInVersion(ClientType.WrathOfTheLichKing))
                {
                    packet.ReadInt32("Unk Int");
                }
                creature.PetSpellDataID = packet.ReadUInt32("Pet Spell Data Id");
            }

            creature.ModelIDs = new uint?[4];
            for (int i = 0; i < 4; i++)
            {
                creature.ModelIDs[i] = packet.ReadUInt32("Model ID", i);
                response.Models.Add(creature.ModelIDs[i] ?? 0);
            }

            creature.HealthModifier = response.HpMod = packet.ReadSingle("Modifier 1");
            creature.ManaModifier   = response.ManaMod = packet.ReadSingle("Modifier 2");

            creature.RacialLeader = response.Leader = packet.ReadBool("Racial Leader");

            int qItemCount = ClientVersion.AddedInVersion(ClientVersionBuild.V3_2_0_10192) ? 6 : 4;

            //TODO: Move to creature_questitem
            //creature.QuestItems = new uint[qItemCount];

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767))
            {
                for (int i = 0; i < qItemCount; i++)
                {
                    response.QuestItems.Add((uint)packet.ReadInt32 <ItemId>("Quest Item", i));
                }

                creature.MovementID = response.MovementId = packet.ReadUInt32("Movement ID");
            }

            if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164))
            {
                creature.RequiredExpansion = packet.ReadUInt32E <ClientType>("Expansion");
            }
            response.Expansion = (uint?)creature.RequiredExpansion ?? 0;

            packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE");

            Storage.CreatureTemplates.Add(creature.Entry.Value, creature, packet.TimeSpan);

            if (ClientLocale.PacketLocale != LocaleConstant.enUS)
            {
                CreatureTemplateLocale localesCreature = new CreatureTemplateLocale
                {
                    ID       = (uint)entry.Key,
                    Name     = creature.Name,
                    NameAlt  = creature.FemaleName,
                    Title    = creature.SubName,
                    TitleAlt = creature.TitleAlt
                };

                Storage.LocalesCreatures.Add(localesCreature, packet.TimeSpan);
            }

            ObjectName objectName = new ObjectName
            {
                ObjectType = StoreNameType.Unit,
                ID         = entry.Key,
                Name       = creature.Name
            };

            Storage.ObjectNames.Add(objectName, packet.TimeSpan);
        }
Beispiel #24
0
 // Called when the creature tries to spawn. Return false to block spawn and re-evaluate on next tick.
 public virtual bool CanSpawn(ulong spawnId, uint entry, CreatureTemplate baseTemplate, CreatureTemplate actTemplate, CreatureData cData, Map map)
 {
     return(true);
 }
Beispiel #25
0
        static bool HandlePetCreateCommand(StringArguments args, CommandHandler handler)
        {
            Player   player         = handler.GetSession().GetPlayer();
            Creature creatureTarget = handler.getSelectedCreature();

            if (!creatureTarget || creatureTarget.IsPet() || creatureTarget.IsTypeId(TypeId.Player))
            {
                handler.SendSysMessage(CypherStrings.SelectCreature);
                return(false);
            }

            CreatureTemplate creatureTemplate = creatureTarget.GetCreatureTemplate();

            // Creatures with family CreatureFamily.None crashes the server
            if (creatureTemplate.Family == CreatureFamily.None)
            {
                handler.SendSysMessage("This creature cannot be tamed. (Family id: 0).");
                return(false);
            }

            if (!player.GetPetGUID().IsEmpty())
            {
                handler.SendSysMessage("You already have a pet");
                return(false);
            }

            // Everything looks OK, create new pet
            Pet pet = new Pet(player, PetType.Hunter);

            if (!pet.CreateBaseAtCreature(creatureTarget))
            {
                handler.SendSysMessage("Error 1");
                return(false);
            }

            creatureTarget.setDeathState(DeathState.JustDied);
            creatureTarget.RemoveCorpse();
            creatureTarget.SetHealth(0); // just for nice GM-mode view

            pet.SetGuidValue(UnitFields.CreatedBy, player.GetGUID());
            pet.SetUInt32Value(UnitFields.FactionTemplate, player.getFaction());

            if (!pet.InitStatsForLevel(creatureTarget.getLevel()))
            {
                Log.outError(LogFilter.ChatSystem, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
                handler.SendSysMessage("Error 2");
                return(false);
            }

            // prepare visual effect for levelup
            pet.SetUInt32Value(UnitFields.Level, creatureTarget.getLevel() - 1);

            pet.GetCharmInfo().SetPetNumber(Global.ObjectMgr.GeneratePetNumber(), true);
            // this enables pet details window (Shift+P)
            pet.InitPetCreateSpells();
            pet.SetFullHealth();

            pet.GetMap().AddToMap(pet.ToCreature());

            // visual effect for levelup
            pet.SetUInt32Value(UnitFields.Level, creatureTarget.getLevel());

            player.SetMinion(pet, true);
            pet.SavePetToDB(PetSaveMode.AsCurrent);
            player.PetSpellInitialize();

            return(true);
        }
Beispiel #26
0
        public static void HandleCreatureQueryResponse(Packet packet)
        {
            CreatureTemplate creature = new CreatureTemplate();
            Bit hasData = packet.ReadBit();

            if (!hasData)
            {
                return; // nothing to do
            }
            creature.RacialLeader = packet.ReadBit("Racial Leader");

            uint bits2C     = packet.ReadBits(6);
            uint bits24     = packet.ReadBits(11);
            uint qItemCount = packet.ReadBits(22);

            var stringLens = new int[4][];

            for (int i = 0; i < 4; i++)
            {
                stringLens[i]    = new int[2];
                stringLens[i][1] = (int)packet.ReadBits(11);
                stringLens[i][0] = (int)packet.ReadBits(11);
            }

            int bits1C = (int)packet.ReadBits(11);

            creature.ModelIDs    = new uint?[4];
            creature.KillCredits = new uint?[2];

            creature.ModelIDs[1]    = packet.ReadUInt32("Display ID 1");
            creature.KillCredits[1] = packet.ReadUInt32("Kill Credit 2");
            creature.Type           = packet.ReadInt32E <CreatureType>("Type");

            var name       = new string[4];
            var femaleName = new string[4];

            for (int i = 0; i < 4; ++i)
            {
                if (stringLens[i][0] > 1)
                {
                    name[i] = packet.ReadCString("Name", i);
                }
                if (stringLens[i][1] > 1)
                {
                    femaleName[i] = packet.ReadCString("Female Name", i);
                }
            }
            creature.Name       = name[0];
            creature.FemaleName = femaleName[0];

            creature.ManaModifier = packet.ReadSingle("Modifier 2");

            creature.TypeFlags  = packet.ReadUInt32E <CreatureTypeFlag>("Type Flags");
            creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum

            creature.Family         = packet.ReadInt32E <CreatureFamily>("Family");
            creature.KillCredits[0] = packet.ReadUInt32("Kill Credit 1");
            creature.ModelIDs[3]    = packet.ReadUInt32("Display ID 3");

            //TODO: move to creature_questitems
            //creature.QuestItems = new uint[qItemCount];
            for (int i = 0; i < qItemCount; ++i)
            {
                /*creature.QuestItems[i] = (uint)*/ packet.ReadInt32 <ItemId>("Quest Item", i);
            }

            creature.HealthModifier = packet.ReadSingle("Modifier 1");


            if (bits24 > 1)
            {
                packet.ReadCString("String1C");
            }

            creature.MovementID        = packet.ReadUInt32("Movement ID");
            creature.RequiredExpansion = packet.ReadUInt32E <ClientType>("Expansion");

            if (bits2C > 1)
            {
                creature.IconName = packet.ReadCString("Icon Name");
            }

            creature.ModelIDs[2] = packet.ReadUInt32("Display ID 2");
            creature.ModelIDs[0] = packet.ReadUInt32("Display ID 0");
            creature.Rank        = packet.ReadInt32E <CreatureRank>("Rank");

            if (bits1C > 1)
            {
                creature.SubName = packet.ReadCString("Sub Name");
            }

            var entry = packet.ReadEntry("Entry");

            creature.Entry = (uint)entry.Key;

            packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE");

            Storage.CreatureTemplates.Add(creature, packet.TimeSpan);

            ObjectName objectName = new ObjectName
            {
                ObjectType = ObjectType.Unit,
                ID         = entry.Key,
                Name       = creature.Name
            };

            Storage.ObjectNames.Add(objectName, packet.TimeSpan);
        }
Beispiel #27
0
        void HandleCreatureQuery(QueryCreature packet)
        {
            QueryCreatureResponse response = new QueryCreatureResponse();

            response.CreatureID = packet.CreatureID;

            CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(packet.CreatureID);

            if (creatureInfo != null)
            {
                response.Allow = true;

                CreatureStats stats = new CreatureStats();

                stats.Leader = creatureInfo.RacialLeader;

                string name    = creatureInfo.Name;
                string nameAlt = creatureInfo.FemaleName;

                stats.Flags[0] = (uint)creatureInfo.TypeFlags;
                stats.Flags[1] = creatureInfo.TypeFlags2;

                stats.CreatureType   = (int)creatureInfo.CreatureType;
                stats.CreatureFamily = (int)creatureInfo.Family;
                stats.Classification = (int)creatureInfo.Rank;

                for (uint i = 0; i < SharedConst.MaxCreatureKillCredit; ++i)
                {
                    stats.ProxyCreatureID[i] = creatureInfo.KillCredit[i];
                }

                stats.CreatureDisplayID[0] = creatureInfo.ModelId1;
                stats.CreatureDisplayID[1] = creatureInfo.ModelId2;
                stats.CreatureDisplayID[2] = creatureInfo.ModelId3;
                stats.CreatureDisplayID[3] = creatureInfo.ModelId4;

                stats.HpMulti     = creatureInfo.ModHealth;
                stats.EnergyMulti = creatureInfo.ModMana;

                stats.CreatureMovementInfoID = creatureInfo.MovementId;
                stats.RequiredExpansion      = creatureInfo.RequiredExpansion;
                stats.HealthScalingExpansion = creatureInfo.HealthScalingExpansion;
                stats.VignetteID             = creatureInfo.VignetteID;

                stats.Title      = creatureInfo.SubName;
                stats.TitleAlt   = creatureInfo.TitleAlt;
                stats.CursorName = creatureInfo.IconName;

                var items = Global.ObjectMgr.GetCreatureQuestItemList(packet.CreatureID);
                foreach (uint item in items)
                {
                    stats.QuestItems.Add(item);
                }

                LocaleConstant localeConstant = GetSessionDbLocaleIndex();
                if (localeConstant != LocaleConstant.enUS)
                {
                    CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(packet.CreatureID);
                    if (creatureLocale != null)
                    {
                        ObjectManager.GetLocaleString(creatureLocale.Name, localeConstant, ref name);
                        ObjectManager.GetLocaleString(creatureLocale.NameAlt, localeConstant, ref nameAlt);
                        ObjectManager.GetLocaleString(creatureLocale.Title, localeConstant, ref stats.Title);
                        ObjectManager.GetLocaleString(creatureLocale.TitleAlt, localeConstant, ref stats.TitleAlt);
                    }
                }
                stats.Name[0]    = name;
                stats.NameAlt[0] = nameAlt;

                response.Stats = stats;
            }

            SendPacket(response);
        }
Beispiel #28
0
        public static void HandleCreatureQueryResponse(Packet packet)
        {
            PacketQueryCreatureResponse response = packet.Holder.QueryCreatureResponse = new PacketQueryCreatureResponse();
            var entry = packet.ReadEntry("Entry"); // +5

            CreatureTemplate creature = new CreatureTemplate
            {
                Entry = (uint)entry.Key
            };

            response.Entry = (uint)entry.Key;

            Bit hasData = packet.ReadBit(); //+16

            response.HasData = hasData;
            if (!hasData)
            {
                return; // nothing to do
            }
            creature.ModelIDs    = new uint?[4];
            creature.KillCredits = new uint?[2];

            uint bits24     = packet.ReadBits(11);      //+7
            uint qItemCount = packet.ReadBits(22);      //+72
            int  bits1C     = (int)packet.ReadBits(11); //+9

            var stringLens = new int[4][];

            for (int i = 0; i < 4; i++)
            {
                stringLens[i]    = new int[2];
                stringLens[i][0] = (int)packet.ReadBits(11);
                stringLens[i][1] = (int)packet.ReadBits(11);
            }

            creature.RacialLeader = packet.ReadBit("Racial Leader"); //+68
            uint bits2C = packet.ReadBits(6);                        //+136

            if (bits1C > 1)
            {
                creature.TitleAlt = packet.ReadCString("TitleAlt");
            }

            creature.KillCredits[0]    = packet.ReadUInt32();                          //+27
            creature.ModelIDs[3]       = packet.ReadUInt32();                          //+32
            creature.ModelIDs[2]       = packet.ReadUInt32();                          //+31
            creature.RequiredExpansion = packet.ReadUInt32E <ClientType>("Expansion"); //+24
            creature.Type           = packet.ReadInt32E <CreatureType>("Type");        //+12
            creature.HealthModifier = packet.ReadSingle("Modifier 1");                 //+15

            creature.TypeFlags  = packet.ReadUInt32E <CreatureTypeFlag>("Type Flags");
            creature.TypeFlags2 = packet.ReadUInt32("Creature Type Flags 2"); // Missing enum

            creature.Rank       = packet.ReadInt32E <CreatureRank>("Rank");   //+14
            creature.MovementID = packet.ReadUInt32("Movement ID");           //+23

            var name       = new string[4];
            var femaleName = new string[4];

            for (int i = 0; i < 4; ++i)
            {
                if (stringLens[i][1] > 1)
                {
                    femaleName[i] = packet.ReadCString("Female Name", i);
                }
                if (stringLens[i][0] > 1)
                {
                    name[i] = packet.ReadCString("Name", i);
                }
            }
            creature.Name       = name[0];
            creature.FemaleName = femaleName[0];

            if (bits24 > 1)
            {
                creature.SubName = packet.ReadCString("Sub Name");
            }

            creature.ModelIDs[0] = packet.ReadUInt32(); //+29
            creature.ModelIDs[1] = packet.ReadUInt32(); //+30

            if (bits2C > 1)
            {
                creature.IconName = packet.ReadCString("Icon Name"); //+100
            }
            //creature.QuestItems = new uint[qItemCount];
            for (int i = 0; i < qItemCount; ++i)
            {
                response.QuestItems.Add((uint)packet.ReadInt32 <ItemId>("Quest Item", i)); //+72
            }
            creature.KillCredits[1] = packet.ReadUInt32();                                 //+28
            creature.ManaModifier   = packet.ReadSingle("Modifier 2");                     //+16
            creature.Family         = packet.ReadInt32E <CreatureFamily>("Family");        //+13

            for (int i = 0; i < 4; ++i)
            {
                response.Models.Add(packet.AddValue("Display ID", creature.ModelIDs[i], i) ?? 0);
            }
            for (int i = 0; i < 2; ++i)
            {
                response.KillCredits.Add(packet.AddValue("Kill Credit", creature.KillCredits[i], i) ?? 0);
            }

            packet.AddSniffData(StoreNameType.Unit, entry.Key, "QUERY_RESPONSE");

            Storage.CreatureTemplates.Add(creature.Entry.Value, creature, packet.TimeSpan);

            if (ClientLocale.PacketLocale != LocaleConstant.enUS)
            {
                CreatureTemplateLocale localesCreature = new CreatureTemplateLocale
                {
                    ID       = (uint)entry.Key,
                    Name     = creature.Name,
                    NameAlt  = creature.FemaleName,
                    Title    = creature.SubName,
                    TitleAlt = creature.TitleAlt
                };

                Storage.LocalesCreatures.Add(localesCreature, packet.TimeSpan);
            }

            ObjectName objectName = new ObjectName
            {
                ObjectType = StoreNameType.Unit,
                ID         = entry.Key,
                Name       = creature.Name
            };

            Storage.ObjectNames.Add(objectName, packet.TimeSpan);

            response.Name       = creature.Name;
            response.NameAlt    = creature.FemaleName;
            response.Title      = creature.SubName;
            response.TitleAlt   = creature.TitleAlt;
            response.IconName   = creature.IconName;
            response.TypeFlags  = (uint?)creature.TypeFlags ?? 0;
            response.TypeFlags2 = creature.TypeFlags2 ?? 0;
            response.Type       = (int?)creature.Type ?? 0;
            response.Family     = (int?)creature.Family ?? 0;
            response.Rank       = (int?)creature.Rank ?? 0;
            response.HpMod      = creature.HealthModifier ?? 1.0f;
            response.ManaMod    = creature.ManaModifier ?? 1.0f;
            response.Leader     = creature.RacialLeader ?? false;
            response.Expansion  = (uint?)creature.RequiredExpansion ?? 0;
            response.MovementId = creature.MovementID ?? 0;
        }
Beispiel #29
0
        static bool HandleListCreatureCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            // number or [name] Shift-click form |color|Hcreature_entry:creature_id|h[name]|h|r
            string id = handler.extractKeyFromLink(args, "Hcreature_entry");

            if (string.IsNullOrEmpty(id))
            {
                return(false);
            }

            uint creatureId = uint.Parse(id);

            if (creatureId == 0)
            {
                handler.SendSysMessage(CypherStrings.CommandInvalidcreatureid, creatureId);
                return(false);
            }

            CreatureTemplate cInfo = Global.ObjectMgr.GetCreatureTemplate(creatureId);

            if (cInfo == null)
            {
                handler.SendSysMessage(CypherStrings.CommandInvalidcreatureid, creatureId);
                return(false);
            }

            string countStr = args.NextString();
            uint   count    = !string.IsNullOrEmpty(countStr) ? uint.Parse(countStr) : 10;

            if (count == 0)
            {
                return(false);
            }

            uint      creatureCount = 0;
            SQLResult result        = DB.World.Query("SELECT COUNT(guid) FROM creature WHERE id='{0}'", creatureId);

            if (!result.IsEmpty())
            {
                creatureCount = result.Read <uint>(0);
            }

            if (handler.GetSession() != null)
            {
                Player player = handler.GetSession().GetPlayer();
                result = DB.World.Query("SELECT guid, position_x, position_y, position_z, map, (POW(position_x - '{0}', 2) + POW(position_y - '{1}', 2) + POW(position_z - '{2}', 2)) AS order_ FROM creature WHERE id = '{3}' ORDER BY order_ ASC LIMIT {4}",
                                        player.GetPositionX(), player.GetPositionY(), player.GetPositionZ(), creatureId, count);
            }
            else
            {
                result = DB.World.Query("SELECT guid, position_x, position_y, position_z, map FROM creature WHERE id = '{0}' LIMIT {1}",
                                        creatureId, count);
            }

            if (!result.IsEmpty())
            {
                do
                {
                    ulong  guid  = result.Read <ulong>(0);
                    float  x     = result.Read <float>(1);
                    float  y     = result.Read <float>(2);
                    float  z     = result.Read <float>(3);
                    ushort mapId = result.Read <ushort>(4);

                    if (handler.GetSession() != null)
                    {
                        handler.SendSysMessage(CypherStrings.CreatureListChat, guid, guid, cInfo.Name, x, y, z, mapId);
                    }
                    else
                    {
                        handler.SendSysMessage(CypherStrings.CreatureListConsole, guid, cInfo.Name, x, y, z, mapId);
                    }
                }while (result.NextRow());
            }

            handler.SendSysMessage(CypherStrings.CommandListcreaturemessage, creatureId, creatureCount);

            return(true);
        }
Beispiel #30
0
 public CreatureTemplateBuilderForm(CreatureTemplate template)
 {
     this.InitializeComponent();
     this.fTemplate = template.Copy();
     this.update_statblock();
 }
        public CreatureProfileForm(ICreature creature)
        {
            this.InitializeComponent();
            this.fCreature = creature;
            this.fRole     = creature.Role;
            foreach (CreatureSize value in Enum.GetValues(typeof(CreatureSize)))
            {
                this.SizeBox.Items.Add(value);
            }
            foreach (CreatureOrigin creatureOrigin in Enum.GetValues(typeof(CreatureOrigin)))
            {
                this.OriginBox.Items.Add(creatureOrigin);
            }
            foreach (CreatureType creatureType in Enum.GetValues(typeof(CreatureType)))
            {
                this.TypeBox.Items.Add(creatureType);
            }
            if (this.fCreature is NPC)
            {
                List <Guid> guids = new List <Guid>();
                foreach (CreatureTemplate template in Session.Templates)
                {
                    if (template.Type != CreatureTemplateType.Class)
                    {
                        continue;
                    }
                    guids.Add(template.ID);
                }
                foreach (CreatureTemplate creatureTemplate in Session.Project.Library.Templates)
                {
                    if (creatureTemplate.Type != CreatureTemplateType.Class || guids.Contains(creatureTemplate.ID))
                    {
                        continue;
                    }
                    guids.Add(creatureTemplate.ID);
                }
                foreach (Guid guid in guids)
                {
                    CreatureTemplate creatureTemplate1 = Session.FindTemplate(guid, SearchType.Global);
                    this.TemplateBox.Items.Add(creatureTemplate1);
                }
                this.RoleLbl.Enabled = false;
                this.RoleBtn.Enabled = false;
                this.CatLbl.Enabled  = false;
                this.CatBox.Enabled  = false;
            }
            else if (!(this.fCreature is CustomCreature))
            {
                this.TemplateLbl.Enabled = false;
                this.TemplateBox.Enabled = false;
                List <string> strs = new List <string>();
                foreach (Masterplan.Data.Creature creature1 in Session.Creatures)
                {
                    string category = creature1.Category;
                    if (!(category != "") || strs.Contains(category))
                    {
                        continue;
                    }
                    strs.Add(category);
                }
                foreach (string str in strs)
                {
                    this.CatBox.Items.Add(str);
                }
            }
            else
            {
                this.TemplateLbl.Enabled = false;
                this.TemplateBox.Enabled = false;
                this.CatLbl.Enabled      = false;
                this.CatBox.Enabled      = false;
            }
            this.NameBox.Text           = this.fCreature.Name;
            this.LevelBox.Value         = this.fCreature.Level;
            this.SizeBox.SelectedItem   = this.fCreature.Size;
            this.OriginBox.SelectedItem = this.fCreature.Origin;
            this.TypeBox.SelectedItem   = this.fCreature.Type;
            this.KeywordBox.Text        = this.fCreature.Keywords;
            if (!(this.fCreature is NPC))
            {
                if (this.fCreature is CustomCreature)
                {
                    this.CatBox.Text = "Custom Creature";
                    return;
                }
                this.RoleBtn.Text = this.fCreature.Role.ToString();
                this.CatBox.Text  = this.fCreature.Category;
                return;
            }
            NPC nPC = this.fCreature as NPC;
            CreatureTemplate creatureTemplate2 = Session.FindTemplate(nPC.TemplateID, SearchType.Global);

            if (creatureTemplate2 == null)
            {
                this.TemplateBox.SelectedIndex = 0;
            }
            else
            {
                this.TemplateBox.SelectedItem = creatureTemplate2;
            }
            this.CatBox.Text = "NPC";
        }