三国群英2吧 关注:44,748贴子:1,005,650

【脚本基础教程】第一至三章:你好,世界 & 基础语法 & 控制流程

只看楼主收藏回复

一楼


IP属地:美国1楼2020-03-07 13:48回复
    预先说明:
    第一章是Hello World,旨在介绍基本的编译运行相关内容。建议各位感兴趣的读者自己实际操作一下,尤其是因为没有IDE,编译的过程会比“一键编译运行”要麻烦一些。
    第二至三章是语法的介绍。脚本的语法并不复杂,因此为兼顾初学者,保留了这部分的内容,但是相对于后面的章节而言比较简短。有编程基础的朋友可以阅读,当然也可以跳过;如果跳过的话,在第三章结束的地方有一段简短的说明,涵盖了一些三国2脚本的独特之处。


    IP属地:美国2楼2020-03-07 13:57
    收起回复
      2025-05-16 04:53:08
      广告
      前言
      三国2脚本指的是PAK包中Script文件夹下的两个字节码文件(即magic和system两个so文件)所使用的语言。目前,MOD制作者已经可以实现许多最初难以实现的功能,但如果需要修改武将技(包括自制新武将技和高质量地组合现有武将技),必须对so文件进行修改。然而,三国2脚本有自己独特的指令集,这就要求开发一套全新的修改工具。在@还要注册真不爽 (以下均称注册)等前辈的开发下,已经能够解读并编写so文件;为了解决直接编写汇编指令较为困难的问题,笔者在前人的基础上,编写了“三国2脚本伪代码编译器”工具,可以直接通过高级语言编写三国2脚本,并通过还要注册真不爽的汇编器编译到so文件。
      本文旨在为三国2脚本的编写提供说明。编写三国2脚本需要一定的编程基础,但限于时间和精力,本文并不打算编写为“傻瓜编程教程”的风格;不过,由于基础语法比较简单,本文仍将遵照一般快速教程的格式,从变量、控制流程、函数等内容讲起——毕竟写都写了,都删掉也不好,而且占的篇幅也很有限。这样也正好照顾一下感兴趣且愿意学习的朋友。
      由于三国2脚本的作用并不仅限于编写武将技,因此,本文计划分为两个部分:第一部分涵盖了基础语法和武将技的编写,而第二部分则涵盖了指针操作和目前已知的通过脚本编写剧情的方法。在第一部分中,第四章之后的部分将以具体的武将技例子为框架,逐步介绍三国2脚本语言的特性。
      这将是一个相当大的工程。因为距离笔者最初接触三国2脚本已经过去了很长时间,恐难免会有疏漏和不太平易近人的地方;并且笔者本人并不是科班出身,也不是计算机行业从业者,在专业术语用词方面,难免会出现不准确之处。还请各位朋友多多提出宝贵的意见。
      本文假定读者在阅读之前,具备三国群英传2修改的基础知识,主要是RPGViewer的使用、INI文件的结构和INI文件的修改等内容(Things ini相关的部分只需掌握基础的动画序列替换即可,该文件的结构会在教程中作进一步的介绍)。这些部分将不再在教程中涉及。


      IP属地:美国本楼含有高级字体3楼2020-03-07 13:58
      收起回复
        第一章:你好,世界
        我们首先从每一门语言教程都会有的“Helloworld”开始。在这一章中,本文将介绍脚本编辑的工具,伪代码编译器的运行和最基础的语法等内容。
        三国2脚本伪代码编译器是我们用到的核心工具。在写本章时,该工具更新到v0.9.4. 之后它可能还会更新,但会尽可能保持向下兼容。读者可到我的网盘下载最新版本。
        (注:虽然目前v0.9.5已发布,但文中的图仍然使用的是v0.9.4。从版本号可以看出来。)
        此外,我们还需要文本编辑器。理论上,三国2脚本用Windows自带的记事本就可以编辑,不过我仍然推荐使用功能稍强大一些的文本编辑器,包括但不限于Notepad2, Notepad++, VS Code, Sublime Text, Vim/Emacs等,毕竟Windows记事本用起来属实不太行。大部分以上文本编辑器都支持Big5码编辑,因而对INI文件的修改也会比较方便,无需进行内码转换。为举例起见,我将使用Notepad2进行脚本代码的编写。
        游戏版本上,笔者推荐使用笔者的修正版1.05+,该版本提供了较多的脚本额外支持。不过,脚本文件在所有EXE上(包括简体、繁体的1.0和1.05)都是通用的,尽管笔者建议避免使用简体1.05以外的EXE版本,这会给修改带来许多麻烦。幸运的是,目前已知的大部分EXE都是基于简体1.05的。
        (当本文涉及1.05+独有的功能时,会作出额外的说明,非1.05+用户可以考虑使用1.05+修改内容说明中的补丁。)


        IP属地:美国本楼含有高级字体4楼2020-03-07 14:01
        回复
          首先,下载“三国2脚本伪代码编译器”,把压缩包中的内容解压到一个方便的目录下。解压后的文件夹结构通常如下图所示。


          IP属地:美国5楼2020-03-07 14:05
          回复
            笔者推荐读者总是打开Windows文件夹选项里“显示已知文件的扩展名”的功能,这是因为我们会更改扩展名。不清楚如何设置的读者可以百度一下。
            右键-新建-文本文档,在该目录下创建一个空白文本文档,将其更名为Ch1点cpp。会提示更改文件扩展名可能导致文件不可用,点“是”即可。如下图所示。


            IP属地:美国6楼2020-03-07 14:13
            回复
              用文本编辑器打开该文件。输入以下内容:

              (容易看到,设置文件的扩展名,有助于文本编辑器进行语法高亮。需要说明的是,三国2脚本的语法和C++虽然很相似,但它们仍然是不同的编程语言。使用cpp扩展名只是为了语法高亮方便。)


              IP属地:美国7楼2020-03-07 14:20
              回复
                求下载链接 1096285999@qq.com 谢谢


                来自手机贴吧8楼2020-03-07 14:22
                收起回复
                  2025-05-16 04:47:08
                  广告
                  下面笔者将对这四行代码的含义进行简短的说明。我们会在之后的章节中重新回顾这里介绍的所有语法特性。
                  该代码共4行。第一行#include "magic点cpp"表示将magic点cpp中的内容导入到该文件中;我们希望编译成magic点so脚本文件,因此我们的文件需要包含所有原版武将技的代码,它们被包括在同目录下的magic点cpp文件中。
                  第二行中的voidHello() callsign 800定义了一个名为Hello的函数。void表示这个函数没有返回值。callsign 800是三国2脚本独有的特性,称为“调用代码”,这里我们声明Hello函数的调用代码是800. 左大括号{ 表示代码块的开始,它和第四行的 } 把函数体包裹起来。函数体指示了函数被调用时执行的代码。
                  第二行和第四行之间的代码是Hello函数的函数体。它只有一行,即
                  Prompt(3, 0, "HelloWorld! %k%%e%");
                  我们调用了一个名为Prompt的系统函数,这个函数用来弹出一个对话框。该函数有3个参数,分别为整数3,整数0,以及字符串"Hello World! %k%%e%",参数之间用逗号隔开。(和大部分语言一样,英文引号括起来表示字符串。)和C/C++/Java等语言一样,在三国2脚本中,语句必须用分号结束。
                  这条语句的意思是:调用Prompt函数,以模式3(第一个参数)弹出一个对话框(具体地,3表示弹出的是战场上显示的、头像处于右侧的对话框);对话框武将默认为战场上的右方武将,因此不用指定,直接填0(第二个参数);对话框中显示“Hello World!%k%%e%”(第三个参数),“%k%%e%”表示对话框会等待用户单击才会收回。
                  保存该文件。
                  我们刚才做了什么?我们首先创建了一个名为Hello的函数,调用代码是800。Hello函数就是我们创建的新武将技的函数了。这里,我们实际上已经创建了一个“武将技”——虽然这个武将技的唯一作用就是在屏幕上打出一行字(并且废掉一管气),但是这已经可以称为一个武将技了,因为我们之后将用施放武将技的方式调用它。


                  IP属地:美国9楼2020-03-07 14:26
                  回复
                    现在有了代码文件,接下来,我们需要将它编译成群2接受的so文件,这样我们的代码才可以在群2中运行。
                    按Win+R,或者右键单击开始菜单按钮-运行,打开“运行”对话框,输入cmd.

                    回车打开命令行。
                    (您也可以点击开始菜单 - Windows系统 - 命令提示符来打开Windows命令行。在更早版本的Windows下(如XP),“命令提示符”通常在开始菜单下的“附件”中。如果您习惯Windows PowerShell,也可以使用PowerShell来进行下面的操作。)


                    IP属地:美国本楼含有高级字体10楼2020-03-07 14:31
                    回复
                      前排卖**,两个滑稽币一张


                      IP属地:广东11楼2020-03-07 14:37
                      回复
                        在命令行下,输入“[盘符]:”切换到你保存代码文件的磁盘分区,然后用cd逐步切换到编译器所在目录下。例如,笔者的编译器和代码文件储存在D:\Code\SS-Tutorial\Ch1\下,因而命令提示符中将输入以下内容:
                        D:
                        cd Code
                        cd SS-Tutorial
                        cd Ch1

                        (按Tab键可以快速补全当前目录下的文件和文件夹名称。例如,我想输入cd SS-Tutorial,我可以输入“cd SS-”,然后按Tab键让Windows自动补全文件夹全名。按下多次Tab键可以在目录下的各文件或文件夹名称之间切换。)


                        IP属地:美国12楼2020-03-07 14:38
                        收起回复
                          怎么修改战斗场景正下方的名字,就是xx对xx那里的名字


                          IP属地:广东13楼2020-03-07 14:40
                          收起回复
                            命令行切换到Ch1点cpp所在目录后,输入如下命令:
                            ss Ch1点cpp -a
                            (为防抽,请将上面的“点”自行替换为“.”)
                            该命令表示调用该目录下名为ss的可执行文件,它是“三国2脚本伪代码编译器”的本体。Ch1点cpp是我们欲编译的源代码文件,后面接着-a,指示编译器直接生成同名的so文件。我们之后编译脚本代码文件时,总是使用ss <文件名> -a的命令格式
                            回车运行该命令。
                            如果显示编译成功,则您应该能在目录下看到和编译的源代码文件同名的Ch1点so文件。如果显示编译错误,编译错误中会提示出错的位置在第几行第几列,如3:17表示第3行第17列;此时应回到源代码文件中,检查并更正有误的地方,再回到命令行中输入命令编译。

                            编译已经完成了。


                            IP属地:美国本楼含有高级字体14楼2020-03-07 14:45
                            收起回复
                              2025-05-16 04:41:08
                              广告
                              最后,我们要将得到的so文件在群2中【运行】。将编译得到的Ch1点so复制到群2游戏目录下的Script文件夹(没有就创建一个),并更名为magic点so。如有同名文件则替换。


                              IP属地:美国15楼2020-03-07 14:49
                              回复