This commit is contained in:
Spmario233 2021-11-01 22:32:23 +08:00
parent 854a991250
commit f1d5dbc1d2
39 changed files with 735 additions and 127 deletions

BIN
audio/die/duosidawang.mp3 Normal file

Binary file not shown.

BIN
audio/die/jiachong.mp3 Normal file

Binary file not shown.

BIN
audio/die/re_lusu.mp3 Normal file

Binary file not shown.

BIN
audio/die/wuban.mp3 Normal file

Binary file not shown.

BIN
audio/die/yuejiu.mp3 Normal file

Binary file not shown.

BIN
audio/skill/beini1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/beini2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/cuijin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/cuijin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dingfa1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dingfa2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/equan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/equan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/jintao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/jintao2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/manji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/manji2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oldimeng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/oldimeng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olhaoshi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olhaoshi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/reweimu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/reweimu2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -6351,7 +6351,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
if(result.bool){
player.addTempSkill('riki_spwenji_respond');
player.storage.riki_spwenji_respond=result.cards[0].name;
player.storage.riki_spwenji_respond=get.type2(result.cards[0],target);
event.target.give(result.cards,player,true);
}
},
@ -6364,7 +6364,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true,
audio:'riki_spwenji',
filter:function(event,player){
return event.card.name==player.storage.riki_spwenji_respond;
return get.type2(event.card)==player.storage.riki_spwenji_respond;
},
content:function(){
trigger.directHit.addArray(game.players);
@ -6372,7 +6372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name==player.storage.riki_spwenji_respond;
return get.type2(arg.card)==player.storage.riki_spwenji_respond;
},
},
}

View File

