羣星編年史解析器v0.03更新!附原理解析

這幾天趕着把事件補了補,基本上是一個能用的狀態了,大家可以下載下來嘗試一下捏

(鏈接在評論區,有github等兩個鏈接方便大家取用)

github主頁

1.v0.03更新內容

  1. 事件的詞條從原先我用來測試的42條擴充至了87條,包括了3.14以前的全部起源,以及遊戲中的大部分事件(宣戰、勝利、諜報、科研等等),基本上已經可以用了

  2. 修正與增強:事件佔位符處理和實體生成邏輯小幅改進,提高生成連貫性。

  3. 增加了錯誤指令格式的處理

  4. 新增:命令行支持年度標記過濾選項(可選擇包含或過濾 timeline_event_year 年度標記條目)。

效果展示:

未開啓過濾

開啓過濾

基本上已經是一個可以使用的狀態了,歡迎大家多多使用,給我反饋,幫助我補全代碼

2.使用教程

本項目的使用教程在前篇v0.02的發佈和GitHub主頁上已經有了很詳細的論述,這裏就不再水文章了,大家可以參考前篇(傳送門:想看到自己的帝國史詩?羣星帝國時間線解析器v0.02發佈!

在v0.03版本中,增加了一個控制是否開啓過濾的功能,因此命令行的調用方式出現了一些改變,具體如下。

2.1 交互式命令行

在命令行中輸入

python stellaris_chronicle_generator_v0.03.py gamestate.txt

其中的gamestate.txt爲存檔txt名稱,則會啓動交互模式,命令行中,程序會詢問玩家帝國的名稱和是否過濾,用於程序的執行,如圖。

交互模式

2.2 通過命令行參數運行

在命令行中輸入

# 交互模式跳過提示(一次性輸入帝國名和包含標記選項

python stellaris_chronicle_generator_v0.03.py gamestate.txt "泰拉聯邦" yes

# 非交互僅指定帝國名(仍會使用默認包含年度標記,除非提供第三個參數) python stellaris_chronicle_generator_v0.03.py gamestate.txt "地球聯合政府"

# 指定不包含年度標記(適合生成更緊湊的編年史) python stellaris_chronicle_generator_v0.03.py gamestate.txt "地球聯合政府" no

則可以直接在本文件夾下解析產生結果。

2.3 錯誤指令處理

如果用戶在輸入時輸入了不合法的指令,則會拋出提示:

錯誤提示

直接複製其中的示例代碼運行即可,目前我還在想辦法將其修改得更低門檻,大家可以先期待着~

3.原理解析(代碼在文末,可以跳到文末直接獲取)

帖主其實是首先從遊戲的角度定位了這個時間線可能保存在文檔中,在遊戲過程中,大家可以觀察到這個帝國時間線系統實際上只有玩家有,在一局遊戲結束切換國家,或者使用代碼在遊戲過程中切換國家時,時間線都是重新生成加載的,因此,相關內容必然僅存在於玩家存檔裏。

在尋找後,定位到遊戲存檔內“timeline_events=”類下,具體組成如圖:

可以觀察到,該大類下的子類包括了事件(e.g.timeline_encountered_leviathan),對象代碼(data= { 0 39 }),時間代碼(date= "2207.01.01")。只需要實現在存檔中快速定位,查找,並根據代碼解析即可。

隨後的工作就是很常規的數據解析操作了。帖主是使用re包進行快速搜索定位timeline_events項,隨後使用一個非常樸實無華的大括號計數的方法找到了該類的結尾,在timeline_events類內使用正則表達式進行解析。

4.下一步更新計劃

考慮到溝槽的P社在9.22就要更新DLC,帖主非常擔心到時候大量的事件會無法解析,故此就沒有再進一步更新事件數量的打算。

目前,該項目的應用還是有一些門檻的,帖主決定還是先進行GUI界面的開發,打包成exe供大家更方便的使用(預計下週發佈!)

開發中

目前功能基本已經實現了,只不過動效和字體還是存在一些問題,請大家期待後續的更新!

最後,如果對大家有幫助的話,大家可以電電我的牛牛或者在GitHub上給我star一下嘛?

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com