Merge pull request #1312 from libccy/wuyi-dev
名将吴懿;修改game.parseSkillTextMap的返回值格式
This commit is contained in:
commit
5408513640
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -19,6 +19,7 @@ const characters = {
|
||||||
sp_fuwan: ["male", "qun", 3, ["spfengyin", "spchizhong"]],
|
sp_fuwan: ["male", "qun", 3, ["spfengyin", "spchizhong"]],
|
||||||
old_lingju: ["female", "qun", 3, ["jieyuan", "fenxin_old"]],
|
old_lingju: ["female", "qun", 3, ["jieyuan", "fenxin_old"]],
|
||||||
sp_mushun: ["male", "qun", 4, ["moukui"]],
|
sp_mushun: ["male", "qun", 4, ["moukui"]],
|
||||||
|
dc_wuyi: ["male", "shu", 4, ["dcbenxi"]],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default characters;
|
export default characters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
old_lingju(mode) {
|
old_lingju(mode) {
|
||||||
return mode == "identity";
|
return mode == "identity";
|
||||||
|
|
|
@ -4,5 +4,9 @@ const dynamicTranslates = {
|
||||||
dcjianxiong(player) {
|
dcjianxiong(player) {
|
||||||
return "当你受到伤害后,你可以摸" + get.cnNumber(player.countMark("dcjianxiong") + 1) + "张牌并获得对你造成伤害的牌,然后你令此技能摸牌数+1(至多为5)。";
|
return "当你受到伤害后,你可以摸" + get.cnNumber(player.countMark("dcjianxiong") + 1) + "张牌并获得对你造成伤害的牌,然后你令此技能摸牌数+1(至多为5)。";
|
||||||
},
|
},
|
||||||
|
dcbenxi(player) {
|
||||||
|
if(player.storage.dcbenxi) return "转换技,锁定技。当你失去手牌后,阴:系统随机检索出一句转换为拼音后包含“wu,yi”的技能台词,然后你念出此台词。<span class='bluetext'>阳:你获得上次所念出的台词对应的技能;若你已拥有该技能,则改为对其他角色各造成1点伤害。</span>";
|
||||||
|
return "转换技,锁定技。当你失去手牌后,<span class='bluetext'>阴:系统随机检索出一句转换为拼音后包含“wu,yi”的技能台词,然后你念出此台词。</span>阳:你获得上次所念出的台词对应的技能;若你已拥有该技能,则改为对其他角色各造成1点伤害。";
|
||||||
|
},
|
||||||
};
|
};
|
||||||
export default dynamicTranslates;
|
export default dynamicTranslates;
|
||||||
|
|
|
@ -2,6 +2,110 @@ import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
/** @type { importCharacterConfig['skill'] } */
|
/** @type { importCharacterConfig['skill'] } */
|
||||||
const skills = {
|
const skills = {
|
||||||
|
//名将吴懿
|
||||||
|
dcbenxi: {
|
||||||
|
trigger: {
|
||||||
|
player: ["loseAfter"],
|
||||||
|
global: ["equipAfter", "addJudgeAfter", "gainAfter", "loseAsyncAfter", "addToExpansionAfter"],
|
||||||
|
},
|
||||||
|
forced: true,
|
||||||
|
zhuanhuanji: true,
|
||||||
|
filter(event, player) {
|
||||||
|
const evt = event.getl(player);
|
||||||
|
return evt && evt.hs && evt.hs.length > 0;
|
||||||
|
},
|
||||||
|
async content(event, trigger, player) {
|
||||||
|
player.changeZhuanhuanji("dcbenxi");
|
||||||
|
if (player.storage.dcbenxi) {
|
||||||
|
const map = lib.skill.dcbenxi.getMap(),
|
||||||
|
list = Object.keys(map);
|
||||||
|
if (list.length > 0) {
|
||||||
|
const skill = list.randomGet(),
|
||||||
|
voiceMap = game.parseSkillTextMap(skill, map[skill]);
|
||||||
|
console.log(voiceMap);
|
||||||
|
player.storage.dcbenxi_pending = skill;
|
||||||
|
findaudio: for (let data of voiceMap) {
|
||||||
|
if(!data.text) continue;
|
||||||
|
const pinyins = get.pinyin(data.text, false);
|
||||||
|
for (let i = 0; i < pinyins.length - 1; i++) {
|
||||||
|
if (pinyins[i] === "wu" && pinyins[i + 1] === "yi") {
|
||||||
|
player.chat(data.text);
|
||||||
|
game.broadcastAll(file => game.playAudio(file), data.file)
|
||||||
|
break findaudio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const skill = player.storage.dcbenxi_pending;
|
||||||
|
if (skill) {
|
||||||
|
if (player.hasSkill(skill, null, false)){
|
||||||
|
const targets = game.filterPlayer(current => current != player).sortBySeat();
|
||||||
|
player.line(targets, 'fire');
|
||||||
|
for(let target of targets){
|
||||||
|
if(target.isIn()) await target.damage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
await player.addTempSkills([skill], {player: "phaseBegin"});
|
||||||
|
}
|
||||||
|
delete player.storage.dcbenxi_pending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onremove(player){
|
||||||
|
delete player.storage.dcbenxi;
|
||||||
|
delete player.storage.dcbenxi_pending;
|
||||||
|
},
|
||||||
|
mark: true,
|
||||||
|
marktext: "☯",
|
||||||
|
intro: {
|
||||||
|
mark(dialog, storage, player){
|
||||||
|
if(storage){
|
||||||
|
const skill = player.storage.dcbenxi_pending;
|
||||||
|
if(skill){
|
||||||
|
dialog.addText(`锁定技,当你下次失去手牌后,你获得技能〖${get.translation(skill)}〗直到你的下回合开始。若已获得该技能,则改为对所有其他角色各造成1点伤害。`, false);
|
||||||
|
dialog.add('<div><div class="skill">【' + get.translation(lib.translate[skill + "_ab"] || get.translation(skill).slice(0, 2)) + "】</div><div>" + get.skillInfoTranslation(skill, player) + "</div></div>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return "锁定技。当你下次失去手牌后,你随机念出一句拼音中含有“wu,yi”的台词。";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
getMap() {
|
||||||
|
if (!_status.dcbenxi_map) {
|
||||||
|
_status.dcbenxi_map = {};
|
||||||
|
let list;
|
||||||
|
if (_status.connectMode) {
|
||||||
|
list = get.charactersOL();
|
||||||
|
} else {
|
||||||
|
list = get.gainableCharacters();
|
||||||
|
}
|
||||||
|
list.forEach(name => {
|
||||||
|
if (name !== "dc_wuyi") {
|
||||||
|
const skills = get.character(name).skills;
|
||||||
|
skills.forEach(skill => {
|
||||||
|
if (skill in _status.dcbenxi_map) return;
|
||||||
|
const voices = game.parseSkillText(skill, name);
|
||||||
|
if (
|
||||||
|
voices.some(text => {
|
||||||
|
const pinyins = get.pinyin(text, false);
|
||||||
|
for (let i = 0; i < pinyins.length - 1; i++) {
|
||||||
|
if (pinyins[i] === "wu" && pinyins[i + 1] === "yi") return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
) {
|
||||||
|
_status.dcbenxi_map[skill] = name;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return _status.dcbenxi_map;
|
||||||
|
},
|
||||||
|
},
|
||||||
//新InitFilter测试高达一号
|
//新InitFilter测试高达一号
|
||||||
//打赢复活赛的牢达[哭]
|
//打赢复活赛的牢达[哭]
|
||||||
dclonghun: {
|
dclonghun: {
|
||||||
|
|
|
@ -3,7 +3,7 @@ const characterSort = {
|
||||||
collab_tongque: ["sp_fuwan", "sp_fuhuanghou", "sp_jiben", "old_lingju", "sp_mushun"],
|
collab_tongque: ["sp_fuwan", "sp_fuhuanghou", "sp_jiben", "old_lingju", "sp_mushun"],
|
||||||
collab_duanwu: ["sunwukong", "longwang", "taoshen"],
|
collab_duanwu: ["sunwukong", "longwang", "taoshen"],
|
||||||
collab_decade: ["libai", "xiaoyuehankehan", "zhutiexiong", "wu_zhutiexiong"],
|
collab_decade: ["libai", "xiaoyuehankehan", "zhutiexiong", "wu_zhutiexiong"],
|
||||||
collab_remake: ["dc_caocao", "dc_liubei", "dc_sunquan", "nezha", "dc_sunce", "dc_zhaoyun"],
|
collab_remake: ["dc_caocao", "dc_liubei", "dc_sunquan", "nezha", "dc_sunce", "dc_zhaoyun", "dc_wuyi"],
|
||||||
};
|
};
|
||||||
|
|
||||||
const characterSortTranslate = {
|
const characterSortTranslate = {
|
||||||
|
|
|
@ -95,11 +95,10 @@ const translates = {
|
||||||
dczhanjiang: "斩将",
|
dczhanjiang: "斩将",
|
||||||
dczhanjiang_info: "准备阶段,若场上有【青釭剑】,则你可以获得之。",
|
dczhanjiang_info: "准备阶段,若场上有【青釭剑】,则你可以获得之。",
|
||||||
|
|
||||||
collab_olympic: "OL·伦敦奥运会",
|
dc_wuyi: "经典吴懿",
|
||||||
collab_tongque: "OL·铜雀台",
|
dc_wuyi_prefix: "经典",
|
||||||
collab_duanwu: "新服·端午畅玩",
|
dcbenxi: "奔袭",
|
||||||
collab_decade: "新服·创玩节",
|
dcbenxi_info: "转换技,锁定技。当你失去手牌后,阴:系统随机检索出一句转换为拼音后包含“wu,yi”的技能台词,然后你念出此台词。阳:你获得上次所念出的台词对应的技能;若你已拥有该技能,则改为对其他角色各造成1点伤害。",
|
||||||
collab_remake: "新服·共创武将",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default translates;
|
export default translates;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,21 +1,6 @@
|
||||||
const characters = {
|
const characters = {
|
||||||
noname: ["female", "key", 3, ["noname_zhuyuan", "noname_duocai"]],
|
noname: ["female", "key", 3, ["noname_zhuyuan", "noname_duocai"]],
|
||||||
|
|
||||||
key_kud: ["female", "key", 3, ["kud_qiaoshou", "kud_buhui"]],
|
|
||||||
key_misuzu: ["female", "key", 3, ["misuzu_hengzhou", "misuzu_nongyin", "misuzu_zhongxing"]],
|
|
||||||
key_kamome: ["female", "key", 3, ["kamome_yangfan", "kamome_huanmeng", "kamome_jieban"]],
|
|
||||||
key_nao: ["female", "key", 3, ["nao_duyin", "nao_wanxin", "nao_shouqing"]],
|
|
||||||
key_yuuki: ["female", "key", 3, ["yuuki_yicha"]],
|
|
||||||
key_kotarou: ["male", "key", 3, ["kotarou_rewrite", "kotarou_aurora"]],
|
|
||||||
key_tenzen: ["male", "key", 4, ["tenzen_fenghuan", "tenzen_retianquan"]],
|
|
||||||
key_kyouko: ["female", "key", 3, ["kyouko_rongzhu", "kyouko_gongmian"]],
|
|
||||||
key_kyou: ["female", "key", 3, ["kyou_zhidian", "kyou_duanfa"]],
|
|
||||||
key_seira: ["female", "key", 3, ["seira_xinghui", "seira_yuanying"]],
|
|
||||||
key_kiyu: ["female", "key", 3, ["kiyu_yuling", "kiyu_rexianyu"]],
|
|
||||||
key_tomoyo: ["female", "key", 4, ["tomoyo_wuwei", "tomoyo_zhengfeng"]],
|
|
||||||
key_minagi: ["female", "key", 3, ["minagi_peiquan", "minagi_huanliu"]],
|
|
||||||
key_michiru: ["female", "key", 3, ["michiru_sheyuan"]],
|
|
||||||
|
|
||||||
ns_huangchengyan: ["male", "shu", 3, ["nslongyue", "nszhenyin"]],
|
ns_huangchengyan: ["male", "shu", 3, ["nslongyue", "nszhenyin"]],
|
||||||
ns_sunchensunjun: ["male", "wu", 5, ["nsxianhai", "nsxingchu"]],
|
ns_sunchensunjun: ["male", "wu", 5, ["nsxianhai", "nsxingchu"]],
|
||||||
ns_yuanxi: ["male", "qun", 4, ["nsshengyan", "nsdaizhan"]],
|
ns_yuanxi: ["male", "qun", 4, ["nsshengyan", "nsdaizhan"]],
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
ns_duangui(mode) {
|
ns_duangui(mode) {
|
||||||
return mode == "identity" && _status.mode == "normal";
|
return mode == "identity" && _status.mode == "normal";
|
||||||
|
|
|
@ -1,18 +1,4 @@
|
||||||
export default {
|
export default {
|
||||||
key_kud: "#b千夜",
|
|
||||||
key_misuzu: "#b长发及腰黑长直",
|
|
||||||
key_kamome: "#b仿生纱",
|
|
||||||
key_nao: "#b潮鸣",
|
|
||||||
key_kyou: "#b长发及腰黑长直",
|
|
||||||
key_yuuki: "#b4399司命",
|
|
||||||
key_kyouko: "#b阿阿阿687",
|
|
||||||
key_tenzen: "#b皋耳击",
|
|
||||||
key_kotarou: "#bb1154486224",
|
|
||||||
key_seira: "#b阿开木木W🍀",
|
|
||||||
key_kiyu: "#b无面◎隐者",
|
|
||||||
key_tomoyo: "#b长发及腰黑长直",
|
|
||||||
key_minagi: "#b无面◎隐者",
|
|
||||||
|
|
||||||
ns_huangchengyan: "#g竹邀月",
|
ns_huangchengyan: "#g竹邀月",
|
||||||
ns_sunchensunjun: "#gVenusjeu",
|
ns_sunchensunjun: "#gVenusjeu",
|
||||||
ns_yuanxi: "#g食茸二十四",
|
ns_yuanxi: "#g食茸二十四",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
||||||
const characterSort = {
|
const characterSort = {
|
||||||
diy_yijiang: ["key_kud", "key_misuzu", "key_kamome", "key_nao", "ns_huangchengyan", "ns_sunchensunjun", "ns_yuanxi", "ns_caoshuang"],
|
diy_yijiang: ["ns_huangchengyan", "ns_sunchensunjun", "ns_yuanxi", "ns_caoshuang"],
|
||||||
diy_yijiang2: ["key_yuuki", "key_tenzen", "key_kyouko", "key_kotarou", "key_kyou", "ns_chentai", "ns_huangwudie", "ns_sunyi", "ns_zhangning", "ns_yanghu"],
|
diy_yijiang2: ["ns_chentai", "ns_huangwudie", "ns_sunyi", "ns_zhangning", "ns_yanghu"],
|
||||||
diy_yijiang3: ["ns_ruanji", "ns_zanghong", "ns_limi", "ns_zhonglimu", "prp_zhugeliang", "key_seira", "key_kiyu", "key_tomoyo", "key_minagi", "key_michiru"],
|
diy_yijiang3: ["ns_ruanji", "ns_zanghong", "ns_limi", "ns_zhonglimu", "prp_zhugeliang"],
|
||||||
diy_tieba: ["ns_zuoci", "ns_lvzhi", "ns_wangyun", "ns_nanhua", "ns_nanhua_left", "ns_nanhua_right", "ns_huamulan", "ns_huangzu", "ns_jinke", "ns_yanliang", "ns_wenchou", "ns_caocao", "ns_caocaosp", "ns_zhugeliang", "ns_wangyue", "ns_yuji", "ns_xinxianying", "ns_guanlu", "ns_simazhao", "ns_sunjian", "ns_duangui", "ns_zhangbao", "ns_masu", "ns_zhangxiu", "ns_lvmeng", "ns_shenpei", "ns_yujisp", "ns_yangyi", "ns_liuzhang", "ns_xinnanhua", "ns_luyusheng"],
|
diy_tieba: ["ns_zuoci", "ns_lvzhi", "ns_wangyun", "ns_nanhua", "ns_nanhua_left", "ns_nanhua_right", "ns_huamulan", "ns_huangzu", "ns_jinke", "ns_yanliang", "ns_wenchou", "ns_caocao", "ns_caocaosp", "ns_zhugeliang", "ns_wangyue", "ns_yuji", "ns_xinxianying", "ns_guanlu", "ns_simazhao", "ns_sunjian", "ns_duangui", "ns_zhangbao", "ns_masu", "ns_zhangxiu", "ns_lvmeng", "ns_shenpei", "ns_yujisp", "ns_yangyi", "ns_liuzhang", "ns_xinnanhua", "ns_luyusheng"],
|
||||||
diy_fakenews: ["diy_wenyang", "ns_zhangwei", "ns_caimao", "ns_chengpu", "ns_sundeng", "ns_duji", "ns_mengyou"],
|
diy_fakenews: ["diy_wenyang", "ns_zhangwei", "ns_caimao", "ns_chengpu", "ns_sundeng", "ns_duji", "ns_mengyou"],
|
||||||
diy_xushi: ["diy_feishi", "diy_hanlong", "diy_liufu", "diy_liuyan", "diy_liuzan", "diy_tianyu", "diy_xizhenxihong", "diy_yangyi", "diy_zaozhirenjun"],
|
diy_xushi: ["diy_feishi", "diy_hanlong", "diy_liufu", "diy_liuyan", "diy_liuzan", "diy_tianyu", "diy_xizhenxihong", "diy_yangyi", "diy_zaozhirenjun"],
|
||||||
|
|
|
@ -63,103 +63,6 @@ const translates = {
|
||||||
ns_xinnanhua: "南华老仙",
|
ns_xinnanhua: "南华老仙",
|
||||||
ns_luyusheng: "陆郁生",
|
ns_luyusheng: "陆郁生",
|
||||||
|
|
||||||
key_kud: "库特莉亚芙卡",
|
|
||||||
kud_qiaoshou: "巧手",
|
|
||||||
kud_qiaoshou_equip: "巧手",
|
|
||||||
kud_qiaoshou_end: "巧手",
|
|
||||||
kud_qiaoshou_backup: "巧手",
|
|
||||||
kud_qiaoshou_info: "出牌阶段/结束阶段,若你没有“巧”,则你可以将一张手牌作为“巧”置于武将牌上并摸一张牌,且视为装备了一张你选择的武器牌或进攻坐骑/防具牌或防御坐骑直到“巧”进入弃牌堆。出牌阶段结束时/准备阶段开始时,你将“巧”置入弃牌堆。",
|
|
||||||
kud_buhui: "不悔",
|
|
||||||
kud_buhui_info: "限定技,当你进入濒死状态时,你可以弃置“巧”和装备区内的所有牌(至少一张)并摸等量的牌,将体力回复至2点,获得技能〖重振〗。",
|
|
||||||
key_misuzu: "神尾观铃",
|
|
||||||
misuzu_hengzhou: "恒咒",
|
|
||||||
misuzu_hengzhou_info: "锁定技,准备阶段开始时,或当你受到1点伤害或回复1点体力后,你获得一个“诅咒”标记。你的手牌上限和摸牌阶段的额定摸牌数+X。结束阶段开始时,若X大于3,则你移去所有“诅咒”标记并失去1点体力。(X为“诅咒”标记数)",
|
|
||||||
misuzu_nongyin: "浓饮",
|
|
||||||
misuzu_nongyin_info: "当你需要使用【桃】时,你可将一张红色非锦囊牌当做【乐不思蜀】置入自己的判定区,然后视为使用一张【桃】。",
|
|
||||||
misuzu_zhongxing: "终幸",
|
|
||||||
misuzu_zhongxing_info: "每回合限一次,当你判定区的牌移动到其他区域后,你可令一名角色回复1点体力或摸两张牌。",
|
|
||||||
key_kamome: "久岛鸥",
|
|
||||||
kamome_yangfan: "扬帆",
|
|
||||||
kamome_yangfan_info: "锁定技,游戏开始时,你将一张【旅行箱】置入你的装备区。当你失去装备区内的一张牌后,你摸两张牌。",
|
|
||||||
kamome_huanmeng: "幻梦",
|
|
||||||
kamome_huanmeng_info: "准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)",
|
|
||||||
kamome_jieban: "结伴",
|
|
||||||
kamome_jieban_info: "转换技。每回合限一次,当你受到或造成伤害后,阴:你可将两张牌交给一名其他角色,然后其交给你一张牌。阳:你可将一张牌交给一名其他角色,然后其交给你两张牌。",
|
|
||||||
kamome_suitcase: "旅行箱",
|
|
||||||
kamome_suitcase_info: "锁定技,你跳过你的判定阶段和弃牌阶段;当你即将翻面时,取消之。",
|
|
||||||
key_nao: "友利奈绪",
|
|
||||||
nao_duyin: "独隐",
|
|
||||||
nao_duyin2: "独隐",
|
|
||||||
nao_duyin_info: "一名其他角色的回合开始时,若你本局游戏内未对其发动过〖独隐〗,则你可以弃置一张牌或将武将牌翻面。若如此做,你不能成为其使用牌的目标,且对其使用牌没有距离限制且不计入使用次数直到你的下回合结束。",
|
|
||||||
nao_wanxin: "挽心",
|
|
||||||
nao_wanxin_info: "一名角色的回合结束时,你可以令一名本回合内受到过伤害的角色摸两张牌,然后你与其将武将牌重置。",
|
|
||||||
nao_shouqing: "守情",
|
|
||||||
nao_shouqing2: "守情",
|
|
||||||
nao_shouqing3: "守情",
|
|
||||||
nao_shouqing_info: "其他角色的出牌阶段内可以对你使用【桃】。若如此做,其摸一张牌且本局游戏内的手牌上限+1。",
|
|
||||||
key_yuuki: "冰室忧希",
|
|
||||||
yuuki_yicha: "异插",
|
|
||||||
yuuki_yicha_info: "出牌阶段开始时,你可依次进行两次判定并将判定牌依次置入两行三列方阵的两个随机位置中。然后你依次进行四次判定,每次可将当前判定牌置入空方格,且须与相邻方格的牌颜色均不同。若如此做,你令一名角色获得方阵内的所有牌。",
|
|
||||||
key_kyouko: "伊座并杏子",
|
|
||||||
kyouko_rongzhu: "容助",
|
|
||||||
kyouko_rongzhu_info: "其他角色不因此技能而得到你的牌后,你可摸一张牌,然后交给其一张牌。若其是当前回合角色,则其本回合使用【杀】的次数上限+1;若你是当前回合角色,则你本回合的手牌上限+1。",
|
|
||||||
kyouko_gongmian: "共勉",
|
|
||||||
kyouko_gongmian_use: "共勉",
|
|
||||||
kyouko_gongmian_exchange: "共勉",
|
|
||||||
kyouko_gongmian_info: "①出牌阶段,你可以选择一名未以此法选择过的角色,若其手牌:大于你,你获得其一张牌,然后交给其一张牌;小于你,其交给你一张牌,然后你交给其一张牌;等于你,你与其各摸一张牌。②出牌阶段结束时,你可以获得一名其他角色区域内的至多X张牌,然后交给其等量的牌。③弃牌阶段开始时,若X不小于你的体力值,你可以获得一名手牌数少于你的角色的所有手牌,然后将手牌数的一半(向上取整)交给该角色。(X为你本回合内发动过〖共勉①〗的次数)",
|
|
||||||
key_tenzen: "加纳天善",
|
|
||||||
tenzen_yixing: "弈兴",
|
|
||||||
tenzen_yixing_info: "当有角色因【杀】或【决斗】而受到伤害后,若其在你的攻击范围内或你在伤害来源的攻击范围内,你可以摸一张牌,然后将一张牌置于武将牌上,称为“兴”。当你成为其他角色使用【杀】或普通锦囊牌的唯一目标后,你可以获得一张“兴”,并可于此牌结算完成后弃置两张牌,视为对其使用一张名称相同的牌。",
|
|
||||||
//若对方为水织静久则无法触发〖弈兴〗
|
|
||||||
tenzen_lingyu: "领域",
|
|
||||||
tenzen_lingyu_info: "觉醒技,准备阶段,若你的“兴”不小于你的体力值,则你减1点体力上限并获得技能〖天全〗。若你以此法失去了体力,则你摸两张牌。",
|
|
||||||
tenzen_tianquan: "天全",
|
|
||||||
tenzen_tianquan_info: "每回合限一次,当你使用【杀】或【决斗】指定唯一目标后,你可以移去两张“兴”并亮出牌堆顶的五张牌。这些牌中每有一张基本牌,响应此牌需要的【闪】/【杀】的数量便+1。此牌结算完成后,若此牌造成过伤害,则你获得这些牌中的非基本牌。",
|
|
||||||
key_kotarou: "天王寺瑚太朗",
|
|
||||||
kotarou_aurora: "丝刃",
|
|
||||||
kotarou_aurora_info: "锁定技,当扣减体力或增加体力上限后,若你的装备区内:有武器牌,你视为使用一张【杀】;没有武器牌,你使用牌堆中的一张不为赠物的武器牌。",
|
|
||||||
kotarou_rewrite: "改写",
|
|
||||||
kotarou_rewrite_damage: "改写",
|
|
||||||
kotarou_rewrite_recover: "改写",
|
|
||||||
kotarou_rewrite_sha: "改写",
|
|
||||||
kotarou_rewrite_block: "改写",
|
|
||||||
kotarou_rewrite_info: "出牌阶段,你可选择:①视为使用一张本局游戏没有以此法使用过的基本牌或普通锦囊牌;②移动场上的一张牌;③增加1点体力上限并失去1点体力(体力上限至多为5);④下一次造成的伤害+1;⑤下一次回复的体力值+1;⑥本回合内的手牌上限和使用【杀】的使用次数+1。若你于本回合内发动过〖改写〗的次数超过两次,则你令此技能失效,且于回合结束后将体力上限降至3点,失去〖丝刃〗和〖改写〗。",
|
|
||||||
key_kyou: "藤林杏",
|
|
||||||
kyou_zhidian: "掷典",
|
|
||||||
kyou_zhidian_info: "你可以将一张锦囊牌当做【杀】使用(无距离限制)。当你使用【杀】指定第一个目标后,你选择一个与上次不同的选项:①此【杀】不可被响应。②此【杀】无视防具。③此【杀】伤害+1。④此【杀】不计入次数限制。",
|
|
||||||
kyou_duanfa: "断发",
|
|
||||||
kyou_duanfa_info: "限定技,当你受到伤害时,若伤害值不小于你的体力值,则你可弃置所有手牌,防止此伤害并回复1点体力;且当你于你的下回合开始前成为【杀】或伤害性锦囊牌的目标后,你摸一张牌。",
|
|
||||||
key_seira: "樱庭星罗",
|
|
||||||
seira_xinghui: "星辉",
|
|
||||||
seira_xinghui_info: "准备阶段,你可以投掷一枚骰子,观看牌堆顶的X张牌(X为投掷点数)并以任意顺序扣置于一名没有“星屑”的角色的武将牌上,称为“星屑”。有“星屑”的角色造成的伤害+1,且当其从牌堆顶摸牌或取得判定牌时,改为从“星屑”中获取。",
|
|
||||||
seira_yuanying: "缘映",
|
|
||||||
seira_yuanying_info: "出牌阶段限一次,你可选择两名角色。这两名角色成为“姻缘者”且获得〖姻缘〗直到你下次发动〖缘映〗。",
|
|
||||||
seira_yinyuan: "姻缘",
|
|
||||||
seira_yinyuan_info: "你的手牌对其他“姻缘者”可见。出牌阶段限一次,你可以获得一名其他“姻缘者”区域内的一张牌,然后其回复1点体力。",
|
|
||||||
key_kiyu: "露娜Q",
|
|
||||||
kiyu_yuling: "玉灵",
|
|
||||||
kiyu_yuling_info: "锁定技。你不是有距离限制的锦囊牌的合法目标;你成为【杀】的目标后,使用者需弃置X张牌(X为其至你的距离)。",
|
|
||||||
kiyu_xianyu: "先预",
|
|
||||||
kiyu_xianyu_info: "每轮限一次。一名角色的出牌阶段开始时,你可观看其手牌并预测其使用这些牌的顺序。此出牌阶段结束时,你摸X张牌,且其本回合的手牌上限+X(X为你的预测与其实际使用顺序的吻合数且至多为3)。",
|
|
||||||
kiyu_rexianyu: "先预",
|
|
||||||
kiyu_rexianyu_info: "每轮限一次。出牌阶段结束时,你可以选择一名其他角色。该角色于下个出牌阶段内使用第X张牌时,其可以将一张牌当做你本阶段内使用的第X张基本牌或普通锦囊牌使用(X至多为3);若如此做,你摸一张牌,且其本回合的手牌上限+1。",
|
|
||||||
key_tomoyo: "坂上智代",
|
|
||||||
tomoyo_wuwei: "武威",
|
|
||||||
tomoyo_wuwei_info: "①每回合每种花色限一次。你可以将一张手牌当做【杀】使用或打出。②当有角色使用【闪】后,若你在其攻击范围内,你可以对其使用一张【杀】(无距离限制)。",
|
|
||||||
tomoyo_zhengfeng: "整风",
|
|
||||||
tomoyo_zhengfeng_info: "使命技。①准备阶段,你可以令攻击范围内的一名角色进行判定。若如此做,你获得如下效果直到下回合开始:你视为在该角色的攻击范围内,且当该角色使用与判定牌颜色相同的牌时,你摸一张牌。②失败:结束阶段,若你于本回合内未发动过〖整风①〗,则你可以减1点体力上限。你失去〖武威〗,摸两张牌并回复1点体力,然后获得〖长誓〗。",
|
|
||||||
tomoyo_changshi: "长誓",
|
|
||||||
tomoyo_changshi_info: "锁定技。一名攻击范围内包含你的角色回复体力后,你获得1点护甲;一名攻击范围内包含你的角色一次性获得至少两张牌后,你摸一张牌。",
|
|
||||||
key_minagi: "远野美凪",
|
|
||||||
minagi_peiquan: "配券",
|
|
||||||
minagi_peiquan_info: "锁定技。①游戏开始时,你将你所有的手牌记录为“米券”。②出牌阶段,你可以赠予一张“米券”,然后执行一项本回合内未被选择过的效果:⒈对其造成1点伤害;⒉摸两张牌;⒊弃置其的两张牌;⒋亮出牌堆顶的一张牌,然后你可以使用之。",
|
|
||||||
minagi_huanliu: "幻流",
|
|
||||||
minagi_huanliu_info: "准备阶段开始时,你可与一名其他角色进行协力,并获得“远野小满”的所有技能直到目标角色的结束阶段开始。若“协力”成功,则你可以将所有手牌记录为“米券”。",
|
|
||||||
key_michiru: "远野小满",
|
|
||||||
michiru_sheyuan: "舍愿",
|
|
||||||
michiru_sheyuan_info: "每轮限一次。若你没有“米券”,则你可以将所有手牌当做任意基本牌或普通锦囊牌使用,然后摸等量的牌。",
|
|
||||||
minagi_tag: "米券",
|
|
||||||
|
|
||||||
noname: "小无",
|
noname: "小无",
|
||||||
noname_zhuyuan: "祝愿",
|
noname_zhuyuan: "祝愿",
|
||||||
noname_zhuyuan_info: "①每回合每名角色限一次。出牌阶段,你可以将四张花色各不相同的牌交给一名其他角色。你与其获得技能〖铁骑〗和〖激昂〗至各自的回合结束。②锁定技,若你于当前回合内:未发动过〖祝愿〗,则你使用牌无次数限制;发动过〖祝愿〗,则你使用牌无距离限制。",
|
noname_zhuyuan_info: "①每回合每名角色限一次。出牌阶段,你可以将四张花色各不相同的牌交给一名其他角色。你与其获得技能〖铁骑〗和〖激昂〗至各自的回合结束。②锁定技,若你于当前回合内:未发动过〖祝愿〗,则你使用牌无次数限制;发动过〖祝愿〗,则你使用牌无距离限制。",
|
||||||
|
|
|
@ -13,9 +13,6 @@ const characters = {
|
||||||
shen_machao: ["male", "shen", 4, ["shouli", "hengwu"], ["shu"]],
|
shen_machao: ["male", "shen", 4, ["shouli", "hengwu"], ["shu"]],
|
||||||
shen_sunquan: ["male", "shen", 4, ["junkyuheng", "junkdili"], ["wu"]],
|
shen_sunquan: ["male", "shen", 4, ["junkyuheng", "junkdili"], ["wu"]],
|
||||||
shen_jiangwei: ["male", "shen", 4, ["jiufa", "tianren", "pingxiang"], ["shu"]],
|
shen_jiangwei: ["male", "shen", 4, ["jiufa", "tianren", "pingxiang"], ["shu"]],
|
||||||
key_kagari: ["female", "shen", 3, ["kagari_zongsi"], ["key"]],
|
|
||||||
key_shiki: ["female", "shen", "3/5", ["shiki_omusubi"], ["key"]],
|
|
||||||
db_key_hina: ["female", "key", 3, ["hina_shenshi", "hina_xingzhi"], ["doublegroup:key:shen"]],
|
|
||||||
|
|
||||||
shen_sunce: ["male", "shen", "1/6", ["yingba", "scfuhai", "pinghe"], ["wu"]],
|
shen_sunce: ["male", "shen", "1/6", ["yingba", "scfuhai", "pinghe"], ["wu"]],
|
||||||
shen_xunyu: ["male", "shen", 3, ["tianzuo", "lingce", "dinghan"], ["wei", "clan:颍川荀氏"]],
|
shen_xunyu: ["male", "shen", 3, ["tianzuo", "lingce", "dinghan"], ["wei", "clan:颍川荀氏"]],
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
shen_diaochan(mode) {
|
shen_diaochan(mode) {
|
||||||
return mode == "identity" || mode == "doudizhu" || mode == "single" || (mode == "versus" && _status.mode != "standard" && _status.mode != "three");
|
return mode == "identity" || mode == "doudizhu" || mode == "single" || (mode == "versus" && _status.mode != "standard" && _status.mode != "three");
|
||||||
|
|
|
@ -4049,77 +4049,6 @@ const skills = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
hina_shenshi: {
|
|
||||||
groupSkill: true,
|
|
||||||
trigger: { player: ["phaseUseBegin", "phaseUseEnd"] },
|
|
||||||
frequent: true,
|
|
||||||
filter(event, player) {
|
|
||||||
return player.group == "shen";
|
|
||||||
},
|
|
||||||
content() {
|
|
||||||
"step 0";
|
|
||||||
player.draw(2).gaintag = ["hina_shenshi"];
|
|
||||||
player.addSkill("hina_shenshi_yingbian");
|
|
||||||
"step 1";
|
|
||||||
var cards = player.getCards("h", function (card) {
|
|
||||||
return card.hasGaintag("hina_shenshi");
|
|
||||||
});
|
|
||||||
if (!cards.length) event.finish();
|
|
||||||
else if (cards.length == 1) event._result = { bool: true, cards: cards };
|
|
||||||
else
|
|
||||||
player.chooseCard("h", true, "将一张“神视”牌置于牌堆顶", function (card) {
|
|
||||||
return card.hasGaintag("hina_shenshi");
|
|
||||||
});
|
|
||||||
"step 2";
|
|
||||||
if (result.bool) {
|
|
||||||
game.log(player, "将一张牌置于了牌堆顶");
|
|
||||||
player.lose(result.cards, ui.cardPile, "insert");
|
|
||||||
player.$throw(1, 1000);
|
|
||||||
} else event.finish();
|
|
||||||
"step 3";
|
|
||||||
game.delayx();
|
|
||||||
},
|
|
||||||
onremove(player) {
|
|
||||||
player.removeGaintag("hina_shenshi");
|
|
||||||
},
|
|
||||||
group: "hina_shenshi_yingbian",
|
|
||||||
},
|
|
||||||
hina_shenshi_yingbian: {
|
|
||||||
trigger: { player: "yingbian" },
|
|
||||||
forced: true,
|
|
||||||
filter: (event, player) => event.card.isCard && player.hasHistory("lose", evt => evt.getParent() == event && Object.values(evt.gaintag_map).some(value => value.includes("hina_shenshi"))),
|
|
||||||
content: () => {
|
|
||||||
if (!Array.isArray(trigger.temporaryYingbian)) trigger.temporaryYingbian = [];
|
|
||||||
trigger.temporaryYingbian.add("force");
|
|
||||||
trigger.temporaryYingbian.addArray(get.yingbianEffects());
|
|
||||||
},
|
|
||||||
},
|
|
||||||
hina_xingzhi: {
|
|
||||||
groupSkill: true,
|
|
||||||
trigger: { player: "yingbian" },
|
|
||||||
usable: 1,
|
|
||||||
filter: (event, player) => player.group == "key" && !event.card.yingbian && lib.yingbian.condition.complex.has("zhuzhan"),
|
|
||||||
content: () => {
|
|
||||||
"step 0";
|
|
||||||
trigger.yingbianZhuzhanAI = (player, card, source, targets) => cardx => {
|
|
||||||
if (get.attitude(player, source) <= 0) return 0;
|
|
||||||
var info = get.info(card),
|
|
||||||
num = 0;
|
|
||||||
if (info && info.ai && info.ai.yingbian) {
|
|
||||||
var ai = info.ai.yingbian(card, source, targets, player);
|
|
||||||
if (ai) num = ai;
|
|
||||||
}
|
|
||||||
return Math.max(num, 6) - get.value(cardx);
|
|
||||||
};
|
|
||||||
trigger.afterYingbianZhuzhan = event => event.zhuzhanresult.draw(2);
|
|
||||||
lib.yingbian.condition.complex.get("zhuzhan")(trigger);
|
|
||||||
"step 1";
|
|
||||||
if (!result.bool) return;
|
|
||||||
trigger.card.yingbian = true;
|
|
||||||
lib.yingbian.effect.forEach(value => game.yingbianEffect(trigger, value));
|
|
||||||
player.addTempSkill("yingbian_changeTarget");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
yingba: {
|
yingba: {
|
||||||
audio: 2,
|
audio: 2,
|
||||||
mod: {
|
mod: {
|
||||||
|
@ -5396,179 +5325,6 @@ const skills = {
|
||||||
delete player._trueMe;
|
delete player._trueMe;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
shiki_omusubi: {
|
|
||||||
audio: 2,
|
|
||||||
trigger: { global: "roundStart" },
|
|
||||||
direct: true,
|
|
||||||
content() {
|
|
||||||
"step 0";
|
|
||||||
player.chooseTarget(get.prompt2("shiki_omusubi"), lib.filter.notMe).set("ai", function (target) {
|
|
||||||
var player = _status.event.player;
|
|
||||||
if (player.isHealthy()) return 0;
|
|
||||||
if (player.hp < 3 && player.getDamagedHp() < 2) return 0;
|
|
||||||
var list = [];
|
|
||||||
if (lib.character[target.name]) list.addArray(lib.character[target.name][3]);
|
|
||||||
if (lib.character[target.name1]) list.addArray(lib.character[target.name1][3]);
|
|
||||||
if (lib.character[target.name2]) list.addArray(lib.character[target.name2][3]);
|
|
||||||
list = list.filter(function (i) {
|
|
||||||
return !player.hasSkill(i);
|
|
||||||
});
|
|
||||||
if (!list.length) return 0;
|
|
||||||
return 1 + Math.random();
|
|
||||||
});
|
|
||||||
"step 1";
|
|
||||||
if (result.bool) {
|
|
||||||
var target = result.targets[0];
|
|
||||||
player.logSkill("shiki_omusubi", target);
|
|
||||||
player.loseMaxHp();
|
|
||||||
var list = [];
|
|
||||||
if (lib.character[target.name]) list.addArray(lib.character[target.name][3]);
|
|
||||||
if (lib.character[target.name1]) list.addArray(lib.character[target.name1][3]);
|
|
||||||
if (lib.character[target.name2]) list.addArray(lib.character[target.name2][3]);
|
|
||||||
player.addSkills(list);
|
|
||||||
game.broadcastAll(function (list) {
|
|
||||||
lib.character.key_shiki[3].addArray(list);
|
|
||||||
game.expandSkills(list);
|
|
||||||
for (var i of list) {
|
|
||||||
var info = lib.skill[i];
|
|
||||||
if (!info) continue;
|
|
||||||
if (!info.audioname2) info.audioname2 = {};
|
|
||||||
info.audioname2.key_shiki = "shiki_omusubi";
|
|
||||||
}
|
|
||||||
}, list);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
kagari_zongsi: {
|
|
||||||
enable: "phaseUse",
|
|
||||||
usable: 1,
|
|
||||||
content() {
|
|
||||||
"step 0";
|
|
||||||
var controls = [];
|
|
||||||
if (ui.cardPile.hasChildNodes()) controls.push("选择牌堆中的一张牌");
|
|
||||||
if (ui.discardPile.hasChildNodes()) controls.push("选择弃牌堆中的一张牌");
|
|
||||||
if (
|
|
||||||
game.hasPlayer(function (current) {
|
|
||||||
return current.countCards("hej") > 0;
|
|
||||||
})
|
|
||||||
)
|
|
||||||
controls.push("选择一名角色区域内的一张牌");
|
|
||||||
if (!controls.length) {
|
|
||||||
event.finish();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.controls = controls;
|
|
||||||
var next = player.chooseControl();
|
|
||||||
next.set("choiceList", controls);
|
|
||||||
next.set("prompt", "请选择要移动的卡牌的来源");
|
|
||||||
next.ai = function () {
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
"step 1";
|
|
||||||
result.control = event.controls[result.index];
|
|
||||||
var list = ["弃牌堆", "牌堆", "角色"];
|
|
||||||
for (var i = 0; i < list.length; i++) {
|
|
||||||
if (result.control.indexOf(list[i]) != -1) {
|
|
||||||
event.index = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (event.index == 2) {
|
|
||||||
player.chooseTarget("请选择要移动的卡牌的来源", true, function (card, kagari, target) {
|
|
||||||
return target.countCards("hej") > 0;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
var source = ui[event.index == 0 ? "discardPile" : "cardPile"].childNodes;
|
|
||||||
var list = [];
|
|
||||||
for (var i = 0; i < source.length; i++) list.push(source[i]);
|
|
||||||
player.chooseButton(["请选择要移动的卡牌", list], true).ai = get.buttonValue;
|
|
||||||
}
|
|
||||||
"step 2";
|
|
||||||
if (event.index == 2) {
|
|
||||||
player.line(result.targets[0]);
|
|
||||||
event.target1 = result.targets[0];
|
|
||||||
player.choosePlayerCard(result.targets[0], true, "hej").set("visible", true);
|
|
||||||
} else {
|
|
||||||
event.card = result.links[0];
|
|
||||||
}
|
|
||||||
"step 3";
|
|
||||||
if (event.index == 2) event.card = result.cards[0];
|
|
||||||
var controls = ["将这张牌移动到牌堆的顶部或者底部", "将这张牌移动到弃牌堆的顶部或者底部", "将这张牌移动到一名角色对应的区域里"];
|
|
||||||
event.controls = controls;
|
|
||||||
var next = player.chooseControl();
|
|
||||||
next.set("prompt", "要对" + get.translation(event.card) + "做什么呢?");
|
|
||||||
next.set("choiceList", controls);
|
|
||||||
next.ai = function () {
|
|
||||||
return 2;
|
|
||||||
};
|
|
||||||
"step 4";
|
|
||||||
result.control = event.controls[result.index];
|
|
||||||
var list = ["弃牌堆", "牌堆", "角色"];
|
|
||||||
for (var i = 0; i < list.length; i++) {
|
|
||||||
if (result.control.indexOf(list[i]) != -1) {
|
|
||||||
event.index2 = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (event.index2 == 2) {
|
|
||||||
player.chooseTarget("要将" + get.translation(card) + "移动到哪一名角色的对应区域呢", true).ai = function (target) {
|
|
||||||
return target == _status.event.player ? 1 : 0;
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
player.chooseControl("顶部", "底部").set("prompt", "把" + get.translation(card) + "移动到" + (event.index2 == 0 ? "弃" : "") + "牌堆的...");
|
|
||||||
}
|
|
||||||
"step 5";
|
|
||||||
if (event.index2 != 2) {
|
|
||||||
//if(event.target1) event.target1.lose(card,ui.special);
|
|
||||||
//else card.goto(ui.special);
|
|
||||||
event.way = result.control;
|
|
||||||
} else {
|
|
||||||
event.target2 = result.targets[0];
|
|
||||||
var list = ["手牌区"];
|
|
||||||
if (lib.card[card.name].type == "equip" && event.target2.canEquip(card)) list.push("装备区");
|
|
||||||
if (lib.card[card.name].type == "delay" && !event.target2.isDisabledJudge() && !event.target2.hasJudge(card.name)) list.push("判定区");
|
|
||||||
if (list.length == 1) event._result = { control: list[0] };
|
|
||||||
else {
|
|
||||||
player.chooseControl(list).set("prompt", "把" + get.translation(card) + "移动到" + get.translation(event.target2) + "的...").ai = function () {
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"step 6";
|
|
||||||
if (event.index2 != 2) {
|
|
||||||
var node = ui[event.index == 0 ? "discardPile" : "cardPile"];
|
|
||||||
if (event.target1) {
|
|
||||||
var next = event.target1.lose(card, event.position);
|
|
||||||
if (event.way == "顶部") next.insert_card = true;
|
|
||||||
} else {
|
|
||||||
if (event.way == "底部") node.appendChild(card);
|
|
||||||
else node.insertBefore(card, node.firstChild);
|
|
||||||
}
|
|
||||||
game.updateRoundNumber();
|
|
||||||
event.finish();
|
|
||||||
} else {
|
|
||||||
if (result.control == "手牌区") {
|
|
||||||
var next = event.target2.gain(card);
|
|
||||||
if (event.target1) {
|
|
||||||
next.source = event.target1;
|
|
||||||
next.animate = "giveAuto";
|
|
||||||
} else next.animate = "draw";
|
|
||||||
} else if (result.control == "装备区") {
|
|
||||||
if (event.target1) event.target1.$give(card, event.target2);
|
|
||||||
event.target2.equip(card);
|
|
||||||
} else {
|
|
||||||
if (event.target1) event.target1.$give(card, event.target2);
|
|
||||||
event.target2.addJudge(card);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"step 7";
|
|
||||||
game.updateRoundNumber();
|
|
||||||
},
|
|
||||||
ai: {
|
|
||||||
order: 10,
|
|
||||||
result: { player: 1 },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
caopi_xingdong: {
|
caopi_xingdong: {
|
||||||
audio: "olfangquan",
|
audio: "olfangquan",
|
||||||
audioname: ["shen_caopi"],
|
audioname: ["shen_caopi"],
|
||||||
|
|
|
@ -5,7 +5,6 @@ const characterSort = {
|
||||||
extra_shan: ["shen_zhaoyun", "shen_simayi"],
|
extra_shan: ["shen_zhaoyun", "shen_simayi"],
|
||||||
extra_yin: ["shen_liubei", "shen_luxun"],
|
extra_yin: ["shen_liubei", "shen_luxun"],
|
||||||
extra_lei: ["shen_ganning", "shen_zhangliao"],
|
extra_lei: ["shen_ganning", "shen_zhangliao"],
|
||||||
extra_key: ["key_kagari", "key_shiki", "db_key_hina"],
|
|
||||||
extra_decade: ["shen_jiangwei", "shen_machao", "shen_zhangfei", "shen_zhangjiao", "shen_dengai", "shen_xuzhu", "dc_shen_huatuo"],
|
extra_decade: ["shen_jiangwei", "shen_machao", "shen_zhangfei", "shen_zhangjiao", "shen_dengai", "shen_xuzhu", "dc_shen_huatuo"],
|
||||||
extra_ol: ["ol_zhangliao", "shen_caopi", "shen_zhenji", "shen_sunquan"],
|
extra_ol: ["ol_zhangliao", "shen_caopi", "shen_zhenji", "shen_sunquan"],
|
||||||
extra_mobilezhi: ["shen_guojia", "shen_xunyu"],
|
extra_mobilezhi: ["shen_guojia", "shen_xunyu"],
|
||||||
|
|
|
@ -258,20 +258,6 @@ const translates = {
|
||||||
hengwu_info: "当你使用或打出有花色的牌时,若你的手牌区内没有与此牌花色相同的牌,则你可以摸X张牌(X为场上装备区内花色与此牌相同的牌数)。",
|
hengwu_info: "当你使用或打出有花色的牌时,若你的手牌区内没有与此牌花色相同的牌,则你可以摸X张牌(X为场上装备区内花色与此牌相同的牌数)。",
|
||||||
hengwu_append: '<span style="font-family: yuanli">棘手,怀念,摧毁!</span>',
|
hengwu_append: '<span style="font-family: yuanli">棘手,怀念,摧毁!</span>',
|
||||||
|
|
||||||
key_kagari: "篝",
|
|
||||||
kagari_zongsi: "纵丝",
|
|
||||||
kagari_zongsi_info: "出牌阶段限一次,你可以选择一张不在游戏外的牌,然后将其置于牌堆/弃牌堆的顶部/底部或一名角色的对应区域内。",
|
|
||||||
key_shiki: "神山识",
|
|
||||||
key_shiki_ab: "神山识",
|
|
||||||
shiki_omusubi: "御结",
|
|
||||||
shiki_omusubi_info: "一轮游戏开始时,你可以减1点体力上限,然后将一名其他角色武将牌上的技能加入到你的武将牌上。",
|
|
||||||
shiki_omusubi_append: '<span style="font-family: yuanli">来吧,羽依里。用你的手,让我变成那只真正的鬼吧!</span>',
|
|
||||||
db_key_hina: "佐藤雏",
|
|
||||||
hina_shenshi: "神视",
|
|
||||||
hina_shenshi_yingbian: "神视",
|
|
||||||
hina_shenshi_info: "神势力技。出牌阶段开始时/结束时,你可摸两张牌,然后将其中一张牌置于牌堆顶。你以此法得到的牌视为拥有全部应变效果,且可以无条件发动。",
|
|
||||||
hina_xingzhi: "幸凪",
|
|
||||||
hina_xingzhi_info: "键势力技。每回合限一次,你可以通过“助战”触发一张牌的全部应变效果,且响应助战的角色摸两张牌。",
|
|
||||||
tw_shen_guanyu: "TW神关羽",
|
tw_shen_guanyu: "TW神关羽",
|
||||||
tw_shen_guanyu_prefix: "TW神",
|
tw_shen_guanyu_prefix: "TW神",
|
||||||
twwushen: "武神",
|
twwushen: "武神",
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
jsrg_xushao(mode) {
|
jsrg_xushao(mode) {
|
||||||
return mode != "guozhan";
|
return mode != "guozhan";
|
||||||
|
|
|
@ -439,6 +439,113 @@ const characters = {
|
||||||
hp: 3,
|
hp: 3,
|
||||||
skills: ["fuuko_xingdiao", "fuuko_chuanyuan"],
|
skills: ["fuuko_xingdiao", "fuuko_chuanyuan"],
|
||||||
},
|
},
|
||||||
|
key_kagari: {
|
||||||
|
sex: "female",
|
||||||
|
group: "shen",
|
||||||
|
groupInGuozhan: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kagari_zongsi"],
|
||||||
|
},
|
||||||
|
key_shiki: {
|
||||||
|
sex: "female",
|
||||||
|
group: "shen",
|
||||||
|
groupInGuozhan: "key",
|
||||||
|
hp: 3,
|
||||||
|
maxHp: 5,
|
||||||
|
skills: ["shiki_omusubi"],
|
||||||
|
},
|
||||||
|
db_key_hina: {
|
||||||
|
sex: "female",
|
||||||
|
group: "shen",
|
||||||
|
groupInGuozhan: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["hina_shenshi", "hina_xingzhi"],
|
||||||
|
doubleGroup: ["key", "shen"],
|
||||||
|
},
|
||||||
|
key_kud: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kud_qiaoshou", "kud_buhui"],
|
||||||
|
},
|
||||||
|
key_misuzu: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["misuzu_hengzhou", "misuzu_nongyin", "misuzu_zhongxing"],
|
||||||
|
},
|
||||||
|
key_kamome: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kamome_yangfan", "kamome_huanmeng", "kamome_jieban"],
|
||||||
|
},
|
||||||
|
key_nao: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["nao_duyin", "nao_wanxin", "nao_shouqing"],
|
||||||
|
},
|
||||||
|
key_yuuki: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["yuuki_yicha"],
|
||||||
|
},
|
||||||
|
key_kotarou: {
|
||||||
|
sex: "male",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kotarou_rewrite", "kotarou_aurora"],
|
||||||
|
},
|
||||||
|
key_tenzen: {
|
||||||
|
sex: "male",
|
||||||
|
group: "key",
|
||||||
|
hp: 4,
|
||||||
|
skills: ["tenzen_fenghuan", "tenzen_retianquan"],
|
||||||
|
},
|
||||||
|
key_kyouko: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kyouko_rongzhu", "kyouko_gongmian"],
|
||||||
|
},
|
||||||
|
key_kyou: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kyou_zhidian", "kyou_duanfa"],
|
||||||
|
},
|
||||||
|
key_seira: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["seira_xinghui", "seira_yuanying"],
|
||||||
|
},
|
||||||
|
key_kiyu: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["kiyu_yuling", "kiyu_rexianyu"],
|
||||||
|
},
|
||||||
|
key_tomoyo: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 4,
|
||||||
|
skills: ["tomoyo_wuwei", "tomoyo_zhengfeng"],
|
||||||
|
},
|
||||||
|
key_minagi: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["minagi_peiquan", "minagi_huanliu"],
|
||||||
|
},
|
||||||
|
key_michiru: {
|
||||||
|
sex: "female",
|
||||||
|
group: "key",
|
||||||
|
hp: 3,
|
||||||
|
skills: ["michiru_sheyuan"],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default characters;
|
export default characters;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import { characterSort, characterSortTranslate } from "./sort.js";
|
||||||
game.import("character", function () {
|
game.import("character", function () {
|
||||||
return {
|
return {
|
||||||
name: "key",
|
name: "key",
|
||||||
|
connect: true,
|
||||||
character: { ...characters },
|
character: { ...characters },
|
||||||
characterSort: {
|
characterSort: {
|
||||||
key: characterSort,
|
key: characterSort,
|
||||||
|
@ -31,6 +32,19 @@ game.import("character", function () {
|
||||||
characterTitle: {
|
characterTitle: {
|
||||||
key_kotomi: "#g落英逐紫裙",
|
key_kotomi: "#g落英逐紫裙",
|
||||||
key_jojiro: "战棋专属角色",
|
key_jojiro: "战棋专属角色",
|
||||||
|
key_kud: "#b千夜",
|
||||||
|
key_misuzu: "#b长发及腰黑长直",
|
||||||
|
key_kamome: "#b仿生纱",
|
||||||
|
key_nao: "#b潮鸣",
|
||||||
|
key_kyou: "#b长发及腰黑长直",
|
||||||
|
key_yuuki: "#b4399司命",
|
||||||
|
key_kyouko: "#b阿阿阿687",
|
||||||
|
key_tenzen: "#b皋耳击",
|
||||||
|
key_kotarou: "#bb1154486224",
|
||||||
|
key_seira: "#b阿开木木W🍀",
|
||||||
|
key_kiyu: "#b无面◎隐者",
|
||||||
|
key_tomoyo: "#b长发及腰黑长直",
|
||||||
|
key_minagi: "#b无面◎隐者",
|
||||||
},
|
},
|
||||||
card: { ...cards },
|
card: { ...cards },
|
||||||
skill: { ...skills },
|
skill: { ...skills },
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,18 +1,18 @@
|
||||||
const characterSort = {
|
const characterSort = {
|
||||||
key_one: ["key_rumi"],
|
key_one: ["key_rumi"],
|
||||||
key_kanon: ["key_shiori", "key_kaori", "key_akiko"],
|
key_kanon: ["key_shiori", "key_kaori", "key_akiko"],
|
||||||
key_air: ["key_haruko", "key_yukito", "key_crow", "key_kano"],
|
key_air: ["key_haruko", "key_yukito", "key_crow", "key_kano", "key_misuzu", "key_minagi", "key_michiru"],
|
||||||
key_clannad: ["key_yukine", "key_sunohara", "key_tomoya", "key_nagisa", "key_kotomi", "key_fuuko"],
|
key_clannad: ["key_yukine", "key_sunohara", "key_tomoya", "key_nagisa", "key_kotomi", "key_fuuko", "key_kyou", "key_tomoyo"],
|
||||||
key_littlebusters: ["key_kyousuke", "key_komari", "key_masato", "key_kengo", "key_saya", "key_harukakanata", "key_rin", "key_sasami", "key_doruji", "key_yuiko", "key_riki", "key_mio", "key_midori"],
|
key_littlebusters: ["key_kyousuke", "key_komari", "key_masato", "key_kengo", "key_saya", "key_harukakanata", "key_rin", "key_sasami", "key_doruji", "key_yuiko", "key_riki", "key_mio", "key_midori", "key_kud", "key_yuuki"],
|
||||||
key_rewrite: ["key_lucia", "key_akane", "key_shizuru", "key_kotori", "key_sakuya", "key_chihaya", "key_asara"],
|
key_rewrite: ["key_lucia", "key_akane", "key_shizuru", "key_kotori", "key_sakuya", "key_chihaya", "key_asara", "key_kagari", "key_kotarou"],
|
||||||
key_angelbeats: ["sp_key_yuri", "key_yuri", "key_iwasawa", "key_yoshino", "key_yui", "key_shiina", "key_hisako", "key_hinata", "key_noda", "key_ayato", "key_yuzuru", "sp_key_kanade", "key_shiorimiyuki", "key_abyusa", "key_godan"],
|
key_angelbeats: ["sp_key_yuri", "key_yuri", "key_iwasawa", "key_yoshino", "key_yui", "key_shiina", "key_hisako", "key_hinata", "key_noda", "key_ayato", "key_yuzuru", "sp_key_kanade", "key_shiorimiyuki", "key_abyusa", "key_godan"],
|
||||||
key_charlotte: ["key_yusa", "key_misa", "key_yuu", "key_jojiro"],
|
key_charlotte: ["key_yusa", "key_misa", "key_yuu", "key_jojiro", "key_nao"],
|
||||||
key_harmonia: ["key_rei"],
|
key_harmonia: ["key_rei"],
|
||||||
key_kamisamaninattahi: ["key_hiroto", "key_youta"],
|
key_summerpockets: ["key_umi", "key_umi2", "key_tsumugi", "key_inari", "key_ao", "key_kyoko", "key_miki", "key_ryoichi", "key_shiroha", "key_shizuku", "key_shiki", "key_kamome", "key_tenzen"],
|
||||||
key_summerpockets: ["key_umi", "key_umi2", "key_tsumugi", "key_inari", "key_ao", "key_kyoko", "key_miki", "key_ryoichi", "key_shiroha", "key_shizuku"],
|
key_kamisamaninattahi: ["key_hiroto", "key_youta", "db_key_hina", "key_kyouko"],
|
||||||
key_loopers: ["key_mia"],
|
key_loopers: ["key_mia"],
|
||||||
key_lunaria: ["key_iriya"],
|
key_lunaria: ["key_iriya", "key_kiyu"],
|
||||||
key_heavenburnsred: ["db_key_liyingxia", "key_erika", "key_satomi"],
|
key_heavenburnsred: ["db_key_liyingxia", "key_erika", "key_satomi", "key_seira"],
|
||||||
};
|
};
|
||||||
|
|
||||||
const characterSortTranslate = {
|
const characterSortTranslate = {
|
||||||
|
|
|
@ -456,6 +456,119 @@ const translates = {
|
||||||
fuuko_xingdiao_info: "锁定技。游戏开始时,你将手牌摸至8张,然后将所有手牌明置(称为“星”,不计入手牌上限)。每名其他角色限一次,其可以于出牌阶段选择获得你的一张“星”,然后你摸一张牌。",
|
fuuko_xingdiao_info: "锁定技。游戏开始时,你将手牌摸至8张,然后将所有手牌明置(称为“星”,不计入手牌上限)。每名其他角色限一次,其可以于出牌阶段选择获得你的一张“星”,然后你摸一张牌。",
|
||||||
fuuko_chuanyuan: "传愿",
|
fuuko_chuanyuan: "传愿",
|
||||||
fuuko_chuanyuan_info: "锁定技。当你失去一张“星”后,你回复1点体力,然后从牌堆中获得一张和“星”花色点数相同的牌(没有则改为摸一张牌,且使用此牌无距离和次数限制)。",
|
fuuko_chuanyuan_info: "锁定技。当你失去一张“星”后,你回复1点体力,然后从牌堆中获得一张和“星”花色点数相同的牌(没有则改为摸一张牌,且使用此牌无距离和次数限制)。",
|
||||||
|
|
||||||
|
key_kagari: "篝",
|
||||||
|
kagari_zongsi: "纵丝",
|
||||||
|
kagari_zongsi_info: "出牌阶段限一次,你可以选择一张不在游戏外的牌,然后将其置于牌堆/弃牌堆的顶部/底部或一名角色的对应区域内。",
|
||||||
|
key_shiki: "神山识",
|
||||||
|
key_shiki_ab: "神山识",
|
||||||
|
shiki_omusubi: "御结",
|
||||||
|
shiki_omusubi_info: "一轮游戏开始时,你可以减1点体力上限,然后将一名其他角色武将牌上的技能加入到你的武将牌上。",
|
||||||
|
shiki_omusubi_append: '<span style="font-family: yuanli">来吧,羽依里。用你的手,让我变成那只真正的鬼吧!</span>',
|
||||||
|
db_key_hina: "佐藤雏",
|
||||||
|
hina_shenshi: "神视",
|
||||||
|
hina_shenshi_yingbian: "神视",
|
||||||
|
hina_shenshi_info: "神势力技。出牌阶段开始时/结束时,你可摸两张牌,然后将其中一张牌置于牌堆顶。你以此法得到的牌视为拥有全部应变效果,且可以无条件发动。",
|
||||||
|
hina_xingzhi: "幸凪",
|
||||||
|
hina_xingzhi_info: "键势力技。每回合限一次,你可以通过“助战”触发一张牌的全部应变效果,且响应助战的角色摸两张牌。",
|
||||||
|
|
||||||
|
|
||||||
|
key_kud: "库特莉亚芙卡",
|
||||||
|
kud_qiaoshou: "巧手",
|
||||||
|
kud_qiaoshou_equip: "巧手",
|
||||||
|
kud_qiaoshou_end: "巧手",
|
||||||
|
kud_qiaoshou_backup: "巧手",
|
||||||
|
kud_qiaoshou_info: "出牌阶段/结束阶段,若你没有“巧”,则你可以将一张手牌作为“巧”置于武将牌上并摸一张牌,且视为装备了一张你选择的武器牌或进攻坐骑/防具牌或防御坐骑直到“巧”进入弃牌堆。出牌阶段结束时/准备阶段开始时,你将“巧”置入弃牌堆。",
|
||||||
|
kud_buhui: "不悔",
|
||||||
|
kud_buhui_info: "限定技,当你进入濒死状态时,你可以弃置“巧”和装备区内的所有牌(至少一张)并摸等量的牌,将体力回复至2点,获得技能〖重振〗。",
|
||||||
|
key_misuzu: "神尾观铃",
|
||||||
|
misuzu_hengzhou: "恒咒",
|
||||||
|
misuzu_hengzhou_info: "锁定技,准备阶段开始时,或当你受到1点伤害或回复1点体力后,你获得一个“诅咒”标记。你的手牌上限和摸牌阶段的额定摸牌数+X。结束阶段开始时,若X大于3,则你移去所有“诅咒”标记并失去1点体力。(X为“诅咒”标记数)",
|
||||||
|
misuzu_nongyin: "浓饮",
|
||||||
|
misuzu_nongyin_info: "当你需要使用【桃】时,你可将一张红色非锦囊牌当做【乐不思蜀】置入自己的判定区,然后视为使用一张【桃】。",
|
||||||
|
misuzu_zhongxing: "终幸",
|
||||||
|
misuzu_zhongxing_info: "每回合限一次,当你判定区的牌移动到其他区域后,你可令一名角色回复1点体力或摸两张牌。",
|
||||||
|
key_kamome: "久岛鸥",
|
||||||
|
kamome_yangfan: "扬帆",
|
||||||
|
kamome_yangfan_info: "锁定技,游戏开始时,你将一张【旅行箱】置入你的装备区。当你失去装备区内的一张牌后,你摸两张牌。",
|
||||||
|
kamome_huanmeng: "幻梦",
|
||||||
|
kamome_huanmeng_info: "准备阶段开始时,你可以观看牌堆顶的X+1张牌并可以按任意顺序置于牌堆顶或牌堆底。(X为你装备区内的牌数)",
|
||||||
|
kamome_jieban: "结伴",
|
||||||
|
kamome_jieban_info: "转换技。每回合限一次,当你受到或造成伤害后,阴:你可将两张牌交给一名其他角色,然后其交给你一张牌。阳:你可将一张牌交给一名其他角色,然后其交给你两张牌。",
|
||||||
|
kamome_suitcase: "旅行箱",
|
||||||
|
kamome_suitcase_info: "锁定技,你跳过你的判定阶段和弃牌阶段;当你即将翻面时,取消之。",
|
||||||
|
key_nao: "友利奈绪",
|
||||||
|
nao_duyin: "独隐",
|
||||||
|
nao_duyin2: "独隐",
|
||||||
|
nao_duyin_info: "一名其他角色的回合开始时,若你本局游戏内未对其发动过〖独隐〗,则你可以弃置一张牌或将武将牌翻面。若如此做,你不能成为其使用牌的目标,且对其使用牌没有距离限制且不计入使用次数直到你的下回合结束。",
|
||||||
|
nao_wanxin: "挽心",
|
||||||
|
nao_wanxin_info: "一名角色的回合结束时,你可以令一名本回合内受到过伤害的角色摸两张牌,然后你与其将武将牌重置。",
|
||||||
|
nao_shouqing: "守情",
|
||||||
|
nao_shouqing2: "守情",
|
||||||
|
nao_shouqing3: "守情",
|
||||||
|
nao_shouqing_info: "其他角色的出牌阶段内可以对你使用【桃】。若如此做,其摸一张牌且本局游戏内的手牌上限+1。",
|
||||||
|
key_yuuki: "冰室忧希",
|
||||||
|
yuuki_yicha: "异插",
|
||||||
|
yuuki_yicha_info: "出牌阶段开始时,你可依次进行两次判定并将判定牌依次置入两行三列方阵的两个随机位置中。然后你依次进行四次判定,每次可将当前判定牌置入空方格,且须与相邻方格的牌颜色均不同。若如此做,你令一名角色获得方阵内的所有牌。",
|
||||||
|
key_kyouko: "伊座并杏子",
|
||||||
|
kyouko_rongzhu: "容助",
|
||||||
|
kyouko_rongzhu_info: "其他角色不因此技能而得到你的牌后,你可摸一张牌,然后交给其一张牌。若其是当前回合角色,则其本回合使用【杀】的次数上限+1;若你是当前回合角色,则你本回合的手牌上限+1。",
|
||||||
|
kyouko_gongmian: "共勉",
|
||||||
|
kyouko_gongmian_use: "共勉",
|
||||||
|
kyouko_gongmian_exchange: "共勉",
|
||||||
|
kyouko_gongmian_info: "①出牌阶段,你可以选择一名未以此法选择过的角色,若其手牌:大于你,你获得其一张牌,然后交给其一张牌;小于你,其交给你一张牌,然后你交给其一张牌;等于你,你与其各摸一张牌。②出牌阶段结束时,你可以获得一名其他角色区域内的至多X张牌,然后交给其等量的牌。③弃牌阶段开始时,若X不小于你的体力值,你可以获得一名手牌数少于你的角色的所有手牌,然后将手牌数的一半(向上取整)交给该角色。(X为你本回合内发动过〖共勉①〗的次数)",
|
||||||
|
key_tenzen: "加纳天善",
|
||||||
|
tenzen_yixing: "弈兴",
|
||||||
|
tenzen_yixing_info: "当有角色因【杀】或【决斗】而受到伤害后,若其在你的攻击范围内或你在伤害来源的攻击范围内,你可以摸一张牌,然后将一张牌置于武将牌上,称为“兴”。当你成为其他角色使用【杀】或普通锦囊牌的唯一目标后,你可以获得一张“兴”,并可于此牌结算完成后弃置两张牌,视为对其使用一张名称相同的牌。",
|
||||||
|
//若对方为水织静久则无法触发〖弈兴〗
|
||||||
|
tenzen_lingyu: "领域",
|
||||||
|
tenzen_lingyu_info: "觉醒技,准备阶段,若你的“兴”不小于你的体力值,则你减1点体力上限并获得技能〖天全〗。若你以此法失去了体力,则你摸两张牌。",
|
||||||
|
tenzen_tianquan: "天全",
|
||||||
|
tenzen_tianquan_info: "每回合限一次,当你使用【杀】或【决斗】指定唯一目标后,你可以移去两张“兴”并亮出牌堆顶的五张牌。这些牌中每有一张基本牌,响应此牌需要的【闪】/【杀】的数量便+1。此牌结算完成后,若此牌造成过伤害,则你获得这些牌中的非基本牌。",
|
||||||
|
key_kotarou: "天王寺瑚太朗",
|
||||||
|
kotarou_aurora: "丝刃",
|
||||||
|
kotarou_aurora_info: "锁定技,当扣减体力或增加体力上限后,若你的装备区内:有武器牌,你视为使用一张【杀】;没有武器牌,你使用牌堆中的一张不为赠物的武器牌。",
|
||||||
|
kotarou_rewrite: "改写",
|
||||||
|
kotarou_rewrite_damage: "改写",
|
||||||
|
kotarou_rewrite_recover: "改写",
|
||||||
|
kotarou_rewrite_sha: "改写",
|
||||||
|
kotarou_rewrite_block: "改写",
|
||||||
|
kotarou_rewrite_info: "出牌阶段,你可选择:①视为使用一张本局游戏没有以此法使用过的基本牌或普通锦囊牌;②移动场上的一张牌;③增加1点体力上限并失去1点体力(体力上限至多为5);④下一次造成的伤害+1;⑤下一次回复的体力值+1;⑥本回合内的手牌上限和使用【杀】的使用次数+1。若你于本回合内发动过〖改写〗的次数超过两次,则你令此技能失效,且于回合结束后将体力上限降至3点,失去〖丝刃〗和〖改写〗。",
|
||||||
|
key_kyou: "藤林杏",
|
||||||
|
kyou_zhidian: "掷典",
|
||||||
|
kyou_zhidian_info: "你可以将一张锦囊牌当做【杀】使用(无距离限制)。当你使用【杀】指定第一个目标后,你选择一个与上次不同的选项:①此【杀】不可被响应。②此【杀】无视防具。③此【杀】伤害+1。④此【杀】不计入次数限制。",
|
||||||
|
kyou_duanfa: "断发",
|
||||||
|
kyou_duanfa_info: "限定技,当你受到伤害时,若伤害值不小于你的体力值,则你可弃置所有手牌,防止此伤害并回复1点体力;且当你于你的下回合开始前成为【杀】或伤害性锦囊牌的目标后,你摸一张牌。",
|
||||||
|
key_seira: "樱庭星罗",
|
||||||
|
seira_xinghui: "星辉",
|
||||||
|
seira_xinghui_info: "准备阶段,你可以投掷一枚骰子,观看牌堆顶的X张牌(X为投掷点数)并以任意顺序扣置于一名没有“星屑”的角色的武将牌上,称为“星屑”。有“星屑”的角色造成的伤害+1,且当其从牌堆顶摸牌或取得判定牌时,改为从“星屑”中获取。",
|
||||||
|
seira_yuanying: "缘映",
|
||||||
|
seira_yuanying_info: "出牌阶段限一次,你可选择两名角色。这两名角色成为“姻缘者”且获得〖姻缘〗直到你下次发动〖缘映〗。",
|
||||||
|
seira_yinyuan: "姻缘",
|
||||||
|
seira_yinyuan_info: "你的手牌对其他“姻缘者”可见。出牌阶段限一次,你可以获得一名其他“姻缘者”区域内的一张牌,然后其回复1点体力。",
|
||||||
|
key_kiyu: "露娜Q",
|
||||||
|
kiyu_yuling: "玉灵",
|
||||||
|
kiyu_yuling_info: "锁定技。你不是有距离限制的锦囊牌的合法目标;你成为【杀】的目标后,使用者需弃置X张牌(X为其至你的距离)。",
|
||||||
|
kiyu_xianyu: "先预",
|
||||||
|
kiyu_xianyu_info: "每轮限一次。一名角色的出牌阶段开始时,你可观看其手牌并预测其使用这些牌的顺序。此出牌阶段结束时,你摸X张牌,且其本回合的手牌上限+X(X为你的预测与其实际使用顺序的吻合数且至多为3)。",
|
||||||
|
kiyu_rexianyu: "先预",
|
||||||
|
kiyu_rexianyu_info: "每轮限一次。出牌阶段结束时,你可以选择一名其他角色。该角色于下个出牌阶段内使用第X张牌时,其可以将一张牌当做你本阶段内使用的第X张基本牌或普通锦囊牌使用(X至多为3);若如此做,你摸一张牌,且其本回合的手牌上限+1。",
|
||||||
|
key_tomoyo: "坂上智代",
|
||||||
|
tomoyo_wuwei: "武威",
|
||||||
|
tomoyo_wuwei_info: "①每回合每种花色限一次。你可以将一张手牌当做【杀】使用或打出。②当有角色使用【闪】后,若你在其攻击范围内,你可以对其使用一张【杀】(无距离限制)。",
|
||||||
|
tomoyo_zhengfeng: "整风",
|
||||||
|
tomoyo_zhengfeng_info: "使命技。①准备阶段,你可以令攻击范围内的一名角色进行判定。若如此做,你获得如下效果直到下回合开始:你视为在该角色的攻击范围内,且当该角色使用与判定牌颜色相同的牌时,你摸一张牌。②失败:结束阶段,若你于本回合内未发动过〖整风①〗,则你可以减1点体力上限。你失去〖武威〗,摸两张牌并回复1点体力,然后获得〖长誓〗。",
|
||||||
|
tomoyo_changshi: "长誓",
|
||||||
|
tomoyo_changshi_info: "锁定技。一名攻击范围内包含你的角色回复体力后,你获得1点护甲;一名攻击范围内包含你的角色一次性获得至少两张牌后,你摸一张牌。",
|
||||||
|
key_minagi: "远野美凪",
|
||||||
|
minagi_peiquan: "配券",
|
||||||
|
minagi_peiquan_info: "锁定技。①游戏开始时,你将你所有的手牌记录为“米券”。②出牌阶段,你可以赠予一张“米券”,然后执行一项本回合内未被选择过的效果:⒈对其造成1点伤害;⒉摸两张牌;⒊弃置其的两张牌;⒋亮出牌堆顶的一张牌,然后你可以使用之。",
|
||||||
|
minagi_huanliu: "幻流",
|
||||||
|
minagi_huanliu_info: "准备阶段开始时,你可与一名其他角色进行协力,并获得“远野小满”的所有技能直到目标角色的结束阶段开始。若“协力”成功,则你可以将所有手牌记录为“米券”。",
|
||||||
|
key_michiru: "远野小满",
|
||||||
|
michiru_sheyuan: "舍愿",
|
||||||
|
michiru_sheyuan_info: "每轮限一次。若你没有“米券”,则你可以将所有手牌当做任意基本牌或普通锦囊牌使用,然后摸等量的牌。",
|
||||||
|
minagi_tag: "米券",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default translates;
|
export default translates;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
simashi(mode) {
|
simashi(mode) {
|
||||||
if (["boss", "chess", "tafang", "stone"].includes(mode)) return false;
|
if (["boss", "chess", "tafang", "stone"].includes(mode)) return false;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1422,6 +1422,7 @@ window.noname_character_rank = {
|
||||||
"xia_shie",
|
"xia_shie",
|
||||||
"clan_wangmingshan",
|
"clan_wangmingshan",
|
||||||
"yj_simafu",
|
"yj_simafu",
|
||||||
|
"dc_wuyi",
|
||||||
],
|
],
|
||||||
bm: [
|
bm: [
|
||||||
"kongrong",
|
"kongrong",
|
||||||
|
@ -1728,6 +1729,7 @@ window.noname_character_rank = {
|
||||||
],
|
],
|
||||||
rarity: {
|
rarity: {
|
||||||
legend: [
|
legend: [
|
||||||
|
"dc_wuyi",
|
||||||
"sp_sunce",
|
"sp_sunce",
|
||||||
"star_caoren",
|
"star_caoren",
|
||||||
"dc_zhaoyun",
|
"dc_zhaoyun",
|
||||||
|
|
18876
character/refresh.js
18876
character/refresh.js
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
re_zuoci(mode) {
|
re_zuoci(mode) {
|
||||||
return mode != "guozhan";
|
return mode != "guozhan";
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
zuoci(mode) {
|
zuoci(mode) {
|
||||||
return mode != "guozhan";
|
return mode != "guozhan";
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
chunyuqiong(mode) {
|
chunyuqiong(mode) {
|
||||||
return mode != "identity" && mode != "guozhan";
|
return mode != "identity" && mode != "guozhan";
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
nashime(mode) {
|
nashime(mode) {
|
||||||
return mode != "guozhan";
|
return mode != "guozhan";
|
||||||
|
|
17675
character/xianding.js
17675
character/xianding.js
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {
|
const characterFilters = {
|
||||||
// leitong(mode) {
|
// leitong(mode) {
|
||||||
// return mode != "identity" && mode != "guozhan";
|
// return mode != "identity" && mode != "guozhan";
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
|
@ -32,7 +32,7 @@ const characterReplaces = {
|
||||||
chenqun: ["chenqun", "dc_chenqun", "re_chenqun", "old_chenqun"],
|
chenqun: ["chenqun", "dc_chenqun", "re_chenqun", "old_chenqun"],
|
||||||
hanhaoshihuan: ["hanhaoshihuan", "re_hanhaoshihuan"],
|
hanhaoshihuan: ["hanhaoshihuan", "re_hanhaoshihuan"],
|
||||||
caozhen: ["caozhen", "re_caozhen", "xin_caozhen", "old_caozhen"],
|
caozhen: ["caozhen", "re_caozhen", "xin_caozhen", "old_caozhen"],
|
||||||
wuyi: ["wuyi", "re_wuyi", "xin_wuyi"],
|
wuyi: ["wuyi", "re_wuyi", "xin_wuyi", "dc_wuyi"],
|
||||||
sunluban: ["re_sunluban", "xin_sunluban", "sunluban"],
|
sunluban: ["re_sunluban", "xin_sunluban", "sunluban"],
|
||||||
zhuhuan: ["re_zhuhuan", "xin_zhuhuan", "zhuhuan", "old_zhuhuan"],
|
zhuhuan: ["re_zhuhuan", "xin_zhuhuan", "zhuhuan", "old_zhuhuan"],
|
||||||
caoxiu: ["caoxiu", "re_caoxiu", "xin_caoxiu", "tw_caoxiu", "old_caoxiu"],
|
caoxiu: ["caoxiu", "re_caoxiu", "xin_caoxiu", "tw_caoxiu", "old_caoxiu"],
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { lib, game, ui, get, ai, _status } from "../../noname.js";
|
||||||
|
|
||||||
const characterFilters = {};
|
const characterFilters = {};
|
||||||
|
|
||||||
export default characterFilters;
|
export default characterFilters;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
|
@ -1450,7 +1450,32 @@ export class Game {
|
||||||
* //如果key中包含发动技能的角色名player,则直接改用info.audioname2[player]来播放语音
|
* //如果key中包含发动技能的角色名player,则直接改用info.audioname2[player]来播放语音
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
parseSkillAudio(skill, player, skillInfo, useRawAudio) {
|
parseSkillAudio(skill, player, skillInfo) {
|
||||||
|
return game.parseSkillTextMap(skill, player, skillInfo).map(data => data.file);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 根据skill中的audio,audioname,audioname2和player来获取技能台词列表
|
||||||
|
* @param { string } skill 技能名
|
||||||
|
* @param { Player | Object | string } [player] 角色/角色名
|
||||||
|
* @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill]
|
||||||
|
* @returns { string[] } 语音地址列表
|
||||||
|
*/
|
||||||
|
parseSkillText(skill, player, skillInfo) {
|
||||||
|
const audios = game.parseSkillTextMap(skill, player, skillInfo);
|
||||||
|
const voiceMap = [];
|
||||||
|
audios.forEach(audioname => {
|
||||||
|
if(audioname.text) voiceMap.push(audioname.text);
|
||||||
|
});
|
||||||
|
return voiceMap;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 根据skill中的audio,audioname,audioname2和player来获取技能台词列表及其对应的源文件名
|
||||||
|
* @param { string } skill 技能名
|
||||||
|
* @param { Player | Object | string } [player] 角色/角色名
|
||||||
|
* @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill]
|
||||||
|
* @returns { any[] } 语音地址列表
|
||||||
|
*/
|
||||||
|
parseSkillTextMap(skill, player, skillInfo) {
|
||||||
if (typeof player === "string") player = { name: player };
|
if (typeof player === "string") player = { name: player };
|
||||||
else if (typeof player !== "object" || player === null) player = {};
|
else if (typeof player !== "object" || player === null) player = {};
|
||||||
|
|
||||||
|
@ -1483,12 +1508,6 @@ export class Game {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} skill
|
|
||||||
* @param {{audioname:string[],history:string[]}} options
|
|
||||||
* @param {skillInfo} [skillInfo]
|
|
||||||
* @returns {string[]}
|
|
||||||
*/
|
|
||||||
function getAudioList(skill, options, skillInfo) {
|
function getAudioList(skill, options, skillInfo) {
|
||||||
const info = skillInfo || lib.skill[skill];
|
const info = skillInfo || lib.skill[skill];
|
||||||
if (!info) {
|
if (!info) {
|
||||||
|
@ -1506,12 +1525,6 @@ export class Game {
|
||||||
return parseAudio(skill, options, audioInfo);
|
return parseAudio(skill, options, audioInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} skill
|
|
||||||
* @param {{audioname:string[],history:string[]}} options
|
|
||||||
* @param {audioInfo} audioInfo info.audio
|
|
||||||
* @returns {string[]}
|
|
||||||
*/
|
|
||||||
function parseAudio(skill, options, audioInfo) {
|
function parseAudio(skill, options, audioInfo) {
|
||||||
const audioname = options.audioname.slice();
|
const audioname = options.audioname.slice();
|
||||||
const history = options.history.slice();
|
const history = options.history.slice();
|
||||||
|
@ -1537,57 +1550,36 @@ export class Game {
|
||||||
if (!/^db:|^ext:|\//.test(audioInfo)) path = "skill/";
|
if (!/^db:|^ext:|\//.test(audioInfo)) path = "skill/";
|
||||||
if (!/\.\w+$/.test(audioInfo) && !["data:", "blob:"].some(name => audioInfo.startsWith(name))) format = ".mp3";
|
if (!/\.\w+$/.test(audioInfo) && !["data:", "blob:"].some(name => audioInfo.startsWith(name))) format = ".mp3";
|
||||||
if (path && format) return parseAudio(audioInfo, options, [true, 2]);
|
if (path && format) return parseAudio(audioInfo, options, [true, 2]);
|
||||||
return [useRawAudio ? audioInfo : `${path}${audioInfo}${format}`];
|
|
||||||
|
const key = audioInfo, file = `${path}${audioInfo}${format}`;
|
||||||
|
const data = {key, file};
|
||||||
|
if(lib.translate[`#${key}`]) data.text = lib.translate[`#${key}`];
|
||||||
|
return [data];
|
||||||
}
|
}
|
||||||
|
|
||||||
let _audioname = getName(i => audioname.includes(i));
|
let _audioname = getName(i => audioname.includes(i));
|
||||||
_audioname = _audioname ? `_${_audioname}` : "";
|
_audioname = _audioname ? `_${_audioname}` : "";
|
||||||
|
|
||||||
if (list[2] === "true") return [`${list[1] || "skill"}/${skill}${_audioname}.${list[3] || "mp3"}`];
|
if (list[2] === "true") {
|
||||||
|
const key = `${skill}${_audioname}`, file = `${list[1] || "skill"}/${skill}${_audioname}.${list[3] || "mp3"}`;
|
||||||
|
const data = {key, file};
|
||||||
|
if(lib.translate[`#${key}`]) data.text = lib.translate[`#${key}`];
|
||||||
|
return [data];
|
||||||
|
}
|
||||||
|
|
||||||
const audioList = [];
|
const audioList = []
|
||||||
list[2] = parseInt(list[2]);
|
list[2] = parseInt(list[2]);
|
||||||
for (let i = 1; i <= list[2]; i++) {
|
for (let i = 1; i <= list[2]; i++) {
|
||||||
if (useRawAudio) audioList.push(`${skill}${_audioname}${i}`);
|
const key = `${skill}${_audioname}${i}`, file = `${list[1] || "skill"}/${skill}${_audioname}${i}.${list[3] || "mp3"}`;
|
||||||
else audioList.push(`${list[1] || "skill"}/${skill}${_audioname}${i}.${list[3] || "mp3"}`);
|
const data = {key, file};
|
||||||
|
if(lib.translate[`#${key}`]) data.text = lib.translate[`#${key}`];
|
||||||
|
audioList.push(data);
|
||||||
}
|
}
|
||||||
return audioList;
|
return audioList;
|
||||||
}
|
}
|
||||||
|
|
||||||
return getAudioList(skill, { audioname: [], history: [] }, skillInfo);
|
return getAudioList(skill, { audioname: [], history: [] }, skillInfo);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 根据skill中的audio,audioname,audioname2和player来获取技能台词列表
|
|
||||||
* @param { string } skill 技能名
|
|
||||||
* @param { Player | Object | string } [player] 角色/角色名
|
|
||||||
* @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill]
|
|
||||||
* @returns { string[] } 语音地址列表
|
|
||||||
*/
|
|
||||||
parseSkillText(skill, player, skillInfo) {
|
|
||||||
const audios = game.parseSkillAudio(skill, player, skillInfo, true);
|
|
||||||
const voiceMap = [];
|
|
||||||
audios.forEach(audioname => {
|
|
||||||
const voiceText = lib.translate[`#${audioname}`];
|
|
||||||
if (voiceText) voiceMap.push(voiceText);
|
|
||||||
});
|
|
||||||
return voiceMap;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* 根据skill中的audio,audioname,audioname2和player来获取技能台词列表及其对应的源文件名
|
|
||||||
* @param { string } skill 技能名
|
|
||||||
* @param { Player | Object | string } [player] 角色/角色名
|
|
||||||
* @param { skillInfo | audioInfo } [skillInfo] 预设的skillInfo/audioInfo(转为skillInfo),覆盖lib.skill[skill]
|
|
||||||
* @returns { Object } 语音地址列表
|
|
||||||
*/
|
|
||||||
parseSkillTextMap(skill, player, skillInfo) {
|
|
||||||
const audios = game.parseSkillAudio(skill, player, skillInfo, true);
|
|
||||||
const voiceMap = {};
|
|
||||||
audios.forEach(audioname => {
|
|
||||||
const voiceText = lib.translate[`#${audioname}`];
|
|
||||||
if (voiceText) voiceMap[audioname] = voiceText;
|
|
||||||
});
|
|
||||||
return voiceMap;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param { string } skill
|
* @param { string } skill
|
||||||
|
|
Loading…
Reference in New Issue