=(canvas.width*canvas.height)*0.6){
+ if(!_status.xinfu_pingcai_finished){
+ _status.xinfu_pingcai_finished=true;
+ event.switchToAuto();
+ }
+ }
+ }
+ }
+ canvas.onmouseup=function(ev){
+ canvas.onmousemove=null;
+ }
+ canvas.ontouchend=function(ev){
+ canvas.ontouchmove=null;
+ }
+
+ dialog.open();
+
+ game.pause();
+ game.countChoose();
+ };
+ //event.switchToAuto=switchToAuto;
+ game.broadcastAll(createDialog,player,event.videoId,name);
+ if(event.isMine()){
+ chooseButton(event.videoId,name);
+ }
+ else if(event.isOnline()){
+ event.player.send(chooseButton,event.videoId,name);
+ event.player.wait();
+ game.pause();
+ }
+ else{
+ switchToAuto();
+ }
"step 1"
- var delay=8400-(get.utc()-event.time);
- if(delay>0){
- event.delay2=true;
- event.dialog=ui.create.dialog(get.translation(player)+'正在擦拭宝物...'+(_status.connectMode?'':'
(点击屏幕可跳过等待)'));
- event.videoId=lib.status.videoId++;
- game.broadcast('createDialog',event.videoId,get.translation(player)+'正在擦拭宝物...');
- game.pause();
- event.pingcai_delayed=true;
- setTimeout(function(){
- if(event.pingcai_delayed==true){
- delete event.pingcai_delayed;
- game.resume();
- }
- },delay);
- if(!_status.connectMode){
- event.forceMine=true;
- event.custom.replace.window=function(){
- if(event.pingcai_delayed==true){
- delete event.forceMine;
- delete event.pingcai_delayed;
- game.resume();
- }
- }
- }
- }
- event.card=result.links[0];
+ var result=event.result||result;
+ if(!result) result={bool:false};
+ event._result=result;
+ game.broadcastAll(function(id,result,player){
+ _status.xinfu_pingcai_finished=true;
+ var dialog=get.idDialog(id);
+ if(dialog){
+ dialog.textPrompt.innerHTML=''+(get.translation(player)+'擦拭宝物'+(result.bool?'成功!':'失败…'))+'
';
+ if(result.bool&&dialog.canvas_viewer) dialog.canvas_viewer.classList.remove('grayscale');
+ }
+ if(!_status.connectMode) delete event.pingcai_delayed;
+ },event.videoId,result,player);
+ game.delay(2.5);
"step 2"
- if(event.delay2){
- delete event.custom.replace.window;
- event.dialog.close();
- game.addVideo('cardDialog',null,event.videoId);
- game.broadcast('closeDialog',event.videoId);
+ game.broadcastAll('closeDialog',event.videoId);
+ if(result.bool){
+ player.logSkill('pcaudio_'+event.cardname);
+ event.insert(lib.skill.xinfu_pingcai[event.cardname],{
+ player:player,
+ });
}
- player.logSkill('pcaudio_'+event.card.name);
- player.$throw(event.card);
- event.insert(lib.skill.xinfu_pingcai[event.card.name],{
- player:player,
- });
},
ai:{
order:7,
diff --git a/character/old.js b/character/old.js
index 18126323e..83392eea7 100755
--- a/character/old.js
+++ b/character/old.js
@@ -584,7 +584,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_zhuran:'OL朱然',
ol_guansuo:'OL关索',
ol_manchong:'OL满宠',
- old_fuhuanghou:'旧伏皇后',
+ old_fuhuanghou:'旧伏寿',
old_caochong:'旧曹冲',
old_guanqiujian:'旧毌丘俭',
old_huangfusong:'旧皇甫嵩',
diff --git a/character/rank.js b/character/rank.js
index b95d9992e..26cee7375 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -526,6 +526,7 @@ window.noname_character_rank={
'dc_sunru',
'dc_wangchang',
'fengfang',
+ 'prp_zhugeliang',
],
bp:[
'chess_diaochan',
@@ -802,6 +803,10 @@ window.noname_character_rank={
'caohua',
'zhaoang',
'ns_zhonglimu',
+ 'caoxiancaohua',
+ 'dc_liuba',
+ 'key_seira',
+ 'lukai',
],
b:[
'diy_feishi',
@@ -1039,6 +1044,7 @@ window.noname_character_rank={
'qinyilu',
'zhaoyǎn',
'zhangxun',
+ 'xiahoulingnv',
],
bm:[
'diy_xizhenxihong',
@@ -1415,6 +1421,7 @@ window.noname_character_rank={
'key_kyou',
'key_erika',
'key_satomi',
+ 'key_seira',
'noname',
],
epic:[
@@ -1597,6 +1604,7 @@ window.noname_character_rank={
'ol_xunyu',
'ns_zhonglimu',
'dc_sunru',
+ 'prp_zhugeliang',
'key_kano',
'key_haruko',
'key_akiko',
@@ -2006,6 +2014,8 @@ window.noname_character_rank={
'dc_jiling',
'dc_wangchang',
'jin_zhouchu',
+ 'lukai',
+ 'caoxiancaohua',
],
junk:[
'sunshao',
@@ -2027,6 +2037,7 @@ window.noname_character_rank={
'fanjiangzhangda',
'wangxiang',
'duji',
+ 'dc_liuba',
],
}
};
diff --git a/character/refresh.js b/character/refresh.js
index 25db82cd0..894986cef 100755
--- a/character/refresh.js
+++ b/character/refresh.js
@@ -1886,6 +1886,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//徐晃
olduanliang:{
audio:2,
+ locked:false,
enable:'chooseToUse',
filterCard:function(card){
return (get.type2(card)!='trick'&&get.color(card)=='black');
@@ -4203,12 +4204,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
residi2:{
onremove:true,
mod:{
- cardEnabled2:function(card,player){
+ cardEnabled:function(card,player){
+ if(player.getStorage('residi2').contains(get.color(card,player))) return false;
+ },
+ cardRespondable:function(card,player){
+ if(player.getStorage('residi2').contains(get.color(card,player))) return false;
+ },
+ cardSavable:function(card,player){
if(player.getStorage('residi2').contains(get.color(card,player))) return false;
},
},
intro:{
- content:'不能使用$的牌',
+ content:'不能使用或打出$牌',
},
marktext:'敌',
},
diff --git a/character/shenhua.js b/character/shenhua.js
index d1f9e5347..7b77a0c17 100755
--- a/character/shenhua.js
+++ b/character/shenhua.js
@@ -1393,7 +1393,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:11,
result:{
player:function(player){
- if(game.countPlayer(function(current){return (current.countCards('h')>player.countCards('h')||current.countCards('e')>player.countCards('e'))&&get.attitude(player,current)<0&&!player.storage.nzry_feijun.contains(current)})>0||game.countPlayer(function(current){return current.countCards('h')>player.countCards('h')&&get.attitude(player,current)<0})>0||(player.countCards('h')>=2&&game.countPlayer(function(current){return current.countCards('e')>player.countCards('e')&&get.attitude(player,current)<0})>0)) return 1;
+ if(game.hasPlayer(function(current){
+ return (current.countCards('h')>player.countCards('h')||current.countCards('e')>player.countCards('e'))&&get.attitude(player,current)<0&&player.getStorage('nzry_feijun').contains(current);
+ })||game.hasPlayer(function(current){
+ return current.countCards('h')>player.countCards('h')&&get.attitude(player,current)<0;
+ })||(player.countCards('h')>=2&&game.hasPlayer(function(current){
+ return current.countCards('e')>player.countCards('e')&&get.attitude(player,current)<0;
+ }))) return 1;
},
},
},
diff --git a/character/sp.js b/character/sp.js
index 64f3fc6f6..1389035cf 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
sp:{
- sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji"],
+ sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'],
sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','zhaoyǎn'],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao"],
@@ -28,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
+ caoxiancaohua:['female','qun',3,['huamu','qianmeng','liangyuan','jisi']],
jin_zhouchu:['male','jin',4,['shanduan','yilie']],
zhaoyǎn:['male','wei',4,['tongxie']],
ol_puyuan:['male','shu',4,['olshengong','olqisi']],
@@ -172,6 +173,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
+ caoxiancaohua:'此处为「曹宪」的相关介绍。关于「曹华」的部分请参考原本的介绍。
曹宪(生卒年不详),女,沛国谯县(今安徽省亳州市)人。东汉末年历史人物,汉献帝刘协嫔妃,魏武帝曹操女儿。建安十八年,嫁给汉献帝刘协,受封为贵人。黄初元年(220年),兄弟曹丕称帝后,汉献帝成为山阳公,不知所终。',
zhaoyǎn:'赵俨(171~245年),字伯然,颍川阳翟(今河南禹州市)。东汉末年颍川“四大名士”之一,三国时期魏国名臣。熟读经史,精明强干。建安二年,投靠大将军曹操之后,起家朗陵县令,历任司空府掾、司空主薄、都督护军、扶风太守等职。魏文帝曹丕继位后,历任魏国侍中、驸马都尉、河东太守、典农中郎将、度支尚书,封宜土亭侯。魏明帝曹睿时期,历任大司农、骠骑将军、大司空等职。正始六年,去世,时年七十五,谥号为穆。',
ruiji:'芮姬,芮玄之女,太子孙登妃,黄武五年卒。',
weizi:'卫兹(?-190年),字子许,(《三国演义》中其名为卫弘,当为误记),陈留襄邑(今河南睢县)人。曾举孝廉,先后被车骑将军何苗、司徒杨赐等召辟。中平六年(189年)十二月,曹操在陈留己吾募兵,而卫兹以家财资助曹操,使曹操顺利募得五千士兵。此后,卫兹与曹操共同讨伐董卓。初平元年(190年),卫兹在跟随曹操讨伐董卓途中,于荥阳汴水遭遇董卓军徐荣,力战终日,失利身亡。',
@@ -647,6 +649,348 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
+ //曹宪曹华
+ huamu:{
+ audio:2,
+ trigger:{player:'useCardAfter'},
+ filter:function(event,player){
+ var color=get.color(event.card);
+ if(color=='none') return false;
+ if(!player.hasHistory('lose',function(evt){
+ return evt.hs.length>0&&evt.getParent()==event;
+ })||!event.cards.filterInD('oe').length) return false;
+ var history=game.getGlobalHistory('useCard');
+ var index=history.indexOf(event);
+ if(index<1) return false;
+ var evt=history[index-1],color2=get.color(evt.card);
+ return color!=color2&&color2!='none';
+ },
+ prompt2:(event)=>'将'+get.translation(event.cards.filterInD('oe'))+'置于武将牌上',
+ check:function(event,player){
+ if(!game.hasPlayer(function(current){
+ return current.hasSkill('qianmeng',null,null,false)&&get.attitude(player,current)>0;
+ })) return false;
+ var cards=event.cards.filterInD('e');
+ if(!cards.length) return true;
+ var card=cards[0];
+ if(get.owner(card)==player){
+ if(get.value(card,player)<=0) return true;
+ var subtype=get.subtype(card);
+ if(player.hasCard('hs',function(card){
+ return get.subtype(card)==subtype&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
+ })) return true;
+ }
+ return false;
+ },
+ content:function(){
+ var cards=trigger.cards.filterInD('oe');
+ player.addToExpansion(cards,'gain2').gaintag.add('huamu');
+ },
+ ai:{
+ reverseOrder:true,
+ combo:'qianmeng',
+ },
+ mod:{
+ aiOrder:function(player,card,num){
+ if(typeof card=='object'){
+ var history=game.getGlobalHistory('useCard');
+ if(!history.length) return;
+ var evt=history[history.length-1];
+ if(evt&&evt.card&&get.color(evt.card)!='none'&&get.color(card)!='none'&&get.color(evt.card)!=get.color(card)){
+ return num+4;
+ }
+ }
+ },
+ },
+ marktext:'木',
+ intro:{
+ name:'灵杉&玉树',
+ markcount:function(storage,player){
+ var red=[],black=[];
+ var cards=player.getExpansions('huamu');
+ for(var i of cards){
+ var color=get.color(i,false);
+ (color=='red'?red:black).push(i);
+ }
+ return (''+black.length+'/'+red.length);
+ },
+ content:'expansion',
+ mark:function(dialog,storage,player){
+ var red=[],black=[];
+ var cards=player.getExpansions('huamu');
+ for(var i of cards){
+ var color=get.color(i,false);
+ (color=='red'?red:black).push(i);
+ }
+ if(black.length){
+ dialog.addText('灵杉');
+ dialog.addSmall(black);
+ }
+ if(red.length){
+ dialog.addText('玉树');
+ dialog.addSmall(red);
+ }
+ },
+ },
+ },
+ qianmeng:{
+ audio:2,
+ trigger:{
+ global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ filter:function(event,player){
+ if(event.name=='addToExpansion'){
+ if(event.gaintag.contains('huamu')){
+ var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ if(cards.length==red.length||red.length==0||cards.length==red.length*2) return true;
+ }
+ }
+ if(event.name=='lose'&&event.getlx!==false){
+ for(var i in event.gaintag_map){
+ if(event.gaintag_map[i].contains('huamu')){
+ var cards=event.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ return (cards.length==red.length||red.length==0||cards.length==red.length/2);
+ }
+ }
+ return false;
+ }
+ return game.getGlobalHistory('cardMove',function(evt){
+ if(evt.name!='lose'||event!=evt.getParent()) return false;
+ for(var i in evt.gaintag_map){
+ if(evt.gaintag_map[i].contains('huamu')){
+ var cards=evt.player.getExpansions('huamu'),red=cards.filter(function(i){
+ return get.color(i,false)=='red';
+ });
+ return (cards.length==red.length||red.length==0||cards.length==red.length/2);
+ }
+ }
+ return false;
+ }).length>0;
+ },
+ forced:true,
+ content:function(){
+ player.draw();
+ },
+ ai:{combo:'huamu'},
+ },
+ liangyuan:{
+ enable:'chooseToUse',
+ hiddenCard:function(player,name){
+ if(name=='tao'){
+ return !player.hasSkill('liangyuan_tao',null,null,false)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='red';
+ }).length>0;
+ });
+ }
+ else if(name=='jiu'){
+ return !player.hasSkill('liangyuan_jiu',null,null,false)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='black';
+ }).length>0;
+ })
+ }
+ return false;
+ },
+ filter:function(event,player){
+ if(event.type=='wuxie') return false;
+ if(!player.hasSkill('liangyuan_tao',null,null,false)&&event.filterCard({name:'tao'},player,event)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='red';
+ }).length>0;
+ })) return true;
+ if(!player.hasSkill('liangyuan_jiu',null,null,false)&&event.filterCard({name:'jiu'},player,event)&&game.hasPlayer(function(current){
+ var storage=current.getExpansions('huamu');
+ return storage.length>0&&storage.filter(function(i){
+ return get.color(i,false)=='black';
+ }).length>0;
+ })) return true;
+ return false;
+ },
+ chooseButton:{
+ dialog:function(){
+ return ui.create.dialog('良缘',[['tao','jiu'],'vcard'],'hidden');
+ },
+ filter:function(button,player){
+ var evt=_status.event.getParent();
+ var name=button.link[2],color=(name=='tao')?'red':'black';
+ if(player.hasSkill('liangyuan_'+name,null,null,false)) return false;
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ if(!cards.length) return false;
+ var card=get.autoViewAs({name:name},cards);
+ return evt.filterCard(card,player,evt);
+ },
+ check:function(button){
+ if(_status.event.getParent().type!='phase') return 1;
+ var player=_status.event.player;
+ var name=button.link[2],color=(name=='tao')?'red':'black';
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ var card=get.autoViewAs({name:name},cards);
+ return player.getUseValue(card,null,true);
+ },
+ backup:function(links,player){
+ var name=links[0][2],color=(name=='tao')?'red':'black';
+ var cards=[];
+ game.countPlayer(function(current){
+ cards.addArray(current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ }));
+ });
+ if(!cards.length) return false;
+ var card=get.autoViewAs({name:name},cards);
+ return {
+ viewAs:card,
+ color:color,
+ selectCard:-1,
+ filterCard:()=>false,
+ precontent:function(){
+ player.addTempSkill('liangyuan_'+event.result.card.name,'roundStart');
+ player.logSkill('liangyuan');
+ var list=[],color=lib.skill.liangyuan_backup.color;
+ var cards=[];
+ game.countPlayer(function(current){
+ var cardsx=current.getExpansions('huamu').filter(function(i){
+ return get.color(i,false)==color;
+ });
+ if(cardsx.length){
+ cards.addArray(cardsx);
+ list.push([current,cardsx]);
+ current.$throw(cardsx);
+ game.log(current,'将',cardsx,'化作“'+(color==''?'':'')+'”良缘')
+ }
+ });
+ event.result.cards=cards;
+ delete event.result.skill;
+ event.result._apply_args={'throw':false};
+ game.loseAsync({
+ lose_list:list,
+ }).setContent('chooseToCompareLose');
+ },
+ }
+ },
+ prompt:function(links,player){
+ var name=links[0][2],color=(name=='tao')?'玉树':'灵杉';
+ return '将场上所有的“'+color+'”当做【'+get.translation(name)+'】使用';
+ },
+ },
+ subSkill:{
+ tao:{charlotte:true},
+ jiu:{charlotte:true},
+ },
+ ai:{
+ order:function(item,player){
+ if(!player) player=_status.event.player;
+ return get.order({name:lib.skill.liangyuan.hiddenCard(player,'jiu')?'jiu':'tao'})+4;
+ },
+ result:{
+ player:function(player){
+ if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ return 1;
+ },
+ },
+ combo:'huamu',
+ threaten:3,
+ },
+ },
+ jisi:{
+ audio:2,
+ trigger:{player:'phaseZhunbeiBegin'},
+ direct:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'metal',
+ filter:function(event,player){
+ var skills=player.getStockSkills('一!','五!').filter(function(skill){
+ if(skill=='jisi') return false;
+ var info=get.info(skill);
+ return info&&!info.charlotte;
+ });
+ var history=player.getAllHistory('useSkill');
+ for(var i of history){
+ if(skills.contains(i.sourceSkill)||skills.contains(i.skill)) return true;
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var skills2=[];
+ var skills=player.getStockSkills('只!','因!').filter(function(skill){
+ if(skill=='jisi') return false;
+ var info=get.info(skill);
+ return info&&!info.charlotte;
+ });
+ var history=player.getAllHistory('useSkill');
+ for(var i of history){
+ if(skills.contains(i.sourceSkill)) skills2.add(i.sourceSkill);
+ if(skills.contains(i.skill)) skills2.add(i.skill);
+ if(skills.length==skills2.length) break;
+ }
+ event.skills2=skills2;
+ var str='令一名其他角色获得';
+ for(var i=0;i1) str+='中的一个技能';
+ str+='然后你';
+ if(player.countCards('h')>0) str+='弃置所有手牌,并';
+ str+='视为对其使用一张【杀】';
+ player.chooseTarget(get.prompt('jisi'),str,lib.filter.notMe).set('ai',function(target){
+ if(!_status.event.goon) return false;
+ var att=get.attitude(player,target);
+ if(att<4) return false;
+ var eff=get.effect(target,{name:'sha',isCard:true},player,player);
+ if(eff>=0) return att+eff;
+ if(target.hp<=2) return false;
+ return att/Math.max(1,-eff);
+ }).set('goon',function(){
+ if(player.hasUnknown()||player.identity=='nei') return false;
+ var hs=player.getCards('h');
+ if(!hs.length||get.value(hs,player)<=9-player.hp) return true;
+ return false;
+ }());
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('jisi',target);
+ player.awakenSkill('jisi');
+ var list=event.skills2;
+ if(list.length==0) event._result={control:list[0]};
+ player.chooseControl(list).set('prompt','令'+get.translation(target)+'获得一个技能').set(
+ 'ai',()=>_status.event.choice
+ ).set('choice',list.contains('qianmeng')?'qianmeng':list.randomGet());
+ }
+ else event.finish();
+ 'step 2'
+ target.addSkill(result.control);
+ 'step 3'
+ var num=player.countCards('h');
+ if(num>0) player.chooseToDiscard('h',num,true);
+ 'step 4'
+ if(player.canUse('sha',target,false)) player.useCard(false,target,{
+ name:'sha',
+ isCard:true,
+ },'noai')
+ },
+ },
//周处
shanduan:{
audio:2,
@@ -18888,7 +19232,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spfengyin_info:'其他角色的回合开始时,若其体力值不少于你,你可以交给其一张【杀】,令其跳过出牌阶段和弃牌阶段。',
spchizhong:'持重',
spchizhong_info:'锁定技,你的手牌上限等于体力上限;其他角色死亡时,你加1点体力上限。',
- sp_fuhuanghou:'SP伏皇后',
+ sp_fuhuanghou:'SP伏寿',
spcangni:'藏匿',
spcangni_info:'弃牌阶段开始时,你可以回复1点体力或摸两张牌,然后将你的武将牌翻面;其他角色的回合内,当你获得(每回合限一次)/失去一次牌时,若你的武将牌背面朝上,你可以令该角色摸/弃置一张牌。',
spmixin:'密信',
@@ -19077,6 +19421,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shanduan_info:'①回合开始时,你生成数组R=[1,2,3,4]。②摸牌阶段开始时,你从数组R中选择并移除一个数字A。你本阶段的额定摸牌数改为A。③出牌阶段开始时,你从数组R中选择并移除两个数字B和C。你将你本阶段内的攻击范围基数最小值和使用【杀】的次数上限基础值改为B和C。④弃牌阶段开始时,你从数组R中选择并移除一个数字D。你令你本回合的手牌上限基数改为D。⑤当你于回合外受到伤害后,你令下回合生成的R中最小的一个数字+1。',
yilie:'义烈',
yilie_info:'每轮每种牌名限一次。你可以将两张颜色相同的手牌当做任意一种基本牌使用。',
+ caoxiancaohua:'曹宪曹华',
+ huamu:'化木',
+ huamu_info:'当你使用手牌后,若此牌和本回合内上一张被使用的牌颜色不同,则你可以将此牌对应的所有{位于处理区或装备区}的实体牌置于你的武将牌上。这些牌中的黑色牌称为“灵杉”,红色牌称为“玉树”。',
+ qianmeng:'前盟',
+ qianmeng_info:'锁定技。当有牌移动事件结算结束后,若有角色的“灵杉”和“玉树”数量发生了变化,且二者数量相等或有一项为0,则你摸一张牌',
+ liangyuan:'良缘',
+ liangyuan_info:'每轮每项各限一次。你可以将场上所有的“灵杉”/“玉树”置于处理区,然后将这些牌当做【酒】/【桃】使用。',
+ jisi:'羁肆',
+ jisi_info:'限定技。准备阶段,你可以令一名其他角色获得你武将牌上的一个已发动过的其他技能。然后你弃置所有手牌,并视为对其使用一张【杀】(无距离关系的限制)。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',
diff --git a/character/sp2.js b/character/sp2.js
index acdf6e1ee..45f842f5b 100644
--- a/character/sp2.js
+++ b/character/sp2.js
@@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'sp2',
connect:true,
character:{
+ xiahoulingnv:['female','wei',4,['fuping','weilie']],
+ dc_liuba:['male','shu',3,['dczhubi','dcliuzhuan']],
zhangxun:['male','qun',4,['suizheng']],
zongyu:['male','shu',3,['zyqiao','chengshang']],
fengfang:['male','qun',3,['dcditing','dcbihuo']],
@@ -169,10 +171,245 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_huangjia:['caomao','liubian','dc_liuyu'],
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger'],
- sp_decade:['huaman','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','re_dongzhao','zhouyi','mamidi','dc_jiben','dc_luotong','guanning','dc_huangchengyan','dc_jiling','dc_sunru','zhaoang','dc_wangchang','fengfang','zhangxun'],
+ sp_decade:['huaman','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','re_dongzhao','zhouyi','mamidi','dc_jiben','dc_luotong','guanning','dc_huangchengyan','dc_jiling','dc_sunru','zhaoang','dc_wangchang','fengfang','zhangxun','xiahoulingnv','dc_liuba'],
}
},
skill:{
+ //夏侯令女
+ fuping:{
+ audio:2,
+ hiddenCard:function(player,name){
+ var list=player.getStorage('fuping').slice(0);
+ list.removeArray(player.getStorage('fuping_round'));
+ return list.contains(name)&&player.hasCard((card)=>(get.type(card)!='basic'),'ehs');
+ },
+ enable:'chooseToUse',
+ filter:function(event,player){
+ var list=player.getStorage('fuping').slice(0);
+ list.removeArray(player.getStorage('fuping_round'));
+ if(!list.length) return false;
+ if(!player.hasCard((card)=>(get.type(card)!='basic'),'ehs')) return false;
+ for(var i of list){
+ var type=get.type2(i,false);
+ if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true;
+ }
+ return false;
+ },
+ chooseButton:{
+ dialog:function(event,player){
+ var list=player.getStorage('fuping').slice(0);
+ list.removeArray(player.getStorage('fuping_round'));
+ var list2=[];
+ for(var i of list){
+ var type=get.type2(i,false);
+ if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) list2.push([type,'',i]);
+ }
+ return ui.create.dialog('浮萍',[list2,'vcard']);
+ },
+ check:function(button){
+ if(_status.event.getParent().type!='phase') return 1;
+ return _status.event.player.getUseValue({name:button.link[2]},null,true);
+ },
+ backup:function(links,player){
+ return {
+ audio:'fuping',
+ filterCard:(card)=>get.type(card)!='basic',
+ position:'he',
+ popname:true,
+ viewAs:{
+ name:links[0][2],
+ isCard:true,
+ },
+ check:function(card){
+ return 8-get.value(card);
+ },
+ precontent:function(){
+ player.addTempSkill('fuping_round');
+ player.markAuto('fuping_round',[event.result.card.name]);
+ },
+ }
+ },
+ prompt:function(links,player){
+ return '将一张非基本牌当做【'+get.translation(links[0][2])+'】使用';
+ },
+ },
+ ai:{
+ order:8,
+ result:{player:1},
+ respondSha:true,
+ skillTagFilter:function(player){
+ var list=player.getStorage('fuping').slice(0);
+ list.removeArray(player.getStorage('fuping_round'));
+ return list.contains('sha');
+ },
+ },
+ mod:{
+ targetInRange:function(card,player,target){
+ if(player.countDisabled()>=5) return true;
+ },
+ },
+ marktext:'萍',
+ intro:{content:'已记录$'},
+ group:'fuping_mark',
+ subSkill:{
+ mark:{
+ trigger:{global:'useCardAfter'},
+ filter:function(event,player){
+ return player!=event.player&&event.targets.contains(player)&&
+ player.countDisabled()<5&&!player.getStorage('fuping').contains(event.card.name);
+ },
+ logTarget:'player',
+ prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'),
+ check:function(event,player){
+ var list=['tao','juedou','guohe','shunshou','wuzhong','xietianzi','yuanjiao','wanjian','nanman','huoshaolianying','chuqibuyi','zhujinqiyuan','lebu','bingliang'];
+ if(!list.contains(event.card.name)) return false;
+ if(['nanman','wanjian'].contains(event.card.name)&&!player.hasValueTarget({name:event.card.name})) return false;
+ var list=[3,5,4,1,2];
+ for(var i of list){
+ if(!player.isDisabled(i)){
+ var card=player.getEquip(i);
+ if(!card) return true;
+ if(get.value(card,player)<=0) return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ player.markAuto('fuping',[trigger.card.name]);
+ game.log(player,'记录了','#y'+get.translation(trigger.card.name));
+ player.chooseToDisable().set('ai',function(event,player,list){
+ var list=[3,5,4,1,2];
+ for(var i of list){
+ if(!player.isDisabled(i)){
+ var card=player.getEquip(i);
+ if(!card) return 'equip'+i;
+ if(get.value(card,player)<=0) return 'equip'+i;
+ }
+ }
+ return list.randomGet();
+ });
+ },
+ },
+ backup:{audio:'fuping'},
+ round:{charlotte:true,onremove:true},
+ },
+ },
+ weilie:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ return player.countMark('weilie')<=player.getStorage('fuping').length&&player.countCards('he')>0&&game.hasPlayer((current)=>current.isDamaged())
+ },
+ filterCard:true,
+ position:'he',
+ filterTarget:(card,player,target)=>target.isDamaged(),
+ check:function(card){
+ return 8-get.value(card);
+ },
+ content:function(){
+ 'step 0'
+ player.addMark('weilie',1,false);
+ target.recover();
+ 'step 1'
+ if(target.isDamaged()) target.draw();
+ },
+ onremove:true,
+ ai:{
+ order:1,
+ result:{
+ target:function(player,target){
+ var eff=get.recoverEffect(target,player,player);
+ if(target.getDamagedHp()>1) eff+=get.effect(target,{name:'wuzhong'},player,target)/2;
+ return eff;
+ },
+ },
+ },
+ },
+ //刘巴
+ dczhubi:{
+ audio:2,
+ trigger:{global:'loseAfter'},
+ filter:function(event,player){
+ if(event.type!='discard'||event.position!=ui.discardPile) return false;
+ for(var i of event.cards){
+ if(get.suit(i,event.player)=='diamond') return true;
+ }
+ return false;
+ },
+ prompt2:'检索一张【无中生有】并置于牌堆顶',
+ check:function(event,player){
+ return get.attitude(player,_status.currentPhase.next)>0;
+ },
+ content:function(){
+ var card=get.cardPile(function(card){
+ return card.name=='wuzhong'&&get.suit(card)!='diamond';
+ });
+ if(card){
+ game.log(player,'将',card,'置于牌堆顶');
+ card.fix();
+ ui.cardPile.insertBefore(card,ui.cardPile.firstChild);
+ game.updateRoundNumber();
+ game.delayx();
+ }
+ },
+ },
+ dcliuzhuan:{
+ audio:2,
+ group:['dcliuzhuan_mark','dcliuzhuan_gain'],
+ mod:{
+ targetEnabled:function(card){
+ if(card.cards){
+ for(var i of card.cards){
+ if(i.hasGaintag('dcliuzhuan_tag')) return false;
+ }
+ }
+ else if(get.itemtype(card)=='card'){
+ if(card.hasGaintag('dcliuzhuan_tag')) return false;
+ }
+ },
+ },
+ subSkill:{
+ gain:{
+ trigger:{global:'loseAfter'},
+ forced:true,
+ logTarget:'player',
+ filter:function(event,player){
+ if(event.type!='discard'||event.player!=_status.currentPhase) return false;
+ for(var i in event.gaintag_map){
+ if(event.gaintag_map[i].contains('dcliuzhuan_tag')) return true;
+ }
+ return false;
+ },
+ content:function(){
+ var cards=trigger.hs.filter(function(i){
+ return trigger.gaintag_map[i.cardid]&&trigger.gaintag_map[i.cardid].contains('dcliuzhuan_tag');
+ });
+ if(cards.length>0) player.gain(cards,'gain2');
+ },
+ },
+ mark:{
+ trigger:{global:'gainBegin'},
+ forced:true,
+ popup:false,
+ silent:true,
+ lastDo:true,
+ filter:function(event,player){
+ if(player==event.player||event.player!=_status.currentPhase) return false;
+ var evt=event.getParent('phaseDraw');
+ if(evt&&evt.name=='phaseDraw') return false;
+ return true;
+ },
+ content:function(){
+ trigger.gaintag.add('dcliuzhuan_tag');
+ trigger.player.addTempSkill('dcliuzhuan_tag');
+ },
+ },
+ tag:{
+ charlotte:true,
+ onremove:(player,skill)=>player.removeGaintag(skill),
+ },
+ },
+ },
//张勋
suizheng:{
audio:2,
@@ -419,7 +656,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=lib.skill.dcpingxi.getNum()+ui.selected.cards.length;
if(num0;
+ return get.effect(current,{name:'guohe_copy2'},player,player)+get.effect(current,{name:'sha'},player,player)>0;
})){
if(get.position(card)=='h'&&player.needsToDiscard()>ui.selected.cards.length) return 7+1/Math.max(1,get.value(card));
return 7-get.value(card);
@@ -1292,6 +1529,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.card.name=='sha'&&event.card.nature) str+=get.translation(event.card.nature);
return (str+'【'+get.translation(event.card.name)+'】');
},
+ check:function(event,player){
+ return !get.tag(event.card,'norepeat')
+ },
content:function(){
player.addTempSkill('tongli_effect');
var evt=trigger.getParent('phaseUse');
@@ -1700,7 +1940,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
- event.num=player.getStat('damage');
+ event.num=Math.min(5,player.getStat('damage'));
player.chooseTarget('是否发动限定技【襄戍】?','令一名角色回复'+event.num+'点体力并摸'+get.cnNumber(event.num)+'张牌',function(card,player,target){
return target.isDamaged();
}).set('ai',function(target){
@@ -4678,7 +4918,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseButton(dialog,true).set('ai',function(button){
var player=_status.event.player;
var color=get.color(button.link),cards=player.getExpansions('syjiqiao');
- var num1=cards.filter((card)=>get.color(card)==color),num2=cards.length-num1;
+ var num1=cards.filter((card)=>get.color(card)==color).length,num2=cards.length-num1;
if(num1>=num2) return get.value(button.link);
return 0;
});
@@ -4810,7 +5050,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var list=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
- if(player.hasUseTarget({name:name},false)) list.push(['基本','',name]);
+ if(source.hasUseTarget({name:name},false)) list.push(['基本','',name]);
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(source.hasUseTarget({name:name,nature:nature},false)) list.push(['基本','',name,nature]);
@@ -7422,10 +7662,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:['phaseBefore'],
},
direct:true,
- filter:function(event,player){
+ filter:function(event,player,name){
if(player.hasSkill('zhiwei2')) return false;
if(get.mode()=='guozhan') return event.name=='showCharacter'&&(event.toShow.contains('gz_luyusheng')||event.toShow.contains('luyusheng'));
- return event.name!='showCharacter'&&(event.name!='phase'||game.phaseNumber==0);
+ return event.name!='showCharacter'&&(name!='phaseBefore'||game.phaseNumber==0);
},
content:function(){
'step 0'
@@ -14450,6 +14690,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
var info=get.info(event.card);
if(info.allowMultiple==false) return false;
+ var num=player.getHistory('useSkill',function(evt){
+ return evt.skill=='pyzhuren_club';
+ }).length;
+ if(num>=2) return false;
if(event.targets&&!info.multitarget){
if(game.hasPlayer(function(current){
return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current);
@@ -14476,10 +14720,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!event.isMine()&&!event.isOnline()) game.delayx();
event.targets=result.targets;
}
- else{
- player.storage.counttrigger[event.name]--;
- event.finish();
- }
'step 2'
if(event.targets){
player.logSkill(event.name,event.targets);
@@ -16623,6 +16863,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhaoang:'赵昂,字伟章(一作伟璋),天水冀人。汉末时曹操部下。初为羌道令,建安中转参军事徒居州治冀城。建安十八年,马超围冀城多天,城中饥困,凉州刺史韦康不愿百姓再受苦而打算投降,赵昂进劝但不为所纳。后马超背信弃义杀韦康并劫其子赵月为人质,把他送至南郑。欲以此要迫使赵昂为己所用。后与梁宽、赵衢、庞恭、杨阜等结谋为康报仇,并举兵讨伐马超。马超兵败遂弃城,投奔张鲁。得张鲁之援后马超于建安十九年复寇,赵昂与妻子王异坚守祁山三十天至夏侯渊的救兵解围,其子赵月终为马超斩杀。自冀城之难,至于祁山,赵昂出九奇策。',
fengfang:'冯方,其字不详,司隶人。初掌校事,监察京师及周边地区,刺探文武百官秘事。十常侍之乱后,董卓进京,掌控朝政。冯方认为他胸怀不臣之心,于是弃官携女儿冯妤至江南避祸。其后董卓果然乱政,京师之地生灵涂炭,更将洛阳付之一炬。冯方因其先见之明得以保全家人。
冯妤长大成人后,有倾国之貌。一日袁术登城观景,得见冯妤,心中非常喜欢,于是将其纳为夫人。冯方心忧自家女儿不谙世事,于是将可以让人更显妩媚的家传宝梳交给她,希望能借此使其获得袁术的宠爱。其后果然传来袁术偏爱冯夫人的消息,冯方因此宽心,接受了袁术的征辟,为其效力。然而好景不长,没过多久,冯妤自缢身亡的消息传出,冯方悲愤不已,弃官而走,自此销声匿迹。',
zhangxun:'张勋,东汉末年军阀袁术帐下大将,袁术称帝后受封大将军。初平四年(公元193年),袁术引兵入陈留,被曹操、袁绍合力击败,逃至雍丘。后入九江,杀死扬州刺史陈温而自领之,并任命张勋、桥蕤为大将。时孙策依附于袁术,被表为怀义校尉,张勋对其倾心敬服。袁术称帝后,任命张勋为大将军,攻打吕布,大败而还。其后曹操又以袁术称帝为名南下进攻,袁术闻之大惊,即走度淮,留张勋、桥蕤守蕲阳以拒曹。曹操破其军,斩桥蕤,张勋退走。建安四年(公元199年),袁术病死,张勋率残军欲南投孙策,途中被袁术旧部刘勋俘虏,其后下落不明。',
+ xiahoulingnv:'夏侯令女,字令女,名不详。生卒年不详,三国时期人物。夏侯文宁之女(《三国演义》中为夏侯令之女),曹文叔之妻。其事迹见于《三国志·魏书·诸夏侯曹传第九》裴松之注引皇甫谧《列女传》。而在《三国演义》中,由于作者断句错误,便认为“夏侯令女”是“夏侯令之女”之意(见《三国演义》第107回:“乃夏侯令女也”,由其语气可推断)。',
},
characterTitle:{
wulan:'#b对决限定武将',
@@ -16755,6 +16996,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
luotong:['luotong','dc_luotong'],
mamidi:['mamidi','xin_mamidi'],
dc_wangchang:['dc_wangchang','tw_wangchang'],
+ liuba:['dc_liuba','liuba'],
},
translate:{
lijue:"李傕",
@@ -17288,7 +17530,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rexingluan:'兴乱',
rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。',
xinxingluan:'兴乱',
- xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸六张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。',
+ xinxingluan_info:'每回合限一次。当你于出牌阶段使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸六张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。',
zhouyi:'周夷',
zhukou:'逐寇',
zhukou_info:'①当你于一名角色的出牌阶段第一次造成伤害后,你可以摸X张牌(X为本回合你已使用的牌数)。②你的结束阶段,若你本回合没有造成伤害,你可以对两名其他角色各造成1点伤害。',
@@ -17575,6 +17817,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangxun:'张勋',
suizheng:'随征',
suizheng_info:'结束阶段,你可以选择一名角色A,获得如下效果直到其下回合结束:①A于下回合出牌阶段内使用【杀】的次数上限+1且无距离限制;②A下回合的出牌阶段结束时,你可以选择一名此阶段内受到过A造成的伤害的角色B,视为对B使用一张【杀】。',
+ dc_liuba:'刘巴',
+ dczhubi:'铸币',
+ dczhubi_info:'当有♦牌因弃置而进入弃牌堆后,你可以令系统从牌堆/弃牌堆中检索一张【无中生有】,并将此牌置于牌堆顶。',
+ dcliuzhuan:'流转',
+ dcliuzhuan_tag:'转',
+ dcliuzhuan_info:'锁定技。①其他角色于其回合内不于摸牌阶段而获得的牌称为“转”。②你不能成为实体牌中包含“转”的牌的目标。③当有“转”因弃置而进入弃牌堆后,你获得之。',
+ xiahoulingnv:'夏侯令女',
+ fuping:'浮萍',
+ fuping_info:'①其他角色对你使用的结算结束后,若你未因此技能记录过此牌的名称且你有未废除的装备栏,则你可以废除一个装备栏,记录此牌的名称。②每回合每种牌名限一次。你可以将一张非基本牌当做〖浮萍①〗记录过的基本牌或锦囊牌使用或打出。③若你的所有装备栏均已被废除,则你使用牌无距离限制。',
+ weilie:'炜烈',
+ weilie_info:'每局游戏限X次。出牌阶段,你可以弃置一张牌并选择一名已受伤的角色,令该角色回复1点体力。然后若其体力值小于体力上限,则其摸一张牌(X为你〖浮萍①〗中的记录数+1)。',
sp_whlw:"文和乱武",
sp_zlzy:"逐鹿中原",
diff --git a/character/yijiang.js b/character/yijiang.js
index f2d94a938..18971244f 100755
--- a/character/yijiang.js
+++ b/character/yijiang.js
@@ -12,10 +12,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2014:['hanhaoshihuan','chenqun','caozhen','zhangsong','wuyi','zhoucang','zhuhuan','guyong','sunluban','yj_jushou','caifuren'],
yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'],
yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'],
- yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie',],
+ yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie'],
+ yijiang_2022:['lukai'],
},
},
character:{
+ lukai:['male','wu',4,['lkbushi','lkzhongzhuang']],
xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo'],['die_audio']],
old_guanzhang:['male','shu',4,['old_fuhun']],
old_wangyi:['female','wei',3,['oldzhenlie','oldmiji']],
@@ -99,6 +101,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yujin:["male","wei",4,["yizhong"],[]],
},
characterIntro:{
+ lukai:'陆凯(198-269年),字敬风,吴郡吴县(今江苏省苏州市)人。三国时期吴国重臣,丞相陆逊的族侄,大司马陆抗的族兄。黄武年间,举孝廉出身,曾任永兴县长、诸暨县长,颇有治绩。拜建武都尉、儋耳太守,与聂友率军讨伐朱崖和儋耳,迁建武校尉。五凤二年(255年),讨斩零陵山贼陈毖,拜偏将军、巴丘督,册封都乡侯。迁武昌右部督,随军进入寿春。后拜荡魏将军,加号绥远将军。吴景帝孙休继位,拜征北将军、假节、领豫州牧。孙皓即位,迁任镇西大将军,都督巴丘,又领荆州牧,进封嘉兴侯。宝鼎元年(266年),迁左丞相。以正直及屡次劝谏孙皓而闻名。建衡元年(269年),去世,时年七十二。',
caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。',
gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。',
chengong:'字公台,东汉末年吕布帐下谋士,东郡东武阳人。性情刚直,足智多谋,年少时与海内知名之士相互结交。192年,陈宫等人主张曹操接任兖州牧。但此后陈宫因曹操杀害边让而与曹操反目,并游说张邈等人背叛曹操迎吕布入兖州,辅助吕布攻打曹操。吕布战败后,随吕布等一同被曹操所擒,决意赴死。',
@@ -194,6 +197,184 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhonghui:['jiangwei'],
},
skill:{
+ //陆凯
+ lkbushi:{
+ audio:2,
+ getBushi:function(player){
+ if(!player.storage.lkbushi) return ['spade','heart','club','diamond'];
+ return player.storage.lkbushi;
+ },
+ onremove:true,
+ trigger:{player:'phaseZhunbeiBegin'},
+ direct:true,
+ locked:false,
+ content:function(){
+ 'step 0'
+ var list=lib.skill.lkbushi.getBushi(player);
+ list=list.map(function(i){
+ return ['','','lukai_'+i];
+ });
+ var next=player.chooseToMove('卜筮:是否调整〖卜筮〗的花色顺序?');
+ next.set('list',[
+ ['无次数限制/使用打出摸牌
可弃牌无效/结束阶段获得',[list,'vcard'],function(list){
+ var list2=list.map(function(i){
+ return get.translation(i[2].slice(6));
+ });
+ return '你使用'+list2[0]+'牌时无次数限制;使用或打出'+list2[1]+'时,摸一张牌;
成为'+list2[2]+'牌目标后可弃一张牌无效;结束阶段获得一张'+list2[3]+'牌';
+ }],
+ ]);
+ next.set('processAI',function(){
+ var player=_status.event.player;
+ var list=lib.skill.lkbushi.getBushi(player);
+ var list2=[];
+ var hs=player.getCards('hs',function(card){
+ return player.hasValueTarget(card);
+ });
+ list.sort(function(a,b){
+ return hs.filter((i)=>get.suit(i)==b).length-hs.filter((i)=>get.suit(i)==a).length;
+ });
+ list2.push(list.shift());
+ hs=player.getCards('hs','sha');
+ list.sort(function(a,b){
+ return hs.filter((i)=>get.suit(i)==b).length-hs.filter((i)=>get.suit(i)==a).length;
+ });
+ list2.unshift(list.shift());
+ list.randomSort();
+ list2.addArray(list);
+ return [list2.map((i)=>['','','lukai_'+i])]
+ });
+ 'step 1'
+ if(result.bool){
+ var list=lib.skill.lkbushi.getBushi(player),list2=result.moved[0].map(function(i){
+ return i[2].slice(6);
+ });
+ for(var i=0;i<4;i++){
+ if(list[i]!=list2[i]){
+ player.logSkill('lkbushi');
+ player.storage.lkbushi=list2;
+ var str='#g';
+ for(var j=0;j<4;j++){
+ str+=get.translation(list2[j]);
+ if(j!=3) str+='/';
+ }
+ game.log(player,'将','#g【卜筮】','的花色序列改为',str);
+ game.delayx();
+ break;
+ }
+ }
+ }
+ },
+ mark:true,
+ marktext:'筮',
+ intro:{
+ content:function(storage,player){
+ var list=lib.skill.lkbushi.getBushi(player).map((i)=>get.translation(i));
+ return '①你使用'+list[0]+'牌无次数限制。②当你使用或打出'+list[1]+'牌后,你摸一张牌。③当你成为'+list[2]+'牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张'+list[3]+'牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。';
+ },
+ },
+ group:['lkbushi_unlimit','lkbushi_draw','lkbushi_defend','lkbushi_gain'],
+ subSkill:{
+ unlimit:{
+ mod:{
+ cardUsable:function(card,player){
+ var list=lib.skill.lkbushi.getBushi(player);
+ if(list[0]==get.suit(card)) return Infinity;
+ },
+ },
+ trigger:{player:'useCard1'},
+ forced:true,
+ popup:false,
+ silent:true,
+ firstDo:true,
+ filter:function(event,player){
+ if(event.addCount===false) return true;
+ var list=lib.skill.lkbushi.getBushi(player);
+ return (list[0]==get.suit(event.card));
+ },
+ content:function(){
+ trigger.addCount=false;
+ var stat=player.getStat().card,name=trigger.card.name;
+ if(stat[name]&&typeof stat[name]=='number') stat[name]--;
+ },
+ },
+ draw:{
+ audio:'lkbushi',
+ trigger:{player:['useCard','respond']},
+ forced:true,
+ locked:false,
+ filter:function(event,player){
+ var list=lib.skill.lkbushi.getBushi(player);
+ return list[1]==get.suit(event.card);
+ },
+ content:function(){
+ player.draw();
+ },
+ },
+ defend:{
+ audio:'lkbushi',
+ trigger:{target:'useCardToTargeted'},
+ direct:true,
+ filter:function(event,player){
+ var list=lib.skill.lkbushi.getBushi(player);
+ return list[2]==get.suit(event.card)&&!event.excluded.contains(player)&&player.countCards('he')>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseToDiscard('he',get.prompt('lkbushi'),'弃置一张牌,令'+get.translation(trigger.card)+'对你无效').set('ai',function(card){
+ if(_status.event.eff>=0) return false;
+ return -_status.event.eff*1.1-get.value(card);
+ }).set('eff',get.effect(player,trigger.card,trigger.player,player)).logSkill=['lkbushi_defend',trigger.player];
+ 'step 1'
+ if(result.bool){
+ trigger.excluded.add(player);
+ }
+ },
+ },
+ gain:{
+ audio:'lkbushi',
+ trigger:{player:'phaseJieshuBegin'},
+ forced:true,
+ locked:false,
+ content:function(){
+ var list=lib.skill.lkbushi.getBushi(player);
+ var card=get.cardPile(function(card){
+ return get.suit(card,false)==list[3];
+ });
+ if(card) player.gain(card,'gain2');
+ },
+ },
+ },
+ },
+ lkzhongzhuang:{
+ audio:2,
+ trigger:{source:'damageBegin1'},
+ forced:true,
+ filter:function(event,player){
+ if(!event.card||event.card.name!='sha'||event.getParent().type!='card') return false;
+ var range=player.getAttackRange();
+ if(range>3) return true;
+ return range<3&&event.num>1;
+ },
+ content:function(){
+ var range=player.getAttackRange();
+ if(range>3) trigger.num++;
+ else trigger.num=1;
+ },
+ global:'lkzhongzhuang_ai',
+ subSkill:{
+ ai:{
+ ai:{
+ filterDamage:true,
+ skillTagFilter:function(player,tag,arg){
+ if(arg&&arg.card&&arg.card.name=='sha'){
+ if(arg.player&&arg.player.hasSkill('lkzhongzhuang')&&arg.player.getAttackRange()<3) return true;
+ }
+ return false;
+ },
+ },
+ },
+ },
+ },
//顾雍
olbingyi:{
audio:'bingyi',
@@ -3808,7 +3989,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
trigger.player.addSkill('xinsidi2');
- trigger.player.storage.xinsidi2=get.color(result.cards[0],result.cards[0].original=='h'?player:false);
+ trigger.player.markAuto('xinsidi2',[get.color(result.cards[0],result.cards[0].original=='h'?player:false)]);
trigger.player.storage.xinsidi4=player;
trigger.player.syncStorage('xinsidi2');
}
@@ -3843,8 +4024,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
mod:{
- cardEnabled2:function(card,player){
- if(get.color(card)==player.storage.xinsidi2) return false;
+ cardEnabled:function(card,player){
+ if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
+ },
+ cardRespondable:function(card,player){
+ if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
+ },
+ cardSavable:function(card,player){
+ if(player.getStorage('xinsidi2').contains(get.color(card))) return false;
},
},
intro:{
@@ -10065,6 +10252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhichi2:{
trigger:{target:'useCardToBefore'},
forced:true,
+ charlotte:true,
priority:15,
filter:function(event,player){
return get.type(event.card)=='trick'||event.card.name=='sha';
@@ -12092,6 +12280,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
+ card:{
+ lukai_spade:{fullskin:true},
+ lukai_heart:{fullskin:true},
+ lukai_diamond:{fullskin:true},
+ lukai_club:{fullskin:true},
+ },
dynamicTranslate:{
rejueqing:function(player){
if(player.storage.rejueqing_rewrite) return '锁定技,你即将造成的伤害均视为失去体力。';
@@ -12116,6 +12310,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.hasSkill('funan_jiexun')) return '其他角色使用或打出牌响应你使用的牌时,你可获得其使用或打出的牌。';
return '其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。';
},
+ lkbushi:function(player){
+ var list=lib.skill.lkbushi.getBushi(player).map((i)=>get.translation(i));
+ return '①你使用'+list[0]+'牌无次数限制。②当你使用或打出'+list[1]+'牌后,你摸一张牌。③当你成为'+list[2]+'牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张'+list[3]+'牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。';
+ },
},
characterReplace:{
caozhi:['re_caozhi','caozhi'],
@@ -12754,6 +12952,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinzhaofu_info:'主公技,限定技。出牌阶段,你可选择至多两名其他角色。这两名角色视为在所有其他吴势力角色的攻击范围内。',
olbingyi:'秉壹',
olbingyi_info:'每阶段限一次。当你因弃置而失去牌后,你可以展示所有手牌。若这些牌的颜色均相同,则你可以与至多X名其他角色各摸一张牌(X为你的手牌数)。',
+ lukai:'陆凯',
+ lukai_spade:'♠',
+ lukai_spade_bg:'♠️',
+ lukai_heart:'♥',
+ lukai_heart_bg:'♥️',
+ lukai_club:'♣',
+ lukai_club_bg:'♣',
+ lukai_diamond:'♦',
+ lukai_diamond_bg:'♦️️',
+ lkbushi:'卜筮',
+ lkbushi_info:'①你使用♠牌无次数限制。②当你使用或打出♥牌后,你摸一张牌。③当你成为♣牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张♦牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。',
+ lkzhongzhuang:'忠壮',
+ lkzhongzhuang_info:'锁定技。当你因执行【杀】的效果而造成伤害时,若你的攻击范围:大于3,则此伤害+1;小于3,则此伤害改为1。',
yijiang_2011:'一将成名2011',
yijiang_2012:'一将成名2012',
@@ -12762,6 +12973,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2015:'一将成名2015',
yijiang_2016:'原创设计2016',
yijiang_2017:'原创设计2017',
+ yijiang_2022:'原创设计2022',
},
};
});
diff --git a/font/suits.ttf b/font/suits.ttf
new file mode 100644
index 000000000..dd15c8f52
Binary files /dev/null and b/font/suits.ttf differ
diff --git a/game/asset.js b/game/asset.js
index 2cbd6d00f..0503b3c36 100644
--- a/game/asset.js
+++ b/game/asset.js
@@ -1,5 +1,5 @@
window.noname_asset_list=[
- 'v1.9.115.3',
+ 'v1.9.116',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@@ -4630,6 +4630,10 @@ window.noname_asset_list=[
'image/card/sanlve.png',
'image/card/zhaogujing.png',
'image/card/changandajian_equip1.png',
+ 'image/card/lukai_club.png',
+ 'image/card/lukai_diamond.png',
+ 'image/card/lukai_heart.png',
+ 'image/card/lukai_spade.png',
'image/card/bagua.png',
'image/card/baihupifeng.png',
@@ -5644,6 +5648,12 @@ window.noname_asset_list=[
'image/character/zhangxun.jpg',
'image/character/zhaoang.jpg',
'image/character/zhaoyǎn.jpg',
+ 'image/character/caoxiancaohua.jpg',
+ 'image/character/dc_liuba.jpg',
+ 'image/character/key_seira.jpg',
+ 'image/character/lukai.jpg',
+ 'image/character/prp_zhugeliang.jpg',
+ 'image/character/xiahoulingnv.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',
diff --git a/game/config.js b/game/config.js
index 5f8d38742..c8c9aa464 100644
--- a/game/config.js
+++ b/game/config.js
@@ -1,6 +1,5 @@
window.config={
extension_sources:{
- Coding:'https://nakamurayuri.coding.net/p/noname-extension/d/noname-extension/git/raw/master/',
GitHub:'https://raw.githubusercontent.com/libccy/noname-extension/master/',
},
extension_source:'Coding',
@@ -134,7 +133,7 @@ window.config={
sort:'type_sort',
cards:['standard','extra'],
- characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb'],
+ characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb','tw','offline'],
connect_characters:['diy'],
connect_cards:['huanlekapai','guozhan','sp','zhulu','yingbian','yongjian'],
plays:[],
diff --git a/game/game.js b/game/game.js
index e80cc4ebb..2e738e4c0 100644
--- a/game/game.js
+++ b/game/game.js
@@ -21,6 +21,7 @@
globalHistory:[{
cardMove:[],
custom:[],
+ useCard:[],
}],
cardtag:{
yingbian_zhuzhan:[],
@@ -35,7 +36,7 @@
configprefix:'noname_0.9_',
versionOL:27,
updateURLS:{
- coding:'https://nakamurayuri.coding.net/p/noname/d/noname/git/raw',
+ coding:'https://ghproxy.com/https://raw.githubusercontent.com/libccy/noname',
github:'https://raw.githubusercontent.com/libccy/noname',
},
updateURL:'https://raw.githubusercontent.com/libccy/noname',
@@ -540,7 +541,7 @@
init:'coding',
unfrequent:true,
item:{
- coding:'Coding',
+ coding:'Github Proxy',
github:'GitHub',
},
onclick:function(item){
@@ -7438,6 +7439,9 @@
}
lib.assetURL=noname_inited;
}
+ if(lib.assetURL.indexOf('com.widget.noname.qingyao')!='-1'){
+ alert('您正在一个不受信任的闭源客户端上运行《无名杀》。建议您更换为其他开源的无名杀客户端,避免给您带来不必要的损失。');
+ }
var config3=null;
var proceed=function(config2){
@@ -7493,13 +7497,13 @@
var pack=window.noname_package;
delete window.noname_package;
for(i in pack.character){
- if(lib.config.hiddenCharacterPack.indexOf(i)==-1){
+ if(lib.config.all.sgscharacters.contains(i)||lib.config.hiddenCharacterPack.indexOf(i)==-1){
lib.config.all.characters.push(i);
lib.translate[i+'_character_config']=pack.character[i];
}
}
for(i in pack.card){
- if(lib.config.hiddenCardPack.indexOf(i)==-1){
+ if(lib.config.all.sgscards.contains(i)||lib.config.hiddenCardPack.indexOf(i)==-1){
lib.config.all.cards.push(i);
lib.translate[i+'_card_config']=pack.card[i];
}
@@ -7580,8 +7584,10 @@
lib.configMenu.appearence.config.identity_font.item[i]=pack.font[i];
lib.configMenu.appearence.config.cardtext_font.item[i]=pack.font[i];
lib.configMenu.appearence.config.global_font.item[i]=pack.font[i];
- ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"';src: url('"+lib.assetURL+"font/"+i+".ttf');}",0);
+ ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"'; src: url('"+lib.assetURL+"font/"+i+".ttf');}",0);
+ ui.css.fontsheet.sheet.insertRule("@font-face {font-family: '"+i+"'; src: url('"+lib.assetURL+"font/suits.ttf');}",0);
}
+ ui.css.fontsheet.sheet.insertRule("@font-face {font-family: 'Suits'; src: url('"+lib.assetURL+"font/suits.ttf');}",0);
lib.configMenu.appearence.config.cardtext_font.item.default='默认';
lib.configMenu.appearence.config.global_font.item.default='默认';
}
@@ -10671,9 +10677,14 @@
buttons.classList.add('guanxing');
buttons._link=i;
if(list[i][1]){
- var cardsb=ui.create.buttons(list[i][1],'card',buttons);
- if(list[i][2]&&typeof list[i][2]=='string'){
- for(var ij of cardsb) ij.node.gaintag.innerHTML=get.translation(list[i][2]);
+ if(get.itemtype(list[i][1])=='cards'){
+ var cardsb=ui.create.buttons(list[i][1],'card',buttons);
+ if(list[i][2]&&typeof list[i][2]=='string'){
+ for(var ij of cardsb) ij.node.gaintag.innerHTML=get.translation(list[i][2]);
+ }
+ }
+ else if(list[i][1].length==2){
+ ui.create.buttons(list[i][1][0],list[i][1][1],buttons);
}
}
if(list[i][2]&&typeof list[i][2]=='function') buttons.textPrompt=list[i][2];
@@ -11255,6 +11266,7 @@
_status.globalHistory.push({
cardMove:[],
custom:[],
+ useCard:[],
});
game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]});
@@ -12590,12 +12602,16 @@
var next=player.chooseControl(info.chooseButton.chooseControl(event,player));
next.dialog=dialog;
next.set('ai',info.chooseButton.check||function(){return 0;});
+ if(event.id) next._parent_id=event.id;
+ next.type='chooseToUse_button';
}
else{
var next=player.chooseButton(dialog);
next.set('ai',info.chooseButton.check||function(){return 1;});
next.set('filterButton',info.chooseButton.filter||function(){return true;});
next.set('selectButton',info.chooseButton.select||1);
+ if(event.id) next._parent_id=event.id;
+ next.type='chooseToUse_button';
}
event.buttoned=event.result.skill;
}
@@ -14173,7 +14189,7 @@
choosePlayerCard:function(){
"step 0"
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
- else if(!event.isMine){
+ else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt){
@@ -14286,7 +14302,7 @@
return;
}
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
- else if(!event.isMine){
+ else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt==undefined){
@@ -14431,7 +14447,7 @@
return;
}
if(!event.dialog) event.dialog=ui.create.dialog('hidden');
- else if(!event.isMine){
+ else if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.prompt==undefined){
@@ -14937,6 +14953,7 @@
event.oncard(event.card,event.player);
}
player.actionHistory[player.actionHistory.length-1].useCard.push(event);
+ game.getGlobalHistory().useCard.push(event);
if(event.addCount!==false){
if(player.stat[player.stat.length-1].card[card.name]==undefined){
player.stat[player.stat.length-1].card[card.name]=1;
@@ -20266,6 +20283,11 @@
if(event.addCount===false){
next.addCount=false;
}
+ if(result._apply_args){
+ for(var i in result._apply_args){
+ next[i]=result._apply_args[i];
+ }
+ }
return next;
}
else if(result.skill){
@@ -22117,6 +22139,7 @@
var info=get.info(card);
if(info.multicheck&&!info.multicheck(card,this)) return false;
if(!lib.filter.cardEnabled(card,this)) return false;
+ if(includecard&&!lib.filter.cardUsable(card,this)) return false;
if(distance!==false&&!lib.filter.targetInRange(card,this,target)) return false;
return lib.filter[includecard?'targetEnabledx':'targetEnabled'](card,this,target);
},
@@ -25171,8 +25194,8 @@
}
var cardnum=card[1]||'';
if(parseInt(cardnum)==cardnum) cardnum=parseInt(cardnum);
- if([1,11,12,13].contains(cardnum)){
- cardnum={'1':'A','11':'J','12':'Q','13':'K'}[cardnum];
+ if(cardnum>0&&cardnum<14){
+ cardnum=['A','2','3','4','5','6','7','8','9','10','J','Q','K'][cardnum-1];
}
if(!lib.card[card[2]]){
lib.card[card[2]]={};
@@ -25378,7 +25401,7 @@
this.node.info.innerHTML=info.modinfo;
}
else{
- this.node.info.innerHTML=get.translation(card[0])+' '+cardnum;
+ this.node.info.innerHTML=get.translation(card[0])+' '+cardnum+'';
}
if(info.addinfo){
if(!this.node.addinfo){
@@ -26805,6 +26828,7 @@
var info=get.info(card);
if(info.updateUsable=='phaseUse'){
event=event||_status.event;
+ if(event.type=='chooseToUse_button') event=event.getParent();
if(player!=_status.event.player) return true;
if(event.getParent().name!='phaseUse') return true;
if(event.getParent().player!=player) return true;
@@ -26819,6 +26843,7 @@
card=get.autoViewAs(card,null,player);
var info=get.info(card);
event=event||_status.event;
+ if(event.type=='chooseToUse_button') event=event.getParent();
if(player!=_status.event.player) return true;
if(info.updateUsable=='phaseUse'){
if(event.getParent().name!='phaseUse') return true;
@@ -29016,6 +29041,9 @@
}
},
cancel:function(id){
+ if(_status.event._parent_id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
+ ui.click.cancel();
+ }
if(_status.event.id==id&&_status.event.isMine()&&_status.paused&&_status.imchoosing){
ui.click.cancel();
if(ui.confirm){
@@ -33746,6 +33774,7 @@
check:function(event){
var i,j,range;
if(event==undefined) event=_status.event;
+ event._checked=true;
var custom=event.custom||{};
var ok=true,auto=true;
var player=event.player;
@@ -36590,7 +36619,7 @@
roundNumber:0,
shuffleNumber:0,
};
- window['b'+'ann'+'e'+'dE'+'x'+'ten'+'s'+'i'+'o'+'ns']=[];
+ window['b'+'ann'+'e'+'dE'+'x'+'ten'+'s'+'i'+'o'+'ns']=['\u5047装\u65e0敌'];
var ui={
updates:[],
thrown:[],
@@ -39104,14 +39133,19 @@
page.classList.add('menu-buttons');
page.classList.add('leftbutton');
if(!connectMenu){
- if(mode.indexOf('mode_')!=0){
+ if(lib.config.all.sgscharacters.contains(mode)){
+ ui.create.div('.config.pointerspan','该武将包不可被隐藏',page);
+ }
+ else if(mode.indexOf('mode_')!=0){
ui.create.div('.config.pointerspan','隐藏武将包',page,function(){
if(this.firstChild.innerHTML=='隐藏武将包'){
- this.firstChild.innerHTML='武将包将在重启后隐藏';
- lib.config.hiddenCharacterPack.add(mode);
- if(!lib.config.prompt_hidepack){
- alert('隐藏的扩展包可通过选项-其它-重置隐藏内容恢复');
- game.saveConfig('prompt_hidepack',true);
+ if(confirm('真的要隐藏“'+get.translation(mode+'_character_config')+'”武将包吗?\n建议使用“关闭”而不是“隐藏”功能,否则将会影响其他相关武将包的正常运行!')){
+ this.firstChild.innerHTML='武将包将在重启后隐藏';
+ lib.config.hiddenCharacterPack.add(mode);
+ if(!lib.config.prompt_hidepack){
+ alert('隐藏的扩展包可通过选项-其它-重置隐藏内容恢复');
+ game.saveConfig('prompt_hidepack',true);
+ }
}
}
else{
@@ -39315,7 +39349,7 @@
var list=[];
for(var i=0;i隐藏卡牌包',page,function(){
if(this.firstChild.innerHTML=='隐藏卡牌包'){
this.firstChild.innerHTML='卡牌包将在重启后隐藏';
@@ -48655,7 +48689,7 @@
if(_status.event.skill&&_status.event.name=='chooseToUse'){
ui.click.cancel();
}
- else{
+ else if(_status.event._checked){
game.uncheck();
game.check();
}
diff --git a/game/source.js b/game/source.js
index 986daac8c..3a055581e 100644
--- a/game/source.js
+++ b/game/source.js
@@ -38,6 +38,7 @@ window.noname_source_list=[
'character/yijiang.js',
'character/yingbian.js',
'character/yxs.js',
+ 'font/suits.ttf',
'game/asset.js',
'game/codemirror.js',
'game/config.js',
diff --git a/game/update.js b/game/update.js
index 34c8c7821..783326037 100644
--- a/game/update.js
+++ b/game/update.js
@@ -1,26 +1,25 @@
window.noname_update={
- version:'1.9.115.3',
- update:'1.9.115.2.1',
+ version:'1.9.116',
+ update:'1.9.115.3',
changeLog:[
- '钟离牧入选稿公布',
- 'OL周处、赵俨',
- '十周年纪灵、孙茹、王昶、冯芳、张勋、赵昂',
- '海外服神关羽',
+ '派对浪客、樱庭星罗入选稿公布',
+ 'OL曹宪曹华、十周年刘巴、陆凯、夏侯令女',
+ '花色字体显示优化',
'技能调整与bug修复',
],
files:[
- //'card/extra.js',
+ 'card/extra.js',
//'card/gujian.js',
- //'card/guozhan.js',
+ 'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
- //'card/sp.js',
+ 'card/sp.js',
//'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
- 'card/yongjian.js',
+ //'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
'character/diy.js',
@@ -32,7 +31,7 @@ window.noname_update={
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
- //'character/old.js',
+ 'character/old.js',
//'character/ow.js',
'character/rank.js',
'character/refresh.js',
@@ -45,11 +44,12 @@ window.noname_update={
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
- 'character/yingbian.js',
+ //'character/yingbian.js',
'character/yijiang.js',
//'character/yxs.js',
//'extension/boss/extension.js',
- //'layout/default/layout.css',
+ 'font/suits.ttf',
+ 'layout/default/layout.css',
//'layout/newlayout/global.css',
//'layout/default/menu.css',
//'layout/nova/layout.css',
@@ -59,7 +59,7 @@ window.noname_update={
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
- //'mode/guozhan.js',
+ 'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',
@@ -68,16 +68,16 @@ window.noname_update={
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',
- //'game/config.js',
+ 'game/config.js',
//'game/package.js',
//'game/asset.js',
- //'game/source.js',
+ 'game/source.js',
//'theme/style/hp/custom.css',
//'theme/style/hp/emotion.css',
//'theme/style/hp/glass.css',
//'theme/style/hp/image',
//'theme/style/hp/official.css',
- //'theme/style/hp/ol.css',
+ 'theme/style/hp/ol.css',
//'theme/style/hp/round.css',
//'theme/style/hp/xinglass.css',
//'theme/style/hp/xinround.css',
diff --git a/image/card/lukai_club.png b/image/card/lukai_club.png
new file mode 100644
index 000000000..b13b153e9
Binary files /dev/null and b/image/card/lukai_club.png differ
diff --git a/image/card/lukai_diamond.png b/image/card/lukai_diamond.png
new file mode 100644
index 000000000..3591db5a7
Binary files /dev/null and b/image/card/lukai_diamond.png differ
diff --git a/image/card/lukai_heart.png b/image/card/lukai_heart.png
new file mode 100644
index 000000000..16bb0883c
Binary files /dev/null and b/image/card/lukai_heart.png differ
diff --git a/image/card/lukai_spade.png b/image/card/lukai_spade.png
new file mode 100644
index 000000000..e56994d38
Binary files /dev/null and b/image/card/lukai_spade.png differ
diff --git a/image/character/caoxiancaohua.jpg b/image/character/caoxiancaohua.jpg
new file mode 100644
index 000000000..6e5ff163a
Binary files /dev/null and b/image/character/caoxiancaohua.jpg differ
diff --git a/image/character/dc_liuba.jpg b/image/character/dc_liuba.jpg
new file mode 100644
index 000000000..0f5e71b7c
Binary files /dev/null and b/image/character/dc_liuba.jpg differ
diff --git a/image/character/key_seira.jpg b/image/character/key_seira.jpg
new file mode 100644
index 000000000..8da6c2457
Binary files /dev/null and b/image/character/key_seira.jpg differ
diff --git a/image/character/lukai.jpg b/image/character/lukai.jpg
new file mode 100644
index 000000000..0bb658432
Binary files /dev/null and b/image/character/lukai.jpg differ
diff --git a/image/character/prp_zhugeliang.jpg b/image/character/prp_zhugeliang.jpg
new file mode 100644
index 000000000..443c1305b
Binary files /dev/null and b/image/character/prp_zhugeliang.jpg differ
diff --git a/image/character/xiahoulingnv.jpg b/image/character/xiahoulingnv.jpg
new file mode 100644
index 000000000..9d48b8845
Binary files /dev/null and b/image/character/xiahoulingnv.jpg differ
diff --git a/layout/default/layout.css b/layout/default/layout.css
index 1511e6f72..ff5ef7efe 100644
--- a/layout/default/layout.css
+++ b/layout/default/layout.css
@@ -25,7 +25,7 @@ body {
overflow: hidden;
text-rendering: optimizeLegibility;
transform-origin: top left;
- font-family: 'STHeiti','SimHei','Microsoft JhengHei','Microsoft YaHei','WenQuanYi Micro Hei',Helvetica,Arial,sans-serif
+ font-family: 'STHeiti','SimHei','Microsoft JhengHei','Microsoft YaHei','WenQuanYi Micro Hei','Suits',Helvetica,Arial,sans-serif;
}
div {
@@ -1295,9 +1295,10 @@ body>.background.land {
/*overflow: hidden;*/
}
.card>.info {
- right: 6px;
- top: 9px;
+ top: 5.2px;
+ right: 7px;
white-space: nowrap;
+ word-spacing: -0.1em;
}
.card>.range {
bottom: 5px;
@@ -4251,13 +4252,14 @@ div[data-decoration="bronze"]::after{
color: rgb(255,235,59);
}
.card.fullskin>.info {
- top: 8px;
- right: 6px;
+ top: 5.2px;
+ right: 7px;
color: rgba(0,0,0,0.8);
+ white-space: nowrap;
text-shadow: none;
}
.card.fullskin>.info.red {
- color: #631515;
+ color: #A82424;
}
.config>.toggle.onoff {
diff --git a/mode/guozhan.js b/mode/guozhan.js
index 96e883b5a..0162f88d7 100644
--- a/mode/guozhan.js
+++ b/mode/guozhan.js
@@ -3039,7 +3039,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return player.countMark('gzsuzhi_count')<3;
},
content:function(){
- player.addTempSkill('fankui',{player:'phaseBegin'});
+ player.addTempSkill('gzfankui',{player:'phaseBegin'});
},
group:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'],
preHidden:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'],
@@ -3365,7 +3365,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var evt=_status.event.getParent();
if(evt.name!='gzzhuhai'||!arg||!arg.target) return false;
if(!arg.target.getHistory('sourceDamage',function(evt){
- return evt.player.sameIdentityAs(player);
+ return evt.player.isFriendOf(player);
}).length) return false;
return true;
},
@@ -3998,14 +3998,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzxingzhao:{
audio:2,
getNum:function(){
- var num=0;
- var list=[];
- game.countPlayer(function(current){
- if(current.identity=='unknown'||current.isHealthy()) return;
- if(current.identity=='ye') num++;
- else list.add(current.identity);
- });
- return num+list.length;
+ var list=[],players=game.filterPlayer();
+ for(var target of players){
+ if(target.isUnseen()||target.isHealthy()) continue;
+ var add=true;
+ for(var i of list){
+ if(i.isFriendOf(target)){
+ add=false;
+ break;
+ }
+ }
+ if(add) list.add(target);
+ }
+ return list.length;
},
mod:{
maxHandcard:function(player,num){
@@ -6588,7 +6593,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
silent:true,
filter:function(event){
if(event.player.isUnseen()) return false;
- return event.getParent(2).skill=='new_luanji'&&event.player.sameIdentityAs(_status.currentPhase);
+ return event.getParent(2).skill=='new_luanji'&&event.player.isFriendOf(_status.currentPhase);
},
content:function(){
trigger.player.draw();
@@ -7881,8 +7886,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filterTarget:function(card,player,target){
if(target==player) return false;
if(player.isUnseen()) return target.isUnseen();
- if(player.identity=='ye') return true;
- return target.identity!=player.identity;
+ return !target.isFriendOf(player);
},
check:function(card){
if(card.name=='tao') return 0;
@@ -7975,7 +7979,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
trigger:{global:'useCardToTarget'},
filter:function(event,player){
if(!['basic','trick'].contains(get.type(event.card,'trick'))) return false;
- return event.target&&player.sameIdentityAs(event.target)&&event.targets.length==1&&player.getExpansions('qianhuan').length;
+ return event.target&&player.isFriendOf(event.target)&&event.targets.length==1&&player.getExpansions('qianhuan').length;
},
direct:true,
content:function(){
@@ -8031,7 +8035,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
trigger.cancel();
'step 1'
- if(player.sameIdentityAs(trigger.player)){
+ if(player.isFriendOf(trigger.player)){
trigger.player.mayChangeVice();
}
}
@@ -8507,7 +8511,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
audio:'yuejian',
preHidden:true,
filter:function(event,player){
- if(player.sameIdentityAs(event.player)){
+ if(player.isFriendOf(event.player)){
return event.player.getHistory('useCard',function(evt){
if(evt.targets){
var targets=evt.targets.slice(0);
@@ -12434,6 +12438,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
changeViceOnline:function(){
'step 0'
+ player.showCharacter(2);
var group=lib.character[player.name1][1];
_status.characterlist.randomSort();
var name=false;
@@ -12450,16 +12455,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.toChange=name;
if(event.change) event.trigger('removeCharacterBefore');
'step 1'
- var name=event.toChange;
- game.log(player,'将副将变更为','#g'+get.translation(name));
- player.viceChanged=true;
- if(player.isUnseen(1)){
- player.showCharacter(1,false);
+ if(event.hidden){
+ if(!player.isUnseen(1)) player.hideCharacter(1);
}
+ 'step 2'
+ var name=event.toChange;
+ if(event.hidden) game.log(player,'替换了副将','#g'+get.translation(player.name2));
+ else game.log(player,'将副将从','#g'+get.translation(player.name2),'变更为','#g'+get.translation(name));
+ player.viceChanged=true;
player.reinit(player.name2,name,false);
},
changeVice:function(){
'step 0'
+ player.showCharacter(2);
if(!event.num) event.num=3;
var group=player.identity;
if(!lib.group.contains(group)) group=lib.character[player.name1][1];
@@ -12491,12 +12499,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.toChange=name;
if(event.change) event.trigger('removeCharacterBefore');
if(event.hidden){
- if(player.isUnseen(0)) player.showCharacter(0,false);
if(!player.isUnseen(1)) player.hideCharacter(1);
}
- else if(player.isUnseen(1)){
- player.showCharacter(1,false);
- }
'step 2'
var name=event.toChange;
if(event.hidden) game.log(player,'替换了副将','#g'+get.translation(player.name2));
diff --git a/theme/style/hp/ol.css b/theme/style/hp/ol.css
index 18ab30f6b..7e9ba13bf 100644
--- a/theme/style/hp/ol.css
+++ b/theme/style/hp/ol.css
@@ -35,7 +35,7 @@
filter:grayscale(1) opacity(0.8);
-webkit-filter:grayscale(1) opacity(0.8);
}
-.hp:not(.text):not(.actcount):not(.treasure)>.lost{
+.hp:not(.text):not(.actcount):not(.treasure)>.shield{
background: url('image/shield.png');
box-shadow: none;
border: none;