예제 #1
0
        /// <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);
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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}");
        }