查看“TrigEditPlus”的源代码
←
TrigEditPlus
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 简介 == scmd的trigger editor在使用体验上有诸多不便之处,比如无法把一个地图的触发直接复制到另一个地图上、无法批量写触发、可读性较差、触发量较大时很难查找与定位等等。 TrigEditPlus(简称TEP)是一个scmd插件,它可以将触发全部代码化,可以批量写触发,自由复制粘贴、轻松查找定位,是编辑高级地图时必不可少的利器。 推荐的下载版本为armoha大神修改过的0.085版,本教程使用的也正是此版本: TEP原作者是Trigger King大神,他的github链接: https://github.com/phu54321 这里面有一些旧版的TEP == 下载 == 推荐下载的是armoha大神于2021.06.01更新的版本 [https://www.vupyll.com/archives/maptools 点我进入星际制图工具箱] 在工具箱中找到TrigEditPlus,点击“点我下载”即可下载,百度网盘提取码为qwer == 使用方法 == 下载之后解压,会出来一个 拓展名为sdp的文件,将此文件复制粘贴到你的scmd的安装路径里面的plugins文件夹中。本教程使用的是最新版[[SCMD|SCMD2020-06-24]],如图所示 [figure01] [figure02] 此时打开SCMD2020-06-24,会弹出如下对话框: [figure03] 无视他,按确定即可。 (注:这个对话框其实写的是韩文“[베타]버그가 많이 있을겁니다”,由于编码问题被显示成了中文乱码。翻译:“[测试版]可能会有bug”) 然后随便打开一个星际地图,在菜单的Triggers里面就会有TrigEdit++这个选项了,如下图所示。如果你没有看到这个选项,说明你的插件可能没放对地方,你可能拥有多个scmd版本,你要重新确定你把插件放在了SCMD2020-06-24的plugins文件夹中。 [figure04] 此时点击TrigEdit++,就可进入TEP的代码界面。如果你打开的地图内含有已经写好的触发,那么你会看到地图中已有的触发被转化为了lua代码呈现出来,如下图所示。 [figure05] 点“-”可以折叠相应代码,点“+”可以展开已折叠的代码。你也点选择左上角的View - Fold All或者Unfold All来折叠全部代码或者展开全部代码。 你可以在这里面直接写代码,写完代码之后可以按Ctrl+S保存并编译。如果你的代码有误,就会报错,无法保存。保存成功之后即可关掉这个窗口,你打开Triggers - Classic Map Triggers就可以看到编译完成后的触发。 注意!该TEP版本有一个特点:TEP代码界面写的代码在编译成功后,当你退出这个界面之后再重新打开这个界面时,你看到的将是编译好的结果(一堆Trigger),而不是你的源代码!所以我强烈建议你在另外的文本编辑器内写好全部代码,最后直接把全部代码复制粘贴到TEP代码编辑界面内,然后直接编译保存。 而其他版本的TEP可能会依然保存源代码,并且会在触发列表里面自动加一个很奇怪的SetDeath触发。由于本教程是以armoha修改的TEP0.085版本为例,并且只有此版本可以完美解决中文字符显示问题,所以关于其他版本TEP的特性我就不做赘述,若你想用其他版本,就请自己摸索。 举一个最简单的例子: 新建一张空地图,打开TEP代码界面,输入如下代码 for x = 1, 5 do Trigger { players = {P1}, conditions = { Always(); }, actions = { SetResources(P1, Add, x, Ore); }, } end [figure06] 然后按Ctrl+S保存,然后关掉窗口再打开,你会看到: [figure07] 可以看到,代码被编译成了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名区分大小写
返回至“
TrigEditPlus
”。
导航菜单
个人工具
登录
名字空间
页面
讨论
变体
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
分类目录
常见问题
工作笔记
制图工具
所有页面
工具
链入页面
相关更改
特殊页面
页面信息