diff --git a/character/huicui.js b/character/huicui.js
index 26f194acd..02e1423d9 100644
--- a/character/huicui.js
+++ b/character/huicui.js
@@ -4366,66 +4366,56 @@ game.import("character", function () {
//裴元绍
dcmoyu: {
audio: 2,
- init: () => {
+ init() {
game.addGlobalSkill("dcmoyu_ai");
},
- onremove: () => {
- if (!game.hasPlayer((i) => i.hasSkill("dcmoyu"), true))
- game.removeGlobalSkill("dcmoyu_ai");
+ onremove() {
+ if (!game.hasPlayer(i => i.hasSkill("dcmoyu"), true)) game.removeGlobalSkill("dcmoyu_ai");
},
enable: "phaseUse",
- filter: function (event, player) {
- return (
- !player.hasSkill("dcmoyu_ban") &&
- game.hasPlayer((current) => lib.skill.dcmoyu.filterTarget(null, player, current))
- );
+ filter(event, player) {
+ return game.hasPlayer((current) => lib.skill.dcmoyu.filterTarget(null, player, current));
},
- filterTarget: function (card, player, target) {
- return (
- player != target &&
- !player.getStorage("dcmoyu_clear").includes(target) &&
- target.countGainableCards(player, "hej")
- );
+ filterTarget(card, player, target) {
+ return player != target && !player.getStorage("dcmoyu_clear").includes(target) && target.countGainableCards(player, "hej");
},
- content: function () {
- "step 0";
+ async content(event, trigger, player) {
+ const target = event.target;
player.addTempSkill("dcmoyu_clear");
player.markAuto("dcmoyu_clear", [target]);
- player.gainPlayerCard(target, "hej", true);
- "step 1";
- var num = player.getStorage("dcmoyu_clear").length;
- target
- .chooseToUse(function (card, player, event) {
- if (get.name(card) != "sha") return false;
- return lib.filter.filterCard.apply(this, arguments);
- }, "是否对" +
- get.translation(player) +
- "使用一张无距离限制的【杀】(伤害基数为" +
- num +
- ")?")
+ await player.gainPlayerCard(target, "hej", true, 1 + player.hasSkill("dcmoyu_add"));
+ player.removeSkill("dcmoyu_add");
+ const num = player.getStorage("dcmoyu_clear").length;
+ const result = await target
+ .chooseToUse(
+ function (card, player, event) {
+ if (get.name(card) != "sha") return false;
+ return lib.filter.filterCard.apply(this, arguments);
+ },
+ "是否对" + get.translation(player) + "使用一张无距离限制的【杀】?"
+ )
.set("targetRequired", true)
.set("complexSelect", true)
.set("filterTarget", function (card, player, target) {
- if (
- target != _status.event.sourcex &&
- !ui.selected.targets.includes(_status.event.sourcex)
- )
- return false;
+ if (target != _status.event.sourcex && !ui.selected.targets.includes(_status.event.sourcex)) return false;
return lib.filter.targetEnabled.apply(this, arguments);
})
.set("sourcex", player)
.set("num", num)
- .set("oncard", (card) => {
+ .set("oncard", card => {
_status.event.baseDamage = _status.event.getParent().num;
- });
- "step 2";
+ })
+ .forResult();
if (result.bool) {
if (
- player.hasHistory("damage", (evt) => {
+ player.hasHistory("damage", evt => {
return evt.card && evt.card.name == "sha" && evt.getParent(4) == event;
})
- )
- player.addTempSkill("dcmoyu_ban");
+ ) {
+ player.tempBanSkill("dcmoyu");
+ } else {
+ player.addTempSkill("dcmoyu_add", "phaseChange");
+ }
}
},
subSkill: {
@@ -4439,6 +4429,12 @@ game.import("character", function () {
marktext: "欲",
intro: { content: "偷马贼被反打了!" },
},
+ add: {
+ charlotte: true,
+ mark: true,
+ marktext: "欲",
+ intro: { content: "欲望加速,下次抢两张!" },
+ },
ai: {
trigger: { player: "dieAfter" },
filter: () => {
@@ -4516,7 +4512,167 @@ game.import("character", function () {
savable = savable(card, player, player);
return savable;
}) <=
- player.getStorage("dcmoyu_clear").length + 1
+ 1
+ )
+ return 0;
+ return eff;
+ },
+ },
+ },
+ },
+ oldmoyu: {
+ audio: "dcmoyu",
+ init: () => {
+ game.addGlobalSkill("oldmoyu_ai");
+ },
+ onremove: () => {
+ if (!game.hasPlayer((i) => i.hasSkill("oldmoyu"), true))
+ game.removeGlobalSkill("oldmoyu_ai");
+ },
+ enable: "phaseUse",
+ filter: function (event, player) {
+ return (
+ !player.hasSkill("oldmoyu_ban") &&
+ game.hasPlayer((current) => lib.skill.oldmoyu.filterTarget(null, player, current))
+ );
+ },
+ filterTarget: function (card, player, target) {
+ return (
+ player != target &&
+ !player.getStorage("oldmoyu_clear").includes(target) &&
+ target.countGainableCards(player, "hej")
+ );
+ },
+ content: function () {
+ "step 0";
+ player.addTempSkill("oldmoyu_clear");
+ player.markAuto("oldmoyu_clear", [target]);
+ player.gainPlayerCard(target, "hej", true);
+ "step 1";
+ var num = player.getStorage("oldmoyu_clear").length;
+ target
+ .chooseToUse(function (card, player, event) {
+ if (get.name(card) != "sha") return false;
+ return lib.filter.filterCard.apply(this, arguments);
+ }, "是否对" +
+ get.translation(player) +
+ "使用一张无距离限制的【杀】(伤害基数为" +
+ num +
+ ")?")
+ .set("targetRequired", true)
+ .set("complexSelect", true)
+ .set("filterTarget", function (card, player, target) {
+ if (
+ target != _status.event.sourcex &&
+ !ui.selected.targets.includes(_status.event.sourcex)
+ )
+ return false;
+ return lib.filter.targetEnabled.apply(this, arguments);
+ })
+ .set("sourcex", player)
+ .set("num", num)
+ .set("oncard", (card) => {
+ _status.event.baseDamage = _status.event.getParent().num;
+ });
+ "step 2";
+ if (result.bool) {
+ if (
+ player.hasHistory("damage", (evt) => {
+ return evt.card && evt.card.name == "sha" && evt.getParent(4) == event;
+ })
+ )
+ player.addTempSkill("oldmoyu_ban");
+ }
+ },
+ subSkill: {
+ clear: {
+ charlotte: true,
+ onremove: true,
+ },
+ ban: {
+ charlotte: true,
+ mark: true,
+ marktext: "欲",
+ intro: { content: "偷马贼被反打了!" },
+ },
+ ai: {
+ trigger: { player: "dieAfter" },
+ filter: () => {
+ return !game.hasPlayer((i) => i.hasSkill("oldmoyu"), true);
+ },
+ silent: true,
+ forceDie: true,
+ content: () => {
+ game.removeGlobalSkill("oldmoyu_ai");
+ },
+ ai: {
+ effect: {
+ target: function (card, player, target, current) {
+ if (get.type(card) == "delay" && current < 0) {
+ var currentx = _status.currentPhase;
+ if (!currentx || !currentx.isIn()) return;
+ var list = game.filterPlayer((current) => {
+ if (current == target) return true;
+ if (!current.hasSkill("oldmoyu")) return false;
+ if (current.hasJudge("lebu")) return false;
+ return get.attitude(current, target) > 0;
+ });
+ list.sortBySeat(currentx);
+ if (list.indexOf(target) != 0) return "zerotarget";
+ }
+ },
+ },
+ },
+ },
+ },
+ ai: {
+ order: 9,
+ threaten: 2.4,
+ result: {
+ target: function (player, target) {
+ var num = get.sgn(get.attitude(player, target));
+ var eff = get.effect(target, { name: "shunshou" }, player, player) * num;
+ if (eff * num > 0) return eff / 10;
+ if (
+ player.hasShan() &&
+ !target.hasSkillTag(
+ "directHit_ai",
+ true,
+ {
+ target: player,
+ card: { name: "sha" },
+ },
+ true
+ )
+ )
+ return eff;
+ if (
+ target.hasSha() &&
+ player.hp +
+ player.countCards("hs", function (card) {
+ var mod2 = game.checkMod(
+ card,
+ player,
+ "unchanged",
+ "cardEnabled2",
+ player
+ );
+ if (mod2 != "unchanged") return mod2;
+ var mod = game.checkMod(
+ card,
+ player,
+ player,
+ "unchanged",
+ "cardSavable",
+ player
+ );
+ if (mod != "unchanged") return mod;
+ var savable = get.info(card).savable;
+ if (typeof savable == "function")
+ savable = savable(card, player, player);
+ return savable;
+ }) <=
+ player.getStorage("oldmoyu_clear").length + 1
)
return 0;
return eff;
@@ -13163,22 +13319,23 @@ game.import("character", function () {
if (result.bool) {
if (!target.countCards("hej")) event.finish();
else {
- event.giver = target;
- event.gainner = player;
- target.choosePlayerCard(
+ // event.giver = target;
+ // event.gainner = player;
+ player.gainPlayerCard(
target,
true,
"hej",
2,
- "交给" + get.translation(player) + "两张牌"
+ "获得" + get.translation(target) + "区域里的两张牌"
);
}
} else if (result.tie) {
delete player.getStat("skill").refenglve;
- event.finish();
+ if (get.position(result.player, true) == "d") player.gain(result.player, "gain2");
+ // event.finish();
} else {
if (get.position(result.player, true) == "d") target.gain(result.player, "gain2");
- event.finish();
+ // event.finish();
/*if(!player.countCards('he')) event.finish();
else{
event.giver=player;
@@ -13187,7 +13344,7 @@ game.import("character", function () {
}*/
}
"step 2";
- if (result.bool) event.giver.give(result.cards, event.gainner);
+ // if (result.bool) event.giver.give(result.cards, event.gainner);
},
ai: {
order: 8,
@@ -13222,7 +13379,7 @@ game.import("character", function () {
event.source &&
event.source == _status.currentPhase &&
event.num == 1 &&
- event.player != event.source &&
+ // event.player != event.source &&
event.player.isIn() &&
player.countCards("he") > 0 &&
event.source
@@ -15766,10 +15923,10 @@ game.import("character", function () {
re_xunchen: "荀谌",
refenglve: "锋略",
refenglve_info:
- "出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,其将区域内的两张牌交给你;若平局,则你令此技能于本阶段内的发动次数上限+1;若你输,其获得你的拼点牌。",
+ "出牌阶段限一次,你可以和一名其他角色进行拼点。若你赢,你获得其区域里的两张牌;若平局,则你获得你的拼点牌且令此技能于本阶段内的发动次数上限+1;若你输,其获得你的拼点牌。",
anyong: "暗涌",
anyong_info:
- "当一名角色于其回合内第一次对另一名其他角色造成伤害后,若伤害值为1,则你可弃置一张牌,并对受伤角色造成1点伤害。",
+ "当一名角色于其回合内第一次造成伤害后,若伤害值为1,则你可弃置一张牌,并对受伤角色造成1点伤害。",
wanniangongzhu: "万年公主",
zhenge: "枕戈",
zhenge_info:
@@ -16070,9 +16227,12 @@ game.import("character", function () {
dcsigong_info:
"其他角色的回合结束时,若其于本回合内使用牌被响应过,你可以将手牌摸至或弃置至1,视为对其使用一张需使用X张【闪】抵消的【杀】,且此【杀】的伤害基数+1(X为你以此法弃置的牌数且至少为1)。当你以此法造成伤害后,该技能于本轮失效。",
peiyuanshao: "裴元绍",
+ oldmoyu: "没欲",
+ oldmoyu_info:
+ "出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张无距离限制的【杀】,且此【杀】伤害基数为X(X为你于本回合发动此技能的次数)。若此【杀】对你造成了伤害,你令此技能于本回合失效。",
dcmoyu: "没欲",
dcmoyu_info:
- "出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张无距离限制的【杀】,且此【杀】伤害基数为X(X为你于本回合发动此技能的次数)。若此【杀】对你造成了伤害,你令此技能于本回合失效。",
+ "出牌阶段每名角色限一次。你可以获得一名其他角色区域里的一张牌,然后其可以对你使用一张无距离限制的【杀】。若此【杀】:未对你造成过伤害,你将此技能于此阶段下次获得的牌数改为两张;对你造成过伤害,你令此技能于本回合失效。",
zhangchu: "张楚",
dcjizhong: "集众",
dcjizhong_info:
diff --git a/character/rank.js b/character/rank.js
index 76252d8b8..1f1147e17 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -143,6 +143,7 @@ window.noname_character_rank = {
"sp_zhenji",
"wu_guanyu",
"clan_zhongyao",
+ "guanyue",
],
a: [
"star_caoren",
@@ -1915,6 +1916,7 @@ window.noname_character_rank = {
"dc_xujing",
"caoxian",
"wu_guanyu",
+ "guanyue",
],
epic: [
"clan_zhongyao",
diff --git a/character/sp.js b/character/sp.js
index 9c3eaff09..3a22bab4a 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -31,9 +31,6 @@ game.import("character", function () {
ol_mengda(mode) {
return mode !== "guozhan";
},
- ol_mengda(mode) {
- return mode !== "guozhan";
- },
},
character: {
sp_sunce: ["male", "qun", 4, ["olliantao"]],
@@ -1802,11 +1799,12 @@ game.import("character", function () {
target.popup(list[result[1]]);
for (let current of [player, target]) {
switch (list[result[current == player ? 0 : 1]]) {
- case "重铸":
+ case "重铸": {
let result2 = yield current.chooseCard("he", "请重铸一张牌", (card, player) => player.canRecast(card), true);
if (result2.bool) current.recast(result2.cards);
break;
- case "出杀":
+ }
+ case "出杀": {
current.chooseToUse({
prompt: "请使用一张【杀】",
filterCard: function (card, player) {
@@ -1819,9 +1817,11 @@ game.import("character", function () {
},
});
break;
- case "弃牌":
+ }
+ case "弃牌": {
current.chooseToDiscard("he", 2, true);
break;
+ }
}
}
},
@@ -2112,7 +2112,7 @@ game.import("character", function () {
}),
att = get.attitude(player, target);
if (goon) return 5 * att;
- if (!!player.countCards("he", cardx => player.canSaveCard(cardx, player))) return att;
+ if (player.countCards("he", cardx => player.canSaveCard(cardx, player)) > 0) return att;
return 0;
},
})
@@ -23588,7 +23588,7 @@ game.import("character", function () {
event.count--;
var card = event.history.shift().card;
card = { name: card.name, nature: card.nature };
- if (card.name != "jiu" && lib.filter.cardEnabled(card)) {
+ if (player.hasUseTarget(card, true, true)) {
if (
game.hasPlayer(function (current) {
return player.canUse(card, current);
@@ -27841,19 +27841,21 @@ game.import("character", function () {
"step 1";
var num = get.rand(0, 2);
switch (num) {
- case 0:
+ case 0: {
player.line(trigger.player, "fire");
trigger.player.damage("fire");
trigger.player.addTempSkill("xinfu_xionghuo_disable");
trigger.player.markAuto("xinfu_xionghuo_disable", [player]);
break;
- case 1:
+ }
+ case 1: {
player.line(trigger.player, "water");
trigger.player.loseHp();
trigger.player.addMark("xinfu_xionghuo_low", 1, false);
trigger.player.addTempSkill("xinfu_xionghuo_low");
break;
- case 2:
+ }
+ case 2: {
player.line(trigger.player, "green");
/*
var card1=trigger.player.getCards('h').randomGet();
@@ -27866,6 +27868,7 @@ game.import("character", function () {
const cards = trigger.player.getGainableCards(player, "he");
if (cards.length) player.gain(cards.randomGets(2), trigger.player, "giveAuto", "bySelf");
break;
+ }
}
"step 2";
game.delay();
@@ -28891,7 +28894,6 @@ game.import("character", function () {
ruiji: ["ruiji", "dc_ruiji"],
jsp_huangyueying: ["jsp_huangyueying", "re_jsp_huangyueying"],
ganfuren: ["ganfuren", "dc_ganfuren", "jsp_ganfuren"],
- wenqin: ["wenqin", "pe_wenqin"],
zhouqun: ["ol_zhouqun", "zhouqun"],
qianzhao: ["ol_qianzhao", "qianzhao"],
ol_pengyang: ["ol_pengyang", "sp_pengyang"],
@@ -29398,7 +29400,7 @@ game.import("character", function () {
chenqing: "陈情",
chenqing_info: "每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后其弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】。",
mozhi: "默识",
- mozhi_info: "结束阶段开始时,你可以将一张手牌当作你本回合出牌阶段内使用的第一张基本或普通锦囊牌使用。然后,你可以将一张手牌当做你本回合出牌阶段内使用的第二张基本或普通锦囊牌使用。(你不能通过此技能使用【酒】)",
+ mozhi_info: "结束阶段,你可以将一张手牌当做你本回合出牌阶段内使用的第一张基本或普通锦囊牌使用。然后你可以将一张手牌当做你本回合出牌阶段内使用的第二张基本或普通锦囊牌使用(以此法使用的牌须满足使用的限制)。",
ranshang: "燃殇",
ranshang2: "燃殇",
ranshang_info: "锁定技,当你受到1点火焰伤害后,你获得1枚“燃”标记;结束阶段开始时,你失去X点体力。若X大于2,则你减2点体力上限并摸两张牌。(X为“燃”标记的数量)",
diff --git a/character/sp2.js b/character/sp2.js
index da9ff336f..66bc5ecf5 100644
--- a/character/sp2.js
+++ b/character/sp2.js
@@ -192,7 +192,7 @@ game.import("character", function () {
order: 9,
result: {
player(player, target) {
- let res = 2 * get.effect(player, { name: "draw", player, player });
+ let res = 2 * get.effect(player, { name: "draw" }, player, player);
if (player !== target)
res += get.effect(player, { name: "losehp" }, player, player);
return res;
@@ -1434,7 +1434,7 @@ game.import("character", function () {
list.length > 1
? `,令${get.translation(event.card)}目标改为${get.translation(
list
- )}中的一名随机角色`
+ )}中的一名随机角色`
: ""
}。${gainText}`;
},
@@ -1832,13 +1832,14 @@ game.import("character", function () {
forced: true,
juexingji: true,
derivation: ["mashu", "dcnuchen"],
- filter: function (event, player) {
- return player.countCards("h") > player.hp;
+ filter(event, player) {
+ return player.countCards("hej") > player.getHp();
},
async content(event, trigger, player) {
player.awakenSkill("dcdanji");
await player.loseMaxHp();
await player.recover(player.maxHp - player.hp);
+ await player.draw(player.getHp());
await player.addSkills(["mashu", "dcnuchen"]);
},
ai: {
@@ -2252,8 +2253,8 @@ game.import("character", function () {
filter: function (event, player) {
return player.countCards("h") > 0;
},
- getSkills: function (target) {
- return target.getSkills(null, false).filter((skill) => {
+ getSkills(target, skills) {
+ return (target && !skills ? target.getSkills(null, false) : skills).filter((skill) => {
var str = get.skillInfoTranslation(skill, target);
if (str.indexOf("当你于出牌阶段") != -1) return true;
var skills = game.expandSkills([skill]);
@@ -2362,7 +2363,7 @@ game.import("character", function () {
content: function () {
"step 0";
var skill = trigger.sourceSkill || trigger.skill;
- player.removeSkill(skill);
+ player.removeSkills(skill);
player.unmarkAuto("dclongsong_remove", [skill]);
},
},
@@ -2372,100 +2373,124 @@ game.import("character", function () {
audio: "dclongsong",
trigger: { player: "phaseUseBegin" },
filter(event, player) {
- return game.hasPlayer((target) => {
+ return game.hasPlayer(target => {
if (target == player) return false;
- return target.hasCard((card) => {
+ return target.hasCard(card => {
if (get.position(card) == "h") return true;
return get.color(card) == "red" && lib.filter.canBeGained(card, player, target);
}, "he");
});
},
async cost(event, trigger, player) {
- const func = function (player) {
- game.countPlayer((target) => {
- if (target != player) {
- const skills = lib.skill.dclongsong.getSkills(target);
- if (skills.length) {
- target.prompt(skills.map((i) => get.translation(i)).join("
"));
- }
- }
- });
- };
- if (event.player == game.me) func(player);
- else if (event.isOnline()) player.send(func, player);
event.result = await player
- .chooseTarget(get.prompt2("longsong"), (card, player, target) => {
- if (target == player) return false;
- return target.hasCard((card) => {
- if (get.position(card) == "h") return true;
- return (
- get.color(card) == "red" && lib.filter.canBeGained(card, player, target)
- );
- }, "he");
- })
- .set("ai", (target) => {
- const player = get.event("player"),
- att = get.attitude(player, target);
- if (
- att > 0 &&
- !target
- .getGainableCards(player, "he")
- .some((card) => get.color(card) == "red")
- )
- return 0;
- return (
- lib.skill.dclongsong.getSkills(target).length +
- (att > 0
- ? 0
- : Math.max(
- 0,
- get.effect(target, { name: "shunshou_copy2" }, player, player)
- ))
- );
+ .chooseCardTarget({
+ prompt: get.prompt2("longsong"),
+ filterTarget(card, player, target) {
+ if (target === player) return false;
+ const skills = lib.skill.dclongsong.getSkills(target).map(skill => get.translation(skill));
+ if (skills.length) {
+ target.prompt(skills.join("
"));
+ }
+ return ui.selected.cards.length || target.hasCard(card => {
+ if (get.position(card) == "h") return true;
+ return get.color(card) == "red" && lib.filter.canBeGained(card, player, target);
+ }, "he");
+ },
+ filterCard: { color: "red" },
+ selectCard: [0, 1],
+ multitarget: true,
+ ai1(card) {
+ const ai2 = get.event("ai2");
+ if (
+ game.hasPlayer(current => {
+ return ai2(current) > 0;
+ })
+ ) {
+ return -1 - get.value(card);
+ }
+ return 6 - get.value(card);
+ },
+ ai2(target) {
+ const player = get.event("player"),
+ att = get.attitude(player, target);
+ if (att > 0 && !target.getGainableCards(player, "he").some(card => get.color(card) == "red")) return 0;
+ return lib.skill.dclongsong.getSkills(target).length + (att > 0 ? 0 : Math.max(0, get.effect(target, { name: "shunshou_copy2" }, player, player)));
+ },
})
.forResult();
},
async content(event, trigger, player) {
const target = event.targets[0],
- cards = target
- .getGainableCards(player, "he")
- .filter((card) => get.color(card) == "red");
- if (cards.length) {
- let dialog = ["龙诵:获得" + get.translation(target) + "的一张红色牌"];
- let cards1 = cards.filter((i) => get.position(i) == "h"),
- cards2 = cards.filter((i) => get.position(i) == "e");
- if (cards1.length) {
- dialog.push('