├── .gitattributes ├── .github └── workflows │ └── dotnet-desktop.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── PS3TrophyIsGood.sln ├── PS3TrophyIsGood ├── App.config ├── CopyFrom.Designer.cs ├── CopyFrom.cs ├── CopyFrom.pt-BR.resx ├── CopyFrom.resx ├── DateTimePickForm.Designer.cs ├── DateTimePickForm.cs ├── DateTimePickForm.pt-BR.resx ├── DateTimePickForm.resx ├── DateTimePickForm.zh-Hant.resx ├── Form1.Designer.cs ├── Form1.cs ├── Form1.pt-BR.resx ├── Form1.resx ├── Form1.zh-Hant.resx ├── PS3TrophyIsGood.csproj ├── PS3TrophyIsGood.idc ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ ├── Settings.settings │ ├── strings.Designer.cs │ ├── strings.pt-BR.Designer.cs │ ├── strings.pt-BR.resx │ ├── strings.resx │ ├── strings.zh-Hant.Designer.cs │ └── strings.zh-Hant.resx ├── Utility.cs ├── orignal.ico ├── pfdtool │ ├── games.conf │ ├── global.conf │ ├── msvcr100.dll │ └── pfdtool.exe └── pingme.txt └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.github/workflows/dotnet-desktop.yml: -------------------------------------------------------------------------------- 1 | name: .NET Core Desktop 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | strategy: 12 | matrix: 13 | configuration: [Release] 14 | runs-on: windows-latest 15 | env: 16 | Solution_Name: PS3TrophyIsGood.sln 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v3 20 | with: 21 | fetch-depth: 0 22 | submodules: 'true' 23 | 24 | - name: Install .NET Core 25 | uses: actions/setup-dotnet@v3 26 | with: 27 | dotnet-version: 5.0.x 28 | 29 | - name: Setup MSBuild.exe 30 | uses: microsoft/setup-msbuild@v2 31 | 32 | - name: Build the application 33 | run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration 34 | env: 35 | Configuration: ${{ matrix.configuration }} 36 | 37 | - name: Upload files 38 | uses: actions/upload-artifact@v3 39 | with: 40 | name: PS3TrophyIsGood 41 | path: PS3TrophyIsGood/bin/Release 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | build/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | 28 | # MSTest test Results 29 | [Tt]est[Rr]esult*/ 30 | [Bb]uild[Ll]og.* 31 | 32 | # NUNIT 33 | *.VisualState.xml 34 | TestResult.xml 35 | 36 | # Build Results of an ATL Project 37 | [Dd]ebugPS/ 38 | [Rr]eleasePS/ 39 | dlldata.c 40 | 41 | # DNX 42 | project.lock.json 43 | artifacts/ 44 | 45 | *_i.c 46 | *_p.c 47 | *_i.h 48 | *.ilk 49 | *.meta 50 | *.obj 51 | *.pch 52 | *.pdb 53 | *.pgc 54 | *.pgd 55 | *.rsp 56 | *.sbr 57 | *.tlb 58 | *.tli 59 | *.tlh 60 | *.tmp 61 | *.tmp_proj 62 | *.log 63 | *.vspscc 64 | *.vssscc 65 | .builds 66 | *.pidb 67 | *.svclog 68 | *.scc 69 | 70 | # Chutzpah Test files 71 | _Chutzpah* 72 | 73 | # Visual C++ cache files 74 | ipch/ 75 | *.aps 76 | *.ncb 77 | *.opensdf 78 | *.sdf 79 | *.cachefile 80 | 81 | # Visual Studio profiler 82 | *.psess 83 | *.vsp 84 | *.vspx 85 | 86 | # TFS 2012 Local Workspace 87 | $tf/ 88 | 89 | # Guidance Automation Toolkit 90 | *.gpState 91 | 92 | # ReSharper is a .NET coding add-in 93 | _ReSharper*/ 94 | *.[Rr]e[Ss]harper 95 | *.DotSettings.user 96 | 97 | # JustCode is a .NET coding add-in 98 | .JustCode 99 | 100 | # TeamCity is a build add-in 101 | _TeamCity* 102 | 103 | # DotCover is a Code Coverage Tool 104 | *.dotCover 105 | 106 | # NCrunch 107 | _NCrunch_* 108 | .*crunch*.local.xml 109 | 110 | # MightyMoose 111 | *.mm.* 112 | AutoTest.Net/ 113 | 114 | # Web workbench (sass) 115 | .sass-cache/ 116 | 117 | # Installshield output folder 118 | [Ee]xpress/ 119 | 120 | # DocProject is a documentation generator add-in 121 | DocProject/buildhelp/ 122 | DocProject/Help/*.HxT 123 | DocProject/Help/*.HxC 124 | DocProject/Help/*.hhc 125 | DocProject/Help/*.hhk 126 | DocProject/Help/*.hhp 127 | DocProject/Help/Html2 128 | DocProject/Help/html 129 | 130 | # Click-Once directory 131 | publish/ 132 | 133 | # Publish Web Output 134 | *.[Pp]ublish.xml 135 | *.azurePubxml 136 | ## TODO: Comment the next line if you want to checkin your 137 | ## web deploy settings but do note that will include unencrypted 138 | ## passwords 139 | #*.pubxml 140 | 141 | *.publishproj 142 | 143 | # NuGet Packages 144 | *.nupkg 145 | # The packages folder can be ignored because of Package Restore 146 | **/packages/* 147 | # except build/, which is used as an MSBuild target. 148 | !**/packages/build/ 149 | # Uncomment if necessary however generally it will be regenerated when needed 150 | #!**/packages/repositories.config 151 | 152 | # Windows Azure Build Output 153 | csx/ 154 | *.build.csdef 155 | 156 | # Windows Store app package directory 157 | AppPackages/ 158 | 159 | # Visual Studio cache files 160 | # files ending in .cache can be ignored 161 | *.[Cc]ache 162 | # but keep track of directories ending in .cache 163 | !*.[Cc]ache/ 164 | 165 | # Others 166 | ClientBin/ 167 | [Ss]tyle[Cc]op.* 168 | ~$* 169 | *~ 170 | *.dbmdl 171 | *.dbproj.schemaview 172 | *.pfx 173 | *.publishsettings 174 | node_modules/ 175 | orleans.codegen.cs 176 | 177 | # RIA/Silverlight projects 178 | Generated_Code/ 179 | 180 | # Backup & report files from converting an old project file 181 | # to a newer Visual Studio version. Backup files are not needed, 182 | # because we have git ;-) 183 | _UpgradeReport_Files/ 184 | Backup*/ 185 | UpgradeLog*.XML 186 | UpgradeLog*.htm 187 | 188 | # SQL Server files 189 | *.mdf 190 | *.ldf 191 | 192 | # Business Intelligence projects 193 | *.rdl.data 194 | *.bim.layout 195 | *.bim_*.settings 196 | 197 | # Microsoft Fakes 198 | FakesAssemblies/ 199 | 200 | # Node.js Tools for Visual Studio 201 | .ntvs_analysis.dat 202 | 203 | # Visual Studio 6 build log 204 | *.plg 205 | 206 | # Visual Studio 6 workspace options file 207 | *.opt 208 | 209 | # LightSwitch generated files 210 | GeneratedArtifacts/ 211 | _Pvt_Extensions/ 212 | ModelManifest.xml 213 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "ListViewEx"] 2 | path = ListViewEx 3 | url = https://github.com/darkautism/ListViewEx 4 | [submodule "BigEndianTool"] 5 | path = BigEndianTool 6 | url = https://github.com/darkautism/BigEndianTool 7 | [submodule "TROPHYParser"] 8 | path = TROPHYParser 9 | url = https://github.com/darkautism/TROPHYParser 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 darkautism 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PS3TrophyIsGood.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30011.22 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PS3TrophyIsGood", "PS3TrophyIsGood\PS3TrophyIsGood.csproj", "{1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9} = {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9} 9 | {A57CEE20-8097-467B-9F57-099BB34FBF2B} = {A57CEE20-8097-467B-9F57-099BB34FBF2B} 10 | {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04} = {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04} 11 | EndProjectSection 12 | EndProject 13 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BigEndianTool", "BigEndianTool\BigEndianTool\BigEndianTool.csproj", "{A57CEE20-8097-467B-9F57-099BB34FBF2B}" 14 | EndProject 15 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ListViewEx", "ListViewEx\ListViewEx.csproj", "{35A5C415-0906-4AC7-B0F6-FE3CCA884AD9}" 16 | EndProject 17 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TROPHYParser", "TROPHYParser\TROPHYParser\TROPHYParser.csproj", "{81E49C92-D07A-4AD0-8EE0-5C520D4E1C04}" 18 | EndProject 19 | Global 20 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 21 | Debug|Any CPU = Debug|Any CPU 22 | Release|Any CPU = Release|Any CPU 23 | EndGlobalSection 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 25 | {1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 26 | {1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC}.Debug|Any CPU.Build.0 = Debug|Any CPU 27 | {1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC}.Release|Any CPU.ActiveCfg = Release|Any CPU 28 | {1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC}.Release|Any CPU.Build.0 = Release|Any CPU 29 | {A57CEE20-8097-467B-9F57-099BB34FBF2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 30 | {A57CEE20-8097-467B-9F57-099BB34FBF2B}.Debug|Any CPU.Build.0 = Debug|Any CPU 31 | {A57CEE20-8097-467B-9F57-099BB34FBF2B}.Release|Any CPU.ActiveCfg = Release|Any CPU 32 | {A57CEE20-8097-467B-9F57-099BB34FBF2B}.Release|Any CPU.Build.0 = Release|Any CPU 33 | {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 34 | {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9}.Debug|Any CPU.Build.0 = Debug|Any CPU 35 | {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9}.Release|Any CPU.ActiveCfg = Release|Any CPU 36 | {35A5C415-0906-4AC7-B0F6-FE3CCA884AD9}.Release|Any CPU.Build.0 = Release|Any CPU 37 | {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 38 | {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04}.Debug|Any CPU.Build.0 = Debug|Any CPU 39 | {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04}.Release|Any CPU.ActiveCfg = Release|Any CPU 40 | {81E49C92-D07A-4AD0-8EE0-5C520D4E1C04}.Release|Any CPU.Build.0 = Release|Any CPU 41 | EndGlobalSection 42 | GlobalSection(SolutionProperties) = preSolution 43 | HideSolutionNode = FALSE 44 | EndGlobalSection 45 | GlobalSection(ExtensibilityGlobals) = postSolution 46 | SolutionGuid = {3DD7AB93-25A6-4D00-80B7-5CF73E8DEB42} 47 | EndGlobalSection 48 | EndGlobal 49 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 1 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/CopyFrom.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS3TrophyIsGood 2 | { 3 | partial class CopyFrom 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CopyFrom)); 32 | this.textBox1 = new System.Windows.Forms.TextBox(); 33 | this.button1 = new System.Windows.Forms.Button(); 34 | this.button2 = new System.Windows.Forms.Button(); 35 | this.checkBox1 = new System.Windows.Forms.CheckBox(); 36 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 37 | this.maxMinutes = new System.Windows.Forms.NumericUpDown(); 38 | this.label5 = new System.Windows.Forms.Label(); 39 | this.minMinutes = new System.Windows.Forms.NumericUpDown(); 40 | this.label4 = new System.Windows.Forms.Label(); 41 | this.label3 = new System.Windows.Forms.Label(); 42 | this.label2 = new System.Windows.Forms.Label(); 43 | this.label1 = new System.Windows.Forms.Label(); 44 | this.yearsNumeric = new System.Windows.Forms.NumericUpDown(); 45 | this.monthNumeric = new System.Windows.Forms.NumericUpDown(); 46 | this.daysNumeric = new System.Windows.Forms.NumericUpDown(); 47 | this.label6 = new System.Windows.Forms.Label(); 48 | this.groupBox1.SuspendLayout(); 49 | ((System.ComponentModel.ISupportInitialize)(this.maxMinutes)).BeginInit(); 50 | ((System.ComponentModel.ISupportInitialize)(this.minMinutes)).BeginInit(); 51 | ((System.ComponentModel.ISupportInitialize)(this.yearsNumeric)).BeginInit(); 52 | ((System.ComponentModel.ISupportInitialize)(this.monthNumeric)).BeginInit(); 53 | ((System.ComponentModel.ISupportInitialize)(this.daysNumeric)).BeginInit(); 54 | this.SuspendLayout(); 55 | // 56 | // textBox1 57 | // 58 | resources.ApplyResources(this.textBox1, "textBox1"); 59 | this.textBox1.Name = "textBox1"; 60 | // 61 | // button1 62 | // 63 | resources.ApplyResources(this.button1, "button1"); 64 | this.button1.Name = "button1"; 65 | this.button1.UseVisualStyleBackColor = true; 66 | this.button1.Click += new System.EventHandler(this.button1_Click); 67 | // 68 | // button2 69 | // 70 | resources.ApplyResources(this.button2, "button2"); 71 | this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; 72 | this.button2.Name = "button2"; 73 | this.button2.UseVisualStyleBackColor = true; 74 | // 75 | // checkBox1 76 | // 77 | resources.ApplyResources(this.checkBox1, "checkBox1"); 78 | this.checkBox1.Name = "checkBox1"; 79 | this.checkBox1.UseVisualStyleBackColor = true; 80 | this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); 81 | // 82 | // groupBox1 83 | // 84 | resources.ApplyResources(this.groupBox1, "groupBox1"); 85 | this.groupBox1.Controls.Add(this.maxMinutes); 86 | this.groupBox1.Controls.Add(this.label5); 87 | this.groupBox1.Controls.Add(this.minMinutes); 88 | this.groupBox1.Controls.Add(this.label4); 89 | this.groupBox1.Controls.Add(this.label3); 90 | this.groupBox1.Controls.Add(this.label2); 91 | this.groupBox1.Controls.Add(this.label1); 92 | this.groupBox1.Controls.Add(this.yearsNumeric); 93 | this.groupBox1.Controls.Add(this.monthNumeric); 94 | this.groupBox1.Controls.Add(this.daysNumeric); 95 | this.groupBox1.Name = "groupBox1"; 96 | this.groupBox1.TabStop = false; 97 | // 98 | // maxMinutes 99 | // 100 | resources.ApplyResources(this.maxMinutes, "maxMinutes"); 101 | this.maxMinutes.Maximum = new decimal(new int[] { 102 | 99999, 103 | 0, 104 | 0, 105 | 0}); 106 | this.maxMinutes.Name = "maxMinutes"; 107 | // 108 | // label5 109 | // 110 | resources.ApplyResources(this.label5, "label5"); 111 | this.label5.Name = "label5"; 112 | // 113 | // minMinutes 114 | // 115 | resources.ApplyResources(this.minMinutes, "minMinutes"); 116 | this.minMinutes.Maximum = new decimal(new int[] { 117 | 99999, 118 | 0, 119 | 0, 120 | 0}); 121 | this.minMinutes.Name = "minMinutes"; 122 | // 123 | // label4 124 | // 125 | resources.ApplyResources(this.label4, "label4"); 126 | this.label4.Name = "label4"; 127 | // 128 | // label3 129 | // 130 | resources.ApplyResources(this.label3, "label3"); 131 | this.label3.Name = "label3"; 132 | // 133 | // label2 134 | // 135 | resources.ApplyResources(this.label2, "label2"); 136 | this.label2.Name = "label2"; 137 | // 138 | // label1 139 | // 140 | resources.ApplyResources(this.label1, "label1"); 141 | this.label1.Name = "label1"; 142 | // 143 | // yearsNumeric 144 | // 145 | resources.ApplyResources(this.yearsNumeric, "yearsNumeric"); 146 | this.yearsNumeric.Name = "yearsNumeric"; 147 | // 148 | // monthNumeric 149 | // 150 | resources.ApplyResources(this.monthNumeric, "monthNumeric"); 151 | this.monthNumeric.Maximum = new decimal(new int[] { 152 | 11, 153 | 0, 154 | 0, 155 | 0}); 156 | this.monthNumeric.Name = "monthNumeric"; 157 | // 158 | // daysNumeric 159 | // 160 | resources.ApplyResources(this.daysNumeric, "daysNumeric"); 161 | this.daysNumeric.Maximum = new decimal(new int[] { 162 | 30, 163 | 0, 164 | 0, 165 | 0}); 166 | this.daysNumeric.Name = "daysNumeric"; 167 | // 168 | // label6 169 | // 170 | resources.ApplyResources(this.label6, "label6"); 171 | this.label6.Name = "label6"; 172 | // 173 | // CopyFrom 174 | // 175 | this.AcceptButton = this.button1; 176 | resources.ApplyResources(this, "$this"); 177 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 178 | this.CancelButton = this.button2; 179 | this.Controls.Add(this.label6); 180 | this.Controls.Add(this.groupBox1); 181 | this.Controls.Add(this.checkBox1); 182 | this.Controls.Add(this.button2); 183 | this.Controls.Add(this.button1); 184 | this.Controls.Add(this.textBox1); 185 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 186 | this.MaximizeBox = false; 187 | this.Name = "CopyFrom"; 188 | this.groupBox1.ResumeLayout(false); 189 | this.groupBox1.PerformLayout(); 190 | ((System.ComponentModel.ISupportInitialize)(this.maxMinutes)).EndInit(); 191 | ((System.ComponentModel.ISupportInitialize)(this.minMinutes)).EndInit(); 192 | ((System.ComponentModel.ISupportInitialize)(this.yearsNumeric)).EndInit(); 193 | ((System.ComponentModel.ISupportInitialize)(this.monthNumeric)).EndInit(); 194 | ((System.ComponentModel.ISupportInitialize)(this.daysNumeric)).EndInit(); 195 | this.ResumeLayout(false); 196 | this.PerformLayout(); 197 | 198 | } 199 | 200 | #endregion 201 | 202 | private System.Windows.Forms.TextBox textBox1; 203 | private System.Windows.Forms.Button button1; 204 | private System.Windows.Forms.Button button2; 205 | public System.Windows.Forms.CheckBox checkBox1; 206 | private System.Windows.Forms.GroupBox groupBox1; 207 | private System.Windows.Forms.NumericUpDown maxMinutes; 208 | private System.Windows.Forms.Label label5; 209 | private System.Windows.Forms.NumericUpDown minMinutes; 210 | private System.Windows.Forms.Label label4; 211 | private System.Windows.Forms.Label label3; 212 | private System.Windows.Forms.Label label2; 213 | private System.Windows.Forms.Label label1; 214 | private System.Windows.Forms.NumericUpDown yearsNumeric; 215 | private System.Windows.Forms.NumericUpDown monthNumeric; 216 | private System.Windows.Forms.NumericUpDown daysNumeric; 217 | private System.Windows.Forms.Label label6; 218 | } 219 | } -------------------------------------------------------------------------------- /PS3TrophyIsGood/CopyFrom.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Text.RegularExpressions; 7 | using System.Windows.Forms; 8 | 9 | namespace PS3TrophyIsGood 10 | { 11 | 12 | public partial class CopyFrom : Form 13 | { 14 | /// 15 | /// Class for havian a pair for use it later (you could do it generic as c++ Pair but to lazy 16 | /// 17 | public class Pair 18 | { 19 | public int Id { get; set; } 20 | public long Date { get; set; } 21 | public Pair(int id, long date) 22 | { 23 | Id = id; 24 | Date = date; 25 | } 26 | } 27 | 28 | public CopyFrom() 29 | { 30 | InitializeComponent(); 31 | groupBox1.Visible = false; 32 | } 33 | 34 | /// 35 | /// This get the timestamp from a profile(asuming is a legit one) then modify them to looks like they are legit but not a comple copy 36 | /// 37 | /// 38 | public IEnumerable smartCopy() 39 | { 40 | var trophies = copyFrom(textBox1.Text).ToList(); 41 | trophies.Sort((a, b) => a.Date.CompareTo(b.Date)); 42 | var rand = new Random(); 43 | var time = TimeSpan.FromDays((long)(yearsNumeric.Value * 365+ monthNumeric.Value * 30 + daysNumeric.Value)) + TimeSpan.FromSeconds(rand.Next((int)minMinutes.Value, (int)maxMinutes.Value)); 44 | var delta = Convert.ToInt64(time.TotalSeconds); 45 | for (int i = 0; i< trophies.Count-1; ++i) 46 | { 47 | if (trophies[i].Date == 0) continue; 48 | trophies[i].Date += delta; 49 | if (trophies[i +1].Date - trophies[i].Date > 60) delta += rand.Next((int)minMinutes.Value, (int)maxMinutes.Value); 50 | } 51 | trophies[trophies.Count -1].Date += delta; 52 | trophies.Sort((a, b) => a.Id.CompareTo(b.Id)); 53 | return trophies.Select(d=>d.Date); 54 | } 55 | 56 | public IEnumerable copyFrom() => copyFrom(textBox1.Text).Select(p => p.Date); 57 | 58 | /// 59 | /// Just parse and get the timestamps from a profile from https://psntrophyleaders.com 60 | /// 61 | /// 62 | /// 63 | private IEnumerable copyFrom(string url) 64 | { 65 | int i = 0; 66 | Regex regex = new Regex("\\s+\\d+"); 67 | using (WebClient client = new WebClient()) 68 | { 69 | client.Headers.Add("User-Agent: Other"); 70 | var x = regex.Matches(client.DownloadString(url)); 71 | foreach (Match match in x) 72 | yield return new Pair(i++,long.Parse(Regex.Match(match.Value, "\\d+").ToString())); 73 | } 74 | } 75 | 76 | private void checkBox1_CheckedChanged(object sender, EventArgs e) 77 | { 78 | if (checkBox1.Checked) groupBox1.Visible = true; 79 | else 80 | { 81 | groupBox1.Visible = false; 82 | daysNumeric.Value = 0; 83 | monthNumeric.Value = 0; 84 | yearsNumeric.Value = 0; 85 | minMinutes.Value = 0; 86 | maxMinutes.Value = 0; 87 | } 88 | 89 | } 90 | 91 | private void button1_Click(object sender, EventArgs e) 92 | { 93 | if (minMinutes.Value > maxMinutes.Value) 94 | MessageBox.Show(Properties.strings.MinCantBeGreaterThanMax); 95 | else if (Regex.IsMatch(textBox1.Text,"https://psntrophyleaders.com/user/view/" + "\\S+/\\S+")) 96 | DialogResult = DialogResult.OK; 97 | else MessageBox.Show(Properties.strings.CantFindGame); 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/CopyFrom.pt-BR.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Aceitar 122 | 123 | 124 | Cancelar 125 | 126 | 127 | 128 | 138, 17 129 | 130 | 131 | Aplicar cópia inteligente 132 | 133 | 134 | Opções 135 | 136 | 137 | 91, 13 138 | 139 | 140 | Minutos (máximo): 141 | 142 | 143 | Minutos (mínimo): 144 | 145 | 146 | 31, 13 147 | 148 | 149 | Anos 150 | 151 | 152 | 38, 13 153 | 154 | 155 | Meses 156 | 157 | 158 | 28, 13 159 | 160 | 161 | Dias 162 | 163 | 164 | 80, 13 165 | 166 | 167 | Copiar do perfil: 168 | 169 | 170 | Copiar do perfil 171 | 172 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/CopyFrom.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Cancel 122 | 123 | 124 | maxMinutes 125 | 126 | 127 | 128 | 336, 248 129 | 130 | 131 | groupBox1 132 | 133 | 134 | $this 135 | 136 | 137 | 93, 13 138 | 139 | 140 | 4 141 | 142 | 143 | 144 | True 145 | 146 | 147 | monthNumeric 148 | 149 | 150 | 82, 20 151 | 152 | 153 | True 154 | 155 | 156 | Accept 157 | 158 | 159 | label1 160 | 161 | 162 | 3, 97 163 | 164 | 165 | System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 166 | 167 | 168 | 109, 17 169 | 170 | 171 | 4 172 | 173 | 174 | groupBox1 175 | 176 | 177 | 6, 74 178 | 179 | 180 | 13, 9 181 | 182 | 183 | True 184 | 185 | 186 | 34, 13 187 | 188 | 189 | 0 190 | 191 | 192 | $this 193 | 194 | 195 | groupBox1 196 | 197 | 198 | 3 199 | 200 | 201 | True 202 | 203 | 204 | label3 205 | 206 | 207 | CopyFrom 208 | 209 | 210 | True 211 | 212 | 213 | 8 214 | 215 | 216 | 82, 20 217 | 218 | 219 | Apply Smart Copy 220 | 221 | 222 | 102, 35 223 | 224 | 225 | groupBox1 226 | 227 | 228 | 99, 19 229 | 230 | 231 | textBox1 232 | 233 | 234 | Options 235 | 236 | 237 | 75, 23 238 | 239 | 240 | 0 241 | 242 | 243 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 244 | 245 | 246 | 31, 13 247 | 248 | 249 | 314, 20 250 | 251 | 252 | 5 253 | 254 | 255 | 12, 28 256 | 257 | 258 | groupBox1 259 | 260 | 261 | yearsNumeric 262 | 263 | 264 | groupBox1 265 | 266 | 267 | label5 268 | 269 | 270 | System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 271 | 272 | 273 | 6, 13 274 | 275 | 276 | 13, 55 277 | 278 | 279 | 5 280 | 281 | 282 | 5 283 | 284 | 285 | 37, 13 286 | 287 | 288 | 9 289 | 290 | 291 | System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 292 | 293 | 294 | System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 295 | 296 | 297 | $this 298 | 299 | 300 | 1 301 | 302 | 303 | 1 304 | 305 | 306 | label4 307 | 308 | 309 | 94, 59 310 | 311 | 312 | 5 313 | 314 | 315 | Minimum minutes: 316 | 317 | 318 | 6, 35 319 | 320 | 321 | daysNumeric 322 | 323 | 324 | 325 | GrowAndShrink 326 | 327 | 328 | 10 329 | 330 | 331 | Years 332 | 333 | 334 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 335 | 336 | 337 | $this 338 | 339 | 340 | 11 341 | 342 | 343 | groupBox1 344 | 345 | 346 | 3 347 | 348 | 349 | 42, 20 350 | 351 | 352 | System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 353 | 354 | 355 | 313, 144 356 | 357 | 358 | 2 359 | 360 | 361 | 42, 20 362 | 363 | 364 | groupBox1 365 | 366 | 367 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 368 | 369 | 370 | 1 371 | 372 | 373 | System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 374 | 375 | 376 | 4 377 | 378 | 379 | button1 380 | 381 | 382 | True 383 | 384 | 385 | 6 386 | 387 | 388 | 2 389 | 390 | 391 | 251, 55 392 | 393 | 394 | 3 395 | 396 | 397 | System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 398 | 399 | 400 | True 401 | 402 | 403 | 9 404 | 405 | 406 | 2 407 | 408 | 409 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 410 | 411 | 412 | Maximum minutes: 413 | 414 | 415 | 0 416 | 417 | 418 | 0 419 | 420 | 421 | CopyFrom 422 | 423 | 424 | 6, 19 425 | 426 | 427 | 7 428 | 429 | 430 | groupBox1 431 | 432 | 433 | Month 434 | 435 | 436 | 7 437 | 438 | 439 | $this 440 | 441 | 442 | True 443 | 444 | 445 | 54, 19 446 | 447 | 448 | 13, 93 449 | 450 | 451 | 3, 58 452 | 453 | 454 | button2 455 | 456 | 457 | 1 458 | 459 | 460 | 90, 13 461 | 462 | 463 | $this 464 | 465 | 466 | System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 467 | 468 | 469 | 2 470 | 471 | 472 | checkBox1 473 | 474 | 475 | 60, 13 476 | 477 | 478 | Copy From: 479 | 480 | 481 | groupBox1 482 | 483 | 484 | System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 485 | 486 | 487 | 42, 20 488 | 489 | 490 | System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 491 | 492 | 493 | 6, 113 494 | 495 | 496 | groupBox1 497 | 498 | 499 | 75, 23 500 | 501 | 502 | System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 503 | 504 | 505 | 54, 35 506 | 507 | 508 | label2 509 | 510 | 511 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 512 | 513 | 514 | 6 515 | 516 | 517 | 8 518 | 519 | 520 | label6 521 | 522 | 523 | Days 524 | 525 | 526 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 527 | 528 | 529 | minMinutes 530 | 531 | 532 | True 533 | 534 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/DateTimePickForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS3TrophyIsGood { 2 | partial class DateTimePickForm { 3 | /// 4 | /// Required designer variable. 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// Clean up any resources being used. 10 | /// 11 | /// true if managed resources should be disposed; otherwise, false. 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | base.Dispose(disposing); 17 | } 18 | 19 | #region Windows Form Designer generated code 20 | 21 | /// 22 | /// Required method for Designer support - do not modify 23 | /// the contents of this method with the code editor. 24 | /// 25 | private void InitializeComponent() { 26 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DateTimePickForm)); 27 | this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); 28 | this.button1 = new System.Windows.Forms.Button(); 29 | this.button2 = new System.Windows.Forms.Button(); 30 | this.Title = new System.Windows.Forms.Label(); 31 | this.button3 = new System.Windows.Forms.Button(); 32 | this.SuspendLayout(); 33 | // 34 | // dateTimePicker1 35 | // 36 | resources.ApplyResources(this.dateTimePicker1, "dateTimePicker1"); 37 | this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 38 | this.dateTimePicker1.Name = "dateTimePicker1"; 39 | // 40 | // button1 41 | // 42 | resources.ApplyResources(this.button1, "button1"); 43 | this.button1.Name = "button1"; 44 | this.button1.UseVisualStyleBackColor = true; 45 | this.button1.Click += new System.EventHandler(this.button1_Click); 46 | // 47 | // button2 48 | // 49 | resources.ApplyResources(this.button2, "button2"); 50 | this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; 51 | this.button2.Name = "button2"; 52 | this.button2.UseVisualStyleBackColor = true; 53 | // 54 | // Title 55 | // 56 | resources.ApplyResources(this.Title, "Title"); 57 | this.Title.Name = "Title"; 58 | // 59 | // button3 60 | // 61 | resources.ApplyResources(this.button3, "button3"); 62 | this.button3.Name = "button3"; 63 | this.button3.UseVisualStyleBackColor = true; 64 | this.button3.Click += new System.EventHandler(this.button3_Click); 65 | // 66 | // DateTimePickForm 67 | // 68 | resources.ApplyResources(this, "$this"); 69 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 70 | this.Controls.Add(this.button3); 71 | this.Controls.Add(this.Title); 72 | this.Controls.Add(this.button2); 73 | this.Controls.Add(this.button1); 74 | this.Controls.Add(this.dateTimePicker1); 75 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 76 | this.MaximizeBox = false; 77 | this.MinimizeBox = false; 78 | this.Name = "DateTimePickForm"; 79 | this.ResumeLayout(false); 80 | this.PerformLayout(); 81 | 82 | } 83 | 84 | #endregion 85 | 86 | private System.Windows.Forms.Button button1; 87 | private System.Windows.Forms.Button button2; 88 | public System.Windows.Forms.DateTimePicker dateTimePicker1; 89 | private System.Windows.Forms.Button button3; 90 | public System.Windows.Forms.Label Title; 91 | } 92 | } -------------------------------------------------------------------------------- /PS3TrophyIsGood/DateTimePickForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace PS3TrophyIsGood { 5 | public partial class DateTimePickForm : Form { 6 | public DateTimePickForm(DateTime lastSyncTime) { 7 | InitializeComponent(); 8 | ps3Time = lastSyncTime; 9 | dateTimePicker1.CustomFormat = Properties.strings.DateFormatString; 10 | } 11 | 12 | private Random rand = new Random((int)DateTime.Now.Ticks); 13 | private DateTime ps3Time = new DateTime(2008, 1, 1); 14 | private void button3_Click(object sender, EventArgs e) { 15 | dateTimePicker1.Value = new DateTime(Utility.LongRandom(ps3Time.Ticks, DateTime.Now.Ticks, rand)); 16 | } 17 | 18 | private void button1_Click(object sender, EventArgs e) 19 | { 20 | if (DateTime.Compare(ps3Time, dateTimePicker1.Value) > 0) 21 | { 22 | MessageBox.Show(string.Format(Properties.strings.PsnSyncTime, ps3Time)); 23 | return; 24 | } 25 | DialogResult = DialogResult.OK; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/DateTimePickForm.pt-BR.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Confirmar 122 | 123 | 124 | Cancelar 125 | 126 | 127 | 128 | 120, 13 129 | 130 | 131 | Data/hora da conquista 132 | 133 | 134 | Aleatória 135 | 136 | 137 | Desbloquear troféu 138 | 139 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/DateTimePickForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 4 122 | 123 | 124 | 125 | 2 126 | 127 | 128 | 129 | 15, 30 130 | 131 | 132 | True 133 | 134 | 135 | 2 136 | 137 | 138 | 6, 13 139 | 140 | 141 | System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 142 | 143 | 144 | 75, 25 145 | 146 | 147 | yyyy/M/dd HH:mm:ss 148 | 149 | 150 | System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 151 | 152 | 153 | button2 154 | 155 | 156 | dateTimePicker1 157 | 158 | 159 | $this 160 | 161 | 162 | 0 163 | 164 | 165 | $this 166 | 167 | 168 | Cancel 169 | 170 | 171 | 3 172 | 173 | 174 | System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 175 | 176 | 177 | 12, 61 178 | 179 | 180 | 259, 96 181 | 182 | 183 | $this 184 | 185 | 186 | 0 187 | 188 | 189 | 75, 25 190 | 191 | 192 | Random 193 | 194 | 195 | 1 196 | 197 | 198 | button3 199 | 200 | 201 | System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 202 | 203 | 204 | DateTimePickForm 205 | 206 | 207 | System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 208 | 209 | 210 | 75, 25 211 | 212 | 213 | Set the Time for Trophy Obtainment 214 | 215 | 216 | 3 217 | 218 | 219 | 200, 20 220 | 221 | 222 | $this 223 | 224 | 225 | Title 226 | 227 | 228 | 4 229 | 230 | 231 | 175, 13 232 | 233 | 234 | 1 235 | 236 | 237 | button1 238 | 239 | 240 | System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 241 | 242 | 243 | Confirm 244 | 245 | 246 | 93, 61 247 | 248 | 249 | Unlock Trophy 250 | 251 | 252 | 173, 61 253 | 254 | 255 | 13, 14 256 | 257 | 258 | $this 259 | 260 | 261 | True 262 | 263 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/DateTimePickForm.zh-Hant.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 解鎖獎盃 122 | 123 | 124 | 確定 125 | 126 | 127 | 取消 128 | 129 | 130 | 隨機時間 131 | 132 | 133 | 設置獎盃獲得的時間 134 | 135 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace PS3TrophyIsGood { 2 | partial class Form1 { 3 | /// 4 | /// 設計工具所需的變數。 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// 清除任何使用中的資源。 10 | /// 11 | /// 如果應該處置 Managed 資源則為 true,否則為 false。 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | base.Dispose(disposing); 17 | } 18 | 19 | #region Windows Form 設計工具產生的程式碼 20 | 21 | /// 22 | /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器 23 | /// 修改這個方法的內容。 24 | /// 25 | private void InitializeComponent() { 26 | this.components = new System.ComponentModel.Container(); 27 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 28 | this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 29 | this.imageList1 = new System.Windows.Forms.ImageList(this.components); 30 | this.menuStrip1 = new System.Windows.Forms.MenuStrip(); 31 | this.檔案ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 32 | this.開啟ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 33 | this.存檔ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 34 | this.關閉檔案CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 35 | this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); 36 | this.關閉ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 37 | this.進階ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 38 | this.瞬間白金ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 39 | this.清除獎杯ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 40 | this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); 41 | this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); 42 | this.setRandomStartTimeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 43 | this.setRandomEndTimeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 44 | this.重新整理ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 45 | this.toolStripComboBox2 = new System.Windows.Forms.ToolStripComboBox(); 46 | this.toolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox(); 47 | this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); 48 | this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); 49 | this.label1 = new System.Windows.Forms.Label(); 50 | this.progressBar1 = new System.Windows.Forms.ProgressBar(); 51 | this.label2 = new System.Windows.Forms.Label(); 52 | this.label3 = new System.Windows.Forms.Label(); 53 | this.label4 = new System.Windows.Forms.Label(); 54 | this.listViewEx1 = new ListViewEx.ListViewEx(); 55 | this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 56 | this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 57 | this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 58 | this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 59 | this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 60 | this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 61 | this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 62 | this.columnHeader8 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 63 | this.isRpcs3Format = new System.Windows.Forms.ToolStripMenuItem(); 64 | this.menuStrip1.SuspendLayout(); 65 | this.SuspendLayout(); 66 | // 67 | // linkLabel1 68 | // 69 | resources.ApplyResources(this.linkLabel1, "linkLabel1"); 70 | this.linkLabel1.Name = "linkLabel1"; 71 | this.linkLabel1.TabStop = true; 72 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); 73 | // 74 | // imageList1 75 | // 76 | this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; 77 | resources.ApplyResources(this.imageList1, "imageList1"); 78 | this.imageList1.TransparentColor = System.Drawing.Color.Transparent; 79 | // 80 | // menuStrip1 81 | // 82 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 83 | this.檔案ToolStripMenuItem, 84 | this.進階ToolStripMenuItem, 85 | this.重新整理ToolStripMenuItem, 86 | this.toolStripComboBox2, 87 | this.toolStripComboBox1}); 88 | resources.ApplyResources(this.menuStrip1, "menuStrip1"); 89 | this.menuStrip1.Name = "menuStrip1"; 90 | this.menuStrip1.Click += new System.EventHandler(this.menuStrip1_Click); 91 | // 92 | // 檔案ToolStripMenuItem 93 | // 94 | this.檔案ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 95 | this.開啟ToolStripMenuItem, 96 | this.存檔ToolStripMenuItem, 97 | this.關閉檔案CToolStripMenuItem, 98 | this.isRpcs3Format, 99 | this.toolStripSeparator1, 100 | this.關閉ToolStripMenuItem}); 101 | this.檔案ToolStripMenuItem.Name = "檔案ToolStripMenuItem"; 102 | resources.ApplyResources(this.檔案ToolStripMenuItem, "檔案ToolStripMenuItem"); 103 | // 104 | // 開啟ToolStripMenuItem 105 | // 106 | this.開啟ToolStripMenuItem.Name = "開啟ToolStripMenuItem"; 107 | resources.ApplyResources(this.開啟ToolStripMenuItem, "開啟ToolStripMenuItem"); 108 | this.開啟ToolStripMenuItem.Click += new System.EventHandler(this.開啟ToolStripMenuItem_Click); 109 | // 110 | // 存檔ToolStripMenuItem 111 | // 112 | this.存檔ToolStripMenuItem.Name = "存檔ToolStripMenuItem"; 113 | resources.ApplyResources(this.存檔ToolStripMenuItem, "存檔ToolStripMenuItem"); 114 | this.存檔ToolStripMenuItem.Click += new System.EventHandler(this.存檔ToolStripMenuItem_Click); 115 | // 116 | // 關閉檔案CToolStripMenuItem 117 | // 118 | this.關閉檔案CToolStripMenuItem.Name = "關閉檔案CToolStripMenuItem"; 119 | resources.ApplyResources(this.關閉檔案CToolStripMenuItem, "關閉檔案CToolStripMenuItem"); 120 | this.關閉檔案CToolStripMenuItem.Click += new System.EventHandler(this.關閉檔案CToolStripMenuItem_Click); 121 | // 122 | // toolStripSeparator1 123 | // 124 | this.toolStripSeparator1.Name = "toolStripSeparator1"; 125 | resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); 126 | // 127 | // 關閉ToolStripMenuItem 128 | // 129 | this.關閉ToolStripMenuItem.Name = "關閉ToolStripMenuItem"; 130 | resources.ApplyResources(this.關閉ToolStripMenuItem, "關閉ToolStripMenuItem"); 131 | this.關閉ToolStripMenuItem.Click += new System.EventHandler(this.關閉ToolStripMenuItem_Click); 132 | // 133 | // 進階ToolStripMenuItem 134 | // 135 | this.進階ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 136 | this.瞬間白金ToolStripMenuItem, 137 | this.清除獎杯ToolStripMenuItem, 138 | this.toolStripMenuItem1, 139 | this.toolStripSeparator2, 140 | this.setRandomStartTimeToolStripMenuItem, 141 | this.setRandomEndTimeToolStripMenuItem}); 142 | resources.ApplyResources(this.進階ToolStripMenuItem, "進階ToolStripMenuItem"); 143 | this.進階ToolStripMenuItem.Name = "進階ToolStripMenuItem"; 144 | // 145 | // 瞬間白金ToolStripMenuItem 146 | // 147 | this.瞬間白金ToolStripMenuItem.Name = "瞬間白金ToolStripMenuItem"; 148 | resources.ApplyResources(this.瞬間白金ToolStripMenuItem, "瞬間白金ToolStripMenuItem"); 149 | this.瞬間白金ToolStripMenuItem.Click += new System.EventHandler(this.瞬間白金ToolStripMenuItem_Click); 150 | // 151 | // 清除獎杯ToolStripMenuItem 152 | // 153 | this.清除獎杯ToolStripMenuItem.Name = "清除獎杯ToolStripMenuItem"; 154 | resources.ApplyResources(this.清除獎杯ToolStripMenuItem, "清除獎杯ToolStripMenuItem"); 155 | this.清除獎杯ToolStripMenuItem.Click += new System.EventHandler(this.清除獎杯ToolStripMenuItem_Click); 156 | // 157 | // toolStripMenuItem1 158 | // 159 | this.toolStripMenuItem1.Name = "toolStripMenuItem1"; 160 | resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); 161 | this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click); 162 | // 163 | // toolStripSeparator2 164 | // 165 | this.toolStripSeparator2.Name = "toolStripSeparator2"; 166 | resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); 167 | // 168 | // setRandomStartTimeToolStripMenuItem 169 | // 170 | this.setRandomStartTimeToolStripMenuItem.Name = "setRandomStartTimeToolStripMenuItem"; 171 | resources.ApplyResources(this.setRandomStartTimeToolStripMenuItem, "setRandomStartTimeToolStripMenuItem"); 172 | this.setRandomStartTimeToolStripMenuItem.Click += new System.EventHandler(this.setRandomStartTimeToolStripMenuItem_Click); 173 | // 174 | // setRandomEndTimeToolStripMenuItem 175 | // 176 | this.setRandomEndTimeToolStripMenuItem.Name = "setRandomEndTimeToolStripMenuItem"; 177 | resources.ApplyResources(this.setRandomEndTimeToolStripMenuItem, "setRandomEndTimeToolStripMenuItem"); 178 | this.setRandomEndTimeToolStripMenuItem.Click += new System.EventHandler(this.setRandomEndTimeToolStripMenuItem_Click); 179 | // 180 | // 重新整理ToolStripMenuItem 181 | // 182 | resources.ApplyResources(this.重新整理ToolStripMenuItem, "重新整理ToolStripMenuItem"); 183 | this.重新整理ToolStripMenuItem.Name = "重新整理ToolStripMenuItem"; 184 | this.重新整理ToolStripMenuItem.Click += new System.EventHandler(this.重新整理ToolStripMenuItem_Click); 185 | // 186 | // toolStripComboBox2 187 | // 188 | this.toolStripComboBox2.Name = "toolStripComboBox2"; 189 | resources.ApplyResources(this.toolStripComboBox2, "toolStripComboBox2"); 190 | // 191 | // toolStripComboBox1 192 | // 193 | this.toolStripComboBox1.Items.AddRange(new object[] { 194 | resources.GetString("toolStripComboBox1.Items"), 195 | resources.GetString("toolStripComboBox1.Items1"), 196 | resources.GetString("toolStripComboBox1.Items2")}); 197 | this.toolStripComboBox1.Name = "toolStripComboBox1"; 198 | resources.ApplyResources(this.toolStripComboBox1, "toolStripComboBox1"); 199 | this.toolStripComboBox1.SelectedIndexChanged += new System.EventHandler(this.toolStripComboBox1_SelectedIndexChanged); 200 | // 201 | // dateTimePicker1 202 | // 203 | resources.ApplyResources(this.dateTimePicker1, "dateTimePicker1"); 204 | this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom; 205 | this.dateTimePicker1.Name = "dateTimePicker1"; 206 | this.dateTimePicker1.TabStop = false; 207 | // 208 | // label1 209 | // 210 | resources.ApplyResources(this.label1, "label1"); 211 | this.label1.Name = "label1"; 212 | // 213 | // progressBar1 214 | // 215 | resources.ApplyResources(this.progressBar1, "progressBar1"); 216 | this.progressBar1.Name = "progressBar1"; 217 | // 218 | // label2 219 | // 220 | resources.ApplyResources(this.label2, "label2"); 221 | this.label2.Name = "label2"; 222 | // 223 | // label3 224 | // 225 | resources.ApplyResources(this.label3, "label3"); 226 | this.label3.Name = "label3"; 227 | // 228 | // label4 229 | // 230 | resources.ApplyResources(this.label4, "label4"); 231 | this.label4.Name = "label4"; 232 | // 233 | // listViewEx1 234 | // 235 | this.listViewEx1.AllowColumnReorder = true; 236 | this.listViewEx1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 237 | this.columnHeader1, 238 | this.columnHeader2, 239 | this.columnHeader3, 240 | this.columnHeader4, 241 | this.columnHeader5, 242 | this.columnHeader7, 243 | this.columnHeader6, 244 | this.columnHeader8}); 245 | resources.ApplyResources(this.listViewEx1, "listViewEx1"); 246 | this.listViewEx1.DoubleClickActivation = false; 247 | this.listViewEx1.FullRowSelect = true; 248 | this.listViewEx1.HideSelection = false; 249 | this.listViewEx1.LargeImageList = this.imageList1; 250 | this.listViewEx1.Name = "listViewEx1"; 251 | this.listViewEx1.SmallImageList = this.imageList1; 252 | this.listViewEx1.UseCompatibleStateImageBehavior = false; 253 | this.listViewEx1.View = System.Windows.Forms.View.Details; 254 | this.listViewEx1.SubItemClicked += new ListViewEx.SubItemEventHandler(this.listViewEx1_SubItemClicked); 255 | this.listViewEx1.SubItemEndEditing += new ListViewEx.SubItemEndEditingEventHandler(this.listViewEx1_SubItemEndEditing); 256 | this.listViewEx1.DoubleClick += new System.EventHandler(this.listViewEx1_DoubleClick); 257 | // 258 | // columnHeader1 259 | // 260 | resources.ApplyResources(this.columnHeader1, "columnHeader1"); 261 | // 262 | // columnHeader2 263 | // 264 | resources.ApplyResources(this.columnHeader2, "columnHeader2"); 265 | // 266 | // columnHeader3 267 | // 268 | resources.ApplyResources(this.columnHeader3, "columnHeader3"); 269 | // 270 | // columnHeader4 271 | // 272 | resources.ApplyResources(this.columnHeader4, "columnHeader4"); 273 | // 274 | // columnHeader5 275 | // 276 | resources.ApplyResources(this.columnHeader5, "columnHeader5"); 277 | // 278 | // columnHeader7 279 | // 280 | this.columnHeader7.Tag = "Sincronizado"; 281 | resources.ApplyResources(this.columnHeader7, "columnHeader7"); 282 | // 283 | // columnHeader6 284 | // 285 | resources.ApplyResources(this.columnHeader6, "columnHeader6"); 286 | // 287 | // columnHeader8 288 | // 289 | resources.ApplyResources(this.columnHeader8, "columnHeader8"); 290 | // 291 | this.isRpcs3Format.Name = "isRpcs3Format"; 292 | resources.ApplyResources(this.isRpcs3Format, "isRpcs3Format"); 293 | this.isRpcs3Format.Click += new System.EventHandler(this.toggleRPCS3TrophyFormatToolStripMenuItem_Click); 294 | // Form1 295 | // 296 | this.AllowDrop = true; 297 | resources.ApplyResources(this, "$this"); 298 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 299 | this.Controls.Add(this.dateTimePicker1); 300 | this.Controls.Add(this.listViewEx1); 301 | this.Controls.Add(this.label4); 302 | this.Controls.Add(this.label3); 303 | this.Controls.Add(this.label2); 304 | this.Controls.Add(this.progressBar1); 305 | this.Controls.Add(this.label1); 306 | this.Controls.Add(this.linkLabel1); 307 | this.Controls.Add(this.menuStrip1); 308 | this.MainMenuStrip = this.menuStrip1; 309 | this.Name = "Form1"; 310 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); 311 | this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); 312 | this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); 313 | this.menuStrip1.ResumeLayout(false); 314 | this.menuStrip1.PerformLayout(); 315 | this.ResumeLayout(false); 316 | this.PerformLayout(); 317 | 318 | } 319 | 320 | #endregion 321 | 322 | private System.Windows.Forms.LinkLabel linkLabel1; 323 | private ListViewEx.ListViewEx listViewEx1; 324 | private System.Windows.Forms.MenuStrip menuStrip1; 325 | private System.Windows.Forms.ToolStripMenuItem 檔案ToolStripMenuItem; 326 | private System.Windows.Forms.ToolStripMenuItem 開啟ToolStripMenuItem; 327 | private System.Windows.Forms.ToolStripMenuItem 存檔ToolStripMenuItem; 328 | private System.Windows.Forms.ToolStripMenuItem 關閉ToolStripMenuItem; 329 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; 330 | private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; 331 | private System.Windows.Forms.ImageList imageList1; 332 | private System.Windows.Forms.ColumnHeader columnHeader1; 333 | private System.Windows.Forms.ColumnHeader columnHeader2; 334 | private System.Windows.Forms.ColumnHeader columnHeader3; 335 | private System.Windows.Forms.ColumnHeader columnHeader4; 336 | private System.Windows.Forms.ColumnHeader columnHeader5; 337 | private System.Windows.Forms.ColumnHeader columnHeader6; 338 | private System.Windows.Forms.DateTimePicker dateTimePicker1; 339 | private System.Windows.Forms.ToolStripMenuItem 進階ToolStripMenuItem; 340 | private System.Windows.Forms.Label label1; 341 | private System.Windows.Forms.ProgressBar progressBar1; 342 | private System.Windows.Forms.Label label2; 343 | private System.Windows.Forms.Label label3; 344 | private System.Windows.Forms.Label label4; 345 | private System.Windows.Forms.ToolStripMenuItem 重新整理ToolStripMenuItem; 346 | private System.Windows.Forms.ColumnHeader columnHeader7; 347 | private System.Windows.Forms.ToolStripMenuItem 關閉檔案CToolStripMenuItem; 348 | private System.Windows.Forms.ToolStripMenuItem 瞬間白金ToolStripMenuItem; 349 | private System.Windows.Forms.ToolStripMenuItem 清除獎杯ToolStripMenuItem; 350 | private System.Windows.Forms.ToolStripComboBox toolStripComboBox1; 351 | private System.Windows.Forms.ToolStripMenuItem setRandomStartTimeToolStripMenuItem; 352 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; 353 | private System.Windows.Forms.ToolStripMenuItem setRandomEndTimeToolStripMenuItem; 354 | private System.Windows.Forms.ColumnHeader columnHeader8; 355 | private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; 356 | private System.Windows.Forms.ToolStripComboBox toolStripComboBox2; 357 | private System.Windows.Forms.ToolStripMenuItem isRpcs3Format; 358 | } 359 | } 360 | 361 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Globalization; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Threading; 7 | using System.Windows.Forms; 8 | using TROPHYParser; 9 | 10 | namespace PS3TrophyIsGood 11 | { 12 | public partial class Form1 : Form 13 | { 14 | private const long MINIMUM_POSSIBLE_DATE = 633347424000000000; 15 | 16 | TROPCONF tconf; 17 | TROPTRNS tpsn; 18 | TROPUSR tusr; 19 | string path; 20 | string pathTemp; 21 | DateTimePickForm dtpForm = null; 22 | DateTimePickForm dtpfForInstant = null; 23 | CopyFrom copyFrom = null; 24 | bool haveBeenEdited = false; 25 | 26 | DateTime ps3Time = new DateTime(MINIMUM_POSSIBLE_DATE); 27 | DateTime lastSyncTrophyTime = new DateTime(MINIMUM_POSSIBLE_DATE); 28 | DateTime randomEndTime = DateTime.Now; 29 | 30 | bool isOpen = false; 31 | int baseGamaCount; 32 | 33 | private string txtDateTimeTmp; 34 | 35 | public Form1() 36 | { 37 | CultureInfo curinfo = null; 38 | switch (Properties.Settings.Default.Language) 39 | { 40 | case 0: 41 | curinfo = new CultureInfo("zh-TW"); 42 | break; 43 | case 2: 44 | curinfo = new CultureInfo("pt-BR"); 45 | break; 46 | case 1: 47 | default: 48 | curinfo = CultureInfo.CreateSpecificCulture("en"); 49 | break; 50 | } 51 | 52 | Thread.CurrentThread.CurrentCulture = curinfo; 53 | Thread.CurrentThread.CurrentUICulture = curinfo; 54 | InitializeComponent(); 55 | toolStripComboBox1.SelectedIndexChanged -= toolStripComboBox1_SelectedIndexChanged; 56 | toolStripComboBox1.SelectedIndex = Properties.Settings.Default.Language; 57 | toolStripComboBox1.SelectedIndexChanged += toolStripComboBox1_SelectedIndexChanged; 58 | Directory.CreateDirectory("profiles"); 59 | var profiles = new DirectoryInfo("profiles").GetFiles("*.sfo").Select(p => p.Name).ToArray(); 60 | toolStripComboBox2.Items.Add("Default Profile"); 61 | toolStripComboBox2.Items.AddRange(profiles); 62 | toolStripComboBox2.SelectedIndex = 0; 63 | dateTimePicker1.CustomFormat = Properties.strings.DateFormatString; 64 | copyFrom = new CopyFrom(); 65 | } 66 | 67 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 68 | { 69 | System.Diagnostics.Process.Start("https://github.com/darkautism/PS3TrophyIsGood"); 70 | System.Diagnostics.Process.Start("https://www.youtube.com/user/TheDarkNachoXD"); 71 | } 72 | 73 | private void 關閉ToolStripMenuItem_Click(object sender, EventArgs e) 74 | { 75 | CloseFile(); 76 | Application.Exit(); 77 | } 78 | 79 | private void 開啟ToolStripMenuItem_Click(object sender, EventArgs e) 80 | { 81 | if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 82 | { 83 | OpenFile(folderBrowserDialog1.SelectedPath); 84 | } 85 | } 86 | 87 | private bool ValidateSelectedDate(DateTime selectedDate) 88 | { 89 | if (DateTime.Compare(lastSyncTrophyTime, selectedDate) > 0) 90 | { 91 | MessageBox.Show(string.Format(Properties.strings.PsnSyncTime, lastSyncTrophyTime.ToString(Properties.strings.DateFormatString))); 92 | return false; 93 | } 94 | return true; 95 | } 96 | 97 | private void DeleteTrophy(int trophyId, ListViewItem lvi) 98 | { 99 | if (IsTrophySync(trophyId)) 100 | { 101 | MessageBox.Show(Properties.strings.SyncedTrophyCanNotEdit); 102 | } 103 | else 104 | if (trophyId != 0 && tconf[trophyId].gid == 0 && IsTrophyGot(0)) 105 | { 106 | MessageBox.Show(Properties.strings.CantLoclPlatinumBeforOther); 107 | } 108 | else 109 | if (MessageBox.Show(Properties.strings.DeleteTrophyConfirm, Properties.strings.Delete, MessageBoxButtons.YesNo) == DialogResult.Yes) 110 | { 111 | tpsn.DeleteTrophyByID(trophyId); 112 | tusr.LockTrophy(trophyId); 113 | lvi.SubItems[4].Text = Properties.strings.no; 114 | lvi.BackColor = Color.LightGray; 115 | lvi.SubItems[6].Text = string.Empty; 116 | CompletionRates(); 117 | haveBeenEdited = true; 118 | } 119 | } 120 | 121 | private bool UnlockTrophy(int trophyId, DateTime trophyTime, ListViewItem lvi) 122 | { 123 | if (trophyId == 0 && tconf.HasPlatinium && (GetCountBaseTrophiesGot() < baseGamaCount)) 124 | { 125 | MessageBox.Show(Properties.strings.CantUnloclPlatinumBeforOther); 126 | return false; 127 | } 128 | else 129 | { 130 | if (ValidateSelectedDate(trophyTime)) 131 | { 132 | try 133 | { 134 | tpsn.PutTrophy(trophyId, tusr.trophyTypeTable[trophyId].Type, trophyTime); 135 | tusr.UnlockTrophy(trophyId, trophyTime); 136 | lvi.SubItems[4].Text = Properties.strings.yes; 137 | lvi.BackColor = Color.White; 138 | lvi.SubItems[6].Text = trophyTime.ToString(Properties.strings.DateFormatString); 139 | CompletionRates(); 140 | haveBeenEdited = true; 141 | return true; 142 | } 143 | catch (Exception ex) 144 | { 145 | MessageBox.Show(ex.Message); 146 | return false; 147 | } 148 | } 149 | else 150 | { 151 | return false; 152 | } 153 | } 154 | } 155 | 156 | private bool ChangeTrophyTime(int trophyId, DateTime trophyTime, ListViewItem lvi) 157 | { 158 | if (IsTrophySync(trophyId)) 159 | { 160 | MessageBox.Show(Properties.strings.SyncedTrophyCanNotEdit); 161 | return false; 162 | } 163 | else 164 | { 165 | if (ValidateSelectedDate(trophyTime)) 166 | { 167 | try 168 | { 169 | tpsn.ChangeTime(trophyId, trophyTime); 170 | TROPUSR.TrophyTimeInfo tti = tusr.trophyTimeInfoTable[trophyId]; 171 | tti.Time = trophyTime; 172 | tusr.trophyTimeInfoTable[trophyId] = tti; 173 | lvi.SubItems[6].Text = trophyTime.ToString(Properties.strings.DateFormatString); 174 | haveBeenEdited = true; 175 | return true; 176 | } 177 | catch (Exception ex) 178 | { 179 | MessageBox.Show(ex.Message); 180 | return false; 181 | } 182 | } 183 | else 184 | { 185 | return false; 186 | } 187 | } 188 | } 189 | 190 | private void RefreshComponents() 191 | { 192 | EmptyAllComponents(); 193 | listViewEx1.BeginUpdate(); 194 | for (int i = 0; i < tconf.Count; i++) 195 | { 196 | listViewEx1.LargeImageList.Images.Add("", Image.FromFile(path + @"\TROP" + string.Format("{0:000}", tconf[i].id) + ".PNG")); 197 | ListViewItem lvi = new ListViewItem(); 198 | lvi.ImageIndex = i; // 在這裡imageid其實等於trophy ID ex 白金0號, 1... 199 | lvi.Text = tconf[i].name; 200 | lvi.SubItems.Add(tconf[i].detail); 201 | lvi.SubItems.Add(tconf[i].ttype); 202 | lvi.SubItems.Add(tconf[i].hidden == "yes" ? Properties.strings.yes : Properties.strings.no); 203 | if (tpsn[i].HasValue) 204 | { 205 | lvi.SubItems.Add(Properties.strings.yes); 206 | lvi.SubItems.Add(tpsn[i].Value.IsSync ? Properties.strings.yes : Properties.strings.no); 207 | lvi.SubItems.Add(tpsn[i].Value.Time.ToString(Properties.strings.DateFormatString)); 208 | lvi.BackColor = (tpsn[i].Value.IsSync ? Color.LightPink : lvi.BackColor = Color.White); 209 | } 210 | else 211 | { 212 | lvi.SubItems.Add(tusr.trophyTimeInfoTable[i].IsGet ? Properties.strings.yes : Properties.strings.no); 213 | lvi.SubItems.Add(tusr.trophyTimeInfoTable[i].IsSync ? Properties.strings.yes : Properties.strings.no); 214 | 215 | var tropTimeTxt = string.Empty; 216 | if (tusr.trophyTimeInfoTable[i].Time.Ticks > 0) 217 | { 218 | tropTimeTxt = tusr.trophyTimeInfoTable[i].Time.ToString(Properties.strings.DateFormatString); 219 | } 220 | lvi.SubItems.Add(tropTimeTxt); 221 | 222 | if (tusr.trophyTimeInfoTable[i].IsSync) 223 | lvi.BackColor = Color.LightPink; 224 | else if (tusr.trophyTimeInfoTable[i].IsGet) 225 | lvi.BackColor = Color.White; 226 | else 227 | lvi.BackColor = Color.LightGray; 228 | } 229 | if (tconf[i].gid == 0) 230 | { 231 | lvi.SubItems.Add("BaseGame"); 232 | baseGamaCount = i; 233 | } 234 | else lvi.SubItems.Add($"DLC{tconf[i].gid}"); 235 | 236 | listViewEx1.Items.Add(lvi); 237 | } 238 | listViewEx1.EndUpdate(); 239 | CompletionRates(); 240 | } 241 | 242 | private void EmptyAllComponents() 243 | { 244 | listViewEx1.Items.Clear(); 245 | listViewEx1.LargeImageList.Images.Clear(); 246 | listViewEx1.LargeImageList.ImageSize = new Size(50, 50); 247 | this.Text = Application.ProductName; 248 | progressBar1.Maximum = 100; 249 | progressBar1.Value = 0; 250 | label2.Text = "00/00"; 251 | label4.Text = "000/000"; 252 | } 253 | 254 | private void CompletionRates() 255 | { 256 | int totalGrade = 0, getGrade = 0, isGetTrophyNumber = 0; 257 | for (int i = 0; i < tconf.Count; i++) 258 | { 259 | switch ((TropType)tusr.trophyTypeTable[i].Type) 260 | { 261 | case TropType.Platinum: 262 | totalGrade += (int)TropGrade.Platinum; 263 | getGrade += IsTrophySync(i) ? (int)TropGrade.Platinum : 0; 264 | break; 265 | case TropType.Gold: 266 | totalGrade += (int)TropGrade.Gold; 267 | getGrade += IsTrophySync(i) ? (int)TropGrade.Gold : 0; 268 | break; 269 | case TropType.Silver: 270 | totalGrade += (int)TropGrade.Silver; 271 | getGrade += IsTrophySync(i) ? (int)TropGrade.Silver : 0; 272 | break; 273 | case TropType.Bronze: 274 | totalGrade += (int)TropGrade.Bronze; 275 | getGrade += IsTrophySync(i) ? (int)TropGrade.Bronze : 0; 276 | break; 277 | } 278 | 279 | if (IsTrophySync(i)) isGetTrophyNumber++; 280 | } 281 | progressBar1.Maximum = totalGrade; 282 | progressBar1.Value = getGrade; 283 | label2.Text = isGetTrophyNumber + "/" + tconf.Count; 284 | label4.Text = getGrade + "/" + totalGrade; 285 | this.Text = Application.ProductName + "-[" + tconf.title_name + "]"; 286 | } 287 | 288 | private bool IsTrophySync(int trophyID) 289 | { 290 | return (tpsn[trophyID].HasValue && tpsn[trophyID].Value.IsSync) || tusr.trophyTimeInfoTable[trophyID].IsSync; 291 | } 292 | 293 | private bool IsTrophyGot(int trophyID) 294 | { 295 | return (!isRpcs3Format.Checked && tpsn[trophyID].HasValue) || tusr.trophyTimeInfoTable[trophyID].IsGet; 296 | } 297 | 298 | private int GetCountBaseTrophiesGot() 299 | { 300 | int countBaseTrophiesGot = 0; 301 | for (int i = 0; i < tconf.trophys.Count; i++) 302 | { 303 | if (tconf[i].gid == 0 && IsTrophyGot(i)) 304 | { 305 | countBaseTrophiesGot++; 306 | } 307 | } 308 | return countBaseTrophiesGot; 309 | } 310 | 311 | private void listViewEx1_SubItemClicked(object sender, ListViewEx.SubItemEventArgs e) 312 | { 313 | int trophyID = e.Item.ImageIndex;// 在這裡imageid其實等於trophy ID ex 白金0號, 1... 314 | if (e.SubItem == 6 && !IsTrophySync(trophyID)) 315 | { 316 | DateTime trophyTime = DateTime.Now; 317 | if (IsTrophyGot(trophyID)) 318 | { 319 | if (tpsn[trophyID].HasValue) 320 | { 321 | trophyTime = tpsn[trophyID].Value.Time; 322 | } 323 | else 324 | { 325 | trophyTime = tusr.trophyTimeInfoTable[trophyID].Time; 326 | } 327 | } 328 | txtDateTimeTmp = e.Item.SubItems[e.SubItem].Text; 329 | e.Item.SubItems[e.SubItem].Text = trophyTime.ToString(Properties.strings.DateFormatString); 330 | listViewEx1.StartEditing(dateTimePicker1, e.Item, e.SubItem); 331 | } 332 | } 333 | 334 | private void Form1_DragEnter(object sender, DragEventArgs e) 335 | { 336 | if (e.Data.GetDataPresent(DataFormats.FileDrop)) 337 | { 338 | String[] files = (String[])e.Data.GetData(DataFormats.FileDrop); 339 | if (Directory.Exists(files[0])) 340 | { 341 | e.Effect = DragDropEffects.All; 342 | } 343 | } 344 | } 345 | 346 | private void Form1_DragDrop(object sender, DragEventArgs e) 347 | { 348 | String[] files = (String[])e.Data.GetData(DataFormats.FileDrop); 349 | OpenFile(files[0]); 350 | } 351 | 352 | private void 重新整理ToolStripMenuItem_Click(object sender, EventArgs e) 353 | { 354 | RefreshComponents(); 355 | } 356 | 357 | private void listViewEx1_SubItemEndEditing(object sender, ListViewEx.SubItemEndEditingEventArgs e) 358 | { 359 | if (isOpen) 360 | { 361 | DateTime selectedDate = Convert.ToDateTime(e.DisplayText); 362 | var trophyID = e.Item.ImageIndex; 363 | ListViewItem lvi = ((ListView)sender).SelectedItems[0]; 364 | bool trophyChanged; 365 | if (tpsn[trophyID].HasValue) 366 | { 367 | trophyChanged = ChangeTrophyTime(trophyID, selectedDate, lvi); 368 | } 369 | else 370 | { 371 | trophyChanged = UnlockTrophy(trophyID, selectedDate, lvi); 372 | } 373 | 374 | if (!trophyChanged) 375 | { 376 | e.DisplayText = txtDateTimeTmp; 377 | } 378 | } 379 | } 380 | 381 | private void listViewEx1_DoubleClick(object sender, EventArgs e) 382 | { 383 | int trophyID = ((ListView)sender).SelectedItems[0].ImageIndex;// 在這裡imageid其實等於trophy ID ex 白金0號, 1... 384 | ListViewItem lvi = ((ListView)sender).SelectedItems[0]; 385 | if (IsTrophySync(trophyID)) 386 | { // 尚未同步的才可編輯 387 | MessageBox.Show(Properties.strings.SyncedTrophyCanNotEdit); 388 | } 389 | else if (tpsn[trophyID].HasValue || (isRpcs3Format.Checked && IsTrophyGot(trophyID))) 390 | { 391 | DeleteTrophy(trophyID, lvi); 392 | } 393 | else 394 | { // nonget 395 | if (trophyID == 0 && tconf.HasPlatinium && (GetCountBaseTrophiesGot() < baseGamaCount)) 396 | { 397 | MessageBox.Show(Properties.strings.CantUnloclPlatinumBeforOther); 398 | } 399 | else if (dtpForm.ShowDialog(this) == DialogResult.OK) 400 | { 401 | UnlockTrophy(trophyID, dtpForm.dateTimePicker1.Value, lvi); 402 | } 403 | } 404 | } 405 | 406 | private void 存檔ToolStripMenuItem_Click(object sender, EventArgs e) 407 | { 408 | SaveFile(); 409 | } 410 | 411 | private void 關閉檔案CToolStripMenuItem_Click(object sender, EventArgs e) 412 | { 413 | CloseFile(); 414 | } 415 | 416 | private DateTime LastTrophyTime() 417 | { 418 | if (DateTime.Compare(tpsn.LastTrophyTime, tusr.LastTrophyTime) > 0) 419 | { 420 | return tpsn.LastTrophyTime; 421 | } 422 | return tusr.LastTrophyTime; 423 | } 424 | 425 | private void OpenFile(string path_in) 426 | { 427 | try 428 | { 429 | if (isOpen) 430 | { 431 | CloseFile(); 432 | } 433 | path = path_in; 434 | pathTemp = Utility.CopyTrophyDirToTemp(path_in); 435 | Utility.decryptTrophy(pathTemp); 436 | tconf = new TROPCONF(pathTemp, isRpcs3Format.Checked); 437 | tpsn = new TROPTRNS(pathTemp, isRpcs3Format.Checked); 438 | tusr = new TROPUSR(pathTemp, isRpcs3Format.Checked); 439 | 440 | lastSyncTrophyTime = tusr.LastSyncTime; 441 | if (DateTime.Compare(tpsn.LastSyncTime, tusr.LastSyncTime) > 0) 442 | lastSyncTrophyTime = tpsn.LastSyncTime; 443 | 444 | ps3Time = lastSyncTrophyTime; 445 | dtpForm = new DateTimePickForm(ps3Time); 446 | dtpfForInstant = new DateTimePickForm(ps3Time); 447 | 448 | RefreshComponents(); 449 | isOpen = true; 450 | 重新整理ToolStripMenuItem.Enabled = true; 451 | 進階ToolStripMenuItem.Enabled = true; 452 | } 453 | catch (FileNotFoundException ex) 454 | { 455 | tconf = null; 456 | tpsn = null; 457 | tusr = null; 458 | GC.Collect(); 459 | MessageBox.Show(string.Format(Properties.strings.FileNotFoundMsg, Path.GetFileName(ex.FileName))); 460 | } 461 | catch (Exception ex) 462 | { 463 | tconf = null; 464 | tpsn = null; 465 | tusr = null; 466 | GC.Collect(); 467 | Console.WriteLine(ex.StackTrace); 468 | MessageBox.Show(ex.Message); 469 | } 470 | } 471 | 472 | private void SaveFile() 473 | { 474 | if (isOpen) 475 | { 476 | if (listViewEx1.IsEditing) 477 | listViewEx1.EndEditing(true); 478 | tpsn.Save(); 479 | tusr.Save(); 480 | haveBeenEdited = false; 481 | string encPathTemp = Utility.GetTemporaryDirectory(); 482 | try 483 | { 484 | Utility.CopyTrophyData(pathTemp, encPathTemp, false); 485 | Utility.encryptTrophy(encPathTemp, toolStripComboBox2.Text); 486 | Utility.CopyTrophyData(encPathTemp, path, true); 487 | } 488 | finally 489 | { 490 | Utility.DeleteDirectory(encPathTemp); 491 | } 492 | RefreshComponents(); 493 | } 494 | } 495 | 496 | public bool CloseFile() 497 | { 498 | if (listViewEx1.IsEditing) 499 | listViewEx1.EndEditing(true); 500 | if (haveBeenEdited) 501 | { 502 | DialogResult dr = MessageBox.Show(Properties.strings.CloseConfirm, Properties.strings.Close, MessageBoxButtons.YesNoCancel); 503 | if (dr == DialogResult.Yes) 504 | { 505 | SaveFile(); 506 | } 507 | else if (dr == DialogResult.No) 508 | { 509 | } 510 | else 511 | { 512 | return false; 513 | } 514 | } 515 | 516 | tpsn = null; 517 | tusr = null; 518 | tconf = null; 519 | path = string.Empty; 520 | pathTemp = string.Empty; 521 | haveBeenEdited = false; 522 | 重新整理ToolStripMenuItem.Enabled = false; 523 | 進階ToolStripMenuItem.Enabled = false; 524 | isOpen = false; 525 | EmptyAllComponents(); 526 | if (!string.IsNullOrEmpty(pathTemp)) 527 | { 528 | Utility.DeleteDirectory(new DirectoryInfo(pathTemp).Parent.FullName); 529 | } 530 | return true; 531 | } 532 | 533 | private void Form1_FormClosing(object sender, FormClosingEventArgs e) 534 | { 535 | if (isOpen) 536 | { 537 | e.Cancel = !CloseFile(); 538 | } 539 | } 540 | 541 | private void 瞬間白金ToolStripMenuItem_Click(object sender, EventArgs e) 542 | { 543 | Random rand = new Random((int)DateTime.Now.Ticks); 544 | int i; 545 | 546 | //Base game 547 | for (i = 1; i < tusr.trophyTimeInfoTable.Count && tconf[i].gid == 0; i++) 548 | { 549 | if (!IsTrophyGot(i)) 550 | { 551 | tusr.UnlockTrophy(i, new DateTime(Utility.LongRandom(ps3Time.Ticks, randomEndTime.Ticks, rand))); 552 | tpsn.PutTrophy(i, tusr.trophyTypeTable[i].Type, new DateTime(Utility.LongRandom(ps3Time.Ticks, randomEndTime.Ticks, rand))); 553 | } 554 | } 555 | //Platinium game 556 | if (!IsTrophyGot(0)) 557 | { 558 | tusr.UnlockTrophy(0, LastTrophyTime().AddSeconds(1)); 559 | tpsn.PutTrophy(0, tusr.trophyTypeTable[0].Type, LastTrophyTime().AddSeconds(1)); 560 | } 561 | 562 | //DLC 563 | for (; i < tusr.trophyTimeInfoTable.Count; i++) 564 | { 565 | if (!IsTrophyGot(i)) 566 | { 567 | tusr.UnlockTrophy(i, new DateTime(Utility.LongRandom(ps3Time.Ticks, randomEndTime.Ticks, rand))); 568 | tpsn.PutTrophy(i, tusr.trophyTypeTable[i].Type, new DateTime(Utility.LongRandom(ps3Time.Ticks, randomEndTime.Ticks, rand))); 569 | } 570 | } 571 | haveBeenEdited = true; 572 | RefreshComponents(); 573 | } 574 | 575 | private void 清除獎杯ToolStripMenuItem_Click(object sender, EventArgs e) 576 | { 577 | TROPTRNS.TrophyInfo? ti = tpsn.PopTrophy(); 578 | while (ti.HasValue) 579 | { 580 | tusr.LockTrophy(ti.Value.TrophyID); 581 | ti = tpsn.PopTrophy(); 582 | } 583 | haveBeenEdited = true; 584 | RefreshComponents(); 585 | } 586 | 587 | private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e) 588 | { 589 | Properties.Settings.Default.Language = toolStripComboBox1.SelectedIndex; 590 | Properties.Settings.Default.Save(); 591 | MessageBox.Show(Properties.strings.RestartProgram); 592 | } 593 | 594 | private void setRandomStartTimeToolStripMenuItem_Click(object sender, EventArgs e) 595 | { 596 | dtpfForInstant.Title.Text = Properties.strings.RandomStartTime; 597 | if (dtpfForInstant.ShowDialog() == DialogResult.OK) 598 | { 599 | ps3Time = dtpfForInstant.dateTimePicker1.Value; 600 | } 601 | } 602 | 603 | private void setRandomEndTimeToolStripMenuItem_Click(object sender, EventArgs e) 604 | { 605 | dtpfForInstant.Title.Text = Properties.strings.RandomEndTime; 606 | if (dtpfForInstant.ShowDialog() == DialogResult.OK) 607 | { 608 | randomEndTime = dtpfForInstant.dateTimePicker1.Value; 609 | } 610 | } 611 | 612 | private void toolStripMenuItem1_Click(object sender, EventArgs e) 613 | { 614 | if (copyFrom.ShowDialog(this) == DialogResult.OK) 615 | { 616 | var _times = copyFrom.checkBox1.Checked ? copyFrom.smartCopy().ToList() : copyFrom.copyFrom().ToList(); 617 | if (_times.Any()) 清除獎杯ToolStripMenuItem_Click(sender, e); // no idea why but sometimes it get bug and it don't update, so lockin first fix it 618 | try 619 | { 620 | for (int i = 0; i < tusr.trophyTimeInfoTable.Count; ++i) 621 | { 622 | 623 | if (!tpsn[i].HasValue && _times[i] != 0) 624 | { 625 | var time = _times[i].TimeStampToDateTime(); 626 | tusr.UnlockTrophy(i, time); 627 | tpsn.PutTrophy(i, tusr.trophyTypeTable[i].Type, time); 628 | } 629 | } 630 | haveBeenEdited = true; 631 | RefreshComponents(); 632 | } 633 | catch (Exception ex) 634 | { 635 | MessageBox.Show(ex.Message); 636 | } 637 | } 638 | 639 | } 640 | 641 | private void menuStrip1_Click(object sender, EventArgs e) 642 | { 643 | if (listViewEx1.IsEditing) 644 | listViewEx1.EndEditing(true); 645 | } 646 | private void toggleRPCS3TrophyFormatToolStripMenuItem_Click(object sender, EventArgs e) 647 | { 648 | isRpcs3Format.Checked = !isRpcs3Format.Checked; 649 | } 650 | } 651 | } 652 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/PS3TrophyIsGood.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {1284A0A6-CE1E-4789-BA2A-F7CC1B71B6AC} 8 | WinExe 9 | Properties 10 | PS3TrophyIsGood 11 | PS3TrophyIsGood 12 | v3.5 13 | 512 14 | 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | orignal.ico 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | Form 52 | 53 | 54 | CopyFrom.cs 55 | 56 | 57 | Form 58 | 59 | 60 | DateTimePickForm.cs 61 | 62 | 63 | Form 64 | 65 | 66 | Form1.cs 67 | 68 | 69 | 70 | 71 | strings.pt-BR.resx 72 | True 73 | True 74 | 75 | 76 | True 77 | True 78 | strings.resx 79 | 80 | 81 | strings.zh-Hant.resx 82 | True 83 | True 84 | 85 | 86 | 87 | CopyFrom.cs 88 | 89 | 90 | CopyFrom.cs 91 | 92 | 93 | DateTimePickForm.cs 94 | 95 | 96 | DateTimePickForm.cs 97 | 98 | 99 | DateTimePickForm.cs 100 | 101 | 102 | Form1.cs 103 | 104 | 105 | Form1.cs 106 | Designer 107 | 108 | 109 | Form1.cs 110 | 111 | 112 | ResXFileCodeGenerator 113 | Resources.Designer.cs 114 | Designer 115 | 116 | 117 | True 118 | Resources.resx 119 | True 120 | 121 | 122 | ResXFileCodeGenerator 123 | strings.pt-BR.Designer.cs 124 | 125 | 126 | ResXFileCodeGenerator 127 | strings.Designer.cs 128 | 129 | 130 | ResXFileCodeGenerator 131 | strings.zh-Hant.Designer.cs 132 | 133 | 134 | PreserveNewest 135 | 136 | 137 | PreserveNewest 138 | 139 | 140 | SettingsSingleFileGenerator 141 | Settings.Designer.cs 142 | 143 | 144 | True 145 | Settings.settings 146 | True 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | PreserveNewest 156 | 157 | 158 | PreserveNewest 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | {a57cee20-8097-467b-9f57-099bb34fbf2b} 167 | BigEndianTool 168 | 169 | 170 | {35a5c415-0906-4ac7-b0f6-fe3cca884ad9} 171 | ListViewEx 172 | 173 | 174 | {81e49c92-d07a-4ad0-8ee0-5c520d4e1c04} 175 | TROPHYParser 176 | 177 | 178 | 179 | 186 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/PS3TrophyIsGood.idc: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Runtime.InteropServices; 6 | using System.Threading; 7 | using System.Windows.Forms; 8 | 9 | namespace PS3TrophyIsGood { 10 | static class Program { 11 | [DllImport("kernel32.dll", SetLastError = true)] 12 | static extern bool AllocConsole(); 13 | 14 | [DllImport("kernel32.dll", SetLastError = true)] 15 | static extern bool FreeConsole(); 16 | /// 17 | /// 應用程式的主要進入點。 18 | /// 19 | [STAThread] 20 | static void Main() { 21 | // AllocConsole(); 22 | // long tick = BitConverter.ToInt64("00E1951FAA626EC0".ToByteArray(), 0); 23 | // return; 24 | // Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; 25 | // Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 26 | 27 | Application.EnableVisualStyles(); 28 | Application.SetCompatibleTextRenderingDefault(false); 29 | Application.Run(new Form1()); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 組件的一般資訊是由下列的屬性集控制。 6 | // 變更這些屬性的值即可修改組件的相關 7 | // 資訊。 8 | [assembly: AssemblyTitle("PS3TrophyIsGood")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PS3TrophyIsGood")] 13 | [assembly: AssemblyCopyright("Copyright © 2020")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 將 ComVisible 設定為 false 會使得這個組件中的型別 18 | // 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中 19 | // 的型別,請在該型別上將 ComVisible 屬性設定為 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID 23 | [assembly: Guid("cdd8d464-6c20-4a43-9b82-d8b0a02396c1")] 24 | 25 | // 組件的版本資訊是由下列四項值構成: 26 | // 27 | // 主要版本 28 | // 次要版本 29 | // 組建編號 30 | // 修訂編號 31 | // 32 | // 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號 33 | // 指定為預設值: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.3.8.0")] 36 | [assembly: AssemblyFileVersion("1.3.8.0")] 37 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 這段程式碼是由工具產生的。 4 | // 執行階段版本:4.0.30319.18034 5 | // 6 | // 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, 7 | // 變更將會遺失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PS3TrophyIsGood.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// 用於查詢當地語系化字串等的強型別資源類別。 17 | /// 18 | // 這個類別是自動產生的,是利用 StronglyTypedResourceBuilder 19 | // 類別透過 ResGen 或 Visual Studio 這類工具。 20 | // 若要加入或移除成員,請編輯您的 .ResX 檔,然後重新執行 ResGen 21 | // (利用 /str 選項),或重建您的 VS 專案。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// 傳回這個類別使用的快取的 ResourceManager 執行個體。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PS3TrophyIsGood.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 覆寫目前執行緒的 CurrentUICulture 屬性,對象是所有 51 | /// 使用這個強型別資源類別的資源查閱。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 這段程式碼是由工具產生的。 4 | // 執行階段版本:4.0.30319.18034 5 | // 6 | // 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, 7 | // 變更將會遺失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PS3TrophyIsGood.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("1")] 29 | public int Language { 30 | get { 31 | return ((int)(this["Language"])); 32 | } 33 | set { 34 | this["Language"] = value; 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 1 7 | 8 | 9 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 這段程式碼是由工具產生的。 4 | // 執行階段版本:4.0.30319.18034 5 | // 6 | // 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, 7 | // 變更將會遺失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PS3TrophyIsGood.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// 用於查詢當地語系化字串等的強型別資源類別。 17 | /// 18 | // 這個類別是自動產生的,是利用 StronglyTypedResourceBuilder 19 | // 類別透過 ResGen 或 Visual Studio 這類工具。 20 | // 若要加入或移除成員,請編輯您的 .ResX 檔,然後重新執行 ResGen 21 | // (利用 /str 選項),或重建您的 VS 專案。 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class strings { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal strings() { 33 | } 34 | 35 | /// 36 | /// 傳回這個類別使用的快取的 ResourceManager 執行個體。 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PS3TrophyIsGood.Properties.strings", typeof(strings).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// 覆寫目前執行緒的 CurrentUICulture 屬性,對象是所有 51 | /// 使用這個強型別資源類別的資源查閱。 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Consulta uma cadeia de caracteres localizada semelhante a Can't find game.. 65 | /// 66 | internal static string CantFindGame { 67 | get { 68 | return ResourceManager.GetString("CantFindGame", resourceCulture); 69 | } 70 | } 71 | 72 | /// 73 | /// 查詢類似 You can't lock other thropy when platinum is locked. 的當地語系化字串。 74 | /// 75 | internal static string CantLoclPlatinumBeforOther { 76 | get { 77 | return ResourceManager.GetString("CantLoclPlatinumBeforOther", resourceCulture); 78 | } 79 | } 80 | 81 | /// 82 | /// 查詢類似 You can't unlock platinum when other thropy is unlocked. 的當地語系化字串。 83 | /// 84 | internal static string CantUnloclPlatinumBeforOther { 85 | get { 86 | return ResourceManager.GetString("CantUnloclPlatinumBeforOther", resourceCulture); 87 | } 88 | } 89 | 90 | /// 91 | /// 查詢類似 Close 的當地語系化字串。 92 | /// 93 | internal static string Close { 94 | get { 95 | return ResourceManager.GetString("Close", resourceCulture); 96 | } 97 | } 98 | 99 | /// 100 | /// 查詢類似 The file has not been saved, save it? 的當地語系化字串。 101 | /// 102 | internal static string CloseConfirm { 103 | get { 104 | return ResourceManager.GetString("CloseConfirm", resourceCulture); 105 | } 106 | } 107 | 108 | /// 109 | /// 查詢類似 Danger 的當地語系化字串。 110 | /// 111 | internal static string Danger { 112 | get { 113 | return ResourceManager.GetString("Danger", resourceCulture); 114 | } 115 | } 116 | 117 | /// 118 | /// 查詢類似 Instant Platinum's time will be the same, is easily identify by the PSN, we recommend manually modify time, even so do you wish to continue? 的當地語系化字串。 119 | /// 120 | internal static string DangerConfirm { 121 | get { 122 | return ResourceManager.GetString("DangerConfirm", resourceCulture); 123 | } 124 | } 125 | 126 | /// 127 | /// Consulta uma cadeia de caracteres localizada semelhante a M/d/yyyy h:mm:ss tt. 128 | /// 129 | internal static string DateFormatString { 130 | get { 131 | return ResourceManager.GetString("DateFormatString", resourceCulture); 132 | } 133 | } 134 | 135 | /// 136 | /// 查詢類似 Delete Trophy 的當地語系化字串。 137 | /// 138 | internal static string Delete { 139 | get { 140 | return ResourceManager.GetString("Delete", resourceCulture); 141 | } 142 | } 143 | 144 | /// 145 | /// 查詢類似 This trophy will have been be deleted, sure? 的當地語系化字串。 146 | /// 147 | internal static string DeleteTrophyConfirm { 148 | get { 149 | return ResourceManager.GetString("DeleteTrophyConfirm", resourceCulture); 150 | } 151 | } 152 | 153 | /// 154 | /// Consulta uma cadeia de caracteres localizada semelhante a "{0}" was not found. Please, select a valid trophy folder.. 155 | /// 156 | internal static string FileNotFoundMsg { 157 | get { 158 | return ResourceManager.GetString("FileNotFoundMsg", resourceCulture); 159 | } 160 | } 161 | 162 | /// 163 | /// Consulta uma cadeia de caracteres localizada semelhante a "Minimum minutes" can't be greater than "Maximum minutes".. 164 | /// 165 | internal static string MinCantBeGreaterThanMax { 166 | get { 167 | return ResourceManager.GetString("MinCantBeGreaterThanMax", resourceCulture); 168 | } 169 | } 170 | 171 | /// 172 | /// 查詢類似 no 的當地語系化字串。 173 | /// 174 | internal static string no { 175 | get { 176 | return ResourceManager.GetString("no", resourceCulture); 177 | } 178 | } 179 | 180 | /// 181 | /// Consulta uma cadeia de caracteres localizada semelhante a The last trophy synchronized with PSN has the following date: {0}. Select a date greater than this.. 182 | /// 183 | internal static string PsnSyncTime { 184 | get { 185 | return ResourceManager.GetString("PsnSyncTime", resourceCulture); 186 | } 187 | } 188 | 189 | /// 190 | /// 查詢類似 RandomEndTime 的當地語系化字串。 191 | /// 192 | internal static string RandomEndTime { 193 | get { 194 | return ResourceManager.GetString("RandomEndTime", resourceCulture); 195 | } 196 | } 197 | 198 | /// 199 | /// 查詢類似 RandomStartTime 的當地語系化字串。 200 | /// 201 | internal static string RandomStartTime { 202 | get { 203 | return ResourceManager.GetString("RandomStartTime", resourceCulture); 204 | } 205 | } 206 | 207 | /// 208 | /// 查詢類似 please restart the program to apply the setting. 的當地語系化字串。 209 | /// 210 | internal static string RestartProgram { 211 | get { 212 | return ResourceManager.GetString("RestartProgram", resourceCulture); 213 | } 214 | } 215 | 216 | /// 217 | /// 查詢類似 To avoid the PSN identified,only not been synchronized trophy can be edited. 的當地語系化字串。 218 | /// 219 | internal static string SyncedTrophyCanNotEdit { 220 | get { 221 | return ResourceManager.GetString("SyncedTrophyCanNotEdit", resourceCulture); 222 | } 223 | } 224 | 225 | /// 226 | /// 查詢類似 yes 的當地語系化字串。 227 | /// 228 | internal static string yes { 229 | get { 230 | return ResourceManager.GetString("yes", resourceCulture); 231 | } 232 | } 233 | } 234 | } 235 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.pt-BR.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/Properties/strings.pt-BR.Designer.cs -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.pt-BR.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Fechar 122 | 123 | 124 | Deseja salvar o arquivo? 125 | 126 | 127 | Perigo 128 | 129 | 130 | Instant Platinum's time will be the same, is easily identify by the PSN, we recommend manually modify time, even so do you wish to continue? 131 | 132 | 133 | Apagar troféu 134 | 135 | 136 | O troféu será apagado, deseja continuar? 137 | 138 | 139 | não 140 | 141 | 142 | Este troféu já está sincronizado. Não é possível modificá-lo. 143 | 144 | 145 | sim 146 | 147 | 148 | Não é possível bloquear outros troféus enquanto o de Platina está bloqueado. 149 | 150 | 151 | Não é possível desbloquear o troféu de Platina enquanto os outros estiverem bloqueados. 152 | 153 | 154 | Por favor reinicie o programa para aplicar as configurações. 155 | 156 | 157 | RandomStartTime 158 | 159 | 160 | RandomEndTime 161 | 162 | 163 | Não foi possível encontrar o jogo. 164 | 165 | 166 | "Minimum minutes" can't be greater than "Maximum minutes". 167 | 168 | 169 | O último troféu sincronizado com a PSN tem a seguinte data: {0}. Selecione uma data maior que essa. 170 | 171 | 172 | dd/MM/yyyy HH:mm:ss 173 | 174 | 175 | O arquivo "{0}" não foi encontrado. Selecione uma pasta de troféus válida. 176 | 177 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Close 122 | 123 | 124 | The file has not been saved, save it? 125 | 126 | 127 | Danger 128 | 129 | 130 | Instant Platinum's time will be the same, is easily identify by the PSN, we recommend manually modify time, even so do you wish to continue? 131 | 132 | 133 | Delete Trophy 134 | 135 | 136 | This trophy will be deleted, sure? 137 | 138 | 139 | no 140 | 141 | 142 | Trophy already synchronized. Can't be modified. 143 | 144 | 145 | yes 146 | 147 | 148 | You can't lock other trophies while platinum is locked. 149 | 150 | 151 | You can't unlock platinum when other thropy is unlocked. 152 | 153 | 154 | Please restart the program to apply the setting. 155 | 156 | 157 | RandomStartTime 158 | 159 | 160 | RandomEndTime 161 | 162 | 163 | Can't find game. 164 | 165 | 166 | "Minimum minutes" can't be greater than "Maximum minutes". 167 | 168 | 169 | The last trophy synchronized with PSN has the following date: {0}. Select a date greater than this. 170 | 171 | 172 | yyyy/M/dd HH:mm:ss 173 | 174 | 175 | "{0}" was not found. Please, select a valid trophy folder. 176 | 177 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.zh-Hant.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/Properties/strings.zh-Hant.Designer.cs -------------------------------------------------------------------------------- /PS3TrophyIsGood/Properties/strings.zh-Hant.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 關閉 122 | 123 | 124 | 檔案尚未儲存,要儲存嗎? 125 | 126 | 127 | 危險 128 | 129 | 130 | 瞬間白金的時間將會相同,是很容易被PSN發現的方法,建議自己手動修改時間,即使如此還要繼續嗎? 131 | 132 | 133 | 刪除獎杯 134 | 135 | 136 | 此舉將會刪除已取得的獎杯,確定嗎? 137 | 138 | 139 | 140 | 141 | 142 | 為避免PSN查出,尚未同步的獎杯才可編輯。 143 | 144 | 145 | 146 | 147 | 148 | 你不可以在白金解鎖前解鎖其他獎杯 149 | 150 | 151 | 你不可以在解鎖其他獎杯前解鎖白金 152 | 153 | 154 | 重新啟動以完成設定。 155 | 156 | 157 | 找不到遊戲。 158 | 159 | 160 | “最小分鐘數”不能大於“最大分鐘數”。 161 | 162 | 163 | 與PSN同步的最後一個獎杯的日期如下:{0}。 選擇一個大於此日期的日期。 164 | 165 | 166 | 隨機結束時間 167 | 168 | 169 | 隨機開始時間 170 | 171 | 172 | yyyy/M/dd HH:mm:ss 173 | 174 | 175 | 找不到“ {0}”。 請選擇一個有效的獎杯文件夾。 176 | 177 | 178 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/Utility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Linq; 4 | 5 | public static class Utility 6 | { 7 | 8 | private static string[] TROPHY_FILES_EXTENSION = { ".PFD", ".SFO", ".DAT", ".SFM" }; 9 | private static string PFD_TOOL_DIRECTORY = "pfdtool"; 10 | private static string PFD_TOOL_APP = PFD_TOOL_DIRECTORY + "\\pfdtool.exe"; 11 | 12 | public static void decryptSave(string gameid, string saveDir) 13 | { 14 | // update PFD 15 | System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, "-g " + gameid + " -d \"" + saveDir + "\" USR-DATA"); 16 | procStartInfo.RedirectStandardOutput = true; 17 | procStartInfo.UseShellExecute = false; 18 | procStartInfo.CreateNoWindow = true; 19 | System.Diagnostics.Process proc = new System.Diagnostics.Process(); 20 | proc.StartInfo = procStartInfo; 21 | proc.Start(); 22 | proc.WaitForExit(); 23 | } 24 | 25 | public static void encryptSave(string gameid, string saveDir) 26 | { 27 | // update PFD 28 | System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, "-g " + gameid + " -u \"" + saveDir + "\""); 29 | procStartInfo.RedirectStandardOutput = true; 30 | procStartInfo.UseShellExecute = false; 31 | procStartInfo.CreateNoWindow = true; 32 | System.Diagnostics.Process proc = new System.Diagnostics.Process(); 33 | proc.StartInfo = procStartInfo; 34 | proc.Start(); 35 | proc.WaitForExit(); 36 | // encrypt savedata 37 | procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, "-g " + gameid + " -e \"" + saveDir + "\" USR-DATA"); 38 | procStartInfo.RedirectStandardOutput = true; 39 | procStartInfo.UseShellExecute = false; 40 | procStartInfo.CreateNoWindow = true; 41 | proc = new System.Diagnostics.Process(); 42 | proc.StartInfo = procStartInfo; 43 | proc.Start(); 44 | proc.WaitForExit(); 45 | } 46 | 47 | public static void decryptTrophy(string saveDir) 48 | { 49 | // update PFD 50 | System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, " -d \"" + saveDir + "\" TROPTRNS.DAT"); 51 | procStartInfo.WorkingDirectory = PFD_TOOL_DIRECTORY; 52 | procStartInfo.RedirectStandardOutput = true; 53 | procStartInfo.UseShellExecute = false; 54 | procStartInfo.CreateNoWindow = true; 55 | System.Diagnostics.Process proc = new System.Diagnostics.Process(); 56 | proc.StartInfo = procStartInfo; 57 | proc.Start(); 58 | proc.WaitForExit(); 59 | string message = proc.StandardOutput.ReadToEnd(); 60 | if (proc.ExitCode != 0) 61 | { 62 | throw new Exception("An error ocurred on decrypt trophies. Please check if Microsoft Visual C++ is installed. You can download it at: http://www.microsoft.com/download/en/details.aspx?id=5555"); 63 | } else if (message != "pfdtool 0.2.3 (c) 2012 by flatz\r\n\r\n") 64 | { 65 | throw new Exception(message); 66 | } 67 | } 68 | 69 | public static void encryptTrophy(string saveDir, string profile) 70 | { 71 | //resing with other param.sfo 72 | if (profile != "Default Profile") 73 | { 74 | profile = "profiles\\" + profile; 75 | byte[] profileId; 76 | using (var br = new BinaryReader(new FileStream(profile, FileMode.Open))) 77 | { 78 | br.BaseStream.Position = 0xC; 79 | br.BaseStream.Position = br.ReadInt32(); 80 | profileId = br.ReadBytes(0x10); 81 | } 82 | using (var bw = new BinaryWriter(new FileStream(saveDir + "\\PARAM.SFO", FileMode.Open))) 83 | { 84 | bw.BaseStream.Position = 0x274; 85 | bw.Write(profileId); 86 | } 87 | } 88 | // update PFD 89 | System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, " -u \"" + saveDir + "\""); 90 | procStartInfo.WorkingDirectory = PFD_TOOL_DIRECTORY; 91 | procStartInfo.RedirectStandardOutput = true; 92 | procStartInfo.UseShellExecute = false; 93 | procStartInfo.CreateNoWindow = true; 94 | System.Diagnostics.Process proc = new System.Diagnostics.Process(); 95 | proc.StartInfo = procStartInfo; 96 | proc.Start(); 97 | proc.WaitForExit(); 98 | // encrypt savedata 99 | procStartInfo = new System.Diagnostics.ProcessStartInfo(PFD_TOOL_APP, " -e \"" + saveDir + "\" TROPTRNS.DAT"); 100 | procStartInfo.WorkingDirectory = PFD_TOOL_DIRECTORY; 101 | procStartInfo.RedirectStandardOutput = true; 102 | procStartInfo.UseShellExecute = false; 103 | procStartInfo.CreateNoWindow = true; 104 | proc = new System.Diagnostics.Process(); 105 | proc.StartInfo = procStartInfo; 106 | proc.Start(); 107 | proc.WaitForExit(); 108 | } 109 | 110 | public static long LongRandom(long min, long max, Random rand) 111 | { 112 | byte[] buf = new byte[8]; 113 | rand.NextBytes(buf); 114 | long longRand = BitConverter.ToInt64(buf, 0); 115 | 116 | return (Math.Abs(longRand % (max - min)) + min); 117 | } 118 | public static DateTime TimeStampToDateTime(this long timestamp) 119 | { 120 | DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0,DateTimeKind.Utc); 121 | dateTime = dateTime.AddSeconds(timestamp); 122 | return dateTime; 123 | } 124 | public static long DateTimeToTimeStamp(this DateTime datetime) 125 | { 126 | DateTime sTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 127 | return (long)(datetime - sTime).TotalSeconds; 128 | } 129 | 130 | public static string GetTemporaryDirectory() 131 | { 132 | string tempDirectory; 133 | do 134 | { 135 | tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 136 | } while (Directory.Exists(tempDirectory)); 137 | Directory.CreateDirectory(tempDirectory); 138 | return tempDirectory; 139 | } 140 | 141 | public static string CopyTrophyDirToTemp(string trophyDir) 142 | { 143 | DirectoryInfo dir = new DirectoryInfo(trophyDir); 144 | string pathTemp = Path.Combine(GetTemporaryDirectory(), dir.Name); 145 | CopyTrophyData(trophyDir, pathTemp, true); 146 | return pathTemp; 147 | } 148 | 149 | public static void CopyTrophyData(string source, string target, bool overwrite) 150 | { 151 | DirectoryInfo dir = new DirectoryInfo(source); 152 | if (!dir.Exists) 153 | { 154 | throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + source); 155 | } 156 | 157 | // If the destination directory doesn't exist, create it. 158 | Directory.CreateDirectory(target); 159 | 160 | // Get the files in the directory and copy them to the new location. 161 | FileInfo[] files = dir.GetFiles(); 162 | foreach (FileInfo file in files) 163 | { 164 | if (TROPHY_FILES_EXTENSION.Contains(file.Extension.ToUpper())) 165 | { 166 | string tempPath = Path.Combine(target, file.Name); 167 | file.CopyTo(tempPath, overwrite); 168 | } 169 | } 170 | } 171 | 172 | public static void DeleteDirectory(string path) 173 | { 174 | if (Directory.Exists(path)) 175 | { 176 | Directory.Delete(path, true); 177 | } 178 | } 179 | } 180 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/orignal.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/orignal.ico -------------------------------------------------------------------------------- /PS3TrophyIsGood/pfdtool/games.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/pfdtool/games.conf -------------------------------------------------------------------------------- /PS3TrophyIsGood/pfdtool/global.conf: -------------------------------------------------------------------------------- 1 | ; Global settings 2 | 3 | [global] 4 | user_id=00000001 5 | console_id=00000000000000000000000000000000 6 | authentication_id=1010000001000003 7 | syscon_manager_key=D413B89663E1FE9F75143D3BB4565274 8 | keygen_key=6B1ACEA246B745FD8F93763B920594CD53483B82 9 | savegame_param_sfo_key=0C08000E090504040D010F000406020209060D03 10 | trophy_param_sfo_key=5D5B647917024E9BB8D330486B996E795D7F4392 11 | tropsys_dat_key=B080C40FF358643689281736A6BF15892CFEA436 12 | tropusr_dat_key=8711EFF406913F0937F115FAB23DE1A9897A789A 13 | troptrns_dat_key=91EE81555ACC1C4FB5AAE5462CFE1C62A4AF36A5 14 | tropconf_sfm_key=E2ED33C71C444EEBC1E23D635AD8E82F4ECA4E94 15 | fallback_disc_hash_key=D1C1E10B9C547E689B805DCD9710CE8D 16 | -------------------------------------------------------------------------------- /PS3TrophyIsGood/pfdtool/msvcr100.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/pfdtool/msvcr100.dll -------------------------------------------------------------------------------- /PS3TrophyIsGood/pfdtool/pfdtool.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/pfdtool/pfdtool.exe -------------------------------------------------------------------------------- /PS3TrophyIsGood/pingme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darkautism/PS3TrophyIsGood/a5de2c6138094763fee7ebd56eb2965123ffd267/PS3TrophyIsGood/pingme.txt -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PS3TrophyIsGood 2 | 3 | Best ps3 trophy editor ever 4 | 5 | ![DEMO](http://4.bp.blogspot.com/-dMj1nom1pKc/USnCAcmDu6I/AAAAAAAADWg/UFiD6o3uguU/s1600/t1.png) 6 | 7 | ## Build Tutorial 8 | 9 | git clone https://github.com/darkautism/PS3TrophyIsGood.git 10 | git submodule init 11 | git submodule update --recursive 12 | 13 | After that, you can use visual studio 2019+ to compile this project (with .NET desktop development support). 14 | 15 | ## Download 16 | 17 | [CI auto build](https://github.com/darkautism/PS3TrophyIsGood/actions) 18 | 19 | ![Download link](https://user-images.githubusercontent.com/3898040/108462066-e8c87e00-72b6-11eb-80e1-1447c9cc2c2a.png) 20 | 21 | ## 警告 22 | 23 | - 同步修改獎杯至PSN是危險的,有被ban的可能 24 | - 獎杯損壞可能 25 | - 同步失敗可能 26 | 27 | 即使如此也要修改,總而言之,風險自負。 28 | 29 | 請先確定以閱讀以上文字後再按下繼續閱讀。 30 | 31 | 32 | ## Change Log: 33 | 34 | v1.3.8 35 | - Add support RPCS3 format 36 | 37 | v1.3.7 38 | 1. I've added a Resign option, so that you can resign a trophy folder to your specified PARAM.SFO (containing the desired account ID.) 39 | - To use this, you must place your own param.sfo in the directory on your computer, "profiles" with any name (as long as it keeps the extension). For example, you could use "DARKNACHO.SFO" 40 | - Otherwise, if you do not decide to use the feature, the tool will be default to the account id of the provided trophy folder. 41 | 42 | 2. You can copy timestamps of a user from https://psntrophyleaders.com/ 43 | - This lets you copy all the timestamps from a user's game. 44 | 3. Smart copy option 45 | - This allows you to add a few parameters to make the copy look more legitimate, and not just copy-and-paste of the user's profile. 46 | - Allows you to add a specific time to bring it to make the times more recent. 47 | - Also adds random delta variable to each trophy to make it different 48 | - Note: This also detects trophies earned in the same interval, so it adds it the same delta. 49 | 50 | 3. Detects DLC from games. 51 | 4. You can unlock the platinum trophy without needing to timestamp any DLC trophies. 52 | 5. Detects if the game has a platinum trophy or not. 53 | - If the game does not have a platinum trophy, the user can unlock the first trophy without receiving an error message. 54 | 55 | V1.3.6 56 | -add random setting 57 | 58 | V1.2.6 59 |  -修正一個-8 TimeZone會錯誤的問題 60 | 61 | V1.2.5 62 |  -修正TimeZone問題(就是玩家們反映時間+8的問題) 63 |  -整理多國語言,現在可以從選單上面選取。 64 |  -更改gobal.conf設定 65 | 66 | V1.1.4 67 |  -add random Timestamp feature 68 |  -瞬間白金現在是隨機時間 69 | 70 | V1.0.3 71 |  -修正一個修改時間的BUG 72 | 73 | V1.0.2 74 |  -修正一個重大BUG 75 | 76 | V1.0.1 77 |  -新增軟體圖像。 78 |  -新增多國語言。 79 |  -瞬間白金功能會自動將白金排在最後面(時間會是其他獎杯+1秒)。 80 |  -去除不必要的Debug Code,開啟獎杯時更快。 81 |  -現在開始白金必須最後解鎖 82 |  (但是時間還是自己輸入,請將白金時間設在最後,不然仍會無法同步白金) 83 | 84 | ## Tutorial 85 | 86 | P.S. 本程式已附pfdtool且會自行加解密,請勿自行解密。每次修改完後一定要關閉檔案或關閉程式,這樣獎杯才會重新加密 87 | 88 | 灰色表示未取得,紅色表是已同步至PSN的檔案 89 | 90 | 白色表示已經取得,但是尚未同步至PSN的檔案 91 | 92 | ![DEMO1](http://4.bp.blogspot.com/-dMj1nom1pKc/USnCAcmDu6I/AAAAAAAADWg/UFiD6o3uguU/s1600/t1.png) 93 | 94 | 綠圈為獎杯名稱,紅圈為取得率 95 | 96 | 藍色為PSN經驗值,代表這獎杯同步至PSN後你的PSN帳號可以獲得多少經驗 97 | 98 | 最底下是本部落格地址,你可以點擊來查看本部落格最新資訊。 99 | 100 | ![DEMO2](http://1.bp.blogspot.com/-wl5TyzveZ3A/USnDCY--SzI/AAAAAAAADW8/UVHzFwXgaTo/s1600/T2.png) 101 | 102 | ### 開啟檔案 103 | 104 | 如果覺得點選資料夾開啟很麻煩,你可以把獎盃資料夾直接拖移進視窗,它會自行讀取。 105 | 106 | ## 實際演練 107 | 108 | 如果你獎杯尚未同步至PSN過,請將console id、user id設定正確。要修改console id請修改gobal.conf 109 | 110 | ### Step 1 111 | 112 |   將獎杯從你的PS3複製出來,位置在 /dev_hdd0/home/000000XX/trophy/ 113 | 114 | ### Step 2 115 | 116 |   開啟程式,並將剛剛複製的獎杯資料夾拖移至程式上 117 | 118 | ### Step 3 119 | 120 |   將改完的獎杯複製回去(請備份) 121 | 122 | ### Step 4 123 | 124 | ![outside](http://2.bp.blogspot.com/-v8NAzSPKSHo/USnB_kbSsbI/AAAAAAAADWM/KKRthffJW2g/s1600/TVCAM%25E8%25A3%259D%25E7%25BD%25AE_20130224_145637.289.jpg) 125 | 126 | 獎杯變2%了 127 | 128 | 129 | 但是實際去看還是鎖著的,我不知道為什麼會有這種現象,假如你將所有獎杯解鎖,他會顯示100%但是點進去仍是全鎖,不過這樣子我們仍可同步至PSN 130 | 131 | ![befor sync](http://4.bp.blogspot.com/-yLq0hQb8b28/USnCAKajXSI/AAAAAAAADWY/8ovaRs6eQZ0/s1600/TVCAM%25E8%25A3%259D%25E7%25BD%25AE_20130224_145652.047.jpg) 132 | 133 | ### Step 5 134 | 135 | 注意,此步驟非常危險,請確定你在做甚麼,且了解後果。被ban我沒辦法還你PSN帳號和consoleid (idps) 136 | 137 | ![AFTER SYNC](http://3.bp.blogspot.com/-69ay5OYMsYo/USnB_Xy0ngI/AAAAAAAADWQ/K5YI4SBrAiI/s1600/TVCAM%25E8%25A3%259D%25E7%25BD%25AE_20130224_145646.119.jpg) 138 | 139 | 140 | 同步後獎杯就出現了,在這一步我遇到了同步錯誤,但之後就顯示了獎杯。 141 | 142 | 在vita上面的樣子,真的同步至PSN了。 143 | 144 | ![VITA](http://3.bp.blogspot.com/-_Gn65OQVVX8/USnB_ZbHaeI/AAAAAAAADWI/xq-PS-BjwFk/s1600/2013-02-24-145001.jpg) 145 | --------------------------------------------------------------------------------