新杀谋诸葛瑾

This commit is contained in:
copcap 2024-05-18 20:04:54 +08:00
parent a0263413fa
commit eede18e04f
No known key found for this signature in database
GPG Key ID: 30E7AB6699451AEE
12 changed files with 261 additions and 0 deletions

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.

View File

@ -1,4 +1,5 @@
const characters = { const characters = {
dc_sb_zhugejin: ["male", "wu", 3, ["dcsbtaozhou", "dcsbhoude"]],
dc_sb_jiaxu: ["male", "qun", 3, ["dcsbsushen", "dcsbfumou"]], dc_sb_jiaxu: ["male", "qun", 3, ["dcsbsushen", "dcsbfumou"]],
guanyue: ["male", "shu", 4, ["dcshouzhi", "dcfenhui"]], guanyue: ["male", "shu", 4, ["dcshouzhi", "dcfenhui"]],
sp_zhenji: ["female", "qun", 3, ["dcjijie", "dchuiji"]], sp_zhenji: ["female", "qun", 3, ["dcjijie", "dchuiji"]],

View File

@ -13,6 +13,7 @@ const characterReplaces = {
caofang: ["caofang", "jsrg_caofang"], caofang: ["caofang", "jsrg_caofang"],
caomao: ["caomao", "mb_caomao"], caomao: ["caomao", "mb_caomao"],
sp_zhenji: ["sp_zhenji", "jsrg_zhenji"], sp_zhenji: ["sp_zhenji", "jsrg_zhenji"],
zhugejin: ["zhugejin", "dc_sb_zhugejin"],
}; };
export default characterReplaces; export default characterReplaces;

View File

@ -1,7 +1,250 @@
import { lib, game, ui, get, ai, _status } from "../../noname.js"; import { lib, game, ui, get, ai, _status } from "../../noname.js";
import cards from "../sp2/card.js";
/** @type { importCharacterConfig['skill'] } */ /** @type { importCharacterConfig['skill'] } */
const skills = { const skills = {
//诸葛瑾
dcsbtaozhou: {
audio: 2,
enable: "phaseUse",
filter(event, player) {
return game.hasPlayer(current => {
if (current.hasSkill("dcsbzijin")) return false;
return current.countCards("h") > 0 && current !== player;
});
},
derivation: "dcsbzijin",
chooseButton: {
dialog() {
return ui.create.dialog("###讨州###请选择一个数字(对其他角色不可见)");
},
chooseControl(event, player) {
const list = [1, 2, 3];
list.push("cancel2");
return list;
},
check() {
const event = get.event(), player = get.player();
if (
game.hasPlayer(current => {
return current !== player && get.attitude(player, current) > 0;
})
)
return [0, 1, 2].randomGet();
if (player.hasShan()) return 2;
const rand = event.getRand();
if (rand < 0.2) return 0;
if (rand < 0.5) return 1;
return 2;
},
backup(result, player) {
return {
audio: "dcsbtaozhou",
chosenNumber: result.index + 1,
filterCard: () => false,
selectCard: -1,
filterTarget(card, player, target) {
if (target.hasSkill("dcsbzijin")) return false;
return target.countCards("h") > 0 && target !== player;
},
async content(event, trigger, player) {
const [target] = event.targets;
const chosenNumber = get.info("dcsbtaozhou_backup").chosenNumber;
const cards = await target
.chooseToGive(`${get.translation(player)}对你发动了【讨州】`, "你可以交给其至多三张手牌", [1, 3])
.set("ai", card => {
if (get.event("att") > 0) {
if (get.event("chosenNumber") < ui.selected.cards.length + (get.event("getRand")() < 0.5)) {
return 5 - get.value(card);
}
return 0;
}
return -get.value(card);
})
.set("att", get.attitude(target, player))
.set("chosenNumber", chosenNumber)
.forResultCards();
const givenCount = (cards && cards.length) || 0;
const delta = Math.abs(givenCount - chosenNumber);
if (givenCount >= chosenNumber) {
await game.asyncDraw([player, target]);
} else {
target.addSkill("dcsbtaozhou_debuff");
target.addMark("dcsbtaozhou_debuff", delta, false);
}
if (delta >= 2) {
const sha = get.autoViewAs({ name: "sha" });
if (target.canUse(sha, player, false)) {
await target.addSkills("dcsbzijin");
await target.useCard(sha, player, "noai");
}
}
const roundNumberToRestore = game.roundNumber + chosenNumber;
player.tempBanSkill("dcsbtaozhou", "forever");
player
.when({ global: "roundStart" })
.filter(() => {
return game.roundNumber >= roundNumberToRestore;
})
.assign({
firstDo: true,
})
.then(() => {
delete player.storage[`temp_ban_dcsbtaozhou`];
});
},
ai: {
result: {
player: 0.5,
target() {
const chosenNumber = get.info("dcsbtaozhou_backup").chosenNumber;
if (chosenNumber > 1) return -1;
return 0;
},
},
},
};
},
prompt: () => "请选择【讨州】的目标",
},
subSkill: {
backup: {},
debuff: {
trigger: { player: "damageBegin3" },
forced: true,
charlotte: true,
async content(event, trigger, player) {
trigger.num++;
player.removeMark("dcsbtaozhou_debuff", 1, false);
if (!player.countMark("dcsbtaozhou_debuff")){
player.removeSkill("dcsbtaozhou_debuff");
}
},
intro: {
content: "下&次受到伤害时,伤害+1",
},
},
},
ai: {
order: 9.6,
result: {
player: 1,
},
},
},
dcsbzijin: {
audio: 2,
trigger: {
player: "useCardAfter",
},
filter(event, player) {
return !game.hasPlayer2(current => {
return current.hasHistory("damage", evt => evt.card === event.card);
}, true);
},
forced: true,
async content(event, trigger, player) {
const bool = await player
.chooseToDiscard("自矜弃置一张牌或失去1点体力", "he")
.set("ai", card => {
const player = get.player();
if (get.effect(player, { name: "losehp" }, player, player) > 0) return 0;
return 5 - get.value(card);
})
.forResultBool();
if (!bool) await player.loseHp();
},
ai: {
effect: {
player_use(card, player) {
if (get.effect(player, { name: "losehp" }, player) > 0) return;
if (!get.tag(card, "damage") && get.value(card) < 5)
return [
0.2,
player.hasCard(card => {
return get.value(card) < 3;
}, "he")
? -0.1
: -2,
];
},
},
neg: true,
},
},
dcsbhoude: {
audio: 2,
trigger: {
target: "useCardToTargeted",
},
filter(event, player) {
const phaseUse = event.getParent("phaseUse");
if (!phaseUse || phaseUse.name !== "phaseUse" || phaseUse.player === player) return false;
const filter = card => {
const color = get.color(card);
return (get.name(card) === "sha" && color === "red") || (get.type(card) === "trick" && color === "black");
};
const evt = event.getParent();
if (
game
.getGlobalHistory(
"useCard",
evt => {
return filter(evt.card);
},
evt
)
.indexOf(evt) !== 0
)
return false;
return filter(event.card);
},
async cost(event, trigger, player) {
const target = trigger.player;
let result;
if (get.name(trigger.card) === "sha") {
result = await player
.chooseToDiscard(get.prompt("dcsbhoude", target), `弃置一张牌,令${get.translation(trigger.card)}对你无效。`, "chooseonly", "he")
.set("ai", card => {
if (!get.event("goon")) return 0;
return 5.5 - get.value(card);
})
.set("goon", get.effect(player, trigger.card, target, player) < 0)
.forResult();
} else {
result = await player
.choosePlayerCard(`###${get.prompt("dcsbhoude", target)}###<div class="text center">弃置其的一张牌,令${get.translation(trigger.card)}对你无效。</div>`, target, "he")
.set("ai", button => {
if (!get.event("goon")) return 0;
const val = get.buttonValue(button);
if (get.attitude(get.player(), get.owner(button.link)) > 0) return -val;
return val;
})
.set("goon", get.effect(player, trigger.card, target, player) < 0)
.forResult();
}
if (result.bool) {
event.result = {
bool: true,
cost_data: {
cards: result.cards,
links: result.links,
},
};
}
},
logTarget: "player",
async content(event, trigger, player) {
const target = trigger.player;
const result = event.cost_data;
if (result.links && result.links.length) {
await target.discard(result.links, "notBySelf").set("discarder", player);
} else {
await player.discard(result.cards);
}
trigger.excluded.add(player);
},
},
//谋贾诩 //谋贾诩
dcsbsushen: { dcsbsushen: {
unique: true, unique: true,
@ -14413,6 +14656,7 @@ const skills = {
player.changeZhuanhuanji("bazhan"); player.changeZhuanhuanji("bazhan");
"step 1"; "step 1";
var target = event.recover; var target = event.recover;
var cards = event.cards;
if (result.bool && result.cards && result.cards.length) { if (result.bool && result.cards && result.cards.length) {
cards = result.cards; cards = result.cards;
} }

View File

@ -14,6 +14,7 @@ const characterSort = {
sp2_gaoshan: ["wanglang", "liuhui", "zhangjian"], sp2_gaoshan: ["wanglang", "liuhui", "zhangjian"],
sp2_wumiao: ["wu_zhugeliang", "wu_luxun", "wu_guanyu"], sp2_wumiao: ["wu_zhugeliang", "wu_luxun", "wu_guanyu"],
sp2_mouding: ["dc_sb_jiaxu", "dc_sb_lusu", "dc_sb_zhouyu", "dc_sb_simayi"], sp2_mouding: ["dc_sb_jiaxu", "dc_sb_lusu", "dc_sb_zhouyu", "dc_sb_simayi"],
sp2_zijing: ["dc_sb_zhugejin"],
}; };
const characterSortTranslate = { const characterSortTranslate = {
@ -32,6 +33,7 @@ const characterSortTranslate = {
sp2_gaoshan: "高山仰止", sp2_gaoshan: "高山仰止",
sp2_qifu: "祈福", sp2_qifu: "祈福",
sp2_mouding: "谋定天下", sp2_mouding: "谋定天下",
sp2_zijing: "子敬邀刀",
}; };
export { characterSort, characterSortTranslate }; export { characterSort, characterSortTranslate };

View File

@ -599,6 +599,14 @@ const translates = {
dcsbrushi_info: "限定技,出牌阶段,你可以将你当前〖覆谋〗的状态、你的手牌数和你的体力值调整为你发动〖肃身〗时的记录,然后重置〖覆谋〗的发动次数。", dcsbrushi_info: "限定技,出牌阶段,你可以将你当前〖覆谋〗的状态、你的手牌数和你的体力值调整为你发动〖肃身〗时的记录,然后重置〖覆谋〗的发动次数。",
dcsbfumou: "覆谋", dcsbfumou: "覆谋",
dcsbfumou_info: "转换技出牌阶段限一次你可以观看一名其他角色A的手牌并展示其一半手牌并将这些牌交给另一名其他角色B然后你与A各摸X张牌X为A以此法失去的手牌数令A依次使用这些牌中所有其可以使用的牌无距离限制且不可被响应。", dcsbfumou_info: "转换技出牌阶段限一次你可以观看一名其他角色A的手牌并展示其一半手牌并将这些牌交给另一名其他角色B然后你与A各摸X张牌X为A以此法失去的手牌数令A依次使用这些牌中所有其可以使用的牌无距离限制且不可被响应。",
dc_sb_zhugejin: "新杀谋诸葛瑾",
dc_sb_zhugejin_prefix: "新杀谋",
dcsbtaozhou: "讨州",
dcsbtaozhou_info: "出牌阶段你可以选择一名有手牌的其他角色并从1/2/3中选择一个数字X其可以选择是否交给你至多三张手牌。若其交给你的牌数Y不小于X则你与其各摸一张牌小于X则其下Z次受到的伤害+1Z为X与Y之差。若Z不小于2则其获得〖自矜〗并视为对你使用一张【杀】。然后此技能失效直到下X轮游戏开始时。",
dcsbhoude: "厚德",
dcsbhoude_info: "当你于其他角色的出牌阶段内首次成为红色【杀】/黑色普通锦囊牌的目标后,你可以弃置你/其的一张牌,令此牌对你无效。",
dcsbzijin: "自矜",
dcsbzijin_info: "锁定技。①你不能成为〖讨州〗的目标。②当你使用牌结算结束后若此牌未造成过伤害你须弃置一张牌或失去1点体力。",
}; };
export default translates; export default translates;

View File

@ -1,4 +1,9 @@
export default { export default {
"#dcsbtaozhou1": "皇叔借荆州久矣,瑾特来讨要。",
"#dcsbtaozhou2": "荆州弹丸之地,诸君岂可食言而肥?",
"#dcsbhoude1": "君子有德,可以载天下之重。",
"#dcsbhoude2": "南山有松,任尔风雨雷霆。",
"#dc_sb_zhugejin:die": "吾数梦,琅琊旧园。",
"#dcjijie1": "不知书,何由见之。", "#dcjijie1": "不知书,何由见之。",
"#dcjijie2": "闻古贤女,未有不学前世成败者。", "#dcjijie2": "闻古贤女,未有不学前世成败者。",
"#dchuiji1": "明眸善睐,瑰姿艳逸。", "#dchuiji1": "明眸善睐,瑰姿艳逸。",

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB