只有赋值、调用、自增、自减、等待和new对象表达式
本文关键字:new 对象 表达式 等待 自增 赋值 调用 自减 | 更新日期: 2023-09-27 18:13:06
我昨天发布了一个关于这个代码的问题,但是我做了…真的很严重。后来我和一个很懂编程的朋友聊了聊,也尝试了一些东西,但我真的碰壁了。我试着看其他同样的问题,但他们的解决方案都不适合我…
我想做的是覆盖"有效性"。服务器将有效性定为4或5(我不确定是哪个,但肯定是两个中的一个——无论如何,哪个都无关紧要)。我想让它取7或7以上。我弄清楚了如何从服务器调用有效性数据,但它似乎仍然不起作用。4/5的有效性给了我一个文本"It's not very effective…",当我尝试使用代码时,这种情况一直发生。
这是我的代码(还有很多,但我已经删除了不相关的):
public partial class Main {
public static int effectiveness;
public static void BeforeMoveHits(BattleSetup setup) {
try {
if (setup.Defender != null) {
switch (setup.Move.AdditionalEffectData3) {
case 69: { //Freeze Dry
if (setup.Defender.Type1 == Enums.PokemonType.Water ||
setup.Defender.Type2 == Enums.PokemonType.Water) {
DamageCalculator.Effectiveness[256];
}
}
break;
}
}
}
}
}
如文中所述,当我尝试编译它时,得到错误
只有赋值、call、increment、递减、await和new对象表达式可以作为语句使用。
public static int effectiveness
是我尝试使用"effectiveness = 8"而不是使用"DamageCalculator.Effectiveness"时留下的。删除它不会影响任何东西,所以我把它留在那里,以备以后使用。
在DamageCalculator.cs中,这是设置有效性的内容:
public static int[] Effectiveness = new int[9] {2, 8, 16, 64, 96, 160, 256, 416, 640};
如果你觉得有用,可以在这里查看完整的代码。
还有一个关于BattleProcessor.cs的有效性的小道消息,尽管我怀疑它的相关性,因为我继续研究这个…
public static string EffectivenessToPhrase(int effectiveness) {
if (effectiveness < 4) {
return "It has little effect...";
} else if (effectiveness < 6) {
return "It's not very effective...";
} else if (effectiveness == 7) {
return "It's super-effective!";
} else if (effectiveness > 7) {
return "It's super-effective!!!";
} else {
return null;
}
}
这是BattleProcessor.cs的完整代码,如果你需要的话。
值得注意的是,我可以不从void更改BeforeMoveHits,我可以不将Main更改为partial以外的任何内容。这样做会破坏游戏的其他部分。话虽如此,如果由于这些情况而无法改变效果,请告诉我。我将……语句没有意义
DamageCalculator.Effectiveness[256];
这个语句返回一个你根本没有使用的值。您至少需要将返回的值保存在某个变量中以供以后使用。或者你为什么要这么做。
下面的语句将解决编译时错误。
var temp = DamageCalculator.Effectiveness[256];
BTW
DamageCalculator.Effectiveness[256];
将在您使代码可以编译后抛出异常。IndexOutOfRangeException
是例外然后用下面的语句解决这个问题
DamageCalculator.Effectiveness[6]
您的语句"Damagecalculator. "有效性[256]"毫无意义。这里不需要定义或分配任何东西。我想这就是编译器抱怨的原因。你用错了数组。只需使用一个简单的整数来设置有效性。如果您希望将有效性设置为这个特定的数字,则应该使用枚举数。
如果你为BattleProcessor
类链接的代码实际上大部分都被注释了,那么你可以
-
利用其
EffectivenessToPhrase()
方法传递足够高的effectiveness
参数string effectivenessToPhrase = BattleProcessor.EffectivenessToPhrase(7);
这只会影响ToPrhase输出
-
改变
Effectiveness[]
值以模拟更高的索引:DamageCalculator.Effectiveness[4]=256; DamageCalculator.Effectiveness[5]=256;
这将影响任何使用
DamageCalculator.Effectiveness
的代码则必须在任务完成后立即将这些值恢复为原始值(分别为96和160)