“TrigEditPlus”的版本间的差异

来自星际争霸重制版地图研究所
跳到导航 跳到搜索
 
(未显示同一用户的17个中间版本)
第4行: 第4行:
TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。
TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。


推荐的下载版本为armoha大神修改过的0.085版,本教程使用的也正是此版本:
TEP可以将地图中已有的触发以lua代码的形式呈现出来,也可以通过编写lua代码来修改地图中的触发或向地图中加入新的触发。
 
推荐的下载版本为[https://github.com/armoha armoha]大神修改过的0.88版,详见[[TrigEditPlus#.E4.B8.8B.E8.BD.BD|下载]]
 




TEP原作者是Trigger King大神,他的github链接:
TEP原作者是Trigger King大神,他的github链接:


<nowiki>https://github.com/phu54321</nowiki>
https://github.com/phu54321


这里面有一些旧版的TEP
这里面有一些旧版的TEP


== 下载 ==
== 下载 ==
推荐下载的是armoha大神于2021.06.01更新的版本
 
=== 方式一: ===
直接去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文件夹中。本教程使用的是最新版SCMD2020-06-24,如图所示
将sdp文件复制粘贴到你的scmd的安装路径里面的plugins文件夹中。本教程使用的地图编辑器是最新版[[SCMD|SCMD2020-06-24]],如图所示


[figure01]
[[文件:P01.png]]


[figure02]


此时打开SCMD2020-06-24,会弹出如下对话框:
[[文件:Put TEP in folder.png]]


[figure03]


=== 无视他,按确定即可。 ===
然后使用最新版scmd随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。
(注:这个对话框其实写的是韩文“[베타]버그가 많이 있을겁니다”,由于编码问题被显示成了中文乱码。翻译:“[测试版]可能会有bug”)


然后随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。
[[文件:Open TEP in scmd.png]]


[figure04]


此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。
此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。


[figure05]
[[文件:P05 re.png]]


点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。
点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。
第46行: 第56行:
你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。
你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。


注意!该TEP版本有一个特点:TEP代码界面写的代码在编译成功后,当你退出这个界面之后再重新打开这个界面时,你看到的将是编译好的结果(一堆Trigger),而不是你的源代码!所以我强烈建议你在另外的文本编辑器内写好全部代码,最后直接把全部代码复制粘贴到TEP代码编辑界面内,然后直接编译保存。
注意!该TEP版本有一个特点:TEP代码界面写的代码在编译成功后,当你退出这个界面之后再重新打开这个界面时,你看到的将是编译好的结果(一堆Trigger),而不是你的源代码!所以强烈建议在另外的文本编辑器内写好全部代码,最后直接把全部代码复制粘贴到TEP代码编辑界面内,然后直接编译保存。


而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0.085版本为例,并且只有此版本可以完美解决中文字符显示问题,所以关于其他版本TEP的特性我就不做赘述,若你想用其他版本,就请自己摸索。
而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0.087版本为例,并且只有此版本可以完美解决中文字符显示问题,所以关于其他版本TEP的特性我就不做赘述。


举一个最简单的例子:
举一个最简单的例子:
第54行: 第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>


Trigger {
[[文件:P06 re.png]]


players = {P1},
conditions = {
Always();
},
actions = {
SetResources(P1, Add, x, Ore);
},
}
end


[figure06]


然后按Ctrl+S保存,然后关掉窗口再打开,你会看到:
然后按Ctrl+S保存,然后关掉窗口再打开,你会看到:


[figure07]
[[文件:P07 re.png]]


可以看到,代码被编译成了5个触发,储存在了地图中。并且再次打开TEP后,TEP将这5个触发以lua代码的形式呈现了出来。当然,你没有机会再看到源代码了。
可以看到,代码被编译成了5个触发,储存在了地图中。并且再次打开TEP后,TEP将这5个触发以lua代码的形式呈现了出来。当然,你没有机会再看到源代码了。
第92行: 第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>


解释:
解释:
第116行: 第123行:
再看这个例子:
再看这个例子:


<source lang="lua">
x = 1
x = 1
y = x^2 + 2*x
y = x^2 + 2*x
</source>


该代码的运行结果(输出)为:什么都没有
该代码的运行结果(输出)为:什么都没有
第134行: 第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中执行之后并没有“运行结果”
第144行: 第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链接:

https://github.com/phu54321

这里面有一些旧版的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,如图所示

P01.png


Put TEP in folder.png


然后使用最新版scmd随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。

Open TEP in scmd.png


此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。

P05 re.png

点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的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

P06 re.png


然后按Ctrl+S保存,然后关掉窗口再打开,你会看到:

P07 re.png

可以看到,代码被编译成了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名区分大小写