Merge branch 'libccy:PR-Branch' into PR-Branch
This commit is contained in:
commit
ccc9e8fe20
|
@ -19107,6 +19107,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
冈崎汐:['Okazaki','Ushio'],
|
冈崎汐:['Okazaki','Ushio'],
|
||||||
神山识:['Kamiyama','Shiki'],
|
神山识:['Kamiyama','Shiki'],
|
||||||
佐藤雏:['Satou','Hina'],
|
佐藤雏:['Satou','Hina'],
|
||||||
|
篝:['Kagari'],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -668,6 +668,7 @@ window.noname_character_rank={
|
||||||
'jsrg_zhangxuan',
|
'jsrg_zhangxuan',
|
||||||
'sb_xunyu',
|
'sb_xunyu',
|
||||||
'ol_sb_taishici',
|
'ol_sb_taishici',
|
||||||
|
'tianchou',
|
||||||
],
|
],
|
||||||
bp:[
|
bp:[
|
||||||
'xin_huojun',
|
'xin_huojun',
|
||||||
|
@ -1861,6 +1862,7 @@ window.noname_character_rank={
|
||||||
'caoxian',
|
'caoxian',
|
||||||
],
|
],
|
||||||
epic:[
|
epic:[
|
||||||
|
'tianchou',
|
||||||
'star_yuanshao',
|
'star_yuanshao',
|
||||||
'yue_xiaoqiao',
|
'yue_xiaoqiao',
|
||||||
'yue_daqiao',
|
'yue_daqiao',
|
||||||
|
|
|
@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
sp_zhongdan:["cuiyan","huangfusong"],
|
sp_zhongdan:["cuiyan","huangfusong"],
|
||||||
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
|
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
|
||||||
sp_others:["hanba","caiyang"],
|
sp_others:["hanba","caiyang"],
|
||||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liyi'],
|
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liyi','tianchou'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
characterFilter:{
|
characterFilter:{
|
||||||
|
@ -30,6 +30,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
character:{
|
character:{
|
||||||
|
tianchou:['male','qun',4,['olshandao']],
|
||||||
liyi:['male','wu',4,['olchanshuang','olzhanjin']],
|
liyi:['male','wu',4,['olchanshuang','olzhanjin']],
|
||||||
caoyu:['male','wei',3,['olgongjie','olxiangxv','olxiangzuo']],
|
caoyu:['male','wei',3,['olgongjie','olxiangxv','olxiangzuo']],
|
||||||
ol_liwan:['female','wei',3,['ollianju','olsilv']],
|
ol_liwan:['female','wei',3,['ollianju','olsilv']],
|
||||||
|
@ -203,6 +204,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
luzhi:['male','wei',3,['qingzhong','weijing']]
|
luzhi:['male','wei',3,['qingzhong','weijing']]
|
||||||
},
|
},
|
||||||
characterIntro:{
|
characterIntro:{
|
||||||
|
tianchou:'田畴(169年或170年-214年或216年),字子泰,东汉右北平郡无终人,东汉末年隐士。田畴好文习武。汉初平年间,其受刘虞派遣去长安,呈送指控公孙赞奏章,献帝大悦,封为骑都尉,田畴不受。携诏返回时,刘虞已被公孙所杀,田畴到刘墓祭拜,被公孙所提,不久释放。田畴回故乡后率家族及随从数百人隐居徐无山,致力农桑,数年间增至5000家。制定法条,兴建学校,一时民风良好,乌桓、鲜卑纷纷与其结交。汉建安二十年(207年),曹操北征乌桓,田畴请为向导。上徐无山、出卢龙、过平冈、登白狼堆、至柳城,曹军大胜,封田畴为亭侯,坚辞不受。曹念田功,四次封赏,终不受,乃拜为议郎。建安二十一年(216年),田畴去世。',
|
||||||
liyi:'李异(生卒年不详),三国时期东吴将领。建安末,与谢旌率水陆三千,击破刘备军将领詹晏、陈凤。刘备领兵攻孙权时,李异与陆逊等人屯巫、秭归,为蜀将所破。黄武元年(222年),陆逊破刘备于猇亭,李异追踪蜀军,屯驻南山。清代学者赵一清认为此李异与刘璋部将李异为同一人。',
|
liyi:'李异(生卒年不详),三国时期东吴将领。建安末,与谢旌率水陆三千,击破刘备军将领詹晏、陈凤。刘备领兵攻孙权时,李异与陆逊等人屯巫、秭归,为蜀将所破。黄武元年(222年),陆逊破刘备于猇亭,李异追踪蜀军,屯驻南山。清代学者赵一清认为此李异与刘璋部将李异为同一人。',
|
||||||
caoyu:'曹宇(?-278年),字彭祖,沛国谯县(今安徽亳州)人。三国时期魏国宗室,魏武帝曹操与环夫人之子,邓哀王曹冲同母兄弟。太和六年,封为燕王。魏明帝病危,欲以大将军辅政,不果。其子常道乡公曹奂,是魏国末代皇帝,史称魏元帝。晋朝建立后,降封燕公。咸宁四年(278年),曹宇去世。',
|
caoyu:'曹宇(?-278年),字彭祖,沛国谯县(今安徽亳州)人。三国时期魏国宗室,魏武帝曹操与环夫人之子,邓哀王曹冲同母兄弟。太和六年,封为燕王。魏明帝病危,欲以大将军辅政,不果。其子常道乡公曹奂,是魏国末代皇帝,史称魏元帝。晋朝建立后,降封燕公。咸宁四年(278年),曹宇去世。',
|
||||||
zhangyan:'张燕,本姓褚,生卒年不详,常山真定(今河北正定南)人,东汉末年黑山军首领。张燕剽捍,敏捷过人,军中称为“飞燕”。官渡之战时投降曹操,被任命为平北将军,封安国亭侯。死后其子张方袭爵。',
|
zhangyan:'张燕,本姓褚,生卒年不详,常山真定(今河北正定南)人,东汉末年黑山军首领。张燕剽捍,敏捷过人,军中称为“飞燕”。官渡之战时投降曹操,被任命为平北将军,封安国亭侯。死后其子张方袭爵。',
|
||||||
|
@ -707,6 +709,57 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
skill:{
|
skill:{
|
||||||
|
//田畴
|
||||||
|
olshandao:{
|
||||||
|
audio:2,
|
||||||
|
enable:'phaseUse',
|
||||||
|
filter(event,player){
|
||||||
|
return game.hasPlayer(target=>lib.skill.olshandao.filterTarget(null,player,target));
|
||||||
|
},
|
||||||
|
filterTarget(card,player,target){
|
||||||
|
return target.countCards('h');
|
||||||
|
},
|
||||||
|
usable:1,
|
||||||
|
selectTarget:[1,Infinity],
|
||||||
|
multitarget:true,
|
||||||
|
multiline:true,
|
||||||
|
async content(event,trigger,player){
|
||||||
|
const wugu=new lib.element.VCard({name:'wugu'});
|
||||||
|
const wanjian=new lib.element.VCard({name:'wanjian'});
|
||||||
|
const targets=game.filterPlayer(target=>{
|
||||||
|
if(target==player) return false;
|
||||||
|
return !event.targets.includes(target)&&player.canUse(wanjian,target,false);
|
||||||
|
}),targetx=event.targets.sortBySeat();
|
||||||
|
let dialog=['将这些角色的各一张牌置于牌堆顶,然后视为对这些角色使用【五谷丰登】'];
|
||||||
|
for(const target of targetx){
|
||||||
|
const name=(target==player?'你':get.translation(target));
|
||||||
|
if(target.countCards('h')){
|
||||||
|
dialog.add('<div class="text center">'+name+'的手牌区</div>');
|
||||||
|
if(player.hasSkillTag('viewHandcard',null,target,true)||player==target) dialog.push(target.getCards('h'));
|
||||||
|
else dialog.push([target.getCards('h'),'blank']);
|
||||||
|
}
|
||||||
|
if(target.countCards('e')) dialog.addArray(['<div class="text center">'+name+'的装备区</div>',target.getCards('e')]);
|
||||||
|
}
|
||||||
|
const {result:{bool,links}}=await player.chooseButton(dialog,event.targets.length,true).set('filterButton',button=>{
|
||||||
|
return !ui.selected.buttons.some(but=>get.owner(but.link)==get.owner(button.link));
|
||||||
|
}).set('ai',button=>1/(get.value(button.link,get.owner(button.link))||0.5));
|
||||||
|
if(bool){
|
||||||
|
const cards=links.sort((a,b)=>targetx.indexOf(get.owner(a))-targetx.indexOf(get.owner(b)));
|
||||||
|
for(const card of cards){
|
||||||
|
const target=get.owner(card);
|
||||||
|
target.$throw(1,1000);
|
||||||
|
await target.lose([card],ui.cardPile,'insert');
|
||||||
|
}
|
||||||
|
const targety=targetx.filter(target=>player.canUse(wugu,target,false));
|
||||||
|
if(targety.length) await player.useCard(wugu,targety,false);
|
||||||
|
if(targets.length) await player.useCard(wanjian,targets,false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ai:{
|
||||||
|
order:9,
|
||||||
|
result:{target:1},
|
||||||
|
},
|
||||||
|
},
|
||||||
//李异
|
//李异
|
||||||
olchanshuang:{
|
olchanshuang:{
|
||||||
audio:2,
|
audio:2,
|
||||||
|
@ -27055,8 +27108,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
olchanshuang:'缠双',
|
olchanshuang:'缠双',
|
||||||
olchanshuang_info:'①出牌阶段限一次,你可以选择一名其他角色。你与其依次选择〖缠双③〗的一项,然后你与其依次执行各自选择的项。②结束阶段,若X大于0,你执行〖缠双③〗的前X项(X为你本回合以任意形式执行过的〖缠双③〗的选项数)。③选项:1.重铸一张牌;2.使用一张【杀】;3.弃置两张牌。',
|
olchanshuang_info:'①出牌阶段限一次,你可以选择一名其他角色。你与其依次选择〖缠双③〗的一项,然后你与其依次执行各自选择的项。②结束阶段,若X大于0,你执行〖缠双③〗的前X项(X为你本回合以任意形式执行过的〖缠双③〗的选项数)。③选项:1.重铸一张牌;2.使用一张【杀】;3.弃置两张牌。',
|
||||||
olzhanjin:'蘸金',
|
olzhanjin:'蘸金',
|
||||||
olzhanjin_guanshi:'贯石斧(蘸金)',
|
|
||||||
olzhanjin_info:'锁定技,若你有空置的武器栏,则你视为装备【贯石斧】。',
|
olzhanjin_info:'锁定技,若你有空置的武器栏,则你视为装备【贯石斧】。',
|
||||||
|
tianchou:'田畴',
|
||||||
|
olshandao:'善刀',
|
||||||
|
olshandao_info:'出牌阶段限一次,你可以选择任意名角色,你选择这些角色的各一张牌,依次将这些牌放置到牌堆顶,然后你视为对这些角色使用【五谷丰登】,然后你视为对这些角色外的所有其他角色使用【万箭齐发】。',
|
||||||
|
|
||||||
sp_tianji:'天极·皇室宗亲',
|
sp_tianji:'天极·皇室宗亲',
|
||||||
sp_sibi:'四弼·辅国文曲',
|
sp_sibi:'四弼·辅国文曲',
|
||||||
|
|
|
@ -273,12 +273,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ai:{
|
ai:{
|
||||||
order:function(item,player){
|
order:10,
|
||||||
return 10;
|
|
||||||
},
|
|
||||||
respondShan:true,
|
respondShan:true,
|
||||||
respondSha:true,
|
respondSha:true,
|
||||||
skillTagFilter:function(player,tag){
|
skillTagFilter:function(player,tag,arg){
|
||||||
|
if(arg=='respond') return false;
|
||||||
var hs=player.getCards('h');
|
var hs=player.getCards('h');
|
||||||
if(hs.length!=Math.max(0,hs.length)) return false;
|
if(hs.length!=Math.max(0,hs.length)) return false;
|
||||||
if(hs.length>1){
|
if(hs.length>1){
|
||||||
|
|
|
@ -61,6 +61,7 @@ var pinyin_dict_polyphone = {
|
||||||
"安卡": " kǎ",
|
"安卡": " kǎ",
|
||||||
"卡玛": "kǎ ",
|
"卡玛": "kǎ ",
|
||||||
"梼杌": "táo ",
|
"梼杌": "táo ",
|
||||||
|
"亚煞极": " shà ",
|
||||||
|
|
||||||
"库特莉亚芙卡": " kǎ",
|
"库特莉亚芙卡": " kǎ",
|
||||||
"露娜": "lù ",
|
"露娜": "lù ",
|
||||||
|
@ -174,6 +175,10 @@ var pinyin_dict_polyphone = {
|
||||||
"沾露": " lù",
|
"沾露": " lù",
|
||||||
"禁咒": "jìn ",
|
"禁咒": "jìn ",
|
||||||
"挟令": "xié lìng",
|
"挟令": "xié lìng",
|
||||||
|
"七煞": " shà",
|
||||||
|
"冥煞": " shà",
|
||||||
|
"虎煞": " shà",
|
||||||
|
"煞魂": "shà ",
|
||||||
// END
|
// END
|
||||||
"撒贝宁": "sà ",
|
"撒贝宁": "sà ",
|
||||||
"卡比": "kǎ ",
|
"卡比": "kǎ ",
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
|
@ -2231,46 +2231,52 @@ export class Get extends Uninstantable {
|
||||||
default: return num.toString();
|
default: return num.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static cnNumber(num, two) {
|
static cnNumber(num, ordinal) {
|
||||||
if (num == Infinity) return '∞';
|
|
||||||
if (typeof num != 'number' && typeof num != 'string') return num;
|
|
||||||
if (isNaN(num)) return '';
|
if (isNaN(num)) return '';
|
||||||
let numStr = num.toString();
|
let numStr = num.toString();
|
||||||
|
if (num === 'Infinity') return '∞';
|
||||||
|
if (num === '-Infinity') return '-∞';
|
||||||
if (!/^\d+$/.test(numStr)) return num;
|
if (!/^\d+$/.test(numStr)) return num;
|
||||||
|
|
||||||
const chars = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
const chars = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
||||||
const units = ['', '十', '百', '千'];
|
const units = ['', '十', '百', '千'];
|
||||||
|
|
||||||
if (numStr.length <= 2) {//两位数以下单独处理保证效率
|
if (numStr.length <= 2) {//两位数以下单独处理保证效率
|
||||||
if (numStr.length == 1) return !two && num == 2 ? '两' : chars[num];
|
if (numStr.length === 1) return !ordinal && num === 2 ? '两' : chars[num];
|
||||||
return (numStr[0] == '1' ? '' : chars[numStr[0]]) + '十' + (numStr[1] == '0' ? '' : chars[numStr[1]]);
|
return `${numStr[0] === '1' ? '' : chars[numStr[0]]}十${numStr[1] === '0' ? '' : chars[numStr[1]]}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
numStr = numStr.replace(/(?=(\d{4})+$)/g, ',').split(',').filter(Boolean);
|
numStr = numStr.replace(/(?=(\d{4})+$)/g, ',').split(',').filter(Boolean);
|
||||||
const handleZero = str => str.replace(/零{2,}/g, '零').replace(/零+$/g, '');
|
const handleZero = str => str.replace(/零{2,}/g, '零').replace(/(?<=.+)零+$/g, '');
|
||||||
const _transform = str => {
|
const _transform = str => {
|
||||||
if (str === '0000') return '零';
|
if (str === '2' && !ordinal) return '两';
|
||||||
if (!two && str === '2') return '两';
|
|
||||||
let result = '';
|
let result = '';
|
||||||
for (let i = 0; i < str.length; i++) {
|
for (let i = 0; i < str.length; i++) {
|
||||||
let char = chars[+str[i]];
|
const part = str[str.length - 1 - i];
|
||||||
const unitIndex = str.length - 1 - i;
|
let char = chars[+part];
|
||||||
let unit = units[unitIndex];
|
let unit = units[i];
|
||||||
if (!two && char === '二' && unitIndex > 1) char = '两';
|
|
||||||
if (char === '零') unit = '';
|
if (char === '零') unit = '';
|
||||||
result += char + unit;
|
else if (char === '一' && i === 1) char = '';
|
||||||
|
else if (char === '二' && i > 1 && !ordinal) char = '两';
|
||||||
|
result = char + unit + result;
|
||||||
}
|
}
|
||||||
result = handleZero(result);
|
result = handleZero(result);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
let result = '';
|
let result = '';
|
||||||
|
let tempYi = '';
|
||||||
for (let i = 0; i < numStr.length; i++) {
|
for (let i = 0; i < numStr.length; i++) {
|
||||||
const part = numStr[i];
|
const part = numStr[numStr.length - 1 - i];
|
||||||
let char = _transform(part);
|
let char = _transform(part);
|
||||||
const unitIndex = numStr.length - 1 - i;
|
let unit = '';
|
||||||
let unit = unitIndex % 2 ? '万' : '亿'.repeat(unitIndex / 2);
|
if (i % 2) {
|
||||||
|
[unit, tempYi] = ['万' + tempYi, ''];
|
||||||
if (char === '零') unit = '';
|
if (char === '零') unit = '';
|
||||||
result += char + unit;
|
} else {
|
||||||
|
unit = '亿'.repeat(i / 2);
|
||||||
|
if (char === '零') [unit, tempYi] = ['', unit];
|
||||||
|
}
|
||||||
|
result = char + unit + result;
|
||||||
}
|
}
|
||||||
result = handleZero(result);
|
result = handleZero(result);
|
||||||
return result;
|
return result;
|
||||||
|
@ -2867,7 +2873,7 @@ export class Get extends Uninstantable {
|
||||||
return lib.characterInitFilter[node.name](tag) !== false;
|
return lib.characterInitFilter[node.name](tag) !== false;
|
||||||
});
|
});
|
||||||
if(initFilters.length){
|
if(initFilters.length){
|
||||||
const str = initFilters.reduce((strx, stry) => strx + lib.InitFilter[stry] + '<br>').slice(0, -4);
|
const str = initFilters.reduce((strx, stry) => strx + lib.InitFilter[stry] + '<br>', '').slice(0, -4);
|
||||||
uiintro.addText(str);
|
uiintro.addText(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue