Compare commits

..

2 Commits

Author SHA1 Message Date
c8d5446011 feat: UIGF-4.1 2025-10-06 15:44:42 +08:00
d8ff6c52a1 ci: update idmap script and add workflow 2025-10-06 15:28:52 +08:00
4 changed files with 12 additions and 436 deletions

1
.github/FUNDING.yml vendored
View File

@@ -10,3 +10,4 @@ liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: https://afdian.net/a/haisha

View File

@@ -1,6 +1,6 @@
{ {
"name": "star-rail-warp-export", "name": "star-rail-warp-export",
"version": "0.2.5", "version": "0.2.1",
"main": "./dist/electron/main/main.js", "main": "./dist/electron/main/main.js",
"author": "biuuu <https://github.com/biuuu>", "author": "biuuu <https://github.com/biuuu>",
"homepage": "https://github.com/biuuu/star-rail-warp-export", "homepage": "https://github.com/biuuu/star-rail-warp-export",

View File

@@ -115,16 +115,6 @@
"item_type": "光锥", "item_type": "光锥",
"rank_type": "3" "rank_type": "3"
}, },
"20023": {
"name": "嗤笑",
"item_type": "光锥",
"rank_type": "3"
},
"20024": {
"name": "残泪",
"item_type": "光锥",
"rank_type": "3"
},
"21000": { "21000": {
"name": "一场术后对话", "name": "一场术后对话",
"item_type": "光锥", "item_type": "光锥",
@@ -430,16 +420,6 @@
"item_type": "光锥", "item_type": "光锥",
"rank_type": "4" "rank_type": "4"
}, },
"21064": {
"name": "菇菇嘎嘎历险记",
"item_type": "光锥",
"rank_type": "4"
},
"21065": {
"name": "今日好手气",
"item_type": "光锥",
"rank_type": "4"
},
"22000": { "22000": {
"name": "新手任务开始前", "name": "新手任务开始前",
"item_type": "光锥", "item_type": "光锥",
@@ -470,11 +450,6 @@
"item_type": "光锥", "item_type": "光锥",
"rank_type": "4" "rank_type": "4"
}, },
"22006": {
"name": "飞向粉色的明天",
"item_type": "光锥",
"rank_type": "4"
},
"23000": { "23000": {
"name": "银河铁道之夜", "name": "银河铁道之夜",
"item_type": "光锥", "item_type": "光锥",
@@ -720,36 +695,6 @@
"item_type": "光锥", "item_type": "光锥",
"rank_type": "5" "rank_type": "5"
}, },
"23049": {
"name": "致长夜的星光",
"item_type": "光锥",
"rank_type": "5"
},
"23050": {
"name": "勿忘她的火焰",
"item_type": "光锥",
"rank_type": "5"
},
"23051": {
"name": "纵然山河万程",
"item_type": "光锥",
"rank_type": "5"
},
"23052": {
"name": "爱如此刻永恒",
"item_type": "光锥",
"rank_type": "5"
},
"23053": {
"name": "花花世界迷人眼",
"item_type": "光锥",
"rank_type": "5"
},
"23054": {
"name": "当她决定看见",
"item_type": "光锥",
"rank_type": "5"
},
"24000": { "24000": {
"name": "记一位星神的陨落", "name": "记一位星神的陨落",
"item_type": "光锥", "item_type": "光锥",
@@ -1085,11 +1030,6 @@
"item_type": "角色", "item_type": "角色",
"rank_type": "5" "rank_type": "5"
}, },
"1321": {
"name": "大丽花",
"item_type": "角色",
"rank_type": "5"
},
"1401": { "1401": {
"name": "大黑塔", "name": "大黑塔",
"item_type": "角色", "item_type": "角色",
@@ -1145,31 +1085,6 @@
"item_type": "角色", "item_type": "角色",
"rank_type": "5" "rank_type": "5"
}, },
"1413": {
"name": "长夜月",
"item_type": "角色",
"rank_type": "5"
},
"1414": {
"name": "丹恒•腾荒",
"item_type": "角色",
"rank_type": "5"
},
"1415": {
"name": "昔涟",
"item_type": "角色",
"rank_type": "5"
},
"1501": {
"name": "火花",
"item_type": "角色",
"rank_type": "5"
},
"1502": {
"name": "爻光",
"item_type": "角色",
"rank_type": "5"
},
"8001": { "8001": {
"name": "{NICKNAME}", "name": "{NICKNAME}",
"item_type": "角色", "item_type": "角色",
@@ -1327,16 +1242,6 @@
"item_type": "光錐", "item_type": "光錐",
"rank_type": "3" "rank_type": "3"
}, },
"20023": {
"name": "嗤笑",
"item_type": "光錐",
"rank_type": "3"
},
"20024": {
"name": "殘淚",
"item_type": "光錐",
"rank_type": "3"
},
"21000": { "21000": {
"name": "一場術後對話", "name": "一場術後對話",
"item_type": "光錐", "item_type": "光錐",
@@ -1642,16 +1547,6 @@
"item_type": "光錐", "item_type": "光錐",
"rank_type": "4" "rank_type": "4"
}, },
"21064": {
"name": "菇菇嘎嘎歷險記",
"item_type": "光錐",
"rank_type": "4"
},
"21065": {
"name": "今日好手氣",
"item_type": "光錐",
"rank_type": "4"
},
"22000": { "22000": {
"name": "新手任務開始前", "name": "新手任務開始前",
"item_type": "光錐", "item_type": "光錐",
@@ -1682,11 +1577,6 @@
"item_type": "光錐", "item_type": "光錐",
"rank_type": "4" "rank_type": "4"
}, },
"22006": {
"name": "飛向粉色的明天",
"item_type": "光錐",
"rank_type": "4"
},
"23000": { "23000": {
"name": "銀河鐵道之夜", "name": "銀河鐵道之夜",
"item_type": "光錐", "item_type": "光錐",
@@ -1932,36 +1822,6 @@
"item_type": "光錐", "item_type": "光錐",
"rank_type": "5" "rank_type": "5"
}, },
"23049": {
"name": "致長夜的星光",
"item_type": "光錐",
"rank_type": "5"
},
"23050": {
"name": "勿忘她的火焰",
"item_type": "光錐",
"rank_type": "5"
},
"23051": {
"name": "縱然山河萬程",
"item_type": "光錐",
"rank_type": "5"
},
"23052": {
"name": "愛如此刻永恆",
"item_type": "光錐",
"rank_type": "5"
},
"23053": {
"name": "花花世界迷人眼",
"item_type": "光錐",
"rank_type": "5"
},
"23054": {
"name": "當她決定看見",
"item_type": "光錐",
"rank_type": "5"
},
"24000": { "24000": {
"name": "記一位星神的隕落", "name": "記一位星神的隕落",
"item_type": "光錐", "item_type": "光錐",
@@ -2297,11 +2157,6 @@
"item_type": "角色", "item_type": "角色",
"rank_type": "5" "rank_type": "5"
}, },
"1321": {
"name": "大麗花",
"item_type": "角色",
"rank_type": "5"
},
"1401": { "1401": {
"name": "大黑塔", "name": "大黑塔",
"item_type": "角色", "item_type": "角色",
@@ -2357,31 +2212,6 @@
"item_type": "角色", "item_type": "角色",
"rank_type": "5" "rank_type": "5"
}, },
"1413": {
"name": "長夜月",
"item_type": "角色",
"rank_type": "5"
},
"1414": {
"name": "丹恆•騰荒",
"item_type": "角色",
"rank_type": "5"
},
"1415": {
"name": "昔漣",
"item_type": "角色",
"rank_type": "5"
},
"1501": {
"name": "火花",
"item_type": "角色",
"rank_type": "5"
},
"1502": {
"name": "爻光",
"item_type": "角色",
"rank_type": "5"
},
"8001": { "8001": {
"name": "{NICKNAME}", "name": "{NICKNAME}",
"item_type": "角色", "item_type": "角色",
@@ -2539,16 +2369,6 @@
"item_type": "Light Cone", "item_type": "Light Cone",
"rank_type": "3" "rank_type": "3"
}, },
"20023": {
"name": "Sneering",
"item_type": "Light Cone",
"rank_type": "3"
},
"20024": {
"name": "Lingering Tear",
"item_type": "Light Cone",
"rank_type": "3"
},
"21000": { "21000": {
"name": "Post-Op Conversation", "name": "Post-Op Conversation",
"item_type": "Light Cone", "item_type": "Light Cone",
@@ -2854,16 +2674,6 @@
"item_type": "Light Cone", "item_type": "Light Cone",
"rank_type": "4" "rank_type": "4"
}, },
"21064": {
"name": "Mushy Shroomy's Adventures",
"item_type": "Light Cone",
"rank_type": "4"
},
"21065": {
"name": "Today's Good Luck",
"item_type": "Light Cone",
"rank_type": "4"
},
"22000": { "22000": {
"name": "Before the Tutorial Mission Starts", "name": "Before the Tutorial Mission Starts",
"item_type": "Light Cone", "item_type": "Light Cone",
@@ -2894,11 +2704,6 @@
"item_type": "Light Cone", "item_type": "Light Cone",
"rank_type": "4" "rank_type": "4"
}, },
"22006": {
"name": "Fly Into a Pink Tomorrow",
"item_type": "Light Cone",
"rank_type": "4"
},
"23000": { "23000": {
"name": "Night on the Milky Way", "name": "Night on the Milky Way",
"item_type": "Light Cone", "item_type": "Light Cone",
@@ -3144,36 +2949,6 @@
"item_type": "Light Cone", "item_type": "Light Cone",
"rank_type": "5" "rank_type": "5"
}, },
"23049": {
"name": "To Evernight's Stars",
"item_type": "Light Cone",
"rank_type": "5"
},
"23050": {
"name": "Never Forget Her Flame",
"item_type": "Light Cone",
"rank_type": "5"
},
"23051": {
"name": "Though Worlds Apart",
"item_type": "Light Cone",
"rank_type": "5"
},
"23052": {
"name": "This Love, Forever",
"item_type": "Light Cone",
"rank_type": "5"
},
"23053": {
"name": "Dazzled by a Flowery World",
"item_type": "Light Cone",
"rank_type": "5"
},
"23054": {
"name": "When She Decided to See",
"item_type": "Light Cone",
"rank_type": "5"
},
"24000": { "24000": {
"name": "On the Fall of an Aeon", "name": "On the Fall of an Aeon",
"item_type": "Light Cone", "item_type": "Light Cone",
@@ -3509,11 +3284,6 @@
"item_type": "Character", "item_type": "Character",
"rank_type": "5" "rank_type": "5"
}, },
"1321": {
"name": "The Dahlia",
"item_type": "Character",
"rank_type": "5"
},
"1401": { "1401": {
"name": "The Herta", "name": "The Herta",
"item_type": "Character", "item_type": "Character",
@@ -3569,31 +3339,6 @@
"item_type": "Character", "item_type": "Character",
"rank_type": "5" "rank_type": "5"
}, },
"1413": {
"name": "Evernight",
"item_type": "Character",
"rank_type": "5"
},
"1414": {
"name": "Dan Heng • Permansor Terrae",
"item_type": "Character",
"rank_type": "5"
},
"1415": {
"name": "Cyrene",
"item_type": "Character",
"rank_type": "5"
},
"1501": {
"name": "Sparxie",
"item_type": "Character",
"rank_type": "5"
},
"1502": {
"name": "Yao Guang",
"item_type": "Character",
"rank_type": "5"
},
"8001": { "8001": {
"name": "{NICKNAME}", "name": "{NICKNAME}",
"item_type": "Character", "item_type": "Character",
@@ -3751,16 +3496,6 @@
"item_type": "光円錐", "item_type": "光円錐",
"rank_type": "3" "rank_type": "3"
}, },
"20023": {
"name": "{RUBY_B#ししょう}嗤笑{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "3"
},
"20024": {
"name": "{RUBY_B#ざんるい}残涙{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "3"
},
"21000": { "21000": {
"name": "{RUBY_B#しゅじゅつご}手術後{RUBY_E#}の{RUBY_B#かいわ}会話{RUBY_E#}", "name": "{RUBY_B#しゅじゅつご}手術後{RUBY_E#}の{RUBY_B#かいわ}会話{RUBY_E#}",
"item_type": "光円錐", "item_type": "光円錐",
@@ -4066,16 +3801,6 @@
"item_type": "光円錐", "item_type": "光円錐",
"rank_type": "4" "rank_type": "4"
}, },
"21064": {
"name": "タケタケ{RUBY_B#ぼうけんき}冒険記{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "4"
},
"21065": {
"name": "{RUBY_B#きょう}今日{RUBY_E#}は{RUBY_B#こううん}好運{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "4"
},
"22000": { "22000": {
"name": "{RUBY_B#はじ}初{RUBY_E#}めてのクエストの{RUBY_B#まえ}前{RUBY_E#}に", "name": "{RUBY_B#はじ}初{RUBY_E#}めてのクエストの{RUBY_B#まえ}前{RUBY_E#}に",
"item_type": "光円錐", "item_type": "光円錐",
@@ -4106,11 +3831,6 @@
"item_type": "光円錐", "item_type": "光円錐",
"rank_type": "4" "rank_type": "4"
}, },
"22006": {
"name": "ピンク{RUBY_B#いろ}色{RUBY_E#}の{RUBY_B#あした}明日{RUBY_E#}へ",
"item_type": "光円錐",
"rank_type": "4"
},
"23000": { "23000": {
"name": "{RUBY_B#ぎんがてつどう}銀河鉄道{RUBY_E#}の{RUBY_B#よる}夜{RUBY_E#}", "name": "{RUBY_B#ぎんがてつどう}銀河鉄道{RUBY_E#}の{RUBY_B#よる}夜{RUBY_E#}",
"item_type": "光円錐", "item_type": "光円錐",
@@ -4356,36 +4076,6 @@
"item_type": "光円錐", "item_type": "光円錐",
"rank_type": "5" "rank_type": "5"
}, },
"23049": {
"name": "{RUBY_B#なが}長{RUBY_E#}き{RUBY_B#よる}夜{RUBY_E#}に{RUBY_B#かがや}輝{RUBY_E#}く{RUBY_B#ほし}星{RUBY_E#}へ",
"item_type": "光円錐",
"rank_type": "5"
},
"23050": {
"name": "{RUBY_B#かのじょ}彼女{RUBY_E#}の{RUBY_B#ほのお}炎{RUBY_E#}を{RUBY_B#わす}忘{RUBY_E#}れずに",
"item_type": "光円錐",
"rank_type": "5"
},
"23051": {
"name": "{RUBY_B#ばんり}万里{RUBY_E#}の{RUBY_B#さんが}山河{RUBY_E#}を{RUBY_B#こ}越{RUBY_E#}えて",
"item_type": "光円錐",
"rank_type": "5"
},
"23052": {
"name": "{RUBY_B#あい}愛{RUBY_E#}はいま{RUBY_B#えいえん}永遠{RUBY_E#}に",
"item_type": "光円錐",
"rank_type": "5"
},
"23053": {
"name": "きらびやかな{RUBY_B#せかい}世界{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "5"
},
"23054": {
"name": "{RUBY_B#かのじょ}彼女{RUBY_E#}が{RUBY_B#み}視{RUBY_E#}ると{RUBY_B#き}決{RUBY_E#}めた{RUBY_B#とき}時{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "5"
},
"24000": { "24000": {
"name": "とある{RUBY_B#アイオーン}星神{RUBY_E#}の{RUBY_B#うんらく}殞落{RUBY_E#}を{RUBY_B#しる}記{RUBY_E#}す", "name": "とある{RUBY_B#アイオーン}星神{RUBY_E#}の{RUBY_B#うんらく}殞落{RUBY_E#}を{RUBY_B#しる}記{RUBY_E#}す",
"item_type": "光円錐", "item_type": "光円錐",
@@ -4721,11 +4411,6 @@
"item_type": "キャラ", "item_type": "キャラ",
"rank_type": "5" "rank_type": "5"
}, },
"1321": {
"name": "ダリア",
"item_type": "キャラ",
"rank_type": "5"
},
"1401": { "1401": {
"name": "マダム・ヘルタ", "name": "マダム・ヘルタ",
"item_type": "キャラ", "item_type": "キャラ",
@@ -4781,31 +4466,6 @@
"item_type": "キャラ", "item_type": "キャラ",
"rank_type": "5" "rank_type": "5"
}, },
"1413": {
"name": "{RUBY_B#ながよづき}長夜月{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1414": {
"name": "{RUBY_B#たんこう}丹恒{RUBY_E#}・{RUBY_B#とうこう}騰荒{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1415": {
"name": "キュレネ",
"item_type": "キャラ",
"rank_type": "5"
},
"1501": {
"name": "{RUBY_B#ひばな}火花{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1502": {
"name": "{RUBY_B#コウコウ}爻光{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"8001": { "8001": {
"name": "{NICKNAME}", "name": "{NICKNAME}",
"item_type": "キャラ", "item_type": "キャラ",
@@ -4963,16 +4623,6 @@
"item_type": "무기", "item_type": "무기",
"rank_type": "3" "rank_type": "3"
}, },
"20023": {
"name": "비웃음",
"item_type": "무기",
"rank_type": "3"
},
"20024": {
"name": "눈물의 흔적",
"item_type": "무기",
"rank_type": "3"
},
"21000": { "21000": {
"name": "수술 후의 대화", "name": "수술 후의 대화",
"item_type": "무기", "item_type": "무기",
@@ -5278,16 +4928,6 @@
"item_type": "무기", "item_type": "무기",
"rank_type": "4" "rank_type": "4"
}, },
"21064": {
"name": "슈룸 모험기",
"item_type": "무기",
"rank_type": "4"
},
"21065": {
"name": "오늘의 행운",
"item_type": "무기",
"rank_type": "4"
},
"22000": { "22000": {
"name": "초보자 임무 시작 전", "name": "초보자 임무 시작 전",
"item_type": "무기", "item_type": "무기",
@@ -5318,11 +4958,6 @@
"item_type": "무기", "item_type": "무기",
"rank_type": "4" "rank_type": "4"
}, },
"22006": {
"name": "핑크빛 내일을 향해",
"item_type": "무기",
"rank_type": "4"
},
"23000": { "23000": {
"name": "은하철도의 밤", "name": "은하철도의 밤",
"item_type": "무기", "item_type": "무기",
@@ -5568,36 +5203,6 @@
"item_type": "무기", "item_type": "무기",
"rank_type": "5" "rank_type": "5"
}, },
"23049": {
"name": "긴 밤의 별빛에게",
"item_type": "무기",
"rank_type": "5"
},
"23050": {
"name": "그녀의 불꽃을 잊지 말라",
"item_type": "무기",
"rank_type": "5"
},
"23051": {
"name": "끝없는 산과 강을 거치더라도",
"item_type": "무기",
"rank_type": "5"
},
"23052": {
"name": "이 순간처럼 영원한 사랑",
"item_type": "무기",
"rank_type": "5"
},
"23053": {
"name": "눈부신 파키의 세상",
"item_type": "무기",
"rank_type": "5"
},
"23054": {
"name": "그녀가 보기로 결심했을 때",
"item_type": "무기",
"rank_type": "5"
},
"24000": { "24000": {
"name": "어떤 에이언즈의 몰락", "name": "어떤 에이언즈의 몰락",
"item_type": "무기", "item_type": "무기",
@@ -5933,11 +5538,6 @@
"item_type": "캐릭터", "item_type": "캐릭터",
"rank_type": "5" "rank_type": "5"
}, },
"1321": {
"name": "달리아",
"item_type": "캐릭터",
"rank_type": "5"
},
"1401": { "1401": {
"name": "더 헤르타", "name": "더 헤르타",
"item_type": "캐릭터", "item_type": "캐릭터",
@@ -5993,31 +5593,6 @@
"item_type": "캐릭터", "item_type": "캐릭터",
"rank_type": "5" "rank_type": "5"
}, },
"1413": {
"name": "에버나이트",
"item_type": "캐릭터",
"rank_type": "5"
},
"1414": {
"name": "단항•등황",
"item_type": "캐릭터",
"rank_type": "5"
},
"1415": {
"name": "키레네",
"item_type": "캐릭터",
"rank_type": "5"
},
"1501": {
"name": "스파키",
"item_type": "캐릭터",
"rank_type": "5"
},
"1502": {
"name": "효광",
"item_type": "캐릭터",
"rank_type": "5"
},
"8001": { "8001": {
"name": "{NICKNAME}", "name": "{NICKNAME}",
"item_type": "캐릭터", "item_type": "캐릭터",
@@ -6059,5 +5634,5 @@
"rank_type": "5" "rank_type": "5"
} }
}, },
"version": "4.0" "version": "3.4"
} }

