找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 安安静静的

[已解决问题] [疑似BUG]原版导弹精英级bug

[复制链接]
发表于 2024-12-14 11:15:32 | 显示全部楼层
本帖最后由 Noble_Fish 于 2024-12-14 05:36 编辑
砂糖 发表于 2024-12-14 02:08
你试下任务地图ini写一条[E2]TechLevel=11,再[#include]一个简单ini,写一条[E2]TechLevel=1,进去看看动 ...

既然你都测试了那你应该也已经知道直接include个rulesmd.ini并不会报错了
而优先级问题自然是遵循rulesmd.ini及其子ini中的设置,毕竟地图里+=rulesmd.ini就相当于把rulesmd.ini整个写入了地图里,而作为子ini的rulesmd.ini其子ini依旧有更高的优先级别,这里只要摆脱rulesmd.ini是宏观ini文件的惯性思维而单纯理解为一个特定文件名的地图内置ini的子ini来理解就可以很简单的理清楚
例如地图中定义了
  1. [#include]
  2. +=rulesmd.ini
  3. [M60]
  4. Range=-2
复制代码
那么rulesmd.ini及其子ini(地图的子子ini)中的值会覆盖地图这一级的值,依旧写回原值
而想要解决也可以根据[#include]读取顺序为地图再额外#include另一个ini文件,只要层级上优先级更高即可,例如我自己这里地图中使用
  1. [#incude]
  2. Include=rulesmd.ini
  3. Config=maptest.ini
复制代码
使用maptest.ini这个外部文件充当原先地图内置的作用来覆盖rulesmd.ini中的数据,并且这样做也就不用担心地图编辑器每次保存更改地图都得让文本编辑器重新Load文件(并且排序被打乱)了,当然如果rulesmd.ini中套了多层,那么这个maptest.ini想要覆盖某层的数据也必须自身达到那么多层,这个可以直接给maptest.ini自己多套几层来解决,例如
  1. ;地图
  2. [#include]
  3. Include=rulesmd.ini
  4. Config=debug/mapincludestack0.ini
  5. ;mapincludestack0.ini
  6. [#include]
  7. 1=debug/mapincludestack1.ini
  8. ……
  9. ;mapincludestack[X].ini
  10. [#include]
  11. test=maptest.ini
复制代码

*此处丢到子目录纯粹为了让根目录整洁一些

当然我原楼给出的示例也有一个小问题是地图内置的情况下并不支持+=,+=实际上是按照<任意不重复字符>=<值>的注册规则执行了,而不是Ares的+=自动划算实际序号
此外有种特殊情况是[Colors]表出现在地图中导致的问题,不过无论是EA上架Steam更新的gamemd TUC还是我现在YR1.001带拓展引擎都没有再遇到过,之前专门尝试过复现问题,结果就像是我记错了一样一直复现不出来
其实这样写一开始到并不是为了解决一些单位和全局标签在存在Section名的情况下不重新定义会失效的问题,而是我以前在还没有出现DynamicPatcher用不上动态INI时常用任务地图借助地图内置INI每次重进任务都重载一次的机制搭配这种方式来达到一种只需要ESC->放弃->重新开始即可更新INI参数的效果,即便是原版引擎环境下或者去TS玩也是一个纯地图地形文件用于地编(在我能够用Excel编辑地形之前)+一个触发和小队文本文件或手写或接入Excel来书写Trigger与Team+rules(md).ini使用外部工具合并成游戏所需要读的那个地图文件来做(毕竟没有#include了)这个效果,个人感觉还是挺好用的。毕竟就算后来有了DynamicPatcher那么在它所对口的带拓展引擎YR环境下也并不能支持所有新引擎添加的语句,而地图子ini方向上的拓展却是依旧可以靠重进地图来更新的
当然这也有些小代价,例如PhobosBuild#29时就有一些硬编码行为可以通过宏观INI与地图内置INI/模式INI的不同读取优先级顺序与生效完整度来跨越Phobos官方引入的Bug级硬编码,如果直接用了我这样的方式把宏观INI与地图子INI合并到了同级,那么也就没有这个玩法了,或者说这个玩法只能是某次重载后地图子ini已经是更新完的与宏观INI相同的数据而程序启动时还用的老的宏观INI数据而导致的差异(事实上由于数据并不相同所以这时也本来就已经把合并到同级的宏观INI与地图子INI又拆分回了2层),而无法再作为一种地图层面打进去的读取方式补丁用了
回复

使用道具 举报

发表于 2024-12-14 13:00:32 | 显示全部楼层
Noble_Fish 发表于 2024-12-14 11:15
既然你都测试了那你应该也已经知道直接include个rulesmd.ini并不会报错了
而优先级问题自然是遵循rulesmd. ...

你这一层楼干货挺多的,v3和无畏弹头的bug我一开始也总是不知道怎么回事,我也是想试着修下bug,用了你的原楼复制代码,结果进游戏确实弹窗了,的确有点不明所以,我后来想了一下应该是地图ini里不能再写关于rulesmd.ini的任何代码,于是用了2楼的代码写到ini里,不过你这楼这个办法确实更完美
回复

使用道具 举报

发表于 2024-12-14 13:33:59 | 显示全部楼层
本帖最后由 Noble_Fish 于 2024-12-14 05:37 编辑
砂糖 发表于 2024-12-14 05:00
你这一层楼干货挺多的,v3和无畏弹头的bug我一开始也总是不知道怎么回事,我也是想试着修下bug,用了你的 ...

那你往地图里写2楼那些还是楼主引发问题所内置的部分可也都属于“关于rulesmd.ini的任何代码”(笑)
可以尝试追踪一下问题源头,目前宏观rules中内置会出问题的我只遇到过[Colors],然而我现在甚至无法复现
当然这个追踪的是确保宏观rules中写正常搬到地图内置就炸的那种

至于V3无畏弹头还是光棱塔递光掉百分号那些都是地图内置读取的问题,虽然拓展引擎可以修掉Pip之类当时已知的问题,但是像ExtraUnitLight、EliteAirstrikeTeam等等后来才发现的问题依旧层出不穷,引擎上的修补依旧要交给后来人(虽然也有他们修复方式的问题)直接上整段rules读进去相当于全在地图层面再写一遍则是通法,只要能不炸那么这个就是最好用的

*另:11楼链接地址错误已修复,现在可以正常跳转到正确的帖子而不再是论坛主页
回复

使用道具 举报

发表于 2024-12-14 17:49:11 | 显示全部楼层
Noble_Fish 发表于 2024-12-14 13:33
那你往地图里写2楼那些还是楼主引发问题所内置的部分可也都属于“关于rulesmd.ini的任何代码”(笑)
可以 ...

不是,是加了[#include]这个,地图ini就别写rules这些东西了,写了也全部无效,至于[Colors],你说的注册顺序问题?你要把对应要的阵营颜色放到6号11号13号
回复

使用道具 举报

发表于 2024-12-14 17:58:37 | 显示全部楼层
砂糖 发表于 2024-12-14 09:49
不是,是加了[#include]这个,地图ini就别写rules这些东西了,写了也全部无效,至于[Colors],你说的注册 ...

那也只是换了写法,况且#include并不会把地图那一层的参数强写成未定义的默认值,rules中没写的内容依旧可以生效,因此规则不会改变,不至于像你说的“进游戏确实弹窗了”,弹窗了必然有纯#include之外的原因,所以需要找一下。[Colors]是给你一个手动引发FE或许可行思路,因为已知地图内置[Colors]新增一种颜色并给一个所属方使用是会炸的,但是我这里现在复现不出来了,然而你控制变量排查问题的时候依然可以考虑它
回复

使用道具 举报

发表于 2024-12-14 18:33:51 | 显示全部楼层
Noble_Fish 发表于 2024-12-14 17:58
那也只是换了写法,况且#include并不会把地图那一层的参数强写成未定义的默认值,rules中没写的内容依旧可 ...

那我就不懂了,控制变量排查问题是件肝疼的活,[Colors]我是在rulesmd.ini按原版给的顺序注册好添加好,再用地编给,其他问题没研究过,反正我感觉加的功能越多,代码搞得越复杂,莫名奇妙的bug或者莫名其妙弹窗的概率越大,火卫我现在就偏向于不用开发版
回复

使用道具 举报

发表于 2024-12-14 18:39:48 | 显示全部楼层
砂糖 发表于 2024-12-14 10:33
那我就不懂了,控制变量排查问题是件肝疼的活,[Colors]我是在rulesmd.ini按原版给的顺序注册好添加好, ...

自己合PR自己修也彳亍口牙
回复

使用道具 举报

发表于 2024-12-14 19:03:40 | 显示全部楼层
砂糖 发表于 2024-12-14 10:03
这么简单的逻辑,都讲这么直白了,为什么你会觉得[#include]字段不属于地图ini?我很纳闷新人都懂的简单 ...

哦,地图内include,没看清楚抱歉233
那就是地图内Include,地图ini,rules内include,rules内ini这个优先级顺序
读取的话正好反过来
至于你说的include塞rulesmd导致弹窗我这没测出来,你看看是不是rules或者地图ini动了什么东西了
优先级问题的话可以在地图include多写俩,留个文件让他优先级比rulesmd还高就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛 |网站地图

GMT+8, 2026-4-20 21:58 , Processed in 0.617276 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表