public static Item TutorialBow(Player owner) { // bow 15100216 // [longsword] Tairen Royal Longsword - 13200309 // [shield] Tairen Royal Shield - 14100279 // [greatsword] Tairen Royal Greatsword - 15000313 // [scepter] Tairen Royal Scepter - 13300308 // [codex] Tairen Royal Codex - 14000270 // [staff] Tairen Royal Staff - 15200312 // [cannon] Tairen Royal Cannon - 15300308 // [bow] Tairen Royal Bow - 15100305 // [dagger] Tairen Royal Knife - 13100314 // [star] Tairen Royal Star - 13400307 // [blade] Tairen Royal Blade - 15400294 // [knuckles] Tairen Royal Knuckles - 15500226 // [orb] Tairen Royal Spirit - 15600228 return(new Item(15100216) { Uid = 3430503306390578751, // Make sure its unique! If the UID is equipped, it will say "Equipped" on the item in your inventory Rarity = 1, CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), Owner = owner, Color = EquipColor.Custom(MixedColor.Custom( Maple2Storage.Types.Color.Argb(0xFF, 0xBC, 0xBC, 0xB3), Maple2Storage.Types.Color.Argb(0xFF, 0xC3, 0xDA, 0x3D), Maple2Storage.Types.Color.Argb(0xFF, 0xB0, 0xB4, 0xBA) ), 10, 0x13 ), TransferFlag = TransferFlag.Binds | TransferFlag.Splitable, }); }
public static void ChangeFace(GameSession session, int faceId, out Item previousFace, out Item newFace) { Random random = Random.Shared; // Grab random preset color ColorPaletteMetadata palette = ColorPaletteMetadataStorage.GetMetadata(1); // pick from palette 2. Seems like it's the correct palette for basic face colors int indexColor = random.Next(palette.DefaultColors.Count); MixedColor color = palette.DefaultColors[indexColor]; newFace = new(faceId) { Color = EquipColor.Argb(color, indexColor, palette.PaletteId), IsEquipped = true, OwnerCharacterId = session.Player.CharacterId, OwnerCharacterName = session.Player.Name }; Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics; //Remove old face if (cosmetics.Remove(ItemSlot.FA, out previousFace)) { previousFace.Slot = -1; DatabaseManager.Items.Delete(previousFace.Uid); session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.Player.FieldPlayer, previousFace)); } cosmetics[ItemSlot.FA] = newFace; } }
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)); }
public static EquipColor Custom(MixedColor color, int index, int palette) { return(new() { Color = color, Index = index, Palette = palette }); }
protected override List <ColorPaletteMetadata> Parse() { List <ColorPaletteMetadata> palette = new(); foreach (PackFileEntry entry in Resources.XmlReader.Files) { if (!entry.Name.StartsWith("table/colorpalette")) { continue; } XmlDocument document = Resources.XmlReader.GetXmlDocument(entry); XmlNodeList nodes = document.SelectNodes("/ms2/colorPalette"); foreach (XmlNode node in nodes) { ColorPaletteMetadata metadata = new() { PaletteId = int.Parse(node.Attributes["id"].Value) }; foreach (XmlNode colorNode in node) { int index = int.Parse(colorNode.Attributes["colorSN"].Value); int primary = Convert.ToInt32(colorNode.Attributes["ch0"].Value, 16); byte[] primaryBytes = BitConverter.GetBytes(primary); Array.Reverse(primaryBytes); int secondary = Convert.ToInt32(colorNode.Attributes["ch1"].Value, 16); byte[] secondaryBytes = BitConverter.GetBytes(secondary); Array.Reverse(secondaryBytes); int tertiary = Convert.ToInt32(colorNode.Attributes["ch2"].Value, 16); byte[] tertiaryBytes = BitConverter.GetBytes(tertiary); Array.Reverse(tertiaryBytes); int paletteColor = Convert.ToInt32(colorNode.Attributes["palette"].Value, 16); byte[] paletteBytes = BitConverter.GetBytes(paletteColor); Array.Reverse(paletteBytes); MixedColor newColor = MixedColor.Custom( Color.FromBytes(primaryBytes), Color.FromBytes(secondaryBytes), Color.FromBytes(tertiaryBytes) ); metadata.DefaultColors.Add(newColor); } palette.Add(metadata); } } return(palette); } }
public static Item ShoesMale() { return(new Item(11700852) { Uid = 2754959794416496484, CreationTime = 1558494660, Color = EquipColor.Custom(MixedColor.Custom( Maple2Storage.Types.Color.Argb(0xFF, 0x4C, 0x69, 0xB5), Maple2Storage.Types.Color.Argb(0xFF, 0x4C, 0x85, 0xDB), Maple2Storage.Types.Color.Argb(0xFF, 0x48, 0x5E, 0xA8)), 10, 4 ), }); }
public static Item FaceMale() { return(new Item(10300051) { Uid = 2754959794416496483, CreationTime = 1558494660, Color = EquipColor.Custom(MixedColor.Custom( Maple2Storage.Types.Color.Argb(0xFF, 0x7E, 0xF3, 0xF8), Maple2Storage.Types.Color.Argb(0xFF, 0xF7, 0xE3, 0xE3), Maple2Storage.Types.Color.Argb(0xFF, 0x14, 0x07, 0x02)), 10, 0 ), }); }
// MALE ITEMS public static Item HairMale() { return(new Item(10200003) { Uid = 2867972925711604442, CreationTime = 1565575851, Color = EquipColor.Custom(MixedColor.Custom( Maple2Storage.Types.Color.Argb(0xFF, 0x4C, 0x69, 0xB5), Maple2Storage.Types.Color.Argb(0xFF, 0x4C, 0x85, 0xDB), Maple2Storage.Types.Color.Argb(0xFF, 0x48, 0x5E, 0xA8)), 10, 4 ), HairD = new HairData(0.3f, 0.3f, new CoordF(), new CoordF(), new CoordF(), new CoordF()), }); }
public static Item DefaultCodex(Player owner) { return(new Item(14000270) { Uid = 3430503306390578751, // Make sure its unique! If the UID is equipped, it will say "Equipped" on the item in your inventory Rarity = 1, CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), Owner = owner, Color = EquipColor.Custom(MixedColor.Custom( Maple2Storage.Types.Color.Argb(0xFF, 0xBC, 0xBC, 0xB3), Maple2Storage.Types.Color.Argb(0xFF, 0xC3, 0xDA, 0x3D), Maple2Storage.Types.Color.Argb(0xFF, 0xB0, 0xB4, 0xBA)), 10, 0x13 ), TransferFlag = TransferFlag.Binds | TransferFlag.Splitable, }); }
public static void ChangeHair(GameSession session, int hairId, out Item previousHair, out Item newHair) { Random random = Random.Shared; //Grab a preset hair and length of hair ItemCustomizeMetadata customize = ItemMetadataStorage.GetMetadata(hairId).Customize; int indexPreset = random.Next(customize.HairPresets.Count); HairPresets chosenPreset = customize.HairPresets[indexPreset]; //Grab random front hair length double chosenFrontLength = random.NextDouble() * (customize.HairPresets[indexPreset].MaxScale - customize.HairPresets[indexPreset].MinScale) + customize.HairPresets[indexPreset].MinScale; //Grab random back hair length double chosenBackLength = random.NextDouble() * (customize.HairPresets[indexPreset].MaxScale - customize.HairPresets[indexPreset].MinScale) + customize.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]; newHair = new(hairId) { Color = EquipColor.Argb(color, indexColor, palette.PaletteId), HairData = new((float)chosenBackLength, (float)chosenFrontLength, chosenPreset.BackPositionCoord, chosenPreset.BackPositionRotation, chosenPreset.FrontPositionCoord, chosenPreset.FrontPositionRotation), IsEquipped = true, OwnerCharacterId = session.Player.CharacterId, OwnerCharacterName = session.Player.Name }; Dictionary <ItemSlot, Item> cosmetics = session.Player.Inventory.Cosmetics; //Remove old hair if (cosmetics.Remove(ItemSlot.HR, out previousHair)) { previousHair.Slot = -1; session.Player.HairInventory.RandomHair = previousHair; // store the previous hair DatabaseManager.Items.Delete(previousHair.Uid); session.FieldManager.BroadcastPacket(EquipmentPacket.UnequipItem(session.Player.FieldPlayer, previousHair)); } cosmetics[ItemSlot.HR] = newHair; }
public static EquipColor GetEquipColor(int itemId) { int colorPalette = map.GetValueOrDefault(itemId).ColorPalette; int colorIndex = map.GetValueOrDefault(itemId).ColorIndex; if (colorPalette == 0) // item has no color { return(EquipColor.Custom(MixedColor.Custom(Color.Argb(0, 0, 0, 0), Color.Argb(0, 0, 0, 0), Color.Argb(0, 0, 0, 0)), colorIndex, colorPalette)); } ColorPaletteMetadata palette = ColorPaletteMetadataStorage.GetMetadata(colorPalette); if (colorPalette > 0 && colorIndex == -1) // random color from color palette { Random random = new Random(); int index = random.Next(palette.DefaultColors.Count); return(EquipColor.Argb(palette.DefaultColors[index], colorIndex, colorPalette)); } return(EquipColor.Argb(palette.DefaultColors[colorIndex], colorIndex, colorPalette)); }