1
0
mirror of synced 2024-11-28 09:20:53 +01:00

Fix a game-breaking parsing issue for some dans with individual conditions

This commit is contained in:
0aubsq 2022-06-18 05:38:00 +02:00
parent 6b9387a490
commit 52cd66d2b6
3 changed files with 58 additions and 43 deletions

View File

@ -2897,7 +2897,10 @@ namespace TJAPlayer3
} }
else if (nMode == 1) else if (nMode == 1)
{ {
if (!string.IsNullOrEmpty(input[n]) && (input[n].Substring(0, 1) == "#" || NotesManager.FastFlankedParsing(input[n])))//this.CharConvertNote(input[n].Substring(0, 1)) != -1)) if (!string.IsNullOrEmpty(input[n]) &&
(input[n].Substring(0, 1) == "#"
|| input[n].StartsWith("EXAM")
|| NotesManager.FastFlankedParsing(input[n])))//this.CharConvertNote(input[n].Substring(0, 1)) != -1))
{ {
if (input[n].StartsWith("BALLOON") || input[n].StartsWith("BPM")) if (input[n].StartsWith("BALLOON") || input[n].StartsWith("BPM"))
{ {
@ -3319,9 +3322,24 @@ namespace TJAPlayer3
this.t入力_行解析譜面_V4(str); this.t入力_行解析譜面_V4(str);
/*
if (!String.IsNullOrEmpty(strSplit読み込むコース[i])) if (!String.IsNullOrEmpty(strSplit読み込むコース[i]))
this.tDanExamLoad(strSplit読み込むコース[i]); this.tDanExamLoad(strSplit読み込むコース[i]);
*/
} }
if (DanSongs.Number > 0)
{
for (int i = 0; i < CExamInfo.cMaxExam; i++)
{
if (Dan_C[i] != null && List_DanSongs[0].Dan_C[i] == null)
{
List_DanSongs[0].Dan_C[i] = Dan_C[i];
}
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -4265,6 +4283,11 @@ namespace TJAPlayer3
this.t命令を挿入する(InputText); this.t命令を挿入する(InputText);
return; return;
} }
else if (InputText.StartsWith("EXAM"))
{
this.tDanExamLoad(InputText);
return;
}
else else
{ {
if (this.b小節線を挿入している == false) if (this.b小節線を挿入している == false)
@ -4769,8 +4792,7 @@ namespace TJAPlayer3
// Adapt to EXAM until 7, optimise condition // Adapt to EXAM until 7, optimise condition
if (strCommandName.Equals("EXAM1") || strCommandName.Equals("EXAM2") || strCommandName.Equals("EXAM3") || strCommandName.Equals("EXAM4") if (strCommandName.StartsWith("EXAM"))
|| strCommandName.Equals("EXAM5") || strCommandName.Equals("EXAM6") || strCommandName.Equals("EXAM7"))
{ {
if (!string.IsNullOrEmpty(strCommandParam)) if (!string.IsNullOrEmpty(strCommandParam))
{ {
@ -4778,6 +4800,11 @@ namespace TJAPlayer3
int[] examValue; int[] examValue;
Exam.Range examRange; Exam.Range examRange;
var splitExam = strCommandParam.Split(','); var splitExam = strCommandParam.Split(',');
int examNumber = int.Parse(strCommandName.Substring(4)) - 1;
if (examNumber > CExamInfo.cMaxExam)
return;
switch (splitExam[0]) switch (splitExam[0])
{ {
case "g": case "g":
@ -4838,10 +4865,11 @@ namespace TJAPlayer3
break; break;
} }
if(Dan_C[int.Parse(strCommandName.Substring(4)) - 1] == null) if(Dan_C[examNumber] == null)
Dan_C[int.Parse(strCommandName.Substring(4)) - 1] = new Dan_C(examType, examValue, examRange); Dan_C[examNumber] = new Dan_C(examType, examValue, examRange);
List_DanSongs[DanSongs.Number - 1].Dan_C[int.Parse(strCommandName.Substring(4)) - 1] = new Dan_C(examType, examValue, examRange); if (DanSongs.Number > 0)
List_DanSongs[DanSongs.Number - 1].Dan_C[examNumber] = new Dan_C(examType, examValue, examRange);
} }
} }
} }

View File

@ -439,47 +439,15 @@ namespace TJAPlayer3
switch (this.Mode[i]) switch (this.Mode[i])
{ {
case EndMode.StageFailed: case EndMode.StageFailed:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundFailed != null && !this.b再生済み)
{
this.soundFailed.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_Failed(i); this.showEndEffect_Failed(i);
break; break;
case EndMode.StageCleared: case EndMode.StageCleared:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundClear != null && !this.b再生済み)
{
this.soundClear.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_Clear(i); this.showEndEffect_Clear(i);
break; break;
case EndMode.StageFullCombo: case EndMode.StageFullCombo:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundFullCombo != null && !this.b再生済み)
{
this.soundFullCombo.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_FullCombo(i); this.showEndEffect_FullCombo(i);
break; break;
case EndMode.StageDondaFullCombo: case EndMode.StageDondaFullCombo:
//this.ct進行メイン.n現在の値 = 18;
/*
if (this.soundDondaFullCombo != null && !this.b再生済み)
{
this.soundDondaFullCombo.t再生を開始する();
this.b再生済み = true;
}
*/
this.showEndEffect_DondaFullCombo(i); this.showEndEffect_DondaFullCombo(i);
break; break;
default: default:

View File

@ -61,7 +61,8 @@ namespace TJAPlayer3
{ {
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[0].Dan_C[j] != null) if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[0].Dan_C[j] != null)
{ {
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count - 1].Dan_C[j] != null) //個別の条件がありますよー if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count - 1].Dan_C[j] != null
&& TJAPlayer3.stage選曲.r確定された曲.DanSongs.Count > 1) // Individual exams, not counted if dan is only a single song
{ {
if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[NowShowingNumber].Dan_C[j].GetExamRange() == Exam.Range.Less) if (TJAPlayer3.stage選曲.r確定された曲.DanSongs[NowShowingNumber].Dan_C[j].GetExamRange() == Exam.Range.Less)
{ {
@ -244,6 +245,7 @@ namespace TJAPlayer3
+ TJAPlayer3.stage演奏ドラム画面.n可[NowShowingNumber] + TJAPlayer3.stage演奏ドラム画面.n可[NowShowingNumber]
+ TJAPlayer3.stage演奏ドラム画面.n不可[NowShowingNumber]); + TJAPlayer3.stage演奏ドラム画面.n不可[NowShowingNumber]);
/*
notesremain = TJAPlayer3.DTX.nーツ数[3] notesremain = TJAPlayer3.DTX.nーツ数[3]
- (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Perfect - (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Perfect
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Perfect) + TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Perfect)
@ -251,10 +253,16 @@ namespace TJAPlayer3
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Great) + TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Great)
- (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Miss - (TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含む.Drums.Miss
+ TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Miss); + TJAPlayer3.stage演奏ドラム画面.nヒット数_Auto含まない.Drums.Miss);
*/
notesremain = TJAPlayer3.DTX.nーツ数[3]
- (TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGood
+ TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nGreat
+ TJAPlayer3.stage演奏ドラム画面.CChartScore[0].nMiss);
// 残り音符数が0になったときに判断されるやつ // 残り音符数が0になったときに判断されるやつ
// Challenges that are judged when there are no remaining notes (janky ?) // Challenges that are judged when there are no remaining notes
if (ExamChange[i] ? songsnotesremain[NowShowingNumber] <= 0 : notesremain <= 0) if (ExamChange[i] ? songsnotesremain[NowShowingNumber] <= 0 : notesremain <= 0)
{ {
// 残り音符数ゼロ // 残り音符数ゼロ
@ -307,7 +315,18 @@ namespace TJAPlayer3
{ {
case Exam.Type.Score: case Exam.Type.Score:
case Exam.Type.Hit: case Exam.Type.Hit:
case Exam.Type.Roll: // Should be checked in live "If no remaining roll" // Should be checked in live "If no remaining roll"
case Exam.Type.Roll:
// Should be checked in live "If no remaining ADLIB/Mine"
case Exam.Type.JudgeADLIB:
case Exam.Type.JudgeMine:
// Catch normaly already checked cases that would be forgotten before (ex : for charts with branches)
case Exam.Type.JudgePerfect:
case Exam.Type.JudgeGood:
case Exam.Type.JudgeBad:
case Exam.Type.Gauge:
case Exam.Type.Accuracy:
case Exam.Type.Combo:
if (Challenge[i].Amount < Challenge[i].Value[0]) Challenge[i].SetReached(true); if (Challenge[i].Amount < Challenge[i].Value[0]) Challenge[i].SetReached(true);
break; break;
default: default: