自定义模块
比如《TBRPG-梦之剑》中的角色、职业、技能、装备、道具、状态都是模板预先编写好的自定义模块
打开自定义模块编辑器
菜单 -> 自定义编辑器 -> 自定义模块(ALT+3)
自定义模块编辑器可以可视化制作模块的操作面板,包括固定的组件、满足某些条件才出现的组件或块。
创建自定义模块
定义模块统一采用编号进行管理。
通过更改最大值调整可用的模块范围。
#1 | 搜索数据 | |||
#2 | 数据列表 | |||
#3 | 修改最大值,以便新增或删减数据 | |||
#4 | 修改数据名称 |
列表操作
操作 | 说明 | 操作方式 |
---|---|---|
选中 | 选中一个模块进行编辑 | 鼠标左键点击指定的模块 |
复制 | 复制一个模块数据 | 键盘操作 CTRL+C鼠标操作 鼠标右键选择复制 |
粘贴 | 将此前复制的模块数据粘贴到当前指定的数据位置上 | 键盘操作 CTRL+V鼠标操作 鼠标右键选择粘贴 |
清空 | 清空当前选择的数据,由于GameCreator数据由编号统一管理, 数据只能清空和更改最大值,无法删除。 | 键盘操作 CTRL+D 鼠标操作 鼠标右键选择清空 |
编辑界面
自定义编辑器中的可视化制作编辑器界面的方法都是相同的,参考【自定义编辑面板】。
可视化制作模块数据
打开数据库-选择该模块即可新增或删减该模块下数据,操作方式同其他模块一样(如界面模块)
如制作设计好了一个名为道具的模块,然后要开始填数据,1-红色药品 2-蓝宝石 3-树枝 等等。
由于预先设计好了使用到的组件、取值范围、预览等效果,该种制作数据的方式会比较友好,所见即所得。
系统自动生成API
系统会根据当前所有的自定义模块自动生成一个 CustomModuleRuntime.api 文件,
只在当前的内存中使用,并不是实际的硬盘文件,使用第三方IDE的话是没有该API的。
通过使用Module_模块变量名称
来访问对应的模块类,系统会根据预设的变量和其类型、默认值等自动生成该类定义。
比如我创建了一个名为道具的模块,变量名为Item,那么系统生成了 Module_Item
该代码类仅用于代码提示
/**
* #1 道具
*/
class Module_Item {
id: number;
name: string;
icon: string; // = ""; 图标
intro: string; // = "";
sell: number; // = 0; 商店售价
isUse: boolean; // = false; 可使用
sellEnabled: boolean; // = false; 允许出售给商店
isConsumables: boolean; // = false; 消耗品
callEvent: string; // = ""; 使用后执行的事件
se: string; // = ""; 非战斗使用时音效
useType: number; // = 0; 使用的场合
isSingleTarget: boolean; // = true; 指定单个目标
applyDeadBattler: boolean; // = false; 作用已死亡的目标
releaseSkill: boolean; // = false; 释放技能
skill: number; // = 0; 非战斗使用时音效
releaseAnimation: number; // = 0; 释放动画
recoveryHP: number; // = 0; 恢复生命值
recoverySP: number; // = 0; 恢复魔法值
addStatus: number[]; // = [];
removeStatus: number[]; // = [];
}
创建一个模块内的数据
使用GameData.newModuleData(模块ID,数据ID,是否副本)来创建一个该模块下预设好的数据,
比如创建模块1-道具模块中的数据2-蓝宝石:GameData.newModuleData(1,2)
参考API:GameData.api
/**
* 新建一个指定模块的数据
* 如果是副本数据:数据与原数据已脱离关系,原数据的更改不会影响该数据的更改,该数据的值来自存档值。
* 比如一件装备原始攻击+10,而极品装备攻击+15,即使调整了原始数据攻击变为25后,该装备攻击仍然是15
* 如果不是副本数据:则是引用原数据的关系,数据仍使用原模型数据的值。
* 比如一件装备原始攻击+10,你获得后,设计人员调整了攻击变为25后,该件装备会自动变为攻击+25
* @param moduleID 自定义模块ID 1-N
* @param dataID 数据ID
* @param isCopy [可选] 默认值=true 是否是数据副本
* @return [Module_???] 返回自定义的模块类型
*/
static newModuleData(moduleID: number, dataID: number, isCopy?: boolean): any;
获取系统预设的自定义模块数据模型
使用GameData.getModuleData(模块ID,数据ID) 来获取数据库中预设的数据。
比如某些情况下并不需要新建一个数据,只是希望获取预设的值是多少时可用这种方法获取。
参考API:GameData.api
/**
* 获取系统预设的自定义模块数据模型
* 系统会在初始化时生成一组预设数据,以便获取或参考,比如制作了一个[道具]的模块,并且填充了10个道具数据,
* 那么系统在游戏运行时会自动生成这10个道具数据,通过此方法即可获取
* @param moduleID 自定义模块ID 1-N(参考编辑器菜单-自定义编辑器-模块制作器)
* @param dataID 数据的ID
* @return [Module_???] 返回自定义的模块类型,根据模块名称(如Module_Actor)
*/
static getModuleData(moduleID: number, dataID: number): any;
获取指定模块的数据总长度
使用GameData.getLength(模块ID,分类) 来获取数据库中预设的数据的总数目。
比如制作一个商店,列出来所有的商品和价格,可通过获取总长度和遍历的方式生成道具显示出来:
参考API:GameData.api
/**
* 获取指定模块的数据总长度(编辑器的对于该模块的更改最大值可以修改)
* 如获取自定义模块[道具]的总数据长度
* @param moduleID 自定义模块ID 1-N
* @param typeID [可选] 默认值=1 类型1-16
* @return [number] 数据总长度
*/
static getLength(moduleID: number, typeID?: number): number;
实现该模块的逻辑功能
模块具体用来做什么取决于制作者的设计,自定义模块系统仅用于设计好该模块必要的属性参数面板以及填入数据。
比如道具模块最终用于装入到玩家的背包里,那么会在玩家数据中设计一个背包属性,玩家的背包中装载多个道具数据。