Merge branch 'libccy:PR-Branch' into PR-Branch

This commit is contained in:
157 2023-12-02 00:34:18 +08:00 committed by GitHub
commit e917f5ce5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 348 additions and 88 deletions

BIN
audio/die/dc_wuban.mp3 Normal file

Binary file not shown.

BIN
audio/die/zhugeruoxue.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcnuanhui1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcnuanhui2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcyouzhan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyouzhan2.mp3 Normal file

Binary file not shown.

View File

@ -1039,6 +1039,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'], global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
}, },
forced:true, forced:true,
direct:true,
filter:function(event,player){ filter:function(event,player){
if(player!=_status.currentPhase) return false; if(player!=_status.currentPhase) return false;
return game.hasPlayer(current=>{ return game.hasPlayer(current=>{
@ -1058,7 +1059,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('dcyouzhan',targets); player.logSkill('dcyouzhan',targets);
'step 1' 'step 1'
var target=targets.shift(); var target=targets.shift();
player.draw(); player.draw().gaintag=['dcyouzhan'];
player.addTempSkill('dcyouzhan_limit');
target.addTempSkill('dcyouzhan_effect'); target.addTempSkill('dcyouzhan_effect');
target.addMark('dcyouzhan_effect',1,false); target.addMark('dcyouzhan_effect',1,false);
target.addTempSkill('dcyouzhan_draw'); target.addTempSkill('dcyouzhan_draw');
@ -1066,8 +1068,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.redo(); event.redo();
} }
}, },
ai:{
damageBonus:true,
skillTagFilter:function(player,tag,arg){
if(!arg||!arg.target||!arg.target.hasSkill('dcyouzhan_effect')) return false;
}
},
subSkill:{ subSkill:{
effect:{ effect:{
audio:'dcyouzhan',
trigger:{ trigger:{
player:'damageBegin3', player:'damageBegin3',
}, },
@ -1087,7 +1096,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:'本回合下一次受到的伤害+#', content:'本回合下一次受到的伤害+#',
}, },
ai:{ ai:{
damageBonus:true,
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(get.tag(card,'damage')) return 1+0.5*target.countMark('dcyouzhan_effect'); if(get.tag(card,'damage')) return 1+0.5*target.countMark('dcyouzhan_effect');
@ -1105,9 +1113,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !player.getHistory('damage').length; return !player.getHistory('damage').length;
}, },
content:function(){ content:function(){
player.draw(player.getHistory('lose').length); player.draw(Math.min(3,player.getHistory('lose').length));
}, },
}, },
limit:{
charlotte:true,
onremove:function(player){
player.removeGaintag('dcyouzhan');
},
mod:{
ignoredHandcard:function(card,player){
if(card.hasGaintag('dcyouzhan')) return true;
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&card.hasGaintag('dcyouzhan')) return false;
},
},
}
} }
}, },
//乐蔡文姬 //乐蔡文姬
@ -11317,7 +11339,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcbeifen_info:'锁定技。①当你失去牌后,若这些牌中有“胡笳”牌,你获得与你手牌中“胡笳”牌花色均不同的每种花色的牌各一张。②若你手牌中“胡笳”牌数小于不为“胡笳”牌的牌数,你使用牌无距离和次数限制。', dcbeifen_info:'锁定技。①当你失去牌后,若这些牌中有“胡笳”牌,你获得与你手牌中“胡笳”牌花色均不同的每种花色的牌各一张。②若你手牌中“胡笳”牌数小于不为“胡笳”牌的牌数,你使用牌无距离和次数限制。',
dc_wuban:'吴班', dc_wuban:'吴班',
dcyouzhan:'诱战', dcyouzhan:'诱战',
dcyouzhan_info:'锁定技。当其他角色于你的回合内失去牌后,你摸一张牌且其获得如下效果1.其于此回合下一次受到的伤害+12.结束阶段若其于此回合未受到过伤害其摸X张牌X为其此回合失去过牌的次数。', dcyouzhan_info:'锁定技。当其他角色于你的回合内失去牌后,你摸一张牌(不计入本回合的手牌上限)且其获得如下效果1.其于此回合下一次受到的伤害+12.结束阶段若其于此回合未受到过伤害其摸X张牌X为其此回合失去过牌的次数且至多为3)。',
yue_zhoufei:'乐周妃', yue_zhoufei:'乐周妃',
yue_zhoufei_prefix:'乐', yue_zhoufei_prefix:'乐',
dclingkong:'灵箜', dclingkong:'灵箜',

View File

