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)); }
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; }
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); }
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); }
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); }
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; }
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; }
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); }
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; } }
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); }
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; } } } }
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(); } }
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(); } } }
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); }
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); }
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); }
// 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); }
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); }
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); }
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); }
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; }
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); }
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"; }