@ -612,7 +612,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if((player==game.me||player.isUnderControl())&&!game.observe){
var str='R={ ';
for(var i=0;i<storage.length;i++){
str+=('<'+get.translation(storage[i])+', '+get.translation(player.storage.disordersidi2[i])+'>');
str+=('&lt;'+get.translation(storage[i])+', '+get.translation(player.storage.disordersidi2[i])+'&gt;');
if(i<storage.length-1) str+=', ';
}
str+=' }'
@ -2130,12 +2130,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
effect:{
target:function(card,player,target){
if(_status.luanchou_judging) return;
_status.luanchou_judging=true;
if(get.tag(card,'damage')&&target.hasMark('luanchou')){
var other=game.findPlayer(function(current){
return current!=target&&current.hasMark('luanchou')&&current.hp>target.hp&&(!current.storage.counttrigger||!current.storage.counttrigger.gonghuan);
});
if(!other) return;
return [0,0,0,get.effect(other,card,player,target)];
if(!other){
delete _status.luanchou_judging;
return;
};
var eff=[0,0,0,get.damageEffect(other,player,target,get.nature(card))];
delete _status.luanchou_judging;
return eff;
}
},
},
@ -12927,7 +12934,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinzenhui:'谮毁',
xinzenhui_info:'出牌阶段限一次。当你使用【杀】或黑色普通锦囊牌指定目标时,你可选择另一名能成为此牌目标的其他角色并选择一项:①令其也成为此牌的目标。②获得其一张牌,然后将此牌的使用者改为该角色。',
xinjiaojin:'骄矜',
xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。',
xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌并防止此伤害。',
xin_caozhen:'手杀曹真',
disordersidi:'司敌',
disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a并选择一名角色b在关系R内建立二元序偶<a,b>b对其他角色不可见。②一名角色a使用的不为延时锦囊牌的牌结算结束后你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时若aRb成立则你从R内移除<a,b>若b为你你摸一张牌若b不为你你可选择⒈取消此牌的目标并对a造成1点伤害。⒉摸两张牌。',

View File

@ -4944,6 +4944,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
luanwu:{
audio:2,
audioname:['re_jiaxu'],
unique:true,
enable:'phaseUse',
limited:true,

View File

@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
sp:{
sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu','huangzu','huangchengyan','gaogan','duxi','ol_dengzhi'],
sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu','huangzu','huangchengyan','gaogan','duxi','ol_dengzhi','ol_wangrong'],
sp_tongque:["liuxie","lingju","fuwan","sp_fuwan","sp_fuhuanghou","sp_jiben"],
sp_zhongdan:["cuiyan","huangfusong"],
sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","sp_mifangfushiren","bianfuren"],
@ -16,6 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
characterFilter:{},
character:{
ol_wangrong:['female','qun',3,['olfengzi','oljizhan','olfusong'],['unseen']],
ol_dengzhi:['male','shu',3,['olxiuhao','olsujian']],
bianfuren:['female','wei',3,['fuwei','yuejian']],
duxi:['male','wei',3,['quxi','bixiong']],
@ -393,6 +394,110 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//王荣
olfengzi:{
audio:2,
trigger:{player:'useCard'},
direct:true,
filter:function(event,player){
if(event.olfengzi_buff||!event.targets.length||!player.isPhaseUsing()||player.hasSkill('olfengzi_buff')) return false;
var type=get.type(event.card,false);
if(type!='basic'&&type!='trick') return false;
return player.hasCard(function(i){
if(_status.connectMode) return true;
return get.type2(i,player)==type;
},'h');
},
content:function(){
'step 0'
if(player!=game.me&&!player.isUnderControl()&&!player.isOnline()) game.delayx();
var type=get.type(trigger.card,false);
player.chooseToDiscard('h',get.prompt('olfengzi'),'弃置一张'+get.translation(type)+'牌,令'+get.translation(trigger.card)+'结算两次',function(card,player){
return get.type(card,player)==_status.event.type;
}).set('type',type).logSkill='olfengzi';
'step 1'
if(result.bool){
player.addTempSkill('olfengzi_buff','phaseUseAfter');
trigger.olfengzi_buff=player;
}
},
subSkill:{
buff:{
trigger:{global:'useCardToTargeted'},
forced:true,
charlotte:true,
popup:false,
lastDo:true,
filter:function(event,player){
return (event.parent.olfengzi_buff==player&&event.targets.length==event.parent.triggeredTargets4.length);
},
content:function(){
trigger.getParent().targets=trigger.getParent().targets.concat(trigger.targets);
trigger.getParent().triggeredTargets4=trigger.getParent().triggeredTargets4.concat(trigger.targets);
},
},
},
},
oljizhan:{
audio:2,
trigger:{player:'phaseDrawBegin1'},
filter:function(event,player){
return !event.numFixed;
},
content:function(){
'step 0'
trigger.changeToZero();
var card=get.cards()[0];
game.cardsGotoOrdering(card);
event.cards=[card];
event.num=get.number(card,false);
player.showCards(card,get.translation(player)+'发动了【吉占】');
'step 1'
var str=get.strNumber(num);
player.chooseControl('大于'+str,'小于'+str,'cancel2').set('prompt','吉占:猜测下一张牌的点数');
'step 2'
var card=get.cards()[0];
game.cardsGotoOrdering(card);
event.cards.push(card);
var num=get.number(card,false);
if(num>event.num&&result.index==0||num<event.num&&result.index==1){
event.num=num;
event.goto(1);
}
player.showCards(card);
'step 3'
player.gain(cards,'gain2');
},
},
olfusong:{
audio:2,
forceDie:true,
trigger:{player:'die'},
skillAnimation:true,
animationColor:'gray',
direct:true,
filter:function(event,player){
return game.hasPlayer(function(current){
return current.maxHp>player.maxHp;
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('olfusong'),'令一名体力上限大于你的其他角色获得〖丰姿〗或〖吉占〗',function(card,player,target){
return target.maxHp>player.maxHp;
}).set('forceDie',true);
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('olfusong',target);
player.chooseControl('olfengzi','oljizhan').set('prompt','令'+get.translation(target)+'获得其中一个技能');
}
else event.finish();
'step 2'
target.addSkillLog(result.control);
},
},
//邓芝
olxiuhao:{
audio:2,
@ -418,8 +523,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.attitude(player,event.source)>0) bool=true;
if(get.damageEffect(player,event.source,player,event.nature)<0){
if(event.source.hasSkillTag('nogain')) bool=true;
if(event.num>=player.hp+player.countCards('hs',{name:['tao','jiu']})&&(!player.hasFriend()||player==get.zhu(player))) return true;
return false;
if(event.num>=player.hp+player.countCards('hs',{name:['tao','jiu']})&&(!player.hasFriend()||player==get.zhu(player))) bool=true;
}
}
delete _status.olxiuhao_judging;
@ -5820,7 +5924,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseTarget(str+'角色使用一张杀',true,function(card,player,target){
if(!player.canUse('sha',target,false)) return false;
if(get.mode()=='guozhan'){
return targe.isFriendOf(status.event.identity);
return target.isFriendOf(status.event.identity);
}
return true;
}).set('ai',function(target){
@ -13651,7 +13755,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:"useCardToPlayered",
},
direct:true,
filter:function (event,player){
filter:function(event,player){
if(event.getParent().triggeredTargets3.length>1) return false;
if(!player.isPhaseUsing()) return false;
if(!['basic','trick'].contains(get.type(event.card))) return false;
@ -13660,7 +13764,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function (){
'step 0'
player.chooseTarget(get.prompt2('xinfu_lingren'),function(card,player,target){
player.chooseTarget(get.prompt('xinfu_lingren'),'选择一名目标角色并猜测其手牌构成',function(card,player,target){
return _status.event.targets.contains(target);
}).set('ai',function(target){
return 2-get.attitude(_status.event.player,target);
@ -15012,6 +15116,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xujing:['xujing','sp_xujing'],
zhaoxiang:['zhaoxiang','tw_zhaoxiang'],
dengzhi:['ol_dengzhi','dengzhi'],
wangrong:['wangrong','ol_wangrong'],
},
translate:{
"xinfu_lingren":"凌人",
@ -15842,6 +15947,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olsujian:'素俭',
olsujian_given:'已分配',
olsujian_info:'锁定技。弃牌阶段开始前,你跳过此阶段。然后你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌。',
ol_wangrong:'OL王荣',
olfengzi:'丰姿',
olfengzi_info:'出牌阶段限一次。当你使用有目标的基本牌或普通锦囊牌时,你可弃置一张与此牌类型相同的牌,然后令此牌结算两次。',
oljizhan:'吉占',
oljizhan_info:'摸牌阶段开始时,你可以放弃摸牌。你展示牌堆顶的一张牌,并猜测牌堆顶的下一张牌点数大于或小于此牌。若你猜对,你可继续重复此流程。然后你获得以此法展示的所有牌。',
olfusong:'赋颂',
olfusong_info:'当你死亡时,你可以令一名体力上限大于你的其他角色获得〖吉占〗或〖丰姿〗。',
sp_default:"常规",
sp_tongque:"铜雀台",

View File

@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
beimihu:['female','qun',3,['zongkui','guju','baijia']],
xurong:["male","qun",4,["xinfu_xionghuo","xinfu_shajue"],[]],
zhangqiying:["female","qun",3,["xinfu_falu","xinfu_dianhua","xinfu_zhenyi"],[]],
sp_liuqi:['male','qun',3,['spwenji','sptunjiang']],
sp_liuqi:['male','qun',3,['rewenji','sptunjiang']],
xf_tangzi:["male","wei",4,["xinfu_xingzhao"],[]],
xf_huangquan:["male","shu",3,["xinfu_dianhu","xinfu_jianji"],[]],
xf_sufei:["male","wu",4,["xinfu_lianpian"],[]],
@ -926,7 +926,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qljsuiren:{
audio:2,
trigger:{player:'die'},
forced:true,
direct:true,
forceDie:true,
skillAnimation:true,
animationColor:'gray',
@ -1015,7 +1015,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(cards.length) target.discard(cards);
event.finish();
'step 4'
target.chooseCard('h',true,'交给'+get.translation(player)+get.cnNumber(num)+'张手牌');
target.chooseCard('h',true,'交给'+get.translation(player)+get.cnNumber(num)+'张手牌',num);
'step 5'
if(result.bool) player.gain(result.cards,target,'giveAuto');
},
@ -1388,13 +1388,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
filter:function(event,player){
return game.hasPlayer(function(current){
return !current.hasSkill('zhuihuan2');
return !current.hasSkill('zhuihuan2_new');
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('zhuihuan'),'令一名角色获得“追还”效果',function(card,player,target){
return !target.hasSkill('zhuihuan2');
return !target.hasSkill('zhuihuan2_new');
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target);
if(target.hasSkill('maixie')||target.hasSkill('maixie_defend')) att/=3;
@ -1405,7 +1405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
var target=result.targets[0];
player.logSkill('zhuihuan');
target.addSkill('zhuihuan2_new');
target.addTempSkill('zhuihuan2_new',{player:'phaseZhunbei'});
game.delayx();
}
},
@ -1495,6 +1495,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
var target=result.targets[0];
player.logSkill('jielie',target);
player.addSkill('jielie_clear');
player.storage.jielie=target;
player.markSkill('jielie');
game.delayx();
@ -1507,13 +1508,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'jielie',
trigger:{global:'gainAfter'},
forced:true,
usable:1,
filter:function(event,player){
return event.player==player.storage.jielie&&event.player!=_status.currentPhase&&event.getParent().name=='draw'&&event.cards&&event.cards.length>0;
return player.countMark('jielie_draw')<3&&event.player==player.storage.jielie&&event.player!=_status.currentPhase&&event.cards&&event.cards.length>0;
},
logTarget:'player',
content:function(){
player.draw(Math.min(3,trigger.cards.length));
var num=Math.min(3-player.countMark('jielie_draw'),trigger.cards.length);
player.addMark('jielie_draw',num,false);
player.draw(num);
},
},
clear:{
trigger:{global:'phaseBeginStart'},
forced:true,
firstDo:true,
popup:false,
charlotte:true,
filter:function(event,player){
return player.countMark('jielie_draw')>0;
},
content:function(){
player.removeMark('jielie_draw',player.countMark('jielie_draw'),false);
},
},
dying:{
@ -1556,17 +1571,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageBegin4'},
direct:true,
filter:function(event,player){
return (!event.source)||(event.source!=player&&event.source!=player.storage.jielie);
return ((!event.source)||(event.source!=player&&event.source!=player.storage.jielie))&&player.storage.jielie&&player.storage.jielie.isIn();
},
content:function(){
'step 0'
player.chooseControl(lib.suit.slice(0),'cancel2').set('prompt',get.prompt('kangge')).set('prompt2','防止伤害并改为失去等量体力,且从牌堆中获得等量的花色牌').set('ai',function(){
player.chooseControl(lib.suit.slice(0),'cancel2').set('prompt',get.prompt('kangge')).set('prompt2','防止伤害并改为失去等量体力,且令'+get.translation(player.storage.jielie)+'从弃牌堆中获得等量的花色牌').set('ai',function(){
var player=_status.event.player;
if(get.attitude(player,player.storage.jielie)<=0) return 'cancel2';
return lib.suit.randomGet();
});
'step 1'
if(result.control!='cancel2'){
event.suit=result.control;
player.logSkill('kangge');
player.logSkill('kangge',player.storage.jielie);
trigger.cancel();
player.loseHp(trigger.num);
}
@ -1580,7 +1597,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card) cards.push(card);
else break;
}
if(cards.length) player.gain(cards,'gain2');
if(cards.length) player.storage.jielie.gain(cards,'gain2');
},
},
//张横
@ -4418,7 +4435,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('juanhui'),lib.filter.notMe).set('ai',function(target){
player.chooseTarget(get.prompt('juanhui'),lib.filter.notMe,'选择记录一名其他角色使用过的牌').set('ai',function(target){
if(target.isTurnedOver()||target.hasJudge('lebu')) return Math.random();
return (1+target.countCards('h'))*2+Math.random();
});
@ -4450,7 +4467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var vcard=player.getStorage('juanhui3');
if(vcard.length){
dialog.addText('记录卡牌');
dialog.addAuto([vcard,'vcard']);
dialog.addSmall([vcard,'vcard']);
}
},
content:function(storage,player){
@ -8139,6 +8156,65 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool) event.goto(1);
},
},
rewenji:{
audio:'spwenji',
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return game.hasPlayer(function(current){
return current!=player&&current.countCards('he');
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt2('rewenji'),function(card,player,target){
return target!=player&&target.countCards('he');
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>0) return Math.sqrt(att)/10;
return 5-att;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('rewenji',target);
target.chooseCard('he',true,'问计:将一张牌交给'+get.translation(player));
}
else{
event.finish();
}
'step 2'
if(result.bool){
player.addTempSkill('rewenji_respond');
player.storage.rewenji_respond=get.type2(result.cards[0],target);
event.target.give(result.cards,player,true);
}
},
subSkill:{
respond:{
onremove:true,
trigger:{player:'useCard'},
forced:true,
charlotte:true,
audio:'spwenji',
filter:function(event,player){
return get.type2(event.card)==player.storage.rewenji_respond;
},
content:function(){
trigger.directHit.addArray(game.filterPlayer(function(current){
return current!=player;
}));
},
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return get.type2(arg.card)==player.storage.rewenji_respond;
},
},
}
}
},
spwenji:{
audio:2,
trigger:{player:'phaseUseBegin'},
@ -9680,6 +9756,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_lianpian_info":"出牌阶段限三次。当你对一名角色连续使用牌时,你可以摸一张牌,然后可以将一张牌交给该角色。",
spwenji:'问计',
spwenji_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌名称相同的牌时不能被其他角色响应。',
rewenji:'问计',
rewenji_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌类型相同的牌时不能被其他角色响应。',
sptunjiang:'屯江',
sptunjiang_info:'结束阶段若你未跳过本回合的出牌阶段且你于本回合出牌阶段内未使用牌指定过其他角色为目标则你可以摸X张牌X为全场势力数。',
zongkui:'纵傀',
@ -10057,9 +10135,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liangjue_info:'锁定技当有黑色牌进入或者离开你的判定区或装备区后若你的体力值大于1你失去1点体力然后摸两张牌。',
tangji:'唐姬',
jielie:'节烈',
jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外摸牌时,你摸等量的牌(每回合限一次且至多摸三张其进入濒死状态时你可令其回复体力至1点每轮限一次。该角色死亡时你弃置所有牌并失去1点体力。',
jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外获得牌后,你摸等量的牌(每回合至多摸三张其进入濒死状态时你可令其回复体力至1点每轮限一次。该角色死亡时你弃置所有牌并失去1点体力。',
kangge:'抗歌',
kangge_info:'当你受到除自己和“节烈”角色以外的角色造成的伤害时你可以防止此伤害并选择一种花色然后你失去X点体力从弃牌堆中随机获得X张此花色的牌X为伤害值。',
kangge_info:'当你受到除自己和“节烈”角色以外的角色造成的伤害时你可以防止此伤害并选择一种花色然后你失去X点体力令“节烈”角色从弃牌堆中随机获得X张此花色的牌X为伤害值。',
yangwan:'杨婉',
youyan:'诱言',
youyan_info:'出牌阶段/弃牌阶段各限一次,当你的牌因弃置进入弃牌堆后,你可以从牌堆中获得本次弃牌中没有的花色的牌各一张。',
@ -10078,7 +10156,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fuzhong_info:'锁定技当你于回合外获得牌后你获得一枚“重”标记。若X大于0你的手牌上限+1大于1你至其他角色的距离-1大于2你于摸牌阶段开始时令额定摸牌数+1大于3准备阶段你对一名其他角色造成1点伤害然后移去X枚“重”X为“重”数。',
heyan:'何晏',
yachai:'崖柴',
yachai_info:'当你受到伤害后,你可令伤害来源选择一项:①其本回合不能再使用手牌;②其展示所有手牌,然后弃置手牌中一种花色的所有牌。③交给你与你手牌数差值一半数量的手牌(向上取整);',
yachai_info:'当你受到伤害后,你可令伤害来源选择一项:①其本回合不能再使用手牌;②其展示所有手牌,然后弃置手牌中一种花色的所有牌;③交给你与你手牌数差值一半数量的手牌(向上取整)。',
qingtan:'清谈',
qingtan_info:'出牌阶段限一次,你可令所有有手牌的角色同时选择一张手牌并同时展示。你可以获得其中花色唯一最多的牌,然后展示此花色牌的角色各摸一张牌。若如此做,弃置其他的牌。',
qiuliju:'丘力居',

View File

@ -657,7 +657,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
var suit=get.suit(trigger.card);
var num=trigger.target.countCards('h','shan');
var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card)).set('ai',function(card){
var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card)).set('ai','he',function(card){
var num=_status.event.num;
if(num==0) return 0;
if(card.name=='shan') return num>1?2:0;
@ -900,6 +900,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
none:{
selectTarget:2,
filterTarget:function(card,player,target){
if(!ui.selected.targets.length) return true;
return target.countCards('he')>0;
},
complexSelect:true,

View File

@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'yingbian',
connect:true,
character:{
zuofen:['female','jin',3,['zhaosong','lisi'],['unseen']],
ol_huaxin:['male','wei',3,['caozhao','olxibing']],
zhongyan:['female','jin',3,['bolan','yifa']],
weiguan:['male','jin',3,['zhongyun','shenpin']],
@ -15,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jin_zhangchunhua:['female','jin',3,['huishi','qingleng','xuanmu'],['hiddenSkill']],
jin_simayi:['male','jin',3,['buchen','smyyingshi','xiongzhi','quanbian'],['hiddenSkill']],
jin_wangyuanji:['female','jin',3,['shiren','yanxi'],['hiddenSkill']],
jin_simazhao:['male','jin',3,['tuishi','choufa','zhaoran','chengwu'],['zhu','hiddenSkill']],
jin_simazhao:['male','jin',3,['tuishi','xinchoufa','zhaoran','chengwu'],['zhu','hiddenSkill']],
jin_xiahouhui:['female','jin',3,['baoqie','jyishi','shiduo'],['hiddenSkill']],
jin_simashi:['male','jin','3/4',['taoyin','yimie','ruilve','tairan'],['hiddenSkill','zhu']],
zhanghuyuechen:['male','jin',4,['xijue']],
@ -30,6 +31,204 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
zhaosong:{
trigger:{global:'phaseUseBegin'},
logTarget:'player',
filter:function(event,player){
if(player==event.player||!event.player.countCards('h')) return false;
var types=['basic','trick','equip'];
for(var i of types){
if(event.player.hasMark('zhaosong_'+i)) return false;
}
return true;
},
prompt2:'令其交给你一张手牌,并根据类型获得对应的标记',
content:function(){
'step 0'
event.target=trigger.player;
event.target.chooseCard('h',true,get.translation(player)+'发动了【诏颂】;请交给其一张手牌');
'step 1'
if(result.bool){
var card=result.cards[0];
player.gain(card,target,'give');
var type=get.type2(card,target);
if(lib.skill['zhaosong_'+type]){
target.addSkill('zhaosong_'+type);
target.addMark('zhaosong_'+type);
}
}
},
subSkill:{
basic:{
marktext:'颂',
intro:{
name:'诏颂(颂)',
name2:'颂',
content:'当你使用【杀】选择唯一目标时你可移去“颂”并为此【杀】增加至多两个目标。然后若此【杀】造成的伤害小于2你失去1点体力。',
},
trigger:{player:'useCard2'},
direct:true,
charlotte:true,
onremove:true,
filter:function(event,player){
return player.hasMark('zhaosong_basic')&&event.card.name=='sha'&&
event.targets.length==1&&game.hasPlayer(function(current){
return current!=player&&current!=event.targets[0]&&lib.filter.targetEnabled2(event.card,player,current);
});
},
content:function(){
'step 0'
player.chooseTarget([1,2],'是否弃置“颂”标记?','为'+get.translation(trigger.card)+'增加至多两个目标',function(card,player,target){
var evt=_status.event.getTrigger();
return target!=player&&target!=evt.targets[0]&&lib.filter.targetEnabled2(evt.card,player,target);
}).set('ai',function(target){
var evt=_status.event.getTrigger();
return get.effect(target,evt.card,evt.player,evt.player);
});
'step 1'
if(result.bool){
if(player!=event.player&&!player.isOnline()) game.delayx();
player.addTempSkill('zhaosong_shaloss');
}
else event.finish();
'step 2'
var targets=result.targets;
player.logSkill('zhaosong_basic',targets);
player.removeMark('zhaosong_basic',1);
player.removeSkill('zhaosong_basic');
trigger.targets.addArray(targets);
trigger.zhaosong_basic=true;
},
},
shaloss:{
trigger:{player:'useCardAfter'},
forced:true,
charlotte:true,
filter:function(event,player){
if(!event.zhaosong_basic) return false;
var num=0;
player.getHistory('sourceDamage',function(evt){
if(evt.card==event.card) num+=evt.num;
});
return num<2;
},
content:function(){
player.loseHp();
},
},
trick:{
marktext:'诔',
intro:{
name:'诏颂(诔)',
name2:'诔',
content:'当你进入濒死状态时你可移去“诔”并减1点体力上限然后将体力回复至1点并摸一张牌。',
},
trigger:{player:'dying'},
prompt:'是否弃置“诔”标记?',
prompt2:'减1点体力上限然后回复体力至1点并摸一张牌。',
charlotte:true,
onremove:true,
filter:function(event,player){
return player.hasMark('zhaosong_trick')&&player.hp<1;
},
check:function(event,player){
if(player.maxHp<2||player.countCards('h',function(card){
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player);
if(mod!='unchanged') return mod;
var savable=get.info(card).savable;
if(typeof savable=='function') savable=savable(card,player,event.player);
return savable;
})>=1+event.num-event.player.hp) return false;
return true;
},
content:function(){
'step 0'
player.removeMark('zhaosong_trick',1);
player.removeSkill('zhaosong_trick');
player.loseMaxHp();
'step 1'
if(player.hp<1) player.recover(1-player.hp);
player.draw();
},
},
equip:{
marktext:'赋',
intro:{
name:'诏颂(赋)',
name2:'赋',
content:'出牌阶段开始时,你可移去“赋”并弃置一名角色区域内的一张牌,然后可以令其摸一张牌。',
},
trigger:{player:'phaseUseBegin'},
direct:true,
charlotte:true,
onremove:true,
filter:function(event,player){
return player.hasMark('zhaosong_equip')&&game.hasPlayer(function(current){
return current.hasCard(function(card){
return lib.filter.canBeDiscarded(card,player,current);
},'hej');
});
},
content:function(){
'step 0'
player.chooseTarget('是否弃置“赋”标记?','弃置一名角色区域内的一张牌,然后可以令其摸一张牌',function(card,player,current){
return current.hasCard(function(card){
return lib.filter.canBeDiscarded(card,player,current);
},'hej');
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target)>0?2:1;
return get.effect(target,{name:'guohe_copy'},player,player)*att;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('zhaosong_equip',target);
player.removeMark('zhaosong_equip',1);
player.removeSkill('zhaosong_equip');
player.discardPlayerCard(target,true,'hej');
}
else event.finish();
'step 2'
if(target.isIn()){
player.chooseBool('是否令'+get.translation(target)+'摸一张牌?').set('ai',function(){
var evt=_status.event.getParent();
return get.attitude(evt.player,evt.target)>0;
});
}
else event.finish();
'step 3'
if(result.bool) target.draw();
},
},
},
},
lisi:{
audio:2,
trigger:{player:'useCardAfter'},
direct:true,
filter:function(event,player){
if(player==_status.currentPhase||!event.cards.filterInD().length) return false;
var hs=player.countCards('h');
return game.hasPlayer(function(current){
return current!=player&&current.countCards('h')<=hs;
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('lisi'),'将'+get.translation(trigger.cards.filterInD())+'交给一名手牌数不大于你的其他角色',function(card,player,target){
return target!=player&&target.countCards('h')<=player.countCards('h');
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('lisi',target);
target.gain(trigger.cards.filterInD(),'gain2');
}
},
},
caozhao:{
audio:2,
enable:'phaseUse',
@ -1566,6 +1765,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!result.bool) target.damage();
},
},
xinchoufa:{
audio:'choufa',
inherit:'choufa',
content:function(){
'step 0'
player.choosePlayerCard(target,'h',true);
'step 1'
player.showCards(result.cards,get.translation(player)+'对'+get.translation(target)+'发动了【筹伐】');
var type=get.type2(result.cards[0],target),hs=target.getCards('h',function(card){
return card!=result.cards[0]&&get.type2(card,target)!=type;
});
if(hs.length){
target.addGaintag(hs,'xinchoufa');
target.addTempSkill('xinchoufa2',{player:'phaseAfter'});
}
},
},
xinchoufa2:{
charlotte:true,
onremove:function(player){
player.removeGaintag('xinchoufa');
},
mod:{
cardname:function(card){
if(get.itemtype(card)=='card'&&card.hasGaintag('xinchoufa')) return 'sha';
},
cardnature:function(card){
if(get.itemtype(card)=='card'&&card.hasGaintag('xinchoufa')) return false;
},
},
},
choufa:{
enable:'phaseUse',
audio:2,
@ -2188,6 +2418,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cheliji:'彻里吉是历史小说《三国演义》中的虚构人物,西羌国王。蜀相诸葛亮伐魏,魏都督曹真驰书赴羌,国王彻里吉即命雅丹丞相与越吉元帅起羌兵一十五万、并战车直扣西平关。后军大败,越吉亡,雅丹被俘,亮将所获羌兵及车马器械,尽给还雅丹,俱放回国。彻里吉感蜀恩义,与之结盟。正史中没有关于彻里吉的记载。',
weiguan:'卫瓘220年291年字伯玉。河东郡安邑县今山西省夏县人。三国曹魏后期至西晋初年重臣、书法家曹魏尚书卫觊之子。卫瓘出身官宦世家年轻时仕官于曹魏历任尚书郎、散骑常侍、侍中、廷尉等职。后以镇西军司、监军身份参与伐蜀战争。蜀汉亡后与钟会一道逮捕邓艾钟会谋反时又成功平息叛乱命田续杀邓艾父子。回师后转任督徐州诸军事、镇东将军封菑阳侯。西晋建立后历任青州、幽州刺史、征东大将军等职成功化解北方边境威胁因功进爵菑阳公。后入朝为尚书令、侍中又升任司空领太子少傅。后逊位拜太保。晋惠帝即位后与贾皇后对立终在政变中满门遇害享年七十二岁。卫瓘善隶书及章草。不仅兼工各体还能学古人之长是颇有创意的书法家。唐朝张怀瓘《书断》中评其章草为“神品”。',
zhongyan:' 钟琰 (?—?年)颍川人,王浑之妻。生卒年不详,约魏末晋初间前后在世。王浑的妻子钟琰,是颍川人,为魏太傅钟繇的曾孙女,父亲钟徽,为黄门郎。她平时广泛阅读各种书籍,因此几岁的时候就能撰写文章。她聪慧弘雅,善于啸咏,她的礼仪法度,为中表所推崇,她写有文集五卷。',
zuofen:'左芬约253年300年4月23日出土墓志作左棻字兰芝齐国临淄今山东临淄西晋诗人。少好学善属文。为晋武帝贵人。今存诗、赋、颂、赞、诔等20余篇大都为应诏而作《离思赋》最著名。原有集已失传。',
},
characterTitle:{},
perfectPair:{},
@ -2246,6 +2477,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
choufa:'筹伐',
choufa2:'筹伐',
choufa_info:'出牌阶段限一次你可展示一名其他角色的一张手牌并记录其类型A。你令其原类型不为A的手牌的牌名均视为【杀】且均视为无属性直到其回合结束。',
xinchoufa:'筹伐',
xinchoufa_info:'出牌阶段限一次你可展示一名其他角色的一张手牌A。你令其所有类型与A不同的手牌的牌名均视为【杀】且均视为无属性直到其回合结束。',
zhaoran:'昭然',
zhaoran2:'昭然',
zhaoran_info:'出牌阶段开始时,你可令你的手牌对其他角色可见直到出牌阶段结束。若如此做,当你于此阶段内失去一张手牌后,若你的手牌里没有与此牌花色相同的牌且你本回合内未因该花色的牌触发过此效果,则你选择一项:①摸一张牌。②弃置一名其他角色的一张牌。',
@ -2332,6 +2565,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
caozhao_info:'出牌阶段限一次你可展示一张手牌并声明一种未以此法声明过的基本牌或普通锦囊牌令一名体力不大于你的其他角色选择一项令此牌视为你声明的牌或其失去1点体力。然后若此牌声明成功然后你可将其交给一名其他角色。',
olxibing:'息兵',
olxibing_info:'每当你受到其他角色造成的伤害后/对其他角色造成伤害后,你可弃置你或该角色两张牌,然后你们中手牌少的角色摸两张牌,以此法摸牌的角色不能使用牌指定你为目标直到回合结束。',
zuofen:'左棻',
zhaosong:'诏颂',
zhaosong_info:'一名其他角色于其出牌阶段开始时,若其没有标记,你可令其正面向上交给你一张手牌,然后根据此牌的类型,令该角色获得对应的标记:锦囊牌,“诔”标记;装备牌,“赋”标记;基本牌,“颂”标记。进入濒死时,你可弃置"诔"减少一点体力上限回复至1体力并摸1张牌出牌阶段开始时你可弃置“赋”弃置一名角色区域内的一张牌然后可令其摸一张牌你使用仅指定一个目标的【杀】时可弃置“颂”为此【杀】额外选择至多两个目标然后若此【杀】造成的伤害小于2你失去1点体力。',
lisi:'离思',
lisi_info:'每当你于回合外使用牌的置入弃牌堆时,你可将其交给一名手牌数不大于你的其他角色。',
yingbian_pack1:'文德武备·理',
yingbian_pack2:'文德武备·备',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.110.9.3.2',
'v1.9.110.9.3.4',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -793,6 +793,11 @@ window.noname_asset_list=[
'audio/die/ol_dengai.mp3',
'audio/die/xin_caozhen.mp3',
'audio/die/caoanmin.mp3',
'audio/die/duosidawang.mp3',
'audio/die/jiachong.mp3',
'audio/die/re_lusu.mp3',
'audio/die/wuban.mp3',
'audio/die/yuejiu.mp3',
'audio/skill/decadezishou1.mp3',
'audio/skill/decadezishou2.mp3',
@ -3567,6 +3572,28 @@ window.noname_asset_list=[
'audio/skill/olxiuhao2.mp3',
'audio/skill/xianwei1.mp3',
'audio/skill/xianwei2.mp3',
'audio/skill/beini1.mp3',
'audio/skill/beini2.mp3',
'audio/skill/cuijin1.mp3',
'audio/skill/cuijin2.mp3',
'audio/skill/dingfa1.mp3',
'audio/skill/dingfa2.mp3',
'audio/skill/equan1.mp3',
'audio/skill/equan2.mp3',
'audio/skill/jintao1.mp3',
'audio/skill/jintao2.mp3',
'audio/skill/luanwu_re_jiaxu1.mp3',
'audio/skill/luanwu_re_jiaxu2.mp3',
'audio/skill/manji1.mp3',
'audio/skill/manji2.mp3',
'audio/skill/oldimeng1.mp3',
'audio/skill/oldimeng2.mp3',
'audio/skill/olhaoshi1.mp3',
'audio/skill/olhaoshi2.mp3',
'audio/skill/reweimu1.mp3',
'audio/skill/reweimu2.mp3',
'audio/skill/wansha_re_jiaxu1.mp3',
'audio/skill/wansha_re_jiaxu2.mp3',
'audio/voice/male/0.mp3',
'audio/voice/male/1.mp3',

View File

@ -17232,6 +17232,14 @@
else str+=('人数:<span class="firetext">'+this.hp+'/'+this.maxHp+'</span>');
str+=(' ('+info[0].slice(0,12)+' 的房间)');
if(config.mode!='guozhan'&&(config.mode!='doudizhu'||config.doudizhu_mode!='online')){
str+='【';
for(var i=0;i<config.cardPack.length;i++){
str+=(get.translation(config.cardPack[i]+'_card_config').slice(0,2));
if(i<config.cardPack.length-1) str+='+';
}
str+='】';
}
this.config=config;
if(this.hp==this.maxHp&&!config.gameStarted){
this.roomfull=true;
@ -27614,6 +27622,11 @@
lib.skill[i]=mode.skill[i];
}
}
if(mode.card){
for(var i in mode.card){
lib.card[i]=mode.card[i];
}
}
game.finishCards();
if(mode.characterPack){
for(var i in mode.characterPack){
@ -29792,10 +29805,10 @@
},
skill:function(player,content){
if(typeof content=='string'){
lib.skill[content].video(player);
if(lib.skill[content]) lib.skill[content].video(player);
}
else if(Array.isArray(content)){
lib.skill[content[0]].video(player,content[1]);
if(lib.skill[content[0]]) lib.skill[content[0]].video(player,content[1]);
}
else{
console.log(player,content)
@ -48872,16 +48885,17 @@
},
updatec:function(){
if(_status.noupdatec) return;
var length=0;
var length=0,minoffset=-Infinity;
var controls=[];
var widths=[];
var leftwidths=[];
var add=function(node,first){
var thiswidth=parseInt(node.style.width);
if(thiswidth){
thiswidth+=8;
length+=thiswidth;
if(first){
widths.unshift(thiswidth);
leftwidths.push(thiswidth);
}
else{
widths.push(thiswidth);
@ -48890,7 +48904,7 @@
else{
length+=node.offsetWidth;
if(first){
widths.unshift(node.offsetWidth);
leftwidths.push(node.offsetWidth);
}
else{
widths.push(node.offsetWidth);
@ -48903,17 +48917,18 @@
controls.push(node);
}
}
var stayleft=null;
widths=leftwidths.concat(widths);
var staylefts=[];
for(var i=0;i<ui.control.childNodes.length;i++){
if(ui.control.childNodes[i].classList.contains('removing')) continue;
if(!stayleft&&lib.config.wuxie_right&&ui.control.childNodes[i].stayleft){
stayleft=ui.control.childNodes[i];
if(lib.config.wuxie_right&&ui.control.childNodes[i].stayleft){
staylefts.push(ui.control.childNodes[i]);
}
else{
add(ui.control.childNodes[i]);
}
}
if(stayleft){
if(staylefts.length){
var fullwidth=0;
var fullright=(game.layout=='long'||game.layout=='long2'||game.chess||(game.layout!='nova'&&parseInt(ui.arena.dataset.number)<=5));
for(var i=0;i<widths.length;i++){
@ -48921,12 +48936,19 @@
if(get.is.phoneLayout()) fullwidth+=6;
}
fullwidth/=2;
var currentLeft=0;
for(var stayleft of staylefts){
stayleft.currentLeft=currentLeft;
fullwidth+=stayleft.offsetWidth;
currentLeft+=stayleft.offsetWidth;
if(get.is.phoneLayout()){
fullwidth+=18;
currentLeft+=18;
}
else{
fullwidth+=12;
currentLeft+=12;
}
}
if(fullright){
fullwidth+=124;
@ -48937,7 +48959,8 @@
else{
fullwidth+=154;
}
if(game.layout!='default'&&game.layout!='newlayout'&&ui.arena.offsetWidth/2>=fullwidth){
for(var stayleft of staylefts){
if(game.layout!='default'&&game.layout!='newlayout'){
var current_offset=stayleft._offset;
if(fullright){
stayleft._offset=Math.ceil(-ui.arena.offsetWidth/2)+135;
@ -48948,6 +48971,8 @@
else{
stayleft._offset=Math.ceil(-ui.arena.offsetWidth/2)+165;
}
stayleft._offset+=stayleft.currentLeft;
if(current_offset!=stayleft._offset){
stayleft.animate('controlpressdownx',500);
stayleft.style.transform='translateX('+stayleft._offset+'px)';
@ -48957,8 +48982,14 @@
add(stayleft,true);
}
}
if(staylefts.length&&controls.length){
var last=staylefts[staylefts.length-1];
minoffset=last._offset+last.offsetWidth+(get.is.phoneLayout()?18:12);
}
}
if(!controls.length) return;
var offset=-length/2;
if(minoffset>offset) offset=minoffset;
var control=controls.shift();
if(control._offset!=offset){
control.animate('controlpressdownx',500);

View File

@ -1,6 +1,6 @@
window.noname_update={
version:'1.9.110.9.3.3',
update:'1.9.110.9.3.2',
version:'1.9.110.9.3.4',
update:'1.9.110.9.3.3',
changeLog:[
'界鲁肃、孙登、郭皇后、薛综、杜畿技能修改',
'bug修复',

View File

@ -101,7 +101,21 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
lib.playerOL[i].ai.shown=1;
}
},map);
switch(_status.mode){
case 'online':
game.addGlobalSkill('online_juzhong');
game.addGlobalSkill('online_zhadan_button');
game.addGlobalSkill('online_zhadan');
game.addGlobalSkill('online_aozhan');
game.addGlobalSkill('online_gongshoujintui');
break;
case 'binglin':
game.addGlobalSkill('binglin_bingjin');
break;
default:
game.zhu.addSkill('feiyang');
game.zhu.addSkill('bahu');
}
game.syncState();
event.trigger('gameStart');
@ -312,7 +326,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var player of game.players){
var id=player.playerid;
player._group=groups.randomRemove(1)[0];
event.map[id]=chara[player._group].randomGets(3);
event.map[id]=chara[player._group].randomGets(4);
player.storage.doudizhu_cardPile=get.cards(20).sort(function(a,b){
if(a.name!=b.name) return lib.sort.card(a.name,b.name);
else if(a.suit!=b.suit) return lib.suit.indexOf(a)-lib.suit.indexOf(b);
@ -324,6 +338,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.current=event.start;
game.delay(7);
"step 2"
event.current.classList.add('glow_phase');
if(event.current==game.me) event.dialog.content.firstChild.innerHTML='是否叫地主?';
else{
event.dialog.content.firstChild.innerHTML='请等待其他玩家叫地主';
@ -333,6 +348,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return _status.event.getParent().controls.randomGet();
});
"step 3"
event.current.classList.remove('glow_phase');
event.current._control=result.control;
event.current.chat(result.control);
if(result.control=='三倍'){
@ -1769,14 +1785,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
zhu2:"地主",
fan2:"农民",
random2:"随机",
_feiyang:"飞扬",
_bahu:"跋扈",
_feiyang_info:"判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。",
_bahu_info:"锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。",
feiyang:"飞扬",
bahu:"跋扈",
feiyang_info:"判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。",
bahu_info:"锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。",
kaihei:'强易',
kaihei_info:'出牌阶段,你可以获得一名其他角色的至多两张牌,然后交给其等量的牌。每名角色每局游戏限一次。',
doudizhu_cardPile:'底牌',
_gongshoujintui:'攻守进退',
online_gongshoujintui:'攻守进退',
gongshoujianbei:'攻守兼备',
gongshoujianbei_info:'出牌阶段,你可选择:①将此牌当做【万箭齐发】使用。②将此牌当做【桃园结义】使用。',
jintuiziru:'进退自如',
@ -1804,7 +1820,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
baiyidujiang:'白衣渡江',
baiyidujiang_info:'出牌阶段,对地主使用。你选择一项:①令其将手牌数摸至全场最多。②令其将手牌数弃置至全场最少。',
shuiyanqijuny:'水淹七军',
shuiyanqijuny_info:'出牌阶段对至多两名角色使用。目标角色受到1点雷属性伤害然后若其是第一个目标其弃置一张牌不是第一个目标其摸一张牌。',
shuiyanqijuny_info:'此牌不对目标角色进行座次排序。出牌阶段对至多两名角色使用。目标角色受到1点雷属性伤害然后若其是第一个目标其弃置一张牌不是第一个目标其摸一张牌。',
luojingxiashi:'落井下石',
luojingxiashi_info:'出牌阶段对所有其他的已受伤角色使用。目标角色受到1点伤害。',
binglinchengxia:'兵临城下',
@ -1812,7 +1828,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
toushiche:'投石车',
toushiche_skill:'投石车',
toushiche_info:'锁定技,结束阶段开始时,你令所有手牌数大于你的角色依次弃置一张手牌。',
_binglin_bingjin:'兵尽',
binglin_bingjin:'兵尽',
},
element:{
player:{
@ -1869,6 +1885,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
else game.checkResult();
},
dieAfter2:function(){
if(_status.mode=='binglin'||_status.mode=='online'||this.identity!='fan') return;
var player=this,target=game.findPlayer(function(current){
return current!=player&&current.identity=='fan';
});
if(target){
target.showGiveup();
target.chooseDrawRecover(2);
}
},
logAi:function(targets,card){},
showIdentity:function(){
game.broadcastAll(function(player,identity){
@ -1898,7 +1924,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
skill:{
_binglin_bingjin:{
binglin_bingjin:{
trigger:{player:'phaseEnd'},
forced:true,
ruleSkill:true,
@ -2044,7 +2070,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(targets.length) event.redo();
},
},
_gongshoujintui:{
online_gongshoujintui:{
enable:'chooseToUse',
filter:function(event,player){
var cards=player.getCards('hs');
@ -2109,6 +2135,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var name=links[0][2];
var rawname=((name=='wanjian'||name=='taoyuan')?'gongshoujianbei':'jintuiziru');
return {
popname:true,
viewAs:{name:name,isCard:true},
filterCard:{name:rawname},
ai1:()=>1,
@ -2167,15 +2194,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
_feiyang:{
feiyang:{
trigger:{player:'phaseJudgeBegin'},
charlotte:true,
direct:true,
filter:function(event,player){
return _status.mode!='online'&&_status.mode!='binglin'&&player==game.zhu&&player.countCards('j')&&player.countCards('h')>1;
},
content:function(){
"step 0"
player.chooseToDiscard('h',2,'是否发动【飞扬】,弃置两张手牌并弃置自己判定区的一张牌?').set('logSkill','_feiyang').ai=function(card){
player.chooseToDiscard('h',2,'是否发动【飞扬】,弃置两张手牌并弃置自己判定区的一张牌?').set('logSkill','feiyang').ai=function(card){
return 6-get.value(card);
};
"step 1"
@ -2184,8 +2212,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
},
},
_bahu:{
bahu:{
trigger:{player:'phaseZhunbeiBegin'},
charlotte:true,
forced:true,
filter:function(event,player){
return _status.mode!='online'&&_status.mode!='binglin'&&player==game.zhu;
@ -2199,19 +2228,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
_dieAfterDraw:{
trigger:{global:'dieAfter'},
forced:true,
silent:true,
popup:false,
filter:function(event,player){
return _status.mode!='online'&&_status.mode!='binglin'&&event.player.identity==player.identity;
},
content:function(){
player.chooseDrawRecover(2);
player.showGiveup();
},
},
diqi_skill:{
trigger:{player:'damageBegin2'},
filter:function(event,player){
@ -2237,21 +2253,68 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
_juzhong:{
online_aozhan:{
trigger:{player:'phaseBefore'},
forced:true,
popup:false,
firstDo:true,
filter:function(event,player){
return !_status._aozhan&&game.roundNumber>10;
},
content:function(){
var color=get.groupnature(player.group,"raw");
if(player.isUnseen()) color='fire';
player.$fullscreenpop('鏖战模式',color);
game.broadcastAll(function(){
_status._aozhan=true;
ui.aozhan=ui.create.div('.touchinfo.left',ui.window);
ui.aozhan.innerHTML='鏖战模式';
if(ui.time3) ui.time3.style.display='none';
ui.aozhanInfo=ui.create.system('鏖战模式',null,true);
lib.setPopped(ui.aozhanInfo,function(){
var uiintro=ui.create.dialog('hidden');
uiintro.add('鏖战模式');
var list=[
'从第11轮开始游戏将进入鏖战模式。',
'在鏖战模式下,任何角色均不是非转化的【桃】的合法目标。【桃】可以被当做【杀】或【闪】使用或打出。',
];
var intro='<ul style="text-align:left;margin-top:0;width:450px">';
for(var i=0;i<list.length;i++){
intro+='<li>'+list[i];
}
intro+='</ul>'
uiintro.add('<div class="text center">'+intro+'</div>');
var ul=uiintro.querySelector('ul');
if(ul){
ul.style.width='180px';
}
uiintro.add(ui.create.div('.placeholder'));
return uiintro;
},250);
game.playBackgroundMusic();
});
game.removeGlobalSkill('online_aozhan');
game.countPlayer(function(current){current.addSkill('aozhan')});
},
},
online_juzhong:{
trigger:{global:'useCard'},
direct:true,
ruleSkill:true,
filter:function(event,player){
return _status.mode=='online'&&!event.all_excluded&&event.player.isFriendOf(player)&&event.player!=player&&lib.skill._juzhong.infos[event.card.name]&&player.countCards('h')>0;
return _status.mode=='online'&&!event.all_excluded&&event.player.isFriendOf(player)&&event.player!=player&&lib.skill.online_juzhong.infos[event.card.name]&&player.hasCard(function(card){
if(_status.connectMode) return true;
return get.name(card,player)==event.card.name;
},'h');
},
content:function(){
'step 0'
player.chooseToDiscard('是否响应【聚众】?',get.translation(trigger.player)+'使用了'+get.translation(trigger.card)+'。你可弃置一张名称相同的牌,令'+lib.skill._juzhong.infos[trigger.card.name][0],function(card,player){
player.chooseToDiscard('是否响应【聚众】?',get.translation(trigger.player)+'使用了'+get.translation(trigger.card)+'。你可弃置一张名称相同的牌,令'+lib.skill.online_juzhong.infos[trigger.card.name][0],function(card,player){
return get.name(card,player)==_status.event.getTrigger().card.name;
}).set('ai',lib.skill._juzhong.infos[trigger.card.name][2]).logSkill=['_juzhong',trigger.player];
}).set('ai',lib.skill.online_juzhong.infos[trigger.card.name][2]).logSkill=['_juzhong',trigger.player];
'step 1'
if(result.bool){
lib.skill._juzhong.infos[trigger.card.name][1]();
lib.skill.online_juzhong.infos[trigger.card.name][1]();
if(!event.goon) event.finish();
}
else event.finish();
@ -2260,25 +2323,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return target.countDiscardableCards(player,'he')>0;
}).set('ai',function(target){
var player=_status.event.player;
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6*att;
if(target.hp==2) return 0.01*att;
return 0;
}
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5*att;
return -1.5*att;
return get.effect(target,{name:'guohe_copy2'},player,player);
});
'step 3'
if(result.bool){
@ -2345,14 +2390,61 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
onremove:true,
intro:{content:'本回合的伤害值和回复值+#'},
},
_zhadan:{
online_zhadan_button:{
trigger:{
global:'gameDrawAfter',
player:['gainEnd','loseEnd'],
},
firstDo:true,
forced:true,
charlotte:true,
popup:false,
silent:true,
filter:function(event,player){
if(_status.mode!='online'||(player!=game.me&&!player.isOnline())) return;
if(event.name!='lose') return !player.hasZhadan&&player.countCards('hs','zhadan')>0;
return player.hasZhadan&&!player.countCards('hs','zhadan');
},
content:function(){
if(!player.hasZhadan){
player.hasZhadan=true;
if(player==game.me) lib.skill.online_zhadan_button.initZhadan();
else player.send(function(){lib.skill.online_zhadan_button.initZhadan()});
}
else{
delete player.hasZhadan;
if(player==game.me) lib.skill.online_zhadan_button.removeZhadan();
else player.send(function(){lib.skill.online_zhadan_button.removeZhadan()});
}
},
initZhadan:function(){
ui.zhadan_button=ui.create.control('激活炸弹','stayleft',function(){
if(this.classList.contains('hidden')) return;
this.classList.toggle('glow');
if(this.classList.contains('glow')&&_status.event.type=='zhadan'&&
_status.event.isMine()&&ui.confirm&&_status.imchoosing){
ui.click.cancel(ui.confirm.lastChild);
}
});
},
removeZhadan:function(){
if(ui.zhadan_button){
ui.zhadan_button.remove();
delete ui.zhadan_button;
}
},
},
online_zhadan:{
trigger:{player:'useCard'},
priority:5,
popup:false,
forced:true,
filter:function(event,player){
return game.hasPlayer(function(current){
return current.countCards('h','zhadan');
return current.hasCard(function(card){
if(get.name(card)!='zhadan') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
},'hs');
});
},
forceLoad:true,
@ -2370,6 +2462,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(skillState){
player.applySkills(skillState);
}
if(player==game.me&&ui.zhadan_button&&!ui.zhadan_button.classList.contains('glow')){
_status.event._result={bool:false};
if(game.online){
_status.event._resultid=id;
game.resume();
}
return;
}
var str=get.translation(source);
if(targets&&targets.length){
str+='对'+get.translation(targets);
@ -2397,7 +2497,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
source:source,
source2:targets,
id:id,
id2:id2
id2:id2,
type:'zhadan',
});
next.set('respondTo',[source,card]);
@ -2411,10 +2512,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
};
'step 1'
var list=game.filterPlayer(function(current){
return current.countCards('h',function(card){
if(get.name(card)!='zhadan'||get.itemtype(card)!='card') return false;
return current.hasCard(function(card){
if(get.name(card)!='zhadan') return false;
return lib.filter.cardEnabled(card,player,'forceEnable');
});
},'hs');
});
event.list=list;
event.id=get.id();
@ -2436,6 +2537,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(result.bool){
event.zhadanresult=event.current;
event.zhadanresult2=result;
if(event.current!=game.me&&!event.current.isOnline()) game.delayx();
event.goto(8);
}
else{
@ -2508,7 +2610,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
'step 8'
if(event.zhadanresult){
event.zhadanresult.$fullscreenpop('炸弹',get.groupnature(event.zhadanresult))
event.zhadanresult.$fullscreenpop('炸弹',get.groupnature(event.zhadanresult));
var next=event.zhadanresult.useResult(event.zhadanresult2);
next.respondTo=[trigger.player,trigger.card];
game.bonusNum*=2;
@ -2604,6 +2706,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filterTarget:true,
type:'trick',
selectTarget:[1,2],
contentBefore:function(){
event.getParent().fixedSeat=true;
},
content:function(){
target.damage('thunder');
if(num>0) target.draw();

View File

@ -1158,7 +1158,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var evt=_status.event.getParent();
if(get.attitude(evt.target,evt.player)>0) return 1-evt.addIndex;
return evt.addIndex;
});
}).set('prompt','是否对'+str+'发动【连翩】?');
}
'step 1'
if(result.bool){
@ -2413,8 +2413,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.target=target;
var next=target.chooseToDiscard('e',get.prompt('fengyang'),'弃置装备区内的一张牌并摸两张牌').set('ai',function(card){
return 5.5-get.value(card);
}).logSkill='fengyang';
if(player==target) next.setHiddenSkill('qiaobian');
});
next.logSkill='fengyang';
if(player==target) next.setHiddenSkill('fengyang');
}
else event.goto(3);
'step 2'
@ -5784,6 +5785,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
result:{
target:-1,
},
tag:{
discard:1,
lose:1,
loseCard:1,
},
threaten:1.2,
order:3,
},
@ -6879,7 +6885,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
player.chooseTarget(get.prompt('xuanlve'),'弃置一名其他角色的一张牌',function(card,player,target){
return target!=player&&target.countDiscardableCards(player,'he');
}).set('ai',function(target){
return -get.attitude(_status.event.player,target);
var player=_status.event.player;
return get.effect(target,{name:'guohe_copy2'},player,player);
}).setHiddenSkill(event.name);
'step 1'
if(result.bool){
@ -8425,7 +8432,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var source=_status.event.source;
return get.distance(source,target)<=1&&source!=target&&target.countCards('he');
}).set('ai',function(target){
return -get.attitude(_status.event.player,target);
var player=_status.event.player;
return get.effect(target,{name:'guohe_copy2'},player,player);
}).set('source',target);
}
else{