Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions card/xianxia.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,63 @@ game.import("card", function () {
},
},
},
dajunyajing: {
audio: true,
fullskin: true,
type: "trick",
enable: true,
filterTarget: true,
async content(event, trigger, player) {
const target = event.target;
const targets = game
.filterPlayer(current => {
return current != target;
})
.sortBySeat(_status.currentPhase);
for (const current of targets) {
if (!target.isIn()) {
return;
}
if (!current.isIn() || !current.countCards("hes") || current.hasSkill("diaohulishan")) {
continue;
}
const next = current.chooseToUse();
next.set("openskilldialog", `大军压境:是否将一张牌当作【杀】对${get.translation(target)}使用?`);
next.set("norestore", true);
next.set("_backupevent", `dajunyajing_backup`);
next.set("custom", {
add: {},
replace: { window() {} },
});
next.backup(`dajunyajing_backup`);
next.set("targetRequired", true);
next.set("complexSelect", true);
next.set("filterTarget", function (card, player, target) {
const { sourcex } = get.event();
if (target != sourcex && !ui.selected.targets.includes(sourcex)) {
return false;
}
return lib.filter.targetEnabled.apply(this, arguments);
});
next.set("sourcex", target);
next.set("addCount", false);
await next;
}
},
ai: {
order: 6,
value: 12,
useful: 10,
tag: {
damage: 1,
},
result: {
target(player, target) {
return -1 * (game.countPlayer() - 1);
},
},
},
},
},
skill: {
tiejili_skill: {
Expand Down Expand Up @@ -689,6 +746,20 @@ game.import("card", function () {
},
},
},
dajunyajing_backup: {
filterCard(card) {
return get.itemtype(card) == "card";
},
viewAs: {
name: "sha",
},
selectCard: 1,
position: "hes",
ai1(card) {
return 7 - get.value(card);
},
log: false,
},
},
translate: {
tiejili: "铁蒺藜骨朵",
Expand Down Expand Up @@ -718,6 +789,8 @@ game.import("card", function () {
mengchong_skill_info: "锁定技,当你使用牌结算结束后,你选择与其他角色互相计算距离+1或-1直到你的下个回合开始(至多+2/-2)。",
yidugongdu: "以毒攻毒",
yidugongdu_info: "出牌阶段,对一名已受伤的角色使用。你观看其所有手牌,然后若你与其手牌中均有【毒】,弃置其中一张【毒】并与其各摸两张牌,否则你与其依次受到1点无来源伤害。",
dajunyajing: "大军压境",
dajunyajing_info: "出牌阶段,对一名角色使用。其以外的所有角色依次选择是否将一张牌当无距离限制的【杀】对其使用。",
},
list: [
["diamond", 6, "suibozhuliu"],
Expand Down
14 changes: 14 additions & 0 deletions character/extra/character.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
const characters = {
wn_shen_machao: {
sex: "male",
group: "shen",
hp: 5,
skills: ["wn_qiangshu", "wn_yuma"],
groupInGuozhan: "shu",
},
wn_shen_xuzhu: {
sex: "male",
group: "shen",
hp: 5,
skills: ["wn_zhuanzhan", "wn_huwei"],
groupInGuozhan: "wei",
},
ca_shen_wangyun: {
sex: "male",
group: "shen",
Expand Down
167 changes: 167 additions & 0 deletions character/extra/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,173 @@ import { lib, game, ui, get, ai, _status } from "../../noname.js";

/** @type { importCharacterConfig['skill'] } */
const skills = {
//渭南神马超
wn_qiangshu: {
trigger: {
source: "damageBegin1",
},
filter(event, player) {
if (!event.card || !["sha", "juedou"].includes(event.card.name)) {
return false;
}
const num = player.getAttackRange() - 1;
return num > 0 && player.countCards("he") >= num;
},
async cost(event, trigger, player) {
const num = player.getAttackRange() - 1;
event.result = await player
.chooseToDiscard("he", get.prompt2(event.skill), num)
.set("chooseonly", true)
.set("ai", card => {
const trigger = get.event().getTrigger(),
player = get.player();
if (get.damageEffect(trigger.player, trigger.source, player) <= 0) {
return 0;
}
return 7 - get.value(card);
})
.forResult();
event.result.targets = [trigger.player];
},
async content(event, trigger, player) {
await player.discard(event.cards);
trigger.num += event.cards.length;
},
},
wn_yuma: {
trigger: {
global: ["loseAfter", "loseAsyncAfter", "cardsDiscardAfter", "equipAfter"],
},
usable: 1,
filter(event, player) {
if (!event.getd || !event.getl) {
return false;
}
let cards = event.getd();
return cards.some(card => {
if (get.position(card) != "d" || get.type(card) != "equip") {
return false;
}
if (card.willBeDestroyed("discardPile", get.owner(card), event)) {
return false;
}
return game.hasPlayer(current => {
return current.canEquip(card, true);
});
});
},
async cost(event, trigger, player) {
const cards = trigger.getd().filter(card => {
if (get.position(card) != "d" || get.type(card) != "equip") {
return false;
}
if (card.willBeDestroyed("discardPile", get.owner(card), trigger)) {
return false;
}
return true;
});
const { result: { bool, targets, links } } = await player
.chooseButtonTarget({
createDialog: [get.prompt2(event.skill), cards],
filterTarget(card, player, target) {
const buttons = ui.selected.buttons;
if (!buttons.length) {
return false;
}
return target.canEquip(buttons[0].link, true);
},
ai1(button) {
return 20 - get.value(button.link);
},
ai2(target) {
const player = get.player();
const card = ui.selected.buttons[0]?.link;
if (!target.countCards("h")) {
return get.value(card, target) * get.attitude(player, target);
}
return (get.value(card, target) - target.countCards("h")) * get.attitude(player, target);
},
});
event.result = {
bool: bool,
targets: targets,
cards: links,
};
},
async content(event, trigger, player) {
const { targets: [target], cards: [card] } = event;
target.$gain2(card);
await game.delay();
await target.equip(card);
const num = target.countCards("h");
if (num > 0 && target != player) {
await player.gainPlayerCard(target, true, "h", num);
}
},
},
//渭南神许褚
wn_zhuanzhan: {
trigger: {
global: "phaseZhunbeiBegin",
},
filter(event, player) {
if (event.player == player || !player.hasEnabledSlot()) {
return false;
}
const card = new lib.element.VCard({ name: "juedou" });
return player.canUse(card, event.player);
},
async cost(event, trigger, player) {
let list = [];
for (let i = 1; i <= 5; i++) {
const slot = `equip${i}`;
if (player.hasEnabledSlot(slot)) {
list.push("equip" + i);
}
}
list.push("cancel2");
let bool = "cancel2";
const card = new lib.element.VCard({ name: "juedou" });
if (get.effect(trigger.player, card, player, player) > 0) {
bool = list.filter(i => i != "cancel2").randomGet();
}
const result = await player
.chooseControl(list)
.set("prompt", get.prompt2(event.skill))
.set("ai", () => get.event("bool"))
.set("bool", bool)
.forResult();
event.result = {
bool: result.control != "cancel2",
targets: [trigger.player],
cost_data: result.control,
};
},
async content(event, trigger, player) {
const slot = event.cost_data;
await player.disableEquip([slot]);
const card = new lib.element.VCard({ name: "juedou" });
if (player.canUse(card, trigger.player)) {
await player.useCard(card, trigger.player);
}
},
},
wn_huwei: {
trigger: {
player: "phaseDrawBegin2",
},
forced: true,
filter(event, player) {
let list = Array.from({ length: 13 }).map((_, i) => "equip" + parseFloat(i + 1));
list = list.filter(i => player.hasDisabledSlot(i));
return !event.numFixed && list.length;
},
async content(event, trigger, player) {
let list = Array.from({ length: 13 }).map((_, i) => "equip" + parseFloat(i + 1));
let num = list.reduce((sum, slot) => sum + player.countDisabledSlot(slot), 0);
trigger.num += num;
},
},
//汉末神王允
caanchao: {
trigger: {
Expand Down
2 changes: 2 additions & 0 deletions character/extra/sort.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const characterSort = {
extra_offline: ["shen_jiaxu", "shen_diaochan", "boss_zhaoyun", "le_shen_jiaxu", "ps_shen_machao"],
extra_hanmo: ["hm_shen_yl_luzhi", "hm_shen_huangfusong", "hm_shen_zhangjiao", "hm_shen_zhangbao", "hm_shen_zhangliang", "hm_shen_zhujun"],
extra_changan: ["ca_shen_wangyun", "ca_shen_caocao", "ca_shen_lijueguosi", "zombie_jiaxu", "zombie_zombie"],
extra_weinan: ["wn_shen_machao", "wn_shen_xuzhu"],
extra_taoyuan: ["ty_shen_zhangfei", "ty_shen_guanyu", "ty_shen_liubei"],
extra_jingxiang: ["jx_shen_caoren", "jx_shen_liubiao"],
};
Expand All @@ -37,6 +38,7 @@ const characterSortTranslate = {
extra_mb: "移动版神将",
extra_hanmo: "风云志·汉末风云",
extra_changan: "风云志·长安风云",
extra_weinan: "风云志·渭南风云",
extra_taoyuan: "山河煮酒·桃园挽歌",
extra_jingxiang: "风云志·荆襄风云",
};
Expand Down
13 changes: 13 additions & 0 deletions character/extra/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,19 @@ const translates = {
cayurong_info: "锁定技,你于一轮内首次成为一种伤害牌的目标时,取消之。",
cadingxi: "定西",
cadingxi_info: "蓄力技(4/∞)。当你连续使用一种类型的牌时,你可以消耗1点蓄力值并展示牌堆顶的一张牌,若类型相同,你使用之,否则你从牌堆底摸一张牌;若连续相同2/3次,你回复全部体力/对所有其他角色各造成1点伤害。",

wn_shen_machao: "渭南神马超",
wn_shen_machao_prefix: "渭南神",
wn_qiangshu: "枪术",
wn_qiangshu_info: "你使用【杀】或【决斗】造成伤害时,可以弃置X张牌,令此伤害+X(X为你的攻击范围-1)。",
wn_yuma: "御马",
wn_yuma_info: "每回合限一次,一张装备牌进入弃牌堆后,你可以将此牌置入一名角色装备区,然后获得其所有手牌。",
wn_shen_xuzhu: "渭南神许褚",
wn_shen_xuzhu_prefix: "渭南神",
wn_zhuanzhan: "转战",
wn_zhuanzhan_info: "其他角色的准备阶段,你可以废除一个装备栏并视为对其使用一张【决斗】。",
wn_huwei: "虎威",
wn_huwei_info: "锁定技,摸牌阶段你多摸X张牌(X为你已废除的装备栏数)。",
};

export default translates;
68 changes: 68 additions & 0 deletions character/offline/character.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,72 @@
const characters = {
wn_caocao: {
sex: "male",
group: "wei",
hp: 4,
isZhugong: true,
skills: ["wn_dingluan", "wn_zhuijiang"],
},
wn_hansui: {
sex: "male",
group: "qun",
hp: 4,
maxHp: 5,
isZhugong: true,
skills: ["wn_jubing", "wn_xiongju"],
},
wn_houxuan: {
sex: "male",
group: "qun",
hp: 4,
skills: ["wn_zhongtao", "mashu"],
},
wn_chengyi: {
sex: "male",
group: "qun",
hp: 4,
skills: ["wn_dutan"],
},
wn_yangqiú: {
sex: "male",
group: "qun",
hp: 4,
skills: ["wn_qifeng"],
},
pe_jun_caopi: {
sex: "male",
group: "wei",
hp: 3,
isZhugong: true,
skills: ["jun_cuanzun", "jun_liufang", "songwei"],
},
pe_jun_liushan: {
sex: "male",
group: "shu",
hp: 3,
isZhugong: true,
skills: ["jun_fuxiang", "jun_leling", "ruoyu"],
},
pe_jun_sunquan: {
sex: "male",
group: "wu",
hp: 4,
isZhugong: true,
skills: ["jun_henglv", "jiuyuan"],
},
pe_jun_liuxie: {
sex: "male",
group: "qun",
hp: 3,
isZhugong: true,
skills: ["jun_tianze", "jun_zhaoshou", "twzhuiting"],
},
pe_jun_liuhong: {
sex: "male",
group: "qun",
hp: 4,
isZhugong: true,
skills: ["jun_gezhi", "jun_julian"],
},
pe_que: {
sex: "male",
group: "qun",
Expand Down
Loading