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

This commit is contained in:
AstralBarrage 2024-05-26 21:21:22 +08:00
commit 994835585b
306 changed files with 23437 additions and 45282 deletions

BIN
audio/die/dc_lifeng.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/die/guansuo.mp3 Normal file

Binary file not shown.

BIN
audio/die/liupan.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_liupi.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_pengyang.mp3 Normal file

Binary file not shown.

BIN
audio/die/star_sunjian.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcsbhoude1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcsbhoude2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcshuliang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshuliang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctunchu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctunchu2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/olpijing1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olpijing2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oltuishi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oltuishi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olxiaofan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olxiaofan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olyicheng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olyicheng2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/spxizhan5.mp3 Normal file

Binary file not shown.

BIN
audio/skill/stargangyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/stargangyi2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/starruijun1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/starruijun2.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/skill/tianjie3.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -922,7 +922,7 @@ game.import("card", function () {
},
ai: {
effect: {
target: function (card, player, target, current) {
target_use(card, player, target, current) {
if (target.hasSkillTag("unequip2")) return;
if (
player.hasSkillTag("unequip", false, {

View File

@ -1523,7 +1523,7 @@ game.import("card", function () {
},
ai: {
effect: {
target: function (card, player, target, current) {
target_use(card, player, target, current) {
if (
["huoshaolianying", "huogong"].includes(card.name) ||
(card.name == "sha" && game.hasNature(card, "fire"))
@ -1575,7 +1575,7 @@ game.import("card", function () {
g_dinglanyemingzhu_ai: {
ai: {
effect: {
player: function (card, player) {
player_use(card, player) {
if (player.hasSkill("jubao")) return;
if (
card.name == "dinglanyemingzhu" &&
@ -1592,7 +1592,7 @@ game.import("card", function () {
g_feilongduofeng_ai: {
ai: {
effect: {
player: function (card, player) {
player_use(card, player) {
if (player.hasSkill("zhangwu")) return;
if (
card.name == "feilongduofeng" &&
@ -1609,7 +1609,7 @@ game.import("card", function () {
g_taipingyaoshu_ai: {
ai: {
effect: {
player: function (card, player) {
player_use(card, player) {
if (player.hasSkill("wendao")) return;
if (
card.name == "taipingyaoshu" &&
@ -1620,7 +1620,7 @@ game.import("card", function () {
return [0, 0, 0, 0];
}
},
target: (card, player, target) => {
target_use(card, player, target) {
if (target._g_taipingyaoshu_temp) return;
if (
get.subtype(card) === "equip2" &&

View File

@ -2001,7 +2001,7 @@ game.import("card", function () {
ai: {
weather: true,
effect: {
player: function (card, player) {
player_use(card, player) {
if (!player.needsToDiscard()) return "zeroplayertarget";
},
},

View File

@ -2083,7 +2083,7 @@ game.import("card", function () {
},
ai: {
wuxie: function (target, card, player, viewer) {
if (get.attitude(viewer, player._trueMe || player) > 0) return 0;
if (!target.countCards("hej") ||get.attitude(viewer, player._trueMe || player) > 0) return 0;
},
basic: {
order: 7.5,
@ -2366,6 +2366,7 @@ game.import("card", function () {
ai: {
wuxie: (target, card, player, viewer, status) => {
if (
!target.countCards("hej") ||
status * get.attitude(viewer, player._trueMe || player) > 0 ||
(target.hp > 2 &&
!target.hasCard((i) => {
@ -3117,7 +3118,7 @@ game.import("card", function () {
},
ai: {
effect: {
target: function (card, player, target) {
target_use(card, player, target) {
if (typeof card !== "object" || target.hasSkillTag("unequip2")) return;
if (
player.hasSkillTag("unequip", false, {

View File

@ -5030,8 +5030,10 @@ game.import("card", function () {
player.updateMarks();
},
ai: {
effect: function (card, player, target) {
if (get.tag(card, "damage") && !target.hujia) return [1, 0.5];
effect: {
target(card, player, target) {
if (get.tag(card, "damage") && !target.hujia) return [1, 0.5];
}
},
},
intro: {
@ -5133,9 +5135,11 @@ game.import("card", function () {
player.recover(trigger.num);
},
ai: {
effect: function (card) {
if (get.tag(card, "thunderDamage")) return [0, 2];
},
effect: {
target(card) {
if (get.tag(card, "thunderDamage")) return [0, 2];
},
}
},
},
guiyanfadao: {

View File

@ -754,7 +754,7 @@ game.import("card", function () {
heiguangkai_ai: {
ai: {
effect: {
player: function (card, player, target) {
player_use(card, player, target) {
if (
typeof card !== "object" ||
!target ||

View File

@ -841,7 +841,7 @@ game.import("card", function () {
qixingbaodao: "七星宝刀",
qixingbaodao_info: "锁定技。当此牌进入你的装备区时,你弃置装备区和判定区内的所有其他牌。",
duanjian: "断剑",
duanjian_info: "这是一把坏掉的武器…",
duanjian_info: "这是一把坏掉的武器…",
duanjian_append: '<span class="text" style="font-family: yuanli">不要因为手快而装给自己。</span>',
serafuku: "水手服",
serafuku_info:

View File

@ -985,7 +985,7 @@ game.import("card", function () {
yinfengjia_info: "此牌的使用目标为其他角色。锁定技,当你受到锦囊牌造成的伤害时,此伤害+1。",
yinfengjia_skill: "引蜂甲",
zheji: "折戟",
zheji_info: "此牌的使用目标为其他角色。这是一把坏掉的武器...",
zheji_info: "此牌的使用目标为其他角色。这是一把坏掉的武器……",
wufengjian: "无锋剑",
wufengjian_info:
"此牌的使用目标为其他角色。锁定技,当你使用【杀】时,你弃置一张不为装备区内【无锋剑】的牌。",

View File

@ -12,7 +12,7 @@ const characters = {
clan_zhongyan: ["female", "jin", 3, ["clanguangu", "clanxiaoyong", "clanbaozu"], ["clan:颍川钟氏"]],
clan_wangyun: ["male", "qun", 3, ["clanjiexuan", "clanmingjie", "clanzhongliu"], ["clan:太原王氏"]],
clan_wanghun: ["male", "jin", 3, ["clanfuxun", "clanchenya", "clanzhongliu"], ["clan:太原王氏"]],
clan_zhonghui: ["male", "wei", "3/4", ["clanyuzhi", "clanxieshu", "clanbaozu"], ["clan:颍川钟氏", "die_audio:clan_zhonghui:clan_zhonghui2:clan_zhonghui3"]],
clan_zhonghui: ["male", "wei", "3/4", ["clanyuzhi", "clanxieshu", "clanbaozu"], ["clan:颍川钟氏", "die:true", "die:3"]],
clan_zhongyu: ["male", "wei", 3, ["clanjiejian", "clanhuanghan", "clanbaozu"], ["clan:颍川钟氏"]],
clan_wanglun: ["male", "jin", 3, ["clanqiuxin", "clanjianyuan", "clanzhongliu"], ["clan:太原王氏"]],
clan_xunyou: ["male", "wei", 3, ["clanbaichu", "clandaojie"], ["clan:颍川荀氏"]],

View File

@ -932,7 +932,7 @@ const skills = {
ai: {
threaten: 3,
effect: {
player(card, player, target) {
player_use(card, player, target) {
if (!target || typeof card !== "object" || player._clanjiejian_mod_temp || get.type(card) === "equip" || get.attitude(player, target) <= 0 || get.cardNameLength(card) !== player.getHistory("useCard").length + 1) return;
let targets = [target],
evt = _status.event.getParent("useCard");
@ -1017,20 +1017,13 @@ const skills = {
content() {
"step 0";
player.unmarkSkill("clanyuzhi");
if (
player.countCards("h", card => {
return card.hasGaintag("clanyuzhi") && lib.filter.cardDiscardable(card, player);
})
) {
const cards = player.getCards("h", card => {
return card.hasGaintag("clanyuzhi") && lib.filter.cardDiscardable(card, player);
});
if (cards.length) {
event.logged = true;
player.chooseToDiscard(
player.countCards("h"),
"h",
(card, player) => {
return card.hasGaintag("clanyuzhi");
},
true
).logSkill = "clanyuzhi";
player.logSkill("clanyuzhi");
player.discard(cards);
}
"step 1";
player.removeGaintag("clanyuzhi");
@ -2186,13 +2179,10 @@ const skills = {
"step 6";
var current = targets.shift();
current
.chooseToUse(
function (card, player, event) {
if (get.name(card) != "sha") return false;
return lib.filter.filterCard.apply(this, arguments);
},
"联诛:是否对" + get.translation(event.targetx) + "使用一张杀?"
)
.chooseToUse(function (card, player, event) {
if (get.name(card) != "sha") return false;
return lib.filter.filterCard.apply(this, arguments);
}, "联诛:是否对" + get.translation(event.targetx) + "使用一张杀?")
.set("targetRequired", true)
.set("complexSelect", true)
.set("filterTarget", function (card, player, target) {
@ -2355,21 +2345,24 @@ const skills = {
filter(event, player) {
return game.hasPlayer(current => player.canCompare(current));
},
async cost(event, trigger, player){
event.result = await player.chooseTarget(get.prompt("clanliuju"), "与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌", (card, player, target) => {
return player.canCompare(target);
}).set("ai", target => {
var player = _status.event.player;
var ts = target.getCards("h").sort((a, b) => get.number(a) - get.number(b));
if (get.attitude(player, target) < 0) {
var hs = player.getCards("h").sort((a, b) => get.number(a) - get.number(b));
if (!hs.length || !ts.length) return 0;
if (get.type(hs[0], null, false) == "basic" && get.value(hs[0]) > 6) return 0;
if (get.number(hs[0]) < get.number(ts[0]) || get.type(hs[0], null, false) == "basic") return 1;
return Math.random() - 0.7;
}
return get.type(ts[0]) != "basic";
}).forResult();
async cost(event, trigger, player) {
event.result = await player
.chooseTarget(get.prompt("clanliuju"), "与一名其他角色拼点,输的角色可以使用任意张拼点牌中的非基本牌", (card, player, target) => {
return player.canCompare(target);
})
.set("ai", target => {
var player = _status.event.player;
var ts = target.getCards("h").sort((a, b) => get.number(a) - get.number(b));
if (get.attitude(player, target) < 0) {
var hs = player.getCards("h").sort((a, b) => get.number(a) - get.number(b));
if (!hs.length || !ts.length) return 0;
if (get.type(hs[0], null, false) == "basic" && get.value(hs[0]) > 6) return 0;
if (get.number(hs[0]) < get.number(ts[0]) || get.type(hs[0], null, false) == "basic") return 1;
return Math.random() - 0.7;
}
return get.type(ts[0]) != "basic";
})
.forResult();
},
content() {
"step 0";
@ -2381,9 +2374,12 @@ const skills = {
var loser = result.bool ? target : player;
var cards = [];
game.getGlobalHistory("cardMove", evt => {
if (evt.getParent(2).name === "chooseToCompare" && evt.getParent(3) === event) cards.addArray(evt.cards.filter(i => {
return get.position(i, true) == "d" && get.type(i, null, false) != "basic";
}));
if (evt.getParent(2).name === "chooseToCompare" && evt.getParent(3) === event)
cards.addArray(
evt.cards.filter(i => {
return get.position(i, true) == "d" && get.type(i, null, false) != "basic";
})
);
});
event.loser = loser;
event.distance = [get.distance(player, target), get.distance(target, player)];
@ -2393,11 +2389,15 @@ const skills = {
"step 2";
var cardsx = cards.filter(i => get.position(i, true) == "d" && event.loser.hasUseTarget(i));
if (!cardsx.length) event.goto(6);
else event.loser.chooseButton(["留驹:是否使用其中的一张牌?", cardsx]).set("filterButton", button => {
return _status.event.player.hasUseTarget(button.link);
}).set("ai", button => {
return _status.event.player.getUseValue(button.link) + 0.1;
});
else
event.loser
.chooseButton(["留驹:是否使用其中的一张牌?", cardsx])
.set("filterButton", button => {
return _status.event.player.hasUseTarget(button.link);
})
.set("ai", button => {
return _status.event.player.getUseValue(button.link) + 0.1;
});
"step 3";
if (result.bool) {
var card = result.links[0];
@ -2705,7 +2705,7 @@ const skills = {
if (player.getHistory("useCard", evt => get.type(evt.card) == "equip").length > 0) return false;
},
effect: {
target(card, player, target) {
target_use(card, player, target) {
if (player == target && get.type(card) == "equip" && !player.getHistory("useCard", evt => get.type(evt.card) == "equip").length == 0) return [1, 3];
},
},

View File

@ -140,4 +140,6 @@ export default {
"#clanbaozu_clan_zhongyao1": "立规定矩,教习钟门之材。",
"#clanbaozu_clan_zhongyao2": "放任纨绔,于族是祸非福。",
"#clan_zhongyao:die": "幼子得宠而无忌,恐生无妄之祸……",
"#qice_clan_xunyou1": "二袁相争,此曹公得利之时。",
"#qice_clan_xunyou2": "穷寇宜追,需防死蛇之不僵。",
};

View File

@ -7,8 +7,8 @@ const characters = {
dc_sunquan: ["male", "wu", 4, ["dczhiheng"]],
zhutiexiong: ["male", "qun", 3, ["dcbianzhuang"]],
wu_zhutiexiong: ["male", "qun", 3, ["dcbianzhuang"], ["unseen"]],
xiaoyuehankehan: ["male", "qun", 3, ["dctongliao", "dcwudao"], ["die_audio:xiaoyuehankehan:xiaoyuehankehan2:xiaoyuehankehan3"]],
libai: ["male", "qun", 3, ["dclbjiuxian", "dcshixian"], ["die_audio:libai:libai2"]],
xiaoyuehankehan: ["male", "qun", 3, ["dctongliao", "dcwudao"], ["die:true","die:3"]],
libai: ["male", "qun", 3, ["dclbjiuxian", "dcshixian"], ["die:true", "die:2"]],
sunwukong: ["male", "qun", 3, ["dcjinjing", "dccibei", "dcruyi"]],
longwang: ["male", "qun", 3, ["dclonggong", "dcsitian"]],
taoshen: ["male", "qun", 3, ["dcnutao"]],

View File

@ -759,7 +759,7 @@ const skills = {
},
},
effect: {
target(card, player, target, current) {
target_use(card, player, target, current) {
if (player == target && player.isPhaseUsing() && get.type(card) == "equip") {
if (player.hasValueTarget("sha", false) && typeof player.getStat("skill").dcbianzhuang == "number") return [1, 3];
}
@ -1645,7 +1645,7 @@ const skills = {
},
ai: {
effect: {
player(card, player, target) {
player_use(card, player, target) {
if (player !== target && get.type2(card) === "trick") {
let tars = [target];
if (ui.selected.targets.length) tars.addArray(ui.selected.targets.filter(i => i !== player && i !== target));

View File

@ -3,7 +3,7 @@ export default {
"#dcjuejing2": "御风万里,辟邪祟于宇外,映祥瑞于神州。",
"#dclonghun1": "龙诞新岁,普天同庆,魂佑宇内,裔泽炎黄。",
"#dclonghun2": "龙吐息而万物生,今龙临神州,华夏当兴。",
"#dc_zhaoyun:die": "酒足驱年兽,新岁老一人",
"#dc_zhaoyun:die": "酒足驱年兽,新岁老一人……",
"#dcsantou1": "任尔计策奇略,我自随机应对。",
"#dcsantou2": "三相显圣,何惧雷劫地火?",
"#dcfaqi1": "脚踏风火轮,金印翻天,剑辟阴阳!",
@ -12,7 +12,7 @@ export default {
"#dcbianzhuang1": "须知少日凌云志,曾许人间第一流。",
"#dcbianzhuang2": "愿尽绵薄之力,盼国风盛行。",
"#zhutiexiong:die": "那些看似很可笑的梦,是我们用尽全力守护的光……",
"#wu_zhutiexiong:die": "愿得此身长报国,何须生入玉门关",
"#wu_zhutiexiong:die": "愿得此身长报国,何须生入玉门关……",
"#dctongliao1": "发动偷袭。",
"#dctongliao2": "不够心狠手辣,怎配江山如画。",
"#dctongliao3": "必须出重拳,而且是物理意义上的出重拳。",
@ -26,7 +26,7 @@ export default {
"#dclbjiuxian2": "天若不爱酒,酒星不在天。",
"#dcshixian1": "鱼水三顾合,风云四海生。",
"#dcshixian2": "武侯立岷蜀,壮志吞咸京。",
"#libai:die": "谁识卧龙客,长吟愁鬓斑",
"#libai:die": "谁识卧龙客,长吟愁鬓斑……",
"#libai2:die": "再来一杯吧!",
"#dccibei1": "生亦何欢,死亦何苦。",
"#dccibei2": "我欲成佛,天下无魔;我欲成魔,佛奈我何?",
@ -37,10 +37,12 @@ export default {
"#dclonggong2": "冤家宜解不宜结,莫要伤了和气。",
"#dcsitian1": "观众朋友大家好,欢迎收看天气预报!",
"#dcsitian2": "这一喷嚏,不知要掀起多少狂风暴雨。",
"#longwang:die": "三年之期已到,哥们要回家啦…",
"#longwang:die": "三年之期已到,哥们要回家啦…",
"#dcnutao1": "伍胥怒涛,奔流不灭!",
"#dcnutao2": "波澜逆转,攻守皆可!",
"#dcnutao3": "智勇深沉,一世之雄!",
"#dcnutao4": "波涛怒天,神力无边!",
"#taoshen:die": "马革裹尸,身沉江心。",
"#taoshen:die": "马革裹尸,身沉江心……",
"#jieyuan_more": "我所有的努力,都是为了杀你!",
"#jieyuan_less": "我必须活下去!",
};

View File

@ -2619,7 +2619,7 @@ const skills = {
order: 10,
result: { player: 1 },
effect: {
target: (card, player, target) => {
target_use(card, player, target) {
if (card.name === "sha" && target.getExpansions("ddddongcha_effect").length < 2 && lib.skill["dddzhijie"].hiddenCard(target, "shan")) return [1, 1, 1, -get.sgn(get.attitude(player, _status.currentPhase))];
},
},

Some files were not shown because too many files have changed in this diff Show More