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); } }
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); }
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); }