Merge branch 'libccy:PR-Branch' into PR-Branch
This commit is contained in:
commit
e917f5ce5d
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1039,6 +1039,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
|
||||
},
|
||||
forced:true,
|
||||
direct:true,
|
||||
filter:function(event,player){
|
||||
if(player!=_status.currentPhase) return false;
|
||||
return game.hasPlayer(current=>{
|
||||
|
@ -1058,7 +1059,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.logSkill('dcyouzhan',targets);
|
||||
'step 1'
|
||||
var target=targets.shift();
|
||||
player.draw();
|
||||
player.draw().gaintag=['dcyouzhan'];
|
||||
player.addTempSkill('dcyouzhan_limit');
|
||||
target.addTempSkill('dcyouzhan_effect');
|
||||
target.addMark('dcyouzhan_effect',1,false);
|
||||
target.addTempSkill('dcyouzhan_draw');
|
||||
|
@ -1066,8 +1068,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
event.redo();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
damageBonus:true,
|
||||
skillTagFilter:function(player,tag,arg){
|
||||
if(!arg||!arg.target||!arg.target.hasSkill('dcyouzhan_effect')) return false;
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
audio:'dcyouzhan',
|
||||
trigger:{
|
||||
player:'damageBegin3',
|
||||
},
|
||||
|
@ -1087,7 +1096,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:'本回合下一次受到的伤害+#',
|
||||
},
|
||||
ai:{
|
||||
damageBonus:true,
|
||||
effect:{
|
||||
target:function(card,player,target){
|
||||
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;
|
||||
},
|
||||
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:'锁定技。①当你失去牌后,若这些牌中有“胡笳”牌,你获得与你手牌中“胡笳”牌花色均不同的每种花色的牌各一张。②若你手牌中“胡笳”牌数小于不为“胡笳”牌的牌数,你使用牌无距离和次数限制。',
|
||||
dc_wuban:'吴班',
|
||||
dcyouzhan:'诱战',
|
||||
dcyouzhan_info:'锁定技。当其他角色于你的回合内失去牌后,你摸一张牌,且其获得如下效果:1.其于此回合下一次受到的伤害+1;2.结束阶段,若其于此回合未受到过伤害,其摸X张牌(X为其此回合失去过牌的次数)。',
|
||||
dcyouzhan_info:'锁定技。当其他角色于你的回合内失去牌后,你摸一张牌(不计入本回合的手牌上限),且其获得如下效果:1.其于此回合下一次受到的伤害+1;2.结束阶段,若其于此回合未受到过伤害,其摸X张牌(X为其此回合失去过牌的次数且至多为3)。',
|
||||
yue_zhoufei:'乐周妃',
|
||||
yue_zhoufei_prefix:'乐',
|
||||
dclingkong:'灵箜',
|
||||
|
|
|
@ -1226,8 +1226,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(result.bool){
|
||||
player.logSkill('jsrgguiji_swapback',trigger.player);
|
||||
player.swapHandcards(trigger.player);
|
||||
player.unmarkAuto('jsrgguiji_swapback',[trigger.player]);
|
||||
}
|
||||
player.unmarkAuto('jsrgguiji_swapback',[trigger.player]);
|
||||
},
|
||||
intro:{
|
||||
content:'$的下个出牌阶段结束时,你可以与其交换手牌'
|
||||
|
|
|
@ -5111,8 +5111,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
trigger:{player:'phaseJieshuBegin'},
|
||||
filter:function(event,player){
|
||||
var num=player.storage.mobileyanzhu?player.maxHp:player.hp;
|
||||
return num>0;
|
||||
return (player.storage.mobileyanzhu?player.maxHp:player.hp)>0;
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
|
@ -5144,7 +5143,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
'step 3'
|
||||
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({
|
||||
prompt:'将一张牌置于牌堆顶,或交给其他目标角色',
|
||||
filterCard:true,
|
||||
|
@ -5212,7 +5211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.removeSkill('mobileyanzhu');
|
||||
player.storage.mobileyanzhu=true;
|
||||
player.popup('兴学');
|
||||
game.log(player,'修改了技能','【兴学】');
|
||||
game.log(player,'修改了技能','#g【兴学】');
|
||||
}
|
||||
else{
|
||||
player.gainPlayerCard(target,true,'hej');
|
||||
|
|
|
@ -411,12 +411,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:'jiefan',
|
||||
enable:'chooseToUse',
|
||||
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,
|
||||
content:function(){
|
||||
'step 0'
|
||||
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
|
||||
player.chooseToUse(function(card,player,event){
|
||||
if(get.name(card)!='sha') return false;
|
||||
return lib.filter.filterCard.apply(this,arguments);
|
||||
|
@ -425,13 +423,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return lib.filter.filterTarget.apply(this,arguments);
|
||||
}).set('logSkill','oldjiefan').set('oncard',function(){
|
||||
_status.event.player.addTempSkill('oldjiefan_recover');
|
||||
}).set('custom',{
|
||||
add:{},
|
||||
replace:{
|
||||
window:()=>{
|
||||
ui.click.cancel();
|
||||
}
|
||||
},
|
||||
});
|
||||
'step 1'
|
||||
if(!result.bool){
|
||||
var evt=event.getParent(2);
|
||||
evt.oldjiefan=true;
|
||||
evt.goto(0);
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
save:true,
|
||||
|
@ -440,7 +439,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
subSkill:{
|
||||
recover:{
|
||||
audio:'jiefan',
|
||||
// audio:'jiefan',
|
||||
trigger:{source:'damageBegin2'},
|
||||
filter:function(event,player){
|
||||
return event.getParent(4).name=='oldjiefan';
|
||||
|
|
|
@ -639,6 +639,7 @@ window.noname_character_rank={
|
|||
'shen_huatuo',
|
||||
'dc_guansuo',
|
||||
'dc_dongzhao',
|
||||
'zhugeruoxue',
|
||||
],
|
||||
bp:[
|
||||
'chess_diaochan',
|
||||
|
|
|
@ -27,7 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xin_zhangliang:['male','qun',4,['rejijun','refangtong']],
|
||||
re_simalang:['male','wei',3,['requji','rejunbing']],
|
||||
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']],
|
||||
ol_zhangzhang:['male','wu',3,['olzhijian','olguzheng']],
|
||||
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:{
|
||||
audio:2,
|
||||
skillAnimation:true,
|
||||
|
@ -15512,6 +15569,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
rechengxiang_info:'当你受到伤害后,你可以亮出牌堆顶的四张牌。然后获得其中任意数量点数之和不大于13的牌。若你得到的牌点数之和为13,你复原武将牌。',
|
||||
re_caorui:'界曹叡',
|
||||
re_caorui_prefix:'界',
|
||||
remingjian:'明鉴',
|
||||
remingjian_info:'出牌阶段限一次。你可以将所有手牌交给一名其他角色,然后该角色于其下个回合获得如下效果:1.手牌上限与使用【杀】的次数上限+1;2.当该角色首次造成伤害后,其可以令你发动一次〖恢拓〗。',
|
||||
rexingshuai:'兴衰',
|
||||
rexingshuai_info:'主公技,限定技。当你进入濒死状态时,你可令其他魏势力角色依次选择是否令你回复1点体力。然后这些角色依次受到1点伤害。有〖明鉴〗效果的角色于其回合内杀死角色后,你重置〖兴衰〗。',
|
||||
xin_zhangliang:'界张梁',
|
||||
|
|
|
@ -4165,7 +4165,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
init:function(player){
|
||||
if(!player.storage.huashen){
|
||||
player.storage.huashen={
|
||||
shown:[],
|
||||
owned:{}
|
||||
};
|
||||
}
|
||||
|
@ -4173,11 +4172,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
intro:{
|
||||
content:function(storage,player){
|
||||
var str='';
|
||||
var slist=storage.owned;
|
||||
var list=[];
|
||||
for(var i in slist){
|
||||
list.push(i);
|
||||
}
|
||||
var list=Object.keys(storage.owned);
|
||||
if(list.length){
|
||||
str+=get.translation(list[0]);
|
||||
for(var i=1;i<list.length;i++){
|
||||
|
@ -4190,36 +4185,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
return str;
|
||||
},
|
||||
onunmark:function(storage,player){
|
||||
_status.characterlist.addArray(Object.keys(storage.owned));
|
||||
storage.owned=[];
|
||||
},
|
||||
mark:function(dialog,content,player){
|
||||
var slist=content.owned;
|
||||
var list=[];
|
||||
for(var i in slist){
|
||||
list.push(i);
|
||||
}
|
||||
var list=Object.keys(content.owned);
|
||||
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');
|
||||
}
|
||||
var skill=player.storage.huashen.current2;
|
||||
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>'+
|
||||
'<div>'+get.skillInfoTranslation(skill,player)+'</div></div>');
|
||||
}
|
||||
if(dialog.buttons[i].link==player.storage.huashen.current){
|
||||
dialog.buttons[i].classList.add('glow2');
|
||||
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)+'张“化身”');
|
||||
}
|
||||
}
|
||||
var skill=player.storage.huashen.current2;
|
||||
if(skill){
|
||||
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>');
|
||||
else{
|
||||
return '没有化身';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -4425,7 +4413,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var skill=map.skill,character=map.character;
|
||||
if(character!=player.storage.huashen.current){
|
||||
player.storage.huashen.current=character;
|
||||
player.storage.huashen.shown.add(character);
|
||||
player.markSkill('huashen');
|
||||
game.broadcastAll(function(character,player){
|
||||
player.sex=lib.character[character][0];
|
||||
|
|
|
@ -12790,25 +12790,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
var name=button.link[2];
|
||||
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(evt.type=='dying'){
|
||||
if(get.attitude(player,evt.dying)<2) return false;
|
||||
if(name=='jiu') return 2.1;
|
||||
return 1.9;
|
||||
}
|
||||
if(evt.type=='phase') return player.getUseValue({name:name,nature:button.link[3],isCard:true});
|
||||
return 1;
|
||||
return player.getUseValue(card);
|
||||
}
|
||||
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;
|
||||
return 1;
|
||||
},
|
||||
backup:function(links,player){
|
||||
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');
|
||||
return !player.storage.youlong2.contains(name);
|
||||
},
|
||||
order:1,
|
||||
result:{
|
||||
player:1,
|
||||
order:function(item,player){
|
||||
if(player&&_status.event.type=='phase'){
|
||||
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},
|
||||
|
|
|
@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'xianding',
|
||||
connect:true,
|
||||
character:{
|
||||
zhugeruoxue:['female','wei',3,['dcqiongying','dcnuanhui']],
|
||||
caoyi:['female','wei',4,['dcmiyi','dcyinjun']],
|
||||
malingli:['female','shu',3,['dclima','dcxiaoyin','dchuahuo']],
|
||||
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_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_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_wangzhe:['dc_daxiaoqiao','dc_sp_machao'],
|
||||
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:{
|
||||
//诸葛若雪
|
||||
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:{
|
||||
audio:2,
|
||||
|
@ -12596,6 +12743,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhoubuyi:'周不疑(192年—208年),字元直(或作“文直”),零陵重安(今湖南衡阳县)人,刘表别驾刘先的外甥,少有异才,聪明敏达,在十七岁时就著有文论四首。曹冲死后,曹操怀疑曹丕无法驾驭周不疑,于是派人杀了周不疑。',
|
||||
tianshangyi:'田尚衣,一作陈尚衣,魏文帝曹丕宫中著名宫人。能歌善舞,一时冠绝于世,私以为比之汉宫飞燕也不遑多让。',
|
||||
malingli:'马伶俐,游卡桌游原创角色,设定上为,马超之女,其身形虽娇小,却继承了马超英勇略带冲动的个性,活泼阳光,调皮伶俐,爱摆弄爆竹烟花一类的小器具,包包里经常放置用五色彩纸包装的小炸弹球。马伶俐从小跟随马超和马云騄学习战斗技巧,战斗力超强,坚强的意志和勇气也得到了提升,同时擅长马术,有一匹可爱的小白马伴随其身边。后马伶俐成年,嫁与刘备之子刘理,获封梁王妃。两人琴瑟相和,极为恩爱,常结伴出游,被人誉为天作之合。',
|
||||
zhugeruoxue:'诸葛氏(“若雪”为网络小说虚构),诸葛亮的二姐,庞山民之妻。',
|
||||
},
|
||||
characterTitle:{
|
||||
// wulan:'#b对决限定武将',
|
||||
|
@ -13169,6 +13317,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcmiyi_info:'准备阶段,你可以选择一项:1.回复1点体力;2.受到你造成的1点伤害。然后你令任意名角色执行该项。若如此做,这些角色于结束阶段执行另一项。',
|
||||
dcyinjun:'寅君',
|
||||
dcyinjun_info:'当你使用对应实体牌均为你的手牌的【杀】或锦囊牌结算结束后,若此牌目标为1,你可以视为对该目标使用一张无伤害来源的【杀】。然后若你本回合发动〖寅君〗的次数大于你的体力值,〖寅君〗失效直到回合结束。',
|
||||
zhugeruoxue:'诸葛若雪',
|
||||
dcqiongying:'琼英',
|
||||
dcqiongying_info:'出牌阶段限一次。你可以移动场上的一张牌,然后你弃置一张与此牌花色相同的手牌(若没有该花色的手牌则改为展示所有手牌)。',
|
||||
dcnuanhui:'暖惠',
|
||||
dcnuanhui_info:'结束阶段,你可以选择一名装备区有牌的角色,其可以视为依次使用X张基本牌(X为其装备区牌数)。若其以此法使用了至少两张牌,其弃置装备区里的所有牌。',
|
||||
|
||||
sp2_yinyu:'隐山之玉',
|
||||
sp2_huben:'百战虎贲',
|
||||
|
|
|
@ -9060,7 +9060,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
mingjian:{
|
||||
audio:2,
|
||||
audioname:['re_caorui'],
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filterTarget:function(card,player,target){
|
||||
|
@ -9178,7 +9177,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
direct:true,
|
||||
content:function(){
|
||||
'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;
|
||||
if(get.attitude(player,target)>0){
|
||||
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为此次伤害的伤害点数)。',
|
||||
mingjian:'明鉴',
|
||||
mingjian2:'明鉴',
|
||||
mingjian_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色,若如此做,该角色于其下个回合的手牌上限+1,且使用【杀】的次数上限+1。',
|
||||
mingjian_info:'出牌阶段限一次。你可以将所有手牌交给一名其他角色,然后该角色于其下个回合的手牌上限+1,且使用【杀】的次数上限+1。',
|
||||
xingshuai:'兴衰',
|
||||
xingshuai_info:'主公技,限定技,当你进入濒死状态时,其他魏势力角色可依次令你回复1点体力,然后这些角色依次受到1点伤害。',
|
||||
reduodao:'夺刀',
|
||||
|
|
64
game/game.js
64
game/game.js
|
@ -9022,7 +9022,12 @@ new Promise(resolve=>{
|
|||
writable:true,
|
||||
value:function(){
|
||||
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;
|
||||
this.splice(pos,1);
|
||||
}
|
||||
|
@ -13920,7 +13925,9 @@ new Promise(resolve=>{
|
|||
bool:true,
|
||||
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;
|
||||
if(cards) next.cards=cards.slice(0);
|
||||
if(event.nopopup) next.nopopup=true;
|
||||
|
@ -15725,7 +15732,7 @@ new Promise(resolve=>{
|
|||
info.onChooseToUse(event);
|
||||
}
|
||||
}
|
||||
_status.noclearcountdown=true;
|
||||
if(_status.noclearcountdown!=='direct') _status.noclearcountdown=true;
|
||||
if(event.type=='phase'){
|
||||
if(event.isMine()){
|
||||
event.endButton=ui.create.control('结束回合','stayleft',function(){
|
||||
|
@ -15935,6 +15942,12 @@ new Promise(resolve=>{
|
|||
if(game.online){
|
||||
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');
|
||||
if(info.prompt){
|
||||
event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player);
|
||||
|
@ -15962,6 +15975,12 @@ new Promise(resolve=>{
|
|||
else if(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(!_status.noclearcountdown){
|
||||
game.stopCountChoose();
|
||||
|
@ -15985,7 +16004,7 @@ new Promise(resolve=>{
|
|||
info.onChooseToRespond(event);
|
||||
}
|
||||
}
|
||||
_status.noclearcountdown=true;
|
||||
if(_status.noclearcountdown!=='direct') _status.noclearcountdown=true;
|
||||
if(!_status.connectMode&&lib.config.skip_shan&&event.autochoose&&event.autochoose()){
|
||||
event.result={bool:false};
|
||||
}
|
||||
|
@ -16117,6 +16136,12 @@ new Promise(resolve=>{
|
|||
if(game.online){
|
||||
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');
|
||||
if(info.prompt){
|
||||
event.openskilldialog=info.prompt(info.chooseControl?result:result.links,player);
|
||||
|
@ -16142,9 +16167,9 @@ new Promise(resolve=>{
|
|||
if(event.onresult){
|
||||
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){
|
||||
_status.noclearcountdown=true;
|
||||
_status.noclearcountdown='direct';
|
||||
}
|
||||
}
|
||||
if(event.logSkill){
|
||||
|
@ -18550,7 +18575,7 @@ new Promise(resolve=>{
|
|||
if(current!=target&&get.attitude(player,current)>0){
|
||||
var es=target.getCards('e',filterCard);
|
||||
for(var i=0;i<es.length;i++){
|
||||
if(get.value(es[i],target)>0&¤t.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&¤t.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('aimTargets',event.aimTargets||game.filterPlayer());
|
||||
next.set('canReplace',event.canReplace);
|
||||
next.set('custom',get.copy(event.custom));
|
||||
if(event.prompt2) next.set('prompt2',event.prompt2);
|
||||
if(event.forced) next.set('forced',true);
|
||||
'step 1'
|
||||
event.result=result;
|
||||
if(result.bool){
|
||||
if(event.logSkill) player.logSkill(event.logSkill,result.targets,false);
|
||||
player.line2(result.targets,'green');
|
||||
event.targets=result.targets;
|
||||
}
|
||||
|
@ -18623,7 +18650,7 @@ new Promise(resolve=>{
|
|||
else{
|
||||
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{
|
||||
event.finish();
|
||||
|
@ -25189,7 +25216,6 @@ new Promise(resolve=>{
|
|||
if(!canReplace||att<0&¤t2.countEquipableSlot(get.subtype(es[i]))){
|
||||
if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false;
|
||||
}
|
||||
// if((!canReplace||!current2.countEquipableSlot(get.subtype(es[i]))&¤t2.canEquip(es[i],true))&&(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2)))) return false;
|
||||
}
|
||||
return current!=current2&&!current2.isMin()&¤t2.canEquip(es[i],canReplace);
|
||||
})){
|
||||
|
@ -25271,9 +25297,9 @@ new Promise(resolve=>{
|
|||
if(info.onuse){
|
||||
info.onuse(result,this);
|
||||
}
|
||||
if(info.direct&&!info.clearTime){
|
||||
_status.noclearcountdown=true;
|
||||
}
|
||||
// if(info.direct&&!info.clearTime){
|
||||
// _status.noclearcountdown=true;
|
||||
// }
|
||||
}
|
||||
if(event.logSkill){
|
||||
if(typeof event.logSkill=='string'){
|
||||
|
@ -26671,7 +26697,7 @@ new Promise(resolve=>{
|
|||
}
|
||||
player._hide_all_timer=true;
|
||||
}
|
||||
else if(!_status.event._global_waiting){
|
||||
else if(!_status.event._global_waiting&&_status.noclearcountdown!=='direct'){
|
||||
player.showTimer(time);
|
||||
}
|
||||
lib.node.torespondtimeout[this.playerid]=setTimeout(function(){
|
||||
|
@ -26688,7 +26714,7 @@ new Promise(resolve=>{
|
|||
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();
|
||||
}
|
||||
clearTimeout(lib.node.torespondtimeout[this.playerid]);
|
||||
|
@ -57198,6 +57224,10 @@ new Promise(resolve=>{
|
|||
const skill=gameEvent.skill;
|
||||
if(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;
|
||||
if(typeof viewAs=='function'){
|
||||
const viewedAs=viewAs(result.cards,gameEvent.player);
|
||||
|
@ -61201,8 +61231,8 @@ new Promise(resolve=>{
|
|||
str2+='·'+tagstr;
|
||||
}
|
||||
}
|
||||
if(str.suit&&str.number){
|
||||
var cardnum=str.number||'';
|
||||
if(str.suit&&str.number||str.isCard){
|
||||
var cardnum=get.number(str,false)||'';
|
||||
if([1,11,12,13].contains(cardnum)){
|
||||
cardnum={'1':'A','11':'J','12':'Q','13':'K'}[cardnum]
|
||||
}
|
||||
|
@ -61210,7 +61240,7 @@ new Promise(resolve=>{
|
|||
str2+='('+get.translation(str)+')';
|
||||
}
|
||||
else{
|
||||
str2+='【'+get.translation(str.suit)+cardnum+'】';
|
||||
str2+='【'+get.translation(get.suit(str,false))+cardnum+'】';
|
||||
// var len=str2.length-1;
|
||||
// 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 |
Loading…
Reference in New Issue