只有赋值、调用、自增、自减、等待和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以外的任何内容。这样做会破坏游戏的其他部分。话虽如此,如果由于这些情况而无法改变效果,请告诉我。我将……

只有赋值、调用、自增、自减、等待和new对象表达式

语句没有意义

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)