简易事件框架

创作者: Cyberbuilds
已更新:2026-06-01 04:00:21
4KB

前置 MOD

使用 简易事件框架 时将自动安装

关于此 MOD

引擎级异步事件消息传递,实现红脚本与Lua代码间通信。支持添加自定义监听器,发送自定义数据载荷,最终实现跨代码的可靠交互——以引擎速度运行!

引擎级异步事件通讯,支持在Redscript与Lua代码之间传递消息。可添加自定义监听器并发送自定义数据载荷。最终实现跨代码层的可靠对话——以引擎级速度!

player:SendEventMessage("BaseStatusEffect.SimpleEventMessage",{"载荷1","载荷2","载荷3"})



通过模组管理器安装,或解压至游戏目录。



lua
sef = GetMod("SimpleEventFramework")
function mylistener(message) for i, tag in ipairs(message) do print("处理程序:", tag.value) end end
sef:AddEventMessageListener("BaseStatusEffect.SimpleEventMessage", mylistener)
玩家:发送事件消息("基础状态效果.简单事件消息",{"一","二","三"})

红色脚本
模块 SimpleEventFramework.示例

import SimpleEventFramework.System.*

public class MyListenerClass extends ListenerCallback
  public func Call() -> Void {
    for tag in this.tags {
        [MyListenerClass] 标记 " + this.event + ":" + NameToString(tag)
    }
    StatusEffectHelper.RemoveStatusEffect(this.player, t"BaseStatusEffect.SimpleEventMessage");
  }
}

@wrapMethod(PlayerPuppet)
protected cb func OnGameAttached() -> Bool {
    let ret: Bool = wrappedMethod();

    let eventFramework = SimpleEventFramework.GetInstance(this);
    if IsDefined(eventFramework) {
        let listener: ref<MyListenerClass> = new MyListenerClass();
        listener.event = "基础状态效果.简单事件消息"
        eventFramework.AddEventMessageListener(监听器);
    }

    返回 ret;
}
注意:来自 r6/scripts/SimpleEventFramework/Example.reds

消息对象

消息对象基于BaseStatusEffects的Tweak记录,因为该框架通过状态效果在引擎中传递消息。系统已为您提供一个默认对象。 基础状态效果·简单事件信息 不过,你可以将其自由克隆到自己的消息类型中,并预设调试标签(debugTags)。它作为消息负载的容器,这些负载以标签字符串的形式存储在记录的调试标签段中。

基础状态效果.简单事件信息:
  调试标签:[]
  时长:基础属性.无限持续
  动态时长:否
  gameplayTags: []
  免疫属性:[]
  isAffectedByTimeDilationNPC: 是
  受时间膨胀影响:是
  maxStacks: RTDB.状态效果_行内0
  {}
  reapplyPackagesOnMaxStacks: 否
  持续时间结束时不清除所有层数:否
  removeOnStoryTier: 否
  复刻:否
  可保存:是
  SFX:[音效]
  状态效果类型:基础状态效果.杂项
  stopActiveSfxOnDeactivate: 是
  $type: gamedataStatusEffect_Record
  VFX:[无特效]
发送消息时,需指定基础消息记录ID,并附上希望随消息携带的标签列表(即有效载荷)。

注册监听器

消息监听器注册在消息对象ID上。当该消息类型被触发时,载荷标签会传递给每个监听器。

从以上示例(lua)


sef:AddEventMessageListener("BaseStatusEffect.SimpleEventMessage", mylistener)
且监听器是一个函数
function mylistener(message)
  for i, tag in ipairs(message) do
    print("处理中:", tag.value)
  end
end

在 redscript 中,它的运作机制略有不同,具体如上方示例所示。


消耗/移除消息

你需要在代码处理完消息后,负责将该消息吞噬(即移除)。操作方式如下:

lua
状态效果助手.移除状态效果(游戏.获取玩家(), "基础状态效果.简单事件消息")
redscript
StatusEffectHelper.RemoveStatusEffect(玩家, t"BaseStatusEffect.SimpleEventMessage");


简易事件框架API文档

类别:简易事件框架
核心可编写事件系统,管理事件分发与监听器。

获取实例
公开 静态 功能 获取实例(obj: 参考<游戏对象>) -> 参考<简单事件框架>
获取SimpleEventFramework的当前实例。
  • obj: 任意有效 游戏对象 可访问游戏实例(例如玩家对象)。

发送事件
公开 功能 SendEvent(消息: 您好!请提供需要翻译的文本内容。您尚未粘贴任何文本。标签: 抱歉,您提供的文本只写了“array”,没有具体内容。请提供需要翻译的完整文本,我将为您进行专业游戏本地化翻译。<请提供您需要翻译的游戏文本内容。>) -> 虚空
立即通过状态效果触发一次事件。
  • 消息事件消息的TweakDB ID(例如: "简单事件消息")
  • 标签:要传递给监听器的字符串标签列表。

延迟发送事件
公开 功能 发送延迟事件(消息: String 字符串抱歉,你提供的文本内容似乎不完整。请重新发送需要翻译的文本。 抱歉,我注意到您在消息中只写了“array”这个词。看起来可能缺少了需要翻译的文本内容。请您提供完整的游戏文本,我会立即为您进行专业的本地化翻译。<您好!请提供您需要翻译的文本内容,我将为您进行专业的游戏本地化翻译。>,延迟: 浮动) -> 虚空
在指定延迟后发送事件。
  • 消息事件消息的TweakDB ID。
  • 标签:传递给监听器的字符串标签列表。
  • 延迟发送事件前的等待时间(秒)。

添加事件消息监听器
公开 func AddEventMessageListener(监听器: 参考<侦听器回调>) -> 虚空
注册一个监听回调,当事件与监听器指定的事件字符串匹配时触发。
  • 听众:指向一个 监听回调 目标。



玩家傀儡扩展

发送事件消息
公开 功能 发送事件消息(消息: 您好!请提供您需要翻译的游戏文本,我会立即为您处理。, 标签: 数组<请提供需要翻译的文本内容。>) -> 虚空
添加了一个便捷的方法 玩家傀儡 快速发送事件,无需手动查找框架系统。
  • 消息消息的TweakDB ID。
  • 标签与事件关联的标签字符串数组。



职业:聆听者
一个可供继承或实例化以监听事件的类。继承自 延迟回调.

属性
  • 公开 让 event: 事件 您好!请提供您需要翻译的文本内容,我会按照要求进行本地化翻译。; 要监听的事件消息ID。
  • 公开 让 标签: 数组<角色名>; 由框架在事件触发时,根据随事件发送的标签自动填充。

方法
公共 功能 Call() -> 虚无
事件触发时执行的回调函数,重写此函数以添加自定义执行逻辑。

赛博朋克 2077 的热门 MOD

探索适用于 赛博朋克 2077 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 赛博朋克 2077 的全部潜力 — 今天就探索这些顶级 MOD!