昨天我发布了一个关于此代码的问题,但我做到了......非常糟糕。我和我的一位知道编码很好并且尝试了一些事情的朋友谈过,但我真的碰到了这个问题。我试着查看同一协议的其他问题,但他们的解决方案都没有对我有用......
我要做的是覆盖"效果"。服务器的效率为4或5(我不确定哪个,但它绝对是两个中的一个 - 无论如何都不重要)。我想把它当作7岁或以上。我想出了如何从服务器调用有效性数据,但它似乎仍然无法正常工作。 4/5的有效性给了我文本"它不是非常有效...",当我尝试使用代码时,它会不断发生。
这是我的代码(还有更多内容,但我删除了无关紧要的内容):
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;
}
}
}
}
}
如瓷砖中所述,当我尝试编译它时,我收到错误
只能将赋值,调用,递增,递减,等待和新对象表达式用作语句。
public static int effectiveness
从我尝试使用"有效性= 8"时遗留下来而不是DamageCalculator.Effectiveness。删除它不会影响任何东西,所以我把它留在那里以防我以后需要它。
在DamageCalculator.cs中,这就是设定有效性的原因:
public static int[] Effectiveness = new int[9] {2, 8, 16, 64, 96, 160, 256, 416, 640};
如果您觉得有用,可以查看完整代码here。
还有一些关于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;
}
}
如果你需要,This是BattleProcessor.cs的完整代码。
值得注意的是,我可以不从void更改BeforeMoveHits,并且不可以将Main更改为除partial之外的任何内容。这样做会破坏游戏的其他部分。话虽如此,如果由于这些情况而无法改变效果,请告诉我。我会......尝试找出别的东西来做我想做的事。
答案 0 :(得分:1)
声明没有意义
DamageCalculator.Effectiveness[256];
此语句返回一个您根本不使用的值。 你需要至少保存你在某个变量中返回的值,以便以后使用它。或者你为什么要这样做。
以下语句将解决编译时错误。
var temp = DamageCalculator.Effectiveness[256];
BTW
DamageCalculator.Effectiveness[256];
在您编译代码后,将抛出异常。
例外情况为IndexOutOfRangeException
并在那时通过以下声明解决这个问题
DamageCalculator.Effectiveness[6]
答案 1 :(得分:1)
你的陈述&#34; Damagecalculator.effectiveness [256]&#34;没有意义。你没有在这里定义或指定任何东西。我认为这就是编译器抱怨的原因。您正在使用错误的数组。只需使用一个简单的整数来设置效果。如果您希望在此特定数字处设置有效性,则应使用枚举器。
答案 2 :(得分:0)
如果您为BattleProcessor
课程链接的代码实际上大部分都是我看到的,那么您可以
利用其EffectivenessToPhrase()
方法向其传递足够高的effectiveness
参数
string effectivenessToPhrase = BattleProcessor.EffectivenessToPhrase(7);
这只会影响 ToPrhase 输出
更改Effectiveness[]
值以模仿更高的索引:
DamageCalculator.Effectiveness[4]=256;
DamageCalculator.Effectiveness[5]=256;
这会影响使用DamageCalculator.Effectiveness
然后,一旦完成任务,您必须将这些值恢复为原始值(分别为96和160)