noname/character/shiji/card.js

232 lines
6.1 KiB
JavaScript
Raw Permalink Normal View History

import { lib, game, ui, get, ai, _status } from "../../noname.js";
const cards = {
binglinchengxiax: {
enable: true,
type: "trick",
derivation: "sp_xunchen",
fullskin: true,
filterTarget: lib.filter.notMe,
content: function () {
"step 0";
if (!player.isIn() || !target.isIn()) {
event.finish();
return;
}
event.showCards = get.cards(4);
game.cardsGotoOrdering(event.showCards);
player.showCards(event.showCards);
"step 1";
if (player.isIn() && target.isIn() && event.showCards.length) {
for (var i of event.showCards) {
if (i.name == "sha" && player.canUse(i, target, false)) {
player.useCard(i, target, false);
event.showCards.remove(i);
event.redo();
break;
}
}
}
"step 2";
if (event.showCards.length) {
while (event.showCards.length) ui.cardPile.insertBefore(event.showCards.pop().fix(), ui.cardPile.firstChild);
game.updateRoundNumber();
}
},
ai: {
basic: {
useful: 4,
value: 3,
},
order: 4,
result: {
target: function (player, target, card, isLink) {
if (get.effect(target, { name: "sha" }, player, target) == 0) return 0;
return -2.5;
},
},
tag: {
respond: 1,
respondShan: 1,
damage: 1,
},
},
},
tiaojiyanmei: {
enable: true,
type: "trick",
derivation: "feiyi",
fullskin: true,
filterTarget: function (card, player, target) {
var targets = [];
if (ui.selected.targets.length) targets.addArray(ui.selected.targets);
var evt = _status.event.getParent("useCard");
if (evt && evt.card == card) targets.addArray(evt.targets);
if (targets.length) {
var hs = target.countCards("h");
for (var i of targets) {
if (i.countCards("h") != hs) return true;
}
return false;
}
return true;
},
recastable: true,
selectTarget: 2,
postAi: () => true,
contentBefore: function () {
if (!targets.length) return;
var map = {};
event.getParent().customArgs.default.tiaojiyanmei_map = map;
var average = 0;
for (var target of targets) {
var hs = target.countCards("h");
map[target.playerid] = hs;
average += hs;
}
map.average = average / targets.length;
},
content: function () {
var map = event.tiaojiyanmei_map,
num1 = map.average,
num2 = map[target.playerid];
if (typeof num2 != "number") num2 = target.countCards("h");
if (num2 > num1) target.chooseToDiscard("he", true);
else if (num2 < num1) target.draw();
},
contentAfter: function () {
"step 0";
if (!player.isIn() || targets.length < 2) {
event.finish();
return;
}
var num = targets[0].countCards("h");
for (var i = 1; i < targets.length; i++) {
if (targets[i].countCards("h") != num) {
event.finish();
return;
}
}
var cards = [];
game.getGlobalHistory("cardMove", function (evt) {
if (evt.name == "lose" && evt.type == "discard" && evt.getParent(3).card == card) cards.addArray(evt.cards);
});
cards = cards.filterInD("d");
if (cards.length) {
event.tiaojiyanmei_cards = cards;
player.chooseTarget("是否令一名角色获得" + get.translation(cards) + "").set("ai", function (target) {
var evt = _status.event.getParent();
return get.attitude(evt.player, target) * get.value(evt.tiaojiyanmei_cards, target) * (target.hasSkillTag("nogain") ? 0.1 : 1);
});
} else event.finish();
"step 1";
if (result.bool) {
var target = result.targets[0];
player.line(target, "thunder");
target.gain(event.tiaojiyanmei_cards, "gain2");
}
},
ai: {
order: 6.1,
basic: {
useful: 4,
value: 3,
},
result: {
target: function (player, target, card, isLink) {
var targets = [];
if (ui.selected.targets.length) targets.addArray(ui.selected.targets);
var evt = _status.event.getParent("useCard");
if (evt && evt.card == card) targets.addArray(evt.targets);
if (evt && evt.card == card && evt.customArgs && evt.customArgs.tiaojiyanmei_map) {
var map = evt.customArgs.tiaojiyanmei_map,
num1 = map.average,
num2 = map[target.playerid];
if (typeof num2 != "number") num2 = target.countCards("h");
if (num2 > num1) {
if (
target.countCards("e", function (card) {
return get.value(card) <= 0;
})
)
return 1;
return -1;
}
if (num2 < num1) return 1;
return 0;
}
var cards = [card];
if (card.cards) cards.addArray(card.cards);
var fh = function (card) {
return !cards.includes(card);
};
if (!targets.length) {
if (get.attitude(player, target) < 0) {
if (
target.countCards("e", function (card) {
return get.value(card, target) <= 0;
})
)
return 1;
if (
game.hasPlayer(function (current) {
return current.countCards("h", fh) == target.countCards("h", fh) - 2;
})
)
return -2;
if (
game.hasPlayer(function (current) {
return current.countCards("h", fh) < target.countCards("h", fh);
})
)
return -1;
}
if (
target.countCards("e", function (card) {
return get.value(card, target) <= 0;
}) &&
game.hasPlayer(function (current) {
return current.countCards("h", fh) < target.countCards("h", fh);
})
)
return 1;
return 0;
}
var average = 0;
for (var i of targets) average += i.countCards("h", fh);
if (!targets.includes(target)) {
var th = target.countCards("h", fh);
average += th;
average /= targets.length + 1;
if (th == average) return 0;
if (th < average) return th == average - 1 ? 2 : 1;
if (th > average) {
if (
target.countCards("e", function (card) {
return get.value(card) <= 0;
})
)
return 1;
return -0.5;
}
return 0;
}
average /= targets.length;
if (th < average) return 1;
if (th > average) {
if (
target.countCards("e", function (card) {
return get.value(card) <= 0;
})
)
return 1;
return -1;
}
return 0;
},
},
},
},
};
export default cards;