只有赋值、调用、递增、递减、等待和新对象表达式
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# 三元运算符中给出错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句