| 赞 | 344 |
| VIP | 10 |
| 好人卡 | 8 |
| 积分 | 291 |
| 经验 | 235776 |
| 最后登录 | 2026-6-2 |
| 在线时间 | 2384 小时 |
Lv5.捕梦者 (版主) 遠航の猫咪
- 梦石
- 3
- 星屑
- 26074
- 在线时间
- 2384 小时
- 注册时间
- 2005-10-15
- 帖子
- 1168

|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
那你告诉我这一个月的辛苦算什么?算什么????
论坛能不能上传js文件啊,我这插件都发布不了……
- //=============================================================================
- // RPG Maker MZ - SailCat's Engine Plugin Core
- //=============================================================================
- /*:zh
- * @target MZ
- * @plugindesc [SEP] SailCat Engine Plugin的公共依赖组件
- * @author SailCat
- * @help SEPCore.js
- * v 1.0.0 (2026-04-06) 初版
- *
- * 本插件是SEP(SailCat's Engine Plugin)引擎的公共依赖组件。
- * 所有SEP系列插件均需依赖本插件,且放在本插件之后。
- *
- * 本插件实现以下功能:
- *
- * 0. 修复了 RMMZ 默认引擎的已知问题。
- * a) 数据库状态变动后,Game_Actor.states() 可能返回 undefined 的问题。
- * b) 数据库技能变动后,Game_Actor.skills() 可能返回 undefined 的问题。
- * c) Game_Actor.discardEquip() 方法未及时刷新角色状态的问题。
- * d) 数据库物品/武器/防具变动后,Game_Party.items(), weapons(), armors()
- * 可能返回带有 undefined 的数组的问题。
- * e) 因伤害公式引用变量没有套壳,未赋值变量会整个伤害公式返回 NaN 的问题。
- * 1. 提供一个函数 `SEP.Flow.extend`,用于为指定类的指定方法
- * 添加处理函数(扩展方法),并可通过序列号指定扩展方法的执行顺序。
- * 每个序列号只能有一个处理函数,重复注册会覆盖先前注册的函数。
- * 此举旨在解决多个插件扩展同一方法时,注入顺序引发的 alias 黑洞问题。
- * 2. 对任何带有备注的数据,若其备注以"{"开头,以"}"结尾,则将其解析为json。
- * 如果解析成功,结果对象会赋给该数据对象的noteObj属性。
- * 3. 对没有单独备注栏的数据(敌群、动画、公共事件)添加了备注功能,
- * 若其名称中包含特定分隔符,其后内容视为备注。
- * 4. 允许对系统级数据添加全局备注,并在加载时解析。
- * 5. 提供一套为追加了实例变量的旧存档兼容的解决方案。
- * 6. 为 String 类追加了 toCamelCase 等实用转换函数,方便插件编写时找到对应。
- * 7. 提供一系列实用的解析和校验工具(如 evalFormula、parsePluginParams等)。
- *
- * 【工具模块 (SEP.Tools)】
- * 核心封装了高频利用函数,便于您编写扩展插件时直接借用:
- * - evalFormula(expr, params, defaultValue, context) : 安全执行公式求值。
- * - parsePluginParams(params, rules) : 支持嵌套数组和对象的深度参数解包。
- * - parseNoteArray(item, tagName) : 从数据缓存内抽取 JSON 或 逗号分割数组。
- * - parseNoteMap(item, tagName, defaultValue, nameResolver) :
- * 从数据缓存内抽取 JSON 对象,并根据 nameResolver 解析键名。
- * - parseBoolean(str) : 智能识别 True/False、对/否等多种文字型布尔变量。
- * - parsePluginNote(str) : 将独立的长文本字符串解析为参数树。
- *
- * 【扩展方法序列号规则】
- * - 负数:前置扩展,按升序执行,返回值被忽略。
- * - 0 :核心方法(唯一),可被覆盖。首次注册时,自动设为MZ引擎默认方法。
- * - 正数:后置扩展,按升序执行,每个函数接收 (原始参数..., 当前结果),
- * 返回新结果(返回 undefined 则保持当前结果),以最后的结果为准。
- *
- * 【扩展方法注册】
- * SEP.Flow.extend(classObject, methodName, sequence, handler);
- *
- * 参数说明:
- * classObject - 目标类(构造函数),例如 DataManager、Game_Actor 等。
- * methodName - 要扩展的方法名(字符串)。
- * sequence - 整数,指定执行顺序,不可重复。
- * handler - 处理函数,使用与原始方法相同的 this。
- * 前置函数:接收原始参数,不返回值,但可控制流程或改参数。
- * 核心函数:接收可能更新的参数,返回核心结果。
- * 后置函数:接收 (原始参数..., 当前结果),可返回新结果。
- * 若函数不需要修改结果,可忽略最后一个参数,
- * 若处理函数不返回或返回 undefined 则链到前一处理。
- *
- * 【示例】
- * // 后置扩展,基于原返回值修改
- * SEP.Flow.extend(DataManager, 'onLoad', 100, function(object, result) {
- * // 对 result 进行处理
- * return modifiedResult;
- * });
- *
- * // 后置扩展,仅执行副作用,不关心返回值(省略 result 参数)
- * SEP.Flow.extend(DataManager, 'onLoad', 200, function(object) {
- * // 做一些事情,不返回或返回 undefined
- * // 它会在顺序号为100的函数之后执行,不论插件安装顺序如何
- * });
- *
- * // 覆盖核心方法
- * SEP.Flow.extend(DataManager, 'onLoad', 0, function(object) {
- * return myOwnResult;
- * });
- *
- * // 前置扩展,不参与返回值
- * SEP.Flow.extend(DataManager, 'onLoad', -50, function(object) {
- * // 做一些准备
- * // 它会在顺序号为-10的函数之前执行,不论插件安装顺序如何
- * });
- *
- * // 前置扩展,控制流程
- * SEP.Flow.extend(DataManager, 'onLoad', -100, function(object) {
- * // 做一些可能导致跳过后续流程的准备
- * // 它会在顺序号为-50的函数之前执行,不论插件安装顺序如何
- * return undefined; // 不进行流程控制
- * return [true, newParams]; // 以新参数依签名序替换原参数并继续执行
- * return [false, dummyResult]; // 立即结束执行链处理,返回dummyResult
- * return [seq, dummyResult, newParams]
- * // 跳转到数值 seq 代表的执行链位置,从其后开始执行,以dummyResult
- * // 代入其后首个函数的链式返回值,并以新参数依签名序替换函数原参数
- * });
- *
- * 【追加实例变量存档兼容】
- * 在插件中为Game系等能存档的类追加实例变量时,需使用方法
- * SEP.Compatibility.addProperty(target, identifier, initValue, fixMethod);
- *
- * 参数说明:
- * target - 目标对象,一般在初始化函数中注册实例变量时,传入this。
- * identifier - 标识符,存储实例变量的标识名(字符串)。
- * initValue - 初始化值,该值将在追加后立即赋值给变量,类型自动识别。
- * fixMethod - 可选,加载旧存档时调用的额外修复函数,不能用箭头函数!
- * 额外修复函数中的this必须指向需要修复的对象本身。
- * 额外修复函数会在每次加载存档时,检查调用需求,具体为:
- * - 若无此实例变量,或有但类型不符,会重新赋值并调用该函数;
- * - 若有此实例变量,且为引用类型,仅调用函数;
- * - 若有此实例变量,且为简单数值类型,不调用函数。
- *
- * 该指令会同时为实例变量设置默认值,故一般在 initMembers 或类似方法中调用。
- *
- * 【示例】
- * SEP.Flow.extend(Game_Battler, 'initMembers', -500, function() {
- * SEP.Compatibility.addProperty(this, "_newParam", [], function() {
- * this._newParam.fill(0);
- * });
- * });
- *
- * fixMethod 函数会在 DataManager.correctDataErrors (标准修复位)中调用,
- * 请确认在处理修复逻辑前,所引用的相关对象已初始化($game系对象已建立)。
- * 函数应专注于修复当前对象,可应用$data系的数据,但不建议指向其他同类对象。
- *
- * 本插件必须加载于所有其他SEP引擎插件之前。
- * 不建议在本插件与其他SEP引擎插件之间,插入其他的第三方插件。
- * 但在本插件前或所有SEP插件之后使用第三方插件,则对功能无影响。
- *
- * @param noteDelimiter
- * @text 备注分隔符
- * @desc 无独立备注栏的数据(如动画、敌群),其名称中用于切分备注的特殊符号。
- * @default //
- *
- * @param systemNote
- * @text 系统全局备注
- * @type note
- * @desc 弥补全数据库“系统”项没有备注栏的问题。
- * 填写的内容将作为 $dataSystem 的系统级备注进行解析。
- * @default
- *
- */
复制代码 |
评分
-
查看全部评分
|