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,
},
},
},
}
export default cards;
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,
},
},
},
};
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"]],
};
export default characters;
const characters = {
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

@ -1,102 +1,104 @@
import { lib, game, ui, get, ai, _status } from "../../noname.js";
import characters from "./character.js";
import cards from "./card.js";
import pinyins from "./pinyin.js";
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 },
};
});
import { lib, game, ui, get, ai, _status } from "../../noname.js";
import characters from "./character.js";
import cards from "./card.js";
import pinyins from "./pinyin.js";
import skills from "./skill.js";
import translates from "./translate.js";
game.import("character", function () {
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"],
}
export default pinyins;
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"],
};
export default pinyins;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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) {