Exemple #1
0
    public Hotbar(long gameOptionsId, Job job)
    {
        Slots = new QuickSlot[MaxSlots];

        for (int i = 0; i < MaxSlots; i++)
        {
            Slots[i] = new();
        }

        AddDefaultSkills();

        Id = DatabaseManager.Hotbars.Insert(this, gameOptionsId);

        void AddDefaultSkills()
        {
            JobMetadata jobMetadata = JobMetadataStorage.GetJobMetadata(job);

            if (jobMetadata is null)
            {
                return;
            }

            List <int> skillIds = new();

            jobMetadata.LearnedSkills.ForEach(x => skillIds.AddRange(x.SkillIds));

            List <(int skillId, byte slotPriority)> hotbarSkills = new();

            foreach (int skillId in skillIds)
            {
                JobSkillMetadata jobSkillMetadata = jobMetadata.Skills.First(x => x.SkillId == skillId);
                if (jobSkillMetadata.QuickSlotPriority != 99 && jobSkillMetadata.SubJobCode == 0)
                {
                    hotbarSkills.Add((skillId, jobSkillMetadata.QuickSlotPriority));
                }
            }

            foreach ((int skillId, byte _) in hotbarSkills.OrderBy(x => x.slotPriority))
            {
                AddToFirstSlot(QuickSlot.From(skillId));
            }
        }
    }
        public override void Handle(GameSession session, PacketReader packet)
        {
            packet.ReadInt(); // ?

            // Liftable: 00 00 00 00 00
            // SendBreakable
            // Self
            session.EnterField(session.Player.MapId);
            session.Send(StatPacket.SetStats(session.FieldPlayer));
            session.Send(StatPointPacket.WriteTotalStatPoints(session.Player));
            foreach (MasteryExp mastery in session.Player.Levels.MasteryExp)
            {
                session.Send(MasteryPacket.SetExp(mastery.Type, mastery.CurrentExp));
            }
            if (session.Player.IsVip())
            {
                session.Send(PremiumClubPacket.ActivatePremium(session.FieldPlayer, session.Player.VIPExpiration));
            }
            session.Send(EmotePacket.LoadEmotes(session.Player));
            session.Send(ChatStickerPacket.LoadChatSticker(session.Player));
            session.Send(ResponseCubePacket.LoadHome(session.FieldPlayer));

            // Normally skill layout would be loaded from a database
            QuickSlot arrowStream  = QuickSlot.From(10500001);
            QuickSlot arrowBarrage = QuickSlot.From(10500011);
            QuickSlot eagleGlide   = QuickSlot.From(10500151);
            QuickSlot testSkill    = QuickSlot.From(10500153);

            if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar))
            {
                /*
                 * mainHotbar.MoveQuickSlot(4, arrowStream);
                 * mainHotbar.MoveQuickSlot(5, arrowBarrage);
                 * mainHotbar.MoveQuickSlot(6, eagleGlide);
                 * mainHotbar.MoveQuickSlot(7, testSkill);
                 */
                session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions));
            }

            session.Send(GameEventPacket.Load());
        }
        public override void Handle(GameSession session, PacketReader packet)
        {
            packet.ReadInt(); // ?

            // Liftable: 00 00 00 00 00
            // SendBreakable
            // Self
            session.EnterField(session.Player.MapId);
            session.Send(FieldObjectPacket.SetStats(session.FieldPlayer));
            session.Send(EmotePacket.LoadEmotes());

            // Normally skill layout would be loaded from a database
            QuickSlot arrowStream  = QuickSlot.From(10500001);
            QuickSlot arrowBarrage = QuickSlot.From(10500011);
            QuickSlot eagleGlide   = QuickSlot.From(10500151);
            QuickSlot testSkill    = QuickSlot.From(10500153);

            if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar))
            {
                /*
                 * mainHotbar.MoveQuickSlot(4, arrowStream);
                 * mainHotbar.MoveQuickSlot(5, arrowBarrage);
                 * mainHotbar.MoveQuickSlot(6, eagleGlide);
                 * mainHotbar.MoveQuickSlot(7, testSkill);
                 */
                session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions));
            }

            // Add catalysts for testing

            /*
             * int[] catalysts = { 40100001, 40100002, 40100003, 40100021, 40100023, 40100024, 40100026 };
             * foreach (int catalyst in catalysts) {
             *  var item = new Item(catalyst) { Amount = 99999, Uid = catalyst };
             *  session.Inventory.Add(item);
             *  session.Send(ItemInventoryPacket.Add(item));
             * }
             */
        }