@ -1226,8 +1226,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
player.logSkill('jsrgguiji_swapback',trigger.player); player.logSkill('jsrgguiji_swapback',trigger.player);
player.swapHandcards(trigger.player); player.swapHandcards(trigger.player);
player.unmarkAuto('jsrgguiji_swapback',[trigger.player]);
} }
player.unmarkAuto('jsrgguiji_swapback',[trigger.player]);
}, },
intro:{ intro:{
content:'$的下个出牌阶段结束时,你可以与其交换手牌' content:'$的下个出牌阶段结束时,你可以与其交换手牌'

View File

@ -5111,8 +5111,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
trigger:{player:'phaseJieshuBegin'}, trigger:{player:'phaseJieshuBegin'},
filter:function(event,player){ filter:function(event,player){
var num=player.storage.mobileyanzhu?player.maxHp:player.hp; return (player.storage.mobileyanzhu?player.maxHp:player.hp)>0;
return num>0;
}, },
direct:true, direct:true,
content:function(){ content:function(){
@ -5144,7 +5143,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
'step 3' 'step 3'
if(event.current&&event.current.countCards('he')){ if(event.current&&event.current.countCards('he')){
if(player.storage.mobileyanzhu||event.targets2.length==1) event.current.chooseCard('选择一张牌置于牌堆顶','he',true); if(!player.storage.mobileyanzhu||event.targets2.length==1) event.current.chooseCard('选择一张牌置于牌堆顶','he',true);
else event.current.chooseCardTarget({ else event.current.chooseCardTarget({
prompt:'将一张牌置于牌堆顶,或交给其他目标角色', prompt:'将一张牌置于牌堆顶,或交给其他目标角色',
filterCard:true, filterCard:true,
@ -5212,7 +5211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.removeSkill('mobileyanzhu'); player.removeSkill('mobileyanzhu');
player.storage.mobileyanzhu=true; player.storage.mobileyanzhu=true;
player.popup('兴学'); player.popup('兴学');
game.log(player,'修改了技能','【兴学】'); game.log(player,'修改了技能','#g【兴学】');
} }
else{ else{
player.gainPlayerCard(target,true,'hej'); player.gainPlayerCard(target,true,'hej');

View File

@ -411,12 +411,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'jiefan', audio:'jiefan',
enable:'chooseToUse', enable:'chooseToUse',
filter:function(event,player){ filter:function(event,player){
return event.type=='dying'&&_status.currentPhase&&_status.currentPhase.isIn()&&!event.oldjiefan; return event.type=='dying'&&_status.currentPhase&&_status.currentPhase.isIn();
}, },
direct:true, direct:true,
content:function(){ content:function(){
'step 0'
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
player.chooseToUse(function(card,player,event){ player.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false; if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments); return lib.filter.filterCard.apply(this,arguments);
@ -425,14 +423,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.filter.filterTarget.apply(this,arguments); return lib.filter.filterTarget.apply(this,arguments);
}).set('logSkill','oldjiefan').set('oncard',function(){ }).set('logSkill','oldjiefan').set('oncard',function(){
_status.event.player.addTempSkill('oldjiefan_recover'); _status.event.player.addTempSkill('oldjiefan_recover');
}); }).set('custom',{
'step 1' add:{},
if(!result.bool){ replace:{
var evt=event.getParent(2); window:()=>{
evt.oldjiefan=true; ui.click.cancel();
evt.goto(0);
} }
}, },
});
},
ai:{ ai:{
save:true, save:true,
order:3, order:3,
@ -440,7 +439,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
subSkill:{ subSkill:{
recover:{ recover:{
audio:'jiefan', // audio:'jiefan',
trigger:{source:'damageBegin2'}, trigger:{source:'damageBegin2'},
filter:function(event,player){ filter:function(event,player){
return event.getParent(4).name=='oldjiefan'; return event.getParent(4).name=='oldjiefan';

View File

@ -639,6 +639,7 @@ window.noname_character_rank={
'shen_huatuo', 'shen_huatuo',
'dc_guansuo', 'dc_guansuo',
'dc_dongzhao', 'dc_dongzhao',
'zhugeruoxue',
], ],
bp:[ bp:[
'chess_diaochan', 'chess_diaochan',

View File

@ -27,7 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xin_zhangliang:['male','qun',4,['rejijun','refangtong']], xin_zhangliang:['male','qun',4,['rejijun','refangtong']],
re_simalang:['male','wei',3,['requji','rejunbing']], re_simalang:['male','wei',3,['requji','rejunbing']],
re_zhugedan:['male','wei',4,['regongao','rejuyi']], re_zhugedan:['male','wei',4,['regongao','rejuyi']],
re_caorui:['male','wei',3,['huituo','mingjian','rexingshuai'],['zhu']], re_caorui:['male','wei',3,['huituo','remingjian','rexingshuai'],['zhu']],
re_caochong:['male','wei',3,['rechengxiang','renxin']], re_caochong:['male','wei',3,['rechengxiang','renxin']],
ol_zhangzhang:['male','wu',3,['olzhijian','olguzheng']], ol_zhangzhang:['male','wu',3,['olzhijian','olguzheng']],
re_jsp_huangyueying:['female','qun',3,['rejiqiao','relinglong']], re_jsp_huangyueying:['female','qun',3,['rejiqiao','relinglong']],
@ -625,6 +625,63 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
//堪比界曹冲的界曹叡 //堪比界曹冲的界曹叡
remingjian:{
inherit:'mingjian',
content:function(){
player.give(cards,target);
target.addTempSkill('remingjian_buff',{player:'phaseAfter'});
if(!target.storage.remingjian_buff) target.storage.remingjian_buff=[];
target.storage.remingjian_buff.push(player);
target.markSkill('remingjian_buff');
},
subSkill:{
buff:{
charlotte:true,
mark:true,
marktext:'鉴',
intro:{
content:(storage,player)=>{
const num=storage.length;
return `<li>被${get.translation(storage.toUniqued())}鉴识<li>手牌上限+${num},出杀次数+${num}`;
},
},
onremove:true,
trigger:{
source:'damageSource',
},
filter:function(event,player){
if(_status.currentPhase!=player) return false;
return player.getHistory('sourceDamage').indexOf(event)==0&&player.getStorage('remingjian_buff').some(i=>i.isIn());
},
content:function*(event,map){
const player=map.player;
const masters=player.getStorage('remingjian_buff').filter(i=>i.isIn()).toUniqued().sortBySeat(_status.currentPhase);
while(masters.length){
const master=masters.shift();
if(!master.isIn()) continue;
const result=yield player.chooseBool(`是否令${get.translation(master)}发动一次〖恢拓〗?`).set('choice',get.attitude(player,master)>0);
if(!result.bool) continue;
if(!player.isUnderControl(true)&&!event.isOnline()) game.delayx();
player.logSkill('remingjian_buff',master);
const next=game.createEvent('huituo');
next.setContent(lib.skill.huituo.content);
next.player=master;
next.forced=true;
next._trigger=map.trigger;
yield next;
}
},
mod:{
maxHandcard:function(player,num){
return num+player.getStorage('remingjian_buff').length;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.getStorage('remingjian_buff').length;
}
},
}
},
},
rexingshuai:{ rexingshuai:{
audio:2, audio:2,
skillAnimation:true, skillAnimation:true,
@ -15512,6 +15569,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rechengxiang_info:'当你受到伤害后你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。若你得到的牌点数之和为13你复原武将牌。', rechengxiang_info:'当你受到伤害后你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。若你得到的牌点数之和为13你复原武将牌。',
re_caorui:'界曹叡', re_caorui:'界曹叡',
re_caorui_prefix:'界', re_caorui_prefix:'界',
remingjian:'明鉴',
remingjian_info:'出牌阶段限一次。你可以将所有手牌交给一名其他角色然后该角色于其下个回合获得如下效果1.手牌上限与使用【杀】的次数上限+12.当该角色首次造成伤害后,其可以令你发动一次〖恢拓〗。',
rexingshuai:'兴衰', rexingshuai:'兴衰',
rexingshuai_info:'主公技限定技。当你进入濒死状态时你可令其他魏势力角色依次选择是否令你回复1点体力。然后这些角色依次受到1点伤害。有〖明鉴〗效果的角色于其回合内杀死角色后你重置〖兴衰〗。', rexingshuai_info:'主公技限定技。当你进入濒死状态时你可令其他魏势力角色依次选择是否令你回复1点体力。然后这些角色依次受到1点伤害。有〖明鉴〗效果的角色于其回合内杀死角色后你重置〖兴衰〗。',
xin_zhangliang:'界张梁', xin_zhangliang:'界张梁',

View File

@ -4165,7 +4165,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
init:function(player){ init:function(player){
if(!player.storage.huashen){ if(!player.storage.huashen){
player.storage.huashen={ player.storage.huashen={
shown:[],
owned:{} owned:{}
}; };
} }
@ -4173,11 +4172,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
intro:{ intro:{
content:function(storage,player){ content:function(storage,player){
var str=''; var str='';
var slist=storage.owned; var list=Object.keys(storage.owned);
var list=[];
for(var i in slist){
list.push(i);
}
if(list.length){ if(list.length){
str+=get.translation(list[0]); str+=get.translation(list[0]);
for(var i=1;i<list.length;i++){ for(var i=1;i<list.length;i++){
@ -4190,37 +4185,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
return str; return str;
}, },
onunmark:function(storage,player){
_status.characterlist.addArray(Object.keys(storage.owned));
storage.owned=[];
},
mark:function(dialog,content,player){ mark:function(dialog,content,player){
var slist=content.owned; var list=Object.keys(content.owned);
var list=[];
for(var i in slist){
list.push(i);
}
if(list.length){ if(list.length){
dialog.addSmall([list,(item,type,position,noclick,node)=>lib.skill.rehuashen.$createButton(item,type,position,noclick,node)]);
}
for(var i=0;i<dialog.buttons.length;i++){
if(!player.isUnderControl(true)){
if(!content.shown.contains(dialog.buttons[i].link)){
dialog.buttons[i].node.group.remove();
dialog.buttons[i].node.hp.remove();
dialog.buttons[i].node.intro.remove();
dialog.buttons[i].node.name.innerHTML=get.verticalStr('未知');
dialog.buttons[i].node.name.dataset.nature='';
dialog.buttons[i].style.background='';
dialog.buttons[i]._nointro=true;
dialog.buttons[i].classList.add('menubg');
}
}
if(dialog.buttons[i].link==player.storage.huashen.current){
dialog.buttons[i].classList.add('glow2');
}
}
var skill=player.storage.huashen.current2; var skill=player.storage.huashen.current2;
if(skill){ var character=player.storage.huashen.current;
if(skill&&character){
dialog.addSmall([[character],(item,type,position,noclick,node)=>lib.skill.rehuashen.$createButton(item,type,position,noclick,node)]);
dialog.add('<div><div class="skill">【'+get.translation(lib.translate[skill+'_ab']||get.translation(skill).slice(0,2))+'】</div>'+ dialog.add('<div><div class="skill">【'+get.translation(lib.translate[skill+'_ab']||get.translation(skill).slice(0,2))+'】</div>'+
'<div>'+get.skillInfoTranslation(skill,player)+'</div></div>'); '<div>'+get.skillInfoTranslation(skill,player)+'</div></div>');
} }
if(player.isUnderControl(true)){
dialog.addSmall([list,(item,type,position,noclick,node)=>lib.skill.rehuashen.$createButton(item,type,position,noclick,node)]);
}
else{
dialog.addText('共有'+get.cnNumber(list.length)+'张“化身”');
}
}
else{
return '没有化身';
}
} }
}, },
addHuashen:function(player){ addHuashen:function(player){
@ -4425,7 +4413,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var skill=map.skill,character=map.character; var skill=map.skill,character=map.character;
if(character!=player.storage.huashen.current){ if(character!=player.storage.huashen.current){
player.storage.huashen.current=character; player.storage.huashen.current=character;
player.storage.huashen.shown.add(character);
player.markSkill('huashen'); player.markSkill('huashen');
game.broadcastAll(function(character,player){ game.broadcastAll(function(character,player){
player.sex=lib.character[character][0]; player.sex=lib.character[character][0];

View File

@ -12790,25 +12790,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
var name=button.link[2]; var name=button.link[2];
var evt=_status.event.getParent(); var evt=_status.event.getParent();
if(get.type(name)=='basic'){ if(evt.type=='phase'){
var card={name:name,nature:button.link[3],isCard:true};
if(name=='shan') return 2; if(name=='shan') return 2;
if(evt.type=='dying'){ if(evt.type=='dying'){
if(get.attitude(player,evt.dying)<2) return false; if(get.attitude(player,evt.dying)<2) return false;
if(name=='jiu') return 2.1; if(name=='jiu') return 2.1;
return 1.9; return 1.9;
} }
if(evt.type=='phase') return player.getUseValue({name:name,nature:button.link[3],isCard:true}); return player.getUseValue(card);
}
return 1; return 1;
}
if(!['chuqibuyi','shuiyanqijunx','juedou','nanman','wanjian','shunshou','zhujinqiyuan'].contains(name)) return 0;
var card={name:name,isCard:true};
if(['shunshou','zhujinqiyuan'].contains(card.name)){
if(!game.hasPlayer(function(current){
return get.attitude(player,current)!=0&&get.distance(player,current)<=1&&player.canUse(card,current)&&get.effect(current,card,player,player)>0;
})) return 0;
return player.getUseValue(card)-7;
}
return player.getUseValue(card)-4;
}, },
backup:function(links,player){ backup:function(links,player){
if(typeof links[1]=='number') links.reverse(); if(typeof links[1]=='number') links.reverse();
@ -12852,10 +12844,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var name=(tag=='respondSha'?'sha':'shan'); var name=(tag=='respondSha'?'sha':'shan');
return !player.storage.youlong2.contains(name); return !player.storage.youlong2.contains(name);
}, },
order:1, order:function(item,player){
result:{ if(player&&_status.event.type=='phase'){
player:1, var max=0,add=false;
var type=player.storage.youlong?'basic':'trick';
var list=lib.inpile.filter(name=>get.type(name)==type&&!player.storage.youlong2.includes(name));
if(list.includes('sha')) add=true;
list=list.map(namex=>{return {name:namex,isCard:true}});
if(add) lib.inpile_nature.forEach(naturex=>list.push({name:'sha',nature:naturex,isCard:true}));
for(var card of list){
if(player.getUseValue(card)>0){
var temp=get.order(card);
if(temp>max) max=temp;
}
}
if(max>0) max+=0.3;
return max;
}
return 1;
}, },
result:{player:1},
}, },
}, },
youlong_true:{charlotte:true}, youlong_true:{charlotte:true},

View File

@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'xianding', name:'xianding',
connect:true, connect:true,
character:{ character:{
zhugeruoxue:['female','wei',3,['dcqiongying','dcnuanhui']],
caoyi:['female','wei',4,['dcmiyi','dcyinjun']], caoyi:['female','wei',4,['dcmiyi','dcyinjun']],
malingli:['female','shu',3,['dclima','dcxiaoyin','dchuahuo']], malingli:['female','shu',3,['dclima','dcxiaoyin','dchuahuo']],
wu_luxun:['male','wu',3,['dcxiongmu','dczhangcai','dcruxian']], wu_luxun:['male','wu',3,['dcxiongmu','dczhangcai','dcruxian']],
@ -92,7 +93,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji'], sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji'],
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie'], sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie'],
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen','zhugeruoxue'],
sp2_yinyu:['zhouyi','luyi','sunlingluan','caoyi'], sp2_yinyu:['zhouyi','luyi','sunlingluan','caoyi'],
sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'], sp2_wangzhe:['dc_daxiaoqiao','dc_sp_machao'],
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi','malingli'], sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao','tianshangyi','malingli'],
@ -104,6 +105,152 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
skill:{ skill:{
//诸葛若雪
dcqiongying:{
audio:2,
enable:'phaseUse',
usable:1,
direct:true,
filter:function(event,player){
return player.canMoveCard();
},
content:function*(event,map){
const player=map.player;
event.pushHandler('onNextMoveCard',(event,option)=>{
if(_status.connectMode&&event.step==1&&event._result.bool&&option.state=='end'){
game.broadcastAll(()=>{
delete _status.noclearcountdown;
game.stopCountChoose();
});
}
});
let result=yield player.moveCard(false,`###琼英###移动场上的一张牌,然后弃置一张与此牌花色相同的手牌(若没有则展示手牌)。`).set('logSkill','dcqiongying').set('custom',{
add:{},
replace:{
window:()=>{
if(get.event().name=='chooseTarget') ui.click.cancel();
}
},
});
if(result.bool){
const card=result.card,suit=get.suit(card);
if(!player.hasCard({suit:suit})) player.showHandcards();
else player.chooseToDiscard({suit:suit},true,`请弃置一张${get.translation(suit)}手牌`);
}
else{
player.getStat('skill').dcqiongying--;
}
},
ai:{
expose:0.2,
order:function(item,player){
if(player.countCards('h')<=4) return 0.5;
return 9;
},
result:{
player:function(player){
if(player.canMoveCard(true)) return 1;
return 0;
}
}
}
},
dcnuanhui:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return game.hasPlayer(current=>current.countCards('e'));
},
content:function*(event,map){
const player=map.player;
let result=yield player.chooseTarget(get.prompt('dcnuanhui'),'选择一名装备区有牌的角色该角色可以依次使用X张基本牌X为其装备区牌数。',(card,player,target)=>{
return target.countCards('e');
}).set('ai',target=>{
return get.event('aiTarget')==target?10:0;
}).set('aiTarget',(()=>{
const player=get.player();
const list=get.inpileVCardList(info=>{
return info[0]=='basic';
});
if(!list.length) return null;
const getUseValue=target=>{
if(get.attitude(player,target)<=0) return -1;
const toUse=[];
const hp=target.hp;
let eff=0,count=target.countCards('e');
while(count--){
target.hp=Math.min(target.maxHp,target.hp+toUse.filter(card=>card.name=='tao').length);
const listx=list.map(info=>{
const card=new lib.element.VCard({name:info[2],nature:info[3],isCard:true});
return [card,target.getUseValue(card)];
}).sort((a,b)=>{
return b[1]-a[1];
});
const mostValuablePair=listx[0].slice();
if(mostValuablePair[1]<=0) mostValuablePair[1]=0;
eff+=mostValuablePair[1];
toUse.push(mostValuablePair[0]);
target.hp=hp;
}
if(toUse.length>1&&eff>0){
eff-=target.getCards('e',card=>{
return lib.filter.cardDiscardable(card,target,'dcnuanhui');
}).map(card=>{
return get.value(card,target);
}).reduce((p,c)=>{
return p+c;
},0);
}
return eff;
}
const playerList=game.filterPlayer(current=>{
return current.countCards('e');
}).map(current=>[current,getUseValue(current)]).sort((a,b)=>{
return b[1]-a[1];
});
if(playerList[0][1]<=0) return null;
return playerList[0][0];
})());
if(!result.bool) return event.finish();
const target=result.targets[0];
player.logSkill('dcnuanhui',target);
if(!target.isUnderControl(true)&&!target.isOnline()) game.delayx();
const total=target.countCards('e');
let count=0,forced=false;
while(count<total){
const basicList=get.inpileVCardList(info=>{
return info[0]=='basic'&&target.hasUseTarget({name:info[2],nature:info[3],isCard:true});
});
if(!basicList.length){
game.log('但是',target,'无牌可出!');
break;
}
const str=forced?'视为使用一张基本牌':'是否视为使用一张基本牌?';
result=yield target.chooseButton([str,[basicList,'vcard']],forced).set('ai',button=>{
return get.player().getUseValue({name:button.link[2],nature:button.link[3],isCard:true});
});
if(!result.bool){
game.log('但是',target,'不愿出牌!');
break;
}
forced=true;
const card=new lib.element.VCard({name:result.links[0][2],nature:result.links[0][3],isCard:true});
yield target.chooseUseTarget(card,true,false);
count++;
}
if(count>1){
const cards=target.getCards('e',card=>{
return lib.filter.cardDiscardable(card,target,'dcnuanhui');
});
if(cards.length) target.discard(cards).discarder=target;
}
},
ai:{
expose:0.3,
threaten:3.7,
},
},
//曹轶 //曹轶
dcmiyi:{ dcmiyi:{
audio:2, audio:2,
@ -12596,6 +12743,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhoubuyi:'周不疑192年—208年字元直或作“文直”零陵重安今湖南衡阳县刘表别驾刘先的外甥少有异才聪明敏达在十七岁时就著有文论四首。曹冲死后曹操怀疑曹丕无法驾驭周不疑于是派人杀了周不疑。', zhoubuyi:'周不疑192年—208年字元直或作“文直”零陵重安今湖南衡阳县刘表别驾刘先的外甥少有异才聪明敏达在十七岁时就著有文论四首。曹冲死后曹操怀疑曹丕无法驾驭周不疑于是派人杀了周不疑。',
tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。', tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。',
malingli:'马伶俐,游卡桌游原创角色,设定上为,马超之女,其身形虽娇小,却继承了马超英勇略带冲动的个性,活泼阳光,调皮伶俐,爱摆弄爆竹烟花一类的小器具,包包里经常放置用五色彩纸包装的小炸弹球。马伶俐从小跟随马超和马云騄学习战斗技巧,战斗力超强,坚强的意志和勇气也得到了提升,同时擅长马术,有一匹可爱的小白马伴随其身边。后马伶俐成年,嫁与刘备之子刘理,获封梁王妃。两人琴瑟相和,极为恩爱,常结伴出游,被人誉为天作之合。', malingli:'马伶俐,游卡桌游原创角色,设定上为,马超之女,其身形虽娇小,却继承了马超英勇略带冲动的个性,活泼阳光,调皮伶俐,爱摆弄爆竹烟花一类的小器具,包包里经常放置用五色彩纸包装的小炸弹球。马伶俐从小跟随马超和马云騄学习战斗技巧,战斗力超强,坚强的意志和勇气也得到了提升,同时擅长马术,有一匹可爱的小白马伴随其身边。后马伶俐成年,嫁与刘备之子刘理,获封梁王妃。两人琴瑟相和,极为恩爱,常结伴出游,被人誉为天作之合。',
zhugeruoxue:'诸葛氏(“若雪”为网络小说虚构),诸葛亮的二姐,庞山民之妻。',
}, },
characterTitle:{ characterTitle:{
// wulan:'#b对决限定武将', // wulan:'#b对决限定武将',
@ -13169,6 +13317,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcmiyi_info:'准备阶段你可以选择一项1.回复1点体力2.受到你造成的1点伤害。然后你令任意名角色执行该项。若如此做这些角色于结束阶段执行另一项。', dcmiyi_info:'准备阶段你可以选择一项1.回复1点体力2.受到你造成的1点伤害。然后你令任意名角色执行该项。若如此做这些角色于结束阶段执行另一项。',
dcyinjun:'寅君', dcyinjun:'寅君',
dcyinjun_info:'当你使用对应实体牌均为你的手牌的【杀】或锦囊牌结算结束后若此牌目标为1你可以视为对该目标使用一张无伤害来源的【杀】。然后若你本回合发动〖寅君〗的次数大于你的体力值〖寅君〗失效直到回合结束。', dcyinjun_info:'当你使用对应实体牌均为你的手牌的【杀】或锦囊牌结算结束后若此牌目标为1你可以视为对该目标使用一张无伤害来源的【杀】。然后若你本回合发动〖寅君〗的次数大于你的体力值〖寅君〗失效直到回合结束。',
zhugeruoxue:'诸葛若雪',
dcqiongying:'琼英',
dcqiongying_info:'出牌阶段限一次。你可以移动场上的一张牌,然后你弃置一张与此牌花色相同的手牌(若没有该花色的手牌则改为展示所有手牌)。',
dcnuanhui:'暖惠',
dcnuanhui_info:'结束阶段你可以选择一名装备区有牌的角色其可以视为依次使用X张基本牌X为其装备区牌数。若其以此法使用了至少两张牌其弃置装备区里的所有牌。',
sp2_yinyu:'隐山之玉', sp2_yinyu:'隐山之玉',
sp2_huben:'百战虎贲', sp2_huben:'百战虎贲',

View File

@ -9060,7 +9060,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mingjian:{ mingjian:{
audio:2, audio:2,
audioname:['re_caorui'],
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
@ -9178,7 +9177,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseTarget(get.prompt2('huituo')).set('ai',function(target){ var forced=event.forced===undefined?false:event.forced;
var info=get.skillInfoTranslation('huituo',player);
var str=`###${forced?'恢拓:请选择一名角色':get.prompt('huituo')}###令一名角色判定。若结果为红色其回复1点体力若结果为黑色其摸${get.cnNumber(trigger.num)}张牌`;
player.chooseTarget(str,event.forced).set('ai',function(target){
var player=_status.event.player; var player=_status.event.player;
if(get.attitude(player,target)>0){ if(get.attitude(player,target)>0){
return get.recoverEffect(target,player,player)+1; return get.recoverEffect(target,player,player)+1;
@ -14280,7 +14282,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huituo_info:'当你受到伤害后你可以令一名角色进行一次判定若结果为红色该角色回复1点体力若结果为黑色该角色摸X张牌X为此次伤害的伤害点数。', huituo_info:'当你受到伤害后你可以令一名角色进行一次判定若结果为红色该角色回复1点体力若结果为黑色该角色摸X张牌X为此次伤害的伤害点数。',
mingjian:'明鉴', mingjian:'明鉴',
mingjian2:'明鉴', mingjian2:'明鉴',
mingjian_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色,若如此做,该角色于其下个回合的手牌上限+1且使用【杀】的次数上限+1。', mingjian_info:'出牌阶段限一次。你可以将所有手牌交给一名其他角色,然后该角色于其下个回合的手牌上限+1且使用【杀】的次数上限+1。',
xingshuai:'兴衰', xingshuai:'兴衰',
xingshuai_info:'主公技限定技当你进入濒死状态时其他魏势力角色可依次令你回复1点体力然后这些角色依次受到1点伤害。', xingshuai_info:'主公技限定技当你进入濒死状态时其他魏势力角色可依次令你回复1点体力然后这些角色依次受到1点伤害。',
reduodao:'夺刀', reduodao:'夺刀',

View File

@ -9022,7 +9022,12 @@ new Promise(resolve=>{
writable:true, writable:true,
value:function(){ value:function(){
for(const item of arguments){ for(const item of arguments){
const pos=this.indexOf(item); let pos=-1;
if (typeof item=='number'&&isNaN(item)){
pos=this.findIndex(v=>isNaN(v))
}else{
pos=this.indexOf(item);
}
if(pos==-1) continue; if(pos==-1) continue;
this.splice(pos,1); this.splice(pos,1);
} }
@ -13920,7 +13925,9 @@ new Promise(resolve=>{
bool:true, bool:true,
targets:event.targets2||result.targets, targets:event.targets2||result.targets,
}; };
var next=player.useCard(card,event.targets2||result.targets); var args=[card,event.targets2||result.targets];
if(cards) args.push(cards.slice());
var next=player.useCard(...args);
next.oncard=event.oncard; next.oncard=event.oncard;
if(cards) next.cards=cards.slice(0); if(cards) next.cards=cards.slice(0);
if(event.nopopup) next.nopopup=true; if(event.nopopup) next.nopopup=true;
@ -15725,7 +15732,7 @@ new Promise(resolve=>{
info.onChooseToUse(event); info.onChooseToUse(event);
} }
} }
_status.noclearcountdown=true; if(_status.noclearcountdown!=='direct') _status.noclearcountdown=true;
if(event.type=='phase'){ if(event.type=='phase'){
if(event.isMine()){ if(event.isMine()){
event.endButton=ui.create.control('结束回合','stayleft',function(){ event.endButton=ui.create.control('结束回合','stayleft',function(){
@ -15935,6 +15942,12 @@ new Promise(resolve=>{
if(game.online){ if(game.online){
event._sendskill=[event.buttoned+'_backup',lib.skill[event.buttoned+'_backup']]; event._sendskill=[event.buttoned+'_backup',lib.skill[event.buttoned+'_backup']];
} }
else{
game.broadcast((skill,audio)=>{
if(!lib.skill[skill]) lib.skill[skill]={};
lib.skill[skill].audio=audio;
},event.buttoned+'_backup',lib.skill[event.buttoned+'_backup'].audio);
}
event.backup(event.buttoned+'_backup'); event.backup(event.buttoned+'_backup');
if(info.prompt){ if(info.prompt){
event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player); event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player);
@ -15962,6 +15975,12 @@ new Promise(resolve=>{
else if(event._sendskill){ else if(event._sendskill){
event.result._sendskill=event._sendskill; event.result._sendskill=event._sendskill;
} }
if((!event.result||!event.result.bool||event.result._noHidingTimer)&&(event.result.skill||event.logSkill)){
var info=get.info(event.result.skill||event.logSkill);
if(info.direct&&!info.clearTime){
_status.noclearcountdown='direct';
}
}
if(event.dialog&&typeof event.dialog=='object') event.dialog.close(); if(event.dialog&&typeof event.dialog=='object') event.dialog.close();
if(!_status.noclearcountdown){ if(!_status.noclearcountdown){
game.stopCountChoose(); game.stopCountChoose();
@ -15985,7 +16004,7 @@ new Promise(resolve=>{
info.onChooseToRespond(event); info.onChooseToRespond(event);
} }
} }
_status.noclearcountdown=true; if(_status.noclearcountdown!=='direct') _status.noclearcountdown=true;
if(!_status.connectMode&&lib.config.skip_shan&&event.autochoose&&event.autochoose()){ if(!_status.connectMode&&lib.config.skip_shan&&event.autochoose&&event.autochoose()){
event.result={bool:false}; event.result={bool:false};
} }
@ -16117,6 +16136,12 @@ new Promise(resolve=>{
if(game.online){ if(game.online){
event._sendskill=[event.buttoned+'_backup',lib.skill[event.buttoned+'_backup']]; event._sendskill=[event.buttoned+'_backup',lib.skill[event.buttoned+'_backup']];
} }
else{
game.broadcast((skill,audio)=>{
if(!lib.skill[skill]) lib.skill[skill]={};
lib.skill[skill].audio=audio;
},event.buttoned+'_backup',lib.skill[event.buttoned+'_backup'].audio);
}
event.backup(event.buttoned+'_backup'); event.backup(event.buttoned+'_backup');
if(info.prompt){ if(info.prompt){
event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player); event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player);
@ -16142,9 +16167,9 @@ new Promise(resolve=>{
if(event.onresult){ if(event.onresult){
event.onresult(event.result); event.onresult(event.result);
} }
if(event.result.skill){ if((!event.result||!event.result.bool||event.result._noHidingTimer)&&(event.result.skill||event.logSkill)){
if(info.direct&&!info.clearTime){ if(info.direct&&!info.clearTime){
_status.noclearcountdown=true; _status.noclearcountdown='direct';
} }
} }
if(event.logSkill){ if(event.logSkill){
@ -18550,7 +18575,7 @@ new Promise(resolve=>{
if(current!=target&&get.attitude(player,current)>0){ if(current!=target&&get.attitude(player,current)>0){
var es=target.getCards('e',filterCard); var es=target.getCards('e',filterCard);
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.canEquip(es[i],_status.event.canReplace)&&get.effect(current,es[i],player,player)>_status.event.canReplace?get.effect(target,es[i],player,player):0) return true; if(get.value(es[i],target)>0&&current.canEquip(es[i],_status.event.canReplace)&&get.effect(current,es[i],player,player)>(_status.event.canReplace?get.effect(target,es[i],player,player):0)) return true;
} }
} }
})){ })){
@ -18585,11 +18610,13 @@ new Promise(resolve=>{
next.set('sourceTargets',event.sourceTargets||game.filterPlayer()); next.set('sourceTargets',event.sourceTargets||game.filterPlayer());
next.set('aimTargets',event.aimTargets||game.filterPlayer()); next.set('aimTargets',event.aimTargets||game.filterPlayer());
next.set('canReplace',event.canReplace); next.set('canReplace',event.canReplace);
next.set('custom',get.copy(event.custom));
if(event.prompt2) next.set('prompt2',event.prompt2); if(event.prompt2) next.set('prompt2',event.prompt2);
if(event.forced) next.set('forced',true); if(event.forced) next.set('forced',true);
'step 1' 'step 1'
event.result=result; event.result=result;
if(result.bool){ if(result.bool){
if(event.logSkill) player.logSkill(event.logSkill,result.targets,false);
player.line2(result.targets,'green'); player.line2(result.targets,'green');
event.targets=result.targets; event.targets=result.targets;
} }
@ -18623,7 +18650,7 @@ new Promise(resolve=>{
else{ else{
return targets1.canEquip(button.link,_status.event.canReplace); return targets1.canEquip(button.link,_status.event.canReplace);
} }
}).set('filter',event.filter).set('canReplace',event.canReplace); }).set('filter',event.filter).set('canReplace',event.canReplace).set('custom',get.copy(event.custom));
} }
else{ else{
event.finish(); event.finish();
@ -25189,7 +25216,6 @@ new Promise(resolve=>{
if(!canReplace||att<0&&current2.countEquipableSlot(get.subtype(es[i]))){ if(!canReplace||att<0&&current2.countEquipableSlot(get.subtype(es[i]))){
if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false; if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false;
} }
// if((!canReplace||!current2.countEquipableSlot(get.subtype(es[i]))&&current2.canEquip(es[i],true))&&(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2)))) return false;
} }
return current!=current2&&!current2.isMin()&&current2.canEquip(es[i],canReplace); return current!=current2&&!current2.isMin()&&current2.canEquip(es[i],canReplace);
})){ })){
@ -25271,9 +25297,9 @@ new Promise(resolve=>{
if(info.onuse){ if(info.onuse){
info.onuse(result,this); info.onuse(result,this);
} }
if(info.direct&&!info.clearTime){ // if(info.direct&&!info.clearTime){
_status.noclearcountdown=true; // _status.noclearcountdown=true;
} // }
} }
if(event.logSkill){ if(event.logSkill){
if(typeof event.logSkill=='string'){ if(typeof event.logSkill=='string'){
@ -26671,7 +26697,7 @@ new Promise(resolve=>{
} }
player._hide_all_timer=true; player._hide_all_timer=true;
} }
else if(!_status.event._global_waiting){ else if(!_status.event._global_waiting&&_status.noclearcountdown!=='direct'){
player.showTimer(time); player.showTimer(time);
} }
lib.node.torespondtimeout[this.playerid]=setTimeout(function(){ lib.node.torespondtimeout[this.playerid]=setTimeout(function(){
@ -26688,7 +26714,7 @@ new Promise(resolve=>{
game.players[i].hideTimer(); game.players[i].hideTimer();
} }
} }
else if(!_status.event._global_waiting){ else if(!get.event('_global_waiting')&&(_status.noclearcountdown!=='direct'||result&&result.bool)&&!(result&&result._noHidingTimer)){
this.hideTimer(); this.hideTimer();
} }
clearTimeout(lib.node.torespondtimeout[this.playerid]); clearTimeout(lib.node.torespondtimeout[this.playerid]);
@ -57198,6 +57224,10 @@ new Promise(resolve=>{
const skill=gameEvent.skill; const skill=gameEvent.skill;
if(skill){ if(skill){
result.skill=skill; result.skill=skill;
const info=get.info(skill);
if(info&&info.direct&&!info.clearTime){
result._noHidingTimer=true;
}
const skillInformation=get.info(gameEvent.skill),viewAs=skillInformation.viewAs; const skillInformation=get.info(gameEvent.skill),viewAs=skillInformation.viewAs;
if(typeof viewAs=='function'){ if(typeof viewAs=='function'){
const viewedAs=viewAs(result.cards,gameEvent.player); const viewedAs=viewAs(result.cards,gameEvent.player);
@ -61201,8 +61231,8 @@ new Promise(resolve=>{
str2+='·'+tagstr; str2+='·'+tagstr;
} }
} }
if(str.suit&&str.number){ if(str.suit&&str.number||str.isCard){
var cardnum=str.number||''; var cardnum=get.number(str,false)||'';
if([1,11,12,13].contains(cardnum)){ if([1,11,12,13].contains(cardnum)){
cardnum={'1':'A','11':'J','12':'Q','13':'K'}[cardnum] cardnum={'1':'A','11':'J','12':'Q','13':'K'}[cardnum]
} }
@ -61210,7 +61240,7 @@ new Promise(resolve=>{
str2+=''+get.translation(str)+''; str2+=''+get.translation(str)+'';
} }
else{ else{
str2+='【'+get.translation(str.suit)+cardnum+'】'; str2+='【'+get.translation(get.suit(str,false))+cardnum+'】';
// var len=str2.length-1; // var len=str2.length-1;
// str2=str2.slice(0,len)+'<span style="letter-spacing: -2px">'+str2[len]+'·</span>'+get.translation(str.suit)+str.number; // str2=str2.slice(0,len)+'<span style="letter-spacing: -2px">'+str2[len]+'·</span>'+get.translation(str.suit)+str.number;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB