update version 2.0.1.1

This commit is contained in:
2026-08-29 03:10:14 +08:00
parent 441b4de298
commit c3e83a700a
21 changed files with 977 additions and 173 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+8
View File
@@ -7,6 +7,14 @@ const characters = {
img: "extension/术樱包/character/images/zuoci_shuying.jpg",
dieAudios: ["ext:术樱包/character/audio/zuoci/zuoci_shuying.mp3"]
},
ganning_shuying: {
sex: "male",
group: "wu",
hp: 4,
skills: ["qixi_shuying", "fenwei_shuying"],
img: "extension/术樱包/character/images/ganning_shuying.jpg",
dieAudios: ["ext:术樱包/character/audio/ganning/ganning_shuying.mp3"]
},
};
export default characters;
+9 -1
View File
@@ -1,3 +1,11 @@
const dynamicTranslates = {};
const dynamicTranslates = {
qixi_shuying(player, skill) {
if (player?.storage.fenwei_shuying_upgraded) {
return "你可以将一张黑色牌当【过河拆桥】使用。<br>你使用【过河拆桥】结束后,若其弃置过一张牌,你记录该牌的花色。<br>每回合各限一次,若此次花色与上次花色不同,你可以消耗1点蓄力点并选择一项:①摸一张牌。②若该牌仍在弃牌堆中,获得之。";
}
return "你可以将一张黑色牌当【过河拆桥】使用。<br>你使用【过河拆桥】结束后,若其弃置过一张牌,你记录该牌的花色。<br>每回合限一次,若此次花色与上次花色不同,你可以消耗1点蓄力点并选择一项:①摸一张牌。②若该牌仍在弃牌堆中,获得之。";
},
};
export default dynamicTranslates;
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

