Пример #1
0
 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,
     });
 }
Пример #2
0
    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;
    }
}
Пример #3
0
        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));
        }
Пример #4
0
 public static EquipColor Custom(MixedColor color, int index, int palette)
 {
     return(new()
     {
         Color = color,
         Index = index,
         Palette = palette
     });
 }
Пример #5
0
    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);
    }
}
Пример #6
0
 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
                                   ),
     });
 }
Пример #7
0
 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
                                   ),
     });
 }
Пример #8
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()),
     });
 }
Пример #9
0
 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,
     });
 }
Пример #10
0
    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;
    }
Пример #11
0
        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));
        }