Merge branch 'libccy:PR-Branch' into PR-Branch
|
@ -68,7 +68,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
if(typeof event.baseDamage!='number') event.baseDamage=1;
|
||||
if(target.isDying()||event.getParent(2).type=='dying'){
|
||||
target.recover(event.baseDamage);
|
||||
target.recover();
|
||||
if(_status.currentPhase==target){
|
||||
target.getStat().card.jiu--;
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
game.delay(2);
|
||||
"step 2"
|
||||
if(result.bool){
|
||||
target.damage('fire',event.baseDamage||1);
|
||||
target.damage('fire');
|
||||
}
|
||||
else{
|
||||
target.addTempSkill('huogong2');
|
||||
|
|
|
@ -462,13 +462,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
target.discard(target.getCards('e',function(card){
|
||||
return lib.filter.cardDiscardable(card,target,'shuiyanqijunx');
|
||||
}));
|
||||
target.damage('thunder',event.baseDamage||1);
|
||||
target.damage('thunder');
|
||||
event.finish();
|
||||
}
|
||||
else if(!target.countCards('e',function(card){
|
||||
return lib.filter.cardDiscardable(card,target,'shuiyanqijunx');
|
||||
})){
|
||||
var next=target.damage(event.baseDamage||1);
|
||||
var next=target.damage();
|
||||
if(!get.is.single()) next.nature='thunder';
|
||||
event.finish();
|
||||
return;
|
||||
|
@ -489,7 +489,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}));
|
||||
}
|
||||
else{
|
||||
var next=target.damage(event.baseDamage||1);
|
||||
var next=target.damage();
|
||||
if(!get.is.single()) next.nature='thunder'
|
||||
}
|
||||
event.finish();
|
||||
|
@ -861,7 +861,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
selectTarget:-1,
|
||||
modTarget:true,
|
||||
content:function(){
|
||||
target.damage('fire',event.baseDamage||1);
|
||||
target.damage('fire');
|
||||
},
|
||||
ai:{
|
||||
order:5,
|
||||
|
|
|
@ -171,7 +171,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
"step 3"
|
||||
if((!result||!result.bool||!result.result||result.result!='shaned')&&!event.unhurt){
|
||||
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
|
||||
target.damage(get.nature(event.card));
|
||||
event.result={bool:true}
|
||||
event.trigger('shaDamage');
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
});
|
||||
"step 5"
|
||||
if((!result||!result.bool)&&!event.unhurt){
|
||||
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
|
||||
target.damage(get.nature(event.card));
|
||||
event.result={bool:true}
|
||||
event.trigger('shaDamage');
|
||||
event.finish();
|
||||
|
@ -203,7 +203,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
"step 6"
|
||||
if((!result||!result.bool)&&!event.unhurt){
|
||||
target.damage(get.nature(event.card),event.baseDamage+event.extraDamage);
|
||||
target.damage(get.nature(event.card));
|
||||
event.result={bool:true}
|
||||
event.trigger('shaDamage');
|
||||
event.finish();
|
||||
|
@ -388,7 +388,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
return target.hp<target.maxHp;
|
||||
},
|
||||
content:function(){
|
||||
target.recover(event.baseDamage||1);
|
||||
target.recover();
|
||||
},
|
||||
ai:{
|
||||
basic:{
|
||||
|
@ -846,7 +846,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
return target.isHealthy();
|
||||
},
|
||||
content:function(){
|
||||
target.recover(event.baseDamage||1);
|
||||
target.recover();
|
||||
},
|
||||
ai:{
|
||||
basic:{
|
||||
|
@ -895,7 +895,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
"step 1"
|
||||
if(result.bool==false){
|
||||
target.damage(event.baseDamage,event.customSource||player);
|
||||
target.damage();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
|
@ -970,7 +970,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
"step 1"
|
||||
if(result.bool==false){
|
||||
target.damage(event.baseDamage);
|
||||
target.damage();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
|
@ -1147,10 +1147,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
else{
|
||||
if(event.turn==target){
|
||||
target.damage(event.baseDamage+event.extraDamage);
|
||||
target.damage();
|
||||
}
|
||||
else{
|
||||
player.damage(target,event.baseDamage+event.extraDamage);
|
||||
player.damage(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(result.bool){
|
||||
target.showCards(result.cards);
|
||||
if(get.suit(card)!=get.suit(result.cards[0])) target.damage(event.baseDamage||1);
|
||||
if(get.suit(card)!=get.suit(result.cards[0])) target.damage();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
|
|
|
@ -30,7 +30,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
target.recover(event.baseDamage||1);
|
||||
target.recover();
|
||||
'step 1'
|
||||
if(target.hasCard(function(card){
|
||||
return _status.connectMode||get.name(card,target)=='du';
|
||||
|
@ -56,6 +56,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
'step 0'
|
||||
if(typeof event.baseDamage!='number') event.baseDamage=1;
|
||||
if(typeof event.extraDamage!='number') event.extraDamage=0;
|
||||
if(!target.countCards('h')||!player.isIn()) event.finish();
|
||||
else player.choosePlayerCard(target,'h',true);
|
||||
'step 1'
|
||||
|
@ -64,8 +65,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
var str=get.translation(player);
|
||||
player.showCards(event.show_card);
|
||||
target.chooseControl().set('choiceList',[
|
||||
'令'+str+'获得'+get.translation(event.show_card),
|
||||
'受到'+str+'造成的'+event.baseDamage+'点伤害',
|
||||
`令${str}获得${get.translation(event.show_card)}`,
|
||||
`受到${str}造成的${event.baseDamage+event.extraDamage}点伤害`,
|
||||
]).set('ai',function(){
|
||||
var evt=_status.event.getParent(),player=evt.target,source=evt.player,card=evt.show_card;
|
||||
if(get.damageEffect(player,source,player)>0) return 1;
|
||||
|
|
|
@ -19199,7 +19199,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
雾岛佳乃:['Kirishima','Kano'],
|
||||
苍井绘梨花:['Aoi','Erika'],
|
||||
藏里见:['Kura','Satomi'],
|
||||
喵呜·喵呼:['Myau','Mya-fu'],
|
||||
'喵呜·喵呼':['Myau','Mya-fu'],
|
||||
喵呜喵呼:['Myau','Mya-fu'],
|
||||
伊吹风子:['Ibuki','Fuuko'],
|
||||
久岛鸥:['Kushima','Kamome'],
|
||||
|
|
|
@ -830,11 +830,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
'step 0'
|
||||
player.removeMark('yizhao',player.countMark('yizhao'));
|
||||
var cards=get.cards(ui.cardPile.childElementCount+1);
|
||||
for(var i=0;i<cards.length;i++){
|
||||
ui.cardPile.insertBefore(cards[i],ui.cardPile.childNodes[get.rand(ui.cardPile.childElementCount)]);
|
||||
}
|
||||
game.updateRoundNumber();
|
||||
game.washCard();
|
||||
'step 1'
|
||||
var pile=Array.from(ui.cardPile.childNodes);
|
||||
if(pile.length<3) return;
|
||||
|
@ -903,9 +899,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger:{global:'phaseEnd'},
|
||||
direct:true,
|
||||
filter:function(event,player){
|
||||
return player.hasSkill('tianjie_shuffled');
|
||||
return game.hasGlobalHistory('cardMove',evt=>evt.washCard)&&game.hasPlayer(current=>current!=player);
|
||||
},
|
||||
group:'tianjie_effect',
|
||||
skillAnimation:true,
|
||||
animationColor:'metal',
|
||||
content:function(){
|
||||
|
@ -925,18 +920,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
trigger:{global:'washCard'},
|
||||
forced:true,
|
||||
silent:true,
|
||||
charlotte:true,
|
||||
content:function(){
|
||||
player.addTempSkill('tianjie_shuffled');
|
||||
},
|
||||
},
|
||||
shuffled:{charlotte:true},
|
||||
}
|
||||
},
|
||||
shencai:{
|
||||
audio:2,
|
||||
|
|
|
@ -1080,7 +1080,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.delay(2);
|
||||
"step 2"
|
||||
if(result.bool){
|
||||
target.damage('fire',event.baseDamage||1);
|
||||
target.damage('fire');
|
||||
}
|
||||
else{
|
||||
target.addTempSkill('huogong2');
|
||||
|
|
|
@ -3050,13 +3050,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(!player.hasZhuSkill('sbhuangtian')||!player.hasSkill('sbguidao',null,false,false)) return false;
|
||||
if(!event.source||player==event.source||event.source.group!='qun') return false;
|
||||
if(player.hasSkill('sbguidao')&&player.countMark('sbguidao')>=8) return false;
|
||||
// if(player.countMark('sbhuangtian_count')>999) return false;
|
||||
if(player.countMark('sbhuangtian_count')>=4) return false;
|
||||
return true;
|
||||
},
|
||||
content:function(){
|
||||
player.addMark('sbguidao',1);
|
||||
// player.addTempSkill('sbhuangtian_count','roundStart');
|
||||
// player.addMark('sbhuangtian_count',1,false);
|
||||
player.addTempSkill('sbhuangtian_count','roundStart');
|
||||
player.addMark('sbhuangtian_count',1,false);
|
||||
}
|
||||
},
|
||||
count:{onremove:true}
|
||||
|
@ -4645,7 +4645,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbguidao:'鬼道',
|
||||
sbguidao_info:'①游戏开始时,你获得4枚“道兵”标记。②“道兵”上限为8。③一名角色受到属性伤害后,你获得2枚“道兵”。④当你受到伤害时,你可以弃2枚“道兵”并防止此伤害。然后若当前回合角色不为你,〖鬼道③〗于你下回合开始前无效。',
|
||||
sbhuangtian:'黄天',
|
||||
sbhuangtian_info:'主公技,锁定技。①回合开始时,若本回合为你的第一个回合且游戏轮数为1,且游戏内没有【太平要术】,你装备【太平要术】。②其他群势力角色造成伤害后,若你拥有〖鬼道〗,你获得1枚“道兵”。',
|
||||
sbhuangtian_info:'主公技,锁定技。①回合开始时,若本回合为你的第一个回合且游戏轮数为1,且游戏内没有【太平要术】,你装备【太平要术】。②其他群势力角色造成伤害后,若你拥有〖鬼道〗,你获得1枚“道兵”(每轮你至多以此法获得4枚“道兵”)。',
|
||||
sb_caocao:'谋曹操',
|
||||
sbjianxiong:'奸雄',
|
||||
sbjianxiong_info:'①游戏开始时,你可获得至多2枚“治世”标记。②当你受到伤害后,你可获得伤害牌,摸1-X张牌(X为“治世”数),然后你可弃1枚“治世”。',
|
||||
|
|
649
character/sp.js
|
@ -13,7 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'],
|
||||
sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'],
|
||||
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang'],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_feiyi','ol_lvboshe'],
|
||||
sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
|
||||
sp_wanglang:['ol_wanglang','ol_puyuan','ol_zhouqun'],
|
||||
sp_zhongdan:["cuiyan","huangfusong"],
|
||||
|
@ -25,9 +25,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
tianyu:function(mode){
|
||||
return mode!='chess'&&mode!='tafang'&&mode!='stone';
|
||||
},
|
||||
ol_dongzhao:function(mode){
|
||||
return mode=='identity'&&['normal','zhong'].contains(_status.mode);
|
||||
},
|
||||
ol_lvboshe:function(mode){
|
||||
return mode=='doudizhu';
|
||||
},
|
||||
},
|
||||
character:{
|
||||
ol_luyusheng:['female','wu',3,['olcangxin','skill_luyusheng_B'],['unseen']],
|
||||
ol_tw_zhangji:['male','wei',3,['skill_zhangji_A','skill_zhangji_B'],['unseen']],
|
||||
ol_feiyi:['male','shu',3,['skill_feiyi_A','skill_feiyi_B'],['unseen']],
|
||||
ol_lvboshe:['male','qun',4,['skill_lvboshe'],['unseen']],
|
||||
ol_luyusheng:['female','wu',3,['olcangxin','olrunwei']],
|
||||
caoxi:['male','wei',3,['olgangshu','oljianxuan']],
|
||||
ol_pengyang:['male','shu',3,['olqifan','oltuishi','nzry_cunmu']],
|
||||
ol_qianzhao:['male','wei',4,['olweifu','olkuansai']],
|
||||
|
@ -192,11 +201,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xizhicai:['male','wei',3,['tiandu','xianfu','chouce']],
|
||||
quyi:['male','qun',4,['fuqi','jiaozi']],
|
||||
|
||||
luzhi:['male','wei',3,['qingzhong','weijing']],
|
||||
|
||||
//kaisa:["male","western",4,["zhengfu"]],
|
||||
luzhi:['male','wei',3,['qingzhong','weijing']]
|
||||
},
|
||||
characterIntro:{
|
||||
lvboshe:'吕伯奢,东汉成皋(今河南荥阳)人,曹操父亲曹嵩的故友。曹操与陈宫在逃离董卓避祸,返回乡里的途中借宿于吕伯奢家,未伤其人,有贼八人欲捉曹操,曹操杀之,明罗贯中在历史小说《三国演义》中将这段历史进行了丑化加工,也成为小说中曹操名言“宁教我负天下人,休教天下人负我”的出处。',
|
||||
caoxi:'曹羲(?-249年),字昭叔。曹真之子,曹爽之弟。为人有学识,明律法。司马懿曾组织朝议改革九品中正制废除九品而留中正,曹羲认为此举并无区别,最终都是决定于人的人治。曹爽掌权后,受封中领军,掌握禁兵,封安乡侯。曹爽及诸兄弟轻视司马懿,恣意妄为,经常外出狩猎,曹羲屡次劝谏,不被采纳。249年,司马懿发动高平陵政变,被夷三族。',
|
||||
duanjiong:'段颎(?-179年),字纪明,武威姑臧(今甘肃省武威市)人。东汉名将,西域都护段会宗从曾孙,与皇甫规(字威明)、张奂(字然明)并称“凉州三明”。段颎少时学习骑射,有文武智略,最初被举为孝廉,为宪陵园丞、阳陵令,有治理之才。汉桓帝时入军旅,先破鲜卑,后讨平东郭窦、公孙举起事,以功封列侯。延熹二年(159年)起戍边征战十余年,百战羌人,至永康元年(167年)平定西羌,建宁二年(169年)平定东羌,前后斩东西羌六万余级。累功封新丰县侯。建宁三年(170年),段颎被征入朝,历任侍中、执金吾、河南尹、司隶校尉等职,他党附宦官、捕杀太学生,因而得保富贵,两度出任太尉。光和二年(179年),权宦王甫罪行被揭发,段颎受牵连下狱,其后在狱中饮鸩而死。',
|
||||
haopu:'郝普,字子太,义阳(治所在今湖北枣阳东南)人。刘备入川后,郝普为零陵太守。建安二十年(215年),吴将吕蒙进攻荆州三郡,唯有郝普坚守待援。但援兵久久不至,其挚友邓玄之又被吕蒙所骗,郝普也因此上当,投降吴国。湘水划界后,郝普回归刘备。建安二十四年(219年),吕蒙再次袭击荆州,击败关羽,郝普再次投降,最终归顺吴国并官至廷尉。郝普与隐蕃亲善,隐蕃蓄谋叛变事情败露,他受到牵连,因此自杀。在刘备集团的5个荆州郡守中,郝普是唯一一个抵抗过东吴的荆州郡守。',
|
||||
|
@ -696,74 +704,437 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
skill:{
|
||||
//张既
|
||||
skill_zhangji_A:{
|
||||
audio:2,
|
||||
trigger:{player:'useCardToPlayered'},
|
||||
filter:function(event,player){
|
||||
if(player.countMark('skill_zhangji_A_count')>=player.hp) return false;
|
||||
return event.target!=player&&event.target.countCards('h')&&player.isPhaseUsing();
|
||||
},
|
||||
check:function(event,player){
|
||||
return get.attitude(player,event.target)<0;
|
||||
},
|
||||
logTarget:'target',
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.addTempSkill('skill_zhangji_A_count','phaseUseAfter');
|
||||
player.addMark('skill_zhangji_A_count',1,false);
|
||||
player.viewHandcards(trigger.target);
|
||||
var list=[],choiceList=[
|
||||
'弃置'+get.translation(trigger.target)+'的一张牌,然后若弃置的牌的是能造成火焰伤害的牌,你摸一张牌',
|
||||
'重铸'+get.translation(trigger.target)+'手牌中的所有【杀】和【决斗】',
|
||||
'你与'+get.translation(trigger.target)+'互相对对方造成1点伤害',
|
||||
];
|
||||
list.push('选项一');
|
||||
if(trigger.target.countCards('h',{name:['sha','juedou']})) list.push('选项二');
|
||||
else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
|
||||
if(!trigger.target.countCards('h',{name:'shan'})) list.push('选项三');
|
||||
else choiceList[2]='<span style="opacity:0.5">'+choiceList[2]+'</span>';
|
||||
player.chooseControl(list).set('prompt',get.prompt('tspowei',target)).set('choiceList',choiceList).set('ai',function(){
|
||||
var player=_status.event.player,target=_status.event.target;
|
||||
if(list.contains('选项三')&&player.hp+player.countCards('hs',{name:'tao'})>2) return '选项三';
|
||||
if(list.contains('选项二')&&target.countCards('h',{name:['sha','juedou']})>1) return'选项二';
|
||||
return '选项一';
|
||||
}).set('target',trigger.target);
|
||||
'step 1'
|
||||
game.log(player,'选择了','#y'+result.control);
|
||||
switch(result.control){
|
||||
case '选项一':
|
||||
player.discardPlayerCard('he',trigger.target,'visible',true);
|
||||
break;
|
||||
case '选项二':
|
||||
var cards=trigger.target.getCards('h',{name:['sha','juedou']}).filter(card=>trigger.target.canRecast(card));
|
||||
trigger.target.recast(cards);
|
||||
event.finish();
|
||||
break;
|
||||
case '选项三':
|
||||
trigger.target.damage(player);
|
||||
player.damage(trigger.target);
|
||||
event.finish();
|
||||
break;
|
||||
}
|
||||
'step 2'
|
||||
if(result.bool&&get.tag(result.cards[0],'fireDamage')) player.draw();
|
||||
},
|
||||
subSkill:{
|
||||
count:{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
},
|
||||
},
|
||||
},
|
||||
skill_zhangji_B:{
|
||||
getNum:function(name){
|
||||
var num=0;
|
||||
if(name=='litong') num=1;
|
||||
else switch(game.getRarity(name)){
|
||||
case 'junk':num=1;break;
|
||||
case 'rare':num=2;break;
|
||||
case 'epic':num=3;break;
|
||||
case 'legend':num=4;break;
|
||||
}
|
||||
return num;
|
||||
},
|
||||
getCharacter:function(list){
|
||||
var listx=[],num=0;
|
||||
for(var name of list){
|
||||
var numx=lib.skill.skill_zhangji_B.getNum(name);
|
||||
if(numx>num){
|
||||
num=numx;
|
||||
listx=[name];
|
||||
}
|
||||
else if(numx==num) listx.push(name);
|
||||
}
|
||||
return listx;
|
||||
},
|
||||
group:'skill_zhangji_B_jieming',
|
||||
audio:2,
|
||||
trigger:{player:'dying'},
|
||||
skillAnimation:true,
|
||||
animationColor:'water',
|
||||
direct:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
if(!_status.characterlist) lib.skill.pingjian.initList();
|
||||
player.chooseTarget(get.prompt('skill_zhangji_B'),'令一名其他角色选择是否更换武将牌',lib.filter.notMe).set('ai',function(target){
|
||||
var att=get.attitude(_status.event.player,target);
|
||||
var num=lib.skill.skill_zhangji_B.getNum(target.name);
|
||||
if(target.name2!=undefined) num=Math.min(num,lib.skill.skill_zhangji_B.getNum(target.name2));
|
||||
return att*(4-num);
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
event.target=target;
|
||||
var num=target.maxHp;
|
||||
event.num=num;
|
||||
player.logSkill('skill_zhangji_B',target);
|
||||
var list=[];
|
||||
for(var i=0;i<_status.characterlist.length;i++){
|
||||
if(lib.character[_status.characterlist[i]][1]=='wei') list.push(_status.characterlist[i]);
|
||||
}
|
||||
list=list.randomGets(5);
|
||||
var bolDialog=['请选择替换的武将',[list,'character']];
|
||||
target.chooseButton(bolDialog).set('ai',function(button){
|
||||
var target=_status.event.player;
|
||||
var num=lib.skill.skill_zhangji_B.getNum(target.name);
|
||||
if(target.name2!=undefined) num=Math.min(num,lib.skill.skill_zhangji_B.getNum(target.name2));
|
||||
return lib.skill.skill_zhangji_B.getNum(button.link)-num;
|
||||
});
|
||||
}
|
||||
else event.finish();
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
event.character=result.links[0];
|
||||
if(target.name2!=undefined) target.chooseControl(target.name,target.name2).set('prompt','请选择要更换的武将牌').set('ai',function(){
|
||||
return lib.skill.skill_zhangji_B.getNum(target.name)<lib.skill.skill_zhangji_B.getNum(target.name2)?target.name:target.name2;
|
||||
});
|
||||
else result.control=target.name;
|
||||
}
|
||||
else{
|
||||
target.chat('拒绝');
|
||||
game.log('但',target,'拒绝更换其武将牌');
|
||||
event.finish();
|
||||
}
|
||||
'step 3'
|
||||
if(result.control==target.name) target.changeGroup('wei',false);
|
||||
game.log(target,'将','#g'+get.translation(result.control),'替换为了','#g'+get.translation(event.character));
|
||||
target.reinit(result.control,event.character,false);
|
||||
target.maxHp=num;
|
||||
target.update();
|
||||
},
|
||||
subSkill:{
|
||||
jieming:{
|
||||
audio:'skill_zhangji_B',
|
||||
trigger:{player:'damageEnd'},
|
||||
filter:function(event,player){
|
||||
return game.hasPlayer(function(current){
|
||||
return current.countCards('h')<current.maxHp;
|
||||
});
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
event.count=trigger.num;
|
||||
'step 1'
|
||||
event.count--;
|
||||
player.chooseTarget(get.prompt('skill_zhangji_B'),'令一名手牌数小于其体力上限的角色摸三张牌,然后其将手牌数调整至其体力上限值',function(card,player,target){
|
||||
return target.countCards('h')<target.maxHp;
|
||||
}).set('ai',function(target){
|
||||
var att=get.attitude(_status.event.player,target);
|
||||
if(target.hasSkillTag('nogain')) att/=6;
|
||||
if(att>2) return Math.min(5,target.maxHp)-target.countCards('h');
|
||||
return att/3;
|
||||
});
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
event.target=target;
|
||||
player.logSkill('skill_zhangji_B_jieming',target);
|
||||
target.draw(3);
|
||||
}
|
||||
else event.finish();
|
||||
'step 3'
|
||||
if(target.countCards('h')>target.maxHp) target.chooseToDiscard('h',target.countCards('h')-target.maxHp,true);
|
||||
if(event.count>0&&game.hasPlayer(function(current){
|
||||
return current.countCards('h')<current.maxHp;
|
||||
})&&player.hasSkill('skill_zhangji_B')) event.goto(1);
|
||||
},
|
||||
ai:{
|
||||
maixie:true,
|
||||
maixie_hp:true,
|
||||
effect:{
|
||||
target:function(card,player,target,current){
|
||||
if(get.tag(card,'damage')&&target.hp>1){
|
||||
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
|
||||
var max=0;
|
||||
var players=game.filterPlayer();
|
||||
for(var i=0;i<players.length;i++){
|
||||
if(get.attitude(target,players[i])>0){
|
||||
max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max);
|
||||
}
|
||||
}
|
||||
switch(max){
|
||||
case 0:return 2;
|
||||
case 1:return 1.5;
|
||||
case 2:return [1,2];
|
||||
default:return [0,max];
|
||||
}
|
||||
}
|
||||
if((card.name=='tao'||card.name=='caoyao')&&
|
||||
target.hp>1&&target.countCards('h')<=target.hp) return [0,0];
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//费祎
|
||||
skill_feiyi_A:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
var num=player.countCards('h')%2;
|
||||
if(num==0&&!player.countCards('h')) return false;
|
||||
return !player.hasSkill('skill_feiyi_A_'+num);
|
||||
},
|
||||
filterCard:function(card,player){
|
||||
return player.countCards('h')%2==0;
|
||||
},
|
||||
selectCard:function(){
|
||||
var player=_status.event.player;
|
||||
if(player.countCards('h')%2==0) return [player.countCards('h')/2,Infinity];
|
||||
return -1;
|
||||
},
|
||||
check:function(card){
|
||||
if(player.hasSkill('skill_feiyi_B')){
|
||||
if(player.countCards('h')-ui.selected.cards.length>1) return 1/(get.value(card)||0.5);
|
||||
return 0;
|
||||
}
|
||||
if(ui.selected.cards.length<player.countCards('h')/2) return 5-get.value(card);
|
||||
return 0;
|
||||
},
|
||||
complexCard:true,
|
||||
delay:0,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.addTempSkill('skill_feiyi_A_'+(cards.length?'0':'1'),'phaseUseAfter');
|
||||
if(cards.length){
|
||||
player.draw(3)
|
||||
event.finish();
|
||||
}
|
||||
else player.draw(3);
|
||||
'step 2'
|
||||
player.chooseToDiscard('h','技能:弃置至少一半手牌',[Math.floor(player.countCards('h')/2),Infinity],true).set('ai',card=>{
|
||||
var player=_status.event.player;
|
||||
if(player.hasSkill('skill_feiyi_B')&&player.countCards('h')-ui.selected.cards.length>1) return 1/(get.value(card)||0.5);
|
||||
if(!player.hasSkill('skill_feiyi_B')&&ui.selected.cards.length<Math.floor(player.countCards('h')/2)) return 1/(get.value(card)||0.5);
|
||||
return 0;
|
||||
});
|
||||
},
|
||||
subSkill:{
|
||||
'0':{charlotte:true},
|
||||
'1':{charlotte:true},
|
||||
},
|
||||
ai:{
|
||||
order:3,
|
||||
result:{player:1},
|
||||
},
|
||||
},
|
||||
skill_feiyi_B:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:'loseAfter',
|
||||
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
|
||||
},
|
||||
filter:function(event,player){
|
||||
if(player.countCards('h')!=1||typeof get.number(player.getCards('h')[0],player)!='number') return false;
|
||||
if(player.hasSkill('skill_feiyi_B_0')&&player.hasSkill('skill_feiyi_B_1')) return false;
|
||||
var evt=event.getl(player);
|
||||
return evt&&evt.player==player&&evt.hs&&evt.hs.length>0;
|
||||
},
|
||||
prompt2:function(event,player){
|
||||
var str='展示最后一张手牌并摸一张牌';
|
||||
if(!player.hasSkill('skill_feiyi_B_0')||!player.hasSkill('skill_feiyi_B_0')){
|
||||
str+=',然后令本回合使用点数';
|
||||
if(!player.hasSkill('skill_feiyi_B_0')) str+='大于';
|
||||
if(!player.hasSkill('skill_feiyi_B_0')&&!player.hasSkill('skill_feiyi_B_0')) str+='或';
|
||||
if(!player.hasSkill('skill_feiyi_B_1')) str+='小于';
|
||||
str+=get.number(player.getCards('h')[0],player);
|
||||
str+='的牌额外结算一次';
|
||||
}
|
||||
return str;
|
||||
},
|
||||
frequent:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.showHandcards(get.translation(player)+'发动了【技能】');
|
||||
event.num=get.number(player.getCards('h')[0],player);
|
||||
'step 1'
|
||||
player.draw();
|
||||
'step 2'
|
||||
if(player.hasSkill('skill_feiyi_B_0')) event._result={index:1};
|
||||
else if(player.hasSkill('skill_feiyi_B_1')) event._result={index:0};
|
||||
else{
|
||||
player.chooseControl().set('choiceList',[
|
||||
'本回合使用点数大于'+num+'的牌额外结算一次',
|
||||
'本回合使用点数小于'+num+'的牌额外结算一次',
|
||||
]).set('ai',()=>{
|
||||
var player=_status.event.player;
|
||||
var num=_status.event.player;
|
||||
if(player.getCards('h').reduce(function(num,card){
|
||||
return num=(get.number(card,player)||0);
|
||||
},0)>num*2) return 0;
|
||||
return 1;
|
||||
}).set('num',num);
|
||||
}
|
||||
'step 3'
|
||||
var skill='skill_feiyi_B_'+result.index;
|
||||
player.addTempSkill(skill);
|
||||
player.markAuto(skill,[num]);
|
||||
},
|
||||
subSkill:{
|
||||
'0':{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
marktext:'技',
|
||||
intro:{
|
||||
markcount:()=>0,
|
||||
content:'使用点数大于$的牌额外结算一次',
|
||||
},
|
||||
audio:'skill_feiyi_B',
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event,player){
|
||||
var num=get.number(event.card,player);
|
||||
return typeof num=='number'&&player.getStorage('skill_feiyi_B_0').some(numx=>num>numx);
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
trigger.effectCount++;
|
||||
game.log(trigger.card,'额外结算一次');
|
||||
},
|
||||
},
|
||||
'1':{
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
marktext:'能',
|
||||
intro:{
|
||||
markcount:()=>0,
|
||||
content:'使用点数小于$的牌额外结算一次',
|
||||
},
|
||||
audio:'skill_feiyi_B',
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event,player){
|
||||
var num=get.number(event.card,player);
|
||||
return typeof num=='number'&&player.getStorage('skill_feiyi_B_1').some(numx=>num<numx);
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
trigger.effectCount++;
|
||||
game.log(trigger.card,'额外结算一次');
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//吕伯奢
|
||||
skill_lvboshe:{
|
||||
mode:['doudizhu'],
|
||||
zhuanhuanji:true,
|
||||
mark:true,
|
||||
markcount:'☯',
|
||||
intro:{
|
||||
content:function(storage){
|
||||
if(storage) return '农民的回合结束时,你可以令其进行一个额外回合';
|
||||
return '农民的回合结束时,你可以令地主进行一个额外回合';
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{global:'phaseEnd'},
|
||||
filter:function(event,player){
|
||||
return event.player.identity=='fan';
|
||||
},
|
||||
prompt2:function(event,player){
|
||||
return '令'+get.translation(lib.skill.skill_lvboshe.logTarget(event,player))+'进行一个额外回合';
|
||||
},
|
||||
logTarget:function(event,player){
|
||||
var storage=player.storage.skill_lvboshe;
|
||||
return storage?event.player:game.zhu;
|
||||
},
|
||||
content:function(){
|
||||
var target=lib.skill.skill_lvboshe.logTarget(trigger,player);
|
||||
player.changeZhuanhuanji('skill_lvboshe');
|
||||
target.insertPhase();
|
||||
},
|
||||
},
|
||||
//OL陆郁生
|
||||
olcangxin:{
|
||||
audio:2,
|
||||
trigger:{player:'damageBegin4'},
|
||||
filter:function(event,player){
|
||||
return ui.cardPile.childNodes.length>0;
|
||||
},
|
||||
check:function(event,player){
|
||||
checkx:function(event,player){
|
||||
var target=event.source;
|
||||
return get.damageEffect(player,target,target);
|
||||
return get.damageEffect(player,target,target)<=0;
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
var cards=[],cardx=Array.from(ui.cardPile.childNodes);
|
||||
for(var i=cardx.length-1;i>=0;i--){
|
||||
cards.push(cardx[i]);
|
||||
if(cards.length>=3) break;
|
||||
}
|
||||
if(!cards.length){
|
||||
event.finish();
|
||||
return;
|
||||
}
|
||||
var cards=get.bottomCards(3,true);
|
||||
player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则防止此伤害',cards],[1,cards.length],true).set('ai',function(button){
|
||||
if(!_status.event.bool&&get.suit(button.link,false)=='heart') return 0;
|
||||
if(get.suit(button.link,false)!='heart') return 1;
|
||||
if(!ui.selected.buttons.some(but=>get.suit(but.link,false)=='heart')) return 1;
|
||||
return 0;
|
||||
});
|
||||
}).set('bool',lib.skill.olcangxin.checkx(trigger,player));
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
player.$throw(result.links,1000);
|
||||
game.cardsDiscard(result.links);
|
||||
if(result.links.some(card=>get.suit(card,false)=='heart')) trigger.cancel();
|
||||
}
|
||||
else event.finish();
|
||||
'step 2'
|
||||
game.delayx();
|
||||
},
|
||||
group:'olcangxin_yingzi',
|
||||
subSkill:{
|
||||
yingzi:{
|
||||
audio:'olcangxin',
|
||||
trigger:{player:'phaseDrawBegin2'},
|
||||
filter:function(event,player){
|
||||
if(event.numFixed) return false;
|
||||
var cards=[],cardx=Array.from(ui.cardPile.childNodes);
|
||||
for(var i=cardx.length-1;i>=0;i--){
|
||||
cards.push(cardx[i]);
|
||||
if(cards.length>=3) break;
|
||||
}
|
||||
return cards.some(card=>get.suit(card,false)=='heart');
|
||||
},
|
||||
trigger:{player:'phaseDrawBegin'},
|
||||
forced:true,
|
||||
locked:false,
|
||||
content:function(){
|
||||
var cards=[],cardx=Array.from(ui.cardPile.childNodes);
|
||||
for(var i=cardx.length-1;i>=0;i--){
|
||||
cards.push(cardx[i]);
|
||||
if(cards.length>=3) break;
|
||||
}
|
||||
cards=cards.filter(card=>get.suit(card,false)=='heart');
|
||||
trigger.num+=cards.length;
|
||||
var cards=get.bottomCards(3,true);
|
||||
player.showCards(cards,get.translation(player)+'发动了【藏心】');
|
||||
trigger.num+=cards.filter(card=>get.suit(card,false)=='heart').length;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
skill_luyusheng_B:{
|
||||
olrunwei:{
|
||||
audio:2,
|
||||
trigger:{global:'phaseDiscardBegin'},
|
||||
filter:function(event,player){
|
||||
if(event.player==player) return false;
|
||||
return event.player.isDamaged()&&event.player.countCards('h')!=event.player.getHandcardLimit();
|
||||
return event.player.isDamaged();
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
|
@ -792,22 +1163,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return 2;
|
||||
break;
|
||||
}
|
||||
}).set('prompt',get.prompt('skill_luyusheng_B',trigger.player));
|
||||
}).set('prompt',get.prompt('olrunwei',trigger.player));
|
||||
'step 1'
|
||||
if(result.index!=2){
|
||||
player.logSkill('skill_luyusheng_B',trigger.player);
|
||||
player.logSkill('olrunwei',trigger.player);
|
||||
if(result.index==0){
|
||||
trigger.player.chooseToDiscard('he',true).set('ai',card=>{
|
||||
if(get.position(card)=='e') return -get.value(card);
|
||||
return 1/(get.value(card)||0.5);
|
||||
});
|
||||
trigger.player.addTempSkill('skill_luyusheng_B_+');
|
||||
trigger.player.addMark('skill_luyusheng_B_+',1,false);
|
||||
trigger.player.addTempSkill('olrunwei_+');
|
||||
trigger.player.addMark('olrunwei_+',1,false);
|
||||
}
|
||||
if(result.index==1){
|
||||
trigger.player.draw();
|
||||
trigger.player.addTempSkill('skill_luyusheng_B_-');
|
||||
trigger.player.addMark('skill_luyusheng_B_-',1,false);
|
||||
trigger.player.addTempSkill('olrunwei_-');
|
||||
trigger.player.addMark('olrunwei_-',1,false);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -819,7 +1190,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
intro:{content:'手牌上限+#'},
|
||||
mod:{
|
||||
maxHandcard:function(player,num){
|
||||
return num+player.countMark('skill_luyusheng_B_+');
|
||||
return num+player.countMark('olrunwei_+');
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -830,7 +1201,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
intro:{content:'手牌上限-#'},
|
||||
mod:{
|
||||
maxHandcard:function(player,num){
|
||||
return num-player.countMark('skill_luyusheng_B_-');
|
||||
return num-player.countMark('olrunwei_-');
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -7841,21 +8212,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
//芮姬
|
||||
qiaoli:{
|
||||
audio:2,
|
||||
enable:'chooseToUse',
|
||||
viewAs:{name:'juedou'},
|
||||
viewAsFilter:function(player){
|
||||
return player.hasCard(function(card){
|
||||
return get.type(card)=='equip';
|
||||
},'ehs')
|
||||
onChooseToUse:function(event){
|
||||
if(event.type=='phase'&&!game.online&&!(event.qiaoli_equip1&&event.qiaoli_noequip1)){
|
||||
var player=event.player;
|
||||
var evt=event.getParent('phaseUse');
|
||||
if(player.getHistory('useCard',function(evtx){
|
||||
return evtx.getParent('phaseUse')==evt&&evtx.skill=='qiaoli'&&get.subtype(evtx.cards[0])=='equip1';
|
||||
}).length) event.set('qiaoli_equip1',true);
|
||||
if(player.getHistory('useCard',function(evtx){
|
||||
return evtx.getParent('phaseUse')==evt&&evtx.skill=='qiaoli'&&get.subtype(evtx.cards[0])!='equip1';
|
||||
}).length) event.set('qiaoli_noequip1',true);
|
||||
}
|
||||
},
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
viewAs:{
|
||||
name:'juedou',
|
||||
qiaoli:true,
|
||||
},
|
||||
filterCard:function(card,player){
|
||||
if(get.type(card)!='equip') return false;
|
||||
var event=_status.event;
|
||||
if(get.subtype(card)=='equip1'&&event.qiaoli_equip1) return false;
|
||||
if(get.subtype(card)!='equip1'&&event.qiaoli_noequip1) return false;
|
||||
return true;
|
||||
},
|
||||
viewAsFilter:function(player){
|
||||
return player.isPhaseUsing()&&player.hasCard(function(card){
|
||||
return lib.skill.qiaoli.filterCard(card,player);
|
||||
},'hes');
|
||||
},
|
||||
filterCard:{type:'equip'},
|
||||
check:function(card){
|
||||
if(get.position(card)=='e') return 7.5-get.value(card);
|
||||
return 12-_status.event.player.getUseValue(card);
|
||||
},
|
||||
position:'hes',
|
||||
group:['qiaoli_effect','qiaoli_gain','qiaoli_norespond'],
|
||||
precontent:function(){
|
||||
player.addTempSkill('qiaoli_norespond');
|
||||
player.addTempSkill('qiaoli_effect');
|
||||
},
|
||||
ai:{
|
||||
directHit_ai:true,
|
||||
skillTagFilter:function(player,tag,arg){
|
||||
|
@ -7864,31 +8259,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
subSkill:{
|
||||
norespond:{
|
||||
trigger:{player:'useCard1'},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
popup:false,
|
||||
trigger:{player:'useCard1'},
|
||||
filter:function(event,player){
|
||||
if(event.skill!='qiaoli') return false;
|
||||
var card=event.cards[0];
|
||||
return get.subtype(card)!='equip1';
|
||||
return event.card.qiaoli&&get.subtype(event.cards[0])!='equip1';
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
content:function(){
|
||||
trigger.directHit.addArray(game.filterPlayer(function(current){
|
||||
return current!=player;
|
||||
}));
|
||||
player.addTempSkill('qiaoli_gain');
|
||||
trigger.directHit.addArray(game.players);
|
||||
game.log(trigger.card,'不可被响应');
|
||||
},
|
||||
},
|
||||
effect:{
|
||||
trigger:{player:'useCardAfter'},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
popup:false,
|
||||
trigger:{source:'damageSource'},
|
||||
filter:function(event,player){
|
||||
if(event.skill!='qiaoli') return false;
|
||||
var card=event.cards[0];
|
||||
return get.subtype(card)=='equip1';
|
||||
return event.card&&event.cards&&event.card.qiaoli&&get.subtype(event.cards[0])=='equip1';
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
content:function(){
|
||||
'step 0'
|
||||
var card=trigger.cards[0];
|
||||
|
@ -7921,7 +8312,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
cards:cards,
|
||||
filterTarget:lib.filter.notMe,
|
||||
selectCard:[1,cards.length],
|
||||
prompt:'是否将得到的牌分配给其他角色?',
|
||||
prompt:'是否将获得的牌分配给其他角色?',
|
||||
ai1:function(card){
|
||||
return -1;
|
||||
},
|
||||
|
@ -7940,33 +8331,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
'step 4'
|
||||
if(_status.connectMode){
|
||||
game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
|
||||
game.broadcastAll(function(){delete _status.noclearcountdown});
|
||||
game.stopCountChoose();
|
||||
}
|
||||
var map=[],cards=[];
|
||||
for(var i in event.given_map){
|
||||
var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
|
||||
player.line(source,'green');
|
||||
map.push([source,event.given_map[i]]);
|
||||
cards.addArray(event.given_map[i]);
|
||||
source.gain(event.given_map[i],player,'giveAuto');
|
||||
}
|
||||
if(map.length) game.loseAsync({
|
||||
gain_list:map,
|
||||
player:player,
|
||||
cards:cards,
|
||||
giver:player,
|
||||
animate:'giveAuto',
|
||||
}).setContent('gaincardMultiple');
|
||||
event.next.sort(function(a,b){
|
||||
return lib.sort.seat(a.player,b.player);
|
||||
});
|
||||
},
|
||||
},
|
||||
gain:{
|
||||
charlotte:true,
|
||||
audio:'qiaoli',
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
return player.hasHistory('useCard',function(evt){
|
||||
return evt.skill=='qiaoli';
|
||||
})
|
||||
},
|
||||
content:function(){
|
||||
var card=get.cardPile2(function(card){
|
||||
return get.type(card)=='equip';
|
||||
|
@ -7979,10 +8361,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
qingliang:{
|
||||
audio:2,
|
||||
trigger:{target:'useCardToTarget'},
|
||||
usable:1,
|
||||
filter:function(event,player){
|
||||
if(event.targets.length!=1) return false;
|
||||
var bool1=(event.card.name=='sha');
|
||||
var bool2=(get.type2(event.card)=='trick'&&get.tag(event.card,'damage'));
|
||||
if(!bool1&&!bool2) return false;
|
||||
return player!=event.player&&player.countCards('h')>0;
|
||||
},
|
||||
usable:1,
|
||||
logTarget:'player',
|
||||
check:function(event,player){
|
||||
if(get.attitude(player,event.player)>0||event.player.hasSkillTag('nogain')) return true;
|
||||
|
@ -9118,10 +9504,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.logSkill('olxianlve');
|
||||
player.storage.olxianlve=name;
|
||||
player.markSkill('olxianlve');
|
||||
game.log(player,'声明了','#g'+get.translation(name));
|
||||
}
|
||||
},
|
||||
intro:{content:'已声明【$】'},
|
||||
intro:{
|
||||
content:function(name,player){
|
||||
return '已声明'+(player.isUnderControl(true)?'【'+get.translation(name)+'】':'一个牌名');
|
||||
},
|
||||
},
|
||||
group:['olxianlve_use','olxianlve_count'],
|
||||
subSkill:{
|
||||
count:{
|
||||
|
@ -9238,7 +9627,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var name=result.links[0][2];
|
||||
player.storage.olxianlve=name;
|
||||
player.markSkill('olxianlve');
|
||||
game.log(player,'声明了','#g'+get.translation(name));
|
||||
}
|
||||
},
|
||||
},
|
||||
|
@ -12907,47 +13295,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
},
|
||||
//英文版特典武将凯撒
|
||||
zhengfu:{
|
||||
trigger:{
|
||||
player:"useCardToPlayered",
|
||||
},
|
||||
check:function (event,player){
|
||||
return get.attitude(player,event.target)<0;
|
||||
},
|
||||
filter:function(event,player){
|
||||
return event.card.name=='sha';
|
||||
},
|
||||
logTarget:"target",
|
||||
line:false,
|
||||
content:function (){
|
||||
'step 0'
|
||||
player.line(trigger.target,{color:[220, 90, 139]});
|
||||
player.chooseControl(['basic','trick','equip']).set('ai',function(){
|
||||
var player=_status.event.target;
|
||||
if(!player.countCards('h','sha')&&player.countCards('h','shan')) return 'trick';
|
||||
return 'basic';
|
||||
}).set('prompt','请选择一种牌的类别').set('target',trigger.target);
|
||||
'step 1'
|
||||
trigger.target.chooseCard('he','交给'+get.translation(player)+'一张'+get.translation(result.control)+'牌,否则此【杀】不可被闪避。',function(card){
|
||||
return get.type(card,'trick')==result.control;
|
||||
}).set('ai',function(card){
|
||||
var num=_status.event.num;
|
||||
if(num==0) return 0;
|
||||
if(card.name=='shan') return num>1?2:0;
|
||||
return 8-get.value(card);
|
||||
}).set('num',trigger.target.countCards('h','shan'))
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
var cards=result.cards;
|
||||
trigger.target.give(cards,player);
|
||||
}
|
||||
else{
|
||||
trigger.getParent().directHit.add(trigger.target);
|
||||
game.delay();
|
||||
}
|
||||
},
|
||||
},
|
||||
//变权移植
|
||||
wanwei:{
|
||||
trigger:{target:['rewriteGainResult','rewriteDiscardResult']},
|
||||
|
@ -23933,6 +24280,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(player.storage.olsaogu) return '转换技。①出牌阶段,你可以。阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】;<span class="bluetext">阳:摸一张牌</span>。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。';
|
||||
return '转换技。①出牌阶段,你可以。<span class="bluetext">阴:弃置两张牌(不能包含你本阶段弃置过的花色),然后使用其中的【杀】</span>;阳:摸一张牌。②结束阶段,你可以弃置一张牌,令一名其他角色执行你当前〖扫谷①〗的分支。';
|
||||
},
|
||||
skill_lvboshe:function(player){
|
||||
if(player.storage.skill_lvboshe) return '农民的回合结束时:阴,你可以令地主进行一个额外回合;<span class="bluetext">阳,你可以令其进行一个额外回合</span>。';
|
||||
return '农民的回合结束时:<span class="bluetext">阴,你可以令地主进行一个额外回合</span>;阳,你可以令其进行一个额外回合。';
|
||||
},
|
||||
},
|
||||
characterReplace:{
|
||||
caoshuang:['caoshuang','ns_caoshuang'],
|
||||
|
@ -23988,6 +24339,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhouqun:['ol_zhouqun','zhouqun'],
|
||||
qianzhao:['ol_qianzhao','qianzhao'],
|
||||
ol_pengyang:['ol_pengyang','sp_pengyang'],
|
||||
ol_luyusheng:['ol_luyusheng','luyusheng'],
|
||||
},
|
||||
translate:{
|
||||
"xinfu_lingren":"凌人",
|
||||
|
@ -24141,7 +24493,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
lvfan:'吕范',
|
||||
liqueguosi:'李傕郭汜',
|
||||
cuimao:'崔琰毛玠',
|
||||
kaisa:"凯撒",
|
||||
|
||||
|
||||
caoying:"曹婴",
|
||||
|
@ -24211,8 +24562,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
"zhenwei_three_info":"锁定技,敌方角色至己方其他角色的距离+1。",
|
||||
"huanshi_three":"缓释",
|
||||
"huanshi_three_info":"一名友方角色的判定牌生效前,你可打出一张牌代替之。",
|
||||
zhengfu:"征服",
|
||||
"zhengfu_info":"当你使用【杀】指定目标时,你可以选择一种牌的类别,然后除非目标角色交给你一种该类别的牌,否则其不能闪避此【杀】。",
|
||||
|
||||
yizan:"翊赞",
|
||||
yizan_info:"你可以将两张牌(其中至少一张是基本牌)当任意基本牌牌使用",
|
||||
|
@ -24880,10 +25229,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
liejie_info:'当你受到伤害后,你可以弃置至多三张牌,摸等量的牌,然后可弃置伤害来源的至多X张牌(X为你以此法弃置的红色牌的数量)。',
|
||||
ruiji:'OL芮姬',
|
||||
qiaoli:'巧力',
|
||||
qiaoli_info:'①你可以将一张装备牌当做【决斗】使用。若此【决斗】对应的实体牌:为武器牌,当你以此法声明使用【决斗】后,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;不为武器牌,此牌不可被响应。②结束阶段开始时,若你于本回合内发动过〖巧力①〗,则你从牌堆中获得一张装备牌。',
|
||||
qiaoli_info:'出牌阶段各限一次,你可以将一张武器牌/非武器装备牌当作【决斗】使用。若此【决斗】对应的实体牌为武器牌,当你以此【决斗】对目标角色造成伤害后,你摸X张牌(X为此牌的攻击范围),且可以将其中任意张牌分配给其他角色;若此【决斗】对应的实体牌不为武器牌,此牌不可被响应,且你于结束阶段从牌堆中获得一张装备牌。',
|
||||
qiaoli_given:'已分配',
|
||||
qingliang:'清靓',
|
||||
qingliang_info:'每回合限一次。当你成为其他角色使用牌的目标时,你可展示所有手牌,然后选择一项:⒈你与其各摸一张牌,⒉取消此目标,然后弃置你手牌中一种花色的所有牌。',
|
||||
qingliang_info:'每回合限一次,当你成为其他角色使用【杀】或伤害类锦囊牌的唯一目标时,你可展示所有手牌,然后选择一项:⒈你与其各摸一张牌,⒉取消此目标,然后弃置你手牌中一种花色的所有牌。',
|
||||
chixueqingfeng:'赤血青锋',
|
||||
chixueqingfeng2:'赤血青锋',
|
||||
chixueqingfeng_info:'锁定技,当你使用【杀】指定目标后,你令目标角色不能使用或打出手牌且防具技能无效直到此【杀】结算结束。',
|
||||
|
@ -25112,9 +25461,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olkuansai_info:'当一张牌指定第一个目标后,若目标数大于你的体力值,你可以令其中一个目标选择一项:1.交给你一张牌;2.令你回复1点体力。',
|
||||
ol_luyusheng:'OL陆郁生',
|
||||
olcangxin:'藏心',
|
||||
olcangxin_info:'①当你受到伤害时,你可以观看牌堆底的三张牌并弃置其中任意张牌,若你以此法弃置了红桃牌,则防止此伤害。②摸牌阶段,你多摸X张牌(X为牌堆底前三张牌中红桃牌的数量)。',
|
||||
skill_luyusheng_B:'技能',
|
||||
skill_luyusheng_B_info:'其他角色的弃牌阶段开始时,若其已受伤且其手牌数不等于其体力上限,则你可以选择一项:①令其弃置一张牌,其本回合手牌上限+1;②令其摸一张牌,其本回合手牌上限-1。',
|
||||
olcangxin_info:'锁定技。①当你受到伤害时,你观看牌堆底的三张牌并弃置其中任意张牌,若你以此法弃置了红桃牌,则防止此伤害。②摸牌阶段开始时,你展示牌堆底的三张牌,然后摸X张牌(X为其中红桃牌的数量)。',
|
||||
olrunwei:'润微',
|
||||
olrunwei_info:'其他角色的弃牌阶段开始时,若其已受伤,则你可以选择一项:①令其弃置一张牌,其本回合手牌上限+1;②令其摸一张牌,其本回合手牌上限-1。',
|
||||
caoxi:'曹羲',
|
||||
olgangshu:'刚述',
|
||||
olgangshu_info:'①当你使用非基本牌结算结束后,你可以令以下一项数值+1(每项至多以此法+5):1.攻击范围;2.受〖刚述〗影响的下个摸牌阶段摸牌数;3.使用【杀】的次数上限。②当有牌被你抵消后,重置你〖刚述①〗增加的所有数值。',
|
||||
|
@ -25125,6 +25474,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olqifan_info:'当你需要使用不为【无懈可击】的牌时,你可以观看牌堆底的X+1张牌并使用其中的一张。此牌结算结束时,你依次弃置以下前X个区域中的所有牌:⒈判定区、⒉装备区、⒊手牌区(X为你因此技能使用过的牌中包含的类型数)。',
|
||||
oltuishi:'侻失',
|
||||
oltuishi_info:'锁定技。①你不能使用【无懈可击】。②当你使用点数为字母的牌后,你摸两张牌,且你使用的下一张牌无距离和次数限制。',
|
||||
ol_tw_zhangji:'张既',
|
||||
skill_zhangji_A:'技能',
|
||||
skill_zhangji_A_info:'出牌阶段限X次(X为你的体力值),当你使用牌指定一名其他角色为目标后,你可以观看其手牌,然后你选择一项:<br>1.弃置其一张牌,然后若弃置的牌是能造成火焰伤害的牌,你摸一张牌。<br>2.重铸其手牌中的所有【杀】和【决斗】。<br>3.若其没有【闪】,你与其互相对对方造成1点伤害。',
|
||||
skill_zhangji_B:'技能',
|
||||
skill_zhangji_B_info:'当你受到1点伤害后,你可令一名手牌数小于体力上限的角色摸三张牌,然后其将手牌数弃置至其体力上限数;当你进入濒死状态时,你可令一名其他角色观看五张魏势力武将牌,其可以选择其中一张代替自己的武将牌(体力和体力上限不变)。',
|
||||
ol_feiyi:'费祎',
|
||||
skill_feiyi_A:'技能',
|
||||
skill_feiyi_A_info:'出牌阶段各限一次,若你的手牌数为:①奇数,你可以摸三张牌,然后弃置至少一半手牌(向下取整);②偶数,你可以弃置至少一半手牌,然后摸三张牌。',
|
||||
skill_feiyi_B:'技能',
|
||||
skill_feiyi_B_info:'每回合每项限一次,当你的手牌数变为1后,你可以展示此唯一手牌A并摸一张牌,然后你选择一项:①本回合使用点数大于A的点数的牌额外结算一次;②本回合使用点数小于A的点数的牌额外结算一次。',
|
||||
ol_lvboshe:'吕伯奢',
|
||||
skill_lvboshe:'技能',
|
||||
skill_lvboshe_info:'农民的回合结束时:阴,你可以令地主进行一个额外回合;阳,你可以令其进行一个额外回合。',
|
||||
|
||||
|
||||
sp_tianji:'天极·皇室宗亲',
|
||||
sp_sibi:'四弼·辅国文曲',
|
||||
|
@ -25141,6 +25504,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_guozhan2:"国战移植",
|
||||
sp_others:"其他",
|
||||
sp_waitforsort:'等待分包',
|
||||
},
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -2042,7 +2042,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 0'
|
||||
trigger._dunxi=true;
|
||||
trigger.player.removeMark('dunxi',1);
|
||||
var target=trigger.target;
|
||||
var target=trigger.targets[0];
|
||||
event.target=target;
|
||||
trigger.targets.remove(target);
|
||||
//trigger.triggeredTargets1.remove(target);
|
||||
|
@ -10533,5 +10533,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_danqi:'千里单骑',
|
||||
sp_decade:'其他新服武将',
|
||||
},
|
||||
pinyins:{
|
||||
卑弥呼:['Himiko']
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -9715,7 +9715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
enable:['chooseToUse','chooseToRespond'],
|
||||
filter:function(event,player){
|
||||
if(event.type=='wuxie') return false;
|
||||
if(event.type=='wuxie'||player.hasSkill('zhenshan_used')) return false;
|
||||
var nh=player.countCards('h');
|
||||
if(!game.hasPlayer(function(current){
|
||||
return current!=player&¤t.countCards('h')<nh;
|
||||
|
@ -9787,6 +9787,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
if(result.bool){
|
||||
player.logSkill('zhenshan',result.targets);
|
||||
player.addTempSkill('zhenshan_used');
|
||||
player.swapHandcards(result.targets[0]);
|
||||
delete event.result.skill;
|
||||
}
|
||||
|
@ -9797,9 +9798,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
return '选择【'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'】的目标';
|
||||
return '请选择【'+get.translation(links[0][3]||'')+get.translation(links[0][2])+'】的目标';
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
used:{charlotte:true},
|
||||
},
|
||||
ai:{
|
||||
order:function(){
|
||||
var player=_status.event.player;
|
||||
|
@ -9828,6 +9832,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
respondSha:true,
|
||||
respondShan:true,
|
||||
skillTagFilter:function(player,tag,arg){
|
||||
if(player.hasSkill('zhenshan_used')) return false;
|
||||
var nh=player.countCards('h');
|
||||
return game.hasPlayer(function(current){
|
||||
return current!=player&¤t.countCards('h')<nh;
|
||||
|
@ -10361,7 +10366,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
frequent:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.draw(player.hp);
|
||||
player.draw(2);
|
||||
'step 1'
|
||||
if(player.getHistory('sourceDamage').length||player.getHistory('gain',function(evt){
|
||||
return evt.getParent('phaseUse')==trigger.getParent('phaseUse')&&evt.getParent().name=='draw';
|
||||
|
@ -10380,11 +10385,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
'step 0'
|
||||
var choiceList=['令'+get.translation(trigger.source)+'本回合不能再使用或打出牌'];
|
||||
if (trigger.source.countCards('h')) choiceList.push('令'+get.translation(trigger.source)+'弃置'+get.cnNumber(trigger.source.hp)+'张牌');
|
||||
if (trigger.source.countCards('h')) choiceList.push('令'+get.translation(trigger.source)+'弃置两张牌');
|
||||
player.chooseControl('cancel2').set('prompt2',get.prompt2('yuzhang')).set('choiceList',choiceList).set('ai',function(){
|
||||
var player=_status.event.player,source=_status.event.source;
|
||||
if(get.attitude(player,event.source)>0) return 'cancel2';
|
||||
if(source.hasSkillTag('noh')||source.hasSkillTag('noe')||source.countCards('h')>=2*source.hp) return 0;
|
||||
if(source.hasSkillTag('noh')||source.hasSkillTag('noe')||source.countCards('h')>=4) return 0;
|
||||
if(source.hp>1&&source.countCards('h')>1) return 1;
|
||||
return 'cancel2';
|
||||
}).set('source',trigger.source);
|
||||
|
@ -10393,12 +10398,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.logSkill('yuzhang',trigger.source);
|
||||
player.removeMark('twjingce',1);
|
||||
if(result.index==0) trigger.source.addTempSkill('yuzhang_dontuse');
|
||||
else trigger.source.chooseToDiscard('he',trigger.source.hp,true);
|
||||
else trigger.source.chooseToDiscard('he',2,true);
|
||||
}
|
||||
},
|
||||
group:"yuzhang_skip",
|
||||
subSkill:{
|
||||
skip:{
|
||||
audio:'yuzhang',
|
||||
trigger:{
|
||||
player:["phaseJudgeBefore","phaseDrawBefore","phaseUseBefore","phaseDiscardBefore"],
|
||||
},
|
||||
|
@ -13956,6 +13962,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
},
|
||||
//英文版特典武将凯撒
|
||||
zhengfu:{
|
||||
trigger:{
|
||||
player:"useCardToPlayered",
|
||||
},
|
||||
check:function (event,player){
|
||||
return get.attitude(player,event.target)<0;
|
||||
},
|
||||
filter:function(event,player){
|
||||
return event.card.name=='sha';
|
||||
},
|
||||
logTarget:"target",
|
||||
line:false,
|
||||
content:function(){
|
||||
'step 0'
|
||||
player.line(trigger.target,{color:[220, 90, 139]});
|
||||
player.chooseControl(['basic','trick','equip']).set('ai',function(){
|
||||
var player=_status.event.target;
|
||||
if(!player.countCards('h','sha')&&player.countCards('h','shan')) return 'trick';
|
||||
return 'basic';
|
||||
}).set('prompt','请选择一种牌的类别').set('target',trigger.target);
|
||||
'step 1'
|
||||
trigger.target.chooseCard('he','交给'+get.translation(player)+'一张'+get.translation(result.control)+'牌,否则此【杀】不可被闪避。',function(card){
|
||||
return get.type(card,'trick')==_status.event.getParent().result.control;
|
||||
}).set('ai',function(card){
|
||||
var num=_status.event.num;
|
||||
if(num==0) return 0;
|
||||
if(card.name=='shan') return num>1?2:0;
|
||||
return 8-get.value(card);
|
||||
}).set('num',trigger.target.countCards('h','shan'))
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
var cards=result.cards;
|
||||
trigger.target.give(cards,player);
|
||||
}
|
||||
else{
|
||||
trigger.getParent().directHit.add(trigger.target);
|
||||
game.delay();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
perfectPair:{
|
||||
tw_liufuren:['yuanshao'],
|
||||
|
@ -13966,6 +14013,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
mateng:['tw_mateng','mateng'],
|
||||
},
|
||||
dynamicTranslate:{
|
||||
twfeifu:function(player){
|
||||
var str='转换技。';
|
||||
if(!player.storage.twfeifu) str+='<span class="bluetext">';
|
||||
str+='阴:当你成为【杀】的唯一目标后;';
|
||||
if(!player.storage.twfeifu) str+='</span>';
|
||||
if(player.storage.twfeifu) str+='<span class="bluetext">';
|
||||
str+='阳:当你使用【杀】指定唯一目标后;';
|
||||
if(player.storage.twfeifu) str+='</span>';
|
||||
str+='目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。';
|
||||
return str;
|
||||
},
|
||||
twfengpo:function(player){
|
||||
if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。';
|
||||
return '①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。';
|
||||
|
@ -14136,9 +14194,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则其可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。',
|
||||
tw_guohuai:'TW郭淮',
|
||||
twjingce:"精策",
|
||||
twjingce_info:"当你于出牌阶段使用第X张牌时,你可以摸X张牌(X为你的体力值)。若此阶段你此前摸过牌或本回合造成过伤害,你获得一枚“策”标记。",
|
||||
twjingce_info:"当你于出牌阶段使用第X张牌时,你可以摸两张牌(X为你的体力值)。若此阶段你此前摸过牌或本回合造成过伤害,你获得一枚“策”标记。",
|
||||
yuzhang:"御嶂",
|
||||
yuzhang_info:"你可以弃置一枚“策”标记,然后跳过一个阶段。当你受到伤害后,你可弃置一枚“策”标记,然后选择一项:⒈令伤害来源弃置X张牌(X为其体力值);⒉令伤害来源本回合不能再使用或打出牌。",
|
||||
yuzhang_info:"你可以弃置一枚“策”标记,然后跳过一个阶段。当你受到伤害后,你可弃置一枚“策”标记,然后选择一项:⒈令伤害来源弃置两张牌;⒉令伤害来源本回合不能再使用或打出牌。",
|
||||
tw_caozhao:'曹肇',
|
||||
twfuzuan:'复纂',
|
||||
twfuzuan_info:'出牌阶段限一次/当你受到伤害后/当你对其他角色造成伤害后,你可选择一名拥有转换技的角色,变更其的一个转换技的的状态。',
|
||||
|
@ -14166,7 +14224,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twcongji_info:'当你的红色牌于回合外因弃置而进入弃牌堆后,你可令一名其他角色获得这些牌。',
|
||||
old_quancong:'TW全琮',
|
||||
zhenshan:'振赡',
|
||||
zhenshan_info:'当你需要使用或打出一张基本牌时,你可以与一名手牌数少于你的角色交换手牌,视为使用或打出此牌。',
|
||||
zhenshan_info:'每回合限一次,当你需要使用或打出一张基本牌时,你可以与一名手牌数少于你的角色交换手牌,视为使用或打出此牌。',
|
||||
tw_tianyu:'TW田豫',
|
||||
twzhenxi:'震袭',
|
||||
twzhenxi_info:'每回合限一次。当你使用【杀】指定目标后,你可选择一项:⒈弃置其X张手牌(X为你至其的距离);⒉将其装备区或判定区内的一张牌移动到另一名角色的装备区或判定区内。若其体力值大于你或其体力值为全场最高,则你可以改为依次执行以上两项。',
|
||||
|
@ -14516,6 +14574,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twquanqian_info:'昂扬技。出牌阶段限一次,你可以将至多四张花色各不相同的手牌交给一名其他角色,然后若你交出的牌数大于1,则你从牌堆中获得一张装备牌,然后选择一项:①将手牌数摸至与其相同;②观看其手牌并获得其一种花色的所有牌。<br>激昂:你弃置六张手牌。',
|
||||
twrouke:'柔克',
|
||||
twrouke_info:'锁定技。当你于摸牌阶段外得到超过一张牌时,你摸一张牌。',
|
||||
kaisa:"凯撒",
|
||||
zhengfu:"征服",
|
||||
zhengfu_info:"当你使用【杀】指定目标时,你可以选择一种牌的类别,然后除非目标角色交给你一种该类别的牌,否则其不能闪避此【杀】。",
|
||||
|
||||
tw_mobile:'海外服·稀有专属',
|
||||
tw_yunchouzhi:'运筹帷幄·智',
|
||||
|
@ -14529,6 +14590,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
tw_mobile2:'海外服·异构',
|
||||
tw_yijiang:'一将成名TW',
|
||||
tw_english:'英文版',
|
||||
},
|
||||
pinyins:{
|
||||
凯撒:['Caesar'],
|
||||
难升米:['Nashime']
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -4665,6 +4665,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(current.countCards('hs',card=>current.canUse(card,player)&&get.effect(player,card,current,player)<0)>=2) return false;
|
||||
return true;
|
||||
},
|
||||
frequent:'check',
|
||||
content:function(){
|
||||
player.draw().gaintag=['dcjiexing'];
|
||||
player.addTempSkill('dcjiexing_add');
|
||||
|
@ -11557,7 +11558,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhouyi:'周夷,游卡桌游旗下产品《三国杀》自行杜撰的人物。设定为周瑜的妹妹,和周瑜一同征战。',
|
||||
caojinyu:'金乡公主,本姓曹氏,名字不详,沛国谯县(今安徽省亳州市)人。魏武帝曹操的女儿,母为杜夫人。适婚的时候,嫁给曹操的养子何晏。高平陵之变,何晏作为大将军曹爽的党羽,遭到太傅司马懿处死。在何晏母亲尹夫人苦苦哀求下,何晏的儿子得以保全。',
|
||||
wufan:'吴范(?-226年),字文则,会稽上虞(今浙江绍兴上虞区)人。三国时期孙吴官员,擅长术数。与刘惇、赵达、严武、曹不兴、皇象、宋寿和郑妪合称“吴中八绝”。吴范以推算天象节气和观察气候闻名于郡中。孙权起于东南,他委身事奉,每推算灾祥多应验,遂显名。孙权委以骑都尉,领太史令。初,孙权为将军时,他曾说江南有王气。及孙权立为吴王,论功行封,欲以为都亭侯,但因不愿将其术要诀告知孙权,为权所怨恨,被除名。黄武中,病死。',
|
||||
caomao:'曹髦(241年11月15日-260年6月2日)[1],字彦士,沛国谯县(今安徽省亳州市)人,魏文帝曹丕之孙,东海王曹霖之子,曹魏第四位皇帝(254年11月1日-260年6月2日)。正始二年(241年),生于东海王宫,自幼聪明好学,才慧早成,正始五年(244年),封为高贵乡公,嘉平六年(254年),大将军司马师废除齐王曹芳后,拥立为帝,年号正元,曹髦文才武略,崇拜少康,不满司马氏专权秉政,甘露五年(260年),亲自讨伐司马昭,为太子舍人成济所弑,年仅十九岁,以王礼葬于洛阳西北。曹髦擅长诗文,创制了九言诗,传世文章有《伤魂赋并序》《颜子论》等。爱好儒学,亲赴太学论道,著有《春秋左氏传音》(失传)。精通绘画,一说为中国第一位成为画家的皇帝,唐张彦远《历代名画记》目曹髦为中品。',
|
||||
caomao:'曹髦(241年11月15日-260年6月2日),字彦士,沛国谯县(今安徽省亳州市)人,魏文帝曹丕之孙,东海王曹霖之子,曹魏第四位皇帝(254年11月1日-260年6月2日)。正始二年(241年),生于东海王宫,自幼聪明好学,才慧早成,正始五年(244年),封为高贵乡公,嘉平六年(254年),大将军司马师废除齐王曹芳后,拥立为帝,年号正元,曹髦文才武略,崇拜少康,不满司马氏专权秉政,甘露五年(260年),亲自讨伐司马昭,为太子舍人成济所弑,年仅十九岁,以王礼葬于洛阳西北。曹髦擅长诗文,创制了九言诗,传世文章有《伤魂赋并序》《颜子论》等。爱好儒学,亲赴太学论道,著有《春秋左氏传音》(失传)。精通绘画,一说为中国第一位成为画家的皇帝,唐张彦远《历代名画记》目曹髦为中品。',
|
||||
laiyinger:'来莺儿,是个传说中的人物,正史及古代典籍并无记载。相传来莺儿是东汉歌妓,建安年间洛阳名妓,后爱上曹操的侍卫王图,王图因延误军机而押赴刑场,当时来莺儿奋不顾身以己命换王图一死。新编古装潮剧《曹营恋歌》,秦腔《雀台歌女》讲述了歌女来莺儿与情人王图及曹操三人之间催人泪下的故事。',
|
||||
caohua:'曹华,东汉末年人物,曹操之女,为汉献帝妃嫔。建安十八年(213年),曹操进为魏公,把曹宪、曹节、曹华三个女儿,一齐都送给汉献帝刘协做了妃子,皆封为夫人,聘以束帛五万匹,年龄尚小者在魏公国待年长而聘。',
|
||||
zhaoang:'赵昂,字伟章(一作伟璋),天水冀人。汉末时曹操部下。初为羌道令,建安中转参军事徒居州治冀城。建安十八年,马超围冀城多天,城中饥困,凉州刺史韦康不愿百姓再受苦而打算投降,赵昂进劝但不为所纳。后马超背信弃义杀韦康并劫其子赵月为人质,把他送至南郑。欲以此要迫使赵昂为己所用。后与梁宽、赵衢、庞恭、杨阜等结谋为康报仇,并举兵讨伐马超。马超兵败遂弃城,投奔张鲁。得张鲁之援后马超于建安十九年复寇,赵昂与妻子王异坚守祁山三十天至夏侯渊的救兵解围,其子赵月终为马超斩杀。自冀城之难,至于祁山,赵昂出九奇策。',
|
||||
|
|
|
@ -1358,15 +1358,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:'zhaofu',
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filter:function(event,player){
|
||||
return player.hasZhuSkill('xinzhaofu');
|
||||
},
|
||||
mark:true,
|
||||
limited:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'wood',
|
||||
selectTarget:[1,2],
|
||||
filterTarget:lib.filter.notMe,
|
||||
zhuSkill:true,
|
||||
contentBefore:function(){
|
||||
player.awakenSkill('xinzhaofu');
|
||||
},
|
||||
|
|
|
@ -241,5 +241,6 @@ window.config={
|
|||
['akane_quanqing','lianying'],
|
||||
['akane_quanqing','relianying'],
|
||||
['akane_quanqing','shangshi'],
|
||||
['dcruyi','cxliushi'],
|
||||
]
|
||||
};
|
||||
|
|
382
game/game.js
|
@ -255,13 +255,22 @@
|
|||
lib.groupnature[id]=id;
|
||||
}
|
||||
}
|
||||
if(typeof config.image=='string') Object.defineProperty(lib.card,`group_${id}`,{
|
||||
configurable:true,
|
||||
enumerable:false,
|
||||
writable:true,
|
||||
value:{
|
||||
fullskin:true,
|
||||
image:config.image
|
||||
}
|
||||
});
|
||||
}],
|
||||
},
|
||||
hookmap:{},
|
||||
imported:{},
|
||||
layoutfixed:['chess','tafang','stone'],
|
||||
pinyins:{
|
||||
metadata:{
|
||||
_metadata:{
|
||||
shengmu:['zh','ch','sh','b','p','m','f','d','t','l','n','g','k','h','j','q','x','r','z','c','s','y','w'],
|
||||
special_shengmu:['j','q','x','y'],
|
||||
feijiemu:{
|
||||
|
@ -1332,6 +1341,26 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
splash_style:{
|
||||
name:'启动页',
|
||||
item:{
|
||||
style1:'样式一',
|
||||
style2:'样式二',
|
||||
},
|
||||
visualMenu:function(node,link){
|
||||
node.className='button character';
|
||||
node.style.width='200px';
|
||||
node.style.height=node.offsetWidth*1080/2400+'px';
|
||||
node.style.display='flex';
|
||||
node.style['flex-direction']='column';
|
||||
node.style['align-items']='center';
|
||||
node.style.backgroundSize='100% 100%';
|
||||
node.setBackgroundImage('image/splash/'+link+'.jpg');
|
||||
},
|
||||
onclick:function(item){
|
||||
game.saveConfig('splash_style',item);
|
||||
}
|
||||
},
|
||||
// fewplayer:{
|
||||
// name:'启用人数',
|
||||
// intro:'设置启用新版布局的最小人数(不足时切换至默认布局)',
|
||||
|
@ -9854,7 +9883,23 @@
|
|||
node.link=lib.config.all.mode[i];
|
||||
ui.create.div(node,'.splashtext',get.verticalStr(get.translation(lib.config.all.mode[i])));
|
||||
if(lib.config.all.stockmode.indexOf(lib.config.all.mode[i])!=-1){
|
||||
ui.create.div(node,'.avatar').setBackgroundImage('image/splash/'+lib.config.all.mode[i]+'.jpg');
|
||||
// 初始启动页设置
|
||||
if(lib.config.splash_style==undefined){
|
||||
if(lib.device){
|
||||
var item='style2';
|
||||
}else{
|
||||
var item='style1';
|
||||
}
|
||||
lib.configMenu.appearence.config.splash_style.onclick(item);
|
||||
}
|
||||
splash.dataset.splash_style=lib.config.splash_style;
|
||||
// 扩展可通过window.splashurl设置素材读取路径
|
||||
if(window.splashurl==undefined)window.splashurl='image/splash/';
|
||||
if(lib.config.splash_style=='style1'||lib.config.splash_style=='style2'){
|
||||
ui.create.div(node,'.avatar').setBackgroundImage('image/splash/'+lib.config.splash_style+'/'+lib.config.all.mode[i]+'.jpg');
|
||||
}else{
|
||||
ui.create.div(node,'.avatar').setBackgroundImage(splashurl+lib.config.splash_style+'/'+lib.config.all.mode[i]+'.jpg');
|
||||
}
|
||||
}
|
||||
else{
|
||||
var avatarnode=ui.create.div(node,'.avatar');
|
||||
|
@ -10302,8 +10347,14 @@
|
|||
}
|
||||
}
|
||||
else{
|
||||
// TODO: Parse Common Object
|
||||
throw new Error("NYI: Parse Common Object");
|
||||
if(Symbol.iterator in item) return lib.init.parsex(Array.from(item));
|
||||
if("toString" in item) return lib.init.parsex(item.toString());
|
||||
if("render" in item) {
|
||||
// TODO: Object Render Parse
|
||||
throw new Error("NYI: Object Render Parse");
|
||||
}
|
||||
// TODO: Object Other Parse
|
||||
throw new Error("NYI: Object Other Parse");
|
||||
}
|
||||
case "function":
|
||||
if (gnc.is.generatorFunc(item)) {
|
||||
|
@ -10329,7 +10380,8 @@
|
|||
else lastEvent=res.value;
|
||||
}
|
||||
}
|
||||
else return Legacy(item);
|
||||
default:
|
||||
return Legacy(item);
|
||||
}
|
||||
},
|
||||
eval:function(func){
|
||||
|
@ -20113,6 +20165,11 @@
|
|||
player.update();
|
||||
}
|
||||
},this,this.name,this.sex,num,this.group);
|
||||
skills=skills.filter(skill=>{
|
||||
var info=get.info(skill);
|
||||
if(info&&info.zhuSkill&&!this.isZhu2()) return false;
|
||||
return true;
|
||||
});
|
||||
for(var i=0;i<skills.length;i++){
|
||||
if(this.hiddenSkills.contains(skills[i])){
|
||||
this.hiddenSkills.remove(skills[i]);
|
||||
|
@ -23771,10 +23828,10 @@
|
|||
}
|
||||
if(next.card==undefined&&!nocard) next.card=event.card;
|
||||
if(next.cards==undefined&&!nocard) next.cards=event.cards;
|
||||
if(next.source==undefined&&!nosource) next.source=event.player;
|
||||
if(next.source==undefined&&!nosource) next.source=event.customSource||event.player;
|
||||
if(next.source&&next.source.isDead()) delete next.source;
|
||||
if(next.unreal==undefined) next.unreal=false;
|
||||
if(next.num==undefined) next.num=1;
|
||||
if(next.num==undefined) next.num=(event.baseDamage||1)+(event.extraDamage||0);
|
||||
next.original_num=next.num;
|
||||
next.change_history=[];
|
||||
if(next.nature=='poison') delete next._triggered;
|
||||
|
@ -23824,8 +23881,8 @@
|
|||
}
|
||||
if(next.card==undefined&&!nocard) next.card=event.card;
|
||||
if(next.cards==undefined&&!nocard) next.cards=event.cards;
|
||||
if(next.source==undefined&&!nosource) next.source=event.player;
|
||||
if(next.num==undefined) next.num=1;
|
||||
if(next.source==undefined&&!nosource) next.source=event.customSource||event.player;
|
||||
if(next.num==undefined) next.num=(event.baseDamage||1)+(event.extraDamage||0);
|
||||
if(next.num<=0) _status.event.next.remove(next);
|
||||
next.setContent('recover');
|
||||
return next;
|
||||
|
@ -24758,8 +24815,26 @@
|
|||
getStorage:function(name){
|
||||
return this.storage[name]||[];
|
||||
},
|
||||
hasStorage:function(name){
|
||||
return name in this.storage;
|
||||
hasStorage:function(name,value){
|
||||
if(!(name in this.storage)) return false;
|
||||
if(typeof value=="undefined") return true;
|
||||
const storage=this.storage[name];
|
||||
if(storage===value) return true;
|
||||
return !Array.isArray(storage) || storage.contains(value);
|
||||
},
|
||||
hasStorageAny:function(name,values){
|
||||
const storage=this.storage[name];
|
||||
if(!Array.isArray(values)) values=Array.from(arguments).slice(1);
|
||||
if(!storage) return false;
|
||||
if (!Array.isArray(storage)) return values.contains(storage);
|
||||
return values.some(item => storage.contains(item));
|
||||
},
|
||||
hasStorageAll:function(name,values){
|
||||
const storage=this.storage[name];
|
||||
if(!Array.isArray(values)) values=Array.from(arguments).slice(1);
|
||||
if(!storage) return false;
|
||||
if (!Array.isArray(storage)) return false;
|
||||
return values.every(item => storage.contains(item));
|
||||
},
|
||||
initStorage:function(name,value){
|
||||
return this.hasStorage(name)?this.getStorage(name):this.setStorage(name,value);
|
||||
|
@ -24772,6 +24847,9 @@
|
|||
.then(value=>operation(value))
|
||||
.then(value=>this.setStorage(name,value))
|
||||
},
|
||||
removeStorage:function(name){
|
||||
return player.hasStorage(name)&&delete player.storage[name];
|
||||
},
|
||||
markSkill:function(name,info,card){
|
||||
if(info===true){
|
||||
this.syncStorage(name);
|
||||
|
@ -28739,9 +28817,14 @@
|
|||
this.content=lib.init.parsex(item);
|
||||
break;
|
||||
default:
|
||||
if(!lib.element.content[item]._parsed){
|
||||
lib.element.content[item]=lib.init.parsex(lib.element.content[item]);
|
||||
lib.element.content[item]._parsed=true;
|
||||
try{
|
||||
if(!lib.element.content[item]._parsed){
|
||||
lib.element.content[item]=lib.init.parsex(lib.element.content[item]);
|
||||
lib.element.content[item]._parsed=true;
|
||||
}
|
||||
}
|
||||
catch{
|
||||
throw new Error(`Content ${item} may not exist.\nlib.element.content[${item}] = ${lib.element.content[item]}`);
|
||||
}
|
||||
this.content=lib.element.content[item];
|
||||
break;
|
||||
|
@ -39638,28 +39721,30 @@
|
|||
}
|
||||
return node;
|
||||
},
|
||||
putDB:function(type,id,item,callback){
|
||||
putDB:function(type,id,item,onsuccess,onerror){
|
||||
if(!lib.db) return item;
|
||||
if(lib.status.reload){
|
||||
lib[_status.dburgent?'ondb2':'ondb'].push(['putDB',Array.from(arguments)]);
|
||||
return;
|
||||
}
|
||||
lib.status.reload++;
|
||||
lib.db.transaction([type],'readwrite').objectStore(type).put(item,id).onsuccess=function(){
|
||||
if(callback){
|
||||
const record=lib.db.transaction([type],'readwrite').objectStore(type).put(item,id);
|
||||
record.onsuccess=function(){
|
||||
if(onsuccess){
|
||||
_status.dburgent=true;
|
||||
callback.apply(this,arguments);
|
||||
onsuccess.apply(this,arguments);
|
||||
delete _status.dburgent;
|
||||
}
|
||||
game.reload2();
|
||||
};
|
||||
if(typeof onerror=='function') record.onerror=onerror;
|
||||
},
|
||||
getDB:function(type,id,callback){
|
||||
getDB:function(type,id,onsuccess,onerror){
|
||||
if(!lib.db){
|
||||
if(callback) callback(null);
|
||||
if(onsuccess) onsuccess(null);
|
||||
return;
|
||||
}
|
||||
if(!callback) return;
|
||||
if(!onsuccess) return;
|
||||
if(lib.status.reload){
|
||||
lib[_status.dburgent?'ondb2':'ondb'].push(['getDB',Array.from(arguments)]);
|
||||
return;
|
||||
|
@ -39667,31 +39752,34 @@
|
|||
lib.status.reload++;
|
||||
const store=lib.db.transaction([type],'readwrite').objectStore(type);
|
||||
if(id){
|
||||
store.get(id).onsuccess=e=>{
|
||||
const record=store.get(id);
|
||||
record.onsuccess=e=>{
|
||||
_status.dburgent=true;
|
||||
callback(e.target.result);
|
||||
onsuccess(e.target.result);
|
||||
delete _status.dburgent;
|
||||
game.reload2();
|
||||
};
|
||||
if(typeof onerror=='function') record.onerror=onerror;
|
||||
return;
|
||||
}
|
||||
const obj={};
|
||||
store.openCursor().onsuccess=e=>{
|
||||
const cursor=e.target.result;
|
||||
if(cursor){
|
||||
obj[cursor.key]=cursor.value;
|
||||
cursor.continue();
|
||||
const cursor=store.openCursor(),obj={};
|
||||
cursor.onsuccess=e=>{
|
||||
const result=e.target.result;
|
||||
if(result){
|
||||
obj[result.key]=result.value;
|
||||
result.continue();
|
||||
return;
|
||||
}
|
||||
_status.dburgent=true;
|
||||
callback(obj);
|
||||
onsuccess(obj);
|
||||
delete _status.dburgent;
|
||||
game.reload2();
|
||||
}
|
||||
};
|
||||
if(typeof onerror=='function') cursor.onerror=onerror;
|
||||
},
|
||||
deleteDB:function(type,id,callback){
|
||||
deleteDB:function(type,id,onsuccess,onerror){
|
||||
if(!lib.db){
|
||||
if(callback) callback(false);
|
||||
if(onsuccess) onsuccess(false);
|
||||
return;
|
||||
}
|
||||
if(lib.status.reload){
|
||||
|
@ -39700,10 +39788,12 @@
|
|||
}
|
||||
if(arguments.length>1){
|
||||
lib.status.reload++;
|
||||
lib.db.transaction([type],'readwrite').objectStore(type).delete(id).onsuccess=function(){
|
||||
if(callback) callback.apply(this,arguments);
|
||||
const record=lib.db.transaction([type],'readwrite').objectStore(type).delete(id);
|
||||
record.onsuccess=function(){
|
||||
if(onsuccess) onsuccess.apply(this,arguments);
|
||||
game.reload2();
|
||||
};
|
||||
if(typeof onerror=='function') record.onerror=onerror;
|
||||
return;
|
||||
}
|
||||
game.getDB(type,null,obj=>{
|
||||
|
@ -41466,7 +41556,7 @@
|
|||
var page=ui.create.div('');
|
||||
var node=ui.create.div('.menubutton.large',info.name,position,clickMode);
|
||||
node.mode=mode;
|
||||
node._initLink=function(){
|
||||
// node._initLink=function(){
|
||||
node.link=page;
|
||||
var map={};
|
||||
if(info.config){
|
||||
|
@ -41853,8 +41943,8 @@
|
|||
info.config.update(config,map);
|
||||
}
|
||||
}
|
||||
};
|
||||
if(!get.config('menu_loadondemand')) node._initLink();
|
||||
// };
|
||||
// if(!get.config('menu_loadondemand')) node._initLink();
|
||||
return node;
|
||||
};
|
||||
|
||||
|
@ -53214,21 +53304,86 @@
|
|||
else if(lib.config.favouriteCharacter.contains(name)){
|
||||
fav.classList.add('active');
|
||||
}
|
||||
var intro=ui.create.div('.characterintro',get.characterIntro(name),uiintro);
|
||||
const intro=ui.create.div('.characterintro',uiintro);
|
||||
if(lib.config.show_characternamepinyin){
|
||||
var charactername=get.rawName(name);
|
||||
var characterpinyin=get.pinyin(charactername);
|
||||
var nameinfo=get.character(name);
|
||||
var charactersex=get.translation(nameinfo[0]);
|
||||
const charactergroups=get.is.double(name,true);
|
||||
let charactergroup;
|
||||
if(charactergroups) charactergroup=charactergroups.map(i=>get.translation(i)).join('/')
|
||||
else charactergroup=get.translation(nameinfo[1]);
|
||||
var characterhp=nameinfo[2];
|
||||
var characterintroinfo=get.characterIntro(name);
|
||||
intro.innerHTML='<span style="font-weight:bold;margin-right:5px;line-height:2">'+charactername+'</span>'+'<span style="font-size:14px;font-family:SimHei,STHeiti,sans-serif">'+'['+characterpinyin+']'+'</span>'+' | '+charactersex+' | '+charactergroup+' | '+characterhp+'<br>'+characterintroinfo;
|
||||
const span=document.createElement('span');
|
||||
span.style.fontWeight='bold';
|
||||
const nameInfo=get.character(name),characterName=nameInfo[4].includes('ruby')?lib.translate[name]:get.rawName(name);
|
||||
span.textContent=characterName;
|
||||
const ruby=document.createElement('ruby');
|
||||
ruby.appendChild(span);
|
||||
const leftParenthesisRP=document.createElement('rp');
|
||||
leftParenthesisRP.textContent='(';
|
||||
ruby.appendChild(leftParenthesisRP);
|
||||
const rt=document.createElement('rt');
|
||||
rt.textContent=lib.translate[`${name}_rt`]||get.pinyin(characterName).join(' ');
|
||||
ruby.appendChild(rt);
|
||||
const rightParenthesisRP=document.createElement('rp');
|
||||
rightParenthesisRP.textContent=')';
|
||||
ruby.appendChild(rightParenthesisRP);
|
||||
const tr=document.createElement('tr'),characterNameTD=document.createElement('td');
|
||||
characterNameTD.appendChild(ruby);
|
||||
tr.appendChild(characterNameTD);
|
||||
const characterSexTD=document.createElement('td');
|
||||
characterSexTD.textContent=get.translation(nameInfo[0]);
|
||||
tr.appendChild(characterSexTD);
|
||||
const characterGroupTD=document.createElement('td');
|
||||
const characterGroups=get.is.double(name,true);
|
||||
if(characterGroups) Promise.all(characterGroups.map(value=>new Promise((resolve,reject)=>{
|
||||
const info=lib.card[`group_${value}`];
|
||||
if(!info) resolve(`image/card/group_${value}.png`);
|
||||
const image=info.image;
|
||||
if(!image) resolve(`image/card/group_${value}.png`);
|
||||
else if(image.indexOf('db:')==0) game.getDB('image',image.slice(3),src=>resolve(src),reject);
|
||||
else if(image.indexOf('ext:')==0) resolve(image.replace(/ext:/,'extension/'));
|
||||
else resolve(image);
|
||||
}).then(element=>new Promise((resolve,reject)=>{
|
||||
const image=new Image();
|
||||
image.onload=()=>resolve(image);
|
||||
image.onerror=reject;
|
||||
image.src=element;
|
||||
})))).then(value=>{
|
||||
const documentFragment=document.createDocumentFragment();
|
||||
value.forEach(documentFragment.appendChild,documentFragment);
|
||||
characterGroupTD.appendChild(documentFragment);
|
||||
}).catch(()=>characterGroupTD.textContent=characterGroups.reduce((previousValue,currentValue)=>previousValue?`${previousValue}/${get.translation(currentValue)}`:get.translation(currentValue),''));
|
||||
else{
|
||||
const characterGroup=nameInfo[1];
|
||||
new Promise((resolve,reject)=>{
|
||||
const info=lib.card[`group_${characterGroup}`];
|
||||
if(!info) resolve(`image/card/group_${characterGroup}.png`);
|
||||
const image=info.image;
|
||||
if(!image) resolve(`image/card/group_${characterGroup}.png`);
|
||||
else if(image.indexOf('db:')==0) game.getDB('image',image.slice(3),src=>resolve(src),reject);
|
||||
else if(image.indexOf('ext:')==0) resolve(image.replace(/ext:/,'extension/'));
|
||||
else resolve(image);
|
||||
}).then(value=>new Promise((resolve,reject)=>{
|
||||
const image=new Image();
|
||||
image.onload=()=>resolve(image);
|
||||
image.onerror=reject;
|
||||
image.src=value;
|
||||
})).then(value=>characterGroupTD.appendChild(value)).catch(()=>characterGroupTD.textContent=get.translation(characterGroup));
|
||||
}
|
||||
tr.appendChild(characterGroupTD);
|
||||
const characterHPTD=document.createElement('td'),hpDiv=ui.create.div('.hp',characterHPTD),nameInfoHP=nameInfo[2],infoHP=get.infoHp(nameInfoHP);
|
||||
hpDiv.dataset.condition=infoHP<4?'mid':'high';
|
||||
ui.create.div(hpDiv);
|
||||
const hpTextDiv=ui.create.div('.text',hpDiv),infoMaxHP=get.infoMaxHp(nameInfoHP);
|
||||
hpTextDiv.textContent=infoHP==infoMaxHP?infoHP:`${infoHP}/${infoMaxHP}`;
|
||||
const infoShield=get.infoHujia(nameInfoHP);
|
||||
if(infoShield){
|
||||
ui.create.div('.shield',hpDiv);
|
||||
const shieldTextDiv=ui.create.div('.text',hpDiv);
|
||||
shieldTextDiv.textContent=infoShield;
|
||||
}
|
||||
tr.appendChild(characterHPTD);
|
||||
const table=document.createElement('table');
|
||||
table.appendChild(tr);
|
||||
intro.appendChild(table);
|
||||
intro.appendChild(document.createElement('hr'));
|
||||
}
|
||||
var intro2=ui.create.div('.characterintro.intro2',uiintro);
|
||||
intro.appendChild(new Text(get.characterIntro(name)));
|
||||
const intro2=ui.create.div('.characterintro.intro2',uiintro);
|
||||
var list=get.character(name,3)||[];
|
||||
var skills=ui.create.div('.characterskill',uiintro);
|
||||
if(lib.config.touchscreen){
|
||||
|
@ -53241,38 +53396,75 @@
|
|||
skills.onmousewheel=ui.click.mousewheel;
|
||||
}
|
||||
var clickSkill=function(e){
|
||||
while(intro2.firstChild){
|
||||
intro2.removeChild(intro2.lastChild);
|
||||
}
|
||||
var current=this.parentNode.querySelector('.active');
|
||||
if(current){
|
||||
current.classList.remove('active');
|
||||
}
|
||||
this.classList.add('active');
|
||||
var skillname=get.translation(this.link);
|
||||
var skilltranslationinfo=get.skillInfoTranslation(this.link);
|
||||
if(lib.config.show_skillnamepinyin&&skillname!='阵亡'){
|
||||
var skillpinyin=get.pinyin(skillname);
|
||||
intro2.innerHTML='<span style="font-weight:bold;margin-right:5px">'+skillname+'</span>'+'<span style="font-size:14px;font-family:SimHei,STHeiti,sans-serif">'+'['+skillpinyin+']'+'</span>'+' '+skilltranslationinfo;
|
||||
}else{
|
||||
intro2.innerHTML='<span style="font-weight:bold;margin-right:5px">'+skillname+'</span>'+skilltranslationinfo;
|
||||
const skillNameSpan=document.createElement('span'),skillNameSpanStyle=skillNameSpan.style;
|
||||
skillNameSpanStyle.fontWeight='bold';
|
||||
const link=this.link,skillName=get.translation(link);
|
||||
skillNameSpan.textContent=skillName;
|
||||
if(lib.config.show_skillnamepinyin&&skillName!='阵亡'){
|
||||
const ruby=document.createElement('ruby');
|
||||
ruby.appendChild(skillNameSpan);
|
||||
const leftParenthesisRP=document.createElement('rp');
|
||||
leftParenthesisRP.textContent='(';
|
||||
ruby.appendChild(leftParenthesisRP);
|
||||
const rt=document.createElement('rt');
|
||||
rt.textContent=lib.translate[`${link}_rt`]||get.pinyin(skillName).join(' ');
|
||||
ruby.appendChild(rt);
|
||||
const rightParenthesisRP=document.createElement('rp');
|
||||
rightParenthesisRP.textContent=')';
|
||||
ruby.appendChild(rightParenthesisRP);
|
||||
const div=ui.create.div(intro2);
|
||||
div.style.marginRight='5px';
|
||||
div.appendChild(ruby);
|
||||
}
|
||||
else{
|
||||
skillNameSpanStyle.marginRight='5px';
|
||||
intro2.appendChild(skillNameSpan);
|
||||
}
|
||||
intro2.appendChild(new Text(get.skillInfoTranslation(this.link)));
|
||||
var info=get.info(this.link);
|
||||
var skill=this.link;
|
||||
var playername=this.linkname;
|
||||
var skillnode=this;
|
||||
if(info.derivation){
|
||||
var derivation=info.derivation;
|
||||
if(typeof derivation=='string'){
|
||||
derivation=[derivation];
|
||||
}
|
||||
for(var i=0;i<derivation.length;i++){
|
||||
var derivationname=get.translation(derivation[i]);
|
||||
var derivationtranslationinfo=get.skillInfoTranslation(derivation[i]);
|
||||
if(lib.config.show_skillnamepinyin&&derivationname.length<=5&&derivation[i].indexOf('_faq')==-1){
|
||||
var derivationpinyin=get.pinyin(derivationname);
|
||||
intro2.innerHTML+='<br><br><span style="font-weight:bold;margin-right:5px">'+derivationname+'</span>'+'<span style="font-size:14px;font-family:SimHei,STHeiti,sans-serif">'+'['+derivationpinyin+']'+'</span>'+' '+derivationtranslationinfo;
|
||||
}else{
|
||||
intro2.innerHTML+='<br><br><span style="font-weight:bold;margin-right:5px">'+derivationname+'</span>'+derivationtranslationinfo;
|
||||
let derivation=info.derivation;
|
||||
if(derivation){
|
||||
if(typeof derivation=='string') derivation=[derivation];
|
||||
derivation.forEach(value=>{
|
||||
intro2.appendChild(document.createElement('br'));
|
||||
intro2.appendChild(document.createElement('br'));
|
||||
const derivationNameSpan=document.createElement('span'),derivationNameSpanStyle=derivationNameSpan.style;
|
||||
derivationNameSpanStyle.fontWeight='bold';
|
||||
const derivationName=get.translation(value);
|
||||
derivationNameSpan.textContent=derivationName;
|
||||
if(lib.config.show_skillnamepinyin&&derivationName.length<=5&&value.indexOf('_faq')==-1){
|
||||
const ruby=document.createElement('ruby');
|
||||
ruby.appendChild(derivationNameSpan);
|
||||
const leftParenthesisRP=document.createElement('rp');
|
||||
leftParenthesisRP.textContent='(';
|
||||
ruby.appendChild(leftParenthesisRP);
|
||||
const rt=document.createElement('rt');
|
||||
rt.textContent=lib.translate[`${value}_rt`]||get.pinyin(derivationName).join(' ');
|
||||
ruby.appendChild(rt);
|
||||
const rightParenthesisRP=document.createElement('rp');
|
||||
rightParenthesisRP.textContent=')';
|
||||
ruby.appendChild(rightParenthesisRP);
|
||||
const div=ui.create.div(intro2);
|
||||
div.style.marginRight='5px';
|
||||
div.appendChild(ruby);
|
||||
}
|
||||
}
|
||||
else{
|
||||
derivationNameSpanStyle.marginRight='5px';
|
||||
intro2.appendChild(derivationNameSpan);
|
||||
}
|
||||
intro2.appendChild(new Text(get.skillInfoTranslation(value)));
|
||||
});
|
||||
}
|
||||
if(info.alter){
|
||||
intro2.innerHTML+='<br><br><div class="hrefnode skillversion"></div>';
|
||||
|
@ -54394,40 +54586,36 @@
|
|||
return [];
|
||||
},
|
||||
//装备栏 END
|
||||
pinyin:function(chinese,withtone){
|
||||
const util=window.pinyinUtilx;
|
||||
if(!window.pinyinUtilx) return [];
|
||||
if(lib.pinyins&&lib.pinyins[chinese]){
|
||||
const str=lib.pinyins[chinese];
|
||||
if(withtone===false){
|
||||
for(let i=0;i<str.length;i++){
|
||||
str[i]=util.removeTone(str[i]);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
pinyin:(chinese,withTone)=>{
|
||||
const pinyinUtilx=window.pinyinUtilx;
|
||||
if(!pinyinUtilx) return [];
|
||||
const pinyins=lib.pinyins;
|
||||
if(pinyins){
|
||||
const pinyin=pinyins[chinese];
|
||||
if(Array.isArray(pinyin)) return withTone===false?pinyin.map(pinyinUtilx.removeTone):pinyin.slice();
|
||||
}
|
||||
return util.getPinyin(chinese,null,withtone,true);
|
||||
return pinyinUtilx.getPinyin(chinese,null,withTone,true);
|
||||
},
|
||||
yunmu:function(str){
|
||||
//部分整体认读音节特化处理
|
||||
const util=window.pinyinUtilx;
|
||||
if(util&&lib.pinyins.metadata.zhengtirendu.contains(util.removeTone(str))){
|
||||
if(util&&lib.pinyins._metadata.zhengtirendu.contains(util.removeTone(str))){
|
||||
return '-'+str[str.length-1];
|
||||
}
|
||||
//排除声母
|
||||
for(let i of lib.pinyins.metadata.shengmu){
|
||||
for(let i of lib.pinyins._metadata.shengmu){
|
||||
if(str.indexOf(i)==0){
|
||||
str=str.slice(i.length);
|
||||
if(str[0]=='u'&&lib.pinyins.metadata.special_shengmu.contains(i)) str='ü'+str.slice(1);
|
||||
if(str[0]=='u'&&lib.pinyins._metadata.special_shengmu.contains(i)) str='ü'+str.slice(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//排除介母
|
||||
if(str.length>0){
|
||||
for(let i in lib.pinyins.metadata.feijiemu){
|
||||
for(let i in lib.pinyins._metadata.feijiemu){
|
||||
if(str[0]==i){
|
||||
let goon=false;
|
||||
for(let j of lib.pinyins.metadata.feijiemu[i]){
|
||||
for(let j of lib.pinyins._metadata.feijiemu[i]){
|
||||
if(str.indexOf(j)==0) goon=true;
|
||||
}
|
||||
if(!goon) str=str.slice(1);
|
||||
|
@ -54440,20 +54628,20 @@
|
|||
yunjiao:function(str){
|
||||
const util=window.pinyinUtilx;
|
||||
if(util) str=util.removeTone(str)
|
||||
if(lib.pinyins.metadata.zhengtirendu.contains(str)){
|
||||
if(lib.pinyins._metadata.zhengtirendu.contains(str)){
|
||||
str=('-'+str[str.length-1]);
|
||||
}
|
||||
else{
|
||||
for(let i of lib.pinyins.metadata.shengmu){
|
||||
for(let i of lib.pinyins._metadata.shengmu){
|
||||
if(str.indexOf(i)==0){
|
||||
str=str.slice(i.length);
|
||||
if(str[0]=='u'&&lib.pinyins.metadata.special_shengmu.contains(i)) str='ü'+str.slice(1);
|
||||
if(str[0]=='u'&&lib.pinyins._metadata.special_shengmu.contains(i)) str='ü'+str.slice(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(let i in lib.pinyins.metadata.yunjiao){
|
||||
if(lib.pinyins.metadata.yunjiao[i].contains(str)) return i;
|
||||
for(let i in lib.pinyins._metadata.yunjiao){
|
||||
if(lib.pinyins._metadata.yunjiao[i].contains(str)) return i;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
@ -55037,11 +55225,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
if(name.indexOf('gz_')==0){
|
||||
name=name.slice(3);
|
||||
if(lib.characterIntro[name]) return lib.characterIntro[name];
|
||||
}
|
||||
if(name.indexOf('_')!=-1){
|
||||
while(name.indexOf('_')!=-1&&!lib.characterIntro[name]){
|
||||
name=name.slice(name.indexOf('_')+1);
|
||||
}
|
||||
if(lib.characterIntro[name]) return lib.characterIntro[name];
|
||||
|
|
|
@ -42,12 +42,23 @@ var pinyin_dict_polyphone = {
|
|||
"乐无异": "yuè ",
|
||||
"端蒙": " méng",
|
||||
"妹喜": "mò ",
|
||||
"露娜": "lù ",
|
||||
"洛欧塞布": " sài ",
|
||||
"塞纳留斯": "sài ",
|
||||
"半藏": " zàng",
|
||||
"查莉娅": "zhā ",
|
||||
"单小小": "shàn ",
|
||||
"少微": "shào ",
|
||||
"欧阳少恭": " shào ",
|
||||
"卡尔维特": "kǎ ",
|
||||
"卡西尔": "kǎ ",
|
||||
"卡扎库斯": "kǎ ",
|
||||
"卡德加": "kǎ ",
|
||||
"法兰茜斯卡": " kǎ",
|
||||
"卡利莫斯": "kǎ ",
|
||||
"安卡": " kǎ",
|
||||
"卡玛": "kǎ ",
|
||||
"库特莉亚芙卡": " kǎ",
|
||||
"露娜": "lù ",
|
||||
// 技能名
|
||||
"聆乐": " yuè",
|
||||
"没矢": "mò ",
|
||||
|
@ -125,6 +136,7 @@ var pinyin_dict_polyphone = {
|
|||
"冠绝": "guàn ",
|
||||
"先著": " zhuó",
|
||||
"量反": "liàng ",
|
||||
"复难": " nàn",
|
||||
|
||||
"乐动": "yuè ",
|
||||
"血凰": "xuè ",
|
||||
|
|
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 51 KiB |
|
@ -423,6 +423,29 @@ table {
|
|||
border-radius: 12px;
|
||||
}
|
||||
|
||||
/* 启动页style2 */
|
||||
#splash[data-splash_style='style2']>div {
|
||||
width: 250px;
|
||||
height: 350px;
|
||||
top: calc(50% - 175px);
|
||||
}
|
||||
#splash[data-splash_style='style2']>div:first-child {
|
||||
margin-left: 15px;
|
||||
}
|
||||
#splash[data-splash_style='style2']>div:last-child {
|
||||
margin-right: 15px;
|
||||
}
|
||||
#splash[data-splash_style='style2']>div>.splashtext {
|
||||
font-family: 'shousha';
|
||||
font-size: 65px;
|
||||
}
|
||||
#splash[data-splash_style='style2'].slim>div>.splashtext {
|
||||
right: 10px;
|
||||
bottom: 5px;
|
||||
}
|
||||
#splash[data-splash_style='style2'].slim>div>.avatar {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
#arena.playerhidden>.player,
|
||||
#arena.playerhidden>#mebg,
|
||||
|
|