Beispiel #1
0
    private static void HandleResetSkillTree(GameSession session, PacketReader packet)
    {
        int unknown = packet.ReadInt();

        SkillTab skillTab = session.Player.SkillTabs.FirstOrDefault(x => x.TabId == session.Player.ActiveSkillTabId);

        skillTab.ResetSkillTree(session.Player.Job);
        session.Send(JobPacket.Save(session.Player, session.Player.FieldPlayer.ObjectId));
        DatabaseManager.SkillTabs.Update(skillTab);
    }
    private static void HandleSave(GameSession session, PacketReader packet)
    {
        long activeTabId = packet.ReadLong();
        long selectedTab = packet.ReadLong(); // if 0 player used activate tab
        int  unknown     = packet.ReadInt();
        int  tabCount    = packet.ReadInt();

        for (int i = 0; i < tabCount; i++)
        {
            long   tabId   = packet.ReadLong();
            string tabName = packet.ReadUnicodeString();

            SkillTab skillTab = session.Player.SkillTabs.FirstOrDefault(x => x.TabId == tabId);
            if (skillTab == default)
            {
                skillTab = new(session.Player.CharacterId, session.Player.Job, tabId, tabName);
                session.Player.SkillTabs.Add(skillTab);
            }
            else
            {
                skillTab       = session.Player.SkillTabs[i];
                skillTab.TabId = tabId;
                skillTab.Name  = tabName;
            }

            skillTab.ResetSkillTree(session.Player.Job);
            int skillCount = packet.ReadInt();
            for (int j = 0; j < skillCount; j++)
            {
                int skillId    = packet.ReadInt();
                int skillLevel = packet.ReadInt();
                skillTab.AddOrUpdate(skillId, (short)skillLevel, skillLevel > 0);
            }
        }

        session.Player.ActiveSkillTabId = activeTabId;
        session.Send(SkillBookTreePacket.Save(session.Player, selectedTab));
        foreach (SkillTab skillTab in session.Player.SkillTabs)
        {
            DatabaseManager.SkillTabs.Update(skillTab);
        }
    }
Beispiel #3
0
    private static void HandleResetSkillTree(GameSession session, PacketReader packet)
    {
        int unknown = packet.ReadInt();

        Player   player   = session.Player;
        SkillTab skillTab = player.SkillTabs.FirstOrDefault(x => x.TabId == player.ActiveSkillTabId);

        if (skillTab is null)
        {
            return;
        }

        skillTab.ResetSkillTree(player.Job, player.JobCode);
        player.RemoveSkillsFromHotbar();

        session.Send(JobPacket.Save(player.FieldPlayer));
        DatabaseManager.SkillTabs.Update(skillTab);

        session.Send(KeyTablePacket.SendHotbars(player.GameOptions));
        DatabaseManager.GameOptions.Update(player.GameOptions);
    }
Beispiel #4
0
    private static void HandlePresetSkillTree(GameSession session, PacketReader packet)
    {
        Player   player   = session.Player;
        SkillTab skillTab = player.SkillTabs.FirstOrDefault(x => x.TabId == player.ActiveSkillTabId);

        if (skillTab is null)
        {
            return;
        }

        skillTab.ResetSkillTree(player.Job, player.JobCode);

        ReadSkills(packet, skillTab, out HashSet <int> newSkillIds);

        player.RemoveSkillsFromHotbar();
        player.AddNewSkillsToHotbar(newSkillIds);

        session.Send(JobPacket.Save(player.FieldPlayer, newSkillIds));
        DatabaseManager.SkillTabs.Update(skillTab);

        session.Send(KeyTablePacket.SendHotbars(player.GameOptions));
        DatabaseManager.GameOptions.Update(player.GameOptions);
    }