原神電腦版【官服-B服-國際服】換服/邏輯/手搓啟動器簡析(非教程)

寫在前面
①最后修改于2022/12/23?游戲版本3.3 啟動器版本2.22.0
②僅從功能出發(fā),分析一下流程,不專業(yè)見諒
③下文中Lconfig特指啟動器配置文件、Gconfig特指游戲配置文件,實際文件名皆為config.ini,Lc.xxx特指啟動器配置文件[launcher]組相應(yīng)參數(shù)、Gc.xxx特指啟動器配置文件[General]組相應(yīng)參數(shù);參數(shù)使用藍(lán)色,路徑文件使用橙色,小節(jié)使用綠色

§1. launcher-啟動器
鑒于玩家想通過安裝多個啟動器以實現(xiàn)渠道切換卻卡在第一步,就先從啟動器說起...

§1.1 啟動器的安裝
首先從各渠道官網(wǎng)下載安裝包,下哪個都差不多但國際服下載相關(guān)功能可能網(wǎng)速比較慢
由安裝軟件常識:原神安裝包相當(dāng)于一個自解壓的壓縮文件,可以直接提??;一般都是直接運行安裝,其位置取決于注冊表【HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\原神(Genshin Impact)】項中InstallPath關(guān)鍵字鍵值,若不存在該項則取決于【HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion】項中ProgramFilesDir關(guān)鍵字鍵值
直接安裝的文件夾名稱只能是Genshin Impact,后期可以自行更改移動,如果在同一路徑重復(fù)安裝啟動器,就會因為重名文件夾把原來的啟動器頂?shù)舸蟛糠治募?span id="s0sssss00s" class="color-yellow-04">Lconfig;同理,桌面和開始菜單中的快捷方式也因為同名被頂?shù)?,即使你已?jīng)修改過了路徑;注冊表略有不同,國服為原神,國際服為Genshin Impact,大渠道之間不會被頂?shù)?,官服B服仍會

§1.2 Lconfig-啟動器配置文件
Lconfig-啟動器配置文件,即啟動器根目錄下也就是launcher.exe所在目錄里的config.ini文件
打開啟動器時未檢測到Lconfig或其[launcher]組內(nèi)容不全時,會自動創(chuàng)建該文件夾或填入?yún)?shù),以下是各渠道的初始Lconfig內(nèi)容,大部分不具有參考價值,下面淺說一下各參數(shù)作用,具體功能放在§1.4
1. 可更改有用參數(shù)
①game_install_path-游戲安裝目錄,后文使用中文名稱
默認(rèn)為啟動器根目錄下.\Genshin Impact Game,中文路徑必須轉(zhuǎn)成十六進制以\x的格式寫入,否則會亂碼
②channel-渠道
默認(rèn)為1,國服中B服為14、官服為1,國際服為1
僅在B服啟動器&Lc.channel=14時下載B服sdk

2. 可更改無用參數(shù)
①cps-渠道備注(channel_postscript)
完全沒有用處,僅備注
②sub_channel-子渠道
默認(rèn)為1,對于啟動器幾乎沒有用處
僅在國際服啟動器&Lc.sub_channel=3時下載epicsdk

3. 不可更改參數(shù)
①game_dynamic_bg_name-游戲背景圖片名稱
獲取自§1.3.3 data.adv.background
②game_dynamic_bg_md5-游戲背景圖片哈希
獲取自§1.3.3 data.adv.bg_checksum
③game_start_name-游戲啟動名稱

4. 其他參數(shù)
大部分不做解釋,在啟動器設(shè)置內(nèi)有圖形界面
①launcher_showup_type-是否退出游戲時彈出
②speed_limit_enabled-是否開啟下載限速
③speed_limit_size-下載限速數(shù)值
④is_first_exit-是否首次退出
⑤exit_type-退出類型
⑥game_screenshot_clicked-是否點擊過截圖
⑦game_screenshot_tip_visible-是否顯示查看截圖彈窗

§1.3 啟動器的GET請求
單分出去了一個專欄,內(nèi)容稍微詳細(xì)一些,避免此處過于臃腫

