“TrigEditPlus”的版本间的差异
(未显示同一用户的14个中间版本) | |||
第4行: | 第4行: | ||
TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。 | TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。 | ||
TEP可以将地图中已有的触发以lua代码的形式呈现出来,也可以通过编写lua代码来修改地图中的触发或向地图中加入新的触发。 | |||
推荐的下载版本为[https://github.com/armoha armoha]大神修改过的0.88版,详见[[TrigEditPlus#.E4.B8.8B.E8.BD.BD|下载]] | |||
第14行: | 第17行: | ||
== 下载 == | == 下载 == | ||
=== 方式一: === | |||
直接去Armoha的Github下载: | |||
https://github.com/armoha/TrigEditPlus/releases | |||
下载最新版的release中的TrigEditPlus.sdp文件即可。为区分不同版本的TEP,下载之后可自行修改TrigEditPlus.sdp的文件名,如修改为TrigEditPlus_armoha_2021-06-01.sdp。修改文件名不影响其功能。 | |||
=== 方式二: === | |||
在工具箱内下载(不保证为最新版) | |||
[https://www.vupyll.com/archives/maptools 点我进入星际制图工具箱] | [https://www.vupyll.com/archives/maptools 点我进入星际制图工具箱] | ||
在工具箱中找到TrigEditPlus,点击“点我下载”即可下载,百度网盘提取码为qwer | 在工具箱中找到TrigEditPlus,点击“点我下载”即可下载,百度网盘提取码为qwer | ||
下载之后解压,会出来一个 拓展名为sdp的文件 | |||
== 使用方法 == | == 使用方法 == | ||
将sdp文件复制粘贴到你的scmd的安装路径里面的plugins文件夹中。本教程使用的地图编辑器是最新版[[SCMD|SCMD2020-06-24]],如图所示 | |||
[ | [[文件:P01.png]] | ||
[[文件:Put TEP in folder.png]] | |||
然后使用最新版scmd随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。 | |||
[[文件:Open TEP in scmd.png]] | |||
此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。 | 此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。 | ||
[ | [[文件:P05 re.png]] | ||
点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。 | 点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。 | ||
第47行: | 第56行: | ||
你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。 | 你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。 | ||
注意!该TEP版本有一个特点:TEP代码界面写的代码在编译成功后,当你退出这个界面之后再重新打开这个界面时,你看到的将是编译好的结果(一堆Trigger),而不是你的源代码!所以强烈建议在另外的文本编辑器内写好全部代码,最后直接把全部代码复制粘贴到TEP代码编辑界面内,然后直接编译保存。 | |||
而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0. | 而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0.087版本为例,并且只有此版本可以完美解决中文字符显示问题,所以关于其他版本TEP的特性我就不做赘述。 | ||
举一个最简单的例子: | 举一个最简单的例子: | ||
第55行: | 第64行: | ||
新建一张空地图,打开TEP代码界面,输入如下代码 | 新建一张空地图,打开TEP代码界面,输入如下代码 | ||
<source lang="lua"> | |||
for x = 1, 5 do | for x = 1, 5 do | ||
Trigger { | |||
players = {P1}, | |||
conditions = { | |||
Always(); | |||
}, | |||
actions = { | |||
SetResources(P1, Add, x, Ore); | |||
}, | |||
} | |||
end | |||
</source> | |||
[[文件:P06 re.png]] | |||
然后按Ctrl+S保存,然后关掉窗口再打开,你会看到: | 然后按Ctrl+S保存,然后关掉窗口再打开,你会看到: | ||
[ | [[文件:P07 re.png]] | ||
可以看到,代码被编译成了5个触发,储存在了地图中。并且再次打开TEP后,TEP将这5个触发以lua代码的形式呈现了出来。当然,你没有机会再看到源代码了。 | 可以看到,代码被编译成了5个触发,储存在了地图中。并且再次打开TEP后,TEP将这5个触发以lua代码的形式呈现了出来。当然,你没有机会再看到源代码了。 | ||
第93行: | 第96行: | ||
在平时我们写代码的时候,一般会将“代码的运行结果”理解为代码中print出来的内容。毕竟代码的运行过程相当于计算机内部的操作,而最终我们能看到的只有print出来的部分。比如以下lua代码: | 在平时我们写代码的时候,一般会将“代码的运行结果”理解为代码中print出来的内容。毕竟代码的运行过程相当于计算机内部的操作,而最终我们能看到的只有print出来的部分。比如以下lua代码: | ||
<source lang="lua"> | |||
x = 1 | x = 1 | ||
y = x^2 + 2*x | y = x^2 + 2*x | ||
print(y) | print(y) | ||
</source> | |||
该代码的运行结果(输出)为 | 该代码的运行结果(输出)为 | ||
<source lang="lua"> | |||
3 | 3 | ||
</source> | |||
解释: | 解释: | ||
第117行: | 第123行: | ||
再看这个例子: | 再看这个例子: | ||
<source lang="lua"> | |||
x = 1 | x = 1 | ||
y = x^2 + 2*x | y = x^2 + 2*x | ||
</source> | |||
该代码的运行结果(输出)为:什么都没有 | 该代码的运行结果(输出)为:什么都没有 | ||
第135行: | 第142行: | ||
在打开scmd中的TEP窗口,在里面写代码: | 在打开scmd中的TEP窗口,在里面写代码: | ||
<source lang="lua"> | |||
x = 1 | x = 1 | ||
y = x^2 + 2*x | y = x^2 + 2*x | ||
print(y) | print(y) | ||
</source> | |||
然后编译保存,再打开会发现什么都没有。这就是说,这一串代码在TEP中执行之后并没有“运行结果” | 然后编译保存,再打开会发现什么都没有。这就是说,这一串代码在TEP中执行之后并没有“运行结果” | ||
第145行: | 第152行: | ||
再举例: | 再举例: | ||
<source lang="lua"> | |||
a = P1 | a = P1 | ||
b = add | b = add | ||
x = 1 | x = 1 | ||
y = x^2 + 2*x | y = x^2 + 2*x | ||
Trigger { | Trigger { | ||
players = {a}, | |||
players = {a}, | conditions = { | ||
Always(); | |||
conditions = { | }, | ||
actions = { | |||
Always(); | SetResources(a, b, y, 0); | ||
CreateUnit(1, 2, 64, 1); | |||
}, | }, | ||
actions = { | |||
SetResources(a, b, y, 0); | |||
CreateUnit(1, 2, 64, 1); | |||
}, | |||
} | } | ||
</source> | |||
这个代码在TEP中的运行结果就是生成一个触发,具体生成什么触发请自己实践。生成的这个触发就可以视为这个代码在TEP中的运行结果。我们可以看到,代码中的“Trigger”部分就好比平常代码中的print,决定着代码的最终输出结果。TEP编译器的作用就是运行每一行代码,然后将运行过程中遇到的所有Trigger作为结果来输出。输出结果自然就是一堆触发。 | 这个代码在TEP中的运行结果就是生成一个触发,具体生成什么触发请自己实践。生成的这个触发就可以视为这个代码在TEP中的运行结果。我们可以看到,代码中的“Trigger”部分就好比平常代码中的print,决定着代码的最终输出结果。TEP编译器的作用就是运行每一行代码,然后将运行过程中遇到的所有Trigger作为结果来输出。输出结果自然就是一堆触发。 |
2022年4月24日 (日) 13:26的最新版本
简介
scmd的trigger editor在使用体验上有诸多不便之处,比如无法把一个地图的触发直接复制到另一个地图上、无法批量写触发、可读性较差、触发量较大时很难查找与定位等等。
TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。
TEP可以将地图中已有的触发以lua代码的形式呈现出来,也可以通过编写lua代码来修改地图中的触发或向地图中加入新的触发。
推荐的下载版本为armoha大神修改过的0.88版,详见下载
TEP原作者是Trigger King大神,他的github链接:
这里面有一些旧版的TEP
下载
方式一:
直接去Armoha的Github下载:
https://github.com/armoha/TrigEditPlus/releases
下载最新版的release中的TrigEditPlus.sdp文件即可。为区分不同版本的TEP,下载之后可自行修改TrigEditPlus.sdp的文件名,如修改为TrigEditPlus_armoha_2021-06-01.sdp。修改文件名不影响其功能。
方式二:
在工具箱内下载(不保证为最新版)
在工具箱中找到TrigEditPlus,点击“点我下载”即可下载,百度网盘提取码为qwer
下载之后解压,会出来一个 拓展名为sdp的文件
使用方法
将sdp文件复制粘贴到你的scmd的安装路径里面的plugins文件夹中。本教程使用的地图编辑器是最新版SCMD2020-06-24,如图所示
然后使用最新版scmd随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。
此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。
点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。
你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。
注意!该TEP版本有一个特点:TEP代码界面写的代码在编译成功后,当你退出这个界面之后再重新打开这个界面时,你看到的将是编译好的结果(一堆Trigger),而不是你的源代码!所以强烈建议在另外的文本编辑器内写好全部代码,最后直接把全部代码复制粘贴到TEP代码编辑界面内,然后直接编译保存。
而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0.087版本为例,并且只有此版本可以完美解决中文字符显示问题,所以关于其他版本TEP的特性我就不做赘述。
举一个最简单的例子:
新建一张空地图,打开TEP代码界面,输入如下代码
for x = 1, 5 do Trigger { players = {P1}, conditions = { Always(); }, actions = { SetResources(P1, Add, x, Ore); }, } end
然后按Ctrl+S保存,然后关掉窗口再打开,你会看到:
可以看到,代码被编译成了5个触发,储存在了地图中。并且再次打开TEP后,TEP将这5个触发以lua代码的形式呈现了出来。当然,你没有机会再看到源代码了。
下面介绍一下TEP的工作原理:
TEP的本质是一个lua代码编译器,它可以将lua代码编译为星际触发,并仍以lua代码的形式呈现这些触发。
我们先来谈一谈一般情况下的代码:
在平时我们写代码的时候,一般会将“代码的运行结果”理解为代码中print出来的内容。毕竟代码的运行过程相当于计算机内部的操作,而最终我们能看到的只有print出来的部分。比如以下lua代码:
x = 1 y = x^2 + 2*x print(y)
该代码的运行结果(输出)为
3
解释:
编译器首先阅读第一行代码,在计算机内部创建一个变量x,赋值为1
然后阅读第二行代码,将新变量y赋值为x的平方加2倍的x(计算结果为3),故将y赋值为3
最后阅读第三行代码,将y的值print出来。
这三行代码非常容易理解,我相信,即使是从来没有学过编程的外行也能一眼看出它们的含义。
编译器阅读代码、运行代码的过程是在计算机内部进行的,我们看不到。我们只能看到“3”这个结果。
再看这个例子:
x = 1 y = x^2 + 2*x
该代码的运行结果(输出)为:什么都没有
解释:
编译器阅读前两行代码的过程同上,在计算机内部创建了x和y两个变量并赋值,然而由于没有print,所以我们看不到任何东西呈现出来。我们可以说,代码写得再天花乱坠,只要没有“print”,这个代码就可以被视为没有运行结果。相当于内部黑箱操作一通,最后什么东西也没让我们看到。
下面我们来谈一谈TEP内的代码:
TEP的“运行结果”不是print出来的内容,而是一个一个的形如Trigger{...}的东西。
举例:
在打开scmd中的TEP窗口,在里面写代码:
x = 1 y = x^2 + 2*x print(y)
然后编译保存,再打开会发现什么都没有。这就是说,这一串代码在TEP中执行之后并没有“运行结果”
再举例:
a = P1 b = add x = 1 y = x^2 + 2*x Trigger { players = {a}, conditions = { Always(); }, actions = { SetResources(a, b, y, 0); CreateUnit(1, 2, 64, 1); }, }
这个代码在TEP中的运行结果就是生成一个触发,具体生成什么触发请自己实践。生成的这个触发就可以视为这个代码在TEP中的运行结果。我们可以看到,代码中的“Trigger”部分就好比平常代码中的print,决定着代码的最终输出结果。TEP编译器的作用就是运行每一行代码,然后将运行过程中遇到的所有Trigger作为结果来输出。输出结果自然就是一堆触发。
上面的a=P1和b=add这两行代码,以及CreateUnit括号内的数字,会在之后的教程做详细解释。
注:lua代码中的变量名不区分大小写,但是table中的key名区分大小写