欢迎光临散文网 会员登陆 & 注册

【冰话XS】012:孰外孰内? 论XSの次元縮小の打撃

2022-07-14 03:12 作者:八重冰冰姬-丽颖明兰  | 我要投稿

☆※冰の引言※☆  

上文讲述了在 XS 函数中最复杂的函数 xsEffectAmount 函数的函数体各参数分析,基本勾勒出这个函数大致的轮廓,为以后详细全方位解析该函数奠定坚实基础;还以全新的角度另辟蹊径讲解了DPS这一帝国中相对复杂的概念以及不断从DPS各个影响因素着手进行逻辑推理,最终探究得出如何才是真正设计出适合驻扎的单位,有条不紊地逐步接近最后结果。

本节将聚焦 XS 函数对外挂 XS 文件的使用并点评其与内置触发的优劣性盘点,最后如何对修改属性这些反人类的触发效果之降维打击,从修改单位属性的三种途径出发,谈谈对目前触发界现状以及未来如何结合时代做出顺势而为的调整方向。不多赘言,正片开场!

☆※本节の紹介※☆ 

☆※外挂 XS 文件的细节要求※☆ 

***外挂 XS 文件的摆放路径***

外挂 XS 文件是 XS 函数的重要实现方式。(p.s:不可能单纯使用外挂 XS文件实现任何功能,外挂 XS 文件必须要与内置编辑器的 XS 脚本调用的条件/效果相结合使用)有别于其他触发条件效果的,外挂 XS 文件可以突破很多内置编辑器函数不能实现的种种限制,也是未来做多函数多关卡共享以及跨关继承联动的重要枢纽,外挂 XS 文件对于摆放路径有非常严格的要求,下面就来了解一下这些既定的格式规范。

1、[本地放置路径]:

本地放置路径有两种:一种是个人数据文件夹,另一种则是游戏根目录

个人数据文件夹路径一般为:C:\Users\<用户名>\Games\Age of Empires 2 DE\<长串数字>\resources\_common\xs\自定义名.xs

游戏根目录路径一般为:C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\ resources\_common\xs\自定义名.xs

2、[模组放置路径]:(最为重要!)

模组放置路径一般为:模组名\resources\_common\xs\自定义名.xs

☆※编辑器内如何设置读取外挂文件※☆ 

地图选项卡中,有一个专门的[脚本文件名]输入栏:在这里写上你要调用的.xs文件名(不含拓展名“.xs”, 其实就是前面所指的自定义名),如下图所示:

注意事项

1.输入栏最多写21个字符(中文/英文字符都只算1个字符)。

2.只有这里写上对应的外挂 XS 文件的文件名,编辑器才会去计算机里读取对应的文件,所以这个步骤非常关键,极其容易被遗漏!

3.系统读取顺序:模组放置路径>个人数据文件夹>游戏根目录

☆※几个官方 XS 文件の使用与插件辅助※☆ 

官方的几个 XS 文件共3个,分布在个人数据文件夹和游戏根目录下,以下对官方 XS 文件的实际作用作分别叙述。

  • 1、default0.xs:位置在个人数据文件夹。跟default0.aoe2scenario类似,这个 xs 文件作为临时存储各种自定义xs函数以及表达式的文件。当你在 [条件-XS脚本 (仅定义函数)]  [效果-XS脚本 (定义/调用执行)] 里编写函数文本,在点击任意触发/条件/效果后,编辑器会检查语法错误,语法无误则不会出现弹窗,但只有内置编辑器书写的有函数体的完整函数(仅函数名调用也不会显示)才会显示在default0.xs里面。不能在这里编写任何内容,因为这里的内容会根据不同场景实时动态更新,一定会被覆盖掉的。

  • 2、Constants.xs:位置在游戏根目录。作用就是官方定义的通用常数文件。这里定义了整个游戏都能用的所有常数,你可在任意 xs 函数里调用这些常数。理解这些官方常数对设计者书写函数有很大裨益,有能力的设计者和玩家可以尝试阅读。(但不推荐使用官方常数名,推荐记忆数字,后文会讲原因)

  • 3、x256tech.xs:位置在游戏根目录。作用顾名思义即是256倍科技的官方调用书写。这里官方为了实现256倍科技的效果,如下书写函数:

    先是定义一个函数名叫main的函数,写一个for循环对所有科技 ID 进行遍历,然后使用"修改科技"模式(第一参数),对所有科技(第二参数)启用科技堆叠(第三参数,第四参数设置为1),然后作用于全体玩家(第五参数)。

俗话说:好鞍配好马。使用外置 XS 文件进行函数编辑时,使用合适的编辑器和好的插件对设计者来说能起到事半功倍的效果。在这里文本代码编辑器首推VSCode(Visual Studio Code),首先占用内存小,界面简洁友好,最重要的是配有专属于 XS 和 AI 的好用插件。关于辅助编写 XS 函数的插件,请大家安装AoE2 XS Scripting这款插件,函数的自动补全对于刚入门的小白能促进他们迅速熟悉掌握XS函数书写的格式规范以及养成好的函数书写习惯。