代碼塊內(nèi)依次為官服、B服、國際服
對應(yīng)的launcher_id,key:18 eYd89JmJ,17 KAtdSsoQ,10 gcStgarh
channel_id,sub_channel_id讀取自Lconfig
可以很明確的看到官服&B服請求URL是相同的,僅參數(shù)有區(qū)別,launcher_id決定最多獲取到什么,resource中channel_id&sub_channel_id決定能獲取到什么,下面放的都是最簡參數(shù),國際服sub_channel_id=3目的為獲取EPICsdk
1.getLatestRelease 獲取啟動器更新
key隨版本更新,僅記錄一組
2.resource 獲取游戲資源
3.content 獲取顯示內(nèi)容
4.changelog 獲取啟動器更新日志
5.protocol 獲取游玩協(xié)議
6.plugin 獲取補?。??)
{{device_id}}待察

§1.4 啟動器的主要功能
1. 安裝vc運行庫&補丁
運行安裝包時沒有該環(huán)境就會自動安裝Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.27.29016也就是根目錄里的vc_redist.x64.exe
補丁大概從§1.3.6獲取,非win7系統(tǒng)請求沒有結(jié)果(?)

2.啟動器版本更新
若§1.3.1 data.has_update=true即需要更新(?),更新時不改變Lconfig

3.界面顯示內(nèi)容
依照§1.3.3發(fā)送請求,返回背景圖片信息,海報、公告等(除B服啟動器)

4.判斷游戲存在&獲取/更新游戲
在游戲安裝目錄下,存在名為YuanShen(GenshinImpact).exe的文件,且存在Gc.game_version,則判斷為存在游戲,使用另外一個文件夾功能基于此判斷
若不存在游戲,根據(jù)§1.3.2 data.game.latest內(nèi)容下載最新版游戲本體&語言文件(系統(tǒng)語言)&sdk文件,僅在B服啟動器&Lc.channel=14或國際服啟動器&Lc.sub_channel=3時下載B服sdk或EPICsdk,下方更新同理;獲取游戲時最后一級目錄名稱必須為Genshin Impact Game
若§1.3.2 data.game.latest.version與Gc.game_version相差兩個小版本以內(nèi)進行游戲版本更新(跨大版本待驗證),大于兩個版本將獲取游戲;若§1.3.2 data.sdk.version不等于Gc.plugin_sdk_version,進行sdk版本更新

5.下載&解壓
獲取游戲下載2-3個文件分別為,YuanShen(GenshinImpact)_{verion}.zip,Audio_{lang}_{verion}.zip,B服sdk或EPICsdk(1f0f2988a4dce2ffde7a9bf2cf03f70a_6649586421998027419.zip或12e811ff46561379abff7282a7cd8a10_4290195114874450168.zip)其中游戲本體為每10G分卷壓縮,僅在B服啟動器&Lc.channel=14或國際服啟動器&Lc.sub_channel=3時下載B服sdk或EPICsdk,解壓同理
下載URL來自§1.3.2 data.game.latest,sdk來自§1.3.2 data.sdk,更新來自§1.3.2 data.game.latest.diff,預(yù)下載來自§1.3.2 data.pre_download_game
每下載完成一個壓縮包進行第一次校驗,等待全部文件下載&校驗完成開始解壓,全部解壓全部后,再進行對所有文件的第二次校驗
更新會多一步合并資源,合并時先根據(jù)deletefiles.txt刪除過時文件,再使用hpatchz.exe根據(jù)hdifffiles.txt直接進行增量更新,不判斷原文件版本

6.校驗&一鍵修復(fù)
校驗即比較文件的md5碼,失敗將會重下,第一次校驗的的壓縮包md5碼來自§1.3.2,第二次校驗的文件md5來自壓縮包內(nèi)的pkg_version,Audio_{lang}_pkg_version,sdk_pkg_version,僅在B服啟動器&Lc.channel=14或國際服啟動器&Lc.sub_channel=3時進行對sdk的校驗
第二次校驗等同于一鍵修復(fù)功能,非注明本文校驗都以第二次為準(zhǔn),一鍵修復(fù)會檢測游戲安裝目錄下是否存在pkg_version,否則按鈕置灰無法使用
校驗過程中如果很多文件(?)都未校驗成功將直接重新獲取游戲,個別文件失敗僅重下該文件,后綴_tmp,單文件下載地址來自§1.3.2?.data.game.latest.decompressed_path
校驗完成后對Gconfig進行處理,將Lc.channel,Lc.sub_channel,Lc.cps覆蓋到Gc.channel,Gc.sub_channel,Gc.cps,更新Gc.game_version&Gc.plugin_sdk_version參數(shù),并將[General]組參數(shù)置頂,清除無組參數(shù)

7.自動清除游戲特定殘留文件
文件列表來自§1.3.2 data.deprecated_files,包含一些dll和sys文件
當(dāng)Lc.channel=14時,不刪除../YuanShen_Data/Plugins/PCGameSDK.dll,也就是B服SDK

§2 Game-游戲

更新中...
以下為過去內(nèi)容

§3 游戲&啟動器的問題orBUG
特指本文能解釋的問題,其他問題見下方專欄

§3.1?啟動器的BUG&問題
1、打開時報錯0xc000007b或0xc00000e5
前者為不存在【Microsoft Visual C++ 2015-2019 Redistributable (x64) 】運行庫;后者可能為運行庫版本有問題,大概率伴隨游戲driverError
2、自動覆蓋Lconfig參數(shù)
國服啟動器(國際服未發(fā)現(xiàn)且無影響)以launcher.exe為進程名啟動后,打開啟動器時自動覆蓋以下參數(shù)到Lconfig[launcher]組
3、下載時網(wǎng)絡(luò)/校驗/解壓錯誤
下載安裝過程中,可能出現(xiàn),網(wǎng)絡(luò)錯誤、校驗錯誤和解壓錯誤,其中校驗錯誤會直接刪除文件,另外兩個保留文件
網(wǎng)絡(luò)錯誤大概率是真的網(wǎng)絡(luò)有問題,也可能是已存在同名zip或下載進度丟失;校驗錯誤可能是RAM、ROM還有網(wǎng)絡(luò)出現(xiàn)問題,除非有CRC校驗錯誤,游戲自行解壓后是可以正常使用的;解壓錯誤是因為啟動器修改zip_tmp后綴為zip時已存在同名文件等原因
還有一個出錯是因為磁盤格式Fat32,導(dǎo)致單個文件最大4G,下載會失敗不記得報錯是什么了

§4?未命名板塊
§4.1 評價網(wǎng)上的各種換服方法
PC版官服B服換服教程一搜一大堆,大部分是炒冷飯,不談優(yōu)缺點,自己都沒有理解原理,也沒有創(chuàng)新,問他換服相關(guān)問題也不知道是怎么產(chǎn)生的怎么解決有也麻煩,為了流量,好心辦壞事?不得而知。少量有新意的方法值得肯定,但往往換服過程不盡人意吧
國服國際服互轉(zhuǎn)不多說,就是一個簡單的替換文件;官服B服互轉(zhuǎn),無論是何種方式,一定是直接或者間接修改了Gc.channel(,添B站sdk),全局性問題下文不寫
1、直接修改Gc.channel(,添B站sdk)
(1) 優(yōu)點:一般情況下熟練后效率較高,最直接的方法
(2) 缺點:小白不友好
(3) 可能遇到的問題:
?①修改需要管理員權(quán)限
?②偶爾的官服存在B站SDK報31-4302
?③啟動器執(zhí)行校驗后覆蓋參數(shù)
?④啟動器自行刪除B站sdk
(4) 有誤觀點
?①須同時修改Gc.sub_channel和Gc.cps
????需要taptap一直讓Gc.sub_channel=1即可,除Gc.channel其他都不需要動,說檢測作弊無稽之談
?②須同時修改Lconfig
????Lconfig對渠道無直接影響,B服sdk被刪除也只需要使Lc.channel=14(除bug覆蓋參數(shù))
2、創(chuàng)建起始位置無Gc.channel=14的快捷方式,游戲安裝目錄Gc.channel=14并存在PCGameSDK
(1) 優(yōu)點:一般情況下效率高
(2) 缺點:小白不友好
(3) 可能遇到的問題
?①偶爾的官服存在B站SDK報31-4302
?②啟動器執(zhí)行校驗后覆蓋參數(shù)
?③啟動器自行刪除B站sdk
3、通過多次下載or復(fù)制,使有兩份不同渠道文件
(1) 優(yōu)點:兩份文件互不干擾
(2) 缺點:下載更新耗時長、占用空間大
(3) 可能遇到的問題:啟動器快捷方式覆蓋
(4) 有誤觀點:兩份文件須在不同盤,實際上路徑不同即可,說這話的安裝軟件都沒玩明白
4、換服程序
(1) 優(yōu)點:一般情況下效率最高,同時如果作者懂可以規(guī)避一些簡單的bug
(2) 缺點:要額外下載,程序體積問題等
(3) 可能遇到的問題:系統(tǒng)bug,程序bug
5、我做的換服腳本(夾帶私貨)

