private static void HandleChangeToSavedHair(GameSession session, PacketReader packet) { long hairUid = packet.ReadLong(); Item hair = session.Player.HairInventory.SavedHair.FirstOrDefault(x => x.Uid == hairUid); if (hair == null) { return; } BeautyMetadata beautyShop = BeautyMetadataStorage.GetShopById(510); if (!PayWithShopTokenCost(session, beautyShop)) { return; } Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics; if (cosmetics.Remove(hair.ItemSlot, out Item removeItem)) { removeItem.Slot = -1; session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, removeItem)); } cosmetics[removeItem.ItemSlot] = hair; session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, hair, hair.ItemSlot)); session.Send(BeautyPacket.ChangetoSavedHair()); }
private static void HandleSaveHair(GameSession session, PacketReader packet) { long hairUid = packet.ReadLong(); Item hair = session.Player.Inventory.Cosmetics.FirstOrDefault(x => x.Value.Uid == hairUid).Value; if (hair == null || hair.ItemSlot != ItemSlot.HR) { return; } if (session.Player.HairInventory.SavedHair.Count > 30) // 30 is the max slots { return; } Item hairCopy = new Item(hair.Id) { HairData = hair.HairData, Color = hair.Color, CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + Environment.TickCount }; session.Player.HairInventory.SavedHair.Add(hairCopy); session.Send(BeautyPacket.SaveHair(hair, hairCopy)); }
private static void HandleBeautyVoucher(GameSession session, PacketReader packet) { long itemUid = packet.ReadLong(); Player player = session.Player; Item voucher = player.Inventory.GetByUid(itemUid); if (voucher == null || voucher.Function.Name != "ItemChangeBeauty") { return; } BeautyShop beautyShop = DatabaseManager.BeautyShops.FindById(voucher.Function.Id); if (beautyShop == null) { return; } List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, player.Gender); player.ShopId = beautyShop.Id; session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems)); player.Inventory.ConsumeItem(session, voucher.Uid, 1); }
private static void HandleChooseRandomHair(GameSession session, PacketReader packet) { byte selection = packet.ReadByte(); if (selection == 0) // player chose previous hair { Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics; //Remove current hair if (cosmetics.Remove(ItemSlot.HR, out Item newHair)) { newHair.Slot = -1; DatabaseManager.Items.Delete(newHair.Uid); session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, newHair)); } cosmetics[ItemSlot.HR] = session.Player.HairInventory.RandomHair; // apply the previous hair session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, session.Player.HairInventory.RandomHair, ItemSlot.HR)); Item voucher = new Item(20300246) { }; // Chic Salon Voucher InventoryController.Add(session, voucher, true); session.Send(BeautyPacket.ChooseRandomHair(voucher.Id)); } else // player chose new hair { session.Send(BeautyPacket.ChooseRandomHair()); } session.Player.HairInventory.RandomHair = null; // remove random hair option from hair inventory }
private static void HandleBeautyVoucher(GameSession session, PacketReader packet) { long itemUid = packet.ReadLong(); Player player = session.Player; Item voucher = player.Inventory.Items[itemUid]; if (voucher == null || voucher.Function.Name != "ItemChangeBeauty") { return; } BeautyMetadata beautyShop = BeautyMetadataStorage.GetShopById(voucher.Function.Id); if (beautyShop == null) { return; } List <BeautyItem> beautyItems = BeautyMetadataStorage.GetGenderItems(beautyShop.ShopId, player.Gender); player.ShopId = beautyShop.ShopId; session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems)); player.Inventory.ConsumeItem(session, voucher.Uid, 1); }
private static void HandleRandomHair(GameSession session, PacketReader packet) { int shopId = packet.ReadInt(); bool useVoucher = packet.ReadBool(); BeautyMetadata beautyShop = BeautyMetadataStorage.GetShopById(shopId); List <BeautyItem> beautyItems = BeautyMetadataStorage.GetGenderItems(beautyShop.ShopId, session.Player.Gender); if (!HandleShopPay(session, beautyShop, useVoucher)) { return; } // Grab random hair Random random = new Random(); int indexHair = random.Next(beautyItems.Count); BeautyItem chosenHair = beautyItems[indexHair]; //Grab a preset hair and length of hair ItemMetadata beautyItemData = ItemMetadataStorage.GetMetadata(chosenHair.ItemId); int indexPreset = random.Next(beautyItemData.HairPresets.Count); HairPresets chosenPreset = beautyItemData.HairPresets[indexPreset]; //Grab random front hair length double chosenFrontLength = random.NextDouble() * (beautyItemData.HairPresets[indexPreset].MaxScale - beautyItemData.HairPresets[indexPreset].MinScale) + beautyItemData.HairPresets[indexPreset].MinScale; //Grab random back hair length double chosenBackLength = random.NextDouble() * (beautyItemData.HairPresets[indexPreset].MaxScale - beautyItemData.HairPresets[indexPreset].MinScale) + beautyItemData.HairPresets[indexPreset].MinScale; // Grab random preset color ColorPaletteMetadata palette = ColorPaletteMetadataStorage.GetMetadata(2); // pick from palette 2. Seems like it's the correct palette for basic hair colors int indexColor = random.Next(palette.DefaultColors.Count); MixedColor color = palette.DefaultColors[indexColor]; Dictionary <ItemSlot, Item> equippedInventory = session.Player.GetEquippedInventory(InventoryTab.Gear); Item newHair = new Item(chosenHair.ItemId) { Color = EquipColor.Argb(color, indexColor, palette.PaletteId), HairD = new HairData((float)chosenBackLength, (float)chosenFrontLength, chosenPreset.BackPositionCoord, chosenPreset.BackPositionRotation, chosenPreset.FrontPositionCoord, chosenPreset.FrontPositionRotation), IsTemplate = false }; //Remove old hair if (session.Player.Equips.Remove(ItemSlot.HR, out Item previousHair)) { previousHair.Slot = -1; session.Player.HairInventory.RandomHair = previousHair; // store the previous hair session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.FieldPlayer, previousHair)); } equippedInventory[ItemSlot.HR] = newHair; session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.FieldPlayer, newHair, ItemSlot.HR)); session.Send(BeautyPacket.RandomHairOption(previousHair, newHair)); }
private static void HandleLoadShop(GameSession session, PacketReader packet) { int npcId = packet.ReadInt(); BeautyCategory category = (BeautyCategory)packet.ReadByte(); NpcMetadata beautyNpc = NpcMetadataStorage.GetNpcMetadata(npcId); if (beautyNpc == null) { return; } BeautyShop beautyShop = DatabaseManager.BeautyShops.FindById(beautyNpc.ShopId); if (beautyShop == null) { return; } session.Player.ShopId = beautyNpc.ShopId; if (beautyShop.BeautyCategory == BeautyCategory.Dye) { if (beautyShop.BeautyType == BeautyShopType.Dye) { session.Send(BeautyPacket.LoadDyeShop(beautyShop)); return; } session.Send(BeautyPacket.LoadBeautyShop(beautyShop)); return; } if (beautyShop.BeautyCategory == BeautyCategory.Save) { session.Send(BeautyPacket.LoadSaveShop(beautyShop)); session.Send(BeautyPacket.InitializeSaves()); session.Send(BeautyPacket.LoadSaveWindow()); session.Send(BeautyPacket.LoadSavedHairCount((short)session.Player.HairInventory.SavedHair.Count)); if (session.Player.HairInventory.SavedHair.Count != 0) { session.Player.HairInventory.SavedHair = session.Player.HairInventory.SavedHair.OrderBy(o => o.CreationTime).ToList(); session.Send(BeautyPacket.LoadSavedHairs(session.Player.HairInventory.SavedHair)); } return; } List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, session.Player.Gender); session.Send(BeautyPacket.LoadBeautyShop(beautyShop, beautyItems)); }
private static void HandleDeleteSavedHair(GameSession session, PacketReader packet) { long hairUid = packet.ReadLong(); Item hair = session.Player.HairInventory.SavedHair.FirstOrDefault(x => x.Uid == hairUid); if (hair == null) { return; } session.Send(BeautyPacket.DeleteSavedHair(hair.Uid)); session.Player.HairInventory.SavedHair.Remove(hair); }
private static bool PayWithVoucher(GameSession session, BeautyShop shop) { string voucherTag = ""; // using an Item's tag to search for any applicable voucher switch (shop.BeautyType) { case BeautyShopType.Hair: if (shop.BeautyCategory == BeautyCategory.Special) { voucherTag = "beauty_hair_special"; break; } voucherTag = "beauty_hair"; break; case BeautyShopType.Face: voucherTag = "beauty_face"; break; case BeautyShopType.Makeup: voucherTag = "beauty_makeup"; break; case BeautyShopType.Skin: voucherTag = "beauty_skin"; break; case BeautyShopType.Dye: voucherTag = "beauty_itemcolor"; break; default: Logger.Warning($"Unknown Beauty Shop: {shop.BeautyType}"); session.Send(NoticePacket.Notice("Unknown Beauty Shop", NoticeType.FastText)); return(false); } Item voucher = session.Player.Inventory.GetAllByTag(voucherTag).FirstOrDefault(); if (voucher == null) { session.Send(NoticePacket.Notice(SystemNotice.ErrorItemNotFound, NoticeType.FastText)); return(false); } session.Send(BeautyPacket.UseVoucher(voucher.Id, 1)); session.Player.Inventory.ConsumeItem(session, voucher.Uid, 1); return(true); }
private static bool PayWithVoucher(GameSession session, BeautyMetadata shop) { string voucherTag = ""; // using an Item's tag to search for any applicable voucher switch (shop.BeautyType) { case BeautyShopType.Hair: if (shop.BeautyCategory == BeautyCategory.Special) { voucherTag = "beauty_hair_special"; break; } voucherTag = "beauty_hair"; break; case BeautyShopType.Face: voucherTag = "beauty_face"; break; case BeautyShopType.Makeup: voucherTag = "beauty_makeup"; break; case BeautyShopType.Skin: voucherTag = "beauty_skin"; break; case BeautyShopType.Dye: voucherTag = "beauty_itemcolor"; break; default: session.Send(NoticePacket.Notice("Unknown Beauty Shop", NoticeType.FastText)); return(false); } Item voucher = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Tag == voucherTag).Value; if (voucher == null) { session.Send(NoticePacket.Notice(SystemNotice.ItemNotFound, NoticeType.FastText)); return(false); } session.Send(BeautyPacket.UseVoucher(voucher.Id, 1)); InventoryController.Consume(session, voucher.Uid, 1); return(true); }
private static void HandleRandomHair(GameSession session, PacketReader packet) { int shopId = packet.ReadInt(); bool useVoucher = packet.ReadBool(); BeautyShop beautyShop = DatabaseManager.BeautyShops.FindById(shopId); List <BeautyShopItem> beautyItems = DatabaseManager.BeautyShopItems.FindAllByShopIdAndGender(beautyShop.Id, session.Player.Gender); if (!HandleShopPay(session, beautyShop, useVoucher)) { return; } // Grab random hair Random random = Random.Shared; int indexHair = random.Next(beautyItems.Count); BeautyShopItem chosenHair = beautyItems[indexHair]; BeautyHelper.ChangeHair(session, chosenHair.ItemId, out Item previousHair, out Item newHair); session.FieldManager.BroadcastPacket(EquipmentPacket.EquipItem(session.Player.FieldPlayer, newHair, ItemSlot.HR)); session.Send(BeautyPacket.RandomHairOption(previousHair, newHair)); }