鸑鷟67 发表于 2022-9-25 16:32:16

【XS脚本使用例】数组的三个应用实例

本帖最后由 cly806 于 2024-2-5 01:51 编辑

数组:大规模处理数据的必备神器观前提示:本文是为已经对XS脚本有一定认识的地图作者所写的,如果要了解XS脚本的基础知识,建议阅读下面所列的两部教程,如果您对xs的运用已经比较熟练,可以跳过。第一部:XS脚本指南 + 4则实用函数作者:@newtonerdai (以下简称桶哥)此文简明扼要,而且可以将暂时不看的部分收折起来,适合作为参考书、工具书,但措辞比较晦涩,而且作者创作时似乎默认读者们对地编、资源等基础知识有所了解,阅读起来有一定门槛。建议先读一读试试,如果感觉读不懂,请看下一个。第二部:B站专栏《冰话XS》作者@cly0806此专栏内容比上面的那个明显详实很多,而且加入了对一些基础知识的讲解,或许更适合零基础人士入门,但我只看了其中两篇半,感觉深受震撼,怎么会有写的这么好的神文。而且容我吐槽一句,里面王冰冰照片实在太多了,不过我超喜欢,我的心永远是冰冰的。
另外,有必要指出一个重要的问题:像桶哥教程里那样,直接创建一个全局变量,并将一个数组赋值给它的做法,会引起游戏报错,也就是说,不能写成下面这种形式:int [变量名] = xsArrayCreateInt([数组规模],[默认数据],"[数组名称]");事实上,创建全局变量时必须严格地填一个符合要求的值,比如你可以写int [变量名] = 1;
但不能写int [变量名] = xsTriggerVariable(0);即使触发变量0的值就是1。但本地变量则没有这种要求,如果你在一条规则里创建一个本地变量,然后直接将一个数组赋值给它,是可以的。原因不明,暂且理解为全局变量更娇贵吧。
创建全局变量数组时,应该先在外面创建一个全局变量,然后另起一条规则,在这个规则里把数组赋值给它。
这个故事告诉我们,绝知此事要躬行,不要变成像桶哥一样的云玩家(敲黑板)。
以下是正片,下面的xs文件里包含了三个与数组有关的脚本,体现了数组的两种玩法——大规模处理数据和精确读取数据。

鸑鷟67 发表于 2022-9-25 16:32:34

本帖最后由 鸑鷟67 于 2022-11-21 14:05 编辑

二楼用于补充答疑。
2022.11.21:

关于嵌套数组,如果你创建了一系列按一定顺序排列的数组,你可以再创建一个int类数组,然后将前述一系列数组的ID用xsArraySetInt(x,x,x)一个个填入新的int类数组中。
举例来说,你创建了10个Float类数组用来记录10个英雄的各项属性(以下简称“英雄数组_X”),当你想读取某个英雄的某项属性时怎么办呢?你可以先创建一个Int类数组(以下简称“英雄总表”),然后写10条:

xsArraySetInt(英雄总表,X,英雄数组_X);

如果你想读取7号英雄的13号属性,就可以这样写:

xsArrayGetFloat(xsArrayGetInt(英雄总表,9),13);

2022.10.21:

先前的附件有一处严重错误导致它实际上不能运行,现已修改。
利用xsEnableRule启用一段代码时,它不会立刻启动,而是会在系统遍历整个脚本一次,再次循环到那段被启用的代码时才启动,所以如果想在一段代码中间调用另一段代码,你应该把被调用的那段写成void,而非一个inactive的rule。






cly806 发表于 2022-9-26 01:01:13

写的非常好,但是门槛太高了,数组的运用为什么一直推广不开,原因他跟规则rule等其他功能绑定使用,属于比较间接的功能。而且这些功能不是不能用而是使用太过复杂(或者不是复杂吧,只是兜兜转转绕好几个圈才能使用的,单纯的rule相对还好一点,数组就比较绕了,楼主可以研究下向量的使用,估计跟数组情况类似,非常的不直接)我很认真看完了整个文档,只能说必须是成体系的运用,环环相扣差一丁半点都不行。其次新桶那个不算云吧,他不过是做个搬运工然后做点翻译而已。所以这里说他是云玩家我觉得不是所有人都有机会时间对所有的东西进行细致的测试,这里有点求全责备的意思。
还有我最后想说的是柠檬水如果没有柠檬,还能做的出柠檬水么?中国人若是丢失了对龙的图腾崇拜,还能叫龙的传人么?

鸑鷟67 发表于 2022-9-26 15:12:05

本帖最后由 cly806 于 2023-7-7 03:47 编辑

cly806 发表于 2022-9-26 01:01
写的非常好,但是门槛太高了,数组的运用为什么一直推广不开,原因他跟规则rule等其他功能绑定使用,属于比 ...
桶哥的云玩家之名是大叔御赐的,我调侃一下作为调味罢了,别在意,就算桶哥本人看见了也不会跟我计较这个的。
使用数组的门槛高是我一开始就说了的,而且最重要的是,绝大多数人——甚至可以说目前除我以外的决定版战役作者——都没有这个需求,所以我写这个与其说是想教别人,倒不如说是给自己当备忘录。
哦当然,对别人有用的可能性也是存在的,那就是多年后某个像我一样无聊地搞出一大堆需要处理的数据的后来人可以不用再把轮子的造法研究一遍。

至于你说“必须环环相扣”……脚本这东西不就是环环相扣才能用吗?除非只是用来制造能同时在靶场和城堡里出的兵种……




cly806 发表于 2022-9-27 00:48:53

鸑鷟67 发表于 2022-9-26 15:12
桶哥的云玩家之名是大叔御赐的,我调侃一下作为调味罢了,别在意,就算桶哥本人看见了也不会跟我计较这个 ...

环环相扣我觉得你误解我意思了,我只是感叹他像链条一样精密的扣在一起,当然也为以后如果写作讲解这部分积累素材和思路。有些中等复杂的并不需要如此庞大缜密的逻辑链来编织,属性修改那是最最最基础的部分了。
至于最后那里,日语说老实话跟我这一整段时间研究日本历史文化是紧密相连的,并不是什么忘不忘本媚不媚日。你只关注前半句,而我,比喻什么其实已经很明确了
页: [1]
查看完整版本: 【XS脚本使用例】数组的三个应用实例