如何开始
<h2>欢迎来到传奇生物</h2>
<p>本文档将会快速帮助对mod制作的感兴趣的朋友快速上手。
<strong>从没接触过Mod?不会英语?没写过代码?</strong> 全部都没关系
通过本文档的了解后,你可以在30分钟内学会自定义游戏内容</p>
<h2>准备工作</h2>
<p><strong>1.工具需求</strong>
Visual Studio Code 一款小巧精简的代码编辑工具(以下简称vs)
下载地址https://code.visualstudio.com/</p>
<p><strong>2.安装插件</strong>
打开vs后,左侧的侧边栏可以看到正方形Extension按钮
点击后在搜索栏输入chinese
安装第一个即可将vs的各个选项汉化
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/8aa8ec9f064ddf4e0d1b23894359b4f7?showdoc=.jpg" alt="" /></p>
<p>然后搜索代码颜色提示插件,安装第一个godot-tools,作者Geequlim
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/086192f22a9a603ae7bd823708edb712?showdoc=.jpg" alt="" /></p>
<p><strong>3.新建文件</strong>
如何查找游戏安装目录和<strong>mod制作目录</strong>:
在steam游戏库中右键本游戏->属性->本地文件标签下,点击浏览本地文件按钮
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/80e765c399f9f0c7960c1b1742c129a6?showdoc=.jpg" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/418346f9302e85e7e2d44b53ddb897c0?showdoc=.jpg" alt="" /></p>
<p>这下面有一个名为<code>mods</code>的文件夹,也就是我们用来编写和<strong>测试</strong>mod的常用目录,如果没有可以自己新建一个文件夹</p>
<p>现在,让我们回到vs编辑器
在左上角的【文件】按钮点击【打开文件夹】,打开传奇生物的mod制作目录,也就是上图中名为<code>mods</code>的文件夹
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/753b5e83340914fa9d2bf3dafc885fe8?showdoc=.jpg" alt="" /></p>
<p>可以在【文件】选项中新建文件夹,或者直接点击侧边的小图标也可以新建文件夹
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/11222e654572cf5eedc51352876e5e95?showdoc=.jpg" alt="" /></p>
<p>然后在文件夹中新建文件,注意后缀是<code>.gd</code>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/3b9f0eadf7322f01c2c8cbf36ce93f98?showdoc=.jpg" alt="" />
文件夹的命名的规则可以按自己的喜好来写,建议保持文件夹名称和人物名称相同
为了方便阅读,这里给出一些建议和范例</p>
<p><strong>为了防止命名冲突,建议按以下规则命名生物</strong>
生物必须<code>c</code>开头,中间加上自己特有的名称(笔者的图示中写了<code>Dian</code>)
然后是此生物的名字(笔者用了<code>Chara</code>作为生物名)
最后就是<code>c</code>+<code>Dian</code>+<code>Chara</code> -> <code>cDianChara</code></p>
<p>角色分支在命名需要保持一个规则,比如父类角色为"c1",则c1进化的1级系列生物则为"c1_1"和"c1_2"
<strong>代码读取时将根据名字中的下划线字符判断继承关系</strong>
"c1_1"可进化的生物则为"c1_1_1"和"c1_1_2"
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/0cbc636b927099fdcb1c555abf59d807?showdoc=.jpg" alt="" /></p>
<p><code>注意:角色文件的下划线数量要严格控制,最多使用三个下划线(传奇级别的生物)</code></p>
<p>其他命名要求:
角色文件<code>c</code>开头
装备文件<code>i</code>开头
天赋文件<code>t</code>开头
全局文件<code>g</code>开头</p>
<p><code>注意:只有用以上的命名开头才可以在游戏开始时被识别到</code></p>
<p>现在目录结构如下:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/0c8fa19cbd539a0ef7e0fc0ada34b776?showdoc=.jpg" alt="" /></p>
<h2>你的第一个角色</h2>
<p>以上所有准备工作完成后,就可以开始制作你的第一个角色了
我们希望建立一个可以攻击回血的刺客</p>
<pre><code class="language-python">刺客
所属系列:刺客
等级:1
攻击距离:1
生命:225
物理攻击:17
魔法攻击:55
物理防御:30
魔法防御:33
技能:每三次攻击后,将为你恢复10点生命值并为对手施加一层流血</code></pre>
<p>我们来一步一步来实现这些功能,首先进入到你刚刚新建的<code>.gd</code>文件中(笔者新建的是<code>cDianChara.gd</code>)
因为是角色,所以在第一行要声明此节点继承自角色Chara</p>
<pre><code class="language-python">extends Chara # 必须写在第一行</code></pre>
<p>然后是继承的初始化,角色的基本属性和描述在这里定义</p>
<pre><code class="language-python"># 实例初始化,会在角色被创建的时候执行一次(即构造函数,如果有父类,则父类的_init()会先执行)
func _init():
# 写你想要在角色被创建时执行的代码
pass # 实际上实例初始化用的比较少,作为新人作者可以不写,笔者只是在这里提一下
# 角色信息的初始化,会在查看角色图鉴时、放入战场时、放入休息区时执行
func _extInit():
._extInit() # 执行一次父类角色的初始化
chaName = "刺客" # 角色的名称
attCoe.atkRan = 1 # 攻击距离
attCoe.maxHp = 2 # 最大生命(每点代表112.5基础数值,取整数,下同)
attCoe.atk = 2 # 攻击力(每点代表8.5)
attCoe.mgiAtk = 2 # 魔法攻击(每点代表13.7)
attCoe.def = 2 # 物理防御(每点代表15)
attCoe.mgiDef = 2 # 魔法防御(每点代表16.6)
lv = 1 # 等级的设置(最终数值算法:attCoe x 基础数值 x lv)
atkEff = "atk_dao" # 攻击时的特效
addSkillTxt("每3次攻击后,下次攻击将会恢复10点生命并为对手施加一层流血") # 技能描述</code></pre>
<p><code>#</code>字符号后面跟着的中文说明为了方便说明的注释,在实际制作时可以省略。
大部分时候依照这个模板,只填等号右侧的参数即可满足我们的需求</p>
<p>接下来我们实际的编写技能效果</p>
<pre><code class="language-python">var atknum = 0 # 声明一个变量,用作记录攻击了多少次
# 攻击时的事件,与角色攻击挂钩的逻辑在这里编写,每次攻击都会传入一个`atkInfo`,里面有我们需要用的数据
func _onAtkChara(atkInfo):
._onAtkChara(atkInfo) # 执行一次父类角色的攻击事件(什么是父类后面会讲到)
if atkInfo.atkType == Chara.AtkType.NORMAL: # 如果攻击类型是普通攻击,注意是用两个等号判断两者相等
atknum += 1 # 打到了敌人让我们的攻击的次数+1,把+写在=前面是一种简写,atkNum = atkNum + 1
if atknum > 3: # 如果攻击次数大于3,那说明是第4次攻击,满足我们希望的条件
atknum = 0 # 还原计数。否则数值会越来越高
plusHp(10) # 自身生命值增加10点
atkInfo.hitCha.addBuff(b_liuXue.new(1)) # 为被击者施加一层流血状态</code></pre>
<p>在最后,要让角色在每次战斗开始时还原计数,否则会发生下次战斗时还会记录着之前攻击次数的情况</p>
<pre><code class="language-python">func _onBattleStart(): # 战斗开始事件
._onBattleStart() # 执行一次父类角色的战斗开始事件
atknum = 0 # 还原计数</code></pre>
<p>角色的逻辑已经完成。
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/c3b51d30deb65325de5ea10910266e2a?showdoc=.jpg" alt="" /></p>
<p>是不是还少了点什么东西?
对,角色的样子我们还没有设置,选择一张你喜欢的角色图片。</p>
<pre><code class="language-python">格式:png
命名: cha</code></pre>
<p>必须严格符合上述规则才能识别</p>
<p>把它拖到我们存放角色的目录里
以此角色为例,图片存放到
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/db4d5f5ec716f44bbc09f5e30a58232b?showdoc=.jpg" alt="" /></p>
<p>至此。
一个角色已经完成,可以开始游戏查看你制作角色在游戏中的表现了!
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/34085056b5512bb04e7d51a2cff3e58d?showdoc=.jpg" alt="" /></p>
<h4>其他疑问</h4>
<p>这个过程可能会产生很多疑问
如何实现自己想要的效果呢?
这个为什么要这样写?
别急,这些在文档的其他部分都有解释,多多参考文档,在社区讨论。
会解决我们的大部分问题</p>