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
Binary file added apps/core/audio/die/ol_chitu.mp3
Binary file not shown.
Binary file added apps/core/audio/die/ol_le_menghuo.mp3
Binary file not shown.
Binary file modified apps/core/audio/die/xinxianying.mp3
Binary file not shown.
Binary file modified apps/core/audio/skill/caishi1.mp3
Binary file not shown.
Binary file modified apps/core/audio/skill/caishi2.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/olfangma1.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/olfangma2.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/oljingxian1.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/oljingxian2.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/oljunzhu1.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/oljunzhu2.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/olrehuanshi1.mp3
Binary file not shown.
Binary file added apps/core/audio/skill/olrehuanshi2.mp3
Binary file not shown.
Binary file modified apps/core/audio/skill/zhongjian1.mp3
Binary file not shown.
Binary file modified apps/core/audio/skill/zhongjian2.mp3
Binary file not shown.
34 changes: 16 additions & 18 deletions apps/core/character/bingshi/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,21 @@ const skills = {
charlotte: true,
silent: true,
popup: false,
mod: {
aiOrder(player, card, num) {
if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) {
return num + 0.1;
}
},
aiValue(player, card, num) {
if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) {
return num / 114514;
}
},
aiUseful() {
return lib.skill.potshanxi_tag.mod.aiValue.apply(this, arguments);
},
},
trigger: { global: "phaseEnd" },
filter(event, player) {
return player.hasCards("h", card => card.hasGaintag("potshanxi_tag"));
Expand Down Expand Up @@ -321,23 +336,6 @@ const skills = {
}
}
},
locked: false,
//应机牌仅对自己可见所以只给自己加个ai
mod: {
aiOrder(player, card, num) {
if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) {
return num + 0.1;
}
},
aiValue(player, card, num) {
if (get.itemtype(card) == "card" && card.hasGaintag("potshanxi_tag")) {
return num / 114514;
}
},
aiUseful() {
return lib.skill.potqizhou.mod.aiValue.apply(this, arguments);
},
},
group: "potqizhou_draw",
subSkill: {
draw: {
Expand Down Expand Up @@ -3614,7 +3612,7 @@ const skills = {
},
async cost(event, trigger, player) {
event.result = await player
.chooseTarget("你可发动共谋,与1名其他角色交换手牌并获得技能", (card, player, target) => {
.chooseTarget("共谋,与一名其他角色交换手牌并获得技能", (card, player, target) => {
if (target == player || target.countCards("h") + player.countCards("h") == 0) {
if (target != player) {
target.prompt("没牌交换", "fire");
Expand Down
10 changes: 10 additions & 0 deletions apps/core/character/collab/voices.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
export default {
"#olfangma1": "姑奶奶在此,尽管放马过来!",
"#olfangma2": "咱可是要赢得天下的战马!",
"#oljingxian1": "无敌赤兔大人的传说,就此开始!",
"#oljingxian2": "无论赛跑还是战斗,全都斗志满满!",
"#ol_chitu:die": "不可能,绝对不可能!",
"#oljunzhu1": "治大国如烹小鲜,煮好一锅菌子比当个好君主难得多!",
"#oljunzhu2": "一场好雨刚歇,正是吃菌子的好季节!",
"#olrehuanshi1": "采蘑菇的小姑娘,背着一个大箩筐~",
"#olrehuanshi2": "老话说得好,先菌…先君子后小人!",
"#ol_le_menghuo:die": "我好像…看到了…",
"#tangguo1": "人生就像一盒糖果,每天都是好味道!",
"#tangguo2": "我有好多棒棒糖!",
"#kangzhang1": "吃我一招,降龙十巴掌!",
Expand Down
32 changes: 11 additions & 21 deletions apps/core/character/huicui/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -7997,15 +7997,14 @@ const skills = {
audio: 2,
enable: "phaseUse",
usable: 1,
filterCard: true,
filterCard: lib.filter.cardDiscardable,
position: "he",
selectCard: 1,
check(card) {
var player = _status.event.player;
const player = get.player();
if (!player.hasSkill("dczuowei")) {
return 6 - get.value(card);
}
if (player.countCards("h") == player.countCards("e") + 1 && !player.hasCard(card => player.hasValueTarget(card), "h")) {
if (player.countCards("h") == player.countCards("e") + 1 && !player.hasCards("h", card => player.hasValueTarget(card))) {
if (get.position(card) == "e") {
return 0;
}
Expand All @@ -8015,30 +8014,23 @@ const skills = {
},
async content(event, trigger, player) {
let result;

// step 0
const targets = game.filterPlayer(current => {
return current.countGainableCards(player, "e");
});
if (targets.length == 0) {
const targets = game.filterPlayer(current => current.hasGainableCards(player, "e"));
if (!targets.length) {
result = { bool: false };
} else if (targets.length == 1) {
result = { bool: true, targets: targets };
} else {
result = await player
.chooseTarget("自固:获得一名角色装备区里的一张牌", true, (card, player, target) => {
return target.countGainableCards(player, "e");
return target.hasGainableCards(player, "e");
})
.set("ai", target => {
if (target == _status.event.player) {
const player = get.player();
if (target == player) {
return 10;
}
if (get.attitude(_status.event.player, target) < 0) {
if (
target.hasCard(card => {
return get.value(card, player) >= 6;
})
) {
if (get.attitude(player, target) < 0) {
if (target.hasCards("e", card => get.value(card, player) >= 6)) {
return 12;
}
return 8;
Expand All @@ -8047,14 +8039,12 @@ const skills = {
})
.forResult();
}
// step 1
let target;
if (result.bool) {
if (result?.bool && result.targets?.length) {
target = result.targets[0];
event.target = target;
result = await player.gainPlayerCard("e", target, true).forResult();
}
// step 2
if (!result.bool || target == player || !result.cards || !result.cards.some(i => get.owner(i) == player)) {
await player.draw();
}
Expand Down
4 changes: 2 additions & 2 deletions apps/core/character/jsrg/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -1581,12 +1581,12 @@ const skills = {
onremove: true,
mod: {
cardSavable: (card, player) => {
if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent()._jsrgzonghai_id)) {
if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent("dying", false, true)._jsrgzonghai_id)) {
return false;
}
},
cardEnabled: (card, player) => {
if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent()._jsrgzonghai_id)) {
if (player.getStorage("jsrgzonghai_blocker").includes(get.event().getParent("dying", false, true)._jsrgzonghai_id)) {
return false;
}
},
Expand Down
1 change: 1 addition & 0 deletions apps/core/character/mobile/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -2382,6 +2382,7 @@ const skills = {
audio: "shanjia",
enable: "phaseUse",
usable: 1,
manualConfirm: true,
init(player) {
player.addSkill("mbshanjia_count");
},
Expand Down
1 change: 1 addition & 0 deletions apps/core/character/offline/character.js
Original file line number Diff line number Diff line change
Expand Up @@ -1446,6 +1446,7 @@ const characters = {
group: "qun",
hp: 4,
skills: ["hm_dafu", "hm_jipin"],
img: "image/character/yudu.jpg",
},
hm_taosheng: {
sex: "male",
Expand Down
5 changes: 3 additions & 2 deletions apps/core/character/offline/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ const translates = {
pecaishi: "才诗",
pecaishi_info: "每回合每种字数限一次,你可以将一张牌当做任意字数相同的基本牌或普通锦囊牌使用。",
peculv: "促律",
peculv_info: "锁定技,每名角色于其回合内使用牌时,若与上一张被使用的牌名字数或类型相同,你摸一张牌;其回合结束时,若此技能发动过至少三次,其回复一点体力并摸两张牌。",
peculv_info: "锁定技,每名角色于其回合内使用牌时,若与上一张被使用的牌名字数或类型相同,你摸一张牌;其回合结束时,若此技能发动过至少三次,其回复1点体力并摸两张牌。",
zh_shen_zhangjiao: "纵横神张角",
zh_shen_zhangjiao_prefix: "纵横|神",
zhyuanlin: "渊临",
Expand Down Expand Up @@ -729,7 +729,8 @@ const translates = {
hm_nanhualaoxian_prefix: "汉末",
hm_guigu: "眭固",
hm_bosi: "卜巳",
hm_yudu: "于毒",
hm_yudu: "汉末于毒",
hm_yudu_prefix: "汉末",
hm_taosheng: "陶升",
hm_fuyun: "浮云",
hm_tangzhou: "唐周",
Expand Down
1 change: 1 addition & 0 deletions apps/core/character/sp/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -8104,6 +8104,7 @@ const skills = {
olshanjia: {
audio: "shanjia",
enable: "phaseUse",
manualConfirm: true,
prompt() {
return lib.translate.olshanjia_info.split("③")[1];
},
Expand Down
1 change: 1 addition & 0 deletions apps/core/character/sp2/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -2078,6 +2078,7 @@ const skills = {
}
return 7 - get.value(card);
})
.set("target", target)
.forResult();
if (result?.bool && result.cards?.length) {
const num = result.cards.length;
Expand Down
2 changes: 1 addition & 1 deletion apps/core/character/sp2/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,7 @@ const translates = {
star_dingfeng: "星丁奉",
star_dingfeng_prefix: "星",
stardangchen: "荡尘",
stardangchen_info: "出牌阶段开始时,你可以令一名角色交给你任意张牌,然后你可以弃置X张牌(X为其交给你的牌数)。若你因此弃牌,则当你于本阶段使用【杀】或普通锦囊牌指定其为目标后,可以进行一次判定,若判定的点数为X的倍数,则此牌额外结算一次。",
stardangchen_info: "出牌阶段开始时,你可以令一名其他角色交给你任意张牌,然后你可以弃置X张牌(X为其交给你的牌数)。若你因此弃牌,则当你于本阶段使用【杀】或普通锦囊牌指定其为目标后,可以进行一次判定,若判定的点数为X的倍数,则此牌额外结算一次。",
starjianyu: "翦羽",
starjianyu_info: "锁定技,其他角色在你回合内失去装备区的牌后,你摸一张牌。",
star_wenchou: "星文丑",
Expand Down
3 changes: 2 additions & 1 deletion apps/core/character/tw/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,8 @@ const translates = {
twjieqiu_info: "出牌阶段限一次,你可以选择一名装备区没有废除栏的其他角色,废除其所有装备栏,然后其摸X张牌(X为其废除装备栏前的装备区牌数),直到其恢复所有装备栏前:其弃牌阶段结束时,其恢复等同于其弃置牌数的装备栏;其回合结束时,若其仍有已废除的装备栏,则你可以执行一个额外回合(每轮限一次)。",
twenchou: "恩仇",
twenchou_info: "出牌阶段限一次,你可以观看一名存在废除装备栏的其他角色的手牌并获得其中一张牌,然后你恢复其一个装备栏。",
xia_shie: "史阿",
xia_shie: "侠史阿",
xia_shie_prefix: "侠",
twdengjian: "登剑",
twdengjianx: "剑法",
twdengjian_info: "①其他角色的弃牌阶段结束时,你可以随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。",
Expand Down
56 changes: 26 additions & 30 deletions apps/core/character/xianding/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -573,13 +573,13 @@ const skills = {
}
},
async cost(event, trigger, player) {
let result;
if (event.triggername === "useCardToPlayered") {
const result0 = await player
event.result = await player
.chooseToDiscard({
prompt: get.prompt("dcsbjuzhan"),
prompt: get.prompt(event.skill),
prompt2: `弃置一张手牌,令${get.translation(trigger.card)}额外结算一次`,
position: "h",
chooseonly: true,
ai: card => {
const player = get.player();
const triggerx = get.event().triggerx;
Expand All @@ -597,47 +597,39 @@ const skills = {
})
.set("triggerx", trigger)
.forResult();
result = {
bool: result0.bool,
};
} else {
const result0 = await player
event.result = await player
.chooseCard({
prompt: get.prompt("dcsbjuzhan"),
prompt: get.prompt(event.skill),
prompt2: `将一张手牌当${trigger.card.nature ? get.translation(trigger.card.nature) : ""}【${get.translation(trigger.card.name)}】对${get.translation(trigger.player)}使用`,
position: "h",
filterCard(card, player) {
const trigger = get.event().triggerx;
return player.canUse(get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature }, [card]), trigger.player, false, false);
return player.canUse(get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature, cards: [card] }, [card]), trigger.player, false, false);
},
ai: card => {
const player = get.player();
const triggerx = get.event().triggerx;
const cardx = get.autoViewAs({ name: triggerx.card.name, nature: triggerx.card.nature }, [card]);
const cardx = get.autoViewAs({ name: triggerx.card.name, nature: triggerx.card.nature, cards: [card] }, [card]);
return get.effect(triggerx.player, cardx, player, player);
},
})
.set("triggerx", trigger)
.forResult();
result = {
bool: result0.bool,
cost_data: {
cards: result0.cards,
},
};
}
event.result = result;
},
async content(event, trigger, player) {
const { cards } = event;
if (event.triggername === "useCardToPlayered") {
await player.discard(cards);
trigger.getParent().effectCount++;
game.log(`${get.translation(player)}令${get.translation(trigger.card)}额外结算一次`);
} else {
const cardx = get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature }, event.cost_data.cards);
const cardx = get.autoViewAs({ name: trigger.card.name, nature: trigger.card.nature, cards }, cards);
if (!player.canUse(cardx, trigger.player, false, false)) {
return;
}
await player.useCard(cardx, event.cost_data.cards, trigger.player, false);
await player.useCard(cardx, cards, trigger.player, false);
}
},
},
Expand Down Expand Up @@ -1633,7 +1625,7 @@ const skills = {
if (result?.bool) {
player.line(target);
target.addSkill("dcmingjie_tally");
target.addMark("dcmingjie_tally", 1, false);
//target.addMark("dcmingjie_tally", 1, false);
}
}
}
Expand All @@ -1643,18 +1635,18 @@ const skills = {
charlotte: true,
onremove: true,
marktext: "节",
intro: { content: "防止下#次受到的伤害" },
intro: { content: "防止下次受到的伤害" },
trigger: { player: "damageBegin4" },
filter(event, player) {
return player.hasMark("dcmingjie_tally");
},
//filter(event, player) {
//return player.hasMark("dcmingjie_tally");
//},
forced: true,
async content(event, trigger, player) {
trigger.cancel();
player.removeMark(event.name, 1, false);
if (!player.hasMark(event.name)) {
player.removeSkill(event.name);
}
//player.removeMark(event.name, 1, false);
//if (!player.hasMark(event.name)) {
player.removeSkill(event.name);
//}
},
},
death: {
Expand Down Expand Up @@ -4698,7 +4690,11 @@ const skills = {
return get.type(card) === "basic";
},
ai(card) {
return 6 - get.value(card);
const player = get.player();
if (player.hasCards("hs", "shan")) {
return 6 - get.value(card);
}
return 0;
},
})
.forResult();
Expand Down Expand Up @@ -4927,7 +4923,7 @@ const skills = {
await game.doAsyncInOrder(
[player, target],
async target => {
let cardsx = target.getCards("sha", { name: "sha" });
let cardsx = target.getCards("h", { name: "sha" });
if (cardsx.length) {
const result = await target.modedDiscard({ cards: cardsx, discarder: player }).forResult();
cardsx = result.cards.slice();
Expand Down
2 changes: 1 addition & 1 deletion apps/core/character/xianding/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ const translates = {
tianyun: "天运",
tianyun_info: "①游戏的第一个回合开始前,你从牌堆中获得手牌区内没有的花色的各一张牌。②一名角色的回合开始时,若其座位号等于游戏轮数,则你可观看牌堆顶的X张牌并以任意顺序置于牌堆顶或牌堆底。若你将所有的牌均置于了牌堆底,则你可以令一名角色摸X张牌,然后失去1点体力。(X为你手牌中包含的花色数)",
wfyuyan: "预言",
wfyuyan_info: "每轮开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得〖奋音〗直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。",
wfyuyan_info: `每轮开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得${get.poptip("refenyin")}直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。`,
re_fengfangnv: "冯妤",
tiqi: "涕泣",
tiqi_info: "其他角色的摸牌阶段结束时/被跳过后,若其于本阶段内因摸牌而得到的牌数X不等于2,则你可以摸|X-2|张牌,并可令其本回合的手牌上限±|X-2|。",
Expand Down
14 changes: 8 additions & 6 deletions apps/core/character/yijiang/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -15016,19 +15016,21 @@ const skills = {
target: trigger.source,
position: "e",
ai(button) {
if (att <= 0) {
if (get.event().att <= 0) {
return get.equipValue(button.link);
}
return 0;
},
})
.set("chooseonly", true)
.set("att", att)
.forResult();

event.result = {
bool: result.bool,
cards: result.links,
};
if (result?.bool && result.links?.length) {
event.result = {
bool: true,
cards: result.links,
};
}
},
logTarget: "source",
async content(event, trigger, player) {
Expand Down
Binary file removed apps/core/image/character/hm_yudu.jpg
Binary file not shown.
Binary file added apps/core/image/character/tw_dm_zhangliang.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading