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 | 
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 | 
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 | 
93 |
94 | 綠圈為獎杯名稱,紅圈為取得率
95 |
96 | 藍色為PSN經驗值,代表這獎杯同步至PSN後你的PSN帳號可以獲得多少經驗
97 |
98 | 最底下是本部落格地址,你可以點擊來查看本部落格最新資訊。
99 |
100 | 
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 | 
125 |
126 | 獎杯變2%了
127 |
128 |
129 | 但是實際去看還是鎖著的,我不知道為什麼會有這種現象,假如你將所有獎杯解鎖,他會顯示100%但是點進去仍是全鎖,不過這樣子我們仍可同步至PSN
130 |
131 | 
132 |
133 | ### Step 5
134 |
135 | 注意,此步驟非常危險,請確定你在做甚麼,且了解後果。被ban我沒辦法還你PSN帳號和consoleid (idps)
136 |
137 | 
138 |
139 |
140 | 同步後獎杯就出現了,在這一步我遇到了同步錯誤,但之後就顯示了獎杯。
141 |
142 | 在vita上面的樣子,真的同步至PSN了。
143 |
144 | 
145 |
--------------------------------------------------------------------------------
|