From aa19a086689dca6d31590d2efcb41077fe9d853d Mon Sep 17 00:00:00 2001 From: Spmario233 Date: Thu, 2 May 2024 01:00:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E6=9D=BF=EF=BC=8C?= =?UTF-8?q?=E5=AF=B9Key=E6=AD=A6=E5=B0=86=E8=BF=9B=E8=A1=8C=E5=88=86?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 1 + character/key/character.js | 6 +- character/key/index.js | 72 ++---------- character/key/sort.js | 35 ++++++ game/config.js | 194 +++---------------------------- noname/game/index.js | 20 +++- noname/init/import.js | 2 +- 7 files changed, 76 insertions(+), 254 deletions(-) create mode 100644 character/key/sort.js diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index feaeaf832..d0052b4d2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -28,6 +28,7 @@ ### 检查清单 - [ ] 我已经进行了充足的测试,且现有的测试都已通过 +- [ ] 如果此次PR中添加了新的武将/新的语音文件,则我已在`character/rank.js`中添加对应的武将强度评级/在`lib.translate`中加入语音文件的文字台词 - [ ] 如果此次PR涉及到新功能的添加,我已在`PR描述`中写入详细文档 - [ ] 如果此次PR需要扩展跟进,我已在`扩展适配`中写入详细文档 - [ ] 如果这个PR解决了一个issue,我在`诱因和背景`中明确链接到该issue diff --git a/character/key/character.js b/character/key/character.js index 7caad5743..1df383dc4 100644 --- a/character/key/character.js +++ b/character/key/character.js @@ -142,11 +142,7 @@ const characters = { group: "key", hp: 3, hujia: 2, - skills: [ - "sunohara_chengshuang", - "sunohara_tiaoyin", - "sunohara_jianren", - ], + skills: ["sunohara_chengshuang", "sunohara_tiaoyin", "sunohara_jianren"], }, key_rin: { sex: "female", diff --git a/character/key/index.js b/character/key/index.js index a47fb31a1..99fbd9bde 100644 --- a/character/key/index.js +++ b/character/key/index.js @@ -5,11 +5,15 @@ import pinyins from "./pinyin.js"; import skills from "./skill.js"; import translates from "./translate.js"; import voices from "./voices.js"; +import { characterSort, characterSortTranslate } from "./sort.js"; game.import("character", function () { return { name: "key", character: { ...characters }, + characterSort: { + key: characterSort, + }, characterFilter: { key_jojiro(mode) { return mode == "chess" || mode == "tafang"; @@ -25,74 +29,12 @@ game.import("character", function () { }, }, characterTitle: { - key_satomi: "#rHeaven Burns Red", - key_erika: "#rHeaven Burns Red", - db_key_liyingxia: "#rHeaven Burns Red", - key_kano: "#bAIR", - key_mia: "#bLoopers", - key_kotomi: "#gClannad
技能设计:落英逐紫裙", - key_asara: "#bRewrite", - key_yukito: "#bAIR", - key_chihaya: "#bRewrite", - key_rumi: "#rONE ~輝く季節へ~", - key_youta: "#b神様になった日", - key_sakuya: "#bRewrite", - key_hiroto: "#b神様になった日", - key_shizuku: "#bSummer Pockets", - key_shiroha: "#bSummer Pockets", - key_jojiro: "#bCharlotte
战棋专属角色", - key_kotori: "#bRewrite", - key_ryoichi: "#bSummer Pockets", - key_yuu: "#bCharlotte", - key_godan: "#rAngel Beats!", - key_abyusa: "#rAngel Beats!", - key_akiko: "#bKanon", - key_kaori: "#bKanon", - key_shiori: "#bKanon", - key_miki: "#bSummer Pockets", - key_shiorimiyuki: "#rAngel Beats!", - key_shizuru: "#bRewrite", - key_kyoko: "#bSummer Pockets", - sp_key_kanade: "#rAngel Beats!", - key_yuzuru: "#rAngel Beats!", - key_tsumugi: "#bSummer Pockets", - key_ayato: "#rAngel Beats!", - key_nagisa: "#gClannad", - key_tomoya: "#gClannad", - key_noda: "#rAngel Beats!", - key_hinata: "#rAngel Beats!", - key_hisako: "#rAngel Beats!", - key_doruji: "#bLittle Busters!", - key_riki: "#bLittle Busters!", - key_yuiko: "#bLittle Busters!", - key_akane: "#bRewrite", - key_sasami: "#bLittle Busters!", - key_rin: "#bLittle Busters!", - key_shiina: "#rAngel Beats!", - key_inari: "#bSummer Pockets", - key_saya: "#bLittle Busters!", - key_harukakanata: "#bLittle Busters!", - key_yui: "#rAngel Beats!", - key_yoshino: "#bRewrite", - key_kengo: "#bLittle Busters!", - key_iwasawa: "#rAngel Beats!", - key_masato: "#bLittle Busters!", - key_yusa: "#bCharlotte", - key_misa: "#rCharlotte", - key_yukine: "#gClannad", - key_komari: "#bLittle Busters!", - key_umi: "#bSummer Pockets", - key_rei: "#gHarmonia", - key_lucia: "#bRewrite", - key_kyousuke: "#bLittle Busters!", - key_yuri: "#rAngel Beats!", - key_haruko: "#bAIR", - sp_key_yuri: "#bAngel Beats!", - key_fuuko: "#gClannad", + key_kotomi: "#g落英逐紫裙", + key_jojiro: "战棋专属角色", }, card: { ...cards }, skill: { ...skills }, - translate: { ...translates, ...voices }, + translate: { ...translates, ...voices, ...characterSortTranslate }, pinyins: { ...pinyins }, }; }); diff --git a/character/key/sort.js b/character/key/sort.js new file mode 100644 index 000000000..6c41b10db --- /dev/null +++ b/character/key/sort.js @@ -0,0 +1,35 @@ +const characterSort = { + key_one: ["key_rumi"], + key_kanon: ["key_shiori", "key_kaori", "key_akiko"], + key_air: ["key_haruko", "key_yukito", "key_crow", "key_kano"], + key_clannad: ["key_yukine", "key_sunohara", "key_tomoya", "key_nagisa", "key_kotomi", "key_fuuko"], + key_littlebusters: ["key_kyousuke", "key_komari", "key_masato", "key_kengo", "key_saya", "key_harukakanata", "key_rin", "key_sasami", "key_doruji", "key_yuiko", "key_riki", "key_mio", "key_midori"], + key_rewrite: ["key_lucia", "key_akane", "key_shizuru", "key_kotori", "key_sakuya", "key_chihaya", "key_asara"], + key_angelbeats: ["sp_key_yuri", "key_yuri", "key_iwasawa", "key_yoshino", "key_yui", "key_shiina", "key_hisako", "key_hinata", "key_noda", "key_ayato", "key_yuzuru", "sp_key_kanade", "key_shiorimiyuki", "key_abyusa", "key_godan"], + key_charlotte: ["key_yusa", "key_misa", "key_yuu", "key_jojiro"], + key_harmonia: ["key_rei"], + key_kamisamaninattahi: ["key_hiroto", "key_youta"], + key_summerpockets: ["key_umi", "key_umi2", "key_tsumugi", "key_inari", "key_ao", "key_kyoko", "key_miki", "key_ryoichi", "key_shiroha", "key_shizuku"], + key_loopers: ["key_mia"], + key_lunaria: ["key_iriya"], + key_heavenburnsred: ["db_key_liyingxia", "key_erika", "key_satomi"], +}; + +const characterSortTranslate = { + key_one: "ONE ~辉之季节~", + key_kanon: "Kanon", + key_air: "AIR", + key_clannad: "Clannad", + key_littlebusters: "Little Busters!", + key_rewrite: "Rewrite", + key_angelbeats: "Angel Beats!", + key_charlotte: "Charlotte", + key_harmonia: "Harmonia", + key_summerpockets: "Summer Pockets", + key_kamisamaninattahi: "成神之日", + key_loopers: "Loopers", + key_lunaria: "LUNARiA", + key_heavenburnsred: "炽焰天穹", +}; + +export { characterSort, characterSortTranslate }; diff --git a/game/config.js b/game/config.js index 064b67daa..88307e503 100644 --- a/game/config.js +++ b/game/config.js @@ -1,7 +1,6 @@ window.config = { extension_sources: { - "GitHub Proxy": - "https://mirror.ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/", + "GitHub Proxy": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/libccy/noname-extension/master/", FastGit: "https://raw.fgit.cf/libccy/noname-extension/master/", GitHub: "https://raw.githubusercontent.com/libccy/noname-extension/master/", }, @@ -9,141 +8,24 @@ window.config = { forbidai: ["ns_liuzhang"], forbidai_user: [], forbidall: [], - forbidstone: [ - "zhugedan", - "pal_xuanxiao", - "hs_malfurion", - "lusu", - "chenlin", - "hs_siwangzhiyi", - "gjqt_bailitusu", - "yuanshao", - "swd_anka", - "swd_nicole", - "daqiao", - "re_daqiao", - "hs_xuanzhuanjijia", - "zhuran", - "huatuo", - "swd_tuwei", - "hs_guldan", - "wangyi", - "caoang", - "swd_guyue", - "swd_rongshuang", - "swd_jiangziya", - "guojia", - "re_guojia", - "shen_caocao", - "swd_qiner", - "caopi", - "hs_yngvar", - "guansuo", - "gjqt_aruan", - "swd_hanluo", - "hs_anduin", - "swd_huanglei", - "yxs_yujix", - "yxs_luzhishen", - "swd_muyun", - "ow_tianshi", - "pal_yuejinzhao", - "hs_antonidas", - "xushi", - "hs_lreno", - ], + forbidstone: ["zhugedan", "pal_xuanxiao", "hs_malfurion", "lusu", "chenlin", "hs_siwangzhiyi", "gjqt_bailitusu", "yuanshao", "swd_anka", "swd_nicole", "daqiao", "re_daqiao", "hs_xuanzhuanjijia", "zhuran", "huatuo", "swd_tuwei", "hs_guldan", "wangyi", "caoang", "swd_guyue", "swd_rongshuang", "swd_jiangziya", "guojia", "re_guojia", "shen_caocao", "swd_qiner", "caopi", "hs_yngvar", "guansuo", "gjqt_aruan", "swd_hanluo", "hs_anduin", "swd_huanglei", "yxs_yujix", "yxs_luzhishen", "swd_muyun", "ow_tianshi", "pal_yuejinzhao", "hs_antonidas", "xushi", "hs_lreno"], forbidchess: ["hetaihou", "swd_kangnalishi"], forbidboss: ["caiwenji", "gjqt_aruan", "pal_xuanxiao", "swd_hupo"], - forbiddouble: [ - "zhugedan", - "swd_kangnalishi", - "dongzhuo", - "wutugu", - "hs_siwangzhiyi", - "hs_ronghejuren", - "hs_shanlingjuren", - ], - forbidthreecard: [ - "qiankunbiao", - "shenhuofeiya", - "gw_ciguhanshuang", - "gw_birinongwu", - "gw_qinpendayu", - "gw_poxiao", - ], + forbiddouble: ["zhugedan", "swd_kangnalishi", "dongzhuo", "wutugu", "hs_siwangzhiyi", "hs_ronghejuren", "hs_shanlingjuren"], + forbidthreecard: ["qiankunbiao", "shenhuofeiya", "gw_ciguhanshuang", "gw_birinongwu", "gw_qinpendayu", "gw_poxiao"], zhinang_tricks: ["guohe", "wuxie", "wuzhong", "dongzhuxianji"], connect_zhinang_tricks: ["guohe", "wuxie", "wuzhong", "dongzhuxianji"], all: { - sgscharacters: [ - "standard", - "shenhua", - "xinghuoliaoyuan", - "refresh", - "yijiang", - "sp", - "sp2", - "xianding", - "huicui", - "extra", - "old", - "mobile", - "shiji", - "tw", - "yingbian", - "offline", - "jsrg", - "sb", - "clan", - "collab", - "onlyOL", - ], - sgscards: [ - "standard", - "extra", - "sp", - "guozhan", - "zhulu", - "yingbian", - "yongjian", - ], - sgsmodes: [ - "identity", - "guozhan", - "versus", - "doudizhu", - "single", - "brawl", - "connect", - ], - stockmode: [ - "identity", - "guozhan", - "versus", - "boss", - "doudizhu", - "single", - "chess", - "stone", - "connect", - "brawl", - "tafang", - ], + sgscharacters: ["standard", "shenhua", "xinghuoliaoyuan", "refresh", "yijiang", "sp", "sp2", "xianding", "huicui", "extra", "old", "mobile", "shiji", "tw", "yingbian", "offline", "jsrg", "sb", "clan", "collab", "onlyOL"], + sgscards: ["standard", "extra", "sp", "guozhan", "zhulu", "yingbian", "yongjian"], + sgsmodes: ["identity", "guozhan", "versus", "doudizhu", "single", "brawl", "connect"], + stockmode: ["identity", "guozhan", "versus", "boss", "doudizhu", "single", "chess", "stone", "connect", "brawl", "tafang"], stockextension: ["boss", "cardpile", "coin", "wuxing"], layout: ["default", "newlayout"], theme: ["woodden", "music", "simple"], card_font: ["xiaozhuan", "huangcao", "caoshu", "xingshu"], double_hp: ["hejiansan", "pingjun", "zuidazhi", "zuixiaozhi", "zonghe"], - image_background_filter: [ - "default", - "blur", - "gray", - "sepia", - "invert", - "saturate", - "contrast", - "hue", - "brightness", - ], + image_background_filter: ["default", "blur", "gray", "sepia", "invert", "saturate", "contrast", "hue", "brightness"], }, game: "sgs", @@ -247,37 +129,10 @@ window.config = { sort: "type_sort", cards: ["standard", "extra"], - characters: [ - "standard", - "shenhua", - "sp", - "sp2", - "yijiang", - "refresh", - "xinghuoliaoyuan", - "mobile", - "extra", - "yingbian", - "sb", - "tw", - "offline", - "clan", - "collab", - "xianding", - "huicui", - "shiji", - "jsrg", - "onlyOL", - ], + characters: ["standard", "shenhua", "sp", "sp2", "yijiang", "refresh", "xinghuoliaoyuan", "mobile", "extra", "yingbian", "sb", "tw", "offline", "clan", "collab", "xianding", "huicui", "shiji", "jsrg", "onlyOL"], + moderned_chracters: ["key"], connect_characters: ["diy"], - connect_cards: [ - "huanlekapai", - "guozhan", - "sp", - "zhulu", - "yingbian", - "yongjian", - ], + connect_cards: ["huanlekapai", "guozhan", "sp", "zhulu", "yingbian", "yongjian"], plays: [], extensions: [], banned: [], @@ -309,29 +164,8 @@ window.config = { ["zhu", "zhong", "nei", "fan", "fan", "fan"], ["zhu", "zhong", "zhong", "nei", "fan", "fan", "fan"], ["zhu", "zhong", "zhong", "nei", "fan", "fan", "fan", "fan"], - [ - "zhu", - "zhong", - "zhong", - "zhong", - "nei", - "fan", - "fan", - "fan", - "fan", - ], - [ - "zhu", - "zhong", - "zhong", - "zhong", - "nei", - "nei", - "fan", - "fan", - "fan", - "fan", - ], + ["zhu", "zhong", "zhong", "zhong", "nei", "fan", "fan", "fan", "fan"], + ["zhu", "zhong", "zhong", "zhong", "nei", "nei", "fan", "fan", "fan", "fan"], ], choice: { zhu: 3, diff --git a/noname/game/index.js b/noname/game/index.js index 112d1de29..c79d171fa 100644 --- a/noname/game/index.js +++ b/noname/game/index.js @@ -1489,7 +1489,7 @@ export class Game { * @param {skillInfo} [skillInfo] * @returns {string[]} */ - function getAudioList(skill, options, skillInfo, useRawAudio) { + function getAudioList(skill, options, skillInfo) { const info = skillInfo || lib.skill[skill]; if (!info) { console.error(new ReferenceError(`parseSkillAudio: Cannot find ${skill} in lib.skill`)); @@ -1558,8 +1558,6 @@ export class Game { } /** * 根据skill中的audio,audioname,audioname2和player来获取技能台词列表 - * @typedef {[string,number]|string|number|boolean} audioInfo - * @typedef {{audio: audioInfo, audioname?:string[], audioname2?:{[playerName: string]: audioInfo}}} skillInfo * @param { string } skill 技能名 * @param { Player | Object | string } [player] 角色/角色名 * @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill] @@ -1574,6 +1572,22 @@ export class Game { }); return voiceMap; } + /** + * 根据skill中的audio,audioname,audioname2和player来获取技能台词列表及其对应的源文件名 + * @param { string } skill 技能名 + * @param { Player | Object | string } [player] 角色/角色名 + * @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill] + * @returns { Object } 语音地址列表 + */ + parseSkillTextMap(skill, player, skillInfo) { + const audios = game.parseSkillAudio(skill, player, skillInfo, true); + const voiceMap = {}; + audios.forEach(audioname => { + const voiceText = lib.translate[`#${audioname}`]; + if (voiceText) voiceMap[audioname] = voiceText; + }); + return voiceMap; + } /** * * @param { string } skill diff --git a/noname/init/import.js b/noname/init/import.js index adb0eb644..dd238b642 100644 --- a/noname/init/import.js +++ b/noname/init/import.js @@ -12,7 +12,7 @@ export const importCardPack = generateImportFunction("card", (name) => `../../ca * @returns {Promise} */ export const importCharacterPack = generateImportFunction("character", (name) => { - const alreadyModernCharacterPack = ["key"]; + const alreadyModernCharacterPack = lib.config.moderned_chracters || []; return alreadyModernCharacterPack.includes(name) ? `../../character/${name}/index.js`