/// <summary> /// Saves a specific tab to specified location. /// </summary> /// <param name="tab">Tab to save</param> /// <param name="path">Path of the location to save the tab to</param> public void Save(PlayerTab tab, string path) { mainWindow.focusDummy.Focus(); bottomStatusBar.SetText("Saving..."); try { BackupFile(path); if (!path.EndsWith(".ttp")) { path += ".ttp"; } PlayerDataFile playerDataFile = tab.playerDataFile.DeepCopy(); PostProcess(playerDataFile); playerDataFile.Save(path); tab.path = path; tab.fileName = path.Substring(path.LastIndexOf('\\') + 1); MessageBox.Show(string.Format("File {0} saved!", path.Substring(path.LastIndexOf('\\') + 1)), "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception e) { ErrorHandler.HandleError(string.Format("Failed to save file {0}. {1}", path.Substring(path.LastIndexOf('\\') + 1), e.Message), e, true, tab.path); } bottomStatusBar.Reset(); }
public static void SavePlayerDataFile(string _playerId, PlayerDataFile _playerDataFile) { _playerDataFile.Save(GameUtils.GetPlayerDataDir(), _playerId.Trim()); ClientInfo _cInfo = GetClientInfoFromSteamId(_playerId); if (_cInfo != null) { ModEvents.SavePlayerData.Invoke(_cInfo, _playerDataFile); } }
public static void SavePlayerDataFile(string _id, PlayerDataFile _playerDataFile) { _playerDataFile.Save(GameIO.GetPlayerDataDir(), _id.Trim()); ClientInfo cInfo = GetClientInfoFromNameOrId(_id); if (cInfo != null) { ModEvents.SavePlayerData.Invoke(cInfo, _playerDataFile); } }
private static void SetSkillLevelOffline(string steamId, string skillName) { if (!int.TryParse(Params[Params.Count - 1], out var level)) { SendOutput("Level must be a number"); return; } var pdf = new PlayerDataFile(); pdf.Load(GameUtils.GetPlayerDataDir(), steamId); //todo: make backup var fieldInfo = typeof(PlayerDataFile).GetField("HH", BindingFlags.NonPublic | BindingFlags.Instance); if (fieldInfo == null) { return; } if (!(fieldInfo.GetValue(pdf) is MemoryStream curSkillStream)) { return; } var skills = new Skills(); if (curSkillStream.Length > 0L) { skills.Read(new BinaryReader(curSkillStream), 36u); } var skillOnPlayer = skills.GetSkillByName(skillName); if (skillOnPlayer == null) { SendOutput($"Skill {skillName} not found"); return; } if (!Skills.AllSkills.ContainsKey(skillOnPlayer.Id)) { return; } var skillFromXml = Skills.AllSkills[skillOnPlayer.Id]; if (level < skillFromXml.Level) { SendOutput("Level is below the mininmum level of " + skillFromXml.Level + " for " + skillName); return; } if (level > skillFromXml.MaxLevel) { SendOutput("Level is higher than the maximum level of " + skillFromXml.MaxLevel + " for " + skillName); return; } //todo: check requirements if (skillOnPlayer.IsLocked) { skillOnPlayer.IsLocked = false; } if (skillFromXml.IsPerk) { var fieldInfo2 = typeof(Skill).GetField("expToNextLevel", BindingFlags.NonPublic | BindingFlags.Instance); if (fieldInfo2 != null) { fieldInfo2.SetValue(skillOnPlayer, 0); } else { SendOutput("Unable to set skill 'expToNextLevel' for perk"); } } skillOnPlayer.Level = level; var newSkillStream = new MemoryStream(); skills.Write(new BinaryWriter(newSkillStream)); fieldInfo.SetValue(pdf, newSkillStream); pdf.Save(GameUtils.GetPlayerDataDir(), steamId); SendOutput($"Setting player '{steamId}' skill '{skillName}' to level: {level}"); }