(1) 優(yōu)點:一般情況下效率最高,可規(guī)避二級地址解析錯誤和官服存在B服SDK導(dǎo)致的31-4302,還可解決未知原因?qū)е碌腸onfig不讀取,壓縮文件體積2.6MB,其中和核心文件大小11KB,B服sdk占5.3MB
(2) 缺點:要額外下載(但提供藍(lán)奏云),x.x.0版本往往不穩(wěn)定
(3) 可能遇到的問題:
?①被殺軟攔截
?②mshta.exe文件有問題導(dǎo)致腳本無法運行

待更新~~~
下方為上一版的內(nèi)容,新版沒更新完全時會一直保留
Launcher-啟動器
從啟動器說起...
安裝時提供自定義選項,可自選安裝路徑。可以同時安裝官/B/國際服啟動器,唯一前提是路徑不同,路徑相同會覆蓋(,將啟動器單純的復(fù)制可能會導(dǎo)致一些問題,沒有實測)。覆蓋安裝的時候不會刪除原有config.ini[launcher] 和【游戲安裝目錄】下文件。
當(dāng)【游戲安裝目錄】存在YuanShen.exe(文件名正確即可,國際服為GenshinImpact.exe)和config.ini(內(nèi)容最少為[General] game_version=當(dāng)前版本號,具體見下文config.ini[launcehr]用途)時即判定已安裝游戲。在啟動器2.15.4.0版本,啟動器打開后會有較長時間用來檢測更新,在檢測各項功能是最新版后不會再次觸發(fā)檢測
對比三種啟動器沒有很多差異。B服與官服區(qū)別僅在launcher.exe,uninstall.exe,Update.exe和config.ini[launcher];國際服除了上述三個還有7z.exe和一些dll不同
簡單看一下啟動器配置文件config.ini[launcher]的內(nèi)容
cps用途不明,channel渠道,sub_channel子渠道,game_install_path游戲安裝路徑,game_dynamic_bg_name/md5背景圖片及校驗,game_start_name主程序名稱,(is_first_exit退出彈窗,exit_type退出模式,speed_limit_enabled下載限制開關(guān),speed_limit_size下載限速值)
channel:僅在使用B服啟動器且config.ini[launcher]中channel=14下,獲取游戲或config.ini[General]中plugin_sdk_version值不為3.3.0(包括不存在key)時會下載解壓安裝B服額外的包,非B服啟動器無論怎么改參數(shù)都不會自動下載與安裝B服額外的包
game_install_path:首次獲取游戲時,游戲安裝路徑必須在../Genshin Impact Game下。有游戲本體后可以隨意更改,也可使用設(shè)置中-本地文件-查找游戲功能修改路徑
game_start_name:寫在配置文件中看似可以自定義,實則,主程序名稱必須為YuanShen.exe(國際服為GenshinImpact.exe)
其中cps、channel、sub_channel會在安裝與更新時覆蓋config.ini[General]中對應(yīng)的參數(shù)

