public static void WriteMissingItemIds() { Tools.StartRealm(); var items = new Dictionary <uint, Spell>(500); foreach (var spell in SpellHandler.ById) { if (spell != null) { spell.ForeachEffect(effect => { if (effect.EffectType == SpellEffectType.CreateItem && effect.ItemId != 0) { if (ItemMgr.GetTemplate(effect.ItemId) == null) { items[effect.ItemId] = spell; } } }); } } using (var writer = new StreamWriter(ToolConfig.OutputDir + "MissingSpellItems.txt", false)) { foreach (var pair in items) { writer.WriteLine("{0} ({1})", pair.Key, pair.Value); } } }
public Item EnsureItem(ItemId item, int amount) { Setup.EnsureBasicSetup(); ItemMgr.LoadAll(); return(EnsureItem(ItemMgr.GetTemplate(item), amount)); }
/// <summary>Loads the quest templates.</summary> /// <returns></returns> public static bool LoadAll() { if (!QuestMgr.Loaded) { QuestMgr.Templates = new QuestTemplate[30000]; ContentMgr.Load <QuestTemplate>(); ContentMgr.Load <QuestPOI>(); ContentMgr.Load <QuestPOIPoints>(); QuestMgr.CreateQuestRelationGraph(); QuestMgr.EnsureCharacterQuestsLoaded(); QuestMgr.AddSpellCastObjectives(); if (ItemMgr.Loaded) { ItemMgr.EnsureItemQuestRelations(); } foreach (QuestTemplate template1 in QuestMgr.Templates) { if (template1 != null) { ItemTemplate template2 = ItemMgr.GetTemplate(template1.SrcItemId); if (template2 != null && template1.SrcItemId != (Asda2ItemId)0 && !template1.Starters.Contains((IQuestHolderEntry)template2)) { template1.ProvidedItems.Add(new Asda2ItemStackDescription(template1.SrcItemId, 1)); } } } QuestMgr.Loaded = true; QuestMgr.log.Debug("{0} Quests loaded.", QuestMgr._questCount); } return(true); }
protected override void Remove(bool cancelled) { var procFlags = m_aura.Spell.ProcTriggerFlags; var owner = m_aura.Auras.Owner; if (!owner.IsAlive && (!procFlags.HasFlag(ProcTriggerFlags.KilledTargetThatYieldsExperienceOrHonor) || owner.YieldsXpOrHonor)) { var item = ItemMgr.GetTemplate(SpellEffect.ItemId); if (item == null) { log.Warn("Spell {0} referred to invalid Item: {1} ({2})", m_aura.Spell, (ItemId)SpellEffect.ItemId, SpellEffect.ItemId); } else { var caster = m_aura.CasterUnit; if (caster != null && (caster = caster.Master as Character) != null) { var amount = Math.Max(1, EffectValue); ((Character)caster).Inventory.TryAdd(item, ref amount); } } } }
public override void Convert(byte[] rawData) { var raceClassGender = GetUInt32(rawData, 1); var race = (RaceId)(raceClassGender & 0xFF); var clss = (ClassId)((raceClassGender & 0xFF00) >> 8); var gender = (GenderType)((raceClassGender & 0xFF0000) >> 16); var archetype = ArchetypeMgr.GetArchetype(race, clss); if (archetype == null) { return; } var items = archetype.GetInitialItems(gender); for (var i = 2; i <= 25; i++) { var itemId = GetInt32(rawData, i); if (itemId > 0) { var templ = ItemMgr.GetTemplate((ItemId)itemId); if (templ == null) { LogManager.GetCurrentClassLogger().Warn("Missing initial Item in DB: " + itemId + " (" + (uint)itemId + ")"); } else { if (templ.IsStackable) { var index = items.FindIndex(stack => stack.Template.Id == itemId); if (index > -1) { items[index] = new ItemStack { Template = templ, Amount = items[index].Amount + 1 }; } else { items.Add(new ItemStack { Template = templ, Amount = templ.IsAmmo ? templ.MaxAmount : 1 }); } } else { items.Add(new ItemStack { Template = templ, Amount = 1 }); } } } } }
public override SpellFailedReason InitializeTarget(WorldObject target) { var templId = Effect.ItemId; templ = ItemMgr.GetTemplate(templId); amount = CalcEffectValue(); if (templ == null) { log.Warn("Spell {0} referred to invalid Item {1}", Effect.Spell, templId); return(SpellFailedReason.ItemNotFound); } // find a free slot // TODO: Add & use HoldFreeSlotCheck instead, so slot won't get occupied InventoryError error; slotId = ((Character)target).Inventory.FindFreeSlotCheck(templ, amount, out error); if (error != InventoryError.OK) { ItemHandler.SendInventoryError((Character)target, error); return(SpellFailedReason.DontReport); } return(SpellFailedReason.Ok); }
public void FinalizeDataHolder() { Template = ItemMgr.GetTemplate(ItemId); if (Template == null) { ContentMgr.OnInvalidDBData("{0} has invalid ItemId: {1} ({2})", this, ItemId, (int)ItemId); } else { var list = NPCMgr.GetOrCreateVendorList(VendorId); // set defaults if (StockAmount < 0) { StockAmount = Template.StockAmount; } if (StockRefillDelay < 0) { StockRefillDelay = Template.StockRefillDelay; } remainingStackAmount = StockAmount; list.Add(this); } }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { var mods = trigger.Text.NextModifiers(); var entry = trigger.Text.NextEnum(ItemId.None); var templ = ItemMgr.GetTemplate(entry); if (templ == null) { trigger.Reply("Invalid ItemId."); return; } if (templ.IsCharter) { trigger.Reply("Charters cannot be added by command."); return; } var amount = trigger.Text.NextInt(1); var stacks = trigger.Text.NextUInt(1); var ensure = mods.Contains("e"); var autoEquip = mods.Contains("a"); for (var i = 0; i < stacks; i++) { if (!AddItem((Character)trigger.Args.Target, templ, amount, autoEquip, ensure)) { break; } } //trigger.Reply("{0}/{1} stacks of {2} created{3}", x, stacks, templ, err == InventoryError.OK ? "." : ": " + err); }
public override void Convert(byte[] rawData) { uint uint32 = DBCRecordConverter.GetUInt32(rawData, 1); RaceId race = (RaceId)((int)uint32 & (int)byte.MaxValue); ClassId clssId = (ClassId)((uint32 & 65280U) >> 8); GenderType gender = (GenderType)((uint32 & 16711680U) >> 16); Archetype archetype = ArchetypeMgr.GetArchetype(race, clssId); if (archetype == null) { return; } List <ItemStack> initialItems = archetype.GetInitialItems(gender); for (int field = 2; field <= 25; ++field) { int itemId = DBCRecordConverter.GetInt32(rawData, field); if (itemId > 0) { ItemTemplate template = ItemMgr.GetTemplate((Asda2ItemId)itemId); if (template == null) { LogManager.GetCurrentClassLogger() .Warn("Missing initial Item in DB: " + (object)itemId + " (" + (object)(uint)itemId + ")"); } else if (template.IsStackable) { int index = initialItems.FindIndex((Predicate <ItemStack>)(stack => (long)stack.Template.Id == (long)itemId)); if (index > -1) { initialItems[index] = new ItemStack() { Template = template, Amount = initialItems[index].Amount + 1 } } ; else { initialItems.Add(new ItemStack() { Template = template, Amount = template.IsAmmo ? template.MaxAmount : 1 }); } } else { initialItems.Add(new ItemStack() { Template = template, Amount = 1 }); } } } }
public static Item CreateItem(uint templateId, Character owner, int amount) { ItemTemplate template = ItemMgr.GetTemplate(templateId); if (template != null) { return(CreateItem(template, owner, amount)); } return(null); }
public ItemRecord AddItem(Asda2ItemId item) { ItemTemplate template = ItemMgr.GetTemplate(item); if (template == null) { return(null); } return(AddItem(template)); }
public static void HandleItemSingleQuery(RealmClient client, RealmPacketIn packet) { uint itemId = packet.ReadUInt32(); ItemTemplate item = ItemMgr.GetTemplate(itemId); if (item == null) { return; } SendItemQueryResponse(client, item); }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { var text = trigger.Text; var mod = text.NextModifiers(); var items = new List <ItemRecord>(); var cod = 0u; var money = 0u; if (mod.Contains("i")) { var itemId = trigger.Text.NextEnum(ItemId.None); var template = ItemMgr.GetTemplate(itemId); if (template == null) { trigger.Reply("Invalid ItemId."); return; } var item = ItemRecord.CreateRecord(template); items.Add(item); item.SaveLater(); } if (mod.Contains("c")) { cod = text.NextUInt(); } var recipientName = trigger.Text.NextWord(); if (recipientName.Length == 0) { trigger.Reply("Could not send mail - Unknown Recipient: " + recipientName); return; } var subject = trigger.Text.NextWord(","); var msg = trigger.Text.Remainder; var err = MailMgr.SendMail(recipientName, subject, msg, MailStationary.GM, items, money, cod, trigger.Args.User); if (err == MailError.OK) { trigger.Reply("Done."); } else { trigger.Reply("Could not send mail: " + err); } }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { StringStream text = trigger.Text; string str = text.NextModifiers(); List <ItemRecord> itemRecordList = new List <ItemRecord>(); uint cod = 0; uint money = 0; if (str.Contains("i")) { ItemTemplate template = ItemMgr.GetTemplate(trigger.Text.NextEnum(Asda2ItemId.None)); if (template == null) { trigger.Reply("Invalid ItemId."); return; } ItemRecord record = ItemRecord.CreateRecord(template); itemRecordList.Add(record); record.SaveLater(); } if (str.Contains("c")) { cod = text.NextUInt(); } string recipientName = trigger.Text.NextWord(); if (recipientName.Length == 0) { trigger.Reply("Could not send mail - Unknown Recipient: " + recipientName); } else { string subject = trigger.Text.NextWord(","); string remainder = trigger.Text.Remainder; MailError mailError = MailMgr.SendMail(recipientName, subject, remainder, MailStationary.GM, itemRecordList, money, cod, trigger.Args.User); if (mailError == MailError.OK) { trigger.Reply("Done."); } else { trigger.Reply("Could not send mail: " + mailError); } } }
/// <summary> /// Sets this NPC's equipment to the given entry /// </summary> public void SetEquipment(NPCEquipmentEntry equipment) { for (var i = 0; i < equipment.ItemIds.Length; i++) { var itemId = equipment.ItemIds[i]; if (itemId != 0) { var item = ItemMgr.GetTemplate(itemId); if (item != null) { SheathType = item.SheathType; // TODO: How to use the sheath type of all items? } SetUInt32(UnitFields.VIRTUAL_ITEM_SLOT_ID + i, (uint)itemId); } } }
/// <summary> /// Loads the quest templates. /// </summary> /// <returns></returns> public static bool LoadAll() { if (!Loaded) { new DBCReader <QuestXpConverter>(RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_QUESTXP)); new DBCReader <QuestRewRepConverter>(RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_QUESTFACTIONREWARD)); new DBCReader <QuestHonorInfoConverter>(RealmServerConfiguration.GetDBCFile(WCellConstants.DBC_TEAMCONTRIBUTIONPOINTS)); Templates = new QuestTemplate[30000]; ContentMgr.Load <QuestTemplate>(); ContentMgr.Load <QuestPOI>(); ContentMgr.Load <QuestPOIPoints>(); CreateQuestRelationGraph(); EnsureCharacterQuestsLoaded(); AddSpellCastObjectives(); // add Item quest starters & add collect quests to corresponding items if (ItemMgr.Loaded) { ItemMgr.EnsureItemQuestRelations(); } // add items to list of provided items foreach (var qTempl in Templates) { if (qTempl != null) { var itemTempl = ItemMgr.GetTemplate(qTempl.SrcItemId); if (itemTempl != null && qTempl.SrcItemId != 0 && !qTempl.Starters.Contains(itemTempl)) { qTempl.ProvidedItems.Add(new ItemStackDescription(qTempl.SrcItemId, 1)); } } } Loaded = true; log.Debug("{0} Quests loaded.", _questCount); } return(true); }
public void FinalizeDataHolder() { Template = ItemMgr.GetTemplate(ItemId); if (Template == null) { ContentMgr.OnInvalidDBData("{0} has invalid ItemId: {1} ({2})", (object)this, (object)ItemId, (object)(int)ItemId); } else { List <VendorItemEntry> vendorList = NPCMgr.GetOrCreateVendorList(VendorId); if (StockAmount < 0) { StockAmount = Template.StockAmount; } if (StockRefillDelay < 0U) { StockRefillDelay = Template.StockRefillDelay; } remainingStackAmount = StockAmount; vendorList.Add(this); } }
public void TestInspect() { Setup.EnsureItemsLoaded(); var swordTempl = ItemMgr.GetTemplate(ItemId.Shortsword); if (swordTempl.EquipmentSlots == null) { swordTempl.EquipmentSlots = new[] { EquipmentSlot.MainHand }; swordTempl.IsWeapon = true; } var chr1 = Setup.AllianceCharacterPool.Create(); var learntTalent = chr1.Talents.Trees[0].Talents[10]; var learntRank = 2; chr1.EnsureInWorldAndLiving(); chr1.Talents.Owner.Level = 50; chr1.Talents.Set(learntTalent, learntRank); var chr2 = Setup.AllianceCharacterPool.Create(); chr2.EnsureLiving(); chr2.EnsureXDistance(chr1, 1.0f, true); var client2 = chr2.FakeClient; chr1.Inventory.TryAdd(swordTempl, InventorySlot.MainHand); var sword = chr1.Inventory[InventorySlot.MainHand]; Assert.IsNotNull(sword, "Dummy Sword was not added to MainHand slot."); Thread.Sleep(Map.CharacterUpdateEnvironmentTicks * Map.DefaultUpdateDelay); chr1.Map.WaitTicks(2); client2.PurgeUpdatePackets(); PacketUtil.GetUpdatePackets = true; var packet = new RealmPacketOut(RealmServerOpCode.CMSG_INSPECT); packet.Write(chr1.EntityId); client2.ReceiveCMSG(packet, true); Thread.Sleep(Map.CharacterUpdateEnvironmentTicks * Map.DefaultUpdateDelay); chr1.Map.WaitTicks(2); // Expected response: 1. send creation of all items to the new observer + 2. Send all talents var swordCreations = client2.GetUpdateBlocks(sword.EntityId, UpdateType.Create); Assert.IsNotNull(swordCreations); Assert.AreEqual(1, swordCreations.Count); var talentInfo = client2.DequeueSMSGInfo(RealmServerOpCode.SMSG_INSPECT_TALENT); Assert.AreEqual(chr1.Talents.GetFreeTalentPointsForLevel(chr1.Level), (int)talentInfo.Parser.ParsedPacket["FreePoints"].UIntValue); var talentParser = talentInfo.Parser.Packet; var bytes = talentParser.ReadBytes(((int)learntTalent.Index / 8) + 1); var arr = new BitArray(bytes); Assert.AreEqual(true, arr[(int)(learntTalent.Index + learntRank - 1)]); }
public static void HandlePetitionBuy(IRealmClient client, RealmPacketIn packet) { var chr = client.ActiveCharacter; var petitionerId = packet.ReadEntityId(); var petitioner = chr.Map.GetObject(petitionerId) as NPC; //var petitionId = packet.ReadInt32(); //var petitionCreator = packet.ReadEntityId(); //packet.SkipBytes(4 + 8); packet.Position += 4 + 8; var name = packet.ReadCString().Trim(); //var bodytext = packet.ReadCString().Trim(); //var minSignatures = packet.ReadInt32(); //var maxSignatures = packet.ReadInt32(); //var deadline = packet.ReadInt32(); //var issueDate = packet.ReadInt32(); //var allowedGuildId = packet.ReadInt32(); //var allowedClassMask = packet.ReadInt32(); //var allowedRaceMask = packet.ReadInt32(); //var allowedGender = packet.ReadInt32(); // wow is sexist... :( //var allowedMinLevel = packet.ReadInt32(); //var allowedMaxLevel = packet.ReadInt32(); //packet.SkipBytes(4 * 10); //packet.Position += (7 * 8) + 2 + 1 + 8; packet.Position += 4 * 10; var choice = packet.ReadInt32(); //var petitionType = packet.ReadInt32(); //packet.SkipBytes(4); packet.Position += 4; if (petitioner != null && petitioner.IsPetitioner && petitioner.CheckVendorInteraction(chr)) { ItemId itemId = 0; uint cost = 0; PetitionType type = PetitionType.None; if (petitioner.IsGuildPetitioner) { if (chr.IsInGuild) { GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.ALREADY_IN_GUILD); return; } if (!GuildMgr.IsValidGuildName(name)) { GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.NAME_INVALID); return; } else if (GuildMgr.DoesGuildExist(name)) { GuildHandler.SendResult(chr, GuildCommandId.CREATE, name, GuildResult.NAME_EXISTS); return; } itemId = PetitionerEntry.GuildPetitionEntry.ItemId; cost = GuildMgr.GuildCharterCost; type = PetitionType.Guild; } else if (petitioner.IsArenaPetitioner) { switch (choice) { case 1: itemId = PetitionerEntry.ArenaPetition2v2Entry.ItemId; cost = PetitionerEntry.ArenaPetition2v2Entry.Cost; type = PetitionType.Arena2vs2; break; case 2: itemId = PetitionerEntry.ArenaPetition3v3Entry.ItemId; cost = PetitionerEntry.ArenaPetition3v3Entry.Cost; type = PetitionType.Arena3vs3; break; case 3: itemId = PetitionerEntry.ArenaPetition5v5Entry.ItemId; cost = PetitionerEntry.ArenaPetition5v5Entry.Cost; type = PetitionType.Arena5vs5; break; default: return; } if (!ArenaMgr.IsValidArenaTeamName(name)) { ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, name, string.Empty, ArenaTeamResult.NAME_INVALID); return; } else if (ArenaMgr.DoesArenaTeamExist(name)) { ArenaTeamHandler.SendResult(chr, ArenaTeamCommandId.CREATE, name, string.Empty, ArenaTeamResult.NAME_EXISTS); return; } } if (itemId != 0 && cost != 0 && type != PetitionType.None) { var templ = ItemMgr.GetTemplate(itemId); if (templ == null) { SendBuyError(chr, petitioner, itemId, BuyItemError.CantFindItem); } else if (chr.Money < cost) { SendBuyError(chr, petitioner, itemId, BuyItemError.NotEnoughMoney); } else if (!PetitionRecord.CanBuyPetition(chr.EntityId.Low)) { chr.SendSystemMessage("You can't buy another petition !"); } else { var slotId = chr.Inventory.FindFreeSlot(templ, 1); if (slotId.Container == null) { SendBuyError(chr, petitioner, itemId, BuyItemError.CantCarryAnymore); } else { var item = slotId.Container.AddUnchecked(slotId.Slot, templ, 1, true) as PetitionCharter; item.Petition = new PetitionRecord(name, chr.EntityId.Low, item.EntityId.Low, type); item.Petition.Create(); chr.Money -= cost; item.SetEnchantId(EnchantSlot.Permanent, item.EntityId.Low); } } } } }
private static Item AddItem(Character chr, ItemId itemId, ref int amount) { chr.Inventory.TryAdd(ItemMgr.GetTemplate(itemId), ref amount); return(chr.Inventory.GetItemByItemId(itemId)); }