首页/新闻资讯/正文详情

ArchiveXL 的 Red 层类型封装:Handle、CName、ResourcePath 与 TweakDB 访问全解析

发布时间:2026/11/3 23:45:35 来源:云帆数科 栏目:资讯中心
ArchiveXL 的 Red 层类型封装:Handle、CName、ResourcePath 与 TweakDB 访问全解析
游戏开发插件系统【免费下载链接】cp2077-archive-xlCyberpunk 2077 mod that allows you to expand game resources without conflicts.项目地址https://gitcode.com/GitHub_Trending/cp/cp2077-archive-xl点击查看免费下载ArchiveXLcp2077-archive-xl是一款《赛博朋克 2077》Mod能让多个 Mod 无冲突地扩展游戏资源。它的底层实现依赖一套 Red 层类型封装——包括对象句柄Handle、游戏哈希名CName、资源路径ResourcePath以及TweakDB数据访问——这也是理解该项目源码的关键入口。为什么需要 Red 层类型封装Cyberpunk 2077 的 RedEngine 引擎内部大量使用非自描述的内部类型对象引用是带引用计数的指针、字符串以哈希形式存储、表格数据以偏移量定位。Mod 直接操作原始内存既危险又易碎ArchiveXL 因此把常用类型封装进lib/Red/与src/Red/两个目录形成一组带语义、可复用的访问接口上层扩展Extensions只调用封装后的函数不触碰原始偏移。Handle游戏对象的安全引用HandleT是引擎中对象引用的封装类型它持有WeakHandle内部指针能安全地指向Entity、AppearanceDefinition、EntityTemplate等游戏对象。项目的统一转换工具集中在 Handles.hppToHandle(instance)把裸对象指针安全转为Handle空指针会得到空 Handle内部自动处理弱引用加锁AsHandle(instance)/AsWeakHandle把对象自身ref字段重解释为 Handle 的快捷方式MakeScriptedHandleT()按类型名创建脚本化实例的 Handle找不到类型时返回空值。实际代码中这种模式随处可见例如 Extension.cpp 中用Red::ToHandle(aComponent-owner)取得组件所属实体Extension.cpp 中用Red::AsHandle(aMesh)把网格对象作为参数传给引擎函数。相比手写reinterpret_cast这些封装把判空、加锁等易错细节收拢到一处。CName引擎的哈希字符串游戏内几乎所有命名概念——外观名、标签名、类型名——都以CName形式存在一个 64 位哈希值比较和哈希操作都是 O(1)。ArchiveXL 在 Specializations.hpp 中为CName、TweakDBID、ResourcePath专门提供了std::hash特化因此它们可以直接作为Core::Map的键使用。在服装扩展中CName被用来定义身体部位标签与外观名常量见 Extension.cppconstexpr auto BodyPartTag Red::CName(PlayerBodyPart); constexpr auto DefaultAppearanceName Red::CName(default);而 Facade.reds 则把CName直接暴露给 RedScript 脚本层让脚本也能以类型安全的方式参与查询例如GetBodyType(puppet) - CName。ResourcePath资源路径与路径解析注册表ResourcePath是资源文件路径的哈希封装构造时即完成清洗与哈希例如 Extension.cpp 中的Red::ResourcePath(R(base\characters\appearances\player\items\empty_appearance.app))。真正有意思的是配套的ResourcePathRegistryResourcePathRegistry.hpp它 Hook 了引擎创建路径的函数Raw::ResourcePath::Create定义见 ResourcePath.hpp每当游戏中出现一条新路径就把ResourcePath → 原始字符串记录进映射表ResourcePathRegistry.cpp提供ResolvePath()把哈希路径还原成可读字符串并支持从预加载文件批量导入已知路径。这套机制让 Mod 在运行时能读懂引擎内部的路径引用是扩展服装、网格等资源的前提。TweakDB 访问读、写、追加表格数据TweakDB 是游戏的中央配置数据库Mod 添加物品、扩展功能几乎都要读写它。TweakDB.hpp 提供了一组线程安全的模板接口函数作用GetFlatValueT(id)按TweakDBID读取属性值找不到返回默认值SetFlat(id, value)写入或覆盖一个属性CreateFlat(id, value)创建新属性并登记 IDCreateRecord(id, type)创建指定类型的记录CreateRecordAlias(id, alias)为记录建立别名AppendToFlat(id, values)向数组属性追加元素自动去重GetRecordsT()按类型取出全部记录句柄RecordExists(id)判断记录是否存在一个典型的组合拳出现在木偶状态扩展中Extension.cpp先RecordExists查重再CreateFlat写入脚本系统名与函数名CreateRecord创建后缀记录最后AppendToFlat把新后缀追加进外观后缀列表并UpdateRecord提交——整个过程对游戏而言就像原生长出的一条新配置无需覆盖任何原始文件。总结这套封装带来了什么安全Handle的判空与弱引用加锁、TweakDB 的读写锁把内存安全问题集中到封装层可读CName、ResourcePath让哈希数字重新具备命名语义配合注册表还能还原成字符串可扩展上层各 Extensions 模块Garment、PuppetState、Customization 等只需调用统一的 Red 层接口就能实现添加装备、动态外观、本地化文本等功能这正是 ArchiveXL 实现多 Mod 无冲突扩展的底层保障。如果你打算阅读或二次开发该项目建议的源码阅读顺序是Handles.hpp → ResourcePath.hpp → TweakDB.hpp → ResourcePathRegistry.hpp再顺着任一 Extension 的实现理解完整调用链。赞分享游戏开发插件系统【免费下载链接】cp2077-archive-xlCyberpunk 2077 mod that allows you to expand game resources without conflicts.项目地址https://gitcode.com/GitHub_Trending/cp/cp2077-archive-xl点击查看免费下载相关推荐ArchiveXL架构总览Core、Red、App三层设计的完整拆解ArchiveXL架构总览Core、Red、App三层设计的完整拆解 ArchiveXL 是一款《赛博朋克 2077》Cyberpunk 2077Mod游戏开发插件系统如何通过Hermes WebUI实现AI社会正义促进公平与正义的终极指南如何通过Hermes WebUI实现AI社会正义促进公平与正义的终极指南 在当今AI技术快速发展的时代 Hermes WebUI 作为一个开源的自托管AI代人工智能AI 应用前端后端交互助手实时网页数据抓取完整指南用 skills 3 步拿到 JS 动态加载的页面内容实时网页数据抓取完整指南用 skills 3 步拿到 JS 动态加载的页面内容 skills 是 Browserbase 官方开源的 Agent 技能集skAI 技能浏览器控制网页爬虫AI 评测上一篇pdf2htmlEX元数据搜索工具如何查询与过滤PDF文档元数据下一篇3种高效集成方案如何快速实现LTS分布式任务调度框架的完美融合创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Folia 歌词播放器如何装进手机主屏幕:10 分钟安装指南
Folia 歌词播放器如何装进手机主屏幕:10 分钟安装指南

