研究人:LiuJiewenTT <liuljwtt@163.com>
2024-02-05:
通过比较%APPDATA%\..\Local\Game\Saved
在启动国际服游戏本体前后的变化,可以确认以下信息:
xg_111111639
xg_111111680
Logs
作为运行日志出现变动可以理解。CrashReportClient
暂且不管。Config\WindowsNoEditior
出现大量变动,十分可疑。
Engine.ini
和Game.ini
出现了文件大小变化。PersistentDownloadDir
中的User.settings
时间戳被更新,内容未确认。SaveGames
中新增XGSDK_SAVE_GAME.sav
此外,如果切回国服发现要重新下载资源,但是明明文件都在,那可能是由于data\manifest.json
内容缺失导致的。重新下载时,通过vscode观察此文件,可以发现为文件末尾一直在追加内容,而国际服目录的不会同步更新,可以确认是由于曾经尝试国际服启动器共用国服资源导致的内容列表数据丢失。所以data\manifest.json
文件也是很重要的,注意备份。
此外再额外提一嘴,国服国际服的资源版本确实不太一样,在今日的实验中,在已经成功启动了最新版国际服的前提下,发现国服版本已经是
1.5.0.143
,然而国际服还是1.5.0.120
。
随后我成功启动了国服(B服),发现在排除Logs
(日志)和CrashReportClient
之后,发生变化的有:Config\WindowsNoEditor\Engine.ini
(有文件大小变化)。
另外,由于再次进入时可能是未同意协议的状态,同意且登录后发现PersistentDownloadDir\
目录下的startup.settings
和User.settings
发生时间戳变化(未确认内容)。而Config\WindowsNoEditor
变化如同after-2.txt
和after-3.txt
一般,其中出现文件大小变化的有:Game.ini
和Input.ini
。
由于此时暂未完成国际服登录,故暂时不能确认Config\WindowsNoEditor\Game.ini
是否能被正常修改。而Config\WindowsNoEditor\Engine.ini
想必是启动游戏但未登录就已经用到了,从上面的成功启动国际服游戏本体和成功启动国服(B服)游戏本体可以基本认为此文件不造成无法启动的冲突。
登录国际服后,SaveGames
下XGSDK_LOGIN_USER.sav
存在修改。注册过程会打开页面,对应的webcache
下多出Visited Links
,其下的Cache
也有变化。此外就是xg_111111680
出现改变,这个文件夹是属于国际服的文件夹,没什么好研究的。
综上,结论下早了。%APPDATA%\..\Local\Game\Saved
在2024年已不存在冲突,国服国际服现今仍然不可以都安装在同一台电脑上属于谣言。
现在已经不能登录国服了,看来%APPDATA%\..\Local\Game\Saved
还是存在冲突的。
经测试知:SaveGames\XGSDK_LOGIN_USER.sav
包含官服账号有关信息,但与B服无关。移除此文件会是官服需要重新登录账号,而B服不受影响。同时,移除此文件并不会改变“卡在’权限识别中’的问题”。
这是Conifg\WindowsNoEditor\Game.ini
的内容:
[Distribution] VoiceLanguage=Chinese CheckLanguageTip=Set xgsdk_language=zh-Hans
显然也没什么特别。
Config\WindowsNoEditor\Input.ini
看起来全是键位绑定的信息。试过了,也不是它。
这是Config\CrashReportClient\*\CrashReportClient.ini
的内容:
[CrashReportClient] bHideLogFilesOption=false bIsAllowedToCloseWithoutSending=true CrashConfigPurgeDays=2
显然也没什么特别。
这是Config\WindowsNoEditor\Engine.ini
的部分内容:
[Core.System] Paths=../../../Engine/Content Paths=%GAMEDIR%Content Paths=../../../Game/Plugins/UnLua/Content Paths=../../../Game/Plugins/GameEventSystem/Content Paths=../../../Game/Plugins/GameTable/Content
看起来和加载组件有关,我试一下。文件的末尾有一个section只在运行时出现,退出就被删除。通过比较。奇怪的是通过官服重新生成的的文件中反而没了
Paths=../../../Game/Plugins/AntiHook/Content
,而是Paths=../../../Game/Plugins/CaptureTool/Content
,此外还少了Paths=../../../Game/Plugins/Designer/TPS_Survivors/Content
,Paths=../../../Game/Plugins/CaptureTool/Content
和Paths=../../../Game/Plugins/XGSDKSeasun/Content
。但是这个文件不解决问题。
这是PersistentDownloadDir
的startup.settings
和User.settings
的部分内容:
CheckSelectVoice Check Voice 1.0 Music 1.0 Sound 1.0 Master 1.0 LoginBgId 1 Login.CachedLoginServerID 3002
这个
Login.CachedLoginServerID
有点可疑,我试试。KEY VAL PlayerSetting_2 [[6],[null,null,null,1,2,1,3,3,2,2,200,2,1,1,300,1,3],[0,8]] GachaTip 1 PlayerSetting_7 [] PlayerSetting_1 [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[1011.0],null,null,null,[1],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[50]] PlayerSetting_3 [] PlayerSetting_4 [] PlayerSetting_6 [] PlayerSetting_8 [] TEAM_RULE_1.1.1.2011_10102 [[1,101002]] TEAM_RULE_1.1.1.2011_10103 [[1,101002]] TEAM_RULE_1.1.1.2011_10104 [[1,101002]] NOTICE_SAVE_HEAD_804228300 1 NOTICE_SAVE_HEAD_-691779882 1 TEAM_RULE_1.1.1.2011_10105 [[1,101002]] TEAM_RULE_1.1.1.2011_10106 [[1,101004]] TEAM_RULE_1.1.1.2011_10107 [[1,101005]] TEAM_RULE_1.1.1.2011_10108 [[1,101005]] TEAM_RULE_1.1.1.2011_10109 [[1,101005]] NOTICE_SAVE_HEAD_1729244809 1 NOTICE_SAVE_HEAD_1317675782 1 NOTICE_SAVE_HEAD_592556732 1
成功进去了!刚才是两个文件都移除了,现在试试仅移除
startup.settings
是否正常。在此之前,贴出新的内容:CheckSelectVoice Check Sound 1.0 Master 1.0 Music 1.0 Voice 1.0 LoginBgId 1
KEY VAL PlayerSetting_2 [null,null,[0,1]] GachaTip 1 Activity_15403473_22 0 Activity_15403473_24 0 Activity_15403473_20 0 Activity_15403473_23 0
那个可疑的
Login.CachedLoginServerID
消失了。突然想起来,国服是不需要选择服务器的,但是国际服是要选择区服的,我想这就是为什么会像是在尝试连接国际服服务器一样(就像国际服用魔法进不去的时候一样出现权限识别中
)。可以推测,程序上没有给国服设定,或者说启动器自带一个服务器指针,但是如果文件中存在这个值,那就会改用文件中的服务器指针(ID)。至于为什么没有给国服作特判,想来是本来这么干的人就不多,另外也可能是预留未来增加国内区服或特别服务器的支持空间,这在编程的人员看来非常合适,反而加个特殊判定是不必要的。就像很多游戏不给转服一样,之所以还可以既上官服有上B服,大概正是因为没有在这里限定住写死。因为这个值除非不存在,且启动器有要求,否则是不会被修改的。故,依据此猜测,由于国服禁掉了选服功能,而国际服没有,所以国际服不会出问题,但国服就会出问题,因为那个修改服务器指针的功能被禁了!此外,那个选择初始服务器的逻辑,可能在于选服功能之外且允许被配置文件值覆盖,也可能在于设置初始服务器或切换到初始服务器的“初始化”函数/方法在换服功能中从而被顺带禁了。我写个可能的逻辑:定义:选择的初始服务器。此时应当等于启动器要求的值,(或:也即传入的参数)。 如果文件有对应值,改为对应值。 根据参数,如果允许(或检测到多个可用服务器选项): 调用选服功能,选服功能设定当前选择。选服功能会设定可用列表中的某一个为第二初始值(或者根本不会主动设第二初始值而默认空)。如果当前(函数外)值不在允许列表,则要求用户选择,完成服务器“指针/选项/柄”纠正。 若不被允许,则跳过。 继续运行,用户点击“开始游戏”,然后开始尝试连接服务器。
可以看到,在上面的逻辑中,“服务器选项纠正”这一逻辑被连带禁用,因为请求用户选择是被禁止的。
在思考这段逻辑的同时,我完成了测试,证明两文件仅需移除
startup.settings
即可恢复正常。
综上,罪魁祸首为:PersistentDownloadDir\startup.settings
文件中的Login.CachedLoginServerID
选项。