+438
View File
@@ -383,6 +383,444 @@ const skills = {
},
},
},
qixi_shuying: {
audio: "ext:术樱包/character/audio/ganning:2",
enable: "chooseToUse",
position: "hes",
filterCard(card) {
return get.color(card) == "black";
},
viewAs: {
name: "guohe",
},
viewAsFilter(player) {
return player.countCards("hes", card => get.color(card) == "black") > 0;
},
prompt: "将一张黑色牌当【过河拆桥】使用",
check(card) {
return 5 - get.value(card);
},
mark: true,
intro: {
content(storage, player) {
let str = storage
? `当前记录花色:${get.translation(storage)}`
: "尚未记录花色";
if (player.storage.fenwei_shuying_upgraded) {
str += "<br>〖奋威〗已升级:摸牌与获得弃牌每回合各限一次";
}
return str;
},
},
group: [
"qixi_shuying_capture",
"qixi_shuying_effect",
],
subSkill: {
capture: {
charlotte: true,
forced: true,
silent: true,
popup: false,
trigger: {
global: ["loseAfter", "loseAsyncAfter"],
},
filter(event, player) {
if (
event.type != "discard" ||
event.getlx === false ||
event.position != ui.discardPile
) {
return false;
}
const useEvent = event.getParent("useCard");
return (
useEvent?.player == player &&
get.name(useEvent.card) == "guohe" &&
event.cards?.length > 0
);
},
content(event, trigger, player) {
const useEvent = trigger.getParent("useCard");
if (!useEvent.qixi_shuying_discarded) {
useEvent.qixi_shuying_discarded = [];
}
useEvent.qixi_shuying_discarded.addArray(trigger.cards);
},
},
effect: {
charlotte: true,
forced: true,
popup: false,
trigger: {
player: "useCardAfter",
},
filter(event, player) {
return (
get.name(event.card) == "guohe" &&
event.qixi_shuying_discarded?.length > 0
);
},
async content(event, trigger, player) {
const cards = trigger.qixi_shuying_discarded;
const card = cards[cards.length - 1];
delete trigger.qixi_shuying_discarded;
if (!card) {
return;
}
const suit = get.suit(card, false);
const previousSuit = player.storage.qixi_shuying;
player.storage.qixi_shuying = suit;
player.syncStorage("qixi_shuying");
player.markSkill("qixi_shuying");
if (
!previousSuit ||
previousSuit == suit ||
player.countCharge() <= 0
) {
return;
}
const upgraded = !!player.storage.fenwei_shuying_upgraded;
const turn = game.phaseNumber;
let usage = player.storage.qixi_shuying_usage;
if (!usage || usage.turn != turn) {
usage = {
turn,
options: [],
};
player.storage.qixi_shuying_usage = usage;
player.syncStorage("qixi_shuying_usage");
}
const usedDraw = usage.options.includes("draw");
const usedGain = usage.options.includes("gain");
const canDraw = upgraded
? !usedDraw
: !usedDraw && !usedGain;
const canGain =
get.position(card, true) == "d" &&
(upgraded
? !usedGain
: !usedDraw && !usedGain);
if (!canDraw && !canGain) {
return;
}
const controls = [];
if (canDraw) {
controls.push("摸一张牌");
}
if (canGain) {
controls.push("获得弃置的牌");
}
controls.push("cancel2");
let choice = "cancel2";
if (canGain && get.value(card, player) > 2) {
choice = "获得弃置的牌";
} else if (canDraw) {
choice = "摸一张牌";
}
const result = await player
.chooseControl(controls)
.set(
"prompt",
`〖奇袭〗记录花色由${get.translation(previousSuit)}变为${get.translation(suit)}`,
)
.set(
"prompt2",
`你可以消耗1点蓄力点,摸一张牌或获得此次弃置的${get.translation(card)}`,
)
.set("choice", choice)
.set("ai", () => get.event().choice)
.forResult();
if (
result.control != "摸一张牌" &&
result.control != "获得弃置的牌"
) {
return;
}
if (player.countCharge() <= 0) {
return;
}
// 先记录具体选项,再扣除蓄力,避免扣除蓄力触发奋威升级时发生嵌套重入。
const option = result.control == "摸一张牌" ? "draw" : "gain";
if (!usage.options.includes(option)) {
usage.options.push(option);
}
player.syncStorage("qixi_shuying_usage");
player.removeCharge(1);
if (result.control == "摸一张牌") {
await player.draw();
return;
}
if (get.position(card, true) == "d") {
await player.gain(card, "gain2");
}
},
},
},
ai: {
order: 9,
result: {
player: 1,
},
},
},
fenwei_shuying: {
audio: "ext:术樱包/character/audio/ganning:2",
chargeSkill: 8,
beginMarkCount: 2,
trigger: {
global: "useCardToPlayered",
},
filter(event, player) {
return (
event.isFirstTarget &&
get.type(event.card) == "trick" &&
event.targets?.length >= 2 &&
player.countCharge() > 0 &&
!player.hasSkill("fenwei_shuying_used")
);
},
async cost(event, trigger, player) {
const max = Math.min(
player.countCharge(),
trigger.targets.length,
);
event.result = await player
.chooseTarget(
get.prompt(event.skill),
`消耗任意点蓄力点,令${get.translation(trigger.card)}对等量名目标角色无效`,
[1, max],
(card, player, target) => {
return get.event().targets.includes(target);
},
)
.set("targets", trigger.targets)
.set("ai", target => {
const player = get.player();
const trigger = get.event().getTrigger();
return -get.effect(
target,
trigger.card,
trigger.player,
player,
);
})
.forResult();
},
async content(event, trigger, player) {
const targets = event.targets;
const num = targets.length;
player.line(targets, "green");
player.removeCharge(num);
player.addTempSkill(
"fenwei_shuying_used",
{ global: "phaseAfter" },
);
trigger.getParent().excluded.addArray(targets);
},
group: [
"fenwei_shuying_init",
"fenwei_shuying_charge",
"fenwei_shuying_choice",
],
subSkill: {
init: {
charlotte: true,
forced: true,
locked: false,
audio: false,
trigger: {
player: "enterGame",
global: "phaseBefore",
},
filter(event, player) {
if (!player.countCharge(true)) {
return false;
}
return event.name != "phase" || game.phaseNumber == 0;
},
async content(event, trigger, player) {
const num = get.info("fenwei_shuying").beginMarkCount;
player.addCharge(num);
await game.delayx();
},
},
charge: {
charlotte: true,
forced: true,
locked: true,
audio: false,
popup: false,
usable: 1,
trigger: {
global: [
"loseAfter",
"loseAsyncAfter",
"cardsDiscardAfter",
],
},
filter(event, player) {
if (!player.countCharge(true)) {
return false;
}
if (event.name.indexOf("lose") == 0) {
if (
event.getlx === false ||
event.position != ui.discardPile
) {
return false;
}
} else {
const parent = event.getParent();
if (parent?.relatedEvent?.name == "useCard") {
return false;
}
}
return event.cards?.length > 0;
},
async content(event, trigger, player) {
player.addCharge(1);
await game.delayx();
},
},
choice: {
charlotte: true,
audio: false,
trigger: {
player: "removeMark",
},
filter(event, player) {
const num = Math.ceil(game.countPlayer() / 2);
return (
event.markName == "charge" &&
event.num >= num &&
!player.hasSkill("fenwei_shuying_choice_used") &&
(
!player.storage.fenwei_shuying_upgraded ||
player.hasUseTarget({ name: "guohe", isCard: true })
)
);
},
async cost(event, trigger, player) {
const num = Math.ceil(game.countPlayer() / 2);
const canUse = player.hasUseTarget({
name: "guohe",
isCard: true,
});
if (player.storage.fenwei_shuying_upgraded) {
const result = await player
.chooseBool(
get.prompt(event.skill),
`你本次消耗了至少${num}点蓄力点,是否视为使用一张【过河拆桥】?`,
)
.set("ai", () => true)
.forResult();
event.result = {
bool: result.bool,
cost_data: "使用过河拆桥",
};
return;
}
const controls = [];
if (canUse) {
controls.push("使用过河拆桥");
}
controls.push("升级奇袭", "cancel2");
const result = await player
.chooseControl(controls)
.set(
"prompt",
`〖奋威〗:你本次消耗了至少${num}点蓄力点`,
)
.set("choice", "升级奇袭")
.set("ai", () => get.event().choice)
.forResult();
if (
result.control == "使用过河拆桥" ||
result.control == "升级奇袭"
) {
event.result = {
bool: true,
cost_data: result.control,
};
}
},
async content(event, trigger, player) {
player.addTempSkill(
"fenwei_shuying_choice_used",
{ global: "phaseAfter" },
);
if (event.cost_data == "升级奇袭") {
player.storage.fenwei_shuying_upgraded = true;
player.syncStorage("fenwei_shuying_upgraded");
game.log(player, "升级了技能", "#g【奇袭】");
player.popup("奇袭·改", "wood");
if (player.hasSkill("qixi_shuying")) {
player.markSkill("qixi_shuying");
}
await game.delayx();
return;
}
if (player.hasUseTarget({ name: "guohe", isCard: true })) {
await player.chooseUseTarget({
prompt: "〖奋威〗:视为使用一张【过河拆桥】",
card: get.autoViewAs({ name: "guohe", isCard: true }),
forced: true,
});
}
},
},
used: {
charlotte: true,
},
choice_used: {
charlotte: true,
},
},
ai: {
expose: 0.2,
threaten: 1.4,
},
},
};
export default skills;
+6
View File
@@ -6,6 +6,12 @@ const translates = {
xinsheng_shuying_info: "若你拥有技能〖化身〗,当你受到伤害后,你可以选择一项:①获得一张新化身牌;②更换所展示的化身牌。",
jihun_shuying: "羁魂",
jihun_shuying_info: "若你拥有技能〖化身〗,当你更换所展示的化身牌或技能时,保留上次声明的技能,直至该技能下次触发、再次更换所展示的化身牌或技能、重铸该技能对应的化身牌。",
ganning_shuying: "术甘宁",
qixi_shuying: "奇袭",
qixi_shuying_info: "你可以将一张黑色牌当【过河拆桥】使用。<br>你使用【过河拆桥】结束后,若其弃置过一张牌,你记录该牌的花色。<br>每回合限一次,若此次花色与上次花色不同,你可以消耗1点蓄力点并选择一项:①摸一张牌。②若该牌仍在弃牌堆中,获得之。",
fenwei_shuying: "奋威",
fenwei_shuying_info: "蓄力技(2/8)每回合各限一次:①当一名角色使用的锦囊牌指定了至少两名角色为目标时,你可以消耗任意点蓄力点并选择其中等量名目标角色,令此牌对这些角色无效。②当有牌不因使用而进入弃牌堆后,你获得1点蓄力点。③当你一次性消耗至少X点蓄力点后(X为当前存活角色数的一半,向上取整),你可以选择一项:⒈视为使用一张【过河拆桥】。⒉升级〖奇袭〗",
};
export default translates;