传奇生物文档

对MOD开发相关的说明


如何开始

<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游戏库中右键本游戏-&gt;属性-&gt;本地文件标签下,点击浏览本地文件按钮 <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> -&gt; <code>cDianChara</code></p> <p>角色分支在命名需要保持一个规则,比如父类角色为&quot;c1&quot;,则c1进化的1级系列生物则为&quot;c1_1&quot;和&quot;c1_2&quot; <strong>代码读取时将根据名字中的下划线字符判断继承关系</strong> &quot;c1_1&quot;可进化的生物则为&quot;c1_1_1&quot;和&quot;c1_1_2&quot; <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 &gt; 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>

页面列表

ITEM_HTML