• R/O
  • HTTP
  • SSH
  • HTTPS

dtxmaniaxg-verk-git: コミット

DTXManiaXG(Ver.K)4.00Series


コミットメタ情報

リビジョン3b9562b822e80579fde8f1f5f3f0932a4df7ee9a (tree)
日時2017-07-17 15:30:12
作者kairera0467 <gennsou76573@gmai...>
コミッターkairera0467

ログメッセージ

#36335 ゴースト使用時に現在の達成率のスキル計算がうまくいっていなかったので修正
#xxxxx XG演奏スキルの小数点第3以下を切り捨てるよう修正(既存の記録において達成率が下がる場合がありますが正常な動作です)
#xxxxx 使用パッケージに「System.ValueTuple」を追加
作業部屋50596 XGスキル計算のみタプルを使用したスキル計算メソッドを作成

変更サマリ

差分

--- a/DTXManiaプロジェクト/DTXManiaプロジェクト.csproj
+++ b/DTXManiaプロジェクト/DTXManiaプロジェクト.csproj
@@ -75,6 +75,9 @@
7575 <Reference Include="System" />
7676 <Reference Include="System.Data" />
7777 <Reference Include="System.Drawing" />
78+ <Reference Include="System.ValueTuple, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
79+ <HintPath>packages\System.ValueTuple.4.3.1\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
80+ </Reference>
7881 <Reference Include="System.Web" />
7982 <Reference Include="System.Windows.Forms" />
8083 <Reference Include="System.Xml" />
@@ -97,6 +100,7 @@
97100 <None Include="DTXManiaGR.exe.x86.manifest">
98101 <SubType>Designer</SubType>
99102 </None>
103+ <None Include="packages.config" />
100104 <None Include="Properties\Settings.settings">
101105 <Generator>SettingsSingleFileGenerator</Generator>
102106 <LastGenOutput>Settings.Designer.cs</LastGenOutput>
--- /dev/null
+++ b/DTXManiaプロジェクト/packages.config
@@ -0,0 +1,4 @@
1+<?xml version="1.0" encoding="utf-8"?>
2+<packages>
3+ <package id="System.ValueTuple" version="4.3.1" targetFramework="net451" />
4+</packages>
\ No newline at end of file
--- a/DTXManiaプロジェクト/コード/スコア、曲/CScoreIni.cs
+++ b/DTXManiaプロジェクト/コード/スコア、曲/CScoreIni.cs
@@ -1395,12 +1395,13 @@ namespace DTXMania
13951395 }
13961396 return (int)ERANK.UNKNOWN;
13971397 }
1398- internal static int tXGランク値を計算して返す( C演奏記録 part )
1398+ internal static int tXGランク値を計算して返す( C演奏記録 part, E楽器パート inst )
13991399 {
14001400 if( part.b演奏にMIDI入力を使用した || part.b演奏にキーボードを使用した || part.b演奏にジョイパッドを使用した || part.b演奏にマウスを使用した ) // 2010.9.11
14011401 {
14021402 int nTotal = part.nPerfect数 + part.nGreat数 + part.nGood数 + part.nPoor数 + part.nMiss数;
1403- return tXGランク値を計算して返す( nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数, part.n最大コンボ数 );
1403+ //return tXGランク値を計算して返す( nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数, part.n最大コンボ数 );
1404+ return tXGSkillCal( nTotal, part.nPerfect数, part.nGreat数, part.nGood数, part.nPoor数, part.nMiss数, 0, part.n最大コンボ数, inst, part.bAutoPlay, 0 ).rank;
14041405 }
14051406 return (int)ERANK.UNKNOWN;
14061407 }
@@ -1442,6 +1443,59 @@ namespace DTXMania
14421443 }
14431444 return (int)ERANK.E;
14441445 }
1446+ internal static ( double dbGame, double dbMusic, int rank ) tXGSkillCal( int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss, int nBad, int nCombo, E楽器パート inst, STAUTOPLAY bAutoPlay, double dbLevel )
1447+ {
1448+ double retGame = 0.0;
1449+ double retMusic = 0.0;
1450+ int nRank = (int)ERANK.UNKNOWN;
1451+
1452+ #region[ 演奏スキル ]
1453+ //2017.07.17 kairera0467 BEMANIWiki 2ndに掲載されている最新の計算式に差し替え
1454+ double judgeRet = 0.0;
1455+ double comboRet = 0.0;
1456+
1457+ switch( inst )
1458+ {
1459+ case E楽器パート.DRUMS:
1460+ judgeRet = ( nPerfect * 85.0 + nGreat * 35.0 ) / nTotal;
1461+ break;
1462+ case E楽器パート.GUITAR:
1463+ case E楽器パート.BASS:
1464+ judgeRet = ( nPerfect * 85.0 + nGreat * 25.0 ) / ( nTotal + nMiss );
1465+ break;
1466+ }
1467+ comboRet = nCombo * 15.0 / nTotal;
1468+
1469+ retGame = judgeRet + comboRet;
1470+ retGame *= dbCalcReviseValForDrGtBsAutoLanes(inst, bAutoPlay);
1471+ #endregion
1472+ #region[ 曲別スキル ]
1473+ retMusic = (retGame / 100.0) * dbLevel * 20.0;
1474+ retMusic *= dbCalcReviseValForDrGtBsAutoLanes(inst, bAutoPlay);
1475+ if( CDTXMania.ConfigIni.bドラムが全部オートプレイである ) {
1476+ retMusic = 0;
1477+ }
1478+ #endregion
1479+ #region[ ランク ]
1480+ if ( retGame >= 95.0 ) {
1481+ nRank = (int)ERANK.SS;
1482+ } else if( retGame >= 0.80 ) {
1483+ nRank = (int)ERANK.S;
1484+ } else if( retGame >= 0.73 ) {
1485+ nRank = (int)ERANK.A;
1486+ } else if( retGame >= 0.63 ) {
1487+ nRank = (int)ERANK.B;
1488+ } else if( retGame >= 0.53 ) {
1489+ nRank = (int)ERANK.C;
1490+ } else if( retGame >= 0.45 ) {
1491+ nRank = (int)ERANK.D;
1492+ } else {
1493+ nRank = (int)ERANK.E;
1494+ }
1495+ #endregion
1496+
1497+ return ( retGame, retMusic, nRank );
1498+ }
14451499 /// <summary>
14461500 /// nDummy 適当な数値を入れてください。特に使いません。
14471501 /// dRate 達成率を入れます。
@@ -1539,27 +1593,50 @@ namespace DTXMania
15391593 }
15401594 internal static double tXG演奏型スキルを計算して返す(int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss, int nCombo, E楽器パート inst, STAUTOPLAY bAutoPlay)
15411595 {
1596+ return tXG演奏型スキルを計算して返す( nTotal, nPerfect, nGreat, nGood, nPoor, nMiss, 0, nCombo, inst, bAutoPlay );
1597+ }
1598+ internal static double tXG演奏型スキルを計算して返す(int nTotal, int nPerfect, int nGreat, int nGood, int nPoor, int nMiss, int nBad, int nCombo, E楽器パート inst, STAUTOPLAY bAutoPlay)
1599+ {
15421600 if (nTotal == 0)
15431601 return 0.0;
1602+ //2017.07.17 kairera0467 BEMANIWiki 2ndに掲載されている最新の計算式に差し替え
15441603
15451604 double nAuto = nTotal - ( nPerfect + nGreat + nGood + nPoor + nMiss );
1546- double dbPERFECT率 = ( 100.0 * nPerfect / nTotal );
1547- double dbGREAT率 = ( 100.0 * nGreat / nTotal );
1548- double dbCOMBO率 = ( 100.0 * nCombo / ( nTotal ) );
1605+ double judgeRet = 0.0;
1606+ double comboRet = 0.0;
1607+ //(PERFECT数×85+GREAT数×25)/(総ノーツ数+空MISS数)
1608+ //DM判定値: (PERFECT数×85 + GREAT数×35)/ 総ノーツ数
1609+ //COMBO値: COMBO数×15(Matixxでは5の予定) / 総ノーツ数
15491610
1550- if (nTotal == nAuto)
1611+ switch( inst )
15511612 {
1552- dbCOMBO率 = 0.0;
1613+ case E楽器パート.DRUMS:
1614+ judgeRet = ( nPerfect * 85.0 + nGreat * 35.0 ) / nTotal;
1615+ break;
1616+ case E楽器パート.GUITAR:
1617+ case E楽器パート.BASS:
1618+ judgeRet = ( nPerfect * 85.0 + nGreat * 25.0 ) / ( nTotal + nMiss );
1619+ break;
15531620 }
15541621
1555- double ret = dbPERFECT率 * 0.85 + dbGREAT率 * 0.35 + dbCOMBO率 * 0.15;
1622+ //double dbPERFECT率 = ( 100.0 * nPerfect / nTotal );
1623+ //double dbGREAT率 = ( 100.0 * nGreat / nTotal );
1624+ //double dbCOMBO率 = ( 100.0 * nCombo / ( nTotal ) );
1625+
1626+ comboRet = nCombo * 15.0 / nTotal;
1627+ if (nTotal == nAuto)
1628+ {
1629+ comboRet = 0.0;
1630+ //dbCOMBO率 = 0.0;
1631+ }
15561632
1557- //System.IO.StreamWriter sw = new System.IO.StreamWriter(@"debug.txt", true, System.Text.Encoding.GetEncoding("shift_jis"));
1558- //sw.WriteLine("retの値は{0}です。", ret);
1559- //sw.WriteLine("nTotalは{0}で、dbPERFECT率は{1}、dbGREAT率は{2}です。", nTotal, dbPERFECT率, dbGREAT率);
1560- //sw.Close();
1633+ //double ret = dbPERFECT率 * 0.85 + dbGREAT率 * 0.35 + dbCOMBO率 * 0.15;
15611634
1635+ //(判定値+COMBO値)×オプション補正
1636+ double ret = judgeRet + comboRet;
15621637 ret *= dbCalcReviseValForDrGtBsAutoLanes(inst, bAutoPlay);
1638+ ret = Math.Floor( ret * 100.0 );
1639+ ret = ret / 100.0;
15631640 return ret;
15641641 }
15651642 internal static double tゲーム型スキルを計算して返す( int nLevel, int nTotal, int nPerfect, int nCombo, E楽器パート inst, STAUTOPLAY bAutoPlay )
--- a/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs
+++ b/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs
@@ -719,7 +719,7 @@ namespace DTXMania
719719 {
720720 node.arスコア[ lv ].譜面情報.最大ランク[ i ] =
721721 (scoreIni.stファイル.BestRank[i] != (int)CScoreIni.ERANK.UNKNOWN)?
722- (int)scoreIni.stファイル.BestRank[i] : CScoreIni.tXGランク値を計算して返す( scoreIni.stセクション[ nSectionHiSkill ] );
722+ (int)scoreIni.stファイル.BestRank[i] : CScoreIni.tXGランク値を計算して返す( scoreIni.stセクション[ nSectionHiSkill ], (E楽器パート)i );
723723 }
724724 }
725725 else
--- a/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs
+++ b/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs
@@ -45,13 +45,15 @@ namespace DTXMania
4545 else
4646 {
4747 Drums.dbゲーム型スキル値 = CScoreIni.tXG曲別スキルを計算して返す( CDTXMania.DTX.LEVEL.Drums, CDTXMania.DTX.LEVELDEC.Drums, CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
48- Drums.db演奏型スキル値 = CScoreIni.tXG演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
48+ Drums.db演奏型スキル値 = CScoreIni.tXG演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
49+ // Drums.db演奏型スキル値 = CScoreIni.tXGSkillCal( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, 0, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay, 0.0 ).dbGame;
4950 }
5051 Drums.nPerfect数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Perfect : this.nヒット数_Auto含まない.Drums.Perfect;
5152 Drums.nGreat数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Great : this.nヒット数_Auto含まない.Drums.Great;
5253 Drums.nGood数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Good : this.nヒット数_Auto含まない.Drums.Good;
5354 Drums.nPoor数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Poor : this.nヒット数_Auto含まない.Drums.Poor;
5455 Drums.nMiss数 = CDTXMania.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Miss : this.nヒット数_Auto含まない.Drums.Miss;
56+
5557 Drums.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Drums.Perfect;
5658 Drums.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Drums.Great;
5759 Drums.nGood数_Auto含まない = this.nヒット数_Auto含まない.Drums.Good;
--- a/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs
+++ b/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs
@@ -417,21 +417,44 @@ namespace DTXMania
417417 {
418418 E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.DRUMS, bCorrectLane );
419419 // #24074 2011.01.23 add ikanick
420- if( CDTXMania.ConfigIni.eSkillMode == ESkillType.DTXMania )
421- this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, E楽器パート.DRUMS, bIsAutoPlay );
422- else
423- this.actGraph.dbグラフ値現在_渡 = CScoreIni.tXG演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
424- // #35411 2015.09.07 add chnmr0
425- if( CDTXMania.listTargetGhsotLag.Drums != null &&
426- CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.ONLINE &&
427- CDTXMania.DTX.n可視チップ数.Drums > 0 )
428- {
429- // Online Stats の計算式
430- this.actGraph.dbグラフ値現在_渡 = 100 *
431- (this.nヒット数_Auto含まない.Drums.Perfect * 17 +
432- this.nヒット数_Auto含まない.Drums.Great * 7 +
433- this.actCombo.n現在のコンボ数.Drums最高値 * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);
434- }
420+ if( CDTXMania.listTargetGhsotLag.Drums != null )
421+ {
422+ switch( CDTXMania.ConfigIni.eTargetGhost.Drums )
423+ {
424+ case ETargetGhostData.ONLINE:
425+ // #35411 2015.09.07 add chnmr0
426+ if( CDTXMania.DTX.n可視チップ数.Drums > 0 )
427+ {
428+ // Online Stats の計算式
429+ this.actGraph.dbグラフ値現在_渡 = 100 *
430+ (this.nヒット数_Auto含まない.Drums.Perfect * 17 +
431+ this.nヒット数_Auto含まない.Drums.Great * 7 +
432+ this.actCombo.n現在のコンボ数.Drums最高値 * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);
433+ }
434+ break;
435+ default:
436+ {
437+ if( CDTXMania.ConfigIni.bドラムが全部オートプレイである )
438+ {
439+ if( CDTXMania.ConfigIni.eSkillMode == ESkillType.DTXMania )
440+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, E楽器パート.DRUMS, bIsAutoPlay );
441+ else
442+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.tXG演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, this.actCombo.n現在のコンボ数Ghost.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
443+
444+ }
445+ else
446+ {
447+ if( CDTXMania.ConfigIni.eSkillMode == ESkillType.DTXMania )
448+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含む.Drums.Perfect, this.nヒット数_Auto含む.Drums.Great, this.nヒット数_Auto含む.Drums.Good, this.nヒット数_Auto含む.Drums.Poor, this.nヒット数_Auto含む.Drums.Miss, E楽器パート.DRUMS, bIsAutoPlay );
449+ else
450+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.tXG演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含む.Drums.Perfect, this.nヒット数_Auto含む.Drums.Great, this.nヒット数_Auto含む.Drums.Good, this.nヒット数_Auto含む.Drums.Poor, this.nヒット数_Auto含む.Drums.Miss, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay );
451+ }
452+
453+ }
454+ break;
455+ }
456+ }
457+
435458
436459 this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数_Auto含まない.Drums.Perfect;
437460 this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数_Auto含まない.Drums.Great;
@@ -3095,7 +3118,7 @@ namespace DTXMania
30953118 this.nヒット数_TargetGhost.Drums.Good,
30963119 this.nヒット数_TargetGhost.Drums.Poor,
30973120 this.nヒット数_TargetGhost.Drums.Miss,
3098- this.n最大コンボ数_TargetGhost.Drums,
3121+ this.actCombo.n現在のコンボ数.Drums,
30993122 E楽器パート.DRUMS, new STAUTOPLAY());
31003123 }
31013124
--- a/DTXManiaプロジェクト/コード/ステージ/08.結果/CStage結果.cs
+++ b/DTXManiaプロジェクト/コード/ステージ/08.結果/CStage結果.cs
@@ -116,7 +116,7 @@ namespace DTXMania
116116 if( CDTXMania.ConfigIni.eSkillMode == ESkillType.DTXMania )
117117 this.nランク値[ i ] = CScoreIni.tランク値を計算して返す( part );
118118 else
119- this.nランク値[ i ] = CScoreIni.tXGランク値を計算して返す( part );
119+ this.nランク値[ i ] = CScoreIni.tXGランク値を計算して返す( part, (E楽器パート)i );
120120 }
121121 }
122122 this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
旧リポジトリブラウザで表示