.. SPDX-License-Identifier:	CC-BY-NC-SA-4.0

开发环境准备
===================

通过本教程，你可以做到…
-----------------------

本教程将讲解如何制作新月杀扩展，包括武将、游戏牌和模式等。我们在新月杀里玩到的\
武将、游戏牌和模式等，主要都是用计算机语言Lua编写完成的。本教程就将介绍如何为\
新月杀制作Lua扩展。所有新月杀已有的武将、游戏牌和模式都可以作为我们的参考。

熟悉新月杀
-------------------

在制作扩展前，我们先需要熟悉一下新月杀的文件结构。

打开新月杀文件目录，和制作扩展相关的主要有packages、lua这两个文件夹。

.. figure:: pic/0-1.jpg
   :align: center

   新月杀的目录结构

packages/
~~~~~~~~~

packages文件夹是储存所有游戏卡牌扩展和武将扩展的位置。
新月杀的本体只包含standard、standard_cards、maneuvering以及test四个包，\
它们属于核心扩展，也就是三国杀的标准包（武将）、标准游戏牌包和军争游戏牌包，\
还有（专门用于测试而非游玩的）测试包。

如果你进行过服务器联机的话，会自动同步服务器上的所有拓展包，例如shzl\
（神话再临）。在新月杀中，扩展包拥有在线安装/在线更新的功能，\
这种功能都是依托于git进行的，因此如果你打算将自己的扩展包发布出去的话，\
就需要为其创建git仓库，并托管到git托管网站去。\
如何进行扩展包发布和git托管参见其他教程。

.. figure:: pic/0-2.jpg
   :align: center

   packages/下存放着拓展包

.. hint::
   如果你没有进行过联机，可以直接在新月杀的管理扩展包功能中，
   使用“从URL安装”，输入以下扩展包的链接，将这些本教程会涉及到的需参考的扩展包安装入你的新月杀：
   `神话再临 <https://gitee.com/qsgs-fans/shzl>`_、 `一将成名 <https://gitee.com/qsgs-fans/yj>`_、 `界限突破标包 <https://gitee.com/qsgs-fans/standard_ex>`_。

lua/
~~~~~

lua文件夹是新月杀运行规则的核心。我们以lua文件夹下的server文件夹为例：

.. figure:: pic/0-3.jpg
   :align: center

   server文件夹

server文件夹中包含许多在客户端执行文件。例如，events文件夹中是三国杀各类“事件”\
的执行规则，它定义着诸如使用牌事件的流程、扣减体力事件各种时机的先后顺序，\
这些流程是我们按照规则集现有结算规则严格制定的。

虽然lua文件夹神通广大，但并非是我们扩展包开发需要修改的内容。\
我们需要熟悉其中游戏结算的逻辑，在其中查阅要利用的函数，\
寻找调试修正bug的方法。在没有思路实现某个功能时，翻翻lua文件夹总能有新发现^_^。

这里所包含的文件均是游戏的核心代码，当你对新月杀的执行流程不熟悉的时候，不要忘记看一下这些文件哦，\
目前我们新人的话，可以先暂时不用理会这里面的内容，但是不要忘记这里的内容非常重要哦。


准备代码编辑器
--------------------

新月杀扩展的开发完全使用Lua语言。采用Lua不需要编译，语法简单易懂，
外加和太阳神三国杀的一些渊源，使用Lua完全符合我们自由、开放、可扩展的diy平台理念。

尽管使用记事本就能直接编辑Lua文件，但工欲善其事必先利其器，
用一款好的代码编辑器对于提高编程效率、查漏补缺是很有帮助的。
出于易用性和免费的考虑，我们推荐用VSCode进行编写（百度搜索下载即可）。

.. figure:: pic/0-4.jpg
   :align: center

   vscode

VSCode提供的插件能为开发提供很大便利。点击侧边栏，选择第五项“扩展”选项卡，
直接搜索插件名字安装即可。

.. figure:: pic/0-5.jpg
   :align: center

   插件面板

1. 中文翻译包

.. figure:: pic/0-6.jpg
   :align: center

   安装中文翻译插件吧！

难道有人看英文比中文更顺眼？

2. Lua

.. figure:: pic/0-7.jpg
   :align: center

   安装Lua插件吧！

Lua插件提供了强大的代码提示、补齐、纠错、注释功能，妈妈再也不用担心我打错字啦^_^。

在VSCode中部署工作区
-------------------------

.. important:: 

   注意，因为我们开发、调试都是在本地进行的，还没有上传至服务器，所以最好复制一份游戏本体，\
   用来玩的和用来开发的区分开，不然我们修改过文件的游戏是不能连接服务器的。
   将FreeKill-release文件夹（或者，你的新月杀的根目录所在的文件夹）复制一份，\
   粘贴在另外一处，改名为FreeKill-dev（或者“新月杀开发版”，名字无所谓啦）以区分。

为了方便在文件间进行切换，以及全局搜索相关内容，我们先将游戏目录部署到工作区。
点击VSCode的侧边栏，选择第一项“资源管理器”选项卡：

.. figure:: pic/0-8.jpg
   :align: center

   资源管理器面板

点击“打开文件夹”，选择我们用来开发的游戏目录（FreeKill-dev文件夹）。

资源管理器中显示出文件目录就部署好啦。

.. figure:: pic/0-9.jpg
   :align: center
   
   部署完成工作区后，应该像这样

用VSCode写东西
-------------------------

好了，我们终于可以开写了……但是写啥呢……？
你可以直接前往下一章节创建第一个武将，但这里先说一下你会碰到的操作/快捷键吧。

* \ ``Ctrl+F``\ 是在\ **文件内**\ 搜索特定字符串的常见快捷键，

  但是更常用的，则是它的高级形式——在整个工作区（也就是FreeKill-dev文件夹）里搜索，这个的快捷键是\ ``Ctrl+Shift+F``\ 

  通过搜索已有的相对成熟的代码，可以解决很多问题~

* \ ``Ctrl+S``\ 是保存本文件，你会经常摁它的。

  未保存的文件，其文件名左边会有一个实心圆，表示该文件有未保存的东西。

.. hint::

   经常保存有益身心健康，谁也不想辛辛苦苦写的东西全作古吧……

* 左侧的资源管理器通常有四个区域——这里只摘选经常用的地方

  - 打开的编辑器：这里是你打开的所有文件的列表，未保存的文件也会显示一个实心圆。

  - 资源视图：其实名字一般是你的工作区（一般是游戏目录，不会有人拿扩展包当工作区吧），
    这里会用树形结构显示你打开的全部文件，也可以通过\ ``Ctrl+F``\ 按照\ **文件名**\ 搜索文件。

  - 时间线：这里保存着你各种保存后的文件历史，点击其中一个历史记录会显示它与现存版本之间的差异。

  .. hint::

     单纯撤销文件的历史的名字是不一样的，可以通过这个撤销你的撤销。
