Merge branch 'PR-Branch' of https://github.com/libccy/noname into dev

This commit is contained in:
nineMangos 2024-04-24 20:02:43 +08:00
commit ab83ac028a
31 changed files with 12195 additions and 10352 deletions

View File

@ -1,105 +1,107 @@
import { lib, game, ui, get, ai, _status } from "../../noname.js";
const cards = {
kano_paibingbuzhen: {
fullskin: true,
type: "trick",
enable: true,
filterTarget: true,
selectTarget: [1, 3],
derivation: "key_kano",
content() {
"step 0";
target.draw();
"step 1";
var hs = target.getCards("he");
if (!hs.length) event.finish();
else if (hs.length == 1) event._result = { bool: true, cards: hs };
else target.chooseCard("he", true, "选择一张牌置入仁库");
"step 2";
if (result.bool) {
var card = result.cards[0];
target.$throw(card, 1000);
target.lose(card, "toRenku");
}
},
contentAfter() {
if (
player.isIn() &&
_status.renku.length &&
(function () {
var cards = _status.renku;
if (cards.length == 1) return true;
var color = get.color(cards[0], false),
type = get.type(cards[0], false);
for (var i = 1; i < cards.length; i++) {
if (color && get.color(cards[i], false) != color) color = false;
if (type && get.type(cards[i], false) != type) type = false;
if (!color && !type) return false;
}
return true;
})()
)
player.draw();
},
ai: {
order: 1,
result: {
player(player, target) {
if (player.hasSkill("kano_poyu")) return 2;
return 0;
},
target: 0.1,
},
},
},
kamome_suitcase: {
fullskin: true,
type: "equip",
subtype: "equip5",
derivation: "key_kamome",
skills: ["kamome_suitcase"],
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
miki_hydrogladiator: {
fullskin: true,
type: "equip",
subtype: "equip1",
derivation: "key_miki",
skills: ["miki_hydrogladiator_skill"],
distance: {
attackFrom: -5,
},
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
miki_binoculars: {
fullskin: true,
type: "equip",
subtype: "equip5",
derivation: "key_miki",
skills: ["miki_binoculars"],
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
}
kano_paibingbuzhen: {
fullskin: true,
type: "trick",
enable: true,
filterTarget: true,
selectTarget: [1, 3],
derivation: "key_kano",
content() {
"step 0";
target.draw();
("step 1");
var hs = target.getCards("he");
if (!hs.length) event.finish();
else if (hs.length == 1) event._result = { bool: true, cards: hs };
else target.chooseCard("he", true, "选择一张牌置入仁库");
("step 2");
if (result.bool) {
var card = result.cards[0];
target.$throw(card, 1000);
target.lose(card, "toRenku");
}
},
contentAfter() {
if (
player.isIn() &&
_status.renku.length &&
(function () {
var cards = _status.renku;
if (cards.length == 1) return true;
var color = get.color(cards[0], false),
type = get.type(cards[0], false);
for (var i = 1; i < cards.length; i++) {
if (color && get.color(cards[i], false) != color)
color = false;
if (type && get.type(cards[i], false) != type)
type = false;
if (!color && !type) return false;
}
return true;
})()
)
player.draw();
},
ai: {
order: 1,
result: {
player(player, target) {
if (player.hasSkill("kano_poyu")) return 2;
return 0;
},
target: 0.1,
},
},
},
kamome_suitcase: {
fullskin: true,
type: "equip",
subtype: "equip5",
derivation: "key_kamome",
skills: ["kamome_suitcase"],
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
miki_hydrogladiator: {
fullskin: true,
type: "equip",
subtype: "equip1",
derivation: "key_miki",
skills: ["miki_hydrogladiator_skill"],
distance: {
attackFrom: -5,
},
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
miki_binoculars: {
fullskin: true,
type: "equip",
subtype: "equip5",
derivation: "key_miki",
skills: ["miki_binoculars"],
ai: {
equipValue(card) {
return 7;
},
basic: {
equipValue: 7,
},
},
},
};
export default cards;

View File

@ -1,86 +1,448 @@
const characters = {
sp_key_yuri: ["female", "qun", 4, ["mubing", "ziqu", "diaoling"], ["border:key"]],
key_lucia: ["female", "key", "2/3", ["lucia_duqu", "lucia_zhenren"]],
key_kyousuke: ["male", "key", 4, ["nk_shekong", "key_huanjie"]],
key_yuri: ["female", "key", 3, ["yuri_xingdong", "key_huanjie", "yuri_wangxi"], ["zhu"]],
key_haruko: ["female", "key", 4, ["haruko_haofang", "haruko_zhuishi"]],
key_umi: ["female", "key", 3, ["umi_chaofan", "umi_lunhui", "umi_qihuan"]],
key_umi2: ["female", "key", 3, [], ["unseen"]],
key_rei: ["male", "key", 4, ["xiandeng", "shulv", "xisheng"]],
key_komari: ["female", "key", 3, ["komari_tiankou", "komari_xueshang"]],
key_yukine: ["female", "key", 3, ["yukine_wenzhou"]],
key_yusa: ["female", "key", 3, ["yusa_yanyi", "yusa_misa", "dualside"], ["dualside:key_misa"]],
key_misa: ["female", "key", 3, ["misa_yehuo", "misa_yusa", "dualside"], ["unseen"]],
key_masato: ["male", "key", "4/8", ["masato_baoquan"]],
key_iwasawa: ["female", "key", 3, ["iwasawa_yinhang", "iwasawa_mysong"]],
key_kengo: ["male", "key", 4, ["kengo_weishang", "kengo_guidui"]],
key_yoshino: ["male", "key", 4, ["yoshino_jueyi"]],
key_yui: ["female", "key", 3, ["yui_jiang", "yui_lieyin", "yui_takaramono"]],
key_tsumugi: ["female", "key", 3, ["tsumugi_mugyu", "tsumugi_huilang"]],
key_saya: ["female", "key", 3, ["saya_shouji", "saya_powei"]],
key_harukakanata: ["female", "key", 3, ["haruka_shuangche"]],
key_inari: ["female", "key", 2, ["inari_baiwei", "inari_huhun"]],
key_shiina: ["female", "key", 3, ["shiina_qingshen", "shiina_feiyan"]],
key_sunohara: [
"double",
"key",
"3/3/2",
["sunohara_chengshuang", "sunohara_tiaoyin", "sunohara_jianren"],
],
key_rin: ["female", "key", 3, ["rin_baoqiu"]],
key_sasami: ["female", "key", 3, ["sasami_miaobian"]],
key_akane: ["female", "key", 3, ["akane_jugu", "akane_quanqing", "akane_yifu"], ["zhu"]],
key_doruji: ["female", "key", 16, ["doruji_feiqu"]],
key_yuiko: ["female", "key", 3, ["yuiko_fenglun", "yuiko_dilve"]],
key_riki: ["double", "key", 3, ["riki_spwenji", "riki_nvzhuang", "riki_mengzhong"]],
key_hisako: ["female", "key", 3, ["hisako_yinbao", "hisako_zhuanyun"]],
key_hinata: ["male", "key", 4, ["hinata_qiulve", "hinata_ehou"]],
key_noda: ["male", "key", 4, ["noda_fengcheng", "noda_xunxin"]],
key_tomoya: ["male", "key", 4, ["tomoya_shangxian", "tomoya_wangjin"]],
key_nagisa: ["female", "key", 3, ["nagisa_tiandu", "nagisa_fuxin"]],
key_ayato: ["male", "key", 3, ["ayato_jianshen", "ayato_zonghuan"]],
key_ao: ["female", "key", 3, ["ao_xishi", "ao_kuihun", "ao_shixin"]],
key_yuzuru: ["male", "key", 5, ["yuzuru_wuxin", "yuzuru_deyi"]],
sp_key_kanade: ["female", "key", 3, ["kanade_mapo", "kanade_benzhan"]],
key_mio: ["female", "key", 3, ["mio_tuifu", "mio_tishen"]],
key_midori: ["female", "key", 3, ["midori_nonghuan", "midori_tishen"]],
key_kyoko: ["female", "key", 3, ["kyoko_juwu", "kyoko_zhengyi"]],
key_shizuru: ["female", "key", 3, ["shizuru_nianli", "shizuru_benzhan"]],
key_shiorimiyuki: ["female", "key", 3, ["shiorimiyuki_banyin", "shiorimiyuki_tingxian"]],
key_miki: ["female", "key", 3, ["miki_shenqiang", "miki_huanmeng", "miki_zhiluo"]],
key_shiori: ["female", "key", "2/3", ["shiori_huijuan"]],
key_kaori: ["female", "key", "3/4", ["kaori_siyuan"]],
key_akiko: ["female", "key", 3, ["akiko_dongcha"]],
key_abyusa: ["female", "key", 3, ["abyusa_jueqing", "abyusa_dunying"]],
key_godan: ["male", "key", 6, ["godan_yuanyi", "godan_feiqu", "godan_xiaoyuan"]],
key_yuu: ["male", "key", 3, ["yuu_lveduo"]],
key_ryoichi: ["male", "key", 4, ["ryoichi_baoyi", "ryoichi_tuipi"]],
key_kotori: ["female", "key", 3, ["kotori_yumo", "kotori_huazhan"]],
key_jojiro: ["male", "key", 4, ["jojiro_shensu", "jojiro_shunying"]],
key_shiroha: ["female", "key", 3, ["shiroha_yuzhao", "shiroha_guying", "shiroha_jiezhao"]],
key_shizuku: ["female", "key", 3, ["shizuku_sizhi", "shizuku_biyi", "shizuku_sanhua"]],
key_hiroto: ["male", "key", 3, ["hiroto_huyu", "hiroto_tuolao"]],
key_sakuya: ["male", "key", 3, ["youlong", "luanfeng", "sakuya_junbu"]],
key_youta: ["male", "key", 4, []],
key_rumi: ["female", "key", "3/4", ["rumi_shuwu"]],
key_chihaya: ["female", "key", 3, ["chihaya_liewu", "chihaya_youfeng"]],
key_yukito: ["male", "key", 4, ["yukito_kongwu", "yukito_yaxiang"]],
key_crow: ["male", "key", 4, [], ["unseen"]],
key_asara: ["female", "key", 3, ["asara_shelu", "asara_yingwei"]],
key_kotomi: ["female", "key", 3, ["kotomi_qinji", "kotomi_chuanxiang"]],
key_mia: ["female", "key", 3, ["mia_shihui", "mia_qianmeng"]],
key_kano: ["female", "key", 3, ["kano_liezhen", "kano_poyu"]],
db_key_liyingxia: [
"female",
"shu",
3,
["liyingxia_sanli", "liyingxia_zhenjun", "liyingxia_wumai"],
["doublegroup:shu:key"],
],
key_erika: ["female", "key", "3/3/2", ["erika_shisong", "erika_yousheng"]],
key_satomi: ["female", "key", 3, ["satomi_luodao", "satomi_daohai"]],
key_iriya: ["female", "key", 3, ["iriya_yinji", "iriya_haozhi"]],
key_fuuko: ["female", "key", 3, ["fuuko_xingdiao", "fuuko_chuanyuan"]],
sp_key_yuri: {
sex: "female",
group: "qun",
hp: 4,
skills: ["mubing", "ziqu", "diaoling"],
groupBorder: "key",
},
key_lucia: {
sex: "female",
group: "key",
hp: 2,
maxHp: 3,
skills: ["lucia_duqu", "lucia_zhenren"],
},
key_kyousuke: {
sex: "male",
group: "key",
hp: 4,
skills: ["nk_shekong", "key_huanjie"],
},
key_yuri: {
sex: "female",
group: "key",
hp: 3,
skills: ["yuri_xingdong", "key_huanjie", "yuri_wangxi"],
isZhugong: true,
},
key_haruko: {
sex: "female",
group: "key",
hp: 4,
skills: ["haruko_haofang", "haruko_zhuishi"],
},
key_umi: {
sex: "female",
group: "key",
hp: 3,
skills: ["umi_chaofan", "umi_lunhui", "umi_qihuan"],
},
key_umi2: {
sex: "female",
group: "key",
hp: 3,
isUnseen: true,
},
key_rei: {
sex: "male",
group: "key",
hp: 4,
skills: ["xiandeng", "shulv", "xisheng"],
},
key_komari: {
sex: "female",
group: "key",
hp: 3,
skills: ["komari_tiankou", "komari_xueshang"],
},
key_yukine: {
sex: "female",
group: "key",
hp: 3,
skills: ["yukine_wenzhou"],
},
key_yusa: {
sex: "female",
group: "key",
hp: 3,
skills: ["yusa_yanyi", "yusa_misa", "dualside"],
dualSideCharacter: "key_misa",
},
key_misa: {
sex: "female",
group: "key",
hp: 3,
skills: ["misa_yehuo", "misa_yusa", "dualside"],
isUnseen: true,
},
key_masato: {
sex: "male",
group: "key",
hp: 4,
maxHp: 8,
skills: ["masato_baoquan"],
},
key_iwasawa: {
sex: "female",
group: "key",
hp: 3,
skills: ["iwasawa_yinhang", "iwasawa_mysong"],
},
key_kengo: {
sex: "male",
group: "key",
hp: 4,
skills: ["kengo_weishang", "kengo_guidui"],
},
key_yoshino: {
sex: "male",
group: "key",
hp: 4,
skills: ["yoshino_jueyi"],
},
key_yui: {
sex: "female",
group: "key",
hp: 3,
skills: ["yui_jiang", "yui_lieyin", "yui_takaramono"],
},
key_tsumugi: {
sex: "female",
group: "key",
hp: 3,
skills: ["tsumugi_mugyu", "tsumugi_huilang"],
},
key_saya: {
sex: "female",
group: "key",
hp: 3,
skills: ["saya_shouji", "saya_powei"],
},
key_harukakanata: {
sex: "female",
group: "key",
hp: 3,
skills: ["haruka_shuangche"],
},
key_inari: {
sex: "female",
group: "key",
hp: 2,
skills: ["inari_baiwei", "inari_huhun"],
},
key_shiina: {
sex: "female",
group: "key",
hp: 3,
skills: ["shiina_qingshen", "shiina_feiyan"],
},
key_sunohara: {
sex: "double",
group: "key",
hp: 3,
hujia: 2,
skills: [
"sunohara_chengshuang",
"sunohara_tiaoyin",
"sunohara_jianren",
],
},
key_rin: {
sex: "female",
group: "key",
hp: 3,
skills: ["rin_baoqiu"],
},
key_sasami: {
sex: "female",
group: "key",
hp: 3,
skills: ["sasami_miaobian"],
},
key_akane: {
sex: "female",
group: "key",
hp: 3,
skills: ["akane_jugu", "akane_quanqing", "akane_yifu"],
isZhugong: true,
},
key_doruji: {
sex: "female",
group: "key",
hp: 16,
skills: ["doruji_feiqu"],
},
key_yuiko: {
sex: "female",
group: "key",
hp: 3,
skills: ["yuiko_fenglun", "yuiko_dilve"],
},
key_riki: {
sex: "double",
group: "key",
hp: 3,
skills: ["riki_spwenji", "riki_nvzhuang", "riki_mengzhong"],
},
key_hisako: {
sex: "female",
group: "key",
hp: 3,
skills: ["hisako_yinbao", "hisako_zhuanyun"],
},
key_hinata: {
sex: "male",
group: "key",
hp: 4,
skills: ["hinata_qiulve", "hinata_ehou"],
},
key_noda: {
sex: "male",
group: "key",
hp: 4,
skills: ["noda_fengcheng", "noda_xunxin"],
},
key_tomoya: {
sex: "male",
group: "key",
hp: 4,
skills: ["tomoya_shangxian", "tomoya_wangjin"],
},
key_nagisa: {
sex: "female",
group: "key",
hp: 3,
skills: ["nagisa_tiandu", "nagisa_fuxin"],
},
key_ayato: {
sex: "male",
group: "key",
hp: 3,
skills: ["ayato_jianshen", "ayato_zonghuan"],
},
key_ao: {
sex: "female",
group: "key",
hp: 3,
skills: ["ao_xishi", "ao_kuihun", "ao_shixin"],
},
key_yuzuru: {
sex: "male",
group: "key",
hp: 5,
skills: ["yuzuru_wuxin", "yuzuru_deyi"],
},
sp_key_kanade: {
sex: "female",
group: "key",
hp: 3,
skills: ["kanade_mapo", "kanade_benzhan"],
},
key_mio: {
sex: "female",
group: "key",
hp: 3,
skills: ["mio_tuifu", "mio_tishen"],
},
key_midori: {
sex: "female",
group: "key",
hp: 3,
skills: ["midori_nonghuan", "midori_tishen"],
},
key_kyoko: {
sex: "female",
group: "key",
hp: 3,
skills: ["kyoko_juwu", "kyoko_zhengyi"],
},
key_shizuru: {
sex: "female",
group: "key",
hp: 3,
skills: ["shizuru_nianli", "shizuru_benzhan"],
},
key_shiorimiyuki: {
sex: "female",
group: "key",
hp: 3,
skills: ["shiorimiyuki_banyin", "shiorimiyuki_tingxian"],
},
key_miki: {
sex: "female",
group: "key",
hp: 3,
skills: ["miki_shenqiang", "miki_huanmeng", "miki_zhiluo"],
},
key_shiori: {
sex: "female",
group: "key",
hp: 2,
maxHp: 3,
skills: ["shiori_huijuan"],
},
key_kaori: {
sex: "female",
group: "key",
hp: 3,
maxHp: 4,
skills: ["kaori_siyuan"],
},
key_akiko: {
sex: "female",
group: "key",
hp: 3,
skills: ["akiko_dongcha"],
},
key_abyusa: {
sex: "female",
group: "key",
hp: 3,
skills: ["abyusa_jueqing", "abyusa_dunying"],
},
key_godan: {
sex: "male",
group: "key",
hp: 6,
skills: ["godan_yuanyi", "godan_feiqu", "godan_xiaoyuan"],
},
key_yuu: {
sex: "male",
group: "key",
hp: 3,
skills: ["yuu_lveduo"],
},
key_ryoichi: {
sex: "male",
group: "key",
hp: 4,
skills: ["ryoichi_baoyi", "ryoichi_tuipi"],
},
key_kotori: {
sex: "female",
group: "key",
hp: 3,
skills: ["kotori_yumo", "kotori_huazhan"],
},
key_jojiro: {
sex: "male",
group: "key",
hp: 4,
skills: ["jojiro_shensu", "jojiro_shunying"],
},
key_shiroha: {
sex: "female",
group: "key",
hp: 3,
skills: ["shiroha_yuzhao", "shiroha_guying", "shiroha_jiezhao"],
},
key_shizuku: {
sex: "female",
group: "key",
hp: 3,
skills: ["shizuku_sizhi", "shizuku_biyi", "shizuku_sanhua"],
},
key_hiroto: {
sex: "male",
group: "key",
hp: 3,
skills: ["hiroto_huyu", "hiroto_tuolao"],
},
key_sakuya: {
sex: "male",
group: "key",
hp: 3,
skills: ["youlong", "luanfeng", "sakuya_junbu"],
},
key_youta: {
sex: "male",
group: "key",
hp: 4,
skills: [],
},
key_rumi: {
sex: "female",
group: "key",
hp: 3,
maxHp: 4,
skills: ["rumi_shuwu"],
},
key_chihaya: {
sex: "female",
group: "key",
hp: 3,
skills: ["chihaya_liewu", "chihaya_youfeng"],
},
key_yukito: {
sex: "male",
group: "key",
hp: 4,
skills: ["yukito_kongwu", "yukito_yaxiang"],
},
key_crow: {
sex: "male",
group: "key",
hp: 4,
skills: [],
isUnseen: true,
},
key_asara: {
sex: "female",
group: "key",
hp: 3,
skills: ["asara_shelu", "asara_yingwei"],
},
key_kotomi: {
sex: "female",
group: "key",
hp: 3,
skills: ["kotomi_qinji", "kotomi_chuanxiang"],
},
key_mia: {
sex: "female",
group: "key",
hp: 3,
skills: ["mia_shihui", "mia_qianmeng"],
},
key_kano: {
sex: "female",
group: "key",
hp: 3,
skills: ["kano_liezhen", "kano_poyu"],
},
db_key_liyingxia: {
sex: "female",
group: "shu",
hp: 3,
skills: ["liyingxia_sanli", "liyingxia_zhenjun", "liyingxia_wumai"],
doubleGroup: ["shu", "key"],
},
key_erika: {
sex: "female",
group: "key",
hp: 3,
hujia: 2,
skills: ["erika_shisong", "erika_yousheng"],
},
key_satomi: {
sex: "female",
group: "key",
hp: 3,
skills: ["satomi_luodao", "satomi_daohai"],
},
key_iriya: {
sex: "female",
group: "key",
hp: 3,
skills: ["iriya_yinji", "iriya_haozhi"],
},
key_fuuko: {
sex: "female",
group: "key",
hp: 3,
skills: ["fuuko_xingdiao", "fuuko_chuanyuan"],
},
};
export default characters;

View File

@ -6,97 +6,99 @@ import skills from "./skill.js";
import translates from "./translate.js";
game.import("character", function () {
return {
name: "key/index",
character: { ...characters },
characterFilter: {
key_jojiro(mode) {
return mode == "chess" || mode == "tafang";
},
key_yuu(mode) {
return (
mode == "identity" ||
mode == "doudizhu" ||
mode == "single" ||
(mode == "versus" && _status.mode != "standard" && _status.mode != "three")
);
},
key_tomoya(mode) {
return mode != "chess" && mode != "tafang" && mode != "stone";
},
key_sunohara(mode) {
return mode != "guozhan";
},
},
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<br>技能设计:落英逐紫裙",
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<br>战棋专属角色",
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",
},
card: { ...cards },
skill: { ...skills },
translate: { ...translates },
pinyins: { ...pinyins },
};
return {
name: "key",
character: { ...characters },
characterFilter: {
key_jojiro(mode) {
return mode == "chess" || mode == "tafang";
},
key_yuu(mode) {
return (
mode == "identity" ||
mode == "doudizhu" ||
mode == "single" ||
(mode == "versus" &&
_status.mode != "standard" &&
_status.mode != "three")
);
},
key_tomoya(mode) {
return mode != "chess" && mode != "tafang" && mode != "stone";
},
key_sunohara(mode) {
return mode != "guozhan";
},
},
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<br>技能设计:落英逐紫裙",
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<br>战棋专属角色",
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",
},
card: { ...cards },
skill: { ...skills },
translate: { ...translates },
pinyins: { ...pinyins },
};
});

View File

@ -1,91 +1,91 @@
const pinyins = {
加藤うみ: ["Kato", "Umi"],
仲村由理: ["Nakamura", "Yuri"],
此花露西娅: ["Konohana", "Lucia"],
枣恭介: ["Natsume", "Kyousuke"],
神尾晴子: ["Kamio", "Haruko"],
神北小毬: ["Kamikita", "Komari"],
宫泽有纪宁: ["Miyazawa", "Yukine"],
西森柚咲: ["Nishimori", "Yusa"],
黑羽美砂: ["Kurobane", "Misa"],
井之原真人: ["Inohara", "Masato"],
岩泽雅美: ["Iwasawa", "Masami"],
宫泽谦吾: ["Miyazawa", "Kengo"],
吉野晴彦: ["Yoshino", "Haruhiko"],
由依: ["Yui"],
紬文德斯: ["Tsumugi", "Wenders"],
朱鹭户沙耶: ["Tokido", "Saya"],
"三枝叶留佳&二木佳奈多": ["Saigusa", "Haruka", "Futaki", "Kanata"],
三枝二木: ["Saigusa", "Haruka", "Futaki", "Kanata"],
稻荷: ["Inari"],
椎名: ["Shiina"],
"春原阳平&春原芽衣": ["Sunohara", "Youhei", "Sunohara", "Mei"],
阳平芽衣: ["Sunohara", "Youhei", "Sunohara", "Mei"],
枣铃: ["Natsume", "Rin"],
笹濑川佐佐美: ["Sasasegawa", "Sasami"],
千里朱音: ["Senri", "Akane"],
多鲁基: ["Dorj"],
来谷唯湖: ["Kurugaya", "Yuiko"],
直枝理树: ["Naoe", "Riki"],
渕田久子: ["Fuchita", "Hisako"],
日向秀树: ["Hinata", "Hideki"],
野田: ["Noda"],
冈崎朋也: ["Okazaki", "Tomoya"],
古河渚: ["Furukawa", "Nagisa"],
直井文人: ["Naoi", "Ayato"],
空门苍: ["Sorakado", "Ao"],
音无结弦: ["Otonashi", "Yuzuru"],
立华奏: ["Tachibana", "Kanade"],
西园美鱼: ["Nishizono", "Mio"],
西园美鸟: ["Nishizono", "Midori"],
岬镜子: ["Misaki", "Kyoko"],
中津静流: ["Nakatsu", "Shizuru"],
"关根诗织&入江美雪": ["Sekine", "Shiori", "Irie", "Miyuki"],
关根入江: ["Sekine", "Shiori", "Irie", "Miyuki"],
野村美希: ["Nomura", "Miki"],
美坂栞: ["Misaka", "Shiori"],
美坂香里: ["Misaka", "Kaori"],
水濑秋子: ["Minase", "Akiko"],
游佐: ["Yusa"],
松下护騨: ["Matsushita", "Godan"],
乙坂有宇: ["Otosaka", "Yuu"],
三谷良一: ["Mitani", "Ryoichi"],
神户小鸟: ["Kanbe", "Kotori"],
高城丈士朗: ["Takajyo", "Jyojirou"],
鸣濑白羽: ["Naruse", "Shiroha"],
水织静久: ["Mizuori", "Shizuku"],
铃木央人: ["Suzuki", "Hiroto"],
凤咲夜: ["Ootori", "Sakuya"],
成神阳太: ["Narukami", "Youta"],
七濑留美: ["Nanase", "Rumi"],
凤千早: ["Ootori", "Chihaya"],
国崎往人: ["Kunisaki", "Yukito"],
井上晶: ["Inoue", "Asara"],
一之濑琴美: ["Ichinose", "Kotomi"],
藤川米娅: ["Fujikawa", "Mia"],
雾岛佳乃: ["Kirishima", "Kano"],
苍井绘梨花: ["Aoi", "Erika"],
藏里见: ["Kura", "Satomi"],
"喵呜·喵呼": ["Myau", "Mya-fu"],
喵呜喵呼: ["Myau", "Mya-fu"],
伊吹风子: ["Ibuki", "Fuuko"],
久岛鸥: ["Kushima", "Kamome"],
库特莉亚芙卡: ["Noumi", "Kudryavka"],
神尾观铃: ["Kamio", "Misuzu"],
友利奈绪: ["Tomori", "Nao"],
天王寺瑚太朗: ["Tennouji", "Kotarou"],
藤林杏: ["Fujibayashi", "Kyou"],
伊座并杏子: ["Izanami", "Kyouko"],
加纳天善: ["Kano", "Tenzen"],
冰室忧希: ["Himuro", "Yuuki"],
露娜Q: ["Lunar", "Q"],
远野小满: ["Toono", "Michiru"],
远野美凪: ["Toono", "Minagi"],
樱庭星罗: ["Sakuraba", "Seira"],
坂上智代: ["Sakagami", "Tomoyo"],
冈崎汐: ["Okazaki", "Ushio"],
神山识: ["Kamiyama", "Shiki"],
佐藤雏: ["Satou", "Hina"],
: ["Kagari"],
}
加藤うみ: ["Kato", "Umi"],
仲村由理: ["Nakamura", "Yuri"],
此花露西娅: ["Konohana", "Lucia"],
枣恭介: ["Natsume", "Kyousuke"],
神尾晴子: ["Kamio", "Haruko"],
神北小毬: ["Kamikita", "Komari"],
宫泽有纪宁: ["Miyazawa", "Yukine"],
西森柚咲: ["Nishimori", "Yusa"],
黑羽美砂: ["Kurobane", "Misa"],
井之原真人: ["Inohara", "Masato"],
岩泽雅美: ["Iwasawa", "Masami"],
宫泽谦吾: ["Miyazawa", "Kengo"],
吉野晴彦: ["Yoshino", "Haruhiko"],
由依: ["Yui"],
紬文德斯: ["Tsumugi", "Wenders"],
朱鹭户沙耶: ["Tokido", "Saya"],
"三枝叶留佳&二木佳奈多": ["Saigusa", "Haruka", "Futaki", "Kanata"],
三枝二木: ["Saigusa", "Haruka", "Futaki", "Kanata"],
稻荷: ["Inari"],
椎名: ["Shiina"],
"春原阳平&春原芽衣": ["Sunohara", "Youhei", "Sunohara", "Mei"],
阳平芽衣: ["Sunohara", "Youhei", "Sunohara", "Mei"],
枣铃: ["Natsume", "Rin"],
笹濑川佐佐美: ["Sasasegawa", "Sasami"],
千里朱音: ["Senri", "Akane"],
多鲁基: ["Dorj"],
来谷唯湖: ["Kurugaya", "Yuiko"],
直枝理树: ["Naoe", "Riki"],
渕田久子: ["Fuchita", "Hisako"],
日向秀树: ["Hinata", "Hideki"],
野田: ["Noda"],
冈崎朋也: ["Okazaki", "Tomoya"],
古河渚: ["Furukawa", "Nagisa"],
直井文人: ["Naoi", "Ayato"],
空门苍: ["Sorakado", "Ao"],
音无结弦: ["Otonashi", "Yuzuru"],
立华奏: ["Tachibana", "Kanade"],
西园美鱼: ["Nishizono", "Mio"],
西园美鸟: ["Nishizono", "Midori"],
岬镜子: ["Misaki", "Kyoko"],
中津静流: ["Nakatsu", "Shizuru"],
"关根诗织&入江美雪": ["Sekine", "Shiori", "Irie", "Miyuki"],
关根入江: ["Sekine", "Shiori", "Irie", "Miyuki"],
野村美希: ["Nomura", "Miki"],
美坂栞: ["Misaka", "Shiori"],
美坂香里: ["Misaka", "Kaori"],
水濑秋子: ["Minase", "Akiko"],
游佐: ["Yusa"],
松下护騨: ["Matsushita", "Godan"],
乙坂有宇: ["Otosaka", "Yuu"],
三谷良一: ["Mitani", "Ryoichi"],
神户小鸟: ["Kanbe", "Kotori"],
高城丈士朗: ["Takajyo", "Jyojirou"],
鸣濑白羽: ["Naruse", "Shiroha"],
水织静久: ["Mizuori", "Shizuku"],
铃木央人: ["Suzuki", "Hiroto"],
凤咲夜: ["Ootori", "Sakuya"],
成神阳太: ["Narukami", "Youta"],
七濑留美: ["Nanase", "Rumi"],
凤千早: ["Ootori", "Chihaya"],
国崎往人: ["Kunisaki", "Yukito"],
井上晶: ["Inoue", "Asara"],
一之濑琴美: ["Ichinose", "Kotomi"],
藤川米娅: ["Fujikawa", "Mia"],
雾岛佳乃: ["Kirishima", "Kano"],
苍井绘梨花: ["Aoi", "Erika"],
藏里见: ["Kura", "Satomi"],
"喵呜·喵呼": ["Myau", "Mya-fu"],
喵呜喵呼: ["Myau", "Mya-fu"],
伊吹风子: ["Ibuki", "Fuuko"],
久岛鸥: ["Kushima", "Kamome"],
库特莉亚芙卡: ["Noumi", "Kudryavka"],
神尾观铃: ["Kamio", "Misuzu"],
友利奈绪: ["Tomori", "Nao"],
天王寺瑚太朗: ["Tennouji", "Kotarou"],
藤林杏: ["Fujibayashi", "Kyou"],
伊座并杏子: ["Izanami", "Kyouko"],
加纳天善: ["Kano", "Tenzen"],
冰室忧希: ["Himuro", "Yuuki"],
露娜Q: ["Lunar", "Q"],
远野小满: ["Toono", "Michiru"],
远野美凪: ["Toono", "Minagi"],
樱庭星罗: ["Sakuraba", "Seira"],
坂上智代: ["Sakagami", "Tomoyo"],
冈崎汐: ["Okazaki", "Ushio"],
神山识: ["Kamiyama", "Shiki"],
佐藤雏: ["Satou", "Hina"],
: ["Kagari"],
};
export default pinyins;

File diff suppressed because it is too large Load Diff

View File

@ -87,7 +87,8 @@ const translates = {
nk_shekong_info:
"出牌阶段限一次你可以弃置任意张手牌并选择一名其他角色不能超过该角色的牌数然后令其选择一项弃置一张牌并令你摸X张牌或弃置X张牌并令你摸一张牌。然后你将你与其弃置的且位于弃牌堆中的牌以任意顺序置于牌堆顶。",
key_huanjie: "幻界",
key_huanjie_info: "锁定技,当你进行判定或摸牌时,你改为从牌堆的另一端获取相应的牌。",
key_huanjie_info:
"锁定技,当你进行判定或摸牌时,你改为从牌堆的另一端获取相应的牌。",
yuri_xingdong: "行动",
yuri_xingdong_info:
"锁定技,出牌阶段开始时,你获得一张【杀】或普通锦囊牌。出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。",
@ -135,7 +136,8 @@ const translates = {
masato_baoquan_info:
"锁定技当你即将造成伤害时你选择一项1.令此伤害+2并减1点体力上限。2.防止此伤害。",
iwasawa_yinhang: "引吭",
iwasawa_yinhang_info: "锁定技当你的体力值变化1点时你可以令至多两名角色摸一张牌。",
iwasawa_yinhang_info:
"锁定技当你的体力值变化1点时你可以令至多两名角色摸一张牌。",
iwasawa_mysong: "My Song",
iwasawa_mysong_info:
"锁定技当你即将进行濒死结算时取消之。回合开始时若你的体力值小于1则你获得技能〖奋音〗直到回合结束。回合结束时若你的体力值小于1你死亡。",
@ -168,9 +170,11 @@ const translates = {
"觉醒技准备阶段若你满足以下条件中的至少两个①体力值不大于1②场上有已死亡的角色③已因〖激昂〗累计获得过至少三张牌则你获得技能〖引吭〗将〖烈音〗描述中的「你选择」改为「你可选择」然后加1点体力上限并回复1点体力。",
//ユイ/孙笨双将组合时,孙笨的〖激昂〗不计入〖珍宝〗的次数统计
yui_yinhang: "引吭",
yui_yinhang_info: "锁定技当你的体力值变化1点时你可以令至多两名角色摸一张牌。",
yui_yinhang_info:
"锁定技当你的体力值变化1点时你可以令至多两名角色摸一张牌。",
tsumugi_mugyu: "姆啾",
tsumugi_mugyu_info: "当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。",
tsumugi_mugyu_info:
"当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。",
tsumugi_huilang: "回廊",
tsumugi_huilang2: "回廊",
tsumugi_huilang_info:
@ -193,7 +197,8 @@ const translates = {
//〖破围〗不会因为〖铁骑〗无效
inari_baiwei: "摆尾",
inari_baiwei_draw: "摆尾",
inari_baiwei_info: "你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。",
inari_baiwei_info:
"你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。",
//你不能以此法使用【毒】
inari_baiwei_backup: "摆尾",
inari_baiwei_sha: "摆尾",
@ -210,7 +215,8 @@ const translates = {
//你不能对稻荷和多鲁基发动〖飞燕〗
sunohara_chengshuang: "成双",
sunohara_chengshuang_phase: "成双",
sunohara_chengshuang_info: "锁定技,游戏开始时,你选择你的性别。回合开始时,你可以切换你的性别。",
sunohara_chengshuang_info:
"锁定技,游戏开始时,你选择你的性别。回合开始时,你可以切换你的性别。",
sunohara_tiaoyin: "挑引",
sunohara_tiaoyin_info:
"出牌阶段限一次你可以弃置任意张花色各不相同的手牌然后获得等量角色区域内的各一张牌。若你以此法获得了异性角色区域内的牌则你失去1点体力。",
@ -233,7 +239,8 @@ const translates = {
sasami_baoqiu_info:
"锁定技,你的攻击范围+2。当你使用【杀】指定目标后你进行判定。若结果为红色此【杀】对其的伤害值基数+1为黑色其无法闪避此【杀】为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。",
akane_jugu: "巨贾",
akane_jugu_info: "锁定技1.你的手牌上限+X。2.游戏开始时你摸X张牌X为你的体力上限。",
akane_jugu_info:
"锁定技1.你的手牌上限+X。2.游戏开始时你摸X张牌X为你的体力上限。",
akane_quanqing: "权倾",
akane_quanqing_info:
"出牌阶段你可选择1.弃置一张点数大于10的牌并对攻击范围内的一名其他角色造成1点伤害2.弃置一张点数大于6的牌并弃置攻击范围内的一名其他角色区域内的一张牌。3.弃置一张牌并令攻击范围内的一名其他角色摸一张牌。",
@ -242,12 +249,14 @@ const translates = {
akane_yifu_info:
"主公技,其他键势力角色的出牌阶段限一次,其可交给你一张手牌。然后你摸一张牌,并将一张手牌交给该角色。",
doruji_feiqu: "肥躯",
doruji_feiqu_info: "锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。",
doruji_feiqu_info:
"锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。",
yuiko_fenglun: "锋论",
yuiko_fenglun_info:
"出牌阶段限一次,你可以和一名其他角色拼点。若你赢,你本阶段内使用牌没有次数和距离限制。",
yuiko_dilve: "底略",
yuiko_dilve_info: "你可以使用牌堆底的一张牌进行拼点。当你拼点后,你可以获得两张拼点牌。",
yuiko_dilve_info:
"你可以使用牌堆底的一张牌进行拼点。当你拼点后,你可以获得两张拼点牌。",
riki_spwenji: "问计",
riki_spwenji_info:
"出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌名称相同的牌时不能被其他角色响应。",
@ -294,7 +303,8 @@ const translates = {
ayato_zonghuan_info:
"出牌阶段限一次,你可以观看一名其他角色的手牌,然后选择一项:将其中的一张牌置入弃牌堆,或以该角色的视角使用其中的一张,然后摸一张牌。",
ao_xishi: "习事",
ao_xishi_info: "锁定技,当你使用或打出♦牌时,或其他角色使用♦牌指定你为目标后,你摸一张牌。",
ao_xishi_info:
"锁定技,当你使用或打出♦牌时,或其他角色使用♦牌指定你为目标后,你摸一张牌。",
ao_kuihun: "窥魂",
ao_kuihun_info:
"其他角色进入濒死状态时,你可以摸一张牌,然后观看其手牌并将其中一张牌置于你的武将牌上,称为「蝶」。你使用与一张「蝶」花色相同的牌时无距离和次数限制。你的手牌上限+XX为蝶数。",
@ -303,7 +313,8 @@ const translates = {
"觉醒技准备阶段若你的「蝶」中包含至少三种花色则你加1点体力上限并回复1点体力失去〖窥魂〗并获得〖蝶归〗。",
ao_diegui: "蝶归",
ao_diegui_backup: "蝶归",
ao_diegui_info: "出牌阶段限一次,你可以将一张「蝶」交给一名角色,该角色摸两张牌并复原武将牌。",
ao_diegui_info:
"出牌阶段限一次,你可以将一张「蝶」交给一名角色,该角色摸两张牌并复原武将牌。",
yuzuru_wuxin: "无心",
yuzuru_wuxin_info:
"结束阶段你可以选择一项失去1点体力并令一名角色摸两张牌或弃置两张牌并回复1点体力。",
@ -320,14 +331,17 @@ const translates = {
yuzuru_quji_info:
"出牌阶段限一次你可以弃置X张牌并选择至多等量已受伤的其他角色这些角色各回复1点体力。若你以此法弃置了黑色牌则你失去1点体力。X为你已损失的体力值",
yuzuru_kunfen_rewrite: "困奋·改",
yuzuru_kunfen_rewrite_info: "锁定技,结束阶段,你摸两张牌。然后你可以将两张牌交给一名其他角色。",
yuzuru_kunfen_rewrite_info:
"锁定技,结束阶段,你摸两张牌。然后你可以将两张牌交给一名其他角色。",
yuzuru_quji_rewrite: "去疾·改",
yuzuru_quji_rewrite_info:
"出牌阶段限一次你可以弃置X张牌并选择至多等量已受伤的其他角色这些角色各回复1点体力。X为你已损失的体力值",
yuzuru_bujin: "步进",
yuzuru_bujin_info: "锁定技,己方其他角色计算与其他角色的距离-1且摸牌阶段的额定摸牌数+1。",
yuzuru_bujin_info:
"锁定技,己方其他角色计算与其他角色的距离-1且摸牌阶段的额定摸牌数+1。",
kanade_mapo: "麻婆",
kanade_mapo_info: "你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。",
kanade_mapo_info:
"你可以将一张♥牌当做【麻婆豆腐】使用。你使用的【麻婆豆腐】可以多指定一个目标。",
kanade_benzhan: "奔战",
kanade_benzhan_info:
"每回合限一次。当你使用或打出牌响应其他角色或其他角色使用或打出牌响应你后若此牌为基本牌你可令一名角色弃置两张牌或令一名角色摸两张牌非基本牌你可对一名角色造成1点伤害或令一名其他角色回复1点体力。",
@ -359,7 +373,8 @@ const translates = {
shizuru_benzhan_info:
"每回合限一次。当你使用或打出牌响应其他角色或其他角色使用或打出牌响应你后若此牌为基本牌你可令一名角色弃置两张牌或令一名角色摸两张牌非基本牌你可对一名角色造成1点伤害或令一名其他角色回复1点体力。",
shiorimiyuki_banyin: "伴音",
shiorimiyuki_banyin_info: "当你受到伤害或回复体力后你可令一名其他角色回复1点体力。",
shiorimiyuki_banyin_info:
"当你受到伤害或回复体力后你可令一名其他角色回复1点体力。",
shiorimiyuki_tingxian: "铤险",
shiorimiyuki_tingxian_info:
"出牌阶段开始时你可以摸至多三张牌。若如此做你回复1点体力且此阶段结束时你失去X点体力。X为你得到的牌中仍在手牌区的牌的数量",
@ -403,7 +418,8 @@ const translates = {
godan_yuanyi_info:
"锁定技回合开始时你摸X张牌并进行一个额外的出牌阶段。X为游戏轮数且至多为3",
godan_feiqu: "肥躯",
godan_feiqu_info: "锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。",
godan_feiqu_info:
"锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。",
godan_xiaoyuan: "消元",
godan_xiaoyuan_info:
"觉醒技当你扣减体力时若你的体力值小于4则你减3点体力上限并摸三张牌失去【肥躯】。",
@ -430,7 +446,8 @@ const translates = {
kotori_skill_shu_info:
"你使用【杀】上限+1出牌阶段结束时若你于此阶段使用【杀】次数不少于2摸一张牌。",
kotori_skill_wu: "吴耀",
kotori_skill_wu_info: "回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。",
kotori_skill_wu_info:
"回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。",
kotori_skill_qun: "群心",
kotori_skill_qun_info:
"锁定技弃牌阶段开始时若你的手牌数比体力值多2或更多你本回合手牌上限+1若你已损失体力值大于1你手牌上限+1。",
@ -480,7 +497,8 @@ const translates = {
shizuku_biyi_info:
"当你受到伤害后你可以进行一次判定然后若你弃置任意张点数之和与判定结果点数相同的牌你回复1点体力。",
shizuku_sanhua: "散花",
shizuku_sanhua_info: "当你死亡时,你可令一名其他角色从牌堆中获得四张名称各不相同的基本牌。",
shizuku_sanhua_info:
"当你死亡时,你可令一名其他角色从牌堆中获得四张名称各不相同的基本牌。",
hiroto_huyu: "虎驭",
hiroto_huyu2: "虎驭",
hiroto_huyu_info:
@ -536,7 +554,8 @@ const translates = {
mia_qianmeng_info:
"使命技。①游戏开始时,你摸一张牌,然后将一张牌置于牌堆的正中央。②使命:当有角色获得“潜梦”牌时,其将此牌交给你。你将体力值回复至上限,失去〖时迴〗并获得〖风发〗。③失败:当你死亡时,你可令一名角色获得牌堆中所有与“潜梦”牌花色点数相同的牌。",
mia_fengfa: "风发",
mia_fengfa_info: "锁定技。摸牌阶段你多摸X张牌X为你上回合使用过的牌数。",
mia_fengfa_info:
"锁定技。摸牌阶段你多摸X张牌X为你上回合使用过的牌数。",
kano_liezhen: "列阵",
kano_liezhen_info:
"结束阶段,若你本回合内使用过牌且这些牌的类型:不均相同,你可视为使用【排兵布阵】或智囊;均相同,你获得仁库中的所有牌(没有则改为摸两张牌)。",
@ -569,7 +588,8 @@ const translates = {
satomi_daohai: "稻海",
satomi_daohai_info:
"结束阶段,若你本回合内弃置过牌,则你可以视为使用一张【五谷丰登】。然后你可以将你于此【五谷丰登】中得到的牌当做【乐不思蜀】使用。",
satomi_daohai_append: '<span style="font-family: yuanli">五穀豊穣、刈り入れ時だね!</span>',
satomi_daohai_append:
'<span style="font-family: yuanli">五穀豊穣、刈り入れ時だね!</span>',
tenzen_fenghuan: "封还",
tenzen_fenghuan_info:
"其他角色使用的【杀】或伤害性锦囊牌结算结束后,若你是此牌的唯一目标,则你可以弃置任意张点数之和大于等于此牌点数两倍的牌,然后视为对其使用一张名称相同的牌。",
@ -577,7 +597,8 @@ const translates = {
tenzen_retianquan_info:
"每回合限一次。当你使用【杀】指定目标后你可失去1点体力或弃置一张牌然后亮出牌堆顶的三张牌若你的体力值小于体力上限的50%,则改为展示五张牌)。这些牌中每有一张基本牌,响应此牌所需的【闪】的数量便+1。此牌结算结束后若此牌造成过伤害则你获得展示牌中的所有非基本牌。",
iriya_yinji: "殷极",
iriya_yinji_info: "锁定技。出牌阶段开始时你将手牌摸至17张。你不能直接使用以此法得到的牌。",
iriya_yinji_info:
"锁定技。出牌阶段开始时你将手牌摸至17张。你不能直接使用以此法得到的牌。",
iriya_haozhi: "豪掷",
iriya_haozhi_info:
"出牌阶段,你可以按照斗地主牌型弃置至少两张牌,且其他角色可以依次对其进行一轮响应。最后一名进行响应的角色可以根据对应牌型执行对应效果。" +
@ -594,6 +615,6 @@ const translates = {
fuuko_chuanyuan: "传愿",
fuuko_chuanyuan_info:
"锁定技。当你失去一张“星”后你回复1点体力然后从牌堆中获得一张和“星”花色点数相同的牌没有则改为摸一张牌且使用此牌无距离和次数限制。",
}
};
export default translates;

View File

@ -22,6 +22,23 @@ if (core === "chrome" && !isNaN(version) && version < 77) {
boot().then(() => {
// 判断是否从file协议切换到http/s协议
if (canUseHttpProtocol()) {
// 保存协议的切换状态
const saveProtocol = () => {
const url = sendUpdate();
if (typeof url == "string") {
if (
typeof window.require == "function" &&
typeof window.process == "object"
) {
// @ts-ignore
const remote = require("@electron/remote");
const thisWindow = remote.getCurrentWindow();
thisWindow.loadURL(url);
} else {
location.href = url;
}
}
};
/*
升级方法:
1. 游戏启动后导出数据然后以http/s协议重启
@ -61,23 +78,6 @@ boot().then(() => {
});
});
}
// 保存协议的切换状态
function saveProtocol() {
const url = sendUpdate();
if (typeof url == "string") {
if (
typeof window.require == "function" &&
typeof window.process == "object"
) {
// @ts-ignore
const remote = require("@electron/remote");
const thisWindow = remote.getCurrentWindow();
thisWindow.loadURL(url);
} else {
location.href = url;
}
}
}
} else {
// 成功导入后删除noname.config.txt
let searchParams = new URLSearchParams(location.search);

View File

@ -25,13 +25,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
for (var i in lib.characterPack.mode_boss) {
lib.character[i] = lib.characterPack.mode_boss[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
}
// for(var i in lib.cardPack.mode_boss){
// lib.card[i]=lib.cardPack.mode_boss[i];
// }
for (var i in lib.skill) {
if (lib.skill[i].changeSeat) {
lib.skill[i] = {};
@ -82,7 +76,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (lib.storage.current == undefined) lib.storage.current = "boss_hundun";
for (var i in lib.character) {
var info = lib.character[i];
if (info[4].includes("boss")) {
if (info.isBoss) {
// var cfg=i+'_bossconfig';
// if(get.config(cfg)==undefined){
// game.saveConfig(cfg,true,true);
@ -1443,7 +1437,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
},
init: function () {
for (var i in lib.characterPack.mode_boss) {
if (lib.characterPack.mode_boss[i][4].includes("hiddenboss")) continue;
if (get.convertedCharacter(lib.characterPack.mode_boss[i]).isHiddenBoss) continue;
lib.mode.boss.config[i + "_boss_config"] = {
name: get.translation(i),
init: true,
@ -1643,10 +1637,10 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var list = [];
event.list = list;
for (i in lib.character) {
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i][4].includes("boss")) continue;
if (lib.character[i][4].includes("hiddenboss")) continue;
if (lib.character[i][4] && lib.character[i][4].includes("forbidai")) continue;
if (lib.character[i].isMinskin) continue;
if (lib.character[i].isBoss) continue;
if (lib.character[i].isHiddenBoss) continue;
if (lib.character[i].isAiForbidden) continue;
if (lib.config.forbidboss.includes(i)) continue;
if (lib.filter.characterDisabled(i)) continue;
list.push(i);
@ -7027,8 +7021,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
for (var i in lib.character) {
if (lib.character[i][1] != "wei") continue;
if (lib.character[i][4].includes("boss")) continue;
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i].isBoss) continue;
if (lib.character[i].isMinskin) continue;
if (player.storage.xiongcai.includes(i)) continue;
if (list2.includes(i)) continue;
list.push(i);

View File

@ -533,9 +533,11 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (lib.filter.characterDisabled(name)) continue;
if (name.indexOf("old_") == 0) continue;
var skillsx = lib.character[name][3].slice(0);
lib.character[name][2] = 4;
lib.character[name][3] = [];
if (lib.character[name][4]) lib.character[name][4].remove("hiddenSkill");
lib.character[name].hp = 4;
lib.character[name].maxHp = 4;
lib.character[name].hujia = 0;
lib.character[name].skills = [];
lib.character[name].hasHiddenSkill = false;
characters.push(name);
var list = skillsx.slice(0);
for (var j = 0; j < skillsx.length; j++) {

View File

@ -45,9 +45,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
if (!playback && i.indexOf("leader_") == 0 && _status.mode != "leader") continue;
lib.character[i] = lib.characterPack.mode_chess[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
}
}
if (get.config("chess_card")) {
@ -106,7 +103,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
} else {
game.chooseCharacterDouble(
function (i) {
if (lib.character[i][4].includes("chessboss")) {
if (lib.character[i].isChessBoss) {
return false;
}
return !lib.filter.characterDisabled(i);
@ -3957,15 +3954,15 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var jiangelist = [];
event.list = list;
for (i in lib.character) {
if (lib.character[i][4].includes("chessboss")) {
if (lib.character[i].isChessBoss) {
bosslist.push(i);
continue;
} else if (lib.character[i][4].includes("jiangeboss")) {
} else if (lib.character[i].isJiangeBoss) {
// if(get.config('chess_jiange')) jiangelist.push(i);
continue;
}
if (i.indexOf("treasure_") == 0) continue;
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i].isMinskin) continue;
if (lib.config.forbidchess.includes(i)) continue;
if (lib.filter.characterDisabled(i)) continue;
list.push(i);

View File

@ -9,25 +9,13 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (lib.character[i.slice(3)]) continue;
}
lib.character[i] = lib.characterPack.mode_guozhan[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
if (!lib.translate[i]) {
lib.translate[i] = lib.translate[i.slice(3)];
}
}
for (var i in lib.character) {
if (lib.character[i][1] == "shen") {
if (lib.character[i][4]) {
var group = lib.character[i][4].find(
(group) =>
lib.group.includes(group) || group == "key" || group.startsWith("gzgroup:")
);
if (group) {
if (group.startsWith("gzgroup:")) lib.character[i][1] = group.slice(8);
else lib.character[i][1] = group;
} else lib.character[i][1] = "qun";
} else lib.character[i][1] = "qun";
if (lib.character[i].group == "shen") {
lib.character[i].group = (lib.character[i].groupInGuozhan || "qun");
}
}
},
@ -35,25 +23,13 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var pack = lib.characterPack.mode_guozhan;
for (var i in pack) {
lib.character[i] = pack[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
if (!lib.translate[i]) {
lib.translate[i] = lib.translate[i.slice(3)];
}
}
for (var i in lib.character) {
if (lib.character[i][1] == "shen") {
if (lib.character[i][4]) {
var group = lib.character[i][4].find(
(group) =>
lib.group.includes(group) || group == "key" || group.startsWith("gzgroup:")
);
if (group) {
if (group.startsWith("gzgroup:")) lib.character[i][1] = group.slice(8);
else lib.character[i][1] = group;
} else lib.character[i][1] = "qun";
} else lib.character[i][1] = "qun";
if (lib.character[i].group == "shen") {
lib.character[i].group = (lib.character[i].groupInGuozhan || "qun");
}
}
},
@ -91,7 +67,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
delete lib.translate.shuiyanqijunx_info_guozhan;
const pack = lib.yingbian_guozhan;
for (const i in pack) {
if (!pack[i][4]) pack[i][4] = [];
lib.character[i] = pack[i];
lib.characterPack.mode_guozhan[i] = pack[i];
if (!lib.translate[i]) lib.translate[i] = lib.translate[i.slice(3)];
@ -144,7 +119,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
delete lib.translate.shuiyanqijunx_info_guozhan;
const pack2 = lib.yingbian_guozhan;
for (const i in pack2) {
if (!pack2[i][4]) pack2[i][4] = [];
pack[i] = pack2[i];
}
}
@ -154,28 +128,13 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
for (var i in pack) {
lib.character[i] = pack[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
if (!lib.translate[i]) {
lib.translate[i] = lib.translate[i.slice(3)];
}
}
for (var i in lib.character) {
if (lib.character[i][1] == "shen") {
if (lib.character[i][4]) {
var group = lib.character[i][4].find(
(group) =>
lib.group.includes(group) ||
group == "key" ||
group.startsWith("gzgroup:")
);
if (group) {
if (group.startsWith("gzgroup:"))
lib.character[i][1] = group.slice(8);
else lib.character[i][1] = group;
} else lib.character[i][1] = "qun";
} else lib.character[i][1] = "qun";
lib.character[i].group = (lib.character[i].groupInGuozhan || "qun");
}
}
//lib.characterReplace={};
@ -22319,9 +22278,9 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
continue;
if (get.is.jun(i)) continue;
}
if (lib.character[i][4].includes("hiddenSkill")) continue;
if (lib.character[i][2] == 3 || lib.character[i][2] == 4 || lib.character[i][2] == 5)
event.list.push(i);
if (lib.character[i].hasHiddenSkill) continue;
const hp = lib.character[i].hp, maxHp = lib.character[i].maxHp;
if (hp === maxHp && hp >= 3 && hp <= 5) event.list.push(i);
}
_status.characterlist = event.list.slice(0);
_status.yeidentity = [];
@ -22368,7 +22327,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
}
}
if (lib.character[button.link][4].includes("hiddenSkill")) return false;
if (lib.character[button.link].hasHiddenSkill) return false;
var filterChoice = function (name1, name2) {
if (_status.separatism) return true;
var group1 = lib.character[name1][1];

View File

@ -1051,7 +1051,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
list.push(group);
}
map[group].push(i);
if (lib.character[i][4] && lib.character[i][4].includes("zhu")) {
if (lib.character[i].isZhugong) {
if (!map_zhu[group]) {
map_zhu[group] = [];
}
@ -1230,7 +1230,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
list.push(group);
}
map[group].push(i);
if (lib.character[i][4] && lib.character[i][4].includes("zhu")) {
if (lib.character[i].isZhugong) {
if (!map_zhu[group]) {
map_zhu[group] = [];
}
@ -1496,8 +1496,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (
get.is.double(result[i][0]) ||
(lib.character[result[i][0]] &&
lib.character[result[i][0]][1] == "shen" &&
!lib.character[result[i][0]][4].includes("hiddenSkill"))
lib.character[result[i][0]].group == "shen" &&
!lib.character[result[i][0]].hasHiddenSkill)
)
shen.push(lib.playerOL[i]);
}
@ -2098,7 +2098,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
} else {
var bool = false;
for (var j of ix) {
if (lib.character[j][4] && lib.character[j][4].includes("zhu")) {
if (lib.character[j].isZhugong) {
bool = true;
break;
}
@ -2113,7 +2113,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (lib.filter.characterDisabled(i)) continue;
event.list.push(i);
list4.push(i);
if (!stratagemMode && lib.character[i][4] && lib.character[i][4].includes("zhu")) {
if (!stratagemMode && lib.character[i].isZhugong) {
list2.push(i);
} else {
list3.push(i);
@ -2366,8 +2366,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
game.me._groupChosen = true;
game.me.chooseControl(get.is.double(name, true)).set("prompt", "请选择你的势力");
} else if (
lib.character[name][1] == "shen" &&
!lib.character[name][4].includes("hiddenSkill") &&
lib.character[name].group == "shen" &&
!lib.character[name].hasHiddenSkill &&
get.config("choose_group")
) {
var list = lib.group.slice(0);
@ -2560,7 +2560,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var pack = lib.characterPack[lib.configOL.characterPack[i]];
for (var j in pack) {
// if(j=='zuoci') continue;
if (lib.character[j]) libCharacter[j] = pack[j];
if (lib.character[j]) libCharacter[j] = lib.character[j];
}
}
for (i in lib.characterReplace) {
@ -2575,7 +2575,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
list4.addArray(ix);
var bool = false;
for (var j of ix) {
if (libCharacter[j][4] && libCharacter[j][4].includes("zhu")) {
if (libCharacter[j].isZhugong) {
bool = true;
break;
}
@ -2597,7 +2597,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
event.list.push(i);
event.list2.push(i);
list4.push(i);
if (libCharacter[i][4] && libCharacter[i][4].includes("zhu")) {
if (libCharacter[i].isZhugong) {
list2.push(i);
} else {
list3.push(i);
@ -2772,8 +2772,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (
get.is.double(result[i][0]) ||
(lib.character[result[i][0]] &&
lib.character[result[i][0]][1] == "shen" &&
!lib.character[result[i][0]][4].includes("hiddenSkill"))
lib.character[result[i][0]].group == "shen" &&
!lib.character[result[i][0]].hasHiddenSkill)
)
shen.push(lib.playerOL[i]);
}

View File

@ -307,9 +307,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (_status.mode != "normal") return;
for (var i in lib.characterSingle) {
lib.character[i] = lib.characterSingle[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
}
for (var j in lib.singleTranslate) lib.translate[j] = lib.singleTranslate[j];
},
@ -352,11 +349,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
for (var j in singleTranslate) lib.translate[j] = singleTranslate[j];
_status.characterlist = [];
for (var i in characterSingle) {
if (!jin && characterSingle[i][1] == "jin") continue;
if (!jin && get.convertedCharacter(characterSingle[i]) == "jin") continue;
lib.character[i] = characterSingle[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
_status.characterlist.push(i);
}
},
@ -647,7 +641,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
[game.me, game.me.enemy].forEach((current) => {
if (
current.storage.nohp ||
(lib.character[current.name1][4].includes("hiddenSkill") && !current.noclick)
(lib.character[current.name1].hasHiddenSkil && !current.noclick)
) {
current.storage.rawHp = 1;
current.storage.rawMaxHp = 1;
@ -1116,7 +1110,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
current.init(result[i][0]);
if (
current.storage.nohp ||
(lib.character[current.name1][4].includes("hiddenSkill") && !current.noclick)
(lib.character[current.name1].hasHiddenSkil && !current.noclick)
) {
current.storage.rawHp = 1;
current.storage.rawMaxHp = 1;
@ -1134,7 +1128,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
current.init(result[i][0]);
if (
current.storage.nohp ||
(lib.character[current.name1][4].includes("hiddenSkill") &&
(lib.character[current.name1].hasHiddenSkil &&
!current.noclick)
) {
current.storage.rawHp = 1;

View File

@ -2256,33 +2256,33 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var i, j, name;
for (var i in lib.characterPack.mode_stone) {
lib.character[i] = lib.characterPack.mode_stone[i];
if (lib.characterPack.mode_stone[i][4].includes("stonespecial")) continue;
lib.character[i][3].add("stonesha");
lib.character[i][3].add("stoneshan");
lib.character[i][3].add("stonedraw");
if (lib.character[i].isSpecialInStoneMode) continue;
lib.character[i].skills.add("stonesha");
lib.character[i].skills.add("stoneshan");
lib.character[i].skills.add("stonedraw");
name = i + "_stonecharacter";
lib.card[name] = {
image: "mode/stone/character/" + i,
stoneact: lib.character[i][5][0],
career: lib.character[i][5][2] || null,
stoneact: lib.character[i].stoneModeData[0],
career: lib.character[i].stoneModeData[2] || null,
};
for (j in lib.element.stonecharacter) {
lib.card[name][j] = lib.element.stonecharacter[j];
}
lib.translate[name] = get.translation(i);
lib.translate[name + "_info"] = get.skillintro(i);
if (lib.character[i][4].includes("stonehidden")) {
if (lib.character[i].isHiddenInStoneMode) {
lib.card[name].stonehidden = true;
continue;
}
if (!lib.character[i][5][2]) {
if (lib.character[i][5][0] < 3) {
if (!lib.character[i].stoneModeData[2]) {
if (lib.character[i].stoneModeData[0] < 3) {
list.push(name);
} else {
list2.push(name);
}
} else {
list3[lib.character[i][5][2]].push(name);
list3[lib.character[i].stoneModeData[2]].push(name);
}
}
if (_status.mode == "deck") {
@ -2415,8 +2415,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var list = [];
event.list = list;
for (i in lib.character) {
if (lib.character[i][4] && lib.character[i][4].includes("minskin")) continue;
if (lib.character[i][4] && lib.character[i][4].includes("stonehidden")) continue;
if (lib.character[i].isMinskin) continue;
if (lib.character[i].isHiddenInStoneMode) continue;
if (lib.config.forbidstone.includes(i)) continue;
if (lib.filter.characterDisabled(i)) continue;
list.push(i);
@ -5867,7 +5867,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
return target.isMin();
},
content: function () {
target.clearSkills();
target.clearSkills(true);
target.init("stone_qingwa");
target.noPhaseDelay = true;
},
@ -7232,10 +7232,10 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var list = [];
for (var i in lib.character) {
if (
lib.character[i][4].includes("stone") &&
!lib.character[i][4].includes("stonehidden") &&
lib.character[i][5] &&
lib.character[i][5][0] == num
lib.character[i].isFellowInStoneMode &&
!lib.character[i].isHiddenInStoneMode &&
lib.character[i].stoneModeData &&
lib.character[i].stoneModeData[0] == num
) {
list.push(i);
}
@ -7787,10 +7787,10 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var list = [];
for (var i in lib.character) {
if (
lib.character[i][4].includes("stone") &&
!lib.character[i][4].includes("stonehidden") &&
lib.character[i][5] &&
lib.character[i][5][0] == 1
lib.character[i].isFellowInStoneMode &&
!lib.character[i].isHiddenInStoneMode &&
lib.character[i].stoneModeData &&
lib.character[i].stoneModeData[0] == 1
) {
list.push(i);
}
@ -10366,9 +10366,9 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
var list = [];
var list2 = [];
for (var i in lib.character) {
if (lib.character[i][4].includes("stonelegend_" + player.career)) {
if (lib.character[i].trashBin.includes("stonelegend_" + player.career)) {
list.push(i);
} else if (lib.character[i][4].includes("stonelegend")) {
} else if (lib.character[i].trashBin.includes("stonelegend")) {
list2.push(i);
}
}

View File

@ -85,9 +85,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
lib.mechlist.push(i);
}
lib.character[i] = lib.characterPack.mode_tafang[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
}
ui.create.cardsAsync();
game.finishCards();
@ -245,9 +242,9 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
for (i in lib.character) {
if (i.indexOf("treasure_") == 0) continue;
if (i.indexOf("tafang_mech_") == 0) continue;
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i].isMinskin) continue;
if (lib.config.forbidchess.includes(i)) continue;
if (lib.character[i][4].includes("boss")) continue;
if (lib.character[i].isBoss) continue;
if (lib.filter.characterDisabled(i)) continue;
list.push(i);
}

View File

@ -717,9 +717,6 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
ui.arena.classList.add("choose-character");
for (var i in lib.characterPack.mode_versus) {
lib.character[i] = lib.characterPack.mode_versus[i];
if (!lib.character[i][4]) {
lib.character[i][4] = [];
}
}
lib.characterIntro.boss_liedixuande = lib.characterIntro.liubei;
lib.characterIntro.boss_gongshenyueying = lib.characterIntro.huangyueying;
@ -753,10 +750,10 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
event.list = list;
if (lib.characterPack.boss) {
for (var i in lib.characterPack.boss) {
if (!lib.character[i] && lib.characterPack.boss[i][4]) {
if (!lib.character[i]) {
if (
lib.characterPack.boss[i][4].includes("jiangeboss") ||
lib.characterPack.boss[i][4].includes("jiangemech")
get.convertedCharacter(lib.characterPack.boss[i]).isJiangeBoss ||
get.convertedCharacter(lib.characterPack.boss[i]).isJiangeMech
) {
lib.character[i] = lib.characterPack.boss[i];
}
@ -764,20 +761,18 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
}
}
for (var i in lib.character) {
if (lib.character[i][4]) {
if (lib.character[i][4].includes("jiangeboss")) {
list[lib.character[i][1] + "boss"].push(i);
continue;
} else if (lib.character[i][4].includes("jiangemech")) {
list[lib.character[i][1] + "mech"].push(i);
continue;
}
if (lib.character[i].isJiangeBoss) {
list[lib.character[i].group + "boss"].push(i);
continue;
} else if (lib.character[i].isJiangeMech) {
list[lib.character[i].group + "mech"].push(i);
continue;
}
if (lib.filter.characterDisabled(i)) continue;
if (get.is.double(i)) continue;
if (lib.character[i][1] == "wei") {
if (lib.character[i].group == "wei") {
list.weilist.push(i);
} else if (lib.character[i][1] == "shu") {
} else if (lib.character[i].group == "shu") {
list.shulist.push(i);
}
}
@ -821,10 +816,8 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
};
var createCharacterDialog = function () {
event.dialogxx = ui.create.characterDialog("heightset", function (name) {
if (lib.character[name][4]) {
if (lib.character[name][4].includes("jiangeboss")) return true;
if (lib.character[name][4].includes("jiangemech")) return true;
}
if (lib.character[name].isJiangeBoss) return true;
if (lib.character[name].isJiangeMech) return true;
if (lib.character[name][1] != game.me.identity) return true;
});
if (ui.cheat2) {
@ -1753,7 +1746,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (event.filterChoice(i)) continue;
if (lib.filter.characterDisabled(i)) continue;
event.list.push(i);
if (lib.character[i][4] && lib.character[i][4].includes("zhu")) {
if (lib.character[i].isZhugong) {
list2.push(i);
}
}
@ -3455,7 +3448,7 @@ game.import("mode", function (lib, game, ui, get, ai, _status) {
if (_status.event.player.identity == "zhu") {
if (Math.random() < 0.8) {
var info = lib.character[button.link];
if (!info[4] || !info[4].includes("zhu")) {
if (!info || !info.isZhugong) {
return 0;
}
}

View File

@ -4702,6 +4702,7 @@ export class Game {
* @param { { extension: string, sex: Sex, group: string, hp: string | number, skills?: string[], tags?: any[], translate: string } } information
*/
addCharacter(name, information) {
//TODO: 这一坨也要改
const extensionName = _status.extension || information.extension,
character = [
information.sex,
@ -4731,6 +4732,7 @@ export class Game {
let extname = _status.extension || "扩展";
let gzFlag = false;
packagename = packagename || extname;
//TODO: 把这里一大坨改成新写法
for (let i in pack) {
if (i == "mode") {
if (pack[i] == "guozhan") gzFlag = true;

View File

@ -31,6 +31,15 @@ export class Get {
const [major, minor, patch] = result[1].split(".");
return ["safari", parseInt(major), parseInt(minor), parseInt(patch)];
}
/**
* 将一个传统格式的character转化为Character对象格式
* @param { Array|Object|import("../library/element/character").Character } data
* @returns {import("../library/element/character").Character}
*/
convertedCharacter(data){
if(!(data instanceof lib.element.Character)) return new lib.element.Character(data);
return data;
}
/**
* 返回 VCard[] 形式的所有牌用于印卡将遍历
* @param {Function} filter
@ -591,7 +600,7 @@ export class Get {
/**
* @overload
* @param { string } name
* @returns { Character }
* @returns { import("../library/element/character").Character }
*/
/**
* @template { 0 | 1 | 2 | 3 | 4 } T
@ -604,7 +613,7 @@ export class Get {
let info = lib.character[name];
if (!info) {
const pack = Object.keys(lib.characterPack).find((pack) => name in lib.characterPack[pack]);
if (pack) info = lib.characterPack[pack][name];
if (pack) info = get.convertedCharacter(lib.characterPack[pack][name]);
}
if (typeof num === "number") {
if (!info) info = [];
@ -616,10 +625,8 @@ export class Get {
}
characterInitFilter(name) {
const info = get.character(name);
if (!info || !info[4]) return [];
const filter = info[4].find((tag) => tag.startsWith("InitFilter"));
if (!filter) return [];
return filter.split(":").slice(1);
if (!info) return [];
return info.initFilters || [];
}
characterIntro(name) {
if (lib.characterIntro[name]) return lib.characterIntro[name];
@ -638,15 +645,8 @@ export class Get {
return "暂无武将介绍";
}
bordergroup(info, raw) {
if (!Array.isArray(info)) {
info = lib.character[info];
if (!info) return "";
}
if (Array.isArray(info[4]))
for (const str of info[4]) {
if (typeof str == "string" && str.startsWith("border:")) return str.slice(7);
}
return raw ? "" : info[1] || "";
if(info.groupBorder) return info.groupBorder;
return raw ? "" : info.group || "";
}
groupnature(group, method) {
var nature = lib.groupnature[group];
@ -1358,11 +1358,11 @@ export class Get {
if (rank.bm.includes(name)) return num ? Math.round((2 * (num - 1)) / 8 + 1) : "bm";
if (rank.c.includes(name)) return num ? Math.round((1 * (num - 1)) / 8 + 1) : "c";
if (rank.d.includes(name)) return num ? Math.round((0 * (num - 1)) / 8 + 1) : "d";
if (lib.character[name] && lib.character[name][4]) {
if (lib.character[name]) {
if (
lib.character[name][4].includes("boss") ||
lib.character[name][4].includes("bossallowed") ||
lib.character[name][4].includes("hiddenboss")
lib.character[name].isBoss ||
lib.character[name].isBossAllowed ||
lib.character[name].isHiddenBoss
) {
return num ? Math.round((9 * (num - 1)) / 8 + 1) : "sp";
}
@ -2592,14 +2592,11 @@ export class Get {
for (var i in lib.character) {
if (lib.filter.characterDisabled(i)) continue;
if (lib.filter.characterDisabled2(i)) continue;
if (lib.character[i][4]) {
if (lib.character[i][4].includes("boss")) continue;
if (lib.character[i][4].includes("hiddenboss")) continue;
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i][4].includes("unseen")) continue;
}
for (var j = 0; j < lib.character[i][3].length; j++) {
var skill = lib.character[i][3][j];
if (lib.character[i].isBoss) continue;
if (lib.character[i].isHiddenBoss) continue;
if (lib.character[i].isMinskin) continue;
if (lib.character[i].isUnseen) continue;
for (var skill of lib.character[i].skills) {
var info = lib.skill[skill];
if (lib.filter.skillDisabled(skill)) continue;
if (func && !func(info, skill, i)) continue;
@ -2613,14 +2610,11 @@ export class Get {
gainableSkillsName(name, func) {
var list = [];
if (name && lib.character[name]) {
if (lib.character[name][4]) {
if (lib.character[name][4].includes("boss")) return list;
if (lib.character[name][4].includes("hiddenboss")) return list;
if (lib.character[name][4].includes("minskin")) return list;
if (lib.character[name][4].includes("unseen")) return list;
}
for (var j = 0; j < lib.character[name][3].length; j++) {
var skill = lib.character[name][3][j];
if (lib.character[name].isBoss) return list;
if (lib.character[name].isHiddenBoss) return list;
if (lib.character[name].isMinskin) return list;
if (lib.character[name].isUnseen) return list;
for (var skill of lib.character[name].skills) {
var info = lib.skill[skill];
if (lib.filter.skillDisabled(skill)) continue;
if (func && !func(info, skill, name)) continue;
@ -2938,15 +2932,7 @@ export class Get {
}
skillintro(name, learn, learn2) {
var str = "";
var infoitem = lib.character[name];
if (!infoitem) {
for (var itemx in lib.characterPack) {
if (lib.characterPack[itemx][name]) {
infoitem = lib.characterPack[itemx][name];
break;
}
}
}
var infoitem = get.character(name);
var skills = infoitem[3];
var opacity;
for (var i = 0; i < skills.length; i++) {
@ -3614,7 +3600,7 @@ export class Get {
if (avatar2) {
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
node.node.avatar2.setBackground(nameskin2, "character");
@ -3622,7 +3608,7 @@ export class Get {
} else {
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
node.node.avatar.setBackground(nameskin2, "character");
@ -3637,7 +3623,7 @@ export class Get {
} else {
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
button.setBackground(nameskin2, "character", "noskin");
@ -4240,7 +4226,7 @@ export class Get {
delete lib.config.skin[nameskin];
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
node.setBackground(nameskin2, "character");
@ -4254,7 +4240,7 @@ export class Get {
} else {
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
button.setBackground(nameskin2, "character", "noskin");

View File

@ -206,15 +206,13 @@ export class Is {
/**
* 是否是双势力武将
* @param { string } name
* @param { string[] } array
* @param { string[] } [array]
* @returns { boolean | string[] }
*/
double(name, array) {
const extraInformations = get.character(name, 4);
if (!extraInformations) return false;
for (const extraInformation of extraInformations) {
if (!extraInformation.startsWith("doublegroup:")) continue;
return array ? extraInformation.split(":").slice(1) : true;
const extraInformation = get.character(name);
if(extraInformation && extraInformation.doubleGroup && extraInformation.doubleGroup.length>0){
return array ? extraInformation.doubleGroup.slice(0) : true;
}
return false;
}

View File

@ -21,11 +21,18 @@ export function canUseHttpProtocol() {
// 手机端
if (window.cordova) {
// 直接确定包名
if (nonameInitialized.endsWith("com.noname.shijian/")) {
// 因为懒人包作者不一定会改成什么版本
// @ts-ignore
if (nonameInitialized.endsWith("com.noname.shijian/") && window.noname_shijianInterfaces && typeof window.noname_shijianInterfaces.sendUpdate === 'function') {
// 每个app自定义能升级的渠道比如判断版本
// @ts-ignore
return window.noname_shijianInterfaces.getApkVersion() >= 16000;
}
// 由理版判断后续所有app都通过此接口来升级协议
// @ts-ignore
if (window.NonameAndroidBridge && typeof window.NonameAndroidBridge.sendUpdate === 'function') {
return true;
}
}
// 电脑端
else if (typeof window.require == "function" && typeof window.process == "object") {
@ -55,11 +62,19 @@ export function sendUpdate() {
// 手机端
if (window.cordova) {
// 直接确定包名
if (nonameInitialized && nonameInitialized.includes("com.noname.shijian")) {
// @ts-ignore
if (nonameInitialized && nonameInitialized.includes("com.noname.shijian") && window.noname_shijianInterfaces && typeof window.noname_shijianInterfaces.sendUpdate === 'function') {
// 给诗笺版apk的java层传递升级完成的信息
// @ts-ignore
return window.noname_shijianInterfaces.sendUpdate() + "?sendUpdate=true";
}
// 由理版判断
// @ts-ignore
if (window.NonameAndroidBridge && typeof window.NonameAndroidBridge.sendUpdate === 'function') {
// 给由理版apk的java层传递升级完成的信息
// @ts-ignore
return window.NonameAndroidBridge.sendUpdate() + "?sendUpdate=true";
}
}
// 电脑端
else if (typeof window.require == "function" && typeof window.process == "object") {

View File

@ -307,20 +307,32 @@ export async function onload(resetGameTimeout) {
}
for (k in character[i][j]) {
if (j == "character") {
if (!character[i][j][k][4]) {
character[i][j][k][4] = [];
}
if (
character[i][j][k][4].includes("boss") ||
character[i][j][k][4].includes("hiddenboss")
) {
lib.config.forbidai.add(k);
}
if (lib.config.forbidai_user && lib.config.forbidai_user.includes(k)) {
lib.config.forbidai.add(k);
}
for (var l = 0; l < character[i][j][k][3].length; l++) {
lib.skilllist.add(character[i][j][k][3][l]);
if (Array.isArray(character[i][j][k])) {
if (!character[i][j][k][4]) {
character[i][j][k][4] = [];
}
if (
character[i][j][k][4].includes("boss") ||
character[i][j][k][4].includes("hiddenboss")
) {
lib.config.forbidai.add(k);
}
for (var l = 0; l < character[i][j][k][3].length; l++) {
lib.skilllist.add(character[i][j][k][3][l]);
}
}
else {
if (character[i][j][k].isBoss || character[i][j][k].isHiddenBoss) {
lib.config.forbidai.add(k);
}
if (character[i][j][k].skills) {
for (var l = 0; l < character[i][j][k].skills.length; l++ ) {
lib.skilllist.add(character[i][j][k].skills[l]);
}
}
}
}
if (
@ -346,6 +358,8 @@ export async function onload(resetGameTimeout) {
nopop: character[i][j][k].nopop,
derivation: character[i][j][k].derivation,
};
} else if (j === 'character') {
lib.character[k] = character[i][j][k];
} else {
Object.defineProperty(
lib[j],
@ -649,8 +663,7 @@ export async function onload(resetGameTimeout) {
console.log(`加载《${lib.extensions[i][0]}》扩展的content时出现错误。`, e);
if (!lib.config.extension_alert)
alert(
`加载《${
lib.extensions[i][0]
`加载《${lib.extensions[i][0]
}扩展的content时出现错误\n该错误本身可能并不影响扩展运行您可以在设置通用无视扩展报错中关闭此弹窗\n${decodeURI(
e.stack
)}`

View File

@ -150,7 +150,7 @@ Reflect.defineProperty(HTMLDivElement.prototype, "setBackground", {
if (
lib.config.mode_config.guozhan.guozhanSkin &&
lib.character[name] &&
lib.character[name][4].includes("gzskin")
lib.character[name].hasSkinInGuozhan
)
gzbool = true;
name = name.slice(3);

View File

@ -0,0 +1,358 @@
import { get } from "../../get/index.js";
import { game } from "../../game/index.js";
import { lib } from "../index.js";
import { _status } from "../../status/index.js";
import { ui } from "../../ui/index.js";
export class Character {
/**
* 武将牌的性别
* @type { string }
**/
sex;
/**
* 武将牌的体力值
* @type { number }
**/
hp;
/**
* 武将牌的体力上限
* @type { number }
**/
maxHp;
/**
* 武将牌的护甲值
* @type { number }
**/
hujia = 0;
/**
* 武将牌的势力
* @type { string }
**/
group;
/**
* 武将牌的势力边框颜色如徐庶身在曹营心在汉
* @type { string }
**/
groupBorder;
/**
* 神武将牌在国战模式下的势力
* @type { string }
**/
groupInGuozhan;
/**
* 武将牌拥有的技能
* @type { string[] }
**/
skills = [];
/**
* 武将牌是否为常备主公
* @type { boolean }
**/
isZhugong = false;
/**
* 武将牌是否为隐藏武将
* @type { boolean }
**/
isUnseen = false;
/**
* 武将牌是否拥有隐匿技能
* @type { boolean }
**/
hasHiddenSkill = false;
/**
* 垃圾桶用于存储原本Character[4]的垃圾数据
* @type { Array }
**/
trashBin = [];
/**
* 武将牌对应的另一半双面武将牌
* @type { string }
**/
dualSideCharacter;
/**
* 多势力武将牌的全部势力
* @type { Array }
**/
doubleGroup = [];
/**
* 武将牌是否为minskin
* @type { boolean }
**/
isMinskin = false;
/**
* 武将牌是否为挑战模式下的BOSS
* @type { boolean }
**/
isBoss = false;
/**
* 武将牌是否为隐藏BOSS
* @type { boolean }
**/
isHiddenBoss = false;
/**
* 武将牌是否仅点将可用
* @type { boolean }
**/
isAiForbidden = false;
/**
* 武将牌在炉石模式下的特殊信息
* @type { array|undefined }
**/
stoneModeData;
/**
* 武将牌是否为炉石模式下的随从
* @type { boolean }
**/
isFellowInStoneMode = false;
/**
* 武将牌是否为炉石模式下的隐藏武将
* @type { boolean }
**/
isHiddenInStoneMode = false;
/**
* 武将牌是否为炉石模式下的特殊随从可以使用装备和法术
* @type { boolean }
**/
isSpecialInStoneMode = false;
/**
* 武将牌是否为bossallowed
* @type { boolean }
**/
isBossAllowed = false;
/**
* 武将牌是否为战旗模式下的BOSS
* @type { boolean }
**/
isChessBoss = false;
/**
* 武将牌是否为剑阁模式下的BOSS
* @type { boolean }
**/
isJiangeBoss = false;
/**
* 武将牌是否为剑阁模式下的机械
* @type { boolean }
**/
isJiangeMech = false;
/**
* 武将牌是否在国战模式下拥有独立的皮肤
* @type { boolean }
**/
hasSkinInGuozhan = false;
/**
* 武将牌对应的全部宗族
* @type { string[] }
**/
clans = [];
/**
* 武将牌无法享受到的主公/地主红利
* @type { string[] }
**/
initFilters = [];
/**
* @param { Array|Object } [data]
*/
constructor(data) {
if (Array.isArray(data)) {
this.sex = data[0];
this.group = data[1];
this.hp = get.infoHp(data[2]);
this.maxHp = get.infoMaxHp(data[2]);
this.hujia = get.infoHujia(data[2]);
this.skills = get.copy(data[3] || []);
if (data[4]) Character.convertTrashToProperties(this, data[4]);
if (data[5]) this.stoneModeData = data[5];
} else if (get.is.object(data)) {
Object.assign(this, data);
if (typeof this.maxHp !== "number") this.maxHp = this.hp;
}
}
/**
* @param { Character } character
* @param { Array } trash
*/
static convertTrashToProperties(character, trash) {
let keptTrashes = [],
clans = [];
for (let i = 0; i < trash.length; i++) {
let item = trash[i];
if (i === 0 && (lib.group.includes(item) || item === 'key')) {
character.groupInGuozhan = item;
} else if(item.startsWith("gzgroup:")){
character.groupInGuozhan = item.slice(8);
} else if (item === "zhu") {
character.isZhugong = true;
} else if (item === "unseen") {
character.isUnseen = true;
} else if (item === "minskin") {
character.isMinskin = true;
} else if (item === "gzskin") {
character.hasSkinInGuozhan = true;
} else if (item === "boss") {
character.isBoss = true;
} else if (item === "chessboss") {
character.isChessBoss = true;
} else if (item === "jiangeboss") {
character.isJiangeBoss = true;
} else if (item === "jiangemech") {
character.isJiangeMech = true;
} else if (item === "bossallowed") {
character.isBossAllowed = true;
} else if (item === "hiddenboss") {
character.isHiddenBoss = true;
} else if (item === "forbidai") {
character.isAiForbidden = true;
} else if (item === "stone") {
character.isFellowInStoneMode = true;
} else if (item === "stonehidden") {
character.isHiddenInStoneMode = true;
} else if (item === "stonespecial") {
character.isSpecialInStoneMode = true;
} else if (item === "hiddenSkill") {
character.hasHiddenSkill = true;
} else if (item.startsWith("border:")) {
character.groupBorder = item.slice(7);
} else if (item.startsWith("dualside:")) {
character.dualSideCharacter = item.slice(9);
} else if (item.startsWith("doublegroup:")) {
character.doubleGroup = item.slice(12).split(":");
} else if (item.startsWith("clan:")) {
clans.push(item.slice(5));
} else if (item.startsWith("InitFilter:")) {
character.initFilters = item.slice(11).split(":");
} else {
keptTrashes.push(item);
}
}
if (clans.length > 0) character.clans = clans;
character.trashBin = keptTrashes;
}
/**
* @deprecated
*/
get 0() {
return this.sex;
}
set 0(sex) {
this.sex = sex;
}
/**
* @deprecated
*/
get 1() {
return this.group;
}
set 1(group) {
this.group = group;
}
/**
* @deprecated
*/
get 2() {
if (this.hujia > 0) return `${this.hp}/${this.maxHp}/${this.hujia}`;
else if (this.hp !== this.maxHp) return `${this.hp}/${this.maxHp}`;
return this.hp;
}
set 2(hp) {
this.hp = get.infoHp(hp);
this.maxHp = get.infoMaxHp(hp);
this.hujia = get.infoHujia(hp);
}
/**
* @deprecated
*/
get 3() {
return this.skills;
}
set 3(skills) {
this.skills = skills;
}
/**
* 把新格式下的数据转换回传统的屎山
* @deprecated
*/
get 4() {
const trashes = [],
character = this;
if (lib.group.includes(character.groupInGuozhan)) {
trashes.push(`gzgroup:${character.groupInGuozhan}`);
}
if (character.isZhugong) {
trashes.push("zhu");
}
if (character.isUnseen) {
trashes.push("unseen");
}
if (character.isMinskin) {
trashes.push("minskin");
}
if (character.hasSkinInGuozhan) {
trashes.push("gzskin");
}
if (character.isBoss) {
trashes.push("boss");
}
if (character.isChessBoss) {
trashes.push("chessboss");
}
if (character.isJiangeBoss) {
trashes.push("jiangeboss");
}
if (character.isJiangeMech) {
trashes.push("jiangemech");
}
if (character.isBossAllowed) {
trashes.push("bossallowed");
}
if (character.isHiddenBoss) {
trashes.push("hiddenboss");
}
if (character.isAiForbidden) {
trashes.push("forbidai");
}
if (character.isFellowInStoneMode) {
trashes.push("stone");
}
if (character.isHiddenInStoneMode) {
trashes.push("stonehidden");
}
if (character.isSpecialInStoneMode) {
trashes.push("stonespecial");
}
if (character.hasHiddenSkill) {
trashes.push("hiddenSkill");
}
if (character.groupBorder) {
trashes.push(`border:${character.groupBorder}`);
}
if (character.dualSideCharacter) {
trashes.push(`duaslside:${character.dualSideCharacter}`);
}
if (character.doubleGroup.length > 0) {
trashes.push(`doublegroup:${character.doubleGroup.join(":")}`);
}
if (character.clans.length > 0) {
character.clans.forEach((item) => trashes.push(`clan:${item}`));
}
if (character.initFilters.length > 0) {
trashes.push(`InitFilters:${character.initFilters.join(":")}`);
}
return trashes.concat(character.trashBin);
}
set 4(trashBin) {
console.warn("你set你🐎的废弃属性");
}
get 5(){
return this.stoneModeData;
}
set 5(stoneData){
this.stoneModeData = stoneData;
}
}

View File

@ -131,7 +131,7 @@ export const Content = {
game.log(
player,
"获得了技能",
...event.addSkill.map((i) => {
...event.addSkill.filter(i => i in lib.translate).map((i) => {
return "#g【" + get.translation(i) + "】";
})
);
@ -141,7 +141,7 @@ export const Content = {
game.log(
player,
"失去了技能",
...event.removeSkill.map((i) => {
...event.removeSkill.filter(i => i in lib.translate).map((i) => {
return "#g【" + get.translation(i) + "】";
})
);
@ -2400,6 +2400,7 @@ export const Content = {
}
for (j in character[i]) {
if (j == "mode" || j == "forbid" || j == "characterSort") continue;
//TODO: 改掉这第二坨
for (k in character[i][j]) {
if (j == "character") {
if (!character[i][j][k][4]) {

View File

@ -10,3 +10,4 @@ export { GameEventPromise } from "./gameEventPromise.js";
export { NodeWS } from "./nodeWS.js";
export { Player } from "./player.js";
export { VCard } from "./vcard.js";
export { Character } from "./character.js"

View File

@ -1492,27 +1492,28 @@ export class Player extends HTMLDivElement {
else this.markSkill("cooperation_" + reason);
}
/**
* @param { string } clan 氏族名称
* @param { boolean } unseen 是否无视暗将的限制
* @returns { string[] }
*/
hasClan(clan, unseen) {
getClans(unseen){
const clans = [];
if (unseen || !this.isUnseen(0)) {
let info = lib.character[this.name1];
if (info && info[4]) {
for (let i of info[4]) {
if (typeof i == "string" && i.startsWith("clan:") && i.slice(5) == clan) return true;
}
}
if (info && info.clans) clans.addArray(info.clans);
}
if (this.name2 && (unseen || !this.isUnseen(1))) {
let info = lib.character[this.name2];
if (info && info[4]) {
for (let i of info[4]) {
if (typeof i == "string" && i.startsWith("clan:") && i.slice(5) == clan) return true;
}
}
if (info && info.clans) clans.addArray(info.clans);
}
return false;
return clans;
}
/**
* @param { string } clan 氏族名称
* @param { boolean } unseen 是否无视暗将的限制
* @returns { boolean }
*/
hasClan(clan, unseen) {
return this.getClans(unseen).includes(clan);
}
/**
* @param { string } skill
@ -2358,17 +2359,14 @@ export class Player extends HTMLDivElement {
}
var info = lib.character[character];
if (!info) {
info = ["", "", 1, [], []];
info = get.convertedCharacter(["", "", 1, [], []]);
}
if (!info[4]) {
info[4] = [];
}
var skills = info[3].slice(0);
var skills = info.skills.slice(0);
this.clearSkills(true);
var hp1 = get.infoHp(info[2]);
var maxHp1 = get.infoMaxHp(info[2]);
var hujia1 = get.infoHujia(info[2]);
var hp1 = info.hp;
var maxHp1 = info.maxHp;
var hujia1 = info.hujia;
this.name = character;
this.name1 = character;
@ -2377,8 +2375,8 @@ export class Player extends HTMLDivElement {
name: character,
name2: character2,
};
this.sex = info[0];
this.group = info[1];
this.sex = info.sex;
this.group = info.group;
this.hp = hp1;
this.maxHp = maxHp1;
this.hujia = hujia1;
@ -2389,7 +2387,7 @@ export class Player extends HTMLDivElement {
if (this.classList.contains("minskin") && this.node.name.querySelectorAll("br").length >= 4) {
this.node.name.classList.add("long");
}
if (info[4].includes("hiddenSkill") && !this.noclick) {
if (info.hasHiddenSkill && !this.noclick) {
if (!this.hiddenSkills) this.hiddenSkills = [];
this.hiddenSkills.addArray(skills);
skills = [];
@ -2401,16 +2399,13 @@ export class Player extends HTMLDivElement {
if (character2 && lib.character[character2]) {
var info2 = lib.character[character2];
if (!info2) {
info2 = ["", "", 1, [], []];
}
if (!info2[4]) {
info2[4] = [];
info2 = get.convertedCharacter(["", "", 1, [], []]);
}
this.name2 = character2;
var hp2 = get.infoHp(info2[2]);
var maxHp2 = get.infoMaxHp(info2[2]);
var hujia2 = get.infoHujia(info2[2]);
var hp2 = info2.hp;
var maxHp2 = info2.maxHp;
var hujia2 = info2.hujia;
this.hujia += hujia2;
var double_hp;
if (_status.connectMode || get.mode() == "single") {
@ -2445,12 +2440,12 @@ export class Player extends HTMLDivElement {
this.hp = hp1 + hp2 - 3;
}
}
if (info2[4].includes("hiddenSkill") && !this.noclick) {
if (info2.hasHiddenSkill && !this.noclick) {
if (!this.hiddenSkills) this.hiddenSkills = [];
this.hiddenSkills.addArray(info2[3]);
this.hiddenSkills.addArray(info2.skills);
hidden = true;
skills.add("g_hidden_ai");
} else skills = skills.concat(info2[3]);
} else skills = skills.concat(info2.skills);
}
if (this.storage.nohp || hidden) {
this.storage.rawHp = this.hp;
@ -2493,18 +2488,15 @@ export class Player extends HTMLDivElement {
this.classList.add("fullskin");
var info = lib.character[character];
if (!info) {
info = ["", "", 1, [], []];
}
if (!info[4]) {
info[4] = [];
info = get.convertedCharacter(["", "", 1, [], []]);
}
if (!game.minskin && get.is.newLayout() && !info[4].includes("minskin")) {
if (!game.minskin && get.is.newLayout() && !info.isMinskin) {
this.classList.remove("minskin");
this.node.avatar.setBackground(character, "character");
} else {
this.node.avatar.setBackground(character, "character");
if (info[4].includes("minskin")) {
if (info.isMinskin) {
this.classList.add("minskin");
} else if (game.minskin) {
this.classList.add("minskin");
@ -2524,7 +2516,7 @@ export class Player extends HTMLDivElement {
if (this.classList.contains("minskin") && this.node.name.querySelectorAll("br").length >= 4) {
this.node.name.classList.add("long");
}
if (info[4].includes("hiddenSkill") && !this.noclick) {
if (info.hasHiddenSkill && !this.noclick) {
if (!_status.video && get.mode() != "guozhan") this.classList.add("unseen_show");
this.classList.add(_status.video ? "unseen_v" : "unseen");
if (!this.node.name_seat && !_status.video) {
@ -2539,10 +2531,7 @@ export class Player extends HTMLDivElement {
if (character2 && lib.character[character2]) {
var info2 = lib.character[character2];
if (!info2) {
info2 = ["", "", 1, [], []];
}
if (!info2[4]) {
info2[4] = [];
info2 = get.convertedCharacter(["", "", 1, [], []]);
}
this.classList.add("fullskin2");
this.node.avatar2.setBackground(character2, "character");
@ -2550,7 +2539,7 @@ export class Player extends HTMLDivElement {
this.name2 = character2;
this.node.count.classList.add("p2");
if (info2[4].includes("hiddenSkill") && !this.noclick) {
if (info2.hasHiddenSkill && !this.noclick) {
if (!_status.video && get.mode() != "guozhan") this.classList.add("unseen2_show");
this.classList.add(_status.video ? "unseen2_v" : "unseen2");
}
@ -2573,6 +2562,7 @@ export class Player extends HTMLDivElement {
* @param { string } character
*/
changeSkin(map, character) {
//TODO: 这一坨改不动了 谁爱改谁改
if (!map || !character) {
console.warn("error: no sourceMap or character to changeSkin", get.translation(this));
return;
@ -7608,6 +7598,7 @@ export class Player extends HTMLDivElement {
}
}
game.broadcastAll(
//TODO: 这里直接修改trashBin部分后续需要修改为新写法
function (player, skill, cfg) {
lib.skill[skill] = {
intro: {
@ -7623,9 +7614,9 @@ export class Player extends HTMLDivElement {
if (Array.isArray(cfg.image)) {
cfg.image.forEach((image) => lib.character[skill][4].push(image));
} else if (typeof cfg.image == "string") {
lib.character[skill][4].push(cfg.image);
lib.character[skill].trashBin.push(cfg.image);
} else {
lib.character[skill][4].push("character:" + cfg.name);
lib.character[skill].trashBin.push("character:" + cfg.name);
}
lib.translate[skill] = cfg.caption || get.rawName(cfg.name);
player.storage[skill] = cfg;
@ -9312,7 +9303,7 @@ export class Player extends HTMLDivElement {
const player = this;
for (const name of [player.name, player.name1, player.name2]) {
if (name && lib.character[name]) {
const filter = get.characterInitFilter(name);
const filter = lib.character[name].initFilters;
if (!filter.includes(tag)) continue;
if (lib.characterInitFilter[name] && lib.characterInitFilter[name](tag) === false) continue;
return true;

View File

@ -44,7 +44,7 @@ export class Library {
characterDefaultPicturePath = characterDefaultPicturePath;
compatibleEdition = Boolean(
typeof nonameInitialized == "string" &&
nonameInitialized.match(/\/(?:com\.widget|yuri\.nakamura)\.noname\//)
nonameInitialized.match(/\/(?:com\.widget|yuri\.nakamura)\.noname\//)
);
changeLog = [];
updates = [];
@ -342,19 +342,19 @@ export class Library {
typeof yingbianZhuzhanAI == "function"
? yingbianZhuzhanAI(player, card, source, targets)
: (cardx) => {
var info = get.info(card);
if (info && info.ai && info.ai.yingbian) {
var ai = info.ai.yingbian(
card,
source,
targets,
player
);
if (!ai) return 0;
return ai - get.value(cardx);
} else if (get.attitude(player, source) <= 0) return 0;
return 5 - get.value(cardx);
},
var info = get.info(card);
if (info && info.ai && info.ai.yingbian) {
var ai = info.ai.yingbian(
card,
source,
targets,
player
);
if (!ai) return 0;
return ai - get.value(cardx);
} else if (get.attitude(player, source) <= 0) return 0;
return 5 - get.value(cardx);
},
});
if (!game.online) return;
_status.event._resultid = id;
@ -1170,8 +1170,7 @@ export class Library {
unfrequent: true,
item: {},
intro: () =>
`获取在线扩展时的地址。当前地址:${document.createElement("br").outerHTML}${
lib.config.extension_sources[lib.config.extension_source]
`获取在线扩展时的地址。当前地址:${document.createElement("br").outerHTML}${lib.config.extension_sources[lib.config.extension_source]
}`,
},
extension_create: {
@ -1837,7 +1836,7 @@ export class Library {
} else {
this.lastChild.innerHTML =
lib.configMenu.appearence.config.image_background.item[
lib.config.image_background
lib.config.image_background
];
return;
}
@ -1860,7 +1859,7 @@ export class Library {
} else {
this.lastChild.innerHTML =
lib.configMenu.appearence.config.image_background.item[
lib.config.image_background
lib.config.image_background
];
return;
}
@ -2064,8 +2063,8 @@ export class Library {
}
ui.css.card_stylesheet = lib.init.sheet(
".card:not(*:empty){background-image:url(" +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2234,8 +2233,8 @@ export class Library {
}
ui.css.cardback_stylesheet = lib.init.sheet(
".card:empty,.card.infohidden{background-image:url(" +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
game.getDB("image", "cardback_style2", function (fileToLoad) {
if (!fileToLoad) return;
@ -2246,8 +2245,8 @@ export class Library {
}
ui.css.cardback_stylesheet2 = lib.init.sheet(
".card.infohidden:not(.infoflip){background-image:url(" +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2404,8 +2403,8 @@ export class Library {
}
ui.css.hp_stylesheet1 = lib.init.sheet(
'.hp:not(.text):not(.actcount)[data-condition="high"]>div:not(.lost){background-image:url(' +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2419,8 +2418,8 @@ export class Library {
}
ui.css.hp_stylesheet2 = lib.init.sheet(
'.hp:not(.text):not(.actcount)[data-condition="mid"]>div:not(.lost){background-image:url(' +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2434,8 +2433,8 @@ export class Library {
}
ui.css.hp_stylesheet3 = lib.init.sheet(
'.hp:not(.text):not(.actcount)[data-condition="low"]>div:not(.lost){background-image:url(' +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2449,8 +2448,8 @@ export class Library {
}
ui.css.hp_stylesheet4 = lib.init.sheet(
".hp:not(.text):not(.actcount)>.lost{background-image:url(" +
fileLoadedEvent.target.result +
")}"
fileLoadedEvent.target.result +
")}"
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2571,8 +2570,8 @@ export class Library {
}
ui.css.player_stylesheet = lib.init.sheet(
'#window .player{background-image:url("' +
fileLoadedEvent.target.result +
'");background-size:100% 100%;}'
fileLoadedEvent.target.result +
'");background-size:100% 100%;}'
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2709,8 +2708,8 @@ export class Library {
ui.css.border_stylesheet.id = "ui.css.border";
ui.css.border_stylesheet.sheet.insertRule(
'#window .player>.framebg{display:block;background-image:url("' +
fileLoadedEvent.target.result +
'")}',
fileLoadedEvent.target.result +
'")}',
0
);
ui.css.border_stylesheet.sheet.insertRule(
@ -2730,18 +2729,18 @@ export class Library {
}
ui.css.border_stylesheet.sheet.insertRule(
'#window .player>.framebg,#window #arena.long.mobile:not(.fewplayer) .player[data-position="0"]>.framebg{display:block;background-image:url("' +
lib.assetURL +
"theme/style/player/" +
layout +
'1.png")}',
lib.assetURL +
"theme/style/player/" +
layout +
'1.png")}',
0
);
ui.css.border_stylesheet.sheet.insertRule(
'#window #arena.long:not(.fewplayer) .player>.framebg, #arena.oldlayout .player>.framebg{background-image:url("' +
lib.assetURL +
"theme/style/player/" +
layout +
'3.png")}',
lib.assetURL +
"theme/style/player/" +
layout +
'3.png")}',
0
);
ui.css.border_stylesheet.sheet.insertRule(
@ -2924,8 +2923,8 @@ export class Library {
}
ui.css.menu_stylesheet = lib.init.sheet(
'html #window>.dialog.popped,html .menu,html .menubg{background-image:url("' +
fileLoadedEvent.target.result +
'");background-size:cover}'
fileLoadedEvent.target.result +
'");background-size:cover}'
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -2947,8 +2946,8 @@ export class Library {
}
ui.css.menu_stylesheet = lib.init.sheet(
"html #window>.dialog.popped,html .menu,html .menubg{background-image:" +
str +
"}"
str +
"}"
);
}
},
@ -3062,8 +3061,8 @@ export class Library {
}
ui.css.control_stylesheet = lib.init.sheet(
'#window .control,.menubutton:not(.active):not(.highlight):not(.red):not(.blue),#window #system>div>div{background-image:url("' +
fileLoadedEvent.target.result +
'")}'
fileLoadedEvent.target.result +
'")}'
);
};
fileReader.readAsDataURL(fileToLoad, "UTF-8");
@ -3086,14 +3085,14 @@ export class Library {
if (layout == "wood") {
ui.css.control_stylesheet = lib.init.sheet(
"#window .control,#window .menubutton,#window #system>div>div,#window #system>div>.pressdown2{background-image:" +
str +
"}"
str +
"}"
);
} else {
ui.css.control_stylesheet = lib.init.sheet(
"#window .control,.menubutton:not(.active):not(.highlight):not(.red):not(.blue),#window #system>div>div{background-image:" +
str +
"}"
str +
"}"
);
}
}
@ -3128,20 +3127,20 @@ export class Library {
}
ui.css.buttonsheet = lib.init.sheet(
"#system>div>div, .caption>div>.tdnode{padding-top:" +
cbnum1 +
"px !important;padding-bottom:" +
cbnum2 +
"px !important}",
cbnum1 +
"px !important;padding-bottom:" +
cbnum2 +
"px !important}",
"#control>.control>div{padding-top:" +
cbnum3 +
"px;padding-bottom:" +
cbnum4 +
"px}",
cbnum3 +
"px;padding-bottom:" +
cbnum4 +
"px}",
"#control>.control{padding-top:" +
cbnum5 +
"px;padding-bottom:" +
cbnum6 +
"px}"
cbnum5 +
"px;padding-bottom:" +
cbnum6 +
"px}"
);
}
},
@ -8484,10 +8483,10 @@ export class Library {
genAwait(item) {
return gnc.is.generator(item)
? gnc.of(function* () {
for (const content of item) {
yield content;
}
})()
for (const content of item) {
yield content;
}
})()
: Promise.resolve(item);
}
gnc = {
@ -9209,9 +9208,9 @@ export class Library {
log("键:" + (f - sf) + "/" + f);
log(
"已启用:" +
(a + b + c + d + e + f - (sa + sb + sc + sd + se + sf)) +
"/" +
(a + b + c + d + e + f)
(a + b + c + d + e + f - (sa + sb + sc + sd + se + sf)) +
"/" +
(a + b + c + d + e + f)
);
})();
(function () {
@ -10108,6 +10107,7 @@ export class Library {
Control: Element.Control,
Client: Element.Client,
NodeWS: Element.NodeWS,
Character: Element.Character,
ws: {
onopen: function () {
if (_status.connectCallback) {
@ -10213,6 +10213,12 @@ export class Library {
get nodews() {
return this.NodeWS.prototype;
},
/**
* @legacy Use {@link lib.element.Character.prototype} instead.
*/
get character() {
return this.Character.prototype;
},
};
card = {
/**
@ -10525,9 +10531,9 @@ export class Library {
return true;
},
characterDisabled: function (i, libCharacter) {
if (!lib.character[i] || (lib.character[i][4] && lib.character[i][4].includes("forbidai")))
if (!lib.character[i] || lib.character[i].isAiForbidden)
return true;
if (lib.character[i][4] && lib.character[i][4].includes("unseen")) return true;
if (lib.character[i].isUnseen) return true;
if (lib.config.forbidai.includes(i)) return true;
if (lib.characterFilter[i] && !lib.characterFilter[i](get.mode())) return true;
if (_status.connectMode) {
@ -10596,11 +10602,11 @@ export class Library {
var info = lib.character[i];
if (!info) return true;
if (info[4]) {
if (info[4].includes("boss")) return true;
if (info[4].includes("hiddenboss")) return true;
if (info[4].includes("minskin")) return true;
if (info[4].includes("unseen")) return true;
if (info[4].includes("forbidai") && (!_status.event.isMine || !_status.event.isMine()))
if (info.isBoss) return true;
if (info.isHiddenBoss) return true;
if (info.isMinskin) return true;
if (info.isUnseen) return true;
if (info.isAiForbidden && (!_status.event.isMine || !_status.event.isMine()))
return true;
if (lib.characterFilter[i] && !lib.characterFilter[i](get.mode())) return true;
}
@ -11132,9 +11138,8 @@ export class Library {
content: (storage, player) => {
const stratagemFuryMax = _status.stratagemFuryMax,
fury = storage || 0;
return `当前怒气值:${
typeof stratagemFuryMax == "number" ? `${fury}/${stratagemFuryMax}` : fury
}`;
return `当前怒气值:${typeof stratagemFuryMax == "number" ? `${fury}/${stratagemFuryMax}` : fury
}`;
},
},
},
@ -11207,7 +11212,7 @@ export class Library {
return (
((zhibi && !zhibi.includes(current)) ||
get.effect(current, card, player, player) >=
2 - Math.max(0, (storage.stratagem_fury || 0) - 1)) &&
2 - Math.max(0, (storage.stratagem_fury || 0) - 1)) &&
current.mayHaveShan(
player,
"use",
@ -11261,16 +11266,16 @@ export class Library {
const cardName = get.name(cards[0], player);
return cardName
? new lib.element.VCard({
name: cardName,
nature: get.nature(cards[0], player),
suit: get.suit(cards[0], player),
number: get.number(cards[0], player),
isCard: true,
cards: [cards[0]],
storage: {
stratagem_buffed: 1,
},
})
name: cardName,
nature: get.nature(cards[0], player),
suit: get.suit(cards[0], player),
number: get.number(cards[0], player),
isCard: true,
cards: [cards[0]],
storage: {
stratagem_buffed: 1,
},
})
: new lib.element.VCard();
}
return null;
@ -11288,9 +11293,8 @@ export class Library {
)}点怒气${prompt()}`;
span.appendChild(li);
});
return `当你需要使用位于“强化表”内的非虚拟卡牌时,你可以消耗对应数量的怒气将其强化并使用。${
document.createElement("hr").outerHTML
}${span.outerHTML}`;
return `当你需要使用位于“强化表”内的非虚拟卡牌时,你可以消耗对应数量的怒气将其强化并使用。${document.createElement("hr").outerHTML
}${span.outerHTML}`;
},
onuse: (result, player) => {
player.logSkill(result.skill);
@ -11325,7 +11329,7 @@ export class Library {
return (
((zhibi && !zhibi.includes(current)) ||
get.effect(current, card, player, player) >=
2 - Math.max(0, (storage.stratagem_fury || 0) - 1)) &&
2 - Math.max(0, (storage.stratagem_fury || 0) - 1)) &&
current.mayHaveShan(
player,
"use",
@ -12209,22 +12213,19 @@ export class Library {
trigger: { global: "gameStart", player: "enterGame" },
silent: true,
content: function () {
var list = [player.name, player.name1, player.name2];
var list = [player.name1, player.name2];
for (var i = 0; i < list.length; i++) {
if (list[i] && lib.character[list[i]]) {
var info = lib.character[list[i]];
if (info[3].includes("dualside") && info[4]) {
if (info.skills.includes("dualside") && info.dualSideCharacter) {
player.storage.dualside = [list[i], player.hp, player.maxHp];
for (var j = 0; j < info[4].length; j++) {
if (info[4][j].startsWith("dualside:")) {
var name2 = info[4][j].slice(9);
var info2 = lib.character[name2];
player.storage.dualside.push(name2);
player.storage.dualside.push(get.infoHp(info2[2]));
player.storage.dualside.push(get.infoMaxHp(info2[2]));
}
}
var name2 = info.dualSideCharacter;
var info2 = lib.character[name2];
player.storage.dualside.push(name2);
player.storage.dualside.push(info2.hp);
player.storage.dualside.push(info2.maxHp);
}
break;
}
}
var cfg = player.storage.dualside;
@ -12771,7 +12772,11 @@ export class Library {
},
},
};
character = {};
character = new Proxy({}, {
set(target, prop, newValue) {
return Reflect.set(target, prop, get.convertedCharacter(newValue));
}
});
perfectPair = {};
cardPile = {};
message = {
@ -13364,7 +13369,7 @@ export class Library {
navigator.clipboard
.readText()
.then(read)
.catch((_) => {});
.catch((_) => { });
} else {
var input = ui.create.node("textarea", ui.window, { opacity: "0" });
input.select();

View File

@ -347,7 +347,7 @@ export class Click {
uiintro.listen(function () {
_status.clicked = true;
});
uiintro.style.zIndex = 21;
uiintro.style.zIndex = "21";
uiintro.classList.add("popped");
uiintro.classList.add("static");
uiintro.classList.add("onlineclient");
@ -3186,7 +3186,7 @@ export class Click {
delete lib.config.skin[nameskin];
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
) {
bg.setBackground(nameskin2, "character");
@ -3206,7 +3206,7 @@ export class Click {
} else {
if (
gzbool &&
lib.character[nameskin2][4].includes("gzskin") &&
lib.character[nameskin2].hasSkinInGuozhan &&
lib.config.mode_config.guozhan.guozhanSkin
)
button.setBackground(nameskin2, "character", "noskin");
@ -3483,6 +3483,7 @@ export class Click {
};
} else {
// 样式一
//TODO: 这里的数据也暂时没有改成新格式,需要后续的修改
const introduction = ui.create.div(".characterintro", uiintro),
showCharacterNamePinyin = lib.config.show_characternamepinyin;
if (showCharacterNamePinyin != "doNotShow") {
@ -3490,7 +3491,7 @@ export class Click {
span = document.createElement("span");
span.style.fontWeight = "bold";
const nameInfo = get.character(name),
exInfo = nameInfo[4],
exInfo = nameInfo.trashBin,
characterName =
exInfo && exInfo.includes("ruby") ? lib.translate[name] : get.rawName2(name);
span.innerHTML = characterName;

View File

@ -1127,16 +1127,16 @@ export class Create {
characterDialog2(filter) {
var list = [];
for (var i in lib.character) {
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i].isMinskin) continue;
if (
lib.character[i][4].includes("boss") ||
lib.character[i][4].includes("hiddenboss")
lib.character[i].isBoss ||
lib.character[i].isHiddenBoss
) {
if (lib.config.mode == "boss") continue;
if (!lib.character[i][4].includes("bossallowed")) continue;
if (!lib.character[i].isBossAllowed) continue;
}
if (lib.character[i][4].includes("stonehidden")) continue;
if (lib.character[i].isHiddenInStoneMode) continue;
if (lib.config.banned.includes(i)) continue;
if (filter && filter(i)) continue;
list.push(i);
@ -1306,17 +1306,17 @@ export class Create {
} else {
for (var i in lib.character) {
if(lib.character[i][4]) {
if (lib.character[i][4].includes("minskin")) continue;
if (lib.character[i].isMinskin) continue;
if (
lib.character[i][4].includes("boss") ||
lib.character[i][4].includes("hiddenboss")
lib.character[i].isBoss ||
lib.character[i].isHiddenBoss
) {
if (lib.config.mode == "boss") continue;
if (!lib.character[i][4].includes("bossallowed")) continue;
if (!lib.character[i].isBossAllowed) continue;
}
if (lib.character[i][4].includes("stonehidden")) continue;
if (lib.character[i][4].includes("unseen")) continue;
if (lib.character[i].isHiddenInStoneMode) continue;
if (lib.character[i].isUnseen) continue;
}
if (lib.config.banned.includes(i)) continue;
if (

View File

@ -159,18 +159,19 @@ export const characterPackMenu = function (connectMenu) {
var alterableCharacters = [];
var charactersToAlter = [];
for (var i in _info) {
if (_info[i][4] && _info[i][4].includes("unseen")) continue;
const characterInfo = get.convertedCharacter( _info[i]);
if (characterInfo.isUnseen) continue;
if (connectMenu && lib.connectBanned.includes(i)) continue;
list.push(i);
if (boolAI && !lib.config.forbidai_user.includes(i)) boolAI = false;
for (var j = 0; j < _info[i][3].length; j++) {
if (!lib.skill[_info[i][3][j]]) {
for (var j = 0; j < characterInfo.skills.length; j++) {
if (!lib.skill[characterInfo.skills[j]]) {
continue;
}
if (lib.skill[_info[i][3][j]].alter) {
alterableSkills.add(_info[i][3][j]);
if (lib.skill[characterInfo.skills[j]].alter) {
alterableSkills.add(characterInfo.skills[j]);
alterableCharacters.add(i);
if (lib.config.vintageSkills.includes(_info[i][3][j])) {
if (lib.config.vintageSkills.includes(characterInfo.skills[j])) {
charactersToAlter.add(i);
}
}

View File

@ -370,6 +370,7 @@ export const extensionMenu = function (connectMenu) {
",package:" +
get.stringify({
//替换die audio加上扩展名
//TODO: 创建扩展这部分更是重量级
character: ((pack) => {
var character = pack.character;
for (var key in character) {