View File

@@ -7,11 +7,11 @@ cc = OpenCC("s2t")
# 语言映射配置 # 语言映射配置
language_map = { language_map = {
"zh-cn": "zh", "zh-cn": "cn",
"zh-tw": "zh", # 简体转繁体 "zh-tw": "cn", # 简体转繁体
"en-us": "en", "en-us": "en",
"ja-jp": "ja", "ja-jp": "jp",
"ko-kr": "ko", "ko-kr": "kr",
} }
# 类型映射配置 # 类型映射配置
@@ -43,7 +43,7 @@ def transform_data(data, item_type):
transformed = {lang: {} for lang in language_map.keys()} transformed = {lang: {} for lang in language_map.keys()}
for id, item in data.items(): for id, item in data.items():
for lang, key in language_map.items(): for lang, key in language_map.items():
name = item[key] if lang != "zh-tw" else cc.convert(item["zh"]) name = item[key] if lang != "zh-tw" else cc.convert(item["cn"])
transformed[lang][id] = { transformed[lang][id] = {
"name": name, "name": name,
"item_type": type_map[item_type][lang], "item_type": type_map[item_type][lang],
@@ -54,14 +54,14 @@ def transform_data(data, item_type):
def main(): def main():
try: try:
version_url = "https://static.nanoka.cc/manifest.json" version_url = "https://api.hakush.in/hsr/new.json"
version_data = fetch_json(version_url) version_data = fetch_json(version_url)
latest_version = version_data['hsr']['live'] latest_version = ".".join(version_data["version"].split(".")[:2])
print(f"Latest version: {latest_version}") print(f"Latest version: {latest_version}")
weapon_url = f"https://static.nanoka.cc/hsr/{latest_version}/lightcone.json" weapon_url = f"https://api.hakush.in/hsr/{latest_version}/lightcone.json"
character_url = f"https://static.nanoka.cc/hsr/{latest_version}/character.json" character_url = f"https://api.hakush.in/hsr/{latest_version}/character.json"
weapon_data = fetch_json(weapon_url) weapon_data = fetch_json(weapon_url)
print("Fetched", len(weapon_data), "lightcones") print("Fetched", len(weapon_data), "lightcones")
character_data = fetch_json(character_url) character_data = fetch_json(character_url)