C# 脚本优化#
我正在为一个名为Livesplit的程序开发一个自动拆分器。 它用于speedrunning,通过创建AutoSpliter,您可以监视内存地址,以便在值更改时通知应用程序执行操作 它使用的是C#,所以施点魔法应该不会有问题 我是一个完全的编程高手,几乎没有编程经验。 我不知道如何优化这段代码,所以它首先看起来不坏,其次是应用本身没有问题 现在,我的代码看起来像这样,但它是可怕的C# 脚本优化#,c#,if-statement,optimization,C#,If Statement,Optimization,我正在为一个名为Livesplit的程序开发一个自动拆分器。 它用于speedrunning,通过创建AutoSpliter,您可以监视内存地址,以便在值更改时通知应用程序执行操作 它使用的是C#,所以施点魔法应该不会有问题 我是一个完全的编程高手,几乎没有编程经验。 我不知道如何优化这段代码,所以它首先看起来不坏,其次是应用本身没有问题 现在,我的代码看起来像这样,但它是可怕的 state("GoingDown", "v1") { int Loading : "GoingDown.ex
state("GoingDown", "v1")
{
int Loading : "GoingDown.exe", 0x6874EC;
string30 LevelFirst : "GoingDown.exe", 0x263E28;
string30 LevelSecond : "GoingDown.exe", 0x263E37;
string15 Cutscene : "GoingDown.exe", 0x26B543;
}
state("GoingDown", "v2")
{
int Loading : "GoingDown.exe", 0x6874EC;
string30 LevelFirst : "GoingDown.exe", 0x263E40;
string30 LevelSecond : "GoingDown.exe", 0x263E4F;
string15 Cutscene : "GoingDown.exe", 0x26B55B;
}
init
{
if (modules.First().ModuleMemorySize == 0x79A726)
version = "v1";
else if (modules.First().ModuleMemorySize == 0x79B000)
version = "v2";
}
start
{
//return (old.Level == "M00_CIV_Intro_1" && current.Level == "M01_HOO_Tranes_Hood_1" && current.Loading != 0);
return (current.LevelFirst.Equals("M01_HOO_Tranes_Hood_1") && current.Loading != 0 && old.Loading == 0 || current.LevelSecond.Equals("M01_HOO_Tranes_Hood_1") && current.Loading != 0 && old.Loading == 00);
}
split
{
if (old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) || old.LevelSecond.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1a", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_3", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_4", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1a", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M02_HOO_Subway_1b", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m02_hoo_subway_3", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_3", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m03_hoo_whos_got_beef_4", StringComparison.OrdinalIgnoreCase))
return true;
//if (old.LevelSecond.Equals("M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_0", StringComparison.OrdinalIgnoreCase))
// return true; (CUTSCENE NO NEED TO SPLIT)
if (old.LevelSecond.Equals("M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1a", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_1b", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M04_HOO_Subway_layup_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M05_HOO_Battle_3", StringComparison.OrdinalIgnoreCase))
return true;
//if (old.LevelSecond.Equals("M06_IND_Bulletproof_0") && current.LevelSecond.Equals(":M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_0", StringComparison.OrdinalIgnoreCase))
// return true; (CUTSCENE NO NEED TO SPLIT)
if (old.LevelSecond.Equals("m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m06_ind_bulletproof_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M06_IND_Bulletproof_3", StringComparison.OrdinalIgnoreCase))
return true;
//if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_0") && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_0", StringComparison.OrdinalIgnoreCase))
// return true; (CUTSCENE NO NEED TO SPLIT)
if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M07_HOO_Blind_Justice_3", StringComparison.OrdinalIgnoreCase))
return true;
//if (old.LevelSecond.Equals("m08_hoo_remember_alamo_0") && current.LevelSecond.Equals(":m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_0", StringComparison.OrdinalIgnoreCase))
// return true; (CUTSCENE NO NEED TO SPLIT)
if (old.LevelSecond.Equals("m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m08_hoo_remember_alamo_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M08_HOO_Remember_Alamo_3", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1a", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M09_CIV_Cat_and_Mouse_1b", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m09_civ_cat_and_mouse_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_1", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":m10_civ_bridge_2", StringComparison.OrdinalIgnoreCase))
return true;
if (old.LevelSecond.Equals("M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_1", StringComparison.OrdinalIgnoreCase))
return true;
// NOT SURE IF IT WORKS
//if (old.LevelSecond.Equals("M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
// return true;
// Final split
if (current.Cutscene.Contains("M11_010") && current.Cutscene != old.Cutscene)
return true;
}
isLoading
{
return (current.Loading == 0);
}
我不知道如何处理这么多if语句。也许把它放在字典里?但是我不知道该怎么做。您正在将
old.LevelFirst
和old.LevelSecond
与许多静态值进行比较,并进行不区分大小写的比较。为什么不在split
方法的顶部,获取这些值的本地小写副本:
var first = old.LevelFirst.Lower();
var second = old.LevelSecond.Lower();
这使得比较更容易,如下所示:
if(first == "..." || first == "..." || first == "..." || ...)
return true;
接下来,我想你有一个bug。您的if声明中说:
if(first == "xxxx" && second == "yyyy" || second == "zzz")
return true;
如果second==“zzz”
的优先级低于&
,则无论first
的值如何,此语句都将返回true。你需要在你的第二个比较周围放上括号,即
if(first == "xxxx" && (second == "yyyy" || second == "zzz"))
return true;
下一步,看一下对第一级使用switch
语句,而不是if
语句(确保与之比较的值为小写:
switch(first)
{
case "m01_hoo_tranes_hood_1" :
return
(second == ":m01_hoo_tranes_hood_1") ||
(second == "m01_hoo_tranes_hood_1") ||
(second == ":m01_hoo_tranes_hood_1");
case "m01_hoo_tranes_hood_1" :
.....
}
这是一个逻辑变化-我假设如果first
是m01\u hoo\u tranes\u hood\u hood\u hood\u 1
但不是任何second
值,那么逻辑将一直下降到最后并返回false。您的if
逻辑可以允许相同的first
值在以后匹配,并具有不同的逻辑但无论如何,这可以纳入上述案例陈述中
最后,查看变量值。冒号:
前缀是否相关,还是“它们可能在那里,因此我需要检查两者”?如果是,请返回这两个var first=/var=second=
语句,并删除:
前缀,这将减少比较:
if(first.StartsWith(":"))
first = first.Substring(1); // Remove first character
现在,您不需要在所有比较中包含冒号前缀
谢谢,
Chris据我所知,你可以通过执行以下操作来削减大量代码
Func<string,string,bool> eq = (a,b) => a.Equals(b, StringComparison.OrdinalIgnoreCase);
var levels = new string[]
{
"M01_HOO_Tranes_Hood_1",
"M01_HOO_Tranes_Hood_1a",
"M01_HOO_Tranes_Hood_2",
"M01_HOO_Tranes_Hood_3",
"M01_HOO_Tranes_Hood_4",
"M02_HOO_Subway_1a",
"M02_HOO_Subway_1b",
"m02_hoo_subway_2",
"m02_hoo_subway_3",
"m03_hoo_whos_got_beef_1",
"m03_hoo_whos_got_beef_2",
"m03_hoo_whos_got_beef_3",
"m03_hoo_whos_got_beef_4",
"M04_HOO_Subway_layup_1a",
"M04_HOO_Subway_layup_1b",
"M04_HOO_Subway_layup_2",
"M05_HOO_Battle_1",
"M05_HOO_Battle_3",
"m06_ind_bulletproof_1",
"m06_ind_bulletproof_2",
"M06_IND_Bulletproof_3",
"M07_HOO_Blind_Justice_1",
"M07_HOO_Blind_Justice_2",
"M07_HOO_Blind_Justice_3",
"m08_hoo_remember_alamo_1",
"m08_hoo_remember_alamo_2",
"M08_HOO_Remember_Alamo_3",
"M09_CIV_Cat_and_Mouse_1a",
"M09_CIV_Cat_and_Mouse_1b",
"m09_civ_cat_and_mouse_2",
"m10_civ_bridge_1",
"m10_civ_bridge_2",
"M11_CIV_Blimp_1"
};
if(levels.Any((level) => eq(old.LevelFirst,level) && eq(current.LevelSecond, ":" + level) || eq(old.LevelSecond,level) && eq(current.LevelFirst, ":" + level)))
return true;
// NOT SURE IF IT WORKS
//if (old.LevelSecond.Equals("M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M11_CIV_Blimp_2", StringComparison.OrdinalIgnoreCase) || old.LevelFirst.Equals("M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase) && current.LevelSecond.Equals(":M01_HOO_Tranes_Hood_1", StringComparison.OrdinalIgnoreCase))
// return true;
// Final split
if (current.Cutscene.Contains("M11_010") && current.Cutscene != old.Cutscene)
return true;
Func eq=(a,b)=>a.Equals(b,StringComparison.OrdinalIgnoreCase);
变量级别=新字符串[]
{
“M01_HOO_Tranes_Hood_1”,
“M01_HOO_Tranes_Hood_1a”,
“M01_HOO_Tranes_Hood_2”,
“M01_HOO_Tranes_Hood_3”,
“M01_HOO_Tranes_Hood_4”,
“M02_HOO_Subway_1a”,
“M02_HOO_Subway_1b”,
“m02_hoo_subway_2”,
“m02_hoo_subway_3”,
“m03_hoo_谁有牛肉_1”,
“m03_hoo_谁有牛肉_2”,
“m03_hoo_谁有牛肉_3”,
“m03_hoo_谁有牛肉_4”,
“M04_HOO_Subway_Layou_1a”,
“M04_HOO_Subway_Layu_1b”,
“M04_HOO_Subway_Layou_2”,
“M05战火1号”,
“M05战火3号”,
“m06工业防弹1”,
“m06工业防弹2”,
“M06工业防弹3”,
“M07_-HOO_-Blind_-Justice_-1”,
“M07_-HOO_-Blind_-Justice_-2”,
“M07_-HOO_-Blind_-Justice_-3”,
“记住阿拉莫1号”,
“m08_hoo_Rememberd_alamo_2”,
“M08_-HOO_记住_-Alamo_3”,
“M09_CIV_Cat_和_Mouse_1a”,
“M09_CIV_Cat_和_Mouse_1b”,
“m09_civ_cat_和_mouse_2”,
“m10_civ_bridge_1”,
“m10_civ_bridge_2”,
“M11_CIV_Blimp_1”
};
if(levels.Any((level)=>eq(old.LevelFirst,level)和&eq(current.LevelSecond,“:”)| | eq(old.LevelSecond,level)和&eq(current.LevelFirst,“:”+level)))
返回true;
//不确定它是否有效
//if(old.LevelSecond.Equals(“M11_CIV_Blimp_2”,StringComparison.OrdinalIgnoreCase)和current.LevelSecond.Equals(“:M11_CIV_Blimp_2,StringComparison.OrdinalIgnoreCase”)和current.LevelSecond.Equals(“:M11_CIV_Blimp,StringComparison.OrdinalIgnoreCase);”old.LevelFirst.Equals(“M01_HOO_Tranes_Hood,StringComparison.ordinagnorecase”)和current
//返回true;
//最终拆分
if(current.Cutscene.Contains(“M11_010”)&¤t.Cutscene!=old.Cutscene)
返回true;
但我不知道这是否真的更具可读性。你的问题是什么?你的代码质量?是的,有没有优化它的方法?Split甚至可以返回false?你也不能测试old.LevelSecond.Equals(“:”+current.LevelSecond)它真的在胡闹这个eve应该做什么?是的,它可以。我认为这是不可能的。就像我说的,它基本上监视levelname地址,以及当它从“级别”变为“:级别”时它认为这是一个已通过的任务,并且会分裂。那么你真正想做什么呢?试着像对门外汉一样描述你的问题。谢谢克里斯,注意到。至于切换。我不确定这是否可行?假设我第一次加载游戏,我在菜单中-当前关卡首先持有“菜单”,我进入一个关卡,旧的是“菜单”,curret是“m001…”.如果我离开level,它会切换(当前的“菜单”;旧的“m001…”)。现在如果我进入一个关卡并完成它,当前的LevelFirst会突然出现随机giberish,所有的都会移动到LEVELSEXT,所以当前的“菜单”会出现“:m001…”但是,旧的是空的。但是,假设我在游戏的中间,游戏崩溃了,现在游戏又回到了使用LeaveC1并重复同样的事情。我必须假设游戏在任何时候崩溃,所以为什么会有这么多的if语句。我想如果你澄清什么是<代码>旧的。nt.LevelFirst
,current.LevelSecond
实际上是。我猜old
是以前的状态,current
是您刚刚进入的新状态。那么LevelFirst
与LevelSecond
相比呢?(总共是这四个变量吗?)