Skip to content

Commit

Permalink
马玩
Browse files Browse the repository at this point in the history
  • Loading branch information
mengxinzxz committed Jun 12, 2024
1 parent 1900362 commit 37326cc
Show file tree
Hide file tree
Showing 7 changed files with 164 additions and 7 deletions.
2 changes: 2 additions & 0 deletions character/rank.js
Original file line number Diff line number Diff line change
Expand Up @@ -975,6 +975,7 @@ window.noname_character_rank = {
"liqueguosi",
"re_chendeng",
"wuyan",
"mawan",
"wangyue",
"xin_sunxiu",
"sp_maojie",
Expand Down Expand Up @@ -2678,6 +2679,7 @@ window.noname_character_rank = {
"re_chendeng",
"xin_sunxiu",
"wuyan",
"mawan",
"sp_maojie",
"sp_zhujun",
"ol_chendeng",
Expand Down
1 change: 1 addition & 0 deletions character/sp/character.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const characters = {
mawan: ["male", "qun", 4, ["mashu", "olhunjiang"]],
ol_jiangwan: ["male", "shu", 3, ["olziruo", "olxvfa"]],
caimao: ["male", "wei", 4, ["olzuolian", "oljingzhou"]],
ol_peixiu: ["male", "jin", 4, ["olmaozhu", "oljinlan"]],
Expand Down
1 change: 1 addition & 0 deletions character/sp/intro.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

150 changes: 150 additions & 0 deletions character/sp/skill.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,156 @@ import { lib, game, ui, get, ai, _status } from "../../noname.js";

/** @type { importCharacterConfig['skill'] } */
const skills = {
//马玩
olhunjiang: {
audio: 2,
enable: "phaseUse",
filter(event, player) {
return game.hasPlayer(target => lib.skill.olhunjiang.filterTarget(null, player, target));
},
filterTarget(card, player, target) {
return target != player && player.inRange(target);
},
usable: 1,
selectTarget: [1, Infinity],
multitarget: true,
multiline: true,
async content(event, trigger, player) {
const targets = event.targets.sortBySeat();
let answer_result = [[], []];
let humans = targets.filter(current => current === game.me || current.isOnline());
let locals = targets.slice(0).randomSort();
locals.removeArray(humans);
const eventId = get.id();
const send = (question, current, eventId) => {
lib.skill.dclisao.chooseControl(question, current, eventId);
game.resume();
};
event._global_waiting = true;
let time = 10000;
if (lib.configOL && lib.configOL.choose_timeout) time = parseInt(lib.configOL.choose_timeout) * 1000;
targets.forEach(current => current.showTimer(time));
if (humans.length > 0) {
const solve = function (resolve, reject) {
return function (result, player) {
if (result && typeof result.index == "number") {
resolve();
answer_result[result.index].push(player);
} else reject();
};
};
await Promise.any(
humans.map(current => {
return new Promise(async (resolve, reject) => {
if (current.isOnline()) {
current.send(send, question, current, eventId);
current.wait(solve(resolve, reject));
} else {
const next = lib.skill.olhunjiang.chooseControl(current, player, eventId);
const solver = solve(resolve, reject);
if (_status.connectMode) game.me.wait(solver);
const result = await next.forResult();
if (_status.connectMode) game.me.unwait(result, current);
else solver(result, current);
}
});
})
).catch(() => {});
game.broadcastAll("cancel", eventId);
}
if (locals.length > 0) {
for (const current of locals) {
const result = await lib.skill.olhunjiang.chooseControl(current, player).forResult();
if (result && typeof result.index == "number") {
answer_result[result.index].push(current);
}
}
}
delete event._global_waiting;
for (const i of targets) {
i.hideTimer();
i.addExpose(0.05);
i.popup(answer_result[0].includes(i) ? "成为目标" : "令其摸牌");
game.log(i, "选择了", "#y" + (answer_result[0].includes(i) ? "成为目标" : "令其摸牌"));
}
await game.asyncDelay();
if (answer_result[0].length) {
answer_result[0].sortBySeat();
player.addTempSkill("olhunjiang_addTarget");
player.markAuto("olhunjiang_addTarget", answer_result[0]);
if (!answer_result[1].length) {
await player.draw(answer_result[0].length);
}
}
if (answer_result[1].length) {
answer_result[1].sortBySeat();
await player.draw(answer_result[1].length);
if (!answer_result[0].length) {
player.addTempSkill("olhunjiang_addTarget");
player.markAuto("olhunjiang_addTarget", answer_result[1]);
}
}
},
ai: {
order(_, player) {
return get.order({ name: "sha" }, player) + 1;
},
result: {
target(player, target) {
return get.sgn(get.sgn(get.attitude(player, target)) + 0.5);
},
},
},
chooseControl(player, source, eventId) {
const str = get.translation(source);
return player
.chooseControl("成为目标", "令其摸牌")
.set("prompt", "###" + str + "对你发动了【浑疆】,请选择一项" + '###<div class="text center">若所有角色选择了同一项,则所有角色也执行另一项</div>')
.set("choiceList", ["令" + str + "本阶段使用【杀】可以额外指定你为目标", "令" + str + "摸一张牌"])
.set("source", source)
.set("id", eventId)
.set("_global_waiting", true)
.set("ai", () => Math.max(0, get.sgn(get.attitude(get.event().player, get.event().source))));
},
subSkill: {
addTarget: {
charlotte: true,
onremove: true,
intro: { content: "本阶段使用【杀】可以额外指定$为目标" },
trigger: { player: "useCard2" },
filter(event, player) {
if (event.card.name != "sha") return false;
return game.hasPlayer(target => {
if (!player.getStorage("olhunjiang_addTarget").includes(target)) return false;
return !event.targets.includes(target) && lib.filter.targetEnabled2(event.card, player, target) && lib.filter.targetInRange(event.card, player, target);
});
},
async cost(event, trigger, player) {
event.result = await player
.chooseTarget(
get.prompt("olhunjiang_addTarget"),
"令任意名【浑疆】选择成为额外目标的角色成为" + get.translation(trigger.card) + "的目标",
(card, player, target) => {
if (!player.getStorage("olhunjiang_addTarget").includes(target)) return false;
const event = get.event().getTrigger();
return !event.targets.includes(target) && lib.filter.targetEnabled2(event.card, player, target) && lib.filter.targetInRange(event.card, player, target);
},
[1, Infinity]
)
.set("ai", target => {
const player = get.event("player"),
event = get.event().getTrigger();
return get.effect(target, event.card, player);
})
.forResult();
},
async content(event, trigger, player) {
trigger.targets.addArray(event.targets);
game.log(event.targets, "成为了", trigger.card, "的额外目标");
},
},
},
},
//蒋琬
olziruo: {
audio: 2,
Expand Down
4 changes: 2 additions & 2 deletions character/sp/sort.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ const characterSort = {
sp_wanglang: ["ol_wanglang", "ol_puyuan", "ol_zhouqun"],
sp_zhongdan: ["cuiyan", "huangfusong"],
sp_guozhan2: ["sp_dongzhuo", "zhangren"],
sp_others: ["hanba", "caiyang"],
sp_waitforsort: ["ol_tw_zhangji", "ol_liwan", "ol_peixiu", "ol_jiangwan"],
sp_others: ["hanba", "caiyang", "ol_peixiu"],
sp_waitforsort: ["ol_tw_zhangji", "ol_liwan", "ol_jiangwan", "mawan"],
};

const characterSortTranslate = {
Expand Down
13 changes: 8 additions & 5 deletions character/sp/translate.js
Original file line number Diff line number Diff line change
Expand Up @@ -1260,11 +1260,14 @@ const translates = {
olzuolian_info: "出牌阶段限一次,你可以选择至多X名有牌的角色(X为你的体力值),你随机展示这些角色的各一张牌,然后你可以将这些牌与牌堆和弃牌堆中的属性【杀】进行交换。",
oljingzhou: "精舟",
oljingzhou_info: "当你受到伤害时,你可以选择至多X名角色(X为你的体力值)这些角色中处于/未处于连环状态的角色重置/横置武将牌。",
ol_jiangwan:'蒋琬',
olziruo:'自若',
olziruo_info:'转换技,锁定技。①你不能整理手牌。②当你使用最{阴:左;阳:右}侧的手牌时,你摸一张牌。',
olxvfa:'蓄发',
olxvfa_info:'出牌阶段各限一次,你可以:①将至少一半手牌称为“蓄发”置于武将牌上,然后你可以将一张牌当作“蓄发”牌中的一张普通锦囊牌使用;②移去至少一半“蓄发”牌,然后你可以将一张牌当作其中一张普通锦囊牌使用。',
ol_jiangwan: "蒋琬",
olziruo: "自若",
olziruo_info: "转换技,锁定技。①你不能整理手牌。②当你使用最{阴:左;阳:右}侧的手牌时,你摸一张牌。",
olxvfa: "蓄发",
olxvfa_info: "出牌阶段各限一次,你可以:①将至少一半手牌称为“蓄发”置于武将牌上,然后你可以将一张牌当作“蓄发”牌中的一张普通锦囊牌使用;②移去至少一半“蓄发”牌,然后你可以将一张牌当作其中一张普通锦囊牌使用。",
mawan: "马玩",
olhunjiang: "浑疆",
olhunjiang_info: "出牌阶段限一次,你可以选择攻击范围内的任意名其他角色,令这些角色同时选择一项:①令你本阶段使用【杀】可以选择其为额外目标;②令你摸一张牌。若所有角色均选择了同一项,则也执行另一项。",
};

export default translates;
Binary file added image/character/mawan.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 37326cc

Please sign in to comment.