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

Posted

技术标签:

【中文标题】只有赋值、调用、递增、递减、等待和新对象表达式【英文标题】:Only assignment, call, increment, decrement, await, and new object expressions 【发布时间】:2017-02-24 15:29:46 【问题描述】:

我昨天发布了一个关于这段代码的问题,但我做到了......真的很糟糕。从那以后,我和一个非常了解编码的朋友交谈并尝试了一些事情,但我真的遇到了这个问题。我尝试查看其他相同协议的问题,但他们的解决方案都不适合我......

我想要做的是覆盖“有效性”。服务器将有效性设为 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;
                     
                 
         
    

如 tile 中所述,当我尝试编译它时,我得到了错误

可以用作语句。

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 的完整代码,如果你需要的话。

值得注意的是,我可以将 BeforeMoveHits 从 void 更改,并且我可以将 Main 更改为除部分之外的任何内容。这样做会破坏游戏的其他部分。话虽如此,如果由于这些情况而无法改变有效性,请告诉我。我会……试着想出别的办法来做我想做的事。

【问题讨论】:

【参考方案1】:

声明没有意义

DamageCalculator.Effectiveness[256];

此语句返回一个您根本没有使用的值。 您至少需要将返回的值保存在某个变量中以供以后使用。或者你为什么真的这样做。

以下语句将解决编译时错误。

var temp = DamageCalculator.Effectiveness[256];

顺便说一句

DamageCalculator.Effectiveness[256];

使代码可以编译后会抛出异常。 例外是IndexOutOfRangeException 并且当时通过以下语句解决这个问题

DamageCalculator.Effectiveness[6]

【讨论】:

不幸的是,这不起作用。它仍然使有效性小于 6。不过,谢谢你告诉我超出范围的事情和没有意义的事情!【参考方案2】:

您的说法“Damagecalculator.effectiveness[256]”毫无意义。你没有在这里定义或分配任何东西。我认为这就是编译器抱怨的原因。您使用错误的数组。只需使用一个简单的整数来设置有效性。如果您希望将有效性设置在这个特定的数字上,您应该使用枚举器。

【讨论】:

对不起,我是新手——整数是什么意思?你的意思是“int有效性”之类的东西吗?因为如果是这样,那是行不通的。我已经尝试过并用尽了它。而且,“使用枚举器”是什么意思?再说一次,对不起,我真的是 C# 新手... @Foxwells 是的,我的意思是使用 int 有效性。然后将有效性设置为移动的有效性:有效性 = 256;这是有关枚举器的文档:link int 有效性不起作用。战斗日志仍然称该招式不是很有效。谢谢你的链接,顺便说一句。【参考方案3】:

如果您为BattleProcessor 类链接的代码实际上大部分是我看到的注释,那么您可以

利用其EffectivenessToPhrase() 方法向其传递足够高的effectiveness 参数

string effectivenessToPhrase =  BattleProcessor.EffectivenessToPhrase(7);

这只会影响 ToPrhase 输出

更改Effectiveness[] 值以模仿更高的索​​引:

DamageCalculator.Effectiveness[4]=256;
DamageCalculator.Effectiveness[5]=256;

这将影响将使用DamageCalculator.Effectiveness的任何代码

那么您必须在任务完成后立即将这些值恢复为原始值(分别为 96 和 160)

【讨论】:

问题是,我无法编辑这些文件。这些是游戏创始人保存的服务器文件。我只能访问一小部分编码。也就是说......有没有办法让它说它的有效性是 7,然后只做一个伤害乘数来获得 7 有效性的影响? 我的答案解决方案不需要对这些类进行任何编辑,因为EffectivenessToPhrase() 方法和Effectiveness[] 数组都被声明为Public。因此,您只需在 BeforeMoveHits() 方法中输入这些代码。 嗯...更改伤害计算器似乎有效,但有效性短语没有做任何事情。它仍然说此举不是很有效。 因为,正如您现在指定的那样,您需要 “伤害乘数以获得 7 效力的影响”,那么我的答案的 change Effectiveness[] values 部分应该可以(和警告也适用!)。这样,您将影响BattleProcessor 类中的dmg *= DamageCalculator.Effectiveness[effectiveness]; 语句,而对于后续的dmg *= setup.Multiplier 语句,您还必须访问setup.Multiplier 属性 不不,我/不/需要提高伤害乘数。这很好用。我的问题是,在战斗日志中,它说有效的短语,它仍然显示为不是很有效prntscr.com/cu2b50 -- 除非我误解了你所说的?你让我有点迷失了。

以上是关于只有赋值、调用、递增、递减、等待和新对象表达式的主要内容,如果未能解决你的问题,请参考以下文章

error CS0201: 只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句c#

unity error CS0201: 只有赋值、调用、递增、递减、等待和新对象表达式可以作为语句使用

C#错误CS0201:只有赋值、调用、递增、递减和新对象表达式可以作为语句使用

在 C# 三元运算符中给出错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句

在C#三元运算符给出错误:只有赋值,调用,递增,递减和新对象表达式可用作语句

在cshtml文件中的C#块代码之间插入html标签