Exemple #4
0
    public void MoveQuickSlot(int targetSlotIndex, QuickSlot quickSlot)
    {
        if (targetSlotIndex is < 0 or >= MaxSlots)
        {
            // This should never occur
            throw new ArgumentException($"Invalid target slot {targetSlotIndex}");
        }

        int sourceSlotIndex = FindQuickSlotIndex(quickSlot.SkillId, quickSlot.ItemUid);

        if (sourceSlotIndex != -1)
        {
            // Swapping with an existing slot on the hotbar
            QuickSlot sourceQuickSlot = Slots[targetSlotIndex];
            Slots[sourceSlotIndex] = QuickSlot.From(
                sourceQuickSlot.SkillId,
                sourceQuickSlot.ItemId,
                sourceQuickSlot.ItemUid
                );
        }

        Slots[targetSlotIndex] = quickSlot;
    }
Exemple #5
0
    public Hotbar(long gameOptionsId, Job job)
    {
        Slots = new QuickSlot[MAX_SLOTS];

        for (int i = 0; i < MAX_SLOTS; i++)
        {
            Slots[i] = new();
        }

        // Get default job skills
        IOrderedEnumerable <JobSkillMetadata> skills = JobMetadataStorage
                                                       .GetJobskills((int)job).Where(skill => skill.QuickSlotPriority < 4).OrderBy(skill => skill.QuickSlotPriority);

        // Add skills to hotbar
        int index = 4;

        foreach (JobSkillMetadata metadata in skills)
        {
            Slots[index++] = QuickSlot.From(metadata.SkillId);
        }

        Id = DatabaseManager.Hotbars.Insert(this, gameOptionsId);
    }
        public override void Handle(GameSession session, PacketReader packet)
        {
            packet.ReadInt(); // ?

            // Liftable: 00 00 00 00 00
            // SendBreakable
            // Self
            session.EnterField(session.Player.MapId);
            session.Send(StatPacket.SetStats(session.FieldPlayer));
            session.Send(StatPointPacket.WriteTotalStatPoints(session.Player));
            session.Send(EmotePacket.LoadEmotes(session.Player));
            session.Send(ChatStickerPacket.LoadChatSticker(session.Player));

            // Normally skill layout would be loaded from a database
            QuickSlot arrowStream  = QuickSlot.From(10500001);
            QuickSlot arrowBarrage = QuickSlot.From(10500011);
            QuickSlot eagleGlide   = QuickSlot.From(10500151);
            QuickSlot testSkill    = QuickSlot.From(10500153);

            if (session.Player.GameOptions.TryGetHotbar(0, out Hotbar mainHotbar))
            {
                /*
                 * mainHotbar.MoveQuickSlot(4, arrowStream);
                 * mainHotbar.MoveQuickSlot(5, arrowBarrage);
                 * mainHotbar.MoveQuickSlot(6, eagleGlide);
                 * mainHotbar.MoveQuickSlot(7, testSkill);
                 */
                session.Send(KeyTablePacket.SendHotbars(session.Player.GameOptions));
            }

            // Add catalysts for testing

            Item item = new Item(40100001)
            {
                Amount = 99999
            };
            Item item2 = new Item(40100001)
            {
                Amount = 90000
            };
            Item item3 = new Item(20302228)
            {
                Amount = 1
            };

            InventoryController.Add(session, item, true);
            InventoryController.Add(session, item2, true);
            InventoryController.Add(session, item3, true);

            //Add mail for testing
            //System mail without any item
            Mail sysMail = new Mail
                           (
                101,
                session.Player.CharacterId,
                "50000002",
                "",
                "",
                0,
                DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
                null
                           );

            // System mail with an item
            List <Item> items = new List <Item>
            {
                new Item(40100001) // 20302228
                {
                    CreationTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
                    Owner        = session.Player,
                    Amount       = 10000
                }
            };
            Mail sysItemMail = new Mail
                               (
                101,
                session.Player.CharacterId,
                "53000042",
                "",
                "",
                0,
                DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
                items
                               );

            // Regular mail
            Mail regMail = new Mail
                           (
                1,
                session.Player.CharacterId,
                session.Player.Name,
                "Test Title",
                "Test Body",
                0,
                DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
                null
                           );

            session.Player.Mailbox.AddOrUpdate(sysItemMail);
            session.Player.Mailbox.AddOrUpdate(sysMail);
            session.Player.Mailbox.AddOrUpdate(regMail);
        }