|
本帖最后由 笨030504 于 2024-9-9 23:25 编辑
这个其实也算是“锤子的废物插件”系列的第三期。
万物互通(Everything Compatible,EC)是一个包含用户包和开发包的整合包。
这个整合包,旨在兼容、互通、融合。
它适合二次开发和自由组合,用于mod制作和二次开发。
需要下载体验的,制作mod移步最新的用户包;
想要扩展平台,二次开发的移步最新的开发包。
里面目前预置了Ares/Phobos/WIC/IH等组件,并建立了模块之间的协作体系。
目前已经配套了WIC和IH组件的SDK,以便二次开发以及为modder自定义dll。
欢迎更多人制作与此整合包配合的平台和mod,来更加地扩大支持的功能,进而建立起充分的生态。
经测试,EC平台和Kratos没有发现不兼容问题,如果各位遇到,烦请反馈到QQ群。
EC平台和DP的兼容性待测试。
如果需要安装自定义的Ares/Phobos,请更换包里面的版本。
这个整合包是和WIC平台保持联动的,移步 【平台扩展】WIC v0.0.9
同时也和改版的支持自机联机的DTA联动,移步 可以自己和自己联机了(CNC)
如有问题或提出功能/开发建议,或对二次开发等存在疑问,请加群讨论。
QQ群:1005775525
补丁#240901B:
—— 更新了Phobos的版本。
—— 允许关闭Ares等对gamemd的检查,以便适配steam版的红警。
补丁#240903A:
—— 更新了Phobos的版本到b43_3_5。
—— 现在SyringeIH支持reshade组件了。赞美头猫大佬
备注:想要reshade可以下载下方链接里面的reshade或使用自己的reshade版本。
补丁#240904A:
—— 现在可以设置SyringeIH注入之后分离调试器了,可以用来在注入之后附上专业的调试器来调试程序
备注:详见用户包里面的SyringeIH使用说明
—— 部分修订了说明书,并重新梳理了包里面的文件
补丁#240905A:
—— 更新了Phobos的版本到b43_3_6。
——【Phobos重要修正】修复 [StrafingTargetScatter] 在默认情况下命令飞机攻击时可能会弹窗的问题
—— 修正了SyringeIH在打不开SyringeEx.dll时会卡死的问题。
—— 补充了SyringeIH的一些内部错误的提示。
—— 消除了EC.SDK当中的一些警告。
—— 补充了忘记写进SDK的单位变形接口。可以用来制作单位变形效果。
补丁#240908A:
—— 修复了SyringeIH随机出现的弹窗提示分配内存不足的问题。
—— 修复了SyringeIH在读取DLL基地址时可能出现的崩溃。
—— 修复了EnemyUIName等需要CSF语句的位置对长文本的支持。(目前对拆分出的子INI支持有点问题)
—— 更新了Phobos的版本到b43_3_8。
—— 补充了Phobos的更加详细的说明。
—— 允许SyringeIH在注入后与gamemd.exe分离
—— 修复了一些Phobos IHCore SyringeIH等的小bug
使用方法:
(一)制作mod:把整个用户包解压,放在原版YR里面。
备注:(1)这个和DTA兼容,和MO兼容,但对某些特定的旧DTA可能有潜在的兼容问题
(2)尽管此整合包尽可能的消减了Ares Phobos WIC的不兼容问题,但是仍可能有,烦请发到QQ群里面。
(二)二次开发:把开发包解压,把SDK文件夹中的代码包含在项目的包含目录当中。
在安装之后,按照SDK文件夹里面IHLoader说明书的指示来配置dllmain,即可享受EC的扩展功能。
备注:(1)请先在项目当中包含YRPP。
(2)如有不确定者,可以抄开发包里面的EC_ExampleDll项目。
(3)关于源码:Ares暂时搞不到,Phobos自己下载代码,WIC的代码按照si的意见不会公开
IH组件的源代码请等到代码整理完成后公开,SyringeIH的代码已经公开。
(4)关于逆向:附有pdb的文件准许自行逆向(是开源工程),其他请反馈到交流群里。
功能简述:(完整的mod开发说明书见用户包里面的“说明书”文件夹)
1、Ares有啥它有啥 Probos有啥它有啥 WIC有啥它有啥,但是兼容性会好一点
2、关于IH组件的更新:
(1)yrm支持中文名,在Name=处可以写中文名字。
使用“:xxx”,xxx写中文名字。
(2)在UIName等CSF支持以下的逻辑:
(1)使用“EXTS:”前缀来调用额外的CSF。
目标CSF应放置于游戏根目录或打包到MIX中。
调用时,按照“EXTS:文件名:CSF条目”的格式。
文件名不区分大小写,不包括.csf的拓展名。
CSF条目为原本会填的内容,区分大小写。
示例:
如果UIName要调用test.csf里的Name:WHAT条目,
可以这样写:UIName=EXTS:TEST:Name:WHAT,
(3)使用“(:xxx)”来调用中文的nostr。
xxx处直接写中文。注意,括号是英文括号,冒号是中文冒号。
如需要换行,可以直接插入\n
示例:
UIName=(:核弹\n发射井)
(4)解锁了游戏多开(配合能多开的DTA可以自机联机)
(5)INI每行当中,键值对里面,键的长度可以最大为500,值的长度可以最大为200000
(6)修复:
I,重写了部分yrm的载入
II,重写了INI的部分载入流程
III,修复了一堆基础bug,基本打通了中文字符串的传输
IV,修复了一些有关游戏多开的bug,但是似乎还有
V,(小声)那个中文冒号其实是辅助确定后面的汉字是啥编码的,目前支持UTF8和GBK(或GB2312)
3、关于SyringeIH的更新:
(1)双击启动:
没什么说的,就是Syringe从此不需要bat启动了,直接双击即可。
如果想要调整启动设置,请编辑配置文件Syringe.json。
(2)日志升级:
把Syringe.log改成了中文,便于阅读。
加入了更加详细的信息。
如果发生IE,那么Syringe会提示报错的DLL及相对位置,便于排查由于扩展平台导致的报错。
SyringeIH在爆IE时会自动给出爆的位置附近的运行情况,可能的错误原因,爆的位置所在的库,爆的位置的函数完整调用栈。
可以在堆栈转储当中获取函数完整调用栈(准确率接近100%)来找到错误的上下文。
(3)扩展INJ格式 & 钩子优先级:
原来的格式:<十六进制地址> = <函数名>, <覆写长度>
新的格式:<十六进制地址> = <函数名>, <覆写长度>[, <优先级>][, <次优先级>]
后两个为可选项。如果填写了次优先级,则必须先填写优先级。
优先级判断规则:
I、比较优先级,值大的先执行
II、若优先级相等,比较次优先级,
(I)sub_priority非空的比sub_priority为空串的先执行
(II)两个都非空时,比较字典序,字典序大的先执行
如果不使用INJ,那么请使用DEFINE_HOOKEX和DEFINE_HOOKEX_AGAIN来加钩子,
详见SyringeEx的说明书。
(4)相对钩子:
可以把钩子按照相对地址挂到任何一个gamemd载入的dll上。
使用方法详见Syringe的说明书。
(5)其他功能详见Syringe的说明书
4、关于SDK的更新:
当前版本的SDK包括IH组件/SyringeIH/WIC三组SDK。
IH组件的SDK提供了二次开发包管理、注册、调用、查询、依赖处理等功能。
SyringeIH的SDK提供了扩展钩子、运行前信息等。
如一些例子:
GetOpCode获取/修改被覆盖的机器码
DisableOpCode取消执行原始机器码 EnableOpCode恢复执行原始机器码
GetActualOverriddenBytes获取实际覆盖的字节数
GetValidHookCount获取地址上有效的钩子数量
EnableHook运行时启用指定钩子 DisableHook运行时禁用指定钩子
EnableAllHooksAt启用某个地址的全部钩子 DisableAllHooksAt禁用某个地址的全部钩子
ReplaceHookFunction换掉某个钩子执行的函数 RestoreHookFunction恢复某个钩子执行的函数
ReplaceFunctionBody替换函数体 RestoreFunctionBody恢复函数体
GetSettingJSON获取设置 GetSettingText获取设置,但是文本
GetLoadedConfigJSON获取全部设置 GetLoadedConfigText获取全部设置,但是文本
HookContext:调用钩子
WIC的SDK是si的重磅巨作,包括了动态属性、经验系统、数值显示逻辑、Buff 系统的高度灵活的自定义组件。
如一些例子:
通过获取操作面板,可以直接从代码修改单位的部分动态属性,升级情况;
通过定义自定义的Buff类(继承SDK里面的SIBuffClass即可)来完全自定义Buff的作用和效果。
其他功能详见SDK及其说明书。
用户包Q&A:
Q1:安装EC后如何启动游戏?
A1:启动游戏双击Syringe.exe启动,无需bat,或安装后通过DTA启动
Q2:安装到什么地方?
A2:游戏根目录(gamemd所在的目录)
Q3:组件能否单独使用?
A3:目前版本,IH组件,WIC,Phobos,Ares都可以单独使用,注意单独使用时取走所有文件(如IH组件目前有2个dll和一个inj)
Q4:出现错误/bug而退出了怎么办?
A4:请先试图自己调试。SyringeIH在Syringe.log当中提供了丰富人性化的调试信息。如果调试不明白,加QQ群发出来反馈。
如果你要反馈,请附上EC的版本号,以及syringe.log debug.log,其他文件如果需要也可以上传。
Q5:能不能配合steam版红警使用?
A5:可以,但请在SyringeIH的设置(Syringe.json)的 "EnableHandshakeCheck": true,一行当中true改为false
Q6:如何支持reshade?
A6:只需要把reshade的文件(除了syringe.exe)全部覆盖到装好EC的游戏目录即可让reshade工作。
Q7:装了EC之后能不能装Kratos?
A7:可以的,Kratos和EC基本上没有兼容性问题(感谢Flactine测试)。如果确实出现了不兼容的情况,烦请反馈到QQ群。
开发包Q&A:
Q1:如何二次开发一个新的项目?
A1:可以抄开发包里面的EC_ExampleDll项目,或仿着自己写一个。
Q2:如何在已有的项目基础上二次开发?
A2:把SDK文件夹放入包含目录,按照IHLoader的说明配置DllMain,即可接入SDK,进行二次开发。
Q3:如何检查你加入的DLL是否配置好?
A3:配置好之后,打开日志,启动游戏,之后查询debug.log,检查IHCore : 开头的log条目。
下面是一个提示注册和依赖都正常的情况:(摘自一次测试的debug.log)
IHCore : Initialize Libs
IHCore : Loading Library "EC_ExampleDll"
IHCore : Loading Library "SIWinterIsComing"
IHCore : Add Dependency: EC_ExampleDll Requires SIWinterIsComing (Forced Sequence)
IHCore : Call in the dependency order :"SIWinterIsComing"
IHCore : Call in the dependency order :"EC_ExampleDll"
Q4:通过DEFINE_HOOK和DEFINE_HOOKEX定义的钩子不能被Syringe识别到怎么办
A4:(1)如果宏定义当中不包括section相关内容,写INJ文件(例如IHCore),或宏定义设置SYR_VER为2
(2)如果宏定义当中包括了section相关内容还是不行(玄学方法from天启酱)以VS为例:(不知道为啥可以这样)
项目属性->C/C++->优化->启用内部函数,选择是
项目属性->C/C++->常规->多处理器编译,选择否
Q5:PDB文件是做什么的?
A5:PDB可以用来在IDA逆向查错时恢复符号,便于理解代码。
Q6:如何让你的插件依赖于另一个插件时正常工作?
A6:在依赖列表里面添加一个InitDependency对象,其4个参数分别为:
依赖的包的名字,请求的包的当前版本,请求的包的所需最低版本,是否要求载入顺序(即被依赖的是否需要先加载)
参数2、3可以填DoNotCheckVersion来跳过版本检查。例如,下面为EC_ExampleDll当中对WIC的依赖。
InitDependency MyDependency[1] =
{
{"SIWinterIsComing",DoNotCheckVersion,WIC_LIBRARY_VERSION,true}
};
版本信息:
主版本:R1
构建:240908A
组件版本:
SyringeIH:0.2_240908A
IHCore:0.3_240908A
IHLibList:0.1
Ares:3.0p1
SIWinterIsComing:0.0.9 发行版
Phobos:Phobos-b43+3_8 (公版+茶酱+麻酱)
制作者名单:(排名不分先后)
主要作者:钢铁之锤,Sidoupiar,航味麻酱,绯红热茶,头猫
图标制作:迪克凯特
测试团队:Sovietianqi,GDI,长乐未央,澣骦零星 ,Forever ‖ 圣洁 ,Flactine,九千天华
特别鸣谢:Ares平台制作组,Phobos平台制作组
下载链接: https://pan.baidu.com/s/19eKSnvXt_9tF89QHGztMLA?pwd=hz38
提取码: hz38
以后所有期的下载链接都一样。
本期的文件为:
插件:万物互通_R1_240909A.exe
如果安装包无法使用的话,请通过以下压缩包安装:
万物互通_R1_用户包_240908A.zip
万物互通_R1_用户包_240908A.zip
reshade 2023.3.7z
EC的后续补丁基本上就结束了,后续更新烦请等下一个大版本。
大家想要什么功能和支持尽管在下面发出来,后续的hotfix也在这个帖子里面。
|
|