mirror of
https://github.com/Shu-Ying/noname-shuying.git
synced 2026-10-18 05:10:00 +08:00
fixed # 修复部分天书乱斗的问题
This commit is contained in:
@@ -17,11 +17,18 @@ const dynamicTranslates = {
|
||||
},
|
||||
|
||||
//司马懿
|
||||
langgu_shuying(player, skill) {
|
||||
const condition = getTianshuDifficulty() == "nightmare"
|
||||
? "黑色" : "黑桃";
|
||||
|
||||
return "锁定技,每回合限一次,当你获得其他角色的牌时,进行一次判定:"
|
||||
+ `若结果为${condition},随机弃置其1张手牌,且视为此技能本回合未发动过。`;
|
||||
},
|
||||
yuanlv_shuying(player, skill) {
|
||||
const difficulty = getTianshuDifficulty();
|
||||
|
||||
if (difficulty == "nightmare") {
|
||||
return "当你使用锦囊牌对敌方角色造成伤害时,你可以防止该伤害,改为摸一张牌且该敌方角色对你造成过1点伤害。";
|
||||
return "当你使用锦囊牌对敌方角色造成伤害时,你可以防止该伤害,改为摸一张牌且视为受到该敌方角色造成的1点伤害。";
|
||||
}
|
||||
|
||||
return "当你使用锦囊牌对敌方角色造成伤害时,你可以防止该伤害,改为摸一张牌且该敌方角色对你造成1点伤害。";
|
||||
@@ -66,18 +73,29 @@ const dynamicTranslates = {
|
||||
return `锁定技,回合开始时,你摸X张牌并对至多X名角色造成1点伤害,然后你失去1点体力。X为你已损失体力且最大为${num}。`
|
||||
},
|
||||
|
||||
qubu_shuying(player, skill) {
|
||||
const condition = getTianshuDifficulty() == "nightmare"
|
||||
? "黑色" : "黑桃";
|
||||
|
||||
return "锁定技,当友方角色使用【杀】指定目标时,进行一次判定:"
|
||||
+ `若结果为${condition},你对此【杀】的所有目标造成1点伤害。`;
|
||||
},
|
||||
|
||||
//袁术
|
||||
wangzun_shuying(player, skill) {
|
||||
const num =
|
||||
getTianshuDifficulty() == "nightmare" ? 2 : 1;
|
||||
const condition = getTianshuDifficulty() == "nightmare"
|
||||
? "对你造成过伤害" : "对你造成的伤害数超过1点";
|
||||
|
||||
return `锁定技,其他敌方角色的结束阶段,若其本回合:1.没有对你造成伤害,则其弃置${num}张牌;2.对你造成的伤害数超过1点,则你对其造成1点伤害。`;
|
||||
return `锁定技,其他敌方角色的结束阶段,若其本回合:1.没有对你造成伤害,则其弃置${num}张牌;2.${condition},则你对其造成1点伤害。`;
|
||||
},
|
||||
duoxi_shuying(player, skill) {
|
||||
const num =
|
||||
getTianshuDifficulty() == "nightmare" ? 2 : 1;
|
||||
if (getTianshuDifficulty() == "nightmare") {
|
||||
return "其他角色的摸牌阶段,你可以失去1点体力,改为你摸2张牌。";
|
||||
}
|
||||
|
||||
return `其他角色的摸牌阶段,你可以失去1点体力,改为你与其各摸${num}张牌。`;
|
||||
return "其他角色的摸牌阶段,你可以失去1点体力,改为你与其各摸1张牌。";
|
||||
},
|
||||
|
||||
//张角
|
||||
@@ -88,6 +106,12 @@ const dynamicTranslates = {
|
||||
|
||||
return "其他角色使用【杀】指定除你外的角色时,若你在其攻击范围内,你可以将一张手牌置于牌堆顶,取消所有目标,然后若此【杀】不为黑色,你成为目标。";
|
||||
},
|
||||
yinlei_shuying(player, skill) {
|
||||
const condition = getTianshuDifficulty() == "nightmare"
|
||||
? "失去牌" : "于回合外失去牌";
|
||||
|
||||
return `锁定技,当你${condition}时,随机横置一名角色。`;
|
||||
},
|
||||
};
|
||||
|
||||
export default dynamicTranslates;
|
||||
|
||||
@@ -114,14 +114,19 @@ const skills = {
|
||||
|
||||
if (difficulty == "nightmare") {
|
||||
for (const target of enemies) {
|
||||
const card = target.getGainableCards(player, "e").randomGet();
|
||||
if (!card) continue;
|
||||
player.line(target);
|
||||
await player.gainPlayerCard({ target, position: "e", forced: true });
|
||||
await player.gain(card, target, "give");
|
||||
}
|
||||
}
|
||||
else {
|
||||
const target = enemies.randomGet();
|
||||
if (!target) return;
|
||||
const card = target.getGainableCards(player, "e").randomGet();
|
||||
if (!card) return;
|
||||
player.line(target);
|
||||
await player.gainPlayerCard({ target, position: "e", forced: true });
|
||||
await player.gain(card, target, "give");
|
||||
}
|
||||
},
|
||||
ai: {
|
||||
@@ -157,18 +162,20 @@ const skills = {
|
||||
audio: "ext:术樱包/pve/audio/skill/青青子衿:1",
|
||||
trigger: { player: "damageEnd" },
|
||||
logTarget: "source",
|
||||
getIndex(event) {
|
||||
return event.num;
|
||||
},
|
||||
filter(event, player) {
|
||||
return (
|
||||
event.num > 0 &&
|
||||
event.source?.isIn() &&
|
||||
player.getEnemies(null, false).includes(event.source) &&
|
||||
event.source.hasGainableCards(player, "he")
|
||||
event.source.hasGainableCards(player, event.source == player ? "e" : "he")
|
||||
);
|
||||
},
|
||||
async content(event, trigger, player) {
|
||||
await player.gainPlayerCard({
|
||||
target: trigger.source,
|
||||
position: "he",
|
||||
position: trigger.source == player ? "e" : "he",
|
||||
forced: true,
|
||||
});
|
||||
},
|
||||
@@ -241,7 +248,6 @@ const skills = {
|
||||
return game.hasPlayer(current => {
|
||||
return (
|
||||
current != player &&
|
||||
player.getEnemies(null, false).includes(current) &&
|
||||
event.getl?.(current)?.cards2?.length
|
||||
);
|
||||
});
|
||||
@@ -250,20 +256,31 @@ const skills = {
|
||||
const source = game.findPlayer(current => {
|
||||
return (
|
||||
current != player &&
|
||||
player.getEnemies(null, false).includes(current) &&
|
||||
trigger.getl?.(current)?.cards2?.length
|
||||
);
|
||||
});
|
||||
if (!source) return;
|
||||
|
||||
player.addTempSkill("langgu_shuying_used", "roundStart");
|
||||
player.addTempSkill("langgu_shuying_used", {
|
||||
global: "phaseAfter",
|
||||
});
|
||||
|
||||
const result = await player.judge(card => get.suit(card) == "spade" ? 2 : 0).forResult();
|
||||
if (result.bool && source.isIn() && source.countDiscardableCards(player, "h") > 0) {
|
||||
const isNightmare = getTianshuDifficulty() == "nightmare";
|
||||
const result = await player.judge(card => {
|
||||
const success = isNightmare
|
||||
? get.color(card) == "black"
|
||||
: get.suit(card) == "spade";
|
||||
return success ? 2 : 0;
|
||||
}).forResult();
|
||||
if (result.bool) {
|
||||
player.removeSkill("langgu_shuying_used");
|
||||
if (!source.isIn()) return;
|
||||
const card = source.getDiscardableCards(player, "h").randomGet();
|
||||
if (!card) return;
|
||||
player.line(source);
|
||||
const card = source.getCards("h").randomGet();
|
||||
await source.discard(card);
|
||||
const discardEvent = source.discard(card);
|
||||
discardEvent.discarder = player;
|
||||
await discardEvent;
|
||||
}
|
||||
},
|
||||
subSkill: {
|
||||
@@ -603,31 +620,30 @@ const skills = {
|
||||
trigger: { player: "phaseBegin" },
|
||||
forced: true,
|
||||
locked: true,
|
||||
filter(event, player) {
|
||||
return player.getDamagedHp() > 0;
|
||||
},
|
||||
async content(event, trigger, player) {
|
||||
let maxNum = 3;
|
||||
if (getTianshuDifficulty() == "hard") maxNum = 4;
|
||||
if (getTianshuDifficulty() == "nightmare") maxNum = 5;
|
||||
|
||||
const num = Math.min(maxNum, player.getDamagedHp());
|
||||
await player.draw(num);
|
||||
if (num > 0) {
|
||||
await player.draw(num);
|
||||
|
||||
const result = await player
|
||||
.chooseTarget(`对至多${get.cnNumber(num)}名角色造成1点伤害`, [1, num], (card, player, target) => {
|
||||
return target.isIn() && player.getEnemies(null, false).includes(target);
|
||||
})
|
||||
.set("ai", target => {
|
||||
const player = get.player();
|
||||
return get.damageEffect(target, player, player);
|
||||
})
|
||||
.forResult();
|
||||
const result = await player
|
||||
.chooseTarget(`对至多${get.cnNumber(num)}名角色造成1点伤害`, [1, num], (card, player, target) => {
|
||||
return target.isIn();
|
||||
})
|
||||
.set("ai", target => {
|
||||
const player = get.player();
|
||||
return get.damageEffect(target, player, player);
|
||||
})
|
||||
.forResult();
|
||||
|
||||
if (result.bool) {
|
||||
for (const target of result.targets) {
|
||||
player.line(target);
|
||||
await target.damage(1, player);
|
||||
if (result.bool) {
|
||||
for (const target of result.targets) {
|
||||
player.line(target);
|
||||
await target.damage(1, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -645,6 +661,7 @@ const skills = {
|
||||
locked: true,
|
||||
filter(event, player) {
|
||||
return (
|
||||
event.isFirstTarget &&
|
||||
event.card.name == "sha" &&
|
||||
event.player?.isIn() &&
|
||||
!player.getEnemies(null, false).includes(event.player) &&
|
||||
@@ -652,8 +669,14 @@ const skills = {
|
||||
);
|
||||
},
|
||||
async content(event, trigger, player) {
|
||||
const isNightmare = getTianshuDifficulty() == "nightmare";
|
||||
const result = await player
|
||||
.judge(card => get.color(card) == "black" ? 2 : -1)
|
||||
.judge(card => {
|
||||
const success = isNightmare
|
||||
? get.color(card) == "black"
|
||||
: get.suit(card) == "spade";
|
||||
return success ? 2 : -1;
|
||||
})
|
||||
.set("judge2", result => result.bool)
|
||||
.forResult();
|
||||
|
||||
@@ -753,7 +776,7 @@ const skills = {
|
||||
return sum;
|
||||
}, 0);
|
||||
|
||||
if (damageNum > 1) return true;
|
||||
if (damageNum > (getTianshuDifficulty() == "nightmare" ? 0 : 1)) return true;
|
||||
|
||||
return (
|
||||
damageNum == 0 &&
|
||||
@@ -784,7 +807,7 @@ const skills = {
|
||||
if (num > 0) {
|
||||
await target.chooseToDiscard(num, "he", true);
|
||||
}
|
||||
} else if (damageNum > 1 && target.isIn()) {
|
||||
} else if (damageNum > (getTianshuDifficulty() == "nightmare" ? 0 : 1) && target.isIn()) {
|
||||
await target.damage(1, player);
|
||||
}
|
||||
},
|
||||
@@ -807,11 +830,14 @@ const skills = {
|
||||
async cost(event, trigger, player) {
|
||||
const num =
|
||||
getTianshuDifficulty() == "nightmare" ? 2 : 1;
|
||||
const drawText = getTianshuDifficulty() == "nightmare"
|
||||
? `你摸${get.cnNumber(num)}张牌`
|
||||
: `你与其各摸${get.cnNumber(num)}张牌`;
|
||||
|
||||
event.result = await player
|
||||
.chooseBool(
|
||||
get.prompt(event.skill, trigger.player),
|
||||
`失去1点体力,将${get.translation(trigger.player)}的摸牌阶段改为你与其各摸${get.cnNumber(num)}张牌`
|
||||
`失去1点体力,将${get.translation(trigger.player)}的摸牌阶段改为${drawText}`
|
||||
)
|
||||
.set("ai", () => {
|
||||
const player = get.player();
|
||||
@@ -823,10 +849,12 @@ const skills = {
|
||||
: 1;
|
||||
|
||||
if (player.hp <= 1) return false;
|
||||
|
||||
const isEnemy = player
|
||||
.getEnemies(null, false)
|
||||
.includes(target);
|
||||
if (getTianshuDifficulty() == "nightmare") {
|
||||
return isEnemy && player.hp > 2;
|
||||
}
|
||||
|
||||
// 避免额外增加敌方摸牌,或削减友方原本的摸牌数
|
||||
if (isEnemy && trigger.num < num) return false;
|
||||
@@ -846,7 +874,8 @@ const skills = {
|
||||
|
||||
await player.loseHp();
|
||||
|
||||
const targets = [player, target].filter(
|
||||
const targets = (getTianshuDifficulty() == "nightmare"
|
||||
? [player] : [player, target]).filter(
|
||||
current => current.isIn()
|
||||
);
|
||||
if (targets.length) {
|
||||
@@ -972,12 +1001,8 @@ const skills = {
|
||||
audio: "ext:术樱包/pve/audio/skill/青青子衿:1",
|
||||
trigger: { player: ["useCard", "respond"] },
|
||||
filter(event, player) {
|
||||
return (
|
||||
event.card.name == "shan" &&
|
||||
player
|
||||
.getEnemies(null, false)
|
||||
.some(target => target.isIn())
|
||||
);
|
||||
return event.card.name == "shan"
|
||||
&& game.hasPlayer(target => target != player && target.isIn());
|
||||
},
|
||||
line: "thunder",
|
||||
async cost(event, trigger, player) {
|
||||
@@ -985,12 +1010,7 @@ const skills = {
|
||||
.chooseTarget(
|
||||
get.prompt2(event.skill),
|
||||
(card, player, target) => {
|
||||
return (
|
||||
target != player &&
|
||||
player
|
||||
.getEnemies(null, false)
|
||||
.includes(target)
|
||||
);
|
||||
return target != player;
|
||||
}
|
||||
)
|
||||
.set("ai", target => {
|
||||
@@ -1046,16 +1066,12 @@ const skills = {
|
||||
!event.targets?.length ||
|
||||
event.targets.includes(player) ||
|
||||
!source.inRange(player) ||
|
||||
player.countCards("h") == 0 ||
|
||||
!player.getEnemies(null, false).includes(source)
|
||||
player.countCards("h") == 0
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const enemies = player.getEnemies(null, false);
|
||||
return event.targets.some(target => {
|
||||
return target.isIn() && !enemies.includes(target);
|
||||
});
|
||||
return true;
|
||||
},
|
||||
async cost(event, trigger, player) {
|
||||
event.result = await player
|
||||
@@ -1144,7 +1160,7 @@ const skills = {
|
||||
filter(event, player) {
|
||||
if (
|
||||
getTianshuDifficulty() == "normal" ||
|
||||
_status.currentPhase == player
|
||||
(getTianshuDifficulty() != "nightmare" && _status.currentPhase == player)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ const translates = {
|
||||
guicai_shuying: "鬼才",
|
||||
guicai_shuying_info: "当一名角色的判定牌生效前,你可以打出一张牌代替之。",
|
||||
langgu_shuying: "狼顾",
|
||||
langgu_shuying_info: " 锁定技,每回合限一次,当你获得其他角色的牌时,进行一次判定:若结果为黑桃,随机弃置其1张手牌,且视为此技能本回合未发动过。",
|
||||
langgu_shuying_info: "锁定技,每回合限一次,当你获得其他角色的牌时,进行一次判定:若结果为黑桃,随机弃置其1张手牌,且视为此技能本回合未发动过。",
|
||||
yuanlv_shuying: "远虑",
|
||||
yuanlv_shuying_info: "当你使用锦囊牌对敌方角色造成伤害时,你可以防止该伤害,改为摸一张牌且该敌方角色对你造成1点伤害。",
|
||||
|
||||
@@ -39,7 +39,7 @@ const translates = {
|
||||
yongsi_shuying: "庸肆",
|
||||
yongsi_shuying_info: "锁定技,摸牌阶段,你改为摸X张牌(X为存活势力数);弃牌阶段,若你本回合:1.没有造成伤害,将手牌摸至当前体力值;2.造成伤害数超过1点,本回合手牌上限改为已损失体力值。",
|
||||
wangzun_shuying: "妄尊",
|
||||
wangzun_shuying_info: "锁定技,其他角色其他敌方角色的结束阶段,若其本回合:1.没有对你造成伤害,则其弃置1张牌;2.对你造成伤害数超过1点,则你对其造成1点伤害。",
|
||||
wangzun_shuying_info: "锁定技,其他敌方角色的结束阶段,若其本回合:1.没有对你造成伤害,则其弃置1张牌;2.对你造成伤害数超过1点,则你对其造成1点伤害。",
|
||||
duoxi_shuying: "夺玺",
|
||||
duoxi_shuying_info: "其他角色的摸牌阶段,你可以失去1点体力改为你与其各摸一张牌。",
|
||||
|
||||
@@ -51,7 +51,7 @@ const translates = {
|
||||
zhuzheng_shuying: "谏征",
|
||||
zhuzheng_shuying_info: "其他角色使用【杀】指定除你外的角色时,若你在其攻击范围内,你可以将一张手牌置于牌堆顶,取消所有目标,然后若此【杀】不为黑色,你成为目标。",
|
||||
yinlei_shuying: "引雷",
|
||||
yinlei_shuying_info: "锁定技,当你失去牌时,随机横置一名角色。",
|
||||
yinlei_shuying_info: "锁定技,当你于回合外失去牌时,随机横置一名角色。",
|
||||
};
|
||||
|
||||
export default translates;
|
||||
|
||||
@@ -615,7 +615,7 @@ const skills = {
|
||||
}
|
||||
|
||||
if (game.roundNumber < 3 && target.countGainableCards(player, "he") > 0) {
|
||||
const cards = target.getCards("he").randomGets(Math.min(num, target.countCards("he")));
|
||||
const cards = target.getGainableCards(player, "he").randomGets(num);
|
||||
await player.gain(cards, target, "giveAuto");
|
||||
}
|
||||
|
||||
@@ -712,7 +712,7 @@ const skills = {
|
||||
const gained = [];
|
||||
|
||||
for (const target of targets) {
|
||||
const cards = target.getCards("h").randomGets(Math.min(num, target.countCards("h")));
|
||||
const cards = target.getGainableCards(player, "h").randomGets(num);
|
||||
if (cards.length) {
|
||||
player.line(target);
|
||||
await player.gain(cards, target, "giveAuto");
|
||||
|
||||
Reference in New Issue
Block a user