OSDN Git Service

#23596 ベースのみの譜面を再生したとき、クリア回数の記録が正しく行われない不具合の修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CScoreIni.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Drawing.Imaging;\r
7 using System.Diagnostics;\r
8 using System.IO;\r
9 using System.Security.Cryptography;\r
10 using FDK;\r
11 \r
12 namespace DTXMania\r
13 {\r
14         public class CScoreIni\r
15         {\r
16                 // プロパティ\r
17 \r
18                 // [File] セクション\r
19                 public STファイル stファイル;\r
20                 [StructLayout( LayoutKind.Sequential )]\r
21                 public struct STファイル\r
22                 {\r
23                         public string Title;\r
24                         public string Name;\r
25                         public string Hash;\r
26                         public int PlayCountDrums;\r
27                         public int PlayCountGuitar;\r
28             public int PlayCountBass;\r
29             // #23596 10.11.16 add ikanick-----/\r
30             public int ClearCountDrums;\r
31             public int ClearCountGuitar;\r
32             public int ClearCountBass;\r
33             // --------------------------------/\r
34                         public int HistoryCount;\r
35                         public string[] History;\r
36                         public int BGMAdjust;\r
37                 }\r
38 \r
39                 // 演奏記録セクション(9種類)\r
40                 public STセクション stセクション;\r
41                 [StructLayout( LayoutKind.Sequential )]\r
42                 public struct STセクション\r
43                 {\r
44             public CScoreIni.C演奏記録 HiScoreDrums;\r
45             public CScoreIni.C演奏記録 HiSkillDrums;\r
46                         public CScoreIni.C演奏記録 HiScoreGuitar;\r
47             public CScoreIni.C演奏記録 HiSkillGuitar;\r
48                         public CScoreIni.C演奏記録 HiScoreBass;\r
49             public CScoreIni.C演奏記録 HiSkillBass;\r
50             public CScoreIni.C演奏記録 LastPlayDrums;   // #23595 2011.1.9 ikanick\r
51             public CScoreIni.C演奏記録 LastPlayGuitar;  //\r
52             public CScoreIni.C演奏記録 LastPlayBass;    //\r
53                         public CScoreIni.C演奏記録 this[ int index ]\r
54                         {\r
55                                 get\r
56                                 {\r
57                                         switch( index )\r
58                                         {\r
59                                                 case 0:\r
60                                                         return this.HiScoreDrums;\r
61 \r
62                                                 case 1:\r
63                                                         return this.HiSkillDrums;\r
64 \r
65                                                 case 2:\r
66                                                         return this.HiScoreGuitar;\r
67 \r
68                                                 case 3:\r
69                                                         return this.HiSkillGuitar;\r
70 \r
71                                                 case 4:\r
72                                                         return this.HiScoreBass;\r
73 \r
74                         case 5:\r
75                             return this.HiSkillBass;\r
76 \r
77                         // #23595 2011.1.9 ikanick\r
78                         case 6:\r
79                             return this.LastPlayDrums;\r
80 \r
81                         case 7:\r
82                             return this.LastPlayGuitar;\r
83 \r
84                         case 8:\r
85                             return this.LastPlayBass;\r
86                         //------------\r
87                                         }\r
88                                         throw new IndexOutOfRangeException();\r
89                                 }\r
90                                 set\r
91                                 {\r
92                                         switch( index )\r
93                                         {\r
94                                                 case 0:\r
95                                                         this.HiScoreDrums = value;\r
96                                                         return;\r
97 \r
98                                                 case 1:\r
99                                                         this.HiSkillDrums = value;\r
100                                                         return;\r
101 \r
102                                                 case 2:\r
103                                                         this.HiScoreGuitar = value;\r
104                                                         return;\r
105 \r
106                                                 case 3:\r
107                                                         this.HiSkillGuitar = value;\r
108                                                         return;\r
109 \r
110                                                 case 4:\r
111                                                         this.HiScoreBass = value;\r
112                             return;\r
113 \r
114                         case 5:\r
115                             this.HiSkillBass = value;\r
116                             return;\r
117                         // #23595 2011.1.9 ikanick\r
118                         case 6:\r
119                             this.LastPlayDrums = value;\r
120                             return;\r
121 \r
122                         case 7:\r
123                             this.LastPlayGuitar = value;\r
124                             return;\r
125 \r
126                         case 8:\r
127                             this.LastPlayBass = value;\r
128                             return;\r
129                         //------------------\r
130                                         }\r
131                                         throw new IndexOutOfRangeException();\r
132                                 }\r
133                         }\r
134                 }\r
135                 public enum Eセクション種別 : int\r
136                 {\r
137                         Unknown = -2,\r
138                         File = -1,\r
139                         HiScoreDrums = 0,\r
140                         HiSkillDrums = 1,\r
141                         HiScoreGuitar = 2,\r
142                         HiSkillGuitar = 3,\r
143                         HiScoreBass = 4,\r
144             HiSkillBass = 5,\r
145             LastPlayDrums = 6,  // #23595 2011.1.9 ikanick\r
146             LastPlayGuitar = 7, //\r
147             LastPlayBass = 8,   //\r
148                 }\r
149                 public class C演奏記録\r
150                 {\r
151                         public STAUTOPLAY bAutoPlay;\r
152                         public bool bDrums有効;\r
153                         public bool bGuitar有効;\r
154                         public STDGBVALUE<bool> bHidden;\r
155                         public STDGBVALUE<bool> bLeft;\r
156                         public STDGBVALUE<bool> bLight;\r
157                         public STDGBVALUE<bool> bReverse;\r
158                         public bool bSTAGEFAILED有効;\r
159                         public STDGBVALUE<bool> bSudden;\r
160                         public bool bTight;\r
161                         public bool b演奏にMIDI入力を使用した;\r
162                         public bool b演奏にキーボードを使用した;\r
163                         public bool b演奏にジョイパッドを使用した;\r
164                         public bool b演奏にマウスを使用した;\r
165                         public double dbゲーム型スキル値;\r
166                         public double db演奏型スキル値;\r
167                         public ECYGroup eCYGroup;\r
168                         public Eダークモード eDark;\r
169                         public EFTGroup eFTGroup;\r
170                         public EHHGroup eHHGroup;\r
171                         public E打ち分け時の再生の優先順位 eHitSoundPriorityCY;\r
172                         public E打ち分け時の再生の優先順位 eHitSoundPriorityFT;\r
173                         public E打ち分け時の再生の優先順位 eHitSoundPriorityHH;\r
174                         public STDGBVALUE<Eランダムモード> eRandom;\r
175                         public Eダメージレベル eダメージレベル;\r
176                         public STDGBVALUE<float> f譜面スクロール速度;\r
177                         public string Hash;\r
178                         public int nGoodになる範囲ms;\r
179                         public int nGood数;\r
180                         public int nGreatになる範囲ms;\r
181                         public int nGreat数;\r
182                         public int nMiss数;\r
183                         public int nPerfectになる範囲ms;\r
184                         public int nPerfect数;\r
185                         public int nPoorになる範囲ms;\r
186                         public int nPoor数;\r
187                         public long nスコア;\r
188                         public int n演奏速度分子;\r
189                         public int n演奏速度分母;\r
190                         public int n最大コンボ数;\r
191                         public int n全チップ数;\r
192                         public string strDTXManiaのバージョン;\r
193                         public bool レーン9モード;\r
194                         public string 最終更新日時;\r
195 \r
196                         public C演奏記録()\r
197                         {\r
198                                 this.bAutoPlay = new STAUTOPLAY();\r
199                                 this.bAutoPlay.LC = false;\r
200                                 this.bAutoPlay.HH = false;\r
201                                 this.bAutoPlay.SD = false;\r
202                                 this.bAutoPlay.BD = false;\r
203                                 this.bAutoPlay.HT = false;\r
204                                 this.bAutoPlay.LT = false;\r
205                                 this.bAutoPlay.FT = false;\r
206                                 this.bAutoPlay.CY = false;\r
207                                 this.bAutoPlay.Guitar = false;\r
208                                 this.bAutoPlay.Bass = false;\r
209                                 this.bSudden = new STDGBVALUE<bool>();\r
210                                 this.bSudden.Drums = false;\r
211                                 this.bSudden.Guitar = false;\r
212                                 this.bSudden.Bass = false;\r
213                                 this.bHidden = new STDGBVALUE<bool>();\r
214                                 this.bHidden.Drums = false;\r
215                                 this.bHidden.Guitar = false;\r
216                                 this.bHidden.Bass = false;\r
217                                 this.bReverse = new STDGBVALUE<bool>();\r
218                                 this.bReverse.Drums = false;\r
219                                 this.bReverse.Guitar = false;\r
220                                 this.bReverse.Bass = false;\r
221                                 this.eRandom = new STDGBVALUE<Eランダムモード>();\r
222                                 this.eRandom.Drums = Eランダムモード.OFF;\r
223                                 this.eRandom.Guitar = Eランダムモード.OFF;\r
224                                 this.eRandom.Bass = Eランダムモード.OFF;\r
225                                 this.bLight = new STDGBVALUE<bool>();\r
226                                 this.bLight.Drums = false;\r
227                                 this.bLight.Guitar = false;\r
228                                 this.bLight.Bass = false;\r
229                                 this.bLeft = new STDGBVALUE<bool>();\r
230                                 this.bLeft.Drums = false;\r
231                                 this.bLeft.Guitar = false;\r
232                                 this.bLeft.Bass = false;\r
233                                 this.f譜面スクロール速度 = new STDGBVALUE<float>();\r
234                                 this.f譜面スクロール速度.Drums = 1f;\r
235                                 this.f譜面スクロール速度.Guitar = 1f;\r
236                                 this.f譜面スクロール速度.Bass = 1f;\r
237                                 this.n演奏速度分子 = 20;\r
238                                 this.n演奏速度分母 = 20;\r
239                                 this.bGuitar有効 = true;\r
240                                 this.bDrums有効 = true;\r
241                                 this.bSTAGEFAILED有効 = true;\r
242                                 this.eダメージレベル = Eダメージレベル.普通;\r
243                                 this.nPerfectになる範囲ms = 34;\r
244                                 this.nGreatになる範囲ms = 67;\r
245                                 this.nGoodになる範囲ms = 84;\r
246                                 this.nPoorになる範囲ms = 117;\r
247                                 this.strDTXManiaのバージョン = "Unknown";\r
248                                 this.最終更新日時 = "";\r
249                                 this.Hash = "00000000000000000000000000000000";\r
250                                 this.レーン9モード = true;\r
251                         }\r
252 \r
253                         public bool bフルコンボじゃない\r
254                         {\r
255                                 get\r
256                                 {\r
257                                         return !this.bフルコンボである;\r
258                                 }\r
259                         }\r
260                         public bool bフルコンボである\r
261                         {\r
262                                 get\r
263                                 {\r
264                                         return ( ( this.n最大コンボ数 > 0 ) && ( this.n最大コンボ数 == ( this.nPerfect数 + this.nGreat数 + this.nGood数 + this.nPoor数 + this.nMiss数 ) ) );\r
265                                 }\r
266                         }\r
267 \r
268                         [StructLayout( LayoutKind.Sequential )]\r
269                         public struct STAUTOPLAY\r
270                         {\r
271                                 public bool LC;\r
272                                 public bool HH;\r
273                                 public bool SD;\r
274                                 public bool BD;\r
275                                 public bool HT;\r
276                                 public bool LT;\r
277                                 public bool FT;\r
278                                 public bool CY;\r
279                                 public bool Guitar;\r
280                                 public bool Bass;\r
281                                 public bool this[ int index ]\r
282                                 {\r
283                                         get\r
284                                         {\r
285                                                 switch( index )\r
286                                                 {\r
287                                                         case 0:\r
288                                                                 return this.LC;\r
289 \r
290                                                         case 1:\r
291                                                                 return this.HH;\r
292 \r
293                                                         case 2:\r
294                                                                 return this.SD;\r
295 \r
296                                                         case 3:\r
297                                                                 return this.BD;\r
298 \r
299                                                         case 4:\r
300                                                                 return this.HT;\r
301 \r
302                                                         case 5:\r
303                                                                 return this.LT;\r
304 \r
305                                                         case 6:\r
306                                                                 return this.FT;\r
307 \r
308                                                         case 7:\r
309                                                                 return this.CY;\r
310 \r
311                                                         case 8:\r
312                                                                 return this.Guitar;\r
313 \r
314                                                         case 9:\r
315                                                                 return this.Bass;\r
316                                                 }\r
317                                                 throw new IndexOutOfRangeException();\r
318                                         }\r
319                                         set\r
320                                         {\r
321                                                 switch( index )\r
322                                                 {\r
323                                                         case 0:\r
324                                                                 this.LC = value;\r
325                                                                 return;\r
326 \r
327                                                         case 1:\r
328                                                                 this.HH = value;\r
329                                                                 return;\r
330 \r
331                                                         case 2:\r
332                                                                 this.SD = value;\r
333                                                                 return;\r
334 \r
335                                                         case 3:\r
336                                                                 this.BD = value;\r
337                                                                 return;\r
338 \r
339                                                         case 4:\r
340                                                                 this.HT = value;\r
341                                                                 return;\r
342 \r
343                                                         case 5:\r
344                                                                 this.LT = value;\r
345                                                                 return;\r
346 \r
347                                                         case 6:\r
348                                                                 this.FT = value;\r
349                                                                 return;\r
350 \r
351                                                         case 7:\r
352                                                                 this.CY = value;\r
353                                                                 return;\r
354 \r
355                                                         case 8:\r
356                                                                 this.Guitar = value;\r
357                                                                 return;\r
358 \r
359                                                         case 9:\r
360                                                                 this.Bass = value;\r
361                                                                 return;\r
362                                                 }\r
363                                                 throw new IndexOutOfRangeException();\r
364                                         }\r
365                                 }\r
366                         }\r
367                 }\r
368 \r
369                 /// <summary>\r
370                 /// <para>.score.ini の存在するフォルダ(絶対パス;末尾に '\' はついていない)。</para>\r
371                 /// <para>未保存などでファイル名がない場合は null。</para>\r
372                 /// </summary>\r
373                 public string iniファイルのあるフォルダ名\r
374                 {\r
375                         get;\r
376                         private set;\r
377                 }\r
378 \r
379                 /// <summary>\r
380                 /// <para>.score.ini のファイル名(絶対パス)。</para>\r
381                 /// <para>未保存などでファイル名がない場合は null。</para>\r
382                 /// </summary>\r
383                 public string iniファイル名\r
384                 {\r
385                         get; \r
386                         private set;\r
387                 }\r
388 \r
389 \r
390                 // コンストラクタ\r
391 \r
392                 public CScoreIni()\r
393                 {\r
394                         this.iniファイルのあるフォルダ名 = null;\r
395                         this.iniファイル名 = null;\r
396                         STファイル stファイル = new STファイル();\r
397                         stファイル.Title = "";\r
398                         stファイル.Name = "";\r
399                         stファイル.Hash = "";\r
400                         stファイル.History = new string[] { "", "", "", "", "" };\r
401                         this.stファイル = stファイル;\r
402                         STセクション stセクション = new STセクション();\r
403                         stセクション.HiScoreDrums = new C演奏記録();\r
404                         stセクション.HiSkillDrums = new C演奏記録();\r
405                         stセクション.HiScoreGuitar = new C演奏記録();\r
406             stセクション.HiSkillGuitar = new C演奏記録();\r
407             stセクション.HiScoreBass = new C演奏記録();\r
408             stセクション.HiSkillBass = new C演奏記録();\r
409             stセクション.LastPlayDrums = new C演奏記録();\r
410             stセクション.LastPlayGuitar = new C演奏記録();\r
411             stセクション.LastPlayBass = new C演奏記録();\r
412                         this.stセクション = stセクション;\r
413                 }\r
414 \r
415                 /// <summary>\r
416                 /// <para>初期化後にiniファイルを読み込むコンストラクタ。</para>\r
417                 /// <para>読み込んだiniに不正値があれば、それが含まれるセクションをリセットする。</para>\r
418                 /// </summary>\r
419                 public CScoreIni( string str読み込むiniファイル )\r
420                         : this()\r
421                 {\r
422                         this.t読み込み( str読み込むiniファイル );\r
423                         this.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
424                 }\r
425 \r
426 \r
427                 // メソッド\r
428 \r
429                 /// <summary>\r
430                 /// <para>現在の this.Record[] オブジェクトの、指定されたセクションの情報が正当であるか否かを判定する。\r
431                 /// 真偽どちらでも、その内容は書き換えない。</para>\r
432                 /// </summary>\r
433                 /// <param name="eセクション">判定するセクション。</param>\r
434                 /// <returns>正当である(整合性がある)場合は true。</returns>\r
435                 public bool b整合性がある( Eセクション種別 eセクション )\r
436                 {\r
437                         return true;    // オープンソース化に伴い、整合性チェックを無効化。(2010.10.21)\r
438                 }\r
439                 \r
440                 /// <summary>\r
441                 /// 指定されたファイルの内容から MD5 値を求め、それを16進数に変換した文字列を返す。\r
442                 /// </summary>\r
443                 /// <param name="ファイル名">MD5 を求めるファイル名。</param>\r
444                 /// <returns>算出結果の MD5 を16進数で並べた文字列。</returns>\r
445                 public static string tファイルのMD5を求めて返す( string ファイル名 )\r
446                 {\r
447                         byte[] buffer = null;\r
448                         FileStream stream = new FileStream( ファイル名, FileMode.Open, FileAccess.Read );\r
449                         buffer = new byte[ stream.Length ];\r
450                         stream.Read( buffer, 0, (int) stream.Length );\r
451                         stream.Close();\r
452                         byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( buffer );\r
453 \r
454                         StringBuilder builder = new StringBuilder( 0x21 );\r
455                         foreach( byte num in buffer2 )\r
456                                 builder.Append( num.ToString( "x2" ) );\r
457 \r
458                         return builder.ToString();\r
459                 }\r
460                 \r
461                 /// <summary>\r
462                 /// 指定された .score.ini を読み込む。内容の真偽は判定しない。\r
463                 /// </summary>\r
464                 /// <param name="iniファイル名">読み込む .score.ini ファイルを指定します(絶対パスが安全)。</param>\r
465                 public void t読み込み( string iniファイル名 )\r
466                 {\r
467                         this.iniファイルのあるフォルダ名 = Path.GetDirectoryName( iniファイル名 );\r
468                         this.iniファイル名 = Path.GetFileName( iniファイル名 );\r
469 \r
470                         Eセクション種別 unknown = Eセクション種別.Unknown;\r
471                         if( File.Exists( iniファイル名 ) )\r
472                         {\r
473                                 string str;\r
474                                 StreamReader reader = new StreamReader( iniファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
475                                 while( ( str = reader.ReadLine() ) != null )\r
476                                 {\r
477                                         str = str.Replace( '\t', ' ' ).TrimStart( new char[] { '\t', ' ' } );\r
478                                         if( ( str.Length != 0 ) && ( str[ 0 ] != ';' ) )\r
479                                         {\r
480                                                 try\r
481                                                 {\r
482                                                         string str3;\r
483                                                         string str4;\r
484                                                         C演奏記録 c演奏記録;\r
485                                                         if( str[ 0 ] == '[' )\r
486                                                         {\r
487                                                                 StringBuilder builder = new StringBuilder( 0x20 );\r
488                                                                 int num = 1;\r
489                                                                 while( ( num < str.Length ) && ( str[ num ] != ']' ) )\r
490                                                                 {\r
491                                                                         builder.Append( str[ num++ ] );\r
492                                                                 }\r
493                                                                 string str2 = builder.ToString();\r
494                                                                 if( str2.Equals( "File" ) )\r
495                                                                 {\r
496                                                                         unknown = Eセクション種別.File;\r
497                                                                 }\r
498                                                                 else if( str2.Equals( "HiScore.Drums" ) )\r
499                                                                 {\r
500                                                                         unknown = Eセクション種別.HiScoreDrums;\r
501                                                                 }\r
502                                                                 else if( str2.Equals( "HiSkill.Drums" ) )\r
503                                                                 {\r
504                                                                         unknown = Eセクション種別.HiSkillDrums;\r
505                                                                 }\r
506                                                                 else if( str2.Equals( "HiScore.Guitar" ) )\r
507                                                                 {\r
508                                                                         unknown = Eセクション種別.HiScoreGuitar;\r
509                                                                 }\r
510                                                                 else if( str2.Equals( "HiSkill.Guitar" ) )\r
511                                                                 {\r
512                                                                         unknown = Eセクション種別.HiSkillGuitar;\r
513                                                                 }\r
514                                                                 else if( str2.Equals( "HiScore.Bass" ) )\r
515                                                                 {\r
516                                                                         unknown = Eセクション種別.HiScoreBass;\r
517                                 }\r
518                                 else if (str2.Equals("HiSkill.Bass"))\r
519                                 {\r
520                                     unknown = Eセクション種別.HiSkillBass;\r
521                                 }\r
522                                 // #23595 2011.1.9 ikanick\r
523                                 else if (str2.Equals("LastPlay.Drums"))\r
524                                 {\r
525                                     unknown = Eセクション種別.LastPlayDrums;\r
526                                 }\r
527                                 else if (str2.Equals("LastPlay.Guitar"))\r
528                                 {\r
529                                     unknown = Eセクション種別.LastPlayGuitar;\r
530                                 }\r
531                                 else if (str2.Equals("LastPlay.Bass"))\r
532                                 {\r
533                                     unknown = Eセクション種別.LastPlayBass;\r
534                                 }\r
535                                 //----------------------------------------------------\r
536                                                                 else\r
537                                                                 {\r
538                                                                         unknown = Eセクション種別.Unknown;\r
539                                                                 }\r
540                                                         }\r
541                                                         else\r
542                                                         {\r
543                                                                 string[] strArray = str.Split( new char[] { '=' } );\r
544                                                                 if( strArray.Length == 2 )\r
545                                                                 {\r
546                                                                         str3 = strArray[ 0 ].Trim();\r
547                                                                         str4 = strArray[ 1 ].Trim();\r
548                                                                         switch( unknown )\r
549                                                                         {\r
550                                                                                 case Eセクション種別.File:\r
551                                                                                         {\r
552                                                                                                 if( !str3.Equals( "Title" ) )\r
553                                                                                                 {\r
554                                                                                                         goto Label_01C7;\r
555                                                                                                 }\r
556                                                                                                 this.stファイル.Title = str4;\r
557                                                                                                 continue;\r
558                                                                                         }\r
559                                                                                 case Eセクション種別.HiScoreDrums:\r
560                                                                                 case Eセクション種別.HiSkillDrums:\r
561                                                                                 case Eセクション種別.HiScoreGuitar:\r
562                                                                                 case Eセクション種別.HiSkillGuitar:\r
563                                                                                 case Eセクション種別.HiScoreBass:\r
564                                         case Eセクション種別.HiSkillBass:\r
565                                         case Eセクション種別.LastPlayDrums:// #23595 2011.1.9 ikanick\r
566                                         case Eセクション種別.LastPlayGuitar:\r
567                                         case Eセクション種別.LastPlayBass:\r
568                                                                                         {\r
569                                                                                                 c演奏記録 = this.stセクション[ (int) unknown ];\r
570                                                                                                 if( !str3.Equals( "Score" ) )\r
571                                                                                                 {\r
572                                                                                                         goto Label_03B9;\r
573                                                                                                 }\r
574                                                                                                 c演奏記録.nスコア = long.Parse( str4 );\r
575                                                                                                 continue;\r
576                                                                                         }\r
577                                                                         }\r
578                                                                 }\r
579                                                         }\r
580                                                         continue;\r
581                                                 Label_01C7:\r
582                                                         if( str3.Equals( "Name" ) )\r
583                                                         {\r
584                                                                 this.stファイル.Name = str4;\r
585                                                         }\r
586                                                         else if( str3.Equals( "Hash" ) )\r
587                                                         {\r
588                                                                 this.stファイル.Hash = str4;\r
589                                                         }\r
590                                                         else if( str3.Equals( "PlayCountDrums" ) )\r
591                                                         {\r
592                                                                 this.stファイル.PlayCountDrums = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
593                                                         }\r
594                                                         else if( str3.Equals( "PlayCountGuitars" ) )// #23596 11.2.5 changed ikanick\r
595                                                         {\r
596                                                                 this.stファイル.PlayCountGuitar = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
597                                                         }\r
598                                                         else if( str3.Equals( "PlayCountBass" ) )\r
599                                                         {\r
600                                                                 this.stファイル.PlayCountBass = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
601                             }\r
602                             // #23596 10.11.16 add ikanick------------------------------------/\r
603                             else if (str3.Equals("ClearCountDrums"))\r
604                             {\r
605                                 this.stファイル.ClearCountDrums = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 0x5f5e0ff, 0);\r
606                             }\r
607                             else if (str3.Equals("ClearCountGuitars"))// #23596 11.2.5 changed ikanick\r
608                             {\r
609                                 this.stファイル.ClearCountGuitar = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 0x5f5e0ff, 0);\r
610                             }\r
611                             else if (str3.Equals("ClearCountBass"))\r
612                             {\r
613                                 this.stファイル.ClearCountBass = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 0x5f5e0ff, 0);\r
614                             }\r
615                             //----------------------------------------------------------------/\r
616                                                         else if( str3.Equals( "History0" ) )\r
617                                                         {\r
618                                                                 this.stファイル.History[ 0 ] = str4;\r
619                                                         }\r
620                                                         else if( str3.Equals( "History1" ) )\r
621                                                         {\r
622                                                                 this.stファイル.History[ 1 ] = str4;\r
623                                                         }\r
624                                                         else if( str3.Equals( "History2" ) )\r
625                                                         {\r
626                                                                 this.stファイル.History[ 2 ] = str4;\r
627                                                         }\r
628                                                         else if( str3.Equals( "History3" ) )\r
629                                                         {\r
630                                                                 this.stファイル.History[ 3 ] = str4;\r
631                                                         }\r
632                                                         else if( str3.Equals( "History4" ) )\r
633                                                         {\r
634                                                                 this.stファイル.History[ 4 ] = str4;\r
635                                                         }\r
636                                                         else if( str3.Equals( "HistoryCount" ) )\r
637                                                         {\r
638                                                                 this.stファイル.HistoryCount = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 0x5f5e0ff, 0 );\r
639                                                         }\r
640                                                         else if( str3.Equals( "BGMAdjust" ) )\r
641                                                         {\r
642                                                                 this.stファイル.BGMAdjust = C変換.n値を文字列から取得して返す( str4, 0 );\r
643                                                         }\r
644                                                         continue;\r
645                                                 Label_03B9:\r
646                                                         if( str3.Equals( "PlaySkill" ) )\r
647                                                         {\r
648                                                                 c演奏記録.db演奏型スキル値 = (double) decimal.Parse( str4 );\r
649                                                         }\r
650                                                         else if( str3.Equals( "Skill" ) )\r
651                                                         {\r
652                                                                 c演奏記録.dbゲーム型スキル値 = (double) decimal.Parse( str4 );\r
653                                                         }\r
654                                                         else if( str3.Equals( "Perfect" ) )\r
655                                                         {\r
656                                                                 c演奏記録.nPerfect数 = int.Parse( str4 );\r
657                                                         }\r
658                                                         else if( str3.Equals( "Great" ) )\r
659                                                         {\r
660                                                                 c演奏記録.nGreat数 = int.Parse( str4 );\r
661                                                         }\r
662                                                         else if( str3.Equals( "Good" ) )\r
663                                                         {\r
664                                                                 c演奏記録.nGood数 = int.Parse( str4 );\r
665                                                         }\r
666                                                         else if( str3.Equals( "Poor" ) )\r
667                                                         {\r
668                                                                 c演奏記録.nPoor数 = int.Parse( str4 );\r
669                                                         }\r
670                                                         else if( str3.Equals( "Miss" ) )\r
671                                                         {\r
672                                                                 c演奏記録.nMiss数 = int.Parse( str4 );\r
673                                                         }\r
674                                                         else if( str3.Equals( "MaxCombo" ) )\r
675                                                         {\r
676                                                                 c演奏記録.n最大コンボ数 = int.Parse( str4 );\r
677                                                         }\r
678                                                         else if( str3.Equals( "TotalChips" ) )\r
679                                                         {\r
680                                                                 c演奏記録.n全チップ数 = int.Parse( str4 );\r
681                                                         }\r
682                                                         else if( str3.Equals( "AutoPlay" ) )\r
683                                                         {\r
684                                                                 if( str4.Length == 9 )\r
685                                                                 {\r
686                                                                         for( int i = 0; i < 9; i++ )\r
687                                                                         {\r
688                                                                                 c演奏記録.bAutoPlay[ i ] = this.ONorOFF( str4[ i ] );\r
689                                                                         }\r
690                                                                 }\r
691                                                                 else if( str4.Length == 10 )\r
692                                                                 {\r
693                                                                         for( int j = 0; j < 10; j++ )\r
694                                                                         {\r
695                                                                                 c演奏記録.bAutoPlay[ j ] = this.ONorOFF( str4[ j ] );\r
696                                                                         }\r
697                                                                 }\r
698                                                         }\r
699                                                         else if( str3.Equals( "TightDrums" ) )\r
700                                                         {\r
701                                                                 c演奏記録.bTight = C変換.bONorOFF( str4[ 0 ] );\r
702                                                         }\r
703                                                         else if( str3.Equals( "SuddenDrums" ) )\r
704                                                         {\r
705                                                                 c演奏記録.bSudden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
706                                                         }\r
707                                                         else if( str3.Equals( "SuddenGuitar" ) )\r
708                                                         {\r
709                                                                 c演奏記録.bSudden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
710                                                         }\r
711                                                         else if( str3.Equals( "SuddenBass" ) )\r
712                                                         {\r
713                                                                 c演奏記録.bSudden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
714                                                         }\r
715                                                         else if( str3.Equals( "HiddenDrums" ) )\r
716                                                         {\r
717                                                                 c演奏記録.bHidden.Drums = C変換.bONorOFF( str4[ 0 ] );\r
718                                                         }\r
719                                                         else if( str3.Equals( "HiddenGuitar" ) )\r
720                                                         {\r
721                                                                 c演奏記録.bHidden.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
722                                                         }\r
723                                                         else if( str3.Equals( "HiddenBass" ) )\r
724                                                         {\r
725                                                                 c演奏記録.bHidden.Bass = C変換.bONorOFF( str4[ 0 ] );\r
726                                                         }\r
727                                                         else if( str3.Equals( "ReverseDrums" ) )\r
728                                                         {\r
729                                                                 c演奏記録.bReverse.Drums = C変換.bONorOFF( str4[ 0 ] );\r
730                                                         }\r
731                                                         else if( str3.Equals( "ReverseGuitar" ) )\r
732                                                         {\r
733                                                                 c演奏記録.bReverse.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
734                                                         }\r
735                                                         else if( str3.Equals( "ReverseBass" ) )\r
736                                                         {\r
737                                                                 c演奏記録.bReverse.Bass = C変換.bONorOFF( str4[ 0 ] );\r
738                                                         }\r
739                                                         else\r
740                                                         {\r
741                                                                 if( str3.Equals( "RandomGuitar" ) )\r
742                                                                 {\r
743                                                                         switch( int.Parse( str4 ) )\r
744                                                                         {\r
745                                                                                 case 0:\r
746                                                                                         {\r
747                                                                                                 c演奏記録.eRandom.Guitar = Eランダムモード.OFF;\r
748                                                                                                 continue;\r
749                                                                                         }\r
750                                                                                 case 1:\r
751                                                                                         {\r
752                                                                                                 c演奏記録.eRandom.Guitar = Eランダムモード.RANDOM;\r
753                                                                                                 continue;\r
754                                                                                         }\r
755                                                                                 case 2:\r
756                                                                                         {\r
757                                                                                                 c演奏記録.eRandom.Guitar = Eランダムモード.SUPERRANDOM;\r
758                                                                                                 continue;\r
759                                                                                         }\r
760                                                                         }\r
761                                                                         throw new Exception( "RandomGuitar の値が無効です。" );\r
762                                                                 }\r
763                                                                 if( str3.Equals( "RandomBass" ) )\r
764                                                                 {\r
765                                                                         switch( int.Parse( str4 ) )\r
766                                                                         {\r
767                                                                                 case 0:\r
768                                                                                         {\r
769                                                                                                 c演奏記録.eRandom.Bass = Eランダムモード.OFF;\r
770                                                                                                 continue;\r
771                                                                                         }\r
772                                                                                 case 1:\r
773                                                                                         {\r
774                                                                                                 c演奏記録.eRandom.Bass = Eランダムモード.RANDOM;\r
775                                                                                                 continue;\r
776                                                                                         }\r
777                                                                                 case 2:\r
778                                                                                         {\r
779                                                                                                 c演奏記録.eRandom.Bass = Eランダムモード.SUPERRANDOM;\r
780                                                                                                 continue;\r
781                                                                                         }\r
782                                                                         }\r
783                                                                         throw new Exception( "RandomBass の値が無効です。" );\r
784                                                                 }\r
785                                                                 if( str3.Equals( "LightGuitar" ) )\r
786                                                                 {\r
787                                                                         c演奏記録.bLight.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
788                                                                 }\r
789                                                                 else if( str3.Equals( "LightBass" ) )\r
790                                                                 {\r
791                                                                         c演奏記録.bLight.Bass = C変換.bONorOFF( str4[ 0 ] );\r
792                                                                 }\r
793                                                                 else if( str3.Equals( "LeftGuitar" ) )\r
794                                                                 {\r
795                                                                         c演奏記録.bLeft.Guitar = C変換.bONorOFF( str4[ 0 ] );\r
796                                                                 }\r
797                                                                 else if( str3.Equals( "LeftBass" ) )\r
798                                                                 {\r
799                                                                         c演奏記録.bLeft.Bass = C変換.bONorOFF( str4[ 0 ] );\r
800                                                                 }\r
801                                                                 else\r
802                                                                 {\r
803                                                                         if( str3.Equals( "Dark" ) )\r
804                                                                         {\r
805                                                                                 switch( int.Parse( str4 ) )\r
806                                                                                 {\r
807                                                                                         case 0:\r
808                                                                                                 {\r
809                                                                                                         c演奏記録.eDark = Eダークモード.OFF;\r
810                                                                                                         continue;\r
811                                                                                                 }\r
812                                                                                         case 1:\r
813                                                                                                 {\r
814                                                                                                         c演奏記録.eDark = Eダークモード.HALF;\r
815                                                                                                         continue;\r
816                                                                                                 }\r
817                                                                                         case 2:\r
818                                                                                                 {\r
819                                                                                                         c演奏記録.eDark = Eダークモード.FULL;\r
820                                                                                                         continue;\r
821                                                                                                 }\r
822                                                                                 }\r
823                                                                                 throw new Exception( "Dark の値が無効です。" );\r
824                                                                         }\r
825                                                                         if( str3.Equals( "ScrollSpeedDrums" ) )\r
826                                                                         {\r
827                                                                                 c演奏記録.f譜面スクロール速度.Drums = (float) decimal.Parse( str4 );\r
828                                                                         }\r
829                                                                         else if( str3.Equals( "ScrollSpeedGuitar" ) )\r
830                                                                         {\r
831                                                                                 c演奏記録.f譜面スクロール速度.Guitar = (float) decimal.Parse( str4 );\r
832                                                                         }\r
833                                                                         else if( str3.Equals( "ScrollSpeedBass" ) )\r
834                                                                         {\r
835                                                                                 c演奏記録.f譜面スクロール速度.Bass = (float) decimal.Parse( str4 );\r
836                                                                         }\r
837                                                                         else if( str3.Equals( "PlaySpeed" ) )\r
838                                                                         {\r
839                                                                                 string[] strArray2 = str4.Split( new char[] { '/' } );\r
840                                                                                 if( strArray2.Length == 2 )\r
841                                                                                 {\r
842                                                                                         c演奏記録.n演奏速度分子 = int.Parse( strArray2[ 0 ] );\r
843                                                                                         c演奏記録.n演奏速度分母 = int.Parse( strArray2[ 1 ] );\r
844                                                                                 }\r
845                                                                         }\r
846                                                                         else\r
847                                                                         {\r
848                                                                                 if( str3.Equals( "HHGroup" ) )\r
849                                                                                 {\r
850                                                                                         switch( int.Parse( str4 ) )\r
851                                                                                         {\r
852                                                                                                 case 0:\r
853                                                                                                         {\r
854                                                                                                                 c演奏記録.eHHGroup = EHHGroup.全部打ち分ける;\r
855                                                                                                                 continue;\r
856                                                                                                         }\r
857                                                                                                 case 1:\r
858                                                                                                         {\r
859                                                                                                                 c演奏記録.eHHGroup = EHHGroup.ハイハットのみ打ち分ける;\r
860                                                                                                                 continue;\r
861                                                                                                         }\r
862                                                                                                 case 2:\r
863                                                                                                         {\r
864                                                                                                                 c演奏記録.eHHGroup = EHHGroup.左シンバルのみ打ち分ける;\r
865                                                                                                                 continue;\r
866                                                                                                         }\r
867                                                                                                 case 3:\r
868                                                                                                         {\r
869                                                                                                                 c演奏記録.eHHGroup = EHHGroup.全部共通;\r
870                                                                                                                 continue;\r
871                                                                                                         }\r
872                                                                                         }\r
873                                                                                         throw new Exception( "HHGroup の値が無効です。" );\r
874                                                                                 }\r
875                                                                                 if( str3.Equals( "FTGroup" ) )\r
876                                                                                 {\r
877                                                                                         switch( int.Parse( str4 ) )\r
878                                                                                         {\r
879                                                                                                 case 0:\r
880                                                                                                         {\r
881                                                                                                                 c演奏記録.eFTGroup = EFTGroup.打ち分ける;\r
882                                                                                                                 continue;\r
883                                                                                                         }\r
884                                                                                                 case 1:\r
885                                                                                                         {\r
886                                                                                                                 c演奏記録.eFTGroup = EFTGroup.共通;\r
887                                                                                                                 continue;\r
888                                                                                                         }\r
889                                                                                         }\r
890                                                                                         throw new Exception( "FTGroup の値が無効です。" );\r
891                                                                                 }\r
892                                                                                 if( str3.Equals( "CYGroup" ) )\r
893                                                                                 {\r
894                                                                                         switch( int.Parse( str4 ) )\r
895                                                                                         {\r
896                                                                                                 case 0:\r
897                                                                                                         {\r
898                                                                                                                 c演奏記録.eCYGroup = ECYGroup.打ち分ける;\r
899                                                                                                                 continue;\r
900                                                                                                         }\r
901                                                                                                 case 1:\r
902                                                                                                         {\r
903                                                                                                                 c演奏記録.eCYGroup = ECYGroup.共通;\r
904                                                                                                                 continue;\r
905                                                                                                         }\r
906                                                                                         }\r
907                                                                                         throw new Exception( "CYGroup の値が無効です。" );\r
908                                                                                 }\r
909                                                                                 if( str3.Equals( "HitSoundPriorityHH" ) )\r
910                                                                                 {\r
911                                                                                         switch( int.Parse( str4 ) )\r
912                                                                                         {\r
913                                                                                                 case 0:\r
914                                                                                                         {\r
915                                                                                                                 c演奏記録.eHitSoundPriorityHH = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
916                                                                                                                 continue;\r
917                                                                                                         }\r
918                                                                                                 case 1:\r
919                                                                                                         {\r
920                                                                                                                 c演奏記録.eHitSoundPriorityHH = E打ち分け時の再生の優先順位.PadがChipより優先;\r
921                                                                                                                 continue;\r
922                                                                                                         }\r
923                                                                                         }\r
924                                                                                         throw new Exception( "HitSoundPriorityHH の値が無効です。" );\r
925                                                                                 }\r
926                                                                                 if( str3.Equals( "HitSoundPriorityFT" ) )\r
927                                                                                 {\r
928                                                                                         switch( int.Parse( str4 ) )\r
929                                                                                         {\r
930                                                                                                 case 0:\r
931                                                                                                         {\r
932                                                                                                                 c演奏記録.eHitSoundPriorityFT = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
933                                                                                                                 continue;\r
934                                                                                                         }\r
935                                                                                                 case 1:\r
936                                                                                                         {\r
937                                                                                                                 c演奏記録.eHitSoundPriorityFT = E打ち分け時の再生の優先順位.PadがChipより優先;\r
938                                                                                                                 continue;\r
939                                                                                                         }\r
940                                                                                         }\r
941                                                                                         throw new Exception( "HitSoundPriorityFT の値が無効です。" );\r
942                                                                                 }\r
943                                                                                 if( str3.Equals( "HitSoundPriorityCY" ) )\r
944                                                                                 {\r
945                                                                                         switch( int.Parse( str4 ) )\r
946                                                                                         {\r
947                                                                                                 case 0:\r
948                                                                                                         {\r
949                                                                                                                 c演奏記録.eHitSoundPriorityCY = E打ち分け時の再生の優先順位.ChipがPadより優先;\r
950                                                                                                                 continue;\r
951                                                                                                         }\r
952                                                                                                 case 1:\r
953                                                                                                         {\r
954                                                                                                                 c演奏記録.eHitSoundPriorityCY = E打ち分け時の再生の優先順位.PadがChipより優先;\r
955                                                                                                                 continue;\r
956                                                                                                         }\r
957                                                                                         }\r
958                                                                                         throw new Exception( "HitSoundPriorityCY の値が無効です。" );\r
959                                                                                 }\r
960                                                                                 if( str3.Equals( "Guitar" ) )\r
961                                                                                 {\r
962                                                                                         c演奏記録.bGuitar有効 = C変換.bONorOFF( str4[ 0 ] );\r
963                                                                                 }\r
964                                                                                 else if( str3.Equals( "Drums" ) )\r
965                                                                                 {\r
966                                                                                         c演奏記録.bDrums有効 = C変換.bONorOFF( str4[ 0 ] );\r
967                                                                                 }\r
968                                                                                 else if( str3.Equals( "StageFailed" ) )\r
969                                                                                 {\r
970                                                                                         c演奏記録.bSTAGEFAILED有効 = C変換.bONorOFF( str4[ 0 ] );\r
971                                                                                 }\r
972                                                                                 else\r
973                                                                                 {\r
974                                                                                         if( str3.Equals( "DamageLevel" ) )\r
975                                                                                         {\r
976                                                                                                 switch( int.Parse( str4 ) )\r
977                                                                                                 {\r
978                                                                                                         case 0:\r
979                                                                                                                 {\r
980                                                                                                                         c演奏記録.eダメージレベル = Eダメージレベル.少ない;\r
981                                                                                                                         continue;\r
982                                                                                                                 }\r
983                                                                                                         case 1:\r
984                                                                                                                 {\r
985                                                                                                                         c演奏記録.eダメージレベル = Eダメージレベル.普通;\r
986                                                                                                                         continue;\r
987                                                                                                                 }\r
988                                                                                                         case 2:\r
989                                                                                                                 {\r
990                                                                                                                         c演奏記録.eダメージレベル = Eダメージレベル.大きい;\r
991                                                                                                                         continue;\r
992                                                                                                                 }\r
993                                                                                                 }\r
994                                                                                                 throw new Exception( "DamageLevel の値が無効です。" );\r
995                                                                                         }\r
996                                                                                         if( str3.Equals( "UseKeyboard" ) )\r
997                                                                                         {\r
998                                                                                                 c演奏記録.b演奏にキーボードを使用した = C変換.bONorOFF( str4[ 0 ] );\r
999                                                                                         }\r
1000                                                                                         else if( str3.Equals( "UseMIDIIN" ) )\r
1001                                                                                         {\r
1002                                                                                                 c演奏記録.b演奏にMIDI入力を使用した = C変換.bONorOFF( str4[ 0 ] );\r
1003                                                                                         }\r
1004                                                                                         else if( str3.Equals( "UseJoypad" ) )\r
1005                                                                                         {\r
1006                                                                                                 c演奏記録.b演奏にジョイパッドを使用した = C変換.bONorOFF( str4[ 0 ] );\r
1007                                                                                         }\r
1008                                                                                         else if( str3.Equals( "UseMouse" ) )\r
1009                                                                                         {\r
1010                                                                                                 c演奏記録.b演奏にマウスを使用した = C変換.bONorOFF( str4[ 0 ] );\r
1011                                                                                         }\r
1012                                                                                         else if( str3.Equals( "PerfectRange" ) )\r
1013                                                                                         {\r
1014                                                                                                 c演奏記録.nPerfectになる範囲ms = int.Parse( str4 );\r
1015                                                                                         }\r
1016                                                                                         else if( str3.Equals( "GreatRange" ) )\r
1017                                                                                         {\r
1018                                                                                                 c演奏記録.nGreatになる範囲ms = int.Parse( str4 );\r
1019                                                                                         }\r
1020                                                                                         else if( str3.Equals( "GoodRange" ) )\r
1021                                                                                         {\r
1022                                                                                                 c演奏記録.nGoodになる範囲ms = int.Parse( str4 );\r
1023                                                                                         }\r
1024                                                                                         else if( str3.Equals( "PoorRange" ) )\r
1025                                                                                         {\r
1026                                                                                                 c演奏記録.nPoorになる範囲ms = int.Parse( str4 );\r
1027                                                                                         }\r
1028                                                                                         else if( str3.Equals( "DTXManiaVersion" ) )\r
1029                                                                                         {\r
1030                                                                                                 c演奏記録.strDTXManiaのバージョン = str4;\r
1031                                                                                         }\r
1032                                                                                         else if( str3.Equals( "DateTime" ) )\r
1033                                                                                         {\r
1034                                                                                                 c演奏記録.最終更新日時 = str4;\r
1035                                                                                         }\r
1036                                                                                         else if( str3.Equals( "Hash" ) )\r
1037                                                                                         {\r
1038                                                                                                 c演奏記録.Hash = str4;\r
1039                                                                                         }\r
1040                                                                                         else if( str3.Equals( "9LaneMode" ) )\r
1041                                                                                         {\r
1042                                                                                                 c演奏記録.レーン9モード = C変換.bONorOFF( str4[ 0 ] );\r
1043                                                                                         }\r
1044                                                                                 }\r
1045                                                                         }\r
1046                                                                 }\r
1047                                                         }\r
1048                                                         continue;\r
1049                                                 }\r
1050                                                 catch( Exception exception )\r
1051                                                 {\r
1052                                                         Trace.TraceError( "{0}読み込みを中断します。({1})", new object[] { exception.Message, iniファイル名 } );\r
1053                                                         break;\r
1054                                                 }\r
1055                                         }\r
1056                                 }\r
1057                                 reader.Close();\r
1058                         }\r
1059                 }\r
1060 \r
1061                 internal void tヒストリを追加する( string str追加文字列 )\r
1062                 {\r
1063                         this.stファイル.HistoryCount++;\r
1064                         for( int i = 3; i >= 0; i-- )\r
1065                                 this.stファイル.History[ i + 1 ] = this.stファイル.History[ i ];\r
1066                         DateTime now = DateTime.Now;\r
1067                         this.stファイル.History[ 0 ] = string.Format( "{0:0}.{1:D2}/{2}/{3} {4}", new object[] { this.stファイル.HistoryCount, now.Year % 100, now.Month, now.Day, str追加文字列 } );\r
1068                 }\r
1069                 internal void t書き出し( string iniファイル名 )\r
1070                 {\r
1071                         this.iniファイルのあるフォルダ名 = Path.GetDirectoryName( iniファイル名 );\r
1072                         this.iniファイル名 = Path.GetFileName( iniファイル名 );\r
1073 \r
1074                         StreamWriter writer = new StreamWriter( iniファイル名, false, Encoding.GetEncoding( "shift-jis" ) );\r
1075                         writer.WriteLine( "[File]" );\r
1076                         writer.WriteLine( "Title={0}", this.stファイル.Title );\r
1077                         writer.WriteLine( "Name={0}", this.stファイル.Name );\r
1078                         writer.WriteLine( "Hash={0}", this.stファイル.Hash );\r
1079                         writer.WriteLine( "PlayCountDrums={0}", this.stファイル.PlayCountDrums );\r
1080                         writer.WriteLine( "PlayCountGuitars={0}", this.stファイル.PlayCountGuitar );\r
1081             writer.WriteLine( "PlayCountBass={0}", this.stファイル.PlayCountBass );\r
1082             writer.WriteLine( "ClearCountDrums={0}", this.stファイル.ClearCountDrums );       // #23596 10.11.16 add ikanick\r
1083             writer.WriteLine( "ClearCountGuitars={0}", this.stファイル.ClearCountGuitar );    //\r
1084             writer.WriteLine( "ClearCountBass={0}", this.stファイル.ClearCountBass );         //\r
1085                         writer.WriteLine( "HistoryCount={0}", this.stファイル.HistoryCount );\r
1086                         writer.WriteLine( "History0={0}", this.stファイル.History[ 0 ] );\r
1087                         writer.WriteLine( "History1={0}", this.stファイル.History[ 1 ] );\r
1088                         writer.WriteLine( "History2={0}", this.stファイル.History[ 2 ] );\r
1089                         writer.WriteLine( "History3={0}", this.stファイル.History[ 3 ] );\r
1090                         writer.WriteLine( "History4={0}", this.stファイル.History[ 4 ] );\r
1091                         writer.WriteLine( "BGMAdjust={0}", this.stファイル.BGMAdjust );\r
1092                         writer.WriteLine();\r
1093                         for( int i = 0; i < 9; i++ )\r
1094                         {\r
1095                 string[] strArray = new string[] { "HiScore.Drums", "HiSkill.Drums", "HiScore.Guitar", "HiSkill.Guitar", "HiScore.Bass", "HiSkill.Bass", "LastPlay.Drums", "LastPlay.Guitar", "LastPlay.Bass" };\r
1096                                 writer.WriteLine( "[{0}]", strArray[ i ] );\r
1097                                 writer.WriteLine( "Score={0}", this.stセクション[ i ].nスコア );\r
1098                                 writer.WriteLine( "PlaySkill={0}", this.stセクション[ i ].db演奏型スキル値 );\r
1099                                 writer.WriteLine( "Skill={0}", this.stセクション[ i ].dbゲーム型スキル値 );\r
1100                                 writer.WriteLine( "Perfect={0}", this.stセクション[ i ].nPerfect数 );\r
1101                                 writer.WriteLine( "Great={0}", this.stセクション[ i ].nGreat数 );\r
1102                                 writer.WriteLine( "Good={0}", this.stセクション[ i ].nGood数 );\r
1103                                 writer.WriteLine( "Poor={0}", this.stセクション[ i ].nPoor数 );\r
1104                                 writer.WriteLine( "Miss={0}", this.stセクション[ i ].nMiss数 );\r
1105                                 writer.WriteLine( "MaxCombo={0}", this.stセクション[ i ].n最大コンボ数 );\r
1106                                 writer.WriteLine( "TotalChips={0}", this.stセクション[ i ].n全チップ数 );\r
1107                                 writer.Write( "AutoPlay=" );\r
1108                                 for( int j = 0; j < 10; j++ )\r
1109                                 {\r
1110                                         writer.Write( this.stセクション[ i ].bAutoPlay[ j ] ? 1 : 0 );\r
1111                                 }\r
1112                                 writer.WriteLine();\r
1113                                 writer.WriteLine( "SuddenDrums={0}", this.stセクション[ i ].bSudden.Drums ? 1 : 0 );\r
1114                                 writer.WriteLine( "SuddenGuitar={0}", this.stセクション[ i ].bSudden.Guitar ? 1 : 0 );\r
1115                                 writer.WriteLine( "SuddenBass={0}", this.stセクション[ i ].bSudden.Bass ? 1 : 0 );\r
1116                                 writer.WriteLine( "HiddenDrums={0}", this.stセクション[ i ].bHidden.Drums ? 1 : 0 );\r
1117                                 writer.WriteLine( "HiddenGuitar={0}", this.stセクション[ i ].bHidden.Guitar ? 1 : 0 );\r
1118                                 writer.WriteLine( "HiddenBass={0}", this.stセクション[ i ].bHidden.Bass ? 1 : 0 );\r
1119                                 writer.WriteLine( "ReverseDrums={0}", this.stセクション[ i ].bReverse.Drums ? 1 : 0 );\r
1120                                 writer.WriteLine( "ReverseGuitar={0}", this.stセクション[ i ].bReverse.Guitar ? 1 : 0 );\r
1121                                 writer.WriteLine( "ReverseBass={0}", this.stセクション[ i ].bReverse.Bass ? 1 : 0 );\r
1122                                 writer.WriteLine( "TightDrums={0}", this.stセクション[ i ].bTight ? 1 : 0 );\r
1123                                 writer.WriteLine( "RandomGuitar={0}", (int) this.stセクション[ i ].eRandom.Guitar );\r
1124                                 writer.WriteLine( "RandomBass={0}", (int) this.stセクション[ i ].eRandom.Bass );\r
1125                                 writer.WriteLine( "LightGuitar={0}", this.stセクション[ i ].bLight.Guitar ? 1 : 0 );\r
1126                                 writer.WriteLine( "LightBass={0}", this.stセクション[ i ].bLight.Bass ? 1 : 0 );\r
1127                                 writer.WriteLine( "LeftGuitar={0}", this.stセクション[ i ].bLeft.Guitar ? 1 : 0 );\r
1128                                 writer.WriteLine( "LeftBass={0}", this.stセクション[ i ].bLeft.Bass ? 1 : 0 );\r
1129                                 writer.WriteLine( "Dark={0}", (int) this.stセクション[ i ].eDark );\r
1130                                 writer.WriteLine( "ScrollSpeedDrums={0}", this.stセクション[ i ].f譜面スクロール速度.Drums );\r
1131                                 writer.WriteLine( "ScrollSpeedGuitar={0}", this.stセクション[ i ].f譜面スクロール速度.Guitar );\r
1132                                 writer.WriteLine( "ScrollSpeedBass={0}", this.stセクション[ i ].f譜面スクロール速度.Bass );\r
1133                                 writer.WriteLine( "PlaySpeed={0}/{1}", this.stセクション[ i ].n演奏速度分子, this.stセクション[ i ].n演奏速度分母 );\r
1134                                 writer.WriteLine( "HHGroup={0}", (int) this.stセクション[ i ].eHHGroup );\r
1135                                 writer.WriteLine( "FTGroup={0}", (int) this.stセクション[ i ].eFTGroup );\r
1136                                 writer.WriteLine( "CYGroup={0}", (int) this.stセクション[ i ].eCYGroup );\r
1137                                 writer.WriteLine( "HitSoundPriorityHH={0}", (int) this.stセクション[ i ].eHitSoundPriorityHH );\r
1138                                 writer.WriteLine( "HitSoundPriorityFT={0}", (int) this.stセクション[ i ].eHitSoundPriorityFT );\r
1139                                 writer.WriteLine( "HitSoundPriorityCY={0}", (int) this.stセクション[ i ].eHitSoundPriorityCY );\r
1140                                 writer.WriteLine( "Guitar={0}", this.stセクション[ i ].bGuitar有効 ? 1 : 0 );\r
1141                                 writer.WriteLine( "Drums={0}", this.stセクション[ i ].bDrums有効 ? 1 : 0 );\r
1142                                 writer.WriteLine( "StageFailed={0}", this.stセクション[ i ].bSTAGEFAILED有効 ? 1 : 0 );\r
1143                                 writer.WriteLine( "DamageLevel={0}", (int) this.stセクション[ i ].eダメージレベル );\r
1144                                 writer.WriteLine( "UseKeyboard={0}", this.stセクション[ i ].b演奏にキーボードを使用した ? 1 : 0 );\r
1145                                 writer.WriteLine( "UseMIDIIN={0}", this.stセクション[ i ].b演奏にMIDI入力を使用した ? 1 : 0 );\r
1146                                 writer.WriteLine( "UseJoypad={0}", this.stセクション[ i ].b演奏にジョイパッドを使用した ? 1 : 0 );\r
1147                                 writer.WriteLine( "UseMouse={0}", this.stセクション[ i ].b演奏にマウスを使用した ? 1 : 0 );\r
1148                                 writer.WriteLine( "PerfectRange={0}", this.stセクション[ i ].nPerfectになる範囲ms );\r
1149                                 writer.WriteLine( "GreatRange={0}", this.stセクション[ i ].nGreatになる範囲ms );\r
1150                                 writer.WriteLine( "GoodRange={0}", this.stセクション[ i ].nGoodになる範囲ms );\r
1151                                 writer.WriteLine( "PoorRange={0}", this.stセクション[ i ].nPoorになる範囲ms );\r
1152                                 writer.WriteLine( "DTXManiaVersion={0}", this.stセクション[ i ].strDTXManiaのバージョン );\r
1153                                 writer.WriteLine( "DateTime={0}", this.stセクション[ i ].最終更新日時 );\r
1154                                 writer.WriteLine( "Hash={0}", this.stセクション[ i ].Hash );\r
1155                         }\r
1156                         writer.Close();\r
1157                 }\r
1158                 internal void t全演奏記録セクションの整合性をチェックし不整合があればリセットする()\r
1159                 {\r
1160                         for( int i = 0; i < 9; i++ )\r
1161                         {\r
1162                                 if( !this.b整合性がある( (Eセクション種別) i ) )\r
1163                                         this.stセクション[ i ] = new C演奏記録();\r
1164                         }\r
1165                 }\r
1166                 internal static int tランク値を計算して返す( C演奏記録 part )\r
1167                 {\r
1168                         if( part.b演奏にMIDI入力を使用した || part.b演奏にキーボードを使用した || part.b演奏にジョイパッドを使用した || part.b演奏にマウスを使用した )  // 2010.9.11\r
1169                         {\r
1170                                 int nTotal = ( ( ( part.nPerfect数 + part.nGreat数 ) + part.nGood数 ) + part.nPoor数 ) + part.nMiss数;\r
1171                                 return tランク値を計算して返す( nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数 );\r
1172                         }\r
1173                         return 99;\r
1174                 }\r
1175                 internal static int tランク値を計算して返す( int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss )\r
1176                 {\r
1177                         if( nTotal <= 0 )\r
1178                                 return 99;\r
1179 \r
1180                         int num = 6;\r
1181                         int num2 = nTotal - ( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss );\r
1182                         if( nTotal == num2 )\r
1183                         {\r
1184                                 return 0;\r
1185                         }\r
1186                         double num3 = ( (double) ( nPerfect + nGreat ) ) / ( (double) ( nTotal - num2 ) );\r
1187                         if( num3 == 1.0 )\r
1188                         {\r
1189                                 return 0;\r
1190                         }\r
1191                         if( num3 >= 0.95 )\r
1192                         {\r
1193                                 return 1;\r
1194                         }\r
1195                         if( num3 >= 0.9 )\r
1196                         {\r
1197                                 return 2;\r
1198                         }\r
1199                         if( num3 >= 0.85 )\r
1200                         {\r
1201                                 return 3;\r
1202                         }\r
1203                         if( num3 >= 0.8 )\r
1204                         {\r
1205                                 return 4;\r
1206                         }\r
1207                         if( num3 >= 0.7 )\r
1208                         {\r
1209                                 return 5;\r
1210                         }\r
1211                         return 6;\r
1212                 }\r
1213                 internal static double tゲーム型スキルを計算して返す( int nLevel, int nTotal, int nPerfect, int nCombo )\r
1214                 {\r
1215                         if( ( nTotal == 0 ) || ( ( nPerfect == 0 ) && ( nCombo == 0 ) ) )\r
1216                                 return 0.0;\r
1217 \r
1218                         return ( ( nLevel * ( ( ( nPerfect * 0.8 ) + ( nCombo * 0.2 ) ) / ( (double) nTotal ) ) ) / 2.0 );\r
1219                 }\r
1220                 internal static double t演奏型スキルを計算して返す( int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss )\r
1221                 {\r
1222                         if( nTotal == 0 )\r
1223                                 return 0.0;\r
1224 \r
1225                         int num = nTotal - ( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss );\r
1226                         double y = ( ( ( ( ( ( ( nPerfect * 1.0 ) + ( nGreat * 0.8 ) ) + ( nGood * 0.5 ) ) + ( nPoor * 0.2 ) ) + ( nMiss * 0.0 ) ) + ( num * 0.0 ) ) * 100.0 ) / ( (double) nTotal );\r
1227                         return ( 100.0 * ( ( Math.Pow( 1.03, y ) - 1.0 ) / ( Math.Pow( 1.03, 100.0 ) - 1.0 ) ) );\r
1228                 }\r
1229                 internal static string t演奏セクションのMD5を求めて返す( C演奏記録 cc )\r
1230                 {\r
1231                         StringBuilder builder = new StringBuilder();\r
1232                         builder.Append( cc.nスコア.ToString() );\r
1233                         builder.Append( cc.dbゲーム型スキル値.ToString( ".000000" ) );\r
1234                         builder.Append( cc.db演奏型スキル値.ToString( ".000000" ) );\r
1235                         builder.Append( cc.nPerfect数 );\r
1236                         builder.Append( cc.nGreat数 );\r
1237                         builder.Append( cc.nGood数 );\r
1238                         builder.Append( cc.nPoor数 );\r
1239                         builder.Append( cc.nMiss数 );\r
1240                         builder.Append( cc.n最大コンボ数 );\r
1241                         builder.Append( cc.n全チップ数 );\r
1242                         for( int i = 0; i < 10; i++ )\r
1243                                 builder.Append( boolToChar( cc.bAutoPlay[ i ] ) );\r
1244                         builder.Append( boolToChar( cc.bTight ) );\r
1245                         builder.Append( boolToChar( cc.bSudden.Drums ) );\r
1246                         builder.Append( boolToChar( cc.bSudden.Guitar ) );\r
1247                         builder.Append( boolToChar( cc.bSudden.Bass ) );\r
1248                         builder.Append( boolToChar( cc.bHidden.Drums ) );\r
1249                         builder.Append( boolToChar( cc.bHidden.Guitar ) );\r
1250                         builder.Append( boolToChar( cc.bHidden.Bass ) );\r
1251                         builder.Append( boolToChar( cc.bReverse.Drums ) );\r
1252                         builder.Append( boolToChar( cc.bReverse.Guitar ) );\r
1253                         builder.Append( boolToChar( cc.bReverse.Bass ) );\r
1254                         builder.Append( (int) cc.eRandom.Guitar );\r
1255                         builder.Append( (int) cc.eRandom.Bass );\r
1256                         builder.Append( boolToChar( cc.bLight.Guitar ) );\r
1257                         builder.Append( boolToChar( cc.bLight.Bass ) );\r
1258                         builder.Append( boolToChar( cc.bLeft.Guitar ) );\r
1259                         builder.Append( boolToChar( cc.bLeft.Bass ) );\r
1260                         builder.Append( (int) cc.eDark );\r
1261                         builder.Append( cc.f譜面スクロール速度.Drums.ToString( ".000000" ) );\r
1262                         builder.Append( cc.f譜面スクロール速度.Guitar.ToString( ".000000" ) );\r
1263                         builder.Append( cc.f譜面スクロール速度.Bass.ToString( ".000000" ) );\r
1264                         builder.Append( cc.n演奏速度分子 );\r
1265                         builder.Append( cc.n演奏速度分母 );\r
1266                         builder.Append( (int) cc.eHHGroup );\r
1267                         builder.Append( (int) cc.eFTGroup );\r
1268                         builder.Append( (int) cc.eCYGroup );\r
1269                         builder.Append( (int) cc.eHitSoundPriorityHH );\r
1270                         builder.Append( (int) cc.eHitSoundPriorityFT );\r
1271                         builder.Append( (int) cc.eHitSoundPriorityCY );\r
1272                         builder.Append( boolToChar( cc.bGuitar有効 ) );\r
1273                         builder.Append( boolToChar( cc.bDrums有効 ) );\r
1274                         builder.Append( boolToChar( cc.bSTAGEFAILED有効 ) );\r
1275                         builder.Append( (int) cc.eダメージレベル );\r
1276                         builder.Append( boolToChar( cc.b演奏にキーボードを使用した ) );\r
1277                         builder.Append( boolToChar( cc.b演奏にMIDI入力を使用した ) );\r
1278                         builder.Append( boolToChar( cc.b演奏にジョイパッドを使用した ) );\r
1279                         builder.Append( boolToChar( cc.b演奏にマウスを使用した ) );\r
1280                         builder.Append( cc.nPerfectになる範囲ms );\r
1281                         builder.Append( cc.nGreatになる範囲ms );\r
1282                         builder.Append( cc.nGoodになる範囲ms );\r
1283                         builder.Append( cc.nPoorになる範囲ms );\r
1284                         builder.Append( cc.strDTXManiaのバージョン );\r
1285                         builder.Append( cc.最終更新日時 );\r
1286 \r
1287                         byte[] bytes = Encoding.GetEncoding( "shift-jis" ).GetBytes( builder.ToString() );\r
1288                         byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash( bytes );\r
1289                         StringBuilder builder2 = new StringBuilder( 0x21 );\r
1290                         foreach( byte num2 in buffer2 )\r
1291                                 builder2.Append( num2.ToString( "x2" ) );\r
1292 \r
1293                         return builder2.ToString();\r
1294                 }\r
1295                 internal static void t更新条件を取得する( out bool bDrumsを更新する, out bool bGuitarを更新する, out bool bBassを更新する )\r
1296                 {\r
1297                         bDrumsを更新する = ( CDTXMania.ConfigIni.bDrums有効 && CDTXMania.DTX.bチップがある.Drums ) && !CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
1298                         bGuitarを更新する = ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Guitar ) && !CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
1299                         bBassを更新する = ( CDTXMania.ConfigIni.bGuitar有効 && CDTXMania.DTX.bチップがある.Bass ) && !CDTXMania.ConfigIni.bAutoPlay.Bass;\r
1300                 }\r
1301                 internal static int t総合ランク値を計算して返す( C演奏記録 Drums, C演奏記録 Guitar, C演奏記録 Bass )\r
1302                 {\r
1303                         int nPerfect = ( Drums.nPerfect数 + Guitar.nPerfect数 ) + Bass.nPerfect数;\r
1304                         int nGreat = ( Drums.nGreat数 + Guitar.nGreat数 ) + Bass.nGreat数;\r
1305                         int nGood = ( Drums.nGood数 + Guitar.nGood数 ) + Bass.nGood数;\r
1306                         int nPoor = ( Drums.nPoor数 + Guitar.nPoor数 ) + Bass.nPoor数;\r
1307                         int nMiss = ( Drums.nMiss数 + Guitar.nMiss数 ) + Bass.nMiss数;\r
1308                         return tランク値を計算して返す( ( ( ( nPerfect + nGreat ) + nGood ) + nPoor ) + nMiss, nPerfect, nGreat, nGood, nPoor, nMiss );\r
1309                 }\r
1310 \r
1311 \r
1312                 // その他\r
1313 \r
1314                 #region [ private ]\r
1315                 //-----------------\r
1316                 private bool ONorOFF( char c )\r
1317                 {\r
1318                         return ( c != '0' );\r
1319                 }\r
1320                 private static char boolToChar( bool b )\r
1321                 {\r
1322                         if( !b )\r
1323                         {\r
1324                                 return '0';\r
1325                         }\r
1326                         return '1';\r
1327                 }\r
1328                 //-----------------\r
1329                 #endregion\r
1330         }\r
1331 }\r