Folia 歌词播放器如何装进手机主屏幕:10 分钟安装指南 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major 读者装 Folia 到手机&#x… · 2026/11/3 21:39:27

Folia 全屏歌词播放器安装教程:从下载选包到首次播放,一次走通
Folia 全屏歌词播放器安装教程:从下载选包到首次播放,一次走通

Folia 全屏歌词播放器安装教程:从下载选包到首次播放,一次走通 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是… · 2026/11/1 1:28:16

深入解析 Macro AgentConfigOptionDto:ACP 会话设置的类型结构、能力发现与下发实践
深入解析 Macro AgentConfigOptionDto:ACP 会话设置的类型结构、能力发现与下发实践

后端前端协同办公即时通讯企业应用CRMAI Agent人工智能 【免费下载链接】macro Macro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — -linked together with shared AI memory. 项目地址: https://gitcode.com/GitHub_Tr… · 2026/11/3 7:48:42

AI智能体集群失控事件复盘:多智能体协作安全风险与防御实践
AI智能体集群失控事件复盘:多智能体协作安全风险与防御实践

那段时间我刚好在跟踪Hugging Face Spaces上的一些强化学习实验,结果撞见了一个挺魔幻的场面:一群AI agent在自己互相拉群,集群规模一度冲到1200个左右,最后把平台侧的安全策略给“挤”穿了。官方后来给了一个比较克制的回应&… · 2026/11/3 23:45:08

用Agent干活为何需要带鱼屏?多Agent工作流空间消耗与优化方案
用Agent干活为何需要带鱼屏?多Agent工作流空间消耗与优化方案

1. 从一块屏幕说起:Agent 工作流为什么把显示器逼到了墙角1.1 一个真实到有点荒诞的观察如果你最近半年在折腾 Agent 相关的东西,不管是自己写一个 ReAct 循环,还是用现成的 Agent 框架搭工作流,你大概率会经历一个微妙的心态变化… · 2026/11/3 23:45:08

LLM4AD_Next:科研工作流的自主迭代范式重构
LLM4AD_Next:科研工作流的自主迭代范式重构

1. LLM4AD_Next 不是又一个“AI科研助手”,它是科研工作流的底层重写 我第一次在 arXiv:2605.20025 这篇预印本里读到 LLM4AD_Next 的架构图时,手边正堆着三份没改完的基金本子、两篇被拒稿后反复重写的论文草稿,还有导师发来的“这个方向再不… · 2026/11/3 23:45:08

Agent 工作流为何需要带鱼屏:横向空间与多信息流并行解析
Agent 工作流为何需要带鱼屏:横向空间与多信息流并行解析

1. 从一块屏幕说起:Agent 工作流为什么把显示器逼到了极限第一次认真考虑换带鱼屏,不是因为想看电影更爽,也不是为了打游戏视野更宽,而是某天下午盯着屏幕,发现自己同时在开七个窗口:左边是终端里跑着的 ag… · 2026/11/3 23:45:08

RGMII转SGMII硬件电路设计:YT8521S配置与调试
RGMII转SGMII硬件电路设计:YT8521S配置与调试

简介:面向采用LS2K1000 CPU、XC7VX690T FPGA并需要完成RGMII转SGMII设计的硬件工程师,这份PDF参考图聚焦YT8521S PHY芯片的外围电路与配置要点,可用于以太网接口方案评估、原理图对照和调试排错。资源包仅含1个PDF文件,约193KB&am… · 2026/11/3 23:45:08

SpringBoot默认首页的三层触发机制详解
SpringBoot默认首页的三层触发机制详解

1. 项目概述:为什么一个默认首页值得专门讲清楚? “初识SpringBoot——设置SpringBoot应用默认首页”,这个标题看起来平平无奇,甚至有点像教科书里的课后习题。但如果你刚从传统Servlet开发转过来,或者正卡在第一个Spr… · 2026/11/3 23:44:06

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码