Merge remote-tracking branch 'upstream/PR-Branch' into PR-branch

This commit is contained in:
AstralBarrage 2024-05-29 12:57:05 +08:00
commit 7fd34aac75
16 changed files with 103 additions and 89 deletions

View File

@ -1407,7 +1407,7 @@ game.import("card", function () {
return 1;
},
basic: {
order: 9,
order: 7.2,
useful: [5, 1],
value: 5,
},
@ -1700,7 +1700,7 @@ game.import("card", function () {
return 1;
},
basic: {
order: 9,
order: 7.2,
useful: 1,
value: 5,
},
@ -1843,7 +1843,7 @@ game.import("card", function () {
}
},
basic: {
order: 7.2,
order: 7,
useful: 4.5,
value: 9.2,
},
@ -2111,12 +2111,13 @@ game.import("card", function () {
pos = get.position(button.link),
name = get.name(button.link);
if (pos == "j") {
if (name == "lebu") {
let viewAs = button.link.viewAs;
if (viewAs == "lebu") {
let needs = target.needsToDiscard(2);
btv *= 1.08 + 0.2 * needs;
} else if (name == "shandian" || name == "fulei" || name == "plague") btv /= 2;
} else if (viewAs == "shandian" || viewAs == "fulei") btv /= 2;
}
if (get.attitude(player, get.owner(button.link)) > 0) btv = -btv;
if (att > 0) btv = -btv;
if (pos != "e") {
if (pos == "h" && !player.hasSkillTag("viewHandcard", null, target, true))
return btv + 0.1;
@ -2156,6 +2157,7 @@ game.import("card", function () {
return get.value(card, target) > 0 && card != target.getEquip('jinhe');
}) && !js.some(card => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
})) return 0;
}
@ -2164,6 +2166,7 @@ game.import("card", function () {
return get.value(card, target) <= 0;
}) || js.some(card => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})) ? 1.5 : 0;
}
@ -2180,6 +2183,7 @@ game.import("card", function () {
return get.value(card, target) > 0 && card != target.getEquip('jinhe');
}) || js.some(card => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
})) ? -1.5 : 1.5;
}
@ -2187,6 +2191,7 @@ game.import("card", function () {
return get.value(card, target) <= 0;
}) || js.some(card => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})) ? 1.5 : -1.5;
},
@ -2218,6 +2223,7 @@ game.import("card", function () {
}) ||
js.some((card) => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
})
? -1.5
@ -2228,6 +2234,7 @@ game.import("card", function () {
}) ||
js.some((card) => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})
? 1.5
@ -2250,6 +2257,7 @@ game.import("card", function () {
}) &&
!js.some((card) => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
})
)
@ -2260,6 +2268,7 @@ game.import("card", function () {
}) ||
js.some((card) => {
var cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})
? 1.5
@ -2423,12 +2432,13 @@ game.import("card", function () {
pos = get.position(button.link),
name = get.name(button.link);
if (pos === "j") {
if (name === "lebu") {
let viewAs = button.link.viewAs;
if (viewAs === "lebu") {
let needs = target.needsToDiscard(2);
val *= 1.08 + 0.2 * needs;
} else if (name == "shandian" || name == "fulei" || name == "plague") val /= 2;
} else if (viewAs == "shandian" || viewAs == "fulei") val /= 2;
}
if (get.attitude(player, get.owner(button.link)) > 0) val = -val;
if (att > 0) val = -val;
if (pos !== "e") return val;
let sub = get.subtypes(button.link);
if (sub.includes("equip1")) return (val * Math.min(3.6, target.hp)) / 3;
@ -2466,6 +2476,7 @@ game.import("card", function () {
if (att > 0) {
if (js.some(card => {
const cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})) return 3;
if (target.isDamaged() && es.some(card => card.name == 'baiyin') &&
@ -2485,6 +2496,7 @@ game.import("card", function () {
}));
const noj = (js.length == 0 || !js.some(card => {
const cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
}))
if (noh && noe2 && noj) return 1.5;
@ -2518,6 +2530,7 @@ game.import("card", function () {
if (
js.some((card) => {
const cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})
)
@ -2548,6 +2561,7 @@ game.import("card", function () {
js.length == 0 ||
!js.some((card) => {
const cardj = card.viewAs ? { name: card.viewAs } : card;
if (cardj.name == "xumou_jsrg") return true;
return get.effect(target, cardj, target, player) < 0;
});
if (noh && noe2 && noj) return 1.5;

View File

@ -61,7 +61,7 @@ game.import("card", function () {
var base = 0;
if (get.cardtag(card, "yingbian_all")) {
if (
targets.filter(function (current) {
targets.some(function (current) {
var att = get.attitude(player, current);
if (att <= 0)
return (
@ -74,7 +74,7 @@ game.import("card", function () {
return get.position(card) == "j" || get.value(card, current) <= 0;
}) > 1
);
}).length
})
)
base += 6;
}
@ -138,13 +138,11 @@ game.import("card", function () {
? -1.5
: 1.5;
var js = target.getCards("j");
if (js.length) {
var jj = js[0].viewAs ? { name: js[0].viewAs } : js[0];
if (js.length == 1 && get.effect(target, jj, target, player) >= 0) {
return -1.5;
}
return 3;
}
if (js.length && js.some(i => {
let cardj = i.viewAs ? { name: i.viewAs } : i;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})) return 3;
return -1.5;
},
player: function (player, target) {
@ -159,13 +157,11 @@ game.import("card", function () {
}
if (get.attitude(player, target) > 1) {
var js = target.getCards("j");
if (js.length) {
var jj = js[0].viewAs ? { name: js[0].viewAs } : js[0];
if (js.length == 1 && get.effect(target, jj, target, player) >= 0) {
return 0;
}
return 1;
}
if (js.length && js.some(i => {
let cardj = i.viewAs ? { name: i.viewAs } : i;
if (cardj.name == "xumou_jsrg") return false;
return get.effect(target, cardj, target, player) < 0;
})) return 1;
return 0;
}
return 1;

View File

@ -3947,12 +3947,6 @@ const skills = {
//裴元绍
dcmoyu: {
audio: 2,
init() {
game.addGlobalSkill("dcmoyu_ai");
},
onremove() {
if (!game.hasPlayer(i => i.hasSkill("dcmoyu"), true)) game.removeGlobalSkill("dcmoyu_ai");
},
enable: "phaseUse",
filter(event, player) {
return game.hasPlayer(current => lib.skill.dcmoyu.filterTarget(null, player, current));
@ -3962,7 +3956,7 @@ const skills = {
},
async content(event, trigger, player) {
const target = event.target;
player.addTempSkill("dcmoyu_clear");
player.addTempSkill("dcmoyu_clear", "phaseUseAfter");
player.markAuto("dcmoyu_clear", [target]);
await player.gainPlayerCard(target, "hej", true, 1 + player.hasSkill("dcmoyu_add"));
player.removeSkill("dcmoyu_add");
@ -3979,10 +3973,6 @@ const skills = {
return lib.filter.targetEnabled.apply(this, arguments);
})
.set("sourcex", player)
.set("num", num)
.set("oncard", card => {
_status.event.baseDamage = _status.event.getParent().num;
})
.forResult();
if (result.bool) {
if (
@ -3991,11 +3981,13 @@ const skills = {
})
) {
player.tempBanSkill("dcmoyu");
player.addTempSkill("dcmoyu_ban");
} else {
player.addTempSkill("dcmoyu_add", "phaseChange");
}
}
},
global: "dcmoyu_ai",
subSkill: {
clear: {
charlotte: true,
@ -4004,7 +3996,7 @@ const skills = {
ban: {
charlotte: true,
mark: true,
marktext: "欲",
marktext: '<span style="text-decoration: line-through;">欲</span>',
intro: { content: "偷马贼被反打了!" },
},
add: {
@ -4014,15 +4006,6 @@ const skills = {
intro: { content: "欲望加速,下次抢两张!" },
},
ai: {
trigger: { player: "dieAfter" },
filter: () => {
return !game.hasPlayer(i => i.hasSkill("dcmoyu"), true);
},
silent: true,
forceDie: true,
content: () => {
game.removeGlobalSkill("dcmoyu_ai");
},
ai: {
effect: {
target: function (card, player, target, current) {

View File

@ -688,6 +688,7 @@ const skills = {
);
},
async content(event, trigger, player) {
player.awakenSkill("jsrgjiebing");
await player.gainMaxHp(2);
await player.recover(2);
await player.addSkills("jsrgbaowei");
@ -9311,7 +9312,7 @@ const skills = {
aiValue: (player, card, num) => {
if (num > 0 && get.itemtype(card) === "card" && card.name !== "zhuge" && get.subtype(card) === "equip1" && !player.getEquip(1)) return 0.01 * num;
},
aiUseful: () => {
aiUseful: function () {
return lib.skill.jsrgzhenqiao.mod.aiValue.apply(this, arguments);
},
},

View File

@ -119,6 +119,9 @@ const skills = {
if (cards.length) await player.discard(cards);
await player.draw(4);
},
ai: {
combo: "mbpanxiang"
},
},
//李昭焦伯
mbzuoyou: {

View File

@ -115,7 +115,7 @@ const skills = {
let cards = [];
if (event.name == "cardsDiscard") {
const evt = event.getParent().relatedEvent;
if (evt && evt.name == "judge" && evt.player == player) {
if (evt && evt.name == "judge" && evt.player != player) {
cards.addArray(event.cards.filter(i => get.position(i, true) == "d"));
}
} else {

View File

@ -1635,9 +1635,12 @@ const skills = {
return target.countCards("he") > 0 && target != player;
})
.set("ai", target => {
var player = _status.event.player;
if (_status.event.goon) return get.attitude(player, target) * Math.sqrt(target.countCards("he"));
return (-get.attitude(player, target) / (target.countCards("he") + 1)) * 10;
var player = _status.event.player, att = get.attitude(player, target);
if (_status.event.goon) {
if (att > 0) return att * Math.sqrt(target.countCards("he"));
return (1 - att) / (target.countCards("he") + 1);
}
return -10 * att / (target.countCards("he") + 1);
})
.set("goon", player.countCards("hs", card => player.hasValueTarget(card)) >= 2);
"step 1";
@ -1661,6 +1664,14 @@ const skills = {
},
subSkill: {
effect: {
mod: {
aiOrder(player, card, num) {
if (num <= 0 || !player.getExpansions("rekuangbi_effect").length) return;
let suit = get.suit(card);
if (player.getExpansions("rekuangbi_effect").some(i => get.suit(i) == suit)) return num + 10;
return num / 4;
}
},
trigger: { player: "useCard" },
charlotte: true,
forced: true,

View File

@ -1419,33 +1419,28 @@ const skills = {
break;
}
case 4: {
let map = {};
game.dead.forEach(target => (map[target.playerid] = get.translation(target)));
const {
result: { control },
} = await player
.chooseControl(Object.values(map))
.set("ai", () => {
const getNum = target => {
let num = 0;
if (target.name && lib.character[target.name]) num += get.rank(target.name, true);
if (target.name2 && lib.character[target.name2]) num += get.rank(target.name2, true);
return num;
};
let controls = _status.event.controls.slice();
controls = controls.map(name => [name, game.dead.find(target => _status.event.map[target.playerid] == name)]);
controls.sort((a, b) => getNum(b[1]) - getNum(a[1]));
return controls[0][0];
const result = await player
.chooseTarget(
"行殇:请选择一名已阵亡角色",
(card, player, target) => {
return target.isDead();
},
true,
"获得一名已阵亡角色的所有技能,然后失去〖行殇〗〖放逐〗〖颂威〗"
)
.set("ai", target => {
return ["name", "name1", "name2"].reduce((sum, name) => {
if (!target[name] || !lib.character[target[name]] || (name == "name1" && target.name1 == target.name)) return sum;
return sum + get.rank(target[name], true);
}, 0);
})
.set("prompt", "获得一名已阵亡角色的所有技能")
.set("map", map);
if (control) {
const target2 = game.dead.find(targetx => map[targetx.playerid] == control);
.set("deadTarget", true)
.forResult();
if (result.bool) {
const target2 = result.targets[0];
player.line(target2);
game.log(player, "选择了", target2);
const skills = target2.getStockSkills(true, true);
const skills2 = ["sbxingshang", "sbfangzhu", "sbsongwei"];
player.changeSkills(skills, skills2);
await player.changeSkills(target2.getStockSkills(true, true), ["sbxingshang", "sbfangzhu", "sbsongwei"]);
}
}
}
@ -1485,7 +1480,7 @@ const skills = {
case 3:
return str + "移去5个“颂”标记令一名体力上限小于10的角色加1点体力上限并回复1点体力然后随机恢复一个被废除的装备栏";
case 4:
return str + "移去5个“颂”标记获得一名已阵亡角色的所有技能然后失去武将牌上的所有技能";
return str + "移去5个“颂”标记获得一名已阵亡角色的所有技能然后失去〖行殇〗〖放逐〗〖颂威〗";
}
},
},

View File

@ -1,6 +1,6 @@
const characters = {
caimao: ["male", "wei", 4, ["olzuolian", "oljingzhou"]],
ol_peixiu: ["male", "wei", 3, ["olmaozhu", "oljinlan"]],
ol_peixiu: ["male", "wei", 4, ["olmaozhu", "oljinlan"]],
yadan: ["male", "qun", 4, ["olqingya", "oltielun"]],
sp_sunce: ["male", "qun", 4, ["olliantao"]],
ol_liupi: ["male", "qun", 4, ["olyicheng"]],

View File

@ -84,7 +84,6 @@ const characterIntro = {
bianfuren: "武宣皇后卞氏159年12月30日230年7月9日琅邪开阳今山东临沂魏武帝曹操的正妻继室魏文帝曹丕、任城威王曹彰、陈思王曹植、萧怀王曹熊的母亲。原本是倡家即汉代专门从事音乐歌舞的乐人家庭后来与曹操成婚建安初年原配丁夫人被废卞夫人成为曹操的正妻。曹丕继位后尊其为皇太后曹叡继位后尊其为太皇太后。卞后在太和四年去世与魏武帝曹操合葬高陵。",
shamoke: "沙摩柯222年东汉末三国时期五溪蛮首领。汉章武元年221年为报关羽被东吴杀害之仇刘备亲自领兵攻孙权以金锦爵赏诱沙摩柯助战。章武二年222年吴大都督陆逊以火攻破刘备率诸军齐击汉军四十多个营寨被攻破沙摩柯在大乱中匹马奔逃被乱军杀死。",
lvfan: "吕范228年字子衡。汝南郡细阳县今安徽太和人。汉末至三国时期吴国重臣。吕范年轻为汝南县吏后避难寿春结识孙策。此后随孙策、孙权征伐四方对稳固孙氏在江东的统治做出了杰出的贡献孙权将其比之于东汉开国元勋吴汉。吴国建立后吕范累官至前将军、假节、扬州牧封南昌侯。黄武七年228年吕范被拜为大司马未得授官便已病逝。孙权悲痛不已遣使赠其大司马印绶。孙权还都建业后以太牢礼祭祀吕范。",
liqueguosi: "请分别查看「李傕」和「郭汜」的武将介绍。",
maojie: "毛玠—216年字孝先陈留平丘今河南封丘人。东汉末年大臣。年少时为县吏以清廉公正著称。因战乱而打算到荆州避乱但中途知道刘表政令不严明因而改往鲁阳。后来投靠曹操提出“奉天子以令不臣脩耕植畜军资”的战略规划得到曹操的欣赏。<br>毛玠与崔琰主持选举,所举用的都是清廉正直之士。而毛玠为人廉洁,激起天下廉洁之风,一改朝中奢华风气。曹操大为赞赏,曹丕也亲自去拜访他。<br>曹操获封魏公后,毛玠改任尚书仆射,再典选举。又密谏曹操应该立嫡长子曹丕为魏国太子。崔琰被杀后,毛玠十分不快。后来有人诬告毛玠,曹操大怒,将毛玠收于狱中。及后在桓阶、和洽营救下,只被免职,不久逝世于家中。曹操在他死后赐他棺材和钱帛。",
huangfusong: "字义真。安定郡朝那县(今宁夏彭阳)人。于黄巾起义时,以中郎将身份讨伐黄巾,用火攻大破张梁、张宝。后接替董卓进攻张梁,连胜七阵。掘张角墓,拜左车骑将军、冀州牧,因拒绝贿赂宦官而被免职。 董卓死,王允命其与吕布等共至郿坞抄籍董卓家产、人口,皇甫嵩将坞中所藏良家子女,尽行释放。",

View File

@ -663,7 +663,7 @@ const skills = {
cards = moved[0].slice();
if (cards.length) {
await game.cardsGotoOrdering(cards);
for (let i = cards.length - 1; i--; i >= 0) {
for (let i = cards.length - 1; i >= 0; i--) {
ui.cardPile.insertBefore(cards[i], ui.cardPile.firstChild);
}
game.log(cards, "被放回了牌堆顶");
@ -687,7 +687,7 @@ const skills = {
cards = hs.slice();
if (cards.length) {
await game.cardsGotoOrdering(cards);
for (let i = cards.length - 1; i--; i >= 0) {
for (let i = cards.length - 1; i >= 0; i--) {
ui.cardPile.insertBefore(cards[i], ui.cardPile.firstChild);
}
game.log(cards, "被放回了牌堆顶");
@ -25173,7 +25173,12 @@ const skills = {
usable: 1,
content: function () {
"step 0";
player.judge();
player.judge(card => {
if (game.hasPlayer(cur => {
return get.event("player").canUse("sha", cur);
})) return get.number(card);
return 1 / get.number(card);
});
"step 1";
player.storage.qiangwu = result.number;
player.addTempSkill("qiangwu3", "phaseUseEnd");

View File

@ -10,7 +10,7 @@ const characterSort = {
sp_qifu: ["ol_feiyi", "caoying", "panshu", "caochun", "yuantanyuanshang", "caoshuang", "wolongfengchu", "guansuo", "baosanniang", "fengfangnv", "jin_zhouchu"],
sp_wanglang: ["ol_wanglang", "ol_puyuan", "ol_zhouqun"],
sp_zhongdan: ["cuiyan", "huangfusong"],
sp_guozhan2: ["sp_dongzhuo", "liqueguosi", "zhangren"],
sp_guozhan2: ["sp_dongzhuo", "zhangren"],
sp_others: ["hanba", "caiyang"],
sp_waitforsort: ["ol_luyusheng", "ol_tw_zhangji", "ol_liwan", "ol_liuyan", "ol_peixiu", "caimao"],
};

View File

@ -1,4 +1,5 @@
const characterIntro = {
liqueguosi: "请分别查看「李傕」和「郭汜」的武将介绍。",
tangji: "唐姬,会稽太守唐瑁女,弘农怀王刘辩的妃子。刘辩死后,唐姬回归故里,因节烈不愿改嫁他人,后被汉献帝下诏封为弘农王妃。",
lijue: "李傕一说“傕”读音“què”—198年字稚然。北地郡泥阳县今陕西省耀县汉末群雄之一。东汉末年汉献帝时的军阀、权臣官至大司马、车骑将军、开府、领司隶校尉、假节。<br>李傕本为董卓部将后被董卓的女婿牛辅派遣至中牟与朱儁交战大破朱儁进而至陈留、颍川等地劫掠。初平三年192年董卓和牛辅被杀后李傕归无所依于是采用贾诩之谋伙同郭汜、张济、樊稠等原董卓部曲将攻向长安。击败吕布杀死王允等人占领长安把持朝廷大权。后诸将不和李傕在会议上杀死了樊稠又与郭汜分别劫持了汉献帝和众臣相互交战张济率兵赶来和解于是二人罢兵李傕出屯池阳黄白城郭汜、张济等人随汉献帝东归前往弘农。<br>后来李傕、郭汜、张济反悔联合起来追击汉献帝与杨奉、董承等人几番交战。汉献帝一路逃亡狼狈不堪到达安邑与李傕等人讲和。不久汉献帝被曹操迎往许都。建安三年198年曹操派谒者仆射裴茂召集关西诸将段煨等人征讨李傕灭其三族。",
zhangji: "张济196年武威郡祖厉县今甘肃靖远东南人。东汉末年割据军阀之一。 张济原为董卓部将,董卓被诛杀后,张济与李傕一同率军攻破长安,任中郎将。不久,升任镇东将军,封平阳侯,出屯弘农。献帝东迁时,张济升任骠骑将军,率军护卫献帝,后来因与董承等人有矛盾,便与李傕、郭汜一同追赶献帝。 建安元年196年张济因军队缺粮而进攻穰城中流矢而死。死后部队由侄儿张绣接管。",

View File

@ -240,6 +240,7 @@ const skills = {
selectCard: 2,
position: "hes",
viewAs: { name: "juedou" },
selectTarget: 2,
viewAsFilter(player) {
if (player.countCards("hes") < 2) return false;
},

View File

@ -208,8 +208,8 @@ const translates = {
stddaizui: "戴罪",
stddaizui_info: "锁定技,当你受到伤害后,你视为本轮未发动过〖盗书〗。",
stdxiongxia: "凶侠",
stdxiongxia_info: "你可以将两张牌当作【决斗】使用。你以此法使用的【决斗】结算完毕后,若所有目标角色都受到了此牌造成的伤害,则〖凶侠〗于本回合失效。",
stdhuizhan: "挥",
stdxiongxia_info: "你可以将两张牌当作【决斗】对两名其他角色使用。你以此法使用的【决斗】结算完毕后,若所有目标角色都受到了此牌造成的伤害,则〖凶侠〗于本回合失效。",
stdhuizhan: "挥",
stdhuizhan_info: "你使用【杀】可以额外指定至多两个目标。若如此做,目标角色响应此【杀】时,其他目标角色可以代替其使用【闪】。",
stdmingfa: "明伐",
stdmingfa_info: "出牌阶段你可以对一名体力值大于1的角色造成1点伤害然后此技能失效直至其死亡或回复体力。",

View File

@ -798,6 +798,7 @@ const skills = {
subSkill: {
g: {
audio: "dcwuyou",
forceaudio: true,
enable: "phaseUse",
usable: 1,
filter(event, player) {
@ -934,6 +935,10 @@ const skills = {
if (!card.cards) return;
if (card.cards.some(card => card.hasGaintag("dcwuyou_transfer"))) return Infinity;
},
targetInRange(card, player) {
if (!card.cards) return;
if (card.cards.some(card => card.hasGaintag("dcwuyou_transfer"))) return true;
},
},
},
},
@ -1049,11 +1054,11 @@ const skills = {
result: {
player(player) {
const enemies = game.filterPlayer(current => {
return get.rawAttitude(player, current) < 0 && get.attitude(player, current) >= 0;
}),
knownEnemies = game.filterPlayer(current => {
return get.attitude(player, current) < 0;
});
return (!get.rawAttitude || get.rawAttitude(player, current) < 0) && get.attitude(player, current) >= 0;
}),
knownEnemies = game.filterPlayer(current => {
return get.attitude(player, current) < 0;
});
if ((!knownEnemies.length && player.countCards("e") > 1) || (player.getHp() > 3 && enemies.length > 0 && knownEnemies.length < 2 && knownEnemies.length < enemies.length && !knownEnemies.some(enemy => get.attitude(player, enemy) <= -9))) return 0;
const val1 = game
.filterPlayer()