右側(cè)選中的為B服原神額外的包,僅能在B服啟動器下載得到,內(nèi)有sdk_pkg_version和PCGameSDK.dll
啟動器的一鍵修復(fù)。校驗修復(fù)需要游戲目錄下的 pkg_version 和 Audio_{lang}_pkg_version,該功能可以補全缺失的文件,用于誤刪等,大部分情況下一鍵修復(fù)并沒有用處?。一鍵修復(fù)必須要有pkg_version,沒有這個將不出現(xiàn)修復(fù)按鈕

B服多一個sdk_pkg_version(用于補全PCGameSDK.dll),但類似上文channel參數(shù)與B服啟動器,僅在B服啟動器且config.ini[launcher]中channel=14且存在pkg_version時會校驗修復(fù)
Game-游戲本體
游戲本體的下載與安裝。在啟動器點擊獲取游戲開始下載,下載后進行一次校驗,然后解壓再校驗,最后生成一個config.ini[General],cps、channel、sub_channel繼承自config.ini[launcher],game_version為當(dāng)前版本號(,plugin_sdk_version為PCGameSDK.dll版本號,安裝B服額外的包時自動添加參數(shù)),更新時類似。
往往檢驗的速度是比較慢的,尤其是機械硬盤??梢缘认螺d完成后,直接關(guān)掉啟動器,把zip_tmp后綴改成zip,手動把所有下載文件解壓到當(dāng)前文件夾,最后新建一個文本文檔,重命名為config.ini,內(nèi)容如下(圖為用啟動器啟動游戲需添加的最少參數(shù))
對比三個游戲本體同樣沒有很多差異。
B服和官服的pkg_version、Audio_{lang}_pkg_version完全一致,B服多一個sdk_pkg_version,那么差異就是其中寫的PCGameSDK.dll

而國際服與國服只有Audio_{lang}_pkg_version相同,pkg_version內(nèi)容不同,共計42處(有兩處是mhyprot3.Sys.bak和mhyprot2.Sys.bak,沒有計算在內(nèi))

所以官服B服切換只需要修改config.ini[General](,官到B額外加一個PCGameSDK.dll),而國服國際服切換要覆蓋文件(,或用國際服的文件校驗直接修復(fù)),并刪除PCGameSDK.dll
覆蓋文件下載鏈接(請核對版本):https://pan.baidu.com/s/1D-gEfE2QLV0fA4Ut3oVfiQ?pwd=yowv;QQ群【915926721】文件也可下載:群文件/原神相關(guān)Genshin/[版本]國服轉(zhuǎn)國際服.zip&[版本]國際服轉(zhuǎn)國服.zip
簡單看一下初始游戲配置文件config.ini[General]的內(nèi)容
cps用途不明、channel渠道、sub_channel子渠道、game_version游戲版本、sdk_versionPCGame.dll版本
game_version:用于啟動器檢測下載更新
plugin_sdk_version:見啟動器分析部分
channel、sub_channel:國服見下圖;國際服channel=1

當(dāng)檢測不到配置文件時,國服默認(rèn)啟動官服。也就是說國服原神程序的默認(rèn)參數(shù)為channel=1,sub_channel=1
啟動過游戲后,三個服在Data目錄下生成【Persistent】文件夾,里面有一些資源文件,內(nèi)容一樣,是在加載游戲時的搭橋界面下載的;官服和國際服在Data目錄下生成WebCaches文件夾;B服在【YuanShen_Data/Plugins】下生成fail3dlog.db 和?license.txt。這些都是后話了
最后是一些奇怪的機制,當(dāng)游戲安裝目錄中的文件有丟失、損壞、多余,系統(tǒng)環(huán)境異常等,原神就會出現(xiàn)各種問題。有二級地址解析錯誤、數(shù)據(jù)異常31-4302、DllNotFoundException,游戲閃退打不開,登錄不了等,因為說起來比較繁瑣,比如如何界定哪些文件會出問題?類似的原因產(chǎn)生了不同的報錯等等,這里新寫了一個專門來解決BUG的專欄:cv14772737,同【寫在前面③】

結(jié)論咳咳,不想寫了,上面已經(jīng)很詳細(xì)了

如果這對你有幫助的話,
就給個三連+關(guān)注吧QAQ~