Merge branch 'PR-Branch' of https://github.com/IceCola97/noname into PR-Branch

This commit is contained in:
IceCola 2024-05-10 20:14:12 +08:00
commit 4e7cbc2776
18 changed files with 12608 additions and 113 deletions

View File

@ -77,7 +77,7 @@ const skills = {
if (card.cards && (card.cards || []).some(i => get.position(i) == "h")) return false;
},
cardSavable() {
return lib.skill.dctunchu.subSkill.debuff.mod.cardEnabled2.apply(this, arguments);
return lib.skill.dctunchu.subSkill.debuff.mod.cardEnabled.apply(this, arguments);
},
},
},

View File

@ -16469,57 +16469,52 @@ const skills = {
choulve: {
audio: 2,
trigger: { player: "phaseUseBegin" },
direct: true,
filter: function (event, player) {
return game.hasPlayer(function (current) {
return current != player && current.countCards("he");
});
},
content: function () {
"step 0";
var str = "令一名其他角色交给你一张牌";
var history = player.getAllHistory("damage", function (evt) {
async cost(event, trigger, player){
let str = "令一名其他角色交给你一张牌";
const history = player.getAllHistory("damage", function (evt) {
return evt.card && evt.card.name && lib.card[evt.card.name];
});
if (history.length) event.cardname = history[history.length - 1].card.name;
if (event.cardname) {
str += "若其如此做,视为你使用【" + get.translation(event.cardname) + "】";
str += "若其如此做,视为你使用【" + get.translation(event.cardname) + "】";
}
var goon = true;
let goon = true;
if (event.cardname) {
goon = game.hasPlayer(function (current) {
return player.canUse(event.cardname, current) && get.effect(current, { name: event.cardname }, player, player) > 0;
});
}
player
.chooseTarget(get.prompt("choulve"), str, function (card, player, target) {
return target != player && target.countCards("he");
})
.set("ai", function (target) {
if (!_status.event.goon) return 0;
var player = _status.event.player;
if (get.attitude(player, target) >= 0 && get.attitude(target, player) >= 0) {
return Math.sqrt(target.countCards("he"));
}
return 0;
})
.set("goon", goon);
"step 1";
if (result.bool) {
var target = result.targets[0];
player.logSkill("choulve", target);
target
.chooseCard("he", "是否交给" + get.translation(player) + "一张牌?", event.cardname ? "若如此做,视为" + get.translation(player) + "使用【" + get.translation(event.cardname) + "】" : null)
.set("ai", function (card) {
if (_status.event.goon) return 7 - get.value(card);
return 0;
})
.set("goon", get.attitude(target, player) > 1);
event.target = target;
} else {
event.finish();
const result = await player.chooseTarget(get.prompt("choulve"), str, function (card, player, target) {
return target != player && target.countCards("he");
}).set("ai", function (target) {
const event = get.event();
if (!event.goon) return 0;
var player = event.player;
if (get.attitude(player, target) >= 0 && get.attitude(target, player) >= 0) {
return Math.sqrt(target.countCards("he"));
}
return 0;
}).set("goon", goon).forResult();
if(result.bool){
result.cost_data = {cardname: event.cardname};
event.result = result;
}
"step 2";
},
content: function () {
"step 0";
event.cardname = event.cost_data.cardname;
var target = targets[0];
target.chooseCard("he", "是否交给" + get.translation(player) + "一张牌?", event.cardname ? "若如此做,视为" + get.translation(player) + "使用【" + get.translation(event.cardname) + "】" : null).set("ai", function (card) {
if (_status.event.goon) return 7 - get.value(card);
return 0;
}).set("goon", get.attitude(target, player) > 1);
event.target = target;
"step 1";
if (result.bool) {
event.target.give(result.cards, player);
if (event.cardname) {

View File

@ -5241,7 +5241,7 @@ const skills = {
//卢氏
olzhuyan: {
audio: 2,
trigger: { player: "phaseJieshuBegin" },
trigger: { player: "phaseDiscardEnd" },
init: function (player) {
player.addSkill("olzhuyan_record");
},

View File

@ -1078,7 +1078,7 @@ const translates = {
olxinggu_info: "①游戏开始时,你将牌堆中的三张坐骑牌扣置于武将牌上。②结束阶段,你可以将一张〖行贾①〗牌置于一名其他角色的装备区,然后你从牌堆获得一张♦牌。",
lushi: "卢氏",
olzhuyan: "驻颜",
olzhuyan_info: "每名角色每项各限一次。结束阶段你可以令一名角色将以下一项调整至与其上一个结束阶段结束后相同1.体力值2.手牌数体力值至多失去至1手牌数至多摸至5若其未执行过准备阶段则改为游戏开始时。",
olzhuyan_info: "每名角色每项各限一次。弃牌阶段结束时你可以令一名角色将以下一项调整至与其上一个结束阶段结束后相同1.体力值2.手牌数体力值至多失去至1手牌数至多摸至5若其未执行过准备阶段则改为游戏开始时。",
olleijie: "雷劫",
olleijie_info: "准备阶段你可以令一名角色判定若结果为♠2~9其受到2点雷电伤害否则其摸两张牌。",
releijie: "雷劫",

View File

@ -6549,6 +6549,9 @@ const skills = {
//player.removeSkill('mouni');
player.changeSkills(["zhangu"], ["mouni"]);
},
ai: {
combo: "mouni",
},
},
zhangu: {
trigger: { player: "phaseZhunbeiBegin" },

View File

@ -1,5 +1,5 @@
const characters = {
dc_sb_jiaxu: ["male", "qun", 3, ["dcsbsushen", "dcsbrushi", "dcsbfumou"]],
dc_sb_jiaxu: ["male", "qun", 3, ["dcsbsushen", "dcsbfumou"]],
guanyue: ["male", "shu", 4, ["dcshouzhi", "dcfenhui"]],
sp_zhenji: ["female", "qun", 3, ["dcjijie", "dchuiji"]],
wu_guanyu: ["male", "shu", 5, ["dcjuewu", "dcwuyou", "dcyixian"]],

View File

@ -108,7 +108,7 @@ const skills = {
num = Math.ceil(target.countCards("h")/2);
player.changeZhuanhuanji("dcsbfumou");
let cards = await player
.choosePlayerCard("覆谋:展示" + get.translation(target) + "的至多" + get.cnNumber(num) + "张牌", target, "h", num, true)
.choosePlayerCard("覆谋:选择展示" + get.translation(target) + "的" + get.cnNumber(num) + "张牌", target, "h", num, true)
.set("ai", card => {
const player = get.event("player"),
storage = get.event("storage"),
@ -132,31 +132,10 @@ const skills = {
aim.chat("555一张都拿不到~");
}
} else {
cards = cards.filter(card => {
return target.hasUseTarget(card) && get.owner(card) == target && get.position(card) == "h";
});
while (
cards.some(card => {
return target.hasUseTarget(card) && get.owner(card) == target && get.position(card) == "h";
})
) {
const result = await target
.chooseToUse(
true,
function (card) {
const event = get.event();
if (!lib.filter.cardEnabled(card, event.player, event)) return false;
return get.event("cards").includes(card);
},
"覆谋:请依次使用展示的牌"
)
.set("cards", cards)
.forResult();
if (result.bool) {
cards = cards.filter(card => {
return target.hasUseTarget(card) && get.owner(card) == target && get.position(card) == "h";
});
} else break;
for (const card of cards) {
if (target.hasUseTarget(card)) {
await target.chooseUseTarget(card, true, false);
}
}
}
},
@ -195,7 +174,7 @@ const skills = {
return event.name != "phase" || game.phaseNumber == 0;
},
prompt2(event, player) {
return "切换【谋】为状态" + (player.storage.dcsbfumou ? "阳" : "阴");
return "切换【谋】为状态" + (player.storage.dcsbfumou ? "阳" : "阴");
},
check: () => Math.random() > 0.5,
content() {

View File

@ -11220,11 +11220,11 @@ const skills = {
},
},
xiantu: {
//unique:true,
audio: "xiantu1",
group: "xiantu2",
//gainable:true,
//forceunique:true,
audio: 2,
group: ["xiantu1", "xiantu2"],
},
xiantu1: {
audio: true,
trigger: { global: "phaseUseBegin" },
filter: function (event, player) {
return event.player != player;
@ -11258,7 +11258,6 @@ const skills = {
threaten: 1.1,
},
},
xiantu1: { audio: true },
xiantu2: { audio: true },
xiantu4: {
trigger: { player: "phaseUseEnd" },

View File

@ -381,6 +381,7 @@ const translates = {
qiangzhi_draw: "强识",
qiangzhi_info: "出牌阶段开始时,你可以展示一名其他角色的一张手牌。若如此做,当你于此阶段内使用与此牌类别相同的牌时,你可以摸一张牌。",
xiantu: "献图",
xiantu1: "献图",
xiantu2: "献图",
xiantu3: "献图",
xiantu_info: "一名其他角色的出牌阶段开始时你可以摸两张牌然后交给其两张牌。若如此做此阶段结束时若该角色未于此阶段内杀死过角色则你失去1点体力。",

View File

@ -184,6 +184,7 @@ export default {
"#qiangzhi1": "文书强识,才可博于运筹。",
"#qiangzhi2": "容我过目,即刻咏来。",
"#xiantu1": "将军莫虑,且看此图。",
"#xiantu2": "吾以诚心相献,君何踌躇不前!",
"#zhangsong:die": "皇叔不听吾谏言,悔时晚矣!",
"#fenli1": "以逸待劳,坐收渔利。",
"#fenli2": "以主制客,占尽优势。",

View File

@ -41590,8 +41590,9 @@ var pinyin_dict_withtone = "yī,dīng zhēng,kǎo qiǎo yú,qī,shàng,xià,hǎn
*/
function parsePolyphone(chinese, result, splitter, withtone) {
// 先删除中文字符之外的所有字符(包括英文字母、数字、标点符号、空格和其他非中文字符),然后再查找多音字
chinese = chinese.replace(/[^\u4e00-\u9fa5]/g, '');
if(chinese.length == 0) return result;
// 处理句子的过程中会出现问题,暂时移除。
// chinese = chinese.replace(/[^\u4e00-\u9fa5]/g, '');
// if(chinese.length == 0) return result;
var poly = window.pinyin_dict_polyphone;
var max = 7; // 最多只考虑7个汉字的多音字词虽然词库里面有10个字的但是数量非常少为了整体效率暂时忽略之

View File

@ -12,6 +12,8 @@ window.noname_source_list = [
"noname/get/index.js",
"noname/get/is.js",
"noname/get/promises.js",
"noname/get/pinyins/index.js",
"noname/get/pinyins/noname-dict.js",
"noname/gnc/index.js",
"noname/gnc/is.js",
"noname/init/cordova.js",
@ -420,7 +422,6 @@ window.noname_source_list = [
"game/NoSleep.js",
"game/package.js",
"game/phantom.js",
"game/pinyinjs.js",
"game/pressure.js",
"game/server.js",
"game/source.js",

View File

@ -7,6 +7,7 @@ import { CacheContext } from "../library/cache/cacheContext.js";
import { Is } from "./is.js";
import { Promises } from "./promises.js";
import { rootURL } from "../../noname.js";
import * as pinyinPro from "./pinyins/index.js";
export class Get {
is = new Is();
@ -214,22 +215,32 @@ export class Get {
}
//装备栏 END
/**
* @returns { string[] }
* @param {string} chinese
* @param {boolean|undefined} withTone
* @returns { any[] }
*/
pinyin(chinese, withTone) {
const pinyinUtilx = window.pinyinUtilx;
if (!pinyinUtilx) return [];
let result = [];
const pinyins = lib.pinyins;
if (pinyins) {
const pinyin = pinyins[chinese];
if (Array.isArray(pinyin)) return withTone === false ? pinyin.map(pinyinUtilx.removeTone) : pinyin.slice();
if (pinyins && pinyins[chinese] && Array.isArray(pinyins[chinese])) {
result = pinyins[chinese].slice(0);
}
return pinyinUtilx.getPinyin(chinese, null, withTone, true);
else {
//@ts-ignore
result = pinyinPro.pinyin(chinese, {type: "array"});
}
//@ts-ignore
if (withTone === false) result = pinyinPro.convert(result, { format: "toneNone" });
return result;
}
/**
* @param { string } str
* @returns { string }
*/
yunmu(str) {
//部分整体认读音节特化处理
const util = window.pinyinUtilx;
if (util && lib.pinyins._metadata.zhengtirendu.includes(util.removeTone(str))) {
//@ts-ignore
if (lib.pinyins._metadata.zhengtirendu.includes(pinyinPro.convert(str, { format: "toneNone" }))) {
return "-" + str[str.length - 1];
}
//排除声母
@ -278,9 +289,13 @@ export class Get {
}
return str;
}
/**
* @param { string } str
* @returns { string|null }
*/
yunjiao(str) {
const util = window.pinyinUtilx;
if (util) str = util.removeTone(str);
//@ts-ignore
str = pinyinPro.convert(str, { format: "toneNone" })
if (lib.pinyins._metadata.zhengtirendu.includes(str)) {
str = "-" + str[str.length - 1];
} else {

12345
noname/get/pinyins/index.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,176 @@
const dictionary = {
//无名杀自己的名词
用间: ["yòng jiàn"],
//无名杀的人名
乐进: ["yuè jìn"],
乐就: ["yuè jiù"],
乐綝: ["yuè chēn"],
华歆: ["huà xīn"],
华雄: ["huà xióng"],
贾诩: ["jiǎ xǔ"],
贾逵: ["jiǎ kuí"],
贾充: ["jiǎ chōng"],
沮授: ["jū shòu"],
纪灵: ["jǐ líng"],
笮融: ["zé róng"],
逢纪: ["páng jì"],
许褚: ["xǔ chǔ"],
刘辟: ["liú pì"],
刘禅: ["liú shàn"],
甄宓: ["zhēn fú"],
孙綝: ["sūn chēn"],
李傕: ["lǐ jué"],
李遗: ["lǐ wèi"],
张嶷: ["zhāng nì"],
蒋干: ["jiǎng gàn"],
雷薄: ["léi bó"],
吕蒙: ["lǚ méng"],
于禁: ["yú jìn"],
赵累: ["zhào lèi"],
夏侯令女: ["xià hóu lìng nǚ"],
马日磾: ["mǎ mì dī"],
史阿: ["shǐ ē"],
凯撒: ["kǎi sà"],
乐无异: ["yuè wú yì"],
端蒙: ["duān méng"],
妹喜: ["mò xǐ"],
洛欧塞布: ["luò ōu sài bù"],
塞纳留斯: ["sài nà liú sī"],
半藏: ["bàn zàng"],
地藏王: ["dì zàng wáng"],
查莉娅: ["zhā lì yà"],
单小小: ["shàn xiǎo xiǎo"],
少微: ["shào wēi"],
少昊: ["shào hào"],
欧阳少恭: ["ōu yáng shào gōng"],
卡尔维特: ["kǎ ěr wéi tè"],
卡西尔: ["kǎ xī ěr"],
卡扎库斯: ["kǎ zā kù sī"],
卡德加: ["kǎ dé jiā"],
法兰茜斯卡: ["fǎ lán qiàn sī kǎ"],
卡利莫斯: ["kǎ lì mò sī"],
安卡: ["ān kǎ"],
卡玛: ["kǎ mǎ"],
梼杌: ["táo wù"],
亚煞极: ["yà shà jí"],
库特莉亚芙卡: ["kù tè lì yà fú kǎ"],
露娜: ["lù nà"],
//无名杀自己的技能
弹雀: ["tán què"],
重身: ["chóng shēn"],
畜鸣: ["chù míng"],
聆乐: ["líng yuè"],
没矢: ["mò shǐ"],
没欲: ["mò yù"],
血裔: ["xuè yì"],
血卫: ["xuè wèi"],
血诏: ["xuè zhào"],
血偿: ["xuè cháng"],
血拼: ["xuè pīn"],
血途: ["xuè tú"],
行殇: ["xíng shāng"],
节行: ["jié xíng"],
天行: ["tiān xíng"],
神行: ["shén xíng"],
镇行: ["zhèn xíng"],
行图: ["xíng tú"],
绝行: ["jué xíng"],
好施: ["hào shī"],
荐降: ["jiàn xiáng"],
破降: ["pò xiáng"],
拒降: ["jù xiáng"],
应势: ["yìng shì"],
应援: ["yìng yuán"],
应机: ["yìng jī"],
节应: ["jié yìng"],
驰应: ["chí yìng"],
断发: ["duàn fà"],
旋风: ["xuàn fēng"],
将驰: ["jiàng chí"],
将烈: ["jiàng liè"],
将略: ["jiàng lüè"],
斩将: ["zhǎn jiàng"],
拜将: ["bài jiàng"],
强识: ["qiáng zhì"],
默识: ["mò zhì"],
数谏: ["shuò jiàn"],
巧说: ["qiǎo shuì"],
营说: ["yíng shuì"],
说盟: ["shuì méng"],
落宠: ["luò chǒng"],
落雁: ["luò yàn"],
落雷: ["luò léi"],
贲育: ["bēn yù"],
造王: ["zào wàng"],
舍宴: ["shě yàn"],
舍裔: ["shě yì"],
省身: ["xǐng shēn"],
单骑: ["dān jì"],
间书: ["jiàn shū"],
伏间: ["fú jiàn"],
间计: ["jiàn jì"],
贵相: ["guì xiàng"],
相鼠: ["xiàng shǔ"],
辟田: ["pì tián"],
辟撰: ["pì zhuàn"],
辟境: ["pì jìng"],
斗阵: ["dòu zhèn"],
斗缠: ["dòu chán"],
冯河: ["píng hé"],
势吓: ["shì hè"],
虚吓: ["xū hè"],
叱吓: ["chì hè"],
度断: ["duó duàn"],
度势: ["duó shì"],
诛綝: ["zhū chēn"],
大喝: ["dà hè"],
暴喝: ["bào hè"],
曲误: ["qǔ wù"],
媛丽: ["yuán lì"],
调归: ["diào guī"],
款塞: ["kuǎn sài"],
父荫: ["fù yìn"],
穆荫: ["mù yìn"],
长姬: ["zhǎng jī"],
朝凤: ["cháo fèng"],
朝争: ["cháo zhēng"],
令法: ["lìng fǎ"],
耀令: ["yào lìng"],
冠绝: ["guàn jué"],
先著: ["xiān zhuó"],
量反: ["liàng fǎn"],
复难: ["fù nàn"],
膴仕: ["wǔ shì"],
蒙斥: ["méng chì"],
乐动: ["yuè dòng"],
血凰: ["xuè huáng"],
血戮: ["xuè lù"],
血刃: ["xuè rèn"],
血契: ["xuè qì"],
血逐: ["xuè zhú"],
血咒: ["xuè zhòu"],
血殇: ["xuè shāng"],
血池: ["xuè chí"],
越行: ["yuè xíng"],
侠行: ["xiá xíng"],
枭行: ["xiāo xíng"],
劫行: ["jié xíng"],
割发: ["gē fà"],
落梅: ["luò méi"],
落石: ["luò shí"],
落刀: ["luò dāo"],
星落: ["xīng luò"],
奈落: ["nài luò"],
舍身: ["shě shēn"],
舍愿: ["shě yuàn"],
月露: ["yuè lù"],
沾露: ["zhān lù"],
禁咒: ["jìn zhòu"],
挟令: ["xié lìng"],
七煞: ["qī shà"],
冥煞: ["míng shà"],
虎煞: ["hǔ shà"],
煞魂: ["shà hún"],
};
export default dictionary;

View File

@ -3017,16 +3017,10 @@ export const Content = {
//提前phaseBefore时机解决“游戏开始时”时机和“一轮开始时”先后
event.trigger("phaseBefore");
"step 1";
game.phaseNumber++;
//初始化阶段列表
if (!event.phaseList) {
event.phaseList = [
"phaseZhunbei",
"phaseJudge",
"phaseDraw",
"phaseUse",
"phaseDiscard",
"phaseJieshu",
];
event.phaseList = ["phaseZhunbei", "phaseJudge", "phaseDraw", "phaseUse", "phaseDiscard", "phaseJieshu"];
}
if (typeof event.num != "number") {
event.num = 0;
@ -3040,11 +3034,7 @@ export const Content = {
} else if (_status.seatNumSettled) {
var seatNum = player.getSeatNum();
if (seatNum != 0) {
if (
get.itemtype(_status.lastPhasedPlayer) != "player" ||
seatNum < _status.lastPhasedPlayer.getSeatNum()
)
isRound = true;
if (get.itemtype(_status.lastPhasedPlayer) != "player" || seatNum < _status.lastPhasedPlayer.getSeatNum()) isRound = true;
_status.lastPhasedPlayer = player;
}
} else if (player == _status.roundStart) isRound = true;
@ -3122,7 +3112,6 @@ export const Content = {
while (ui.dialogs.length) {
ui.dialogs[0].close();
}
game.phaseNumber++;
player.phaseNumber++;
game.broadcastAll(
function (player, num, popup) {
@ -3151,11 +3140,7 @@ export const Content = {
game.log();
game.log(player, "的回合开始");
player._noVibrate = true;
if (
get.config("identity_mode") != "zhong" &&
get.config("identity_mode") != "purple" &&
!_status.connectMode
) {
if (get.config("identity_mode") != "zhong" && get.config("identity_mode") != "purple" && !_status.connectMode) {
var num;
switch (get.config("auto_identity")) {
case "one":
@ -3174,12 +3159,7 @@ export const Content = {
num = 0;
break;
}
if (
num &&
!_status.identityShown &&
game.phaseNumber > game.players.length * num &&
game.showIdentity
) {
if (num && !_status.identityShown && game.phaseNumber > game.players.length * num && game.showIdentity) {
if (!_status.video) player.popup("显示身份");
_status.identityShown = true;
game.showIdentity(false);

View File

@ -786,7 +786,7 @@ export class GameEvent {
}
trigger(name) {
if (_status.video) return;
if ((this.name === "gain" || this.name === "lose") && !_status.gameDrawed) return;
if (!_status.gameDrawed && ["lose", "gain", "loseAsync", "equip", "addJudge", "addToExpansion"].includes(this.name)) return;
if (name === "gameDrawEnd") _status.gameDrawed = true;
if (name === "gameStart") {
lib.announce.publish("Noname.Game.Event.GameStart", {});

View File

@ -2441,7 +2441,6 @@ export class Create {
});
}
}
lib.init.js(lib.assetURL + "game", "pinyinjs", function () {});
lib.init.js(lib.assetURL + "game", "keyWords", function () {});
lib.updateURL =