☆※聊聊注释和官方常数及数字模式※☆

所有程序代码都允许有注释,XS作为C++的变种语言,自然也不例外。XS的注释风格大体跟C++相同,但因为触发脚本调用内置框有256字符上限限制,寸土寸金的脚本调用框中存在注释,显然是浪费空间,毫无正面意义。故如纯粹使用内置函数书写或使用脚本调用相关自定义函数时应严禁使用注释,以免浪费空间。

但花开两朵,各表一枝,外挂 XS 文件使 XS 函数的使用摆脱了256字符上限限制的桎梏,添加注释除了有助于日常维护外挂 XS 文件,也能增加代码的健壮性与可读性,起到解释说明的作用,实是一大利好。因此注释仅限于在外挂 XS 文件中使用。写注释的格式非常简单:"//注释内容"

前文已提及几乎所有的通用常数都能在Constants.xs中找到对应的位置,VsCode插件也有对应的函数补全功能,看上去直接使用这些官方的预定常数名貌似很方便,但其实不然。这些官方的预定常数名上至属性模式,下至资源名称事无巨细应有尽有,但是这些英文名称无不是冗长晦涩,设计者难以形成有效记忆,造成根本记不住常数的名字,更为严重的是游戏对于这些常数要求是精确匹配才能正确识别,多一个字符抑或是少一个字符都会造成效果失效或直接游戏弹窗报错,有鉴于此,使用这些常数对应的数字,既能节省字符(官方预定常数占用大量字符)又能把容错率拉到最高,把可能出错的风险降到最低,毕竟越长的常数名会造成越大的出错风险。

综上分析,使用数字模式进行书写简单易记省空间,容错率高,针对设计者来说是最省时高效之法习惯于使用数字模式并基本熟悉 XS 相关函数结构之后,你会发现任何表达式在你书写的时候都能信手拈来,所有以前看上去好像很难的都突然变得简单无比了。

☆※外挂 XS 文件与纯内置的权衡对比※☆ 

使用外挂 XS 文件与纯内置编辑器进行 XS 函数书写,这两种方法都是可行的。两者之间如何选择呢?请看两者的优劣大盘点。

**外挂 XS 文件**

优势

  1. 无256字符限制。函数任意长度无拘束,再也不用为了省字符空间而减少使用空行或缩进,可以正常按照C++规范进行书写代码,代码的可读性可以得到很好保证。

  2. 易维护性。任何的函数修改均可以在代码编辑器中全部完成,毋须打开游戏和地图编辑,随时维护,方便又快捷。

  3. 可使用代码补全提示插件。通过VSCode的插件,快速补全对应函数,还有函数书写参数提示,零基础快速上手毫无压力。

  4. 非常适合定义函数,省触发条件效果所有的函数定义都可以通过外挂 XS 文件解决,触发器内的 XS 脚本调用只需负责调用对应函数即可。

  5. 某些特殊功能只能使用外挂 XS 文件才能实现。如果有多关共用函数,成就跨关结算(以后会讲)等特殊需求的时候,只能使用外挂 XS 文件。

  6. 可以使用main主函数,该函数置于外挂 XS 文件中可毋须调用,自动运行,可作为一些单位或条件的初始化设定,非常好用。

不足

  • 保密性较差,非常容易被篡改。便于维护这点是个双刃剑,既方便了设计者自身,也为那些喜欢乱改作者东西的玩家或企图篡改作者的辛勤劳动成果然后盗窃自行发布的奸邪之人提供了可趁之机,这种类型的玩家会乱改作者设置好的参数,大大改变了游戏的可玩性、平衡性,使作者辛苦构思的游戏效果大打折扣。当然有经验的作者可以使用一些技术手段让篡改者自食其果,这是后话。具体如何设置防篡改防盗的保密方法,以下内容涉密,不予奉告!

**纯内置编辑器**

优势

  • 保密性强,篡改难度大,更好保护原作者的工作成果除非将战役拆包成场景再在触发中修改外,不可能在游戏之外修改任何参数,大大提高了篡改的成本。

不足

  1. 有256字符限制一个 XS 脚本调用框上限256字符,代码的可读性很差,还要为了省字符空间精打细算,而且经常会出现一个函数因超字符数上限的原因写不完,导致需要分拆写成N个函数的奇葩情况。

  2. 维护较困难。除非使用特制的触发文本导入导出工具进行辅助定位或直接修改外,所有的修改都必须通过地图编辑器进行修改,维护时需要定位要修改的触发,遍历寻找非常费时费力,浪费大量宝贵时间,麻烦且耗时。

  3. 某些特殊功能纯内置编辑器无法实现。比如说遇到多关共用函数,成就跨关结算等特殊场合与需求时,就显得束手无策了,这时候就只能使用外挂 XS 文件解决问题了。

