+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Runtime.InteropServices;\r
-using System.Drawing;\r
-using System.Drawing.Imaging;\r
-using System.Diagnostics;\r
-using System.IO;\r
-using System.Security.Cryptography;\r
-using FDK;\r
-\r
-namespace DTXMania\r
-{\r
- public class CScoreIni\r
- {\r
- // プロパティ\r
-\r
- // [File] セクション\r
- public STファイル stファイル;\r
- [StructLayout(LayoutKind.Sequential)]\r
- public struct STファイル\r
- {\r
- public string Title;\r
- public string Name;\r
- public string Hash;\r
- public int PlayCountDrums;\r
- public int PlayCountGuitar;\r
- public int PlayCountBass;\r
- // #23596 10.11.16 add ikanick-----/\r
- public int ClearCountDrums;\r
- public int ClearCountGuitar;\r
- public int ClearCountBass;\r
- // #24459 2011.2.24 yyagi----------/\r
- public STDGBSValue<ERANK> BestRank;\r
- // --------------------------------/\r
- public int HistoryCount;\r
- public string[] History;\r
- public int BGMAdjust;\r
- }\r
-\r
- // 演奏記録セクション(9種類)\r
- public STセクション stセクション;\r
- [StructLayout(LayoutKind.Sequential)]\r
- public struct STセクション\r
- {\r
- public STDGBSValue<CScoreIni.C演奏記録> HiScore;\r
- public STDGBSValue<CScoreIni.C演奏記録> HiSkill;\r
- public STDGBSValue<CScoreIni.C演奏記録> LastPlay;\r
- }\r
-\r
- public enum Eセクション種別 : int\r
- {\r
- Unknown = -2,\r
- File = -1,\r
- HiScoreDrums = 0,\r
- HiSkillDrums = 1,\r
- HiScoreGuitar = 2,\r
- HiSkillGuitar = 3,\r
- HiScoreBass = 4,\r
- HiSkillBass = 5,\r
- LastPlayDrums = 6, // #23595 2011.1.9 ikanick\r
- LastPlayGuitar = 7, //\r
- LastPlayBass = 8, //\r
- }\r
-\r
- public enum ERANK : int // #24459 yyagi\r
- {\r
- SS = 0,\r
- S = 1,\r
- A = 2,\r
- B = 3,\r
- C = 4,\r
- D = 5,\r
- E = 6,\r
- UNKNOWN = 99\r
- }\r
-\r
- public class C演奏記録\r
- {\r
- public STPadValue<bool> bAutoPlay;\r
- public bool bDrums有効;\r
- public bool bGuitar有効;\r
- public STDGBSValue<bool> bLight;\r
- public STDGBSValue<bool> bReverse;\r
- public STDGBSValue<ESudHidInv> eSudHidInv;\r
- public bool bSTAGEFAILED有効;\r
- public bool bTight;\r
- public bool b演奏にMIDI入力を使用した;\r
- public bool b演奏にキーボードを使用した;\r
- public bool b演奏にジョイパッドを使用した;\r
- public bool b演奏にマウスを使用した;\r
- public double dbゲーム型スキル値;\r
- public double db演奏型スキル値;\r
- public ECYGroup eCYGroup;\r
- public EDark eDark;\r
- public EFTGroup eFTGroup;\r
- public EHHGroup eHHGroup;\r
- public EHitSoundPriority eHitSoundPriorityCY;\r
- public EHitSoundPriority eHitSoundPriorityFT;\r
- public EHitSoundPriority eHitSoundPriorityHH;\r
- public STDGBSValue<ERandom> eRandom;\r
- public EDamage eダメージレベル;\r
- public STDGBSValue<float> f譜面スクロール速度;\r
- public string Hash;\r
- public int nGoodになる範囲ms;\r
- public int nGood数;\r
- public int nGreatになる範囲ms;\r
- public int nGreat数;\r
- public int nMiss数;\r
- public int nPerfectになる範囲ms;\r
- public int nPerfect数;\r
- public int nPoorになる範囲ms;\r
- public int nPoor数;\r
- public int nPerfect数_Auto含まない;\r
- public int nGreat数_Auto含まない;\r
- public int nGood数_Auto含まない;\r
- public int nPoor数_Auto含まない;\r
- public int nMiss数_Auto含まない;\r
- public long nスコア;\r
- public int n演奏速度分子;\r
- public int n演奏速度分母;\r
- public int n最大コンボ数;\r
- public int n全チップ数;\r
- public string strDTXManiaのバージョン;\r
- //public bool レーン9モード;\r
- public STDGBSValue<EUseLanes> e譜面レーンタイプ;\r
- public int nRisky; // #23559 2011.6.20 yyagi 0=OFF, 1-10=Risky\r
- public string 最終更新日時;\r
- public bool bギターとベースを入れ替えた; // #35417 2015.08.30 chnmr0 add\r
- public EClickType eMetronome; // #24159 2016.8.2 yyagi\r
-\r
- public C演奏記録()\r
- {\r
- this.bAutoPlay = new STPadValue<bool>();\r
- this.eSudHidInv = new STDGBSValue<ESudHidInv>();\r
- this.bReverse = new STDGBSValue<bool>();\r
- this.eRandom = new STDGBSValue<ERandom>();\r
- this.bLight = new STDGBSValue<bool>();\r
- this.f譜面スクロール速度 = new STDGBSValue<float>();\r
- for (EPart i = EPart.Drums; i <= EPart.Bass; ++i)\r
- {\r
- f譜面スクロール速度[i] = 1f;\r
- }\r
- this.n演奏速度分子 = 20;\r
- this.n演奏速度分母 = 20;\r
- this.bGuitar有効 = true;\r
- this.bDrums有効 = true;\r
- this.bSTAGEFAILED有効 = true;\r
- this.eダメージレベル = EDamage.Normal;\r
- this.nPerfectになる範囲ms = 34;\r
- this.nGreatになる範囲ms = 67;\r
- this.nGoodになる範囲ms = 84;\r
- this.nPoorになる範囲ms = 117;\r
- this.strDTXManiaのバージョン = "Unknown";\r
- this.最終更新日時 = "";\r
- this.Hash = "00000000000000000000000000000000";\r
- //this.レーン9モード = true;\r
- this.e譜面レーンタイプ.Drums = EUseLanes.Dr_6;\r
- this.e譜面レーンタイプ.Guitar = EUseLanes.GB_3;\r
- this.e譜面レーンタイプ.Bass = EUseLanes.GB_3;\r
- this.nRisky = 0; // #23559 2011.6.20 yyagi\r
- this.bギターとベースを入れ替えた = false; // #35417 2015.08.30 chnmr0 add\r
- this.eMetronome = EClickType.Off;\r
- }\r
-\r
- public bool bフルコンボじゃない\r
- {\r
- get\r
- {\r
- return !this.bフルコンボである;\r
- }\r
- }\r
- public bool bフルコンボである\r
- {\r
- get\r
- {\r
- return ((this.n最大コンボ数 > 0) && (this.n最大コンボ数 == (this.nPerfect数 + this.nGreat数 + this.nGood数 + this.nPoor数 + this.nMiss数)));\r
- }\r
- }\r
-\r
- public bool b全AUTOじゃない\r
- {\r
- get\r
- {\r
- return !b全AUTOである;\r
- }\r
- }\r
- public bool b全AUTOである\r
- {\r
- get\r
- {\r
- return (this.n全チップ数 - this.nPerfect数_Auto含まない - this.nGreat数_Auto含まない - this.nGood数_Auto含まない - this.nPoor数_Auto含まない - this.nMiss数_Auto含まない) == this.n全チップ数;\r
- }\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// <para>.score.ini の存在するフォルダ(絶対パス;末尾に '\' はついていない)。</para>\r
- /// <para>未保存などでファイル名がない場合は null。</para>\r
- /// </summary>\r
- public string iniファイルのあるフォルダ名\r
- {\r
- get;\r
- private set;\r
- }\r
-\r
- /// <summary>\r
- /// <para>.score.ini のファイル名(絶対パス)。</para>\r
- /// <para>未保存などでファイル名がない場合は null。</para>\r
- /// </summary>\r
- public string iniファイル名\r
- {\r
- get;\r
- private set;\r
- }\r
-\r
-\r
- // コンストラクタ\r
-\r
- public CScoreIni()\r
- {\r
- this.iniファイルのあるフォルダ名 = null;\r
- this.iniファイル名 = null;\r
- this.stファイル = new STファイル();\r
- stファイル.Title = "";\r
- stファイル.Name = "";\r
- stファイル.Hash = "";\r
- stファイル.History = new string[] { "", "", "", "", "" };\r
- stファイル.BestRank.Drums = ERANK.UNKNOWN; // #24459 2011.2.24 yyagi\r
- stファイル.BestRank.Guitar = ERANK.UNKNOWN; //\r
- stファイル.BestRank.Bass = ERANK.UNKNOWN; //\r
-\r
- this.stセクション = new STセクション();\r
-\r
-\r
- stセクション.HiScore = new STDGBSValue<C演奏記録>();\r
- stセクション.HiSkill = new STDGBSValue<C演奏記録>();\r
- stセクション.LastPlay = new STDGBSValue<C演奏記録>();\r
-\r
- for (EPart i = EPart.Drums; i <= EPart.Bass; ++i)\r
- {\r
- stセクション.HiScore[i] = new C演奏記録();\r
- stセクション.HiSkill[i] = new C演奏記録();\r
- stセクション.LastPlay[i] = new C演奏記録();\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// <para>初期化後にiniファイルを読み込むコンストラクタ。</para>\r
- /// <para>読み込んだiniに不正値があれば、それが含まれるセクションをリセットする。</para>\r
- /// </summary>\r
- public CScoreIni(string str読み込むiniファイル)\r
- : this()\r
- {\r
- this.t読み込み(str読み込むiniファイル);\r
- }\r
-\r
-\r
- // メソッド\r
-\r
- /// <summary>\r
- /// <para>現在の this.Record[] オブジェクトの、指定されたセクションの情報が正当であるか否かを判定する。\r
- /// 真偽どちらでも、その内容は書き換えない。</para>\r
- /// </summary>\r
- /// <param name="eセクション">判定するセクション。</param>\r
- /// <returns>正当である(整合性がある)場合は true。</returns>\r
- public bool b整合性がある(Eセクション種別 eセクション)\r
- {\r
- return true; // オープンソース化に伴い、整合性チェックを無効化。(2010.10.21)\r
- }\r
-\r
- /// <summary>\r
- /// 指定されたファイルの内容から MD5 値を求め、それを16進数に変換した文字列を返す。\r
- /// </summary>\r
- /// <param name="ファイル名">MD5 を求めるファイル名。</param>\r
- /// <returns>算出結果の MD5 を16進数で並べた文字列。</returns>\r
- public static string tファイルのMD5を求めて返す(string ファイル名)\r
- {\r
- byte[] buffer = null;\r
- FileStream stream = new FileStream(ファイル名, FileMode.Open, FileAccess.Read);\r
- buffer = new byte[stream.Length];\r
- stream.Read(buffer, 0, (int)stream.Length);\r
- stream.Close();\r
- StringBuilder builder = new StringBuilder(0x21);\r
- {\r
- MD5CryptoServiceProvider m = new MD5CryptoServiceProvider();\r
- byte[] buffer2 = m.ComputeHash(buffer);\r
- foreach (byte num in buffer2)\r
- builder.Append(num.ToString("x2"));\r
- }\r
- return builder.ToString();\r
- }\r
-\r
- /// <summary>\r
- /// 指定された .score.ini を読み込む。内容の真偽は判定しない。\r
- /// </summary>\r
- /// <param name="iniファイル名">読み込む .score.ini ファイルを指定します(絶対パスが安全)。</param>\r
- public void t読み込み(string iniファイル名)\r
- {\r
- this.iniファイルのあるフォルダ名 = Path.GetDirectoryName(iniファイル名);\r
- this.iniファイル名 = Path.GetFileName(iniファイル名);\r
-\r
- Eセクション種別 section = Eセクション種別.Unknown;\r
- if (File.Exists(iniファイル名))\r
- {\r
- string str;\r
- StreamReader reader = new StreamReader(iniファイル名, Encoding.GetEncoding("Shift_JIS"));\r
- while ((str = reader.ReadLine()) != null)\r
- {\r
- str = str.Replace('\t', ' ').TrimStart(new char[] { '\t', ' ' });\r
- if ((str.Length != 0) && (str[0] != ';'))\r
- {\r
- try\r
- {\r
- string item;\r
- string para;\r
- C演奏記録 c演奏記録;\r
- #region [ section ]\r
- if (str[0] == '[')\r
- {\r
- StringBuilder builder = new StringBuilder(0x20);\r
- int num = 1;\r
- while ((num < str.Length) && (str[num] != ']'))\r
- {\r
- builder.Append(str[num++]);\r
- }\r
- string str2 = builder.ToString();\r
- if (str2.Equals("File"))\r
- {\r
- section = Eセクション種別.File;\r
- }\r
- else if (str2.Equals("HiScore.Drums"))\r
- {\r
- section = Eセクション種別.HiScoreDrums;\r
- }\r
- else if (str2.Equals("HiSkill.Drums"))\r
- {\r
- section = Eセクション種別.HiSkillDrums;\r
- }\r
- else if (str2.Equals("HiScore.Guitar"))\r
- {\r
- section = Eセクション種別.HiScoreGuitar;\r
- }\r
- else if (str2.Equals("HiSkill.Guitar"))\r
- {\r
- section = Eセクション種別.HiSkillGuitar;\r
- }\r
- else if (str2.Equals("HiScore.Bass"))\r
- {\r
- section = Eセクション種別.HiScoreBass;\r
- }\r
- else if (str2.Equals("HiSkill.Bass"))\r
- {\r
- section = Eセクション種別.HiSkillBass;\r
- }\r
- // #23595 2011.1.9 ikanick\r
- else if (str2.Equals("LastPlay.Drums"))\r
- {\r
- section = Eセクション種別.LastPlayDrums;\r
- }\r
- else if (str2.Equals("LastPlay.Guitar"))\r
- {\r
- section = Eセクション種別.LastPlayGuitar;\r
- }\r
- else if (str2.Equals("LastPlay.Bass"))\r
- {\r
- section = Eセクション種別.LastPlayBass;\r
- }\r
- //----------------------------------------------------\r
- else\r
- {\r
- section = Eセクション種別.Unknown;\r
- }\r
- }\r
- #endregion\r
- else\r
- {\r
- string[] strArray = str.Split(new char[] { '=' });\r
- if (strArray.Length == 2)\r
- {\r
- item = strArray[0].Trim();\r
- para = strArray[1].Trim();\r
- switch (section)\r
- {\r
- case Eセクション種別.File:\r
- {\r
- if (!item.Equals("Title"))\r
- {\r
- goto Label_01C7;\r
- }\r
- this.stファイル.Title = para;\r
- continue;\r
- }\r
- case Eセクション種別.HiScoreDrums:\r
- c演奏記録 = this.stセクション.HiScore.Drums;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.HiSkillDrums:\r
- c演奏記録 = this.stセクション.HiSkill.Drums;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.HiScoreGuitar:\r
- c演奏記録 = this.stセクション.HiScore.Guitar;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.HiSkillGuitar:\r
- c演奏記録 = this.stセクション.HiSkill.Guitar;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.HiScoreBass:\r
- c演奏記録 = this.stセクション.HiScore.Bass;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.HiSkillBass:\r
- c演奏記録 = this.stセクション.HiSkill.Bass;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.LastPlayDrums:\r
- // #23595 2011.1.9 ikanick\r
- c演奏記録 = this.stセクション.LastPlay.Drums;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.LastPlayGuitar:\r
- c演奏記録 = this.stセクション.LastPlay.Guitar;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- case Eセクション種別.LastPlayBass:\r
- c演奏記録 = this.stセクション.LastPlay.Bass;\r
- if (!item.Equals("Score"))\r
- {\r
- goto Label_03B9;\r
- }\r
- c演奏記録.nスコア = long.Parse(para);\r
- continue;\r
- }\r
- }\r
- }\r
- continue;\r
- #region [ File section ]\r
- Label_01C7:\r
- if (item.Equals("Name"))\r
- {\r
- this.stファイル.Name = para;\r
- }\r
- else if (item.Equals("Hash"))\r
- {\r
- this.stファイル.Hash = para;\r
- }\r
- else if (item.Equals("PlayCountDrums"))\r
- {\r
- this.stファイル.PlayCountDrums = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- else if (item.Equals("PlayCountGuitars"))// #23596 11.2.5 changed ikanick\r
- {\r
- this.stファイル.PlayCountGuitar = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- else if (item.Equals("PlayCountBass"))\r
- {\r
- this.stファイル.PlayCountBass = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- // #23596 10.11.16 add ikanick------------------------------------/\r
- else if (item.Equals("ClearCountDrums"))\r
- {\r
- this.stファイル.ClearCountDrums = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- else if (item.Equals("ClearCountGuitars"))// #23596 11.2.5 changed ikanick\r
- {\r
- this.stファイル.ClearCountGuitar = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- else if (item.Equals("ClearCountBass"))\r
- {\r
- this.stファイル.ClearCountBass = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- // #24459 2011.2.24 yyagi-----------------------------------------/\r
- else if (item.Equals("BestRankDrums"))\r
- {\r
- this.stファイル.BestRank.Drums = (ERANK)C変換.n値を文字列から取得して範囲内に丸めて返す(para, (int)ERANK.SS, (int)ERANK.E, (int)ERANK.UNKNOWN);\r
- }\r
- else if (item.Equals("BestRankGuitar"))\r
- {\r
- this.stファイル.BestRank.Guitar = (ERANK)C変換.n値を文字列から取得して範囲内に丸めて返す(para, (int)ERANK.SS, (int)ERANK.E, (int)ERANK.UNKNOWN);\r
- }\r
- else if (item.Equals("BestRankBass"))\r
- {\r
- this.stファイル.BestRank.Bass = (ERANK)C変換.n値を文字列から取得して範囲内に丸めて返す(para, (int)ERANK.SS, (int)ERANK.E, (int)ERANK.UNKNOWN);\r
- }\r
- //----------------------------------------------------------------/\r
- else if (item.Equals("History0"))\r
- {\r
- this.stファイル.History[0] = para;\r
- }\r
- else if (item.Equals("History1"))\r
- {\r
- this.stファイル.History[1] = para;\r
- }\r
- else if (item.Equals("History2"))\r
- {\r
- this.stファイル.History[2] = para;\r
- }\r
- else if (item.Equals("History3"))\r
- {\r
- this.stファイル.History[3] = para;\r
- }\r
- else if (item.Equals("History4"))\r
- {\r
- this.stファイル.History[4] = para;\r
- }\r
- else if (item.Equals("HistoryCount"))\r
- {\r
- this.stファイル.HistoryCount = C変換.n値を文字列から取得して範囲内に丸めて返す(para, 0, 99999999, 0);\r
- }\r
- else if (item.Equals("BGMAdjust"))\r
- {\r
- this.stファイル.BGMAdjust = C変換.n値を文字列から取得して返す(para, 0);\r
- }\r
- continue;\r
- #endregion\r
- #region [ Score section ]\r
- Label_03B9:\r
- if (item.Equals("PlaySkill"))\r
- {\r
- c演奏記録.db演奏型スキル値 = (double)decimal.Parse(para);\r
- }\r
- else if (item.Equals("Skill"))\r
- {\r
- c演奏記録.dbゲーム型スキル値 = (double)decimal.Parse(para);\r
- }\r
- else if (item.Equals("Perfect"))\r
- {\r
- c演奏記録.nPerfect数 = int.Parse(para);\r
- }\r
- else if (item.Equals("Great"))\r
- {\r
- c演奏記録.nGreat数 = int.Parse(para);\r
- }\r
- else if (item.Equals("Good"))\r
- {\r
- c演奏記録.nGood数 = int.Parse(para);\r
- }\r
- else if (item.Equals("Poor"))\r
- {\r
- c演奏記録.nPoor数 = int.Parse(para);\r
- }\r
- else if (item.Equals("Miss"))\r
- {\r
- c演奏記録.nMiss数 = int.Parse(para);\r
- }\r
- else if (item.Equals("MaxCombo"))\r
- {\r
- c演奏記録.n最大コンボ数 = int.Parse(para);\r
- }\r
- else if (item.Equals("TotalChips"))\r
- {\r
- c演奏記録.n全チップ数 = int.Parse(para);\r
- }\r
- else if (item.Equals("AutoPlay"))\r
- {\r
- if ( para.Length > (int) EPad.Max )\r
- {\r
- throw new IndexOutOfRangeException( "レーン数が想定より多いscore.iniを読み込みました。XG譜面のscore.iniファイルである可能性があります。" );\r
- // Trace.TraceWarning( "レーン数が想定より多いscore.iniを読み込みました。XG譜面のscore.iniファイルである可能性があります。読み込みをスキップします。({0})", iniファイル名 );\r
- }\r
- else\r
- {\r
- for ( int i = 0; i < para.Length; i++ )\r
- {\r
- c演奏記録.bAutoPlay[ (EPad) i ] = C変換.bONorOFF( para[ i ] );\r
- }\r
- }\r
- }\r
- else if (item.Equals("GBFlip"))\r
- {\r
- c演奏記録.bギターとベースを入れ替えた = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("Risky"))\r
- {\r
- c演奏記録.nRisky = int.Parse(para);\r
- }\r
- else if (item.Equals("TightDrums"))\r
- {\r
- c演奏記録.bTight = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("SudHidInvDrums"))\r
- {\r
- c演奏記録.eSudHidInv.Drums = (ESudHidInv)int.Parse(para);\r
- }\r
- else if (item.Equals("SudHidInvGuitar"))\r
- {\r
- c演奏記録.eSudHidInv.Guitar = (ESudHidInv)int.Parse(para);\r
- }\r
- else if (item.Equals("SudHidInvBass"))\r
- {\r
- c演奏記録.eSudHidInv.Bass = (ESudHidInv)int.Parse(para);\r
- }\r
- else if (item.Equals("ReverseDrums"))\r
- {\r
- c演奏記録.bReverse.Drums = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("ReverseGuitar"))\r
- {\r
- c演奏記録.bReverse.Guitar = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("ReverseBass"))\r
- {\r
- c演奏記録.bReverse.Bass = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- else\r
- {\r
- #region [ RandomGuitar ]\r
- if (item.Equals("RandomGuitar"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case (int)ERandom.Off:\r
- {\r
- c演奏記録.eRandom.Guitar = ERandom.Off;\r
- continue;\r
- }\r
- case (int)ERandom.Random:\r
- {\r
- c演奏記録.eRandom.Guitar = ERandom.Random;\r
- continue;\r
- }\r
- case (int)ERandom.Super:\r
- {\r
- c演奏記録.eRandom.Guitar = ERandom.Super;\r
- continue;\r
- }\r
- case (int)ERandom.Hyper: // #25452 2011.6.20 yyagi\r
- {\r
- c演奏記録.eRandom.Guitar = ERandom.Super;\r
- continue;\r
- }\r
- }\r
- throw new Exception("RandomGuitar の値が無効です。");\r
- }\r
- #endregion\r
- #region [ RandomBass ]\r
- if (item.Equals("RandomBass"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case (int)ERandom.Off:\r
- {\r
- c演奏記録.eRandom.Bass = ERandom.Off;\r
- continue;\r
- }\r
- case (int)ERandom.Random:\r
- {\r
- c演奏記録.eRandom.Bass = ERandom.Random;\r
- continue;\r
- }\r
- case (int)ERandom.Super:\r
- {\r
- c演奏記録.eRandom.Bass = ERandom.Super;\r
- continue;\r
- }\r
- case (int)ERandom.Hyper: // #25452 2011.6.20 yyagi\r
- {\r
- c演奏記録.eRandom.Bass = ERandom.Super;\r
- continue;\r
- }\r
- }\r
- throw new Exception("RandomBass の値が無効です。");\r
- }\r
- #endregion\r
- #region [ LightGuitar ]\r
- if (item.Equals("LightGuitar"))\r
- {\r
- c演奏記録.bLight.Guitar = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- #region [ LightBass ]\r
- else if (item.Equals("LightBass"))\r
- {\r
- c演奏記録.bLight.Bass = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- else\r
- {\r
- #region [ Dark ]\r
- if (item.Equals("Dark"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eDark = EDark.Off;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eDark = EDark.Half;\r
- continue;\r
- }\r
- case 2:\r
- {\r
- c演奏記録.eDark = EDark.Full;\r
- continue;\r
- }\r
- }\r
- throw new Exception("Dark の値が無効です。");\r
- }\r
- #endregion\r
- #region [ ScrollSpeedDrums ]\r
- if (item.Equals("ScrollSpeedDrums"))\r
- {\r
- c演奏記録.f譜面スクロール速度.Drums = (float)decimal.Parse(para);\r
- }\r
- #endregion\r
- #region [ ScrollSpeedGuitar ]\r
- else if (item.Equals("ScrollSpeedGuitar"))\r
- {\r
- c演奏記録.f譜面スクロール速度.Guitar = (float)decimal.Parse(para);\r
- }\r
- #endregion\r
- #region [ ScrollSpeedBass ]\r
- else if (item.Equals("ScrollSpeedBass"))\r
- {\r
- c演奏記録.f譜面スクロール速度.Bass = (float)decimal.Parse(para);\r
- }\r
- #endregion\r
- #region [ PlaySpeed ]\r
- else if (item.Equals("PlaySpeed"))\r
- {\r
- string[] strArray2 = para.Split(new char[] { '/' });\r
- if (strArray2.Length == 2)\r
- {\r
- c演奏記録.n演奏速度分子 = int.Parse(strArray2[0]);\r
- c演奏記録.n演奏速度分母 = int.Parse(strArray2[1]);\r
- }\r
- }\r
- #endregion\r
- else\r
- {\r
- #region [ HHGroup ]\r
- if (item.Equals("HHGroup"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eHHGroup = EHHGroup.Off;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eHHGroup = EHHGroup.HO_HC;\r
- continue;\r
- }\r
- case 2:\r
- {\r
- c演奏記録.eHHGroup = EHHGroup.LC_HH;\r
- continue;\r
- }\r
- case 3:\r
- {\r
- c演奏記録.eHHGroup = EHHGroup.Group;\r
- continue;\r
- }\r
- }\r
- throw new Exception("HHGroup の値が無効です。");\r
- }\r
- #endregion\r
- #region [ FTGroup ]\r
- if (item.Equals("FTGroup"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eFTGroup = EFTGroup.Off;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eFTGroup = EFTGroup.Group;\r
- continue;\r
- }\r
- }\r
- throw new Exception("FTGroup の値が無効です。");\r
- }\r
- #endregion\r
- #region [ CYGroup ]\r
- if (item.Equals("CYGroup"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eCYGroup = ECYGroup.Off;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eCYGroup = ECYGroup.Group;\r
- continue;\r
- }\r
- }\r
- throw new Exception("CYGroup の値が無効です。");\r
- }\r
- #endregion\r
- #region [ HitSoundPriorityHH ]\r
- if (item.Equals("HitSoundPriorityHH"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eHitSoundPriorityHH = EHitSoundPriority.Chip;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eHitSoundPriorityHH = EHitSoundPriority.Pad;\r
- continue;\r
- }\r
- }\r
- throw new Exception("HitSoundPriorityHH の値が無効です。");\r
- }\r
- #endregion\r
- #region [ HitSoundPriorityFT ]\r
- if (item.Equals("HitSoundPriorityFT"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eHitSoundPriorityFT = EHitSoundPriority.Chip;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eHitSoundPriorityFT = EHitSoundPriority.Pad;\r
- continue;\r
- }\r
- }\r
- throw new Exception("HitSoundPriorityFT の値が無効です。");\r
- }\r
- #endregion\r
- #region [ HitSoundPriorityCY ]\r
- if (item.Equals("HitSoundPriorityCY"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eHitSoundPriorityCY = EHitSoundPriority.Chip;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eHitSoundPriorityCY = EHitSoundPriority.Pad;\r
- continue;\r
- }\r
- }\r
- throw new Exception("HitSoundPriorityCY の値が無効です。");\r
- }\r
- #endregion\r
- #region [ Guitar ]\r
- if (item.Equals("Guitar"))\r
- {\r
- c演奏記録.bGuitar有効 = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- #region [ Drums ]\r
- else if (item.Equals("Drums"))\r
- {\r
- c演奏記録.bDrums有効 = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- #region [ StageFailed ]\r
- else if (item.Equals("StageFailed"))\r
- {\r
- c演奏記録.bSTAGEFAILED有効 = C変換.bONorOFF(para[0]);\r
- }\r
- #endregion\r
- #region [ Metronome ]\r
- else if (item.Equals("Metronome"))\r
- {\r
- switch ( int.Parse( para ) )\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eMetronome = EClickType.Off;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eMetronome = EClickType.OnBeat;\r
- continue;\r
- }\r
- case 2:\r
- {\r
- c演奏記録.eMetronome = EClickType.OffBeat;\r
- continue;\r
- }\r
- }\r
- throw new Exception( "Metronome の値が無効です。" );\r
- }\r
- #endregion\r
- else\r
- {\r
- #region [ DamageLevel ]\r
- if (item.Equals("DamageLevel"))\r
- {\r
- switch (int.Parse(para))\r
- {\r
- case 0:\r
- {\r
- c演奏記録.eダメージレベル = EDamage.Easy;\r
- continue;\r
- }\r
- case 1:\r
- {\r
- c演奏記録.eダメージレベル = EDamage.Normal;\r
- continue;\r
- }\r
- case 2:\r
- {\r
- c演奏記録.eダメージレベル = EDamage.Hard;\r
- continue;\r
- }\r
- }\r
- throw new Exception("DamageLevel の値が無効です。");\r
- }\r
- #endregion\r
- if (item.Equals("UseKeyboard"))\r
- {\r
- c演奏記録.b演奏にキーボードを使用した = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("UseMIDIIN"))\r
- {\r
- c演奏記録.b演奏にMIDI入力を使用した = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("UseJoypad"))\r
- {\r
- c演奏記録.b演奏にジョイパッドを使用した = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("UseMouse"))\r
- {\r
- c演奏記録.b演奏にマウスを使用した = C変換.bONorOFF(para[0]);\r
- }\r
- else if (item.Equals("PerfectRange"))\r
- {\r
- c演奏記録.nPerfectになる範囲ms = int.Parse(para);\r
- }\r
- else if (item.Equals("GreatRange"))\r
- {\r
- c演奏記録.nGreatになる範囲ms = int.Parse(para);\r
- }\r
- else if (item.Equals("GoodRange"))\r
- {\r
- c演奏記録.nGoodになる範囲ms = int.Parse(para);\r
- }\r
- else if (item.Equals("PoorRange"))\r
- {\r
- c演奏記録.nPoorになる範囲ms = int.Parse(para);\r
- }\r
- else if (item.Equals("DTXManiaVersion"))\r
- {\r
- c演奏記録.strDTXManiaのバージョン = para;\r
- }\r
- else if (item.Equals("DateTime"))\r
- {\r
- c演奏記録.最終更新日時 = para;\r
- }\r
- else if (item.Equals("Hash"))\r
- {\r
- c演奏記録.Hash = para;\r
- }\r
- //else if ( item.Equals( "9LaneMode" ) )\r
- //{\r
- // c演奏記録.レーン9モード = C変換.bONorOFF( para[ 0 ] );\r
- //}\r
- else if (item.Equals("ScoreLaneTypeDrums"))\r
- {\r
- c演奏記録.e譜面レーンタイプ.Drums = (EUseLanes) ( int.Parse( para ) );\r
- }\r
- else if ( item.Equals( "ScoreLaneTypeGuitar" ) )\r
- {\r
- c演奏記録.e譜面レーンタイプ.Guitar = (EUseLanes) ( int.Parse( para ) );\r
- }\r
- else if ( item.Equals( "ScoreLaneTypeBass" ) )\r
- {\r
- c演奏記録.e譜面レーンタイプ.Bass = (EUseLanes) ( int.Parse( para ) );\r
- }\r
- }\r
- }\r
- }\r
- }\r
- continue;\r
- }\r
- catch (Exception exception)\r
- {\r
- Trace.TraceError("{0}読み込みを中断します。({1})", exception.Message, iniファイル名);\r
- break;\r
- }\r
- }\r
- }\r
- reader.Close();\r
- }\r
- }\r
-\r
- internal void tヒストリを追加する(string str追加文字列)\r
- {\r
- this.stファイル.HistoryCount++;\r
- for (int i = 3; i >= 0; i--)\r
- this.stファイル.History[i + 1] = this.stファイル.History[i];\r
- DateTime now = DateTime.Now;\r
- this.stファイル.History[0] = string.Format("{0:0}.{1:D2}/{2}/{3} {4}", this.stファイル.HistoryCount, now.Year % 100, now.Month, now.Day, str追加文字列);\r
- }\r
-\r
- internal void tセクション書き出し(TextWriter writer, Eセクション種別 esect)\r
- {\r
- C演奏記録 sect = null;\r
- string strSect = "";\r
-\r
- if (esect == Eセクション種別.HiScoreDrums)\r
- {\r
- sect = this.stセクション.HiScore.Drums;\r
- strSect = "HiScore.Drums";\r
- }\r
- else if (esect == Eセクション種別.HiSkillDrums)\r
- {\r
- sect = this.stセクション.HiSkill.Drums;\r
- strSect = "HiSkill.Drums";\r
- }\r
- else if (esect == Eセクション種別.HiScoreGuitar)\r
- {\r
- sect = this.stセクション.HiScore.Guitar;\r
- strSect = "HiScore.Guitar";\r
- }\r
- else if (esect == Eセクション種別.HiSkillGuitar)\r
- {\r
- sect = this.stセクション.HiSkill.Guitar;\r
- strSect = "HiSkill.Guitar";\r
- }\r
- else if (esect == Eセクション種別.HiScoreBass)\r
- {\r
- sect = this.stセクション.HiScore.Bass;\r
- strSect = "HiScore.Bass";\r
- }\r
- else if (esect == Eセクション種別.HiSkillBass)\r
- {\r
- sect = this.stセクション.HiSkill.Bass;\r
- strSect = "HiSkill.Bass";\r
- }\r
- else if (esect == Eセクション種別.LastPlayDrums)\r
- {\r
- sect = this.stセクション.LastPlay.Drums;\r
- strSect = "LastPlay.Drums";\r
- }\r
- else if (esect == Eセクション種別.LastPlayGuitar)\r
- {\r
- sect = this.stセクション.LastPlay.Guitar;\r
- strSect = "LastPlay.Guitar";\r
- }\r
- else if (esect == Eセクション種別.LastPlayBass)\r
- {\r
- sect = this.stセクション.LastPlay.Bass;\r
- strSect = "LastPlay.Bass";\r
- }\r
-\r
- if (sect != null)\r
- {\r
- writer.WriteLine("[{0}]", strSect);\r
- writer.WriteLine("Score={0}", sect.nスコア);\r
- writer.WriteLine("PlaySkill={0}", sect.db演奏型スキル値);\r
- writer.WriteLine("Skill={0}", sect.dbゲーム型スキル値);\r
- writer.WriteLine("Perfect={0}", sect.nPerfect数);\r
- writer.WriteLine("Great={0}", sect.nGreat数);\r
- writer.WriteLine("Good={0}", sect.nGood数);\r
- writer.WriteLine("Poor={0}", sect.nPoor数);\r
- writer.WriteLine("Miss={0}", sect.nMiss数);\r
- writer.WriteLine("MaxCombo={0}", sect.n最大コンボ数);\r
- writer.WriteLine("TotalChips={0}", sect.n全チップ数);\r
- writer.Write("AutoPlay=");\r
- for (EPad j = EPad.Min; j < EPad.Max; j++)\r
- {\r
- writer.Write(sect.bAutoPlay[j] ? 1 : 0);\r
- }\r
- writer.WriteLine();\r
- writer.WriteLine("GBFlip={0}", sect.bギターとベースを入れ替えた ? 1 : 0);\r
- writer.WriteLine("Risky={0}", sect.nRisky);\r
- writer.WriteLine("SudHidInvDrums={0}", (int)sect.eSudHidInv.Drums);\r
- writer.WriteLine("SudHidInvGuitar={0}", (int)sect.eSudHidInv.Guitar);\r
- writer.WriteLine("SudHidInvBass={0}", (int)sect.eSudHidInv.Bass);\r
- writer.WriteLine("ReverseDrums={0}", sect.bReverse.Drums ? 1 : 0);\r
- writer.WriteLine("ReverseGuitar={0}", sect.bReverse.Guitar ? 1 : 0);\r
- writer.WriteLine("ReverseBass={0}", sect.bReverse.Bass ? 1 : 0);\r
- writer.WriteLine("TightDrums={0}", sect.bTight ? 1 : 0);\r
- writer.WriteLine("RandomGuitar={0}", (int)sect.eRandom.Guitar);\r
- writer.WriteLine("RandomBass={0}", (int)sect.eRandom.Bass);\r
- writer.WriteLine("LightGuitar={0}", sect.bLight.Guitar ? 1 : 0);\r
- writer.WriteLine("LightBass={0}", sect.bLight.Bass ? 1 : 0);\r
- writer.WriteLine("Dark={0}", (int)sect.eDark);\r
- writer.WriteLine("ScrollSpeedDrums={0}", sect.f譜面スクロール速度.Drums);\r
- writer.WriteLine("ScrollSpeedGuitar={0}", sect.f譜面スクロール速度.Guitar);\r
- writer.WriteLine("ScrollSpeedBass={0}", sect.f譜面スクロール速度.Bass);\r
- writer.WriteLine("PlaySpeed={0}/{1}", sect.n演奏速度分子, sect.n演奏速度分母);\r
- writer.WriteLine("ScoreLaneTypeDrums={0}", (int) sect.e譜面レーンタイプ.Drums);\r
- writer.WriteLine("ScoreLaneTypeGuitar={0}", (int) sect.e譜面レーンタイプ.Guitar);\r
- writer.WriteLine("ScoreLaneTypeBass={0}", (int) sect.e譜面レーンタイプ.Bass);\r
- writer.WriteLine("HHGroup={0}", (int)sect.eHHGroup);\r
- writer.WriteLine("FTGroup={0}", (int)sect.eFTGroup);\r
- writer.WriteLine("CYGroup={0}", (int)sect.eCYGroup);\r
- writer.WriteLine("HitSoundPriorityHH={0}", (int)sect.eHitSoundPriorityHH);\r
- writer.WriteLine("HitSoundPriorityFT={0}", (int)sect.eHitSoundPriorityFT);\r
- writer.WriteLine("HitSoundPriorityCY={0}", (int)sect.eHitSoundPriorityCY);\r
- writer.WriteLine("Guitar={0}", sect.bGuitar有効 ? 1 : 0);\r
- writer.WriteLine("Drums={0}", sect.bDrums有効 ? 1 : 0);\r
- writer.WriteLine("StageFailed={0}", sect.bSTAGEFAILED有効 ? 1 : 0);\r
- writer.WriteLine("DamageLevel={0}", (int)sect.eダメージレベル);\r
- writer.WriteLine("Metronome={0}", (int)sect.eMetronome);\r
- writer.WriteLine("UseKeyboard={0}", sect.b演奏にキーボードを使用した ? 1 : 0);\r
- writer.WriteLine("UseMIDIIN={0}", sect.b演奏にMIDI入力を使用した ? 1 : 0);\r
- writer.WriteLine("UseJoypad={0}", sect.b演奏にジョイパッドを使用した ? 1 : 0);\r
- writer.WriteLine("UseMouse={0}", sect.b演奏にマウスを使用した ? 1 : 0);\r
- writer.WriteLine("PerfectRange={0}", sect.nPerfectになる範囲ms);\r
- writer.WriteLine("GreatRange={0}", sect.nGreatになる範囲ms);\r
- writer.WriteLine("GoodRange={0}", sect.nGoodになる範囲ms);\r
- writer.WriteLine("PoorRange={0}", sect.nPoorになる範囲ms);\r
- writer.WriteLine("DTXManiaVersion={0}", sect.strDTXManiaのバージョン);\r
- writer.WriteLine("DateTime={0}", sect.最終更新日時);\r
- writer.WriteLine("Hash={0}", sect.Hash);\r
- }\r
-\r
- }\r
-\r
- internal void t書き出し(string iniファイル名)\r
- {\r
- this.iniファイルのあるフォルダ名 = Path.GetDirectoryName(iniファイル名);\r
- this.iniファイル名 = Path.GetFileName(iniファイル名);\r
-\r
- using (StreamWriter writer = new StreamWriter(iniファイル名, false, Encoding.GetEncoding("utf-16")))\r
- {\r
- writer.WriteLine("[File]");\r
- writer.WriteLine("Title={0}", this.stファイル.Title);\r
- writer.WriteLine("Name={0}", this.stファイル.Name);\r
- writer.WriteLine("Hash={0}", this.stファイル.Hash);\r
- writer.WriteLine("PlayCountDrums={0}", this.stファイル.PlayCountDrums);\r
- writer.WriteLine("PlayCountGuitars={0}", this.stファイル.PlayCountGuitar);\r
- writer.WriteLine("PlayCountBass={0}", this.stファイル.PlayCountBass);\r
- writer.WriteLine("ClearCountDrums={0}", this.stファイル.ClearCountDrums); // #23596 10.11.16 add ikanick\r
- writer.WriteLine("ClearCountGuitars={0}", this.stファイル.ClearCountGuitar); //\r
- writer.WriteLine("ClearCountBass={0}", this.stファイル.ClearCountBass); //\r
- writer.WriteLine("BestRankDrums={0}", this.stファイル.BestRank.Drums); // #24459 2011.2.24 yyagi\r
- writer.WriteLine("BestRankGuitar={0}", this.stファイル.BestRank.Guitar); //\r
- writer.WriteLine("BestRankBass={0}", this.stファイル.BestRank.Bass); //\r
- writer.WriteLine("HistoryCount={0}", this.stファイル.HistoryCount);\r
- writer.WriteLine("History0={0}", this.stファイル.History[0]);\r
- writer.WriteLine("History1={0}", this.stファイル.History[1]);\r
- writer.WriteLine("History2={0}", this.stファイル.History[2]);\r
- writer.WriteLine("History3={0}", this.stファイル.History[3]);\r
- writer.WriteLine("History4={0}", this.stファイル.History[4]);\r
- writer.WriteLine("BGMAdjust={0}", this.stファイル.BGMAdjust);\r
- writer.WriteLine();\r
-\r
- tセクション書き出し(writer, Eセクション種別.HiScoreDrums);\r
- tセクション書き出し(writer, Eセクション種別.HiSkillDrums);\r
- tセクション書き出し(writer, Eセクション種別.HiScoreGuitar);\r
- tセクション書き出し(writer, Eセクション種別.HiSkillGuitar);\r
- tセクション書き出し(writer, Eセクション種別.HiScoreBass);\r
- tセクション書き出し(writer, Eセクション種別.HiSkillBass);\r
- tセクション書き出し(writer, Eセクション種別.LastPlayDrums);\r
- tセクション書き出し(writer, Eセクション種別.LastPlayGuitar);\r
- tセクション書き出し(writer, Eセクション種別.LastPlayBass);\r
- }\r
- }\r
-\r
- internal static ERANK tランク値を計算して返す(C演奏記録 part)\r
- {\r
- if (part.b演奏にMIDI入力を使用した || part.b演奏にキーボードを使用した || part.b演奏にジョイパッドを使用した || part.b演奏にマウスを使用した) // 2010.9.11\r
- {\r
- int nTotal = part.nPerfect数 + part.nGreat数 + part.nGood数 + part.nPoor数 + part.nMiss数;\r
- return tランク値を計算して返す(nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数);\r
- }\r
- return ERANK.UNKNOWN;\r
- }\r
-\r
- internal static ERANK tランク値を計算して返す(int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss)\r
- {\r
- if (nTotal <= 0)\r
- return ERANK.UNKNOWN;\r
-\r
- //int nRank = (int)ERANK.E;\r
- int nAuto = nTotal - (nPerfect + nGreat + nGood + nPoor + nMiss);\r
- if (nTotal == nAuto)\r
- {\r
- return ERANK.SS;\r
- }\r
- double dRate = ((double)(nPerfect + nGreat)) / ((double)(nTotal - nAuto));\r
- if (dRate == 1.0)\r
- {\r
- return ERANK.SS;\r
- }\r
- if (dRate >= 0.95)\r
- {\r
- return ERANK.S;\r
- }\r
- if (dRate >= 0.9)\r
- {\r
- return ERANK.A;\r
- }\r
- if (dRate >= 0.85)\r
- {\r
- return ERANK.B;\r
- }\r
- if (dRate >= 0.8)\r
- {\r
- return ERANK.C;\r
- }\r
- if (dRate >= 0.7)\r
- {\r
- return ERANK.D;\r
- }\r
- return ERANK.E;\r
- }\r
-\r
- internal static double tゲーム型スキルを計算して返す(int nLevel, int nTotal, int nPerfect, int nCombo, EPart inst)\r
- {\r
- double ret;\r
- if ((nTotal == 0) || ((nPerfect == 0) && (nCombo == 0)))\r
- ret = 0.0;\r
-\r
- ret = ((nLevel * ((nPerfect * 0.8 + nCombo * 0.2) / ((double)nTotal))) / 2.0);\r
- ret *= dbCalcReviseValForDrGtBsAutoLanes(inst);\r
-\r
- return ret;\r
- }\r
-\r
- internal static double t演奏型スキルを計算して返す(int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss, EPart inst, bool auto考慮)\r
- {\r
- if (nTotal == 0)\r
- return 0.0;\r
-\r
- int nAuto = nTotal - (nPerfect + nGreat + nGood + nPoor + nMiss);\r
- double y = ((nPerfect * 1.0 + nGreat * 0.8 + nGood * 0.5 + nPoor * 0.2 + nMiss * 0.0 + nAuto * 0.0) * 100.0) / ((double)nTotal);\r
- double ret = (100.0 * ((Math.Pow(1.03, y) - 1.0) / (Math.Pow(1.03, 100.0) - 1.0)));\r
-\r
- if (auto考慮)\r
- {\r
- ret *= dbCalcReviseValForDrGtBsAutoLanes(inst);\r
- }\r
- return ret;\r
- }\r
-\r
- internal static double dbCalcReviseValForDrGtBsAutoLanes(EPart inst) // #28607 2012.6.7 yyagi\r
- {\r
- double ret = 1.0;\r
- bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(inst);\r
- switch (inst)\r
- {\r
- #region [ Unknown ]\r
- case EPart.Unknown:\r
- throw new ArgumentException();\r
- #endregion\r
- #region [ Drums ]\r
- case EPart.Drums:\r
- if (!allauto)\r
- {\r
- #region [ Auto BD ]\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.BD)\r
- {\r
- ret /= 2;\r
- }\r
- #endregion\r
- }\r
- break;\r
- #endregion\r
- #region [ Guitar ]\r
- case EPart.Guitar:\r
- if (!allauto)\r
- {\r
- #region [ Auto Pick ]\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick)\r
- {\r
- ret /= 2; // AutoPick時、達成率を1/2にする\r
- }\r
- #endregion\r
- #region [ Auto Neck ]\r
- int nAutoLanes = 0;\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtR)\r
- {\r
- nAutoLanes++;\r
- }\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtG)\r
- {\r
- nAutoLanes++;\r
- }\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtB)\r
- {\r
- nAutoLanes++;\r
- }\r
- ret /= Math.Sqrt(nAutoLanes + 1);\r
- #endregion\r
- }\r
- break;\r
- #endregion\r
- #region [ Bass ]\r
- case EPart.Bass:\r
- if (!allauto)\r
- {\r
- #region [ Auto Pick ]\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick)\r
- {\r
- ret /= 2; // AutoPick時、達成率を1/2にする\r
- }\r
- #endregion\r
- #region [ Auto lanes ]\r
- int nAutoLanes = 0;\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsR)\r
- {\r
- nAutoLanes++;\r
- }\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsG)\r
- {\r
- nAutoLanes++;\r
- }\r
- if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsB)\r
- {\r
- nAutoLanes++;\r
- }\r
- ret /= Math.Sqrt(nAutoLanes + 1);\r
- #endregion\r
- }\r
- break;\r
- #endregion\r
- }\r
- return ret;\r
- }\r
-\r
- internal static STDGBSValue<bool> t更新条件を取得する()\r
- {\r
- STDGBSValue<bool> ret = new STDGBSValue<bool>();\r
- for (EPart i = EPart.Drums; i <= EPart.Bass; ++i)\r
- {\r
- ret[i] = CDTXMania.Instance.ConfigIni.b楽器有効(i) && CDTXMania.Instance.DTX.bチップがある[i] && !CDTXMania.Instance.ConfigIni.bIsAutoPlay(i);\r
- }\r
- return ret;\r
- }\r
-\r
- internal static ERANK t総合ランク値を計算して返す(STDGBSValue<C演奏記録> record)\r
- {\r
- int nTotal = record.Drums.n全チップ数 + record.Guitar.n全チップ数 + record.Bass.n全チップ数;\r
- int nPerfect = record.Drums.nPerfect数_Auto含まない + record.Guitar.nPerfect数_Auto含まない + record.Bass.nPerfect数_Auto含まない; // #24569 2011.3.1 yyagi: to calculate result rank without AUTO chips\r
- int nGreat = record.Drums.nGreat数_Auto含まない + record.Guitar.nGreat数_Auto含まない + record.Bass.nGreat数_Auto含まない; //\r
- int nGood = record.Drums.nGood数_Auto含まない + record.Guitar.nGood数_Auto含まない + record.Bass.nGood数_Auto含まない; //\r
- int nPoor = record.Drums.nPoor数_Auto含まない + record.Guitar.nPoor数_Auto含まない + record.Bass.nPoor数_Auto含まない; //\r
- int nMiss = record.Drums.nMiss数_Auto含まない + record.Guitar.nMiss数_Auto含まない + record.Bass.nMiss数_Auto含まない; //\r
- return tランク値を計算して返す(nTotal, nPerfect, nGreat, nGood, nPoor, nMiss);\r
- }\r
-\r
- // その他\r
-\r
- #region [ private ]\r
- //-----------------\r
- /*\r
- private bool ONorOFF(char c)\r
- {\r
- return (c != '0');\r
- }\r
- private static char boolToChar(bool b)\r
- {\r
- if (!b)\r
- {\r
- return '0';\r
- }\r
- return '1';\r
- }\r
- */\r
- //-----------------\r
- #endregion\r
- }\r
-}\r