综上分析,大部分情况下外挂 XS 文件整体上而言使用效果上要明显优于纯内置编辑器的方案,保密性防篡改这个依然是一个重要而不可忽视的考量因素,目前大部分设计者 XS 函数都是走纯内置编辑器的路子,也没啥不好,只是说外挂 XS 文件一旦用起来定会让你爱不释手,此法应是一种至佳的上选之策

☆※属性修改の三足鼎立与孰去孰留※☆ 

纵览帝国时代2决定版中,关于属性修改,总共就三条路:改变物体__(Change Object  __)XS 脚本调用函数(Script Call)、和修改属性(Modify Attributes),可以说是三分天下,三足鼎立。总体而言按效果划分,分为两大类:独立化属性修改非独立化属性修

独立化属性修改主要指改变物体__(Change Object  __),这可以说是老版本唯一的属性修改之路,可以同单位 ID 物体修改不同的属性,也可以设定特定单位或者特定建筑修改相关属性,还能修改物体姿态、文明名称和玩家颜色等等,缺点就是属性修改范围比较狭窄,只能修改名字、修改攻击力、修改护甲、修改射程、修改HP、修改移速、修改图像大致这些,最大的问题莫过于使单位独立化,无法享受后续铁匠铺加成,当然决定版通过替换物体进行消除独立性,总归还是麻烦些。但是三条路中只有它是可以修改特定物体属性,所以它的特殊作用不可替代

非独立化属性修改就不止一条路了,修改属性和 XS 脚本调用函数都是可行之法,非独立化修改只能一个单位 ID 统一修改同类型相同数值的属性。前文已述,针对修改属性与 XS 脚本调用函数之间的具体细节,笔者已有详细说明,这里不多铺开陈述。这里简单提几点,从之前讨论两者的优缺点中提及修改属性的"几宗罪"以及秀到极致的反人类操作,到 XS 脚本调用函数的包罗万有精彩纷呈的特殊功能再结合本节所讲的 XS 文件的外引内联,可以说 XS 函数对修改属性真真确确从全方位对修改属性进行降维打击(次元縮小の打撃)。两者功能上有高度重叠的部分,而且 XS 函数青出于蓝而胜于蓝,那不就回到了本文开头所讲的同质化可替代性了吗?

但此话在某些人眼里却不是这么认为的。在他们眼中,修改属性在他们眼中就是方便,入门门槛低,所谓的对新手友好,即使是各种反人类的操作以及在攻防等方面官方的多次无情背刺,也无怨无悔正应了那句话:它虐你千百遍,你待他如初恋。他们就沉溺于这个乐不思属的温柔乡里,故步自封抱残守缺,总觉得这样得过且过就足够了, XS 那种玩意啊门槛太高了,还是洗洗睡吧,压根不愿意接受新的事物。还盛行一种什么老子当年打算盘打出原子弹,但有些人有超算都弄不出原子弹(白头山80后:你在内涵我?)的暴论,这些人的思维总是把事物简单对立起来,非黑即白,不左即右,就是因为现在有更好的条件更好的工具,为什么还要用当年那些老破旧呢?就好比问抗美援朝志愿军打美军为什么要用战术穿插,不用重火力直接火力压制一样,穷啊条件不允许啊。穷则战术穿插,达则给老子炸,有头发边个想做癞痢?所以啊差不多得了,你喜欢闭关锁国是你的自由,但是正如百八十年前壬寅立约一样,落后就要挨打也是你的自由。

目前触发界的现状,大概是极少一部分能相对熟练使用 XS 脚本调用,也有一部分开明的人因为实际需求开始接触并学习 XS 脚本调用,虽然处于刚起步的阶段,但日拱一卒功不唐捐,有总好过没有,而更大一部分人对笔者抱有偏见和嗤之以鼻的态度,甚至是表现出一种嘲笑的意味。笔者言尽于此:"上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道。"

☆※设计启思录※☆ 

对于一个场景设计者而言,结合时代做出顺势而为的调整应该是必修课。大江东去浪淘尽,时代车轮滚滚前,顽固守旧终湮灭,顺昌逆亡需谨记。在一个终身学习的时代,不管是在游戏中还是现实生活,拥抱未来,莫抱残守缺,长江后浪推前浪正是我们应该恪守的道与准则,过尽千帆,时间会给出答案,願诸君与笔者共勉。

☆※冰の小结※☆ 

本节主要叙述了外挂 XS 文件的具体使用办法及其注意事项,充分体现了 XS 函数的外引内联在游戏中的体现,最后简单浅谈了一下独立化属性修改与非独立化属性修改,并就目前一些现状做出小小针砭时弊的点评愚见。下面的几个篇章将对帝国时代2决定版中的200多个资源进行逐个面面观,精彩不容错过!

欲知后事如何,请听下回分解

私の心はいつも氷氷です 

Cly0806

07/13/2022


【冰话XS】012:孰外孰内? 论XSの次元縮小の打撃的评论 (共 条)

分享到微博请遵守国家法律