Merge pull request #217 from libccy/PR-Branch

v1.9.125
This commit is contained in:
Spmario233 2023-08-15 23:15:00 +08:00 committed by GitHub
commit ca8d8b885d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
74 changed files with 2769 additions and 1205 deletions

BIN
audio/die/clan_zhonghui.mp3 Normal file

Binary file not shown.

BIN
audio/die/xizheng.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/effect/chickun.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/effect/hitsound.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/effect/pigstep.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/clanxieshu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanxieshu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanyuzhi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/clanyuzhi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcdanyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcdanyi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcwencan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcwencan2.mp3 Normal file

Binary file not shown.

Binary file not shown.

View File

@ -399,7 +399,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
value:function(card,player,index,method){
if(player.isDisabled(2)) return 0.01;
if(card==player.getEquip(2)){
if(player.getEquips('tengjia').contains(card)){
if(player.hasSkillTag('noDirectDamage')) return 10;
if(game.hasPlayer(function(current){
return current!=player&&get.attitude(current,player)<0&&current.hasSkillTag('fireAttack',null,null,true);
@ -555,7 +555,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
cards.splice(i--,1);
}
}
var muniu=player.getEquip(5);
var muniu=player.getEquip('muniu');
if(!muniu||!cards.length){
for(var i=0;i<cards.length;i++){
cards[i].discard();
@ -570,8 +570,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},muniu,muniu.cards);
game.delayx();
"step 2"
var muniu=player.getEquip('muniu');
var players=game.filterPlayer(function(current){
if(!current.getEquip(5)&&current!=player&&!current.isTurnedOver()&&
if(current.canEquip(muniu)&&current!=player&&!current.isTurnedOver()&&
get.attitude(player,current)>=3&&get.attitude(current,player)>=3){
return true;
}
@ -579,15 +580,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
players.sort(lib.sort.seat);
var choice=players[0];
var next=player.chooseTarget('是否移动木牛流马?',function(card,player,target){
return !target.isMin()&&player!=target&&target.isEmpty(5);
});
return !target.isMin()&&player!=target&&target.canEquip(_status.event.muniu);
}).set('muniu',muniu)
next.set('ai',function(target){
return target==_status.event.choice?1:-1;
});
next.set('choice',choice);
"step 3"
if(result.bool){
var card=player.getEquip(5);
var card=player.getEquip('muniu');
result.targets[0].equip(card);
player.$give(card,result.targets[0]);
player.line(result.targets,'green');
@ -618,7 +619,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
mark:true,
intro:{
content:function(storage,player){
var muniu=player.getEquip(5);
var muniu=player.getEquip('muniu');
if(!muniu||!muniu.cards||!muniu.cards.length) return '共有〇张牌';
if(player.isUnderControl(true)){
return get.translation(muniu.cards);
@ -628,7 +629,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
},
mark:function(dialog,storage,player){
var muniu=player.getEquip(5);
var muniu=player.getEquip('muniu');
if(!muniu||!muniu.cards||!muniu.cards.length) return '共有〇张牌';
if(player.isUnderControl(true)){
dialog.addAuto(muniu.cards);
@ -638,7 +639,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
},
markcount:function(storage,player){
var muniu=player.getEquip(5);
var muniu=player.getEquip('muniu');
if(muniu&&muniu.cards) return muniu.cards.length;
return 0;
}
@ -658,7 +659,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}).length>0;
},
content:function(){
var muniu=player.getEquip(5);
var muniu=player.getEquip('muniu');
if(muniu&&muniu.cards){
muniu.cards.removeArray(trigger.ss);
lib.skill.muniu_skill.sync(muniu);
@ -787,7 +788,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
//if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget';
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
if(card.name=='sha'){
var equip1=player.getEquip(1);
var equip1=player.getEquip('zhuque');
if(equip1&&equip1.name=='zhuque') return 1.9;
if(!card.nature) return 'zerotarget';
}

View File

@ -264,17 +264,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip6',
subtypes:['equip3','equip4'],
nomod:true,
nopower:true,
unique:true,
//unique:true,
distance:{
globalFrom:-1,
globalTo:+1,
},
customSwap:function(card){
var type=get.subtype(card,false);
return type=='equip3'||type=='equip4'||type=='equip6';
},
skills:['liulongcanjia'],
ai:{
equipValue:function(card,player){
@ -833,8 +830,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
subtype:"equip2",
skills:['huxinjing'],
filterTarget:function(card,player,target){
if(get.mode()!='guozhan') return true;
return player==target;
if(get.mode()=='guozhan'&&player!=target) return false;
return target.canEquip(card,true);
},
selectTarget:function(){
return get.mode()=='guozhan'?-1:1;
@ -1221,8 +1218,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
liulongcanjia:{
equipSkill:true,
mod:{
targetEnabled:function(card,player,target){
if(['equip3','equip4'].contains(get.subtype(card))) return false;
canBeReplaced:function(card,player){
return false;
},
},
},
@ -1282,7 +1279,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return [1,player.maxHp];
},
filterCard:function(card,player){
return card!=player.getEquip(5);
var cards=player.getEquips('dinglanyemingzhu');
if(cards.length) return cards.some(card2=>card2!=card&&!ui.selected.cards.contains(card2))
return true;
},
prompt:'出牌阶段限一次你可以弃置至多X张牌X为你的体力上限然后摸等量的牌'
},
@ -1729,13 +1728,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
target:player,
card:event.card
})) return false;
var cards=player.getEquips('huxinjing');
if(!cards.length) return false;
if(get.mode()!='guozhan'&&event.num>1) return true;
return event.num>=player.hp;
},
content:function(){
trigger.cancel();
var e2=player.getEquip('huxinjing');
if(e2){
var e2=player.getEquips('huxinjing');
if(e2.length){
player.discard(e2);
}
player.removeSkill('huxinjing');
@ -1799,7 +1800,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
translate:{
liulongcanjia:'六龙骖驾',
liulongcanjia_info:'锁定技。你计算与其他角色的距离-1其他角色计算与你的距离+1。②当此牌进入你的装备区时,你弃置你装备区内其他坐骑牌。③你的装备区内不能置入其他坐骑牌。',
liulongcanjia_info:'锁定技。此牌占用1个进攻坐骑和1个防御坐骑槽位且不可被替换。你计算与其他角色的距离-1其他角色计算与你的距离+1。',
minguangkai:'明光铠',
minguangkai_cancel:'明光铠',
minguangkai_link:'明光铠',
@ -1862,8 +1863,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
jingfanma_info:'你的进攻距离+1',
huxinjing_bg:'镜',
huxinjing:'护心镜',
huxinjing_info:'此牌可对其他角色使用。当你受到伤害时若伤害值大于1或大于等于你的体力值则你可以将【护心镜】置入弃牌堆,然后防止此伤害。',
huxinjing_info_guozhan:'当你受到伤害时,若伤害值大于等于你的体力值,则你可以将【护心镜】置入弃牌堆,然后防止此伤害。',
huxinjing_info:'此牌可对其他角色使用。当你受到伤害时若伤害值大于1或大于等于你的体力值则你可以将所有【护心镜】置入弃牌堆,然后防止此伤害。',
huxinjing_info_guozhan:'当你受到伤害时,若伤害值大于等于你的体力值,则你可以将所有【护心镜】置入弃牌堆,然后防止此伤害。',
gz_haolingtianxia:'号令天下',
gz_haolingtianxia_info:'出牌阶段,对一名体力值不为全场最少的角色使用。所有其他角色依次选择一项:①弃置一张牌(魏势力角色无需弃牌),视为对目标角色使用一张【杀】;②弃置目标角色的一张牌(魏势力角色改为获得其一张牌)。',
gz_kefuzhongyuan:'克复中原',

View File

@ -47,7 +47,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
enable:true,
filterTarget:function(card,player,target){
if(target==player) return false;
if(target.getEquip(5)){
if(target.getEquips(5).length){
return target.countCards('e')>1;
}
else{
@ -467,11 +467,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageBegin4'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&player.getEquip('lanyinjia');
return event.card&&event.card.name=='sha'&&player.getEquips('lanyinjia').length>0;
},
content:function(){
var card=player.getEquip('lanyinjia');
if(card){
var card=player.getEquips('lanyinjia');
if(card.length){
player.discard(card);
}
},

View File

@ -1588,7 +1588,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
multicheck:function(){
var card={name:'sha',isCard:true};
return game.hasPlayer(function(current){
if(current.getEquip(1)){
if(current.getEquips(1).length>0){
return game.hasPlayer(function(current2){
return current.inRange(current2)&&lib.filter.targetEnabled(card,current,current2);
})
@ -1597,7 +1597,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
var card={name:'sha',isCard:true};
return player!=target&&target.getEquip(1)&&game.hasPlayer(function(current){
return player!=target&&target.getEquips(1).length>0&&game.hasPlayer(function(current){
return target!=current&&target.inRange(current)&&lib.filter.targetEnabled(card,target,current);
});
},
@ -1621,7 +1621,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
"step 1"
if(event.directfalse||result.bool==false){
var cards=target.getCards('e',{subtype:'equip1'});
var cards=target.getEquips(1);
if(cards.length) player.gain(cards,target,'give','bySelf');
}
},
@ -2043,17 +2043,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
mod:{
cardUsable:function(card,player,num){
var cardx=player.getEquip('zhuge');
if(card.name=='sha'&&(!cardx||player.hasSkill('zhuge_skill',null,false)||(!_status.zhuge_temp&&!ui.selected.cards.contains(cardx)))){
var cards=player.getEquips('zhuge')
if(card.name=='sha'){
if(!cards.length||player.hasSkill('zhuge_skill',null,false)||cards.some(card=>(card!=_status.zhuge_temp&&!ui.selected.cards.contains(card)))){
if(get.is.versus()||get.is.changban()){
return num+3;
}
return Infinity;
}
}
},
cardEnabled2:function(card,player){
if(!_status.event.addCount_extra||player.hasSkill('zhuge_skill',null,false)) return;
if(card&&card==player.getEquip('zhuge')){
var cards=player.getEquips('zhuge');
if(card&&cards.contains(card)){
try{
var cardz=get.card();
}
@ -2061,7 +2064,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return;
}
if(!cardz||cardz.name!='sha') return;
_status.zhuge_temp=true;
_status.zhuge_temp=card;
var bool=lib.filter.cardUsable(get.autoViewAs({name:'sha'},ui.selected.cards.concat([card])),player);
delete _status.zhuge_temp;
if(!bool) return false;
@ -2158,7 +2161,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
"step 0"
player.chooseToUse(get.prompt('qinglong',trigger.target),function(card,player,event){
if(get.name(card)!='sha') return false;
if(player.getEquip('qinglong')==card) return false;
if(!player.hasSkill('qinglong_skill',null,false)){
var cards=player.getEquips('qinglong');
if(!cards.some(card2=>card2!=card&&!ui.selected.cards.contains(card2))) return false;
}
return lib.filter.filterCard.apply(this,arguments);
},trigger.target,-1).set('addCount',false).logSkill='qinglong_skill';
}
@ -2195,16 +2201,20 @@ game.import('card',function(lib,game,ui,get,ai,_status){
direct:true,
audio:true,
filter:function(event,player){
if(event.type!='card'||event.card.name!='sha') return false;
return player.countCards('he',function(card){
return card!=player.getEquip('guanshi');
})>=2&&event.target.isAlive();
if(event.type!='card'||event.card.name!='sha'||!event.target.isIn()) return false;
var min=2;
if(!player.hasSkill('guanshi_skill',null,false)) min+=get.sgn(player.getEquips('guanshi').length)
return player.countCards('he')>=min;
},
content:function(){
"step 0"
var next=player.chooseToDiscard(get.prompt('guanshi'),2,'he',function(card){
return _status.event.player.getEquip('guanshi')!=card;
});
//装备区内可能有多个贯石斧 或者玩家可能通过其他渠道获得贯石斧技能 只要留一张贯石斧不扔掉即可
var next=player.chooseToDiscard(get.prompt('guanshi'),2,'he',function(card,player){
if(_status.event.ignoreCard) return true;
var cards=player.getEquips('guanshi');
if(!cards.contains(card)) return true;
return cards.some(cardx=>(cardx!=card&&!ui.selected.cards.contains(cardx)));
}).set('ignoreCard',player.hasSkill('guanshi_skill',null,false)).set('complexCard',true)
next.logSkill='guanshi_skill';
next.set('ai',function(card){
var evt=_status.event.getTrigger();
@ -3244,7 +3254,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。',
lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。',
shandian_info:'出牌阶段对自己使用。若判定结果为黑桃2~9则目标角色受到3点雷电伤害。若判定不为黑桃2~9将之移动到下家的判定区里。',
icesha_skill:'冰',
icesha_skill:'冰',
icesha_skill_info:'防止即将造成的伤害,改为依次弃置其两张牌。',
qinggang2:'破防',
},

View File

@ -161,7 +161,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
order:9,
value:function(card,player){
if(player.getEquip(1)==card) return 0;
if(player.getEquips(1).contains(card)) return 0;
return 4;
},
equipValue:function(card,player){
@ -195,7 +195,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 2;
},
value:function(card,player){
if(player.getEquip(1)==card) return -3;
if(player.getEquips(1).contains(card)) return -3;
return 3;
},
basic:{
@ -229,7 +229,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 2;
},
value:function(card,player){
if(player.getEquip(2)==card) return -3;
if(player.getEquips(2).contains(card)) return -3;
return 3;
},
basic:{
@ -263,7 +263,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 1;
},
value:function(card,player){
if(player.getEquip(2)==card) return -2.5;
if(player.getEquips(2).contains(card)) return -2.5;
return 2.5;
},
basic:{
@ -297,7 +297,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
order:9,
equipValue:0,
value:function(card,player){
if(player.getEquip(2)==card) return 0;
if(player.getEquips(2).contains(card)) return 0;
return 0.5;
},
basic:{
@ -706,7 +706,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
yonglv_info:'锁定技。其他角色至你的距离视为1。',
yonglv_append:'<span class="text" style="font-family: yuanli">它旁边的就是王仲宣。</span>',
zhanxiang:'战象',
zhanxiang_info:'锁定技。当你成为〖赠予〗的目标后,你将此次赠予的效果改为“将赠予牌移动至弃牌堆”。',
zhanxiang_info:'锁定技。①其他角色至你的距离+1。②当你成为〖赠予〗的目标后,你将此次赠予的效果改为“将赠予牌移动至弃牌堆”。',
xinge:'信鸽',
xinge_info:'出牌阶段限一次。你可以将一张手牌交给一名其他角色。',
xinge_append:'<span class="text" style="font-family: yuanli">咕咕咕。</span>',

View File

@ -81,7 +81,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var equips=[];
for(var i=0;i<event.dialog.buttons.length;i++){
var card=event.dialog.buttons[i].link;
if(!target.isDisabled(get.subtype(card))) equips.push(card);
if(target.canEquip(card,true)) equips.push(card);
}
if(equips.length>1){
var next=target.chooseButton(true,function(button){
@ -281,7 +281,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
result:{
target:function(player,target){
var e5=target.getEquip(5);
var e5=target.getEquip('muniu');
if(e5&&e5.name=='muniu'&&e5.cards&&e5.cards.length>1) return -1;
if(target.countCards('e',function(card){
return get.value(card,target)<=0;
@ -322,7 +322,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip4',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
loseThrow:true,
@ -332,7 +335,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
order:9,
value:function(card,player){
if(player.getEquip(4)==card) return 0;
if(player.getEquips(4).contains(card)) return 0;
return 4;
},
equipValue:function(card,player){
@ -380,7 +383,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip1',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
skills:['wufengjian_skill'],
@ -391,7 +397,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 2;
},
value:function(card,player){
if(player.getEquip(1)==card) return -1.5;
if(player.getEquips(1).contains(card)) return -1.5;
return 1.5;
},
basic:{
@ -416,7 +422,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip1',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
distance:{attackFrom:1},
@ -427,7 +436,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 2;
},
value:function(card,player){
if(player.getEquip(1)==card) return -3;
if(player.getEquips(1).contains(card)) return -3;
return 3;
},
basic:{
@ -452,7 +461,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip2',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
skills:['yinfengjia_skill'],
@ -463,7 +475,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 1;
},
value:function(card,player){
if(player.getEquip(2)==card) return -2.5;
if(player.getEquips(2).contains(card)) return -2.5;
return 2.5;
},
basic:{
@ -488,7 +500,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip2',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
loseDelay:false,
@ -517,7 +532,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
order:9.5,
equipValue:function(card,player){
if(card==player.getEquip(2)){
if(player.getEquips(2).contains(card)){
if(player.sex!='male') return 0;
var num=player.countCards('he',function(cardx){
return cardx!=card;
@ -575,7 +590,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
fullskin:true,
type:'equip',
subtype:'equip5',
filterTarget:lib.filter.notMe,
filterTarget:function(card,player,target){
if(player==target) return false;
return target.canEquip(card,true)
},
selectTarget:1,
toself:false,
skills:['jinhe_skill'],
@ -630,7 +648,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
order:9.5,
equipValue:function(card,player){
if(card!=player.getEquip(5)) return 5;
if(!player.getEquips(5).contains(card)) return 5;
if(_status.jinhe&&_status.jinhe[card.cardid]&&_status.event.name!='gainPlayerCard') return 3*player.countCards('h');
return 0;
},
@ -712,11 +730,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
filter:function(event,player){
if(!_status.jinhe) return false;
var card=player.getEquip(5);
var card=player.getEquip('jinhe');
return card&&card.name=='jinhe'&&_status.jinhe[card.cardid]!=undefined;
},
prepare:function(cards,player){
var card=player.getEquip(5);
var card=player.getEquip('jinhe');
if(card&&card.name=='jinhe'&&_status.jinhe[card.cardid]){
var tothrow=_status.jinhe[card.cardid].card;
player.$throw(tothrow);
@ -725,7 +743,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
content:function(){
"step 0"
var card=player.getEquip(5);
var card=player.getEquip('jinhe');
if(card&&card.name=='jinhe'&&_status.jinhe[card.cardid]){
game.cardsDiscard(_status.jinhe[card.cardid].card);
event.suit=get.suit(_status.jinhe[card.cardid].card);
@ -748,7 +766,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
order:1,
result:{
player:function(player){
var suit=get.suit(_status.jinhe[player.getEquip(5).cardid].card);
var suit=get.suit(_status.jinhe[player.getEquip('jinhe').cardid].card);
var hs=player.getCards('h',function(card){
return get.suit(card)==suit;
});
@ -791,16 +809,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(event.card.name!='sha') return false;
var card=player.getEquip('wufengjian');
return player.countCards('he',function(cardx){
return cardx!=card;
})>0;
var cards=player.getEquips('wufengjian');
return player.hasCard(function(card){
return !cards.contains(card);
},'he');
},
content:function(){
if(player!=game.me&&!player.isUnderControl()&&!player.isOnline()) game.delayx();
player.chooseToDiscard(true,'he',function(card){
return card!=_status.event.card;
}).set('card',player.getEquip('wufengjian'));
return !_status.event.cards.contains(card);
}).set('cards',player.getEquips('wufengjian'));
},
},
yajiaoqiang_skill:{

View File

@ -17,17 +17,251 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clan_wangling:['male','wei',4,['clanbolong','clanzhongliu'],['clan:太原王氏']],
clan_zhongyan:['female','jin',3,['clanguangu','clanxiaoyong','clanbaozu'],['clan:颍川钟氏']],
clan_wangyun:['male','qun',3,['clanjiexuan','clanmingjie','clanzhongliu'],['clan:太原王氏']],
clan_wanghun:['male','jin',3,['clanfuxun','clanchenya','clanzhongliu'],['clan:太原王氏']],
clan_zhonghui:['male','wei','3/4',['clanyuzhi','clanxieshu','clanbaozu'],['clan:颍川钟氏']],
},
characterSort:{
clan:{
clan_wu:['clan_wuxian','clan_wuban','clan_wukuang'],
clan_xun:['clan_xunshu','clan_xunchen','clan_xuncai','clan_xuncan'],
clan_han:['clan_hanshao','clan_hanrong'],
clan_wang:['clan_wangling','clan_wangyun'],
clan_zhong:['clan_zhongyan'],
clan_wang:['clan_wangling','clan_wangyun','clan_wanghun'],
clan_zhong:['clan_zhongyan','clan_zhonghui'],
},
},
skill:{
//族钟会
clanyuzhi:{
mod:{
aiOrder:function(player,card,num){
if(card.name=='tao') return num/114514;
},
},
audio:2,
trigger:{global:'roundStart'},
direct:true,
locked:true,
content:function(){
'step 0'
var num1=0,num2=0,num3=0,bool=true;
var history=player.actionHistory;
for(var i=history.length-2;i>=0;i--){
for(var evt of history[i].gain){
if(evt.getParent().name=='draw'&&evt.getParent(2).name=='clanyuzhi'){
if(bool) num1+=evt.cards.length;
else num2+=evt.cards.length;
}
}
if(bool) num3+=history[i].useCard.length;
if(history[i].isRound){
if(bool) bool=false;
else break;
}
}
event.num1=num1;
if(num1>0&&(num2>0&&num1>num2)||num1>num3){
player.logSkill('clanyuzhi');
if(num2>0&&num1>num2) game.log(player,'的野心已开始膨胀','#y('+num1+'张>'+num2+'张)');
if(num1>num3) game.log(player,'的行动未达到野心','#y('+num3+'张<'+num1+'张)');
if(player.hasSkill('clanbaozu',null,false,false)) player.chooseBool('迂志:是否失去〖保族〗?','若选择“否”则你失去1点体力').set('choice',player.awakenedSkills.contains('clanbaozu'));
else event._result={bool:false};
}
else event.goto(2);
'step 1'
if(result.bool){
player.removeSkill('clanbaozu');
player.popup('保族');
game.log(player,'失去了技能','#g【保族】');
}
else player.loseHp();
'step 2'
if(!player.countCards('h')) event.finish();
'step 3'
player.chooseCard('迂志:请展示一张手牌','摸此牌牌名字数的牌。下一轮开始时若本轮你使用的牌数或上一轮你以此法摸的牌数小于此牌牌名字数则你失去1点体力。',true,function(card,player){
var num=lib.skill.dcweidang.getLength(card);
return typeof num=='number'&&num>0;
}).set('ai',function(card){
if(_status.event.dying&&_status.event.num>0&&lib.skill.dcweidang.getLength(card)>_status.event.num) return 1/lib.skill.dcweidang.getLength(card);//怂
return lib.skill.dcweidang.getLength(card);//勇
}).set('dying',player.hp+player.countCards('hs',{name:['tao','jiu']})<1).set('num',event.num1);
'step 4'
if(result.bool){
player.logSkill('clanyuzhi');
player.showCards(result.cards,get.translation(player)+'发动了【迂志】');
player.draw(lib.skill.dcweidang.getLength(result.cards[0]));
player.storage.clanyuzhi=lib.skill.dcweidang.getLength(result.cards[0]);
player.markSkill('clanyuzhi');
}
else player.unmarkSkill('clanyuzhi');
},
ai:{
threaten:3,
nokeep:true,
},
onremove:true,
intro:{content:'本轮野心:#张'},
},
clanxieshu:{
audio:2,
trigger:{player:'damageEnd',source:'damageSource'},
filter:function(event,player){
if(!event.card) return false;
var num=lib.skill.dcweidang.getLength(event.card);
return typeof num=='number'&&num>0&&player.countCards('he');
},
direct:true,
content:function(){
'step 0'
var num=lib.skill.dcweidang.getLength(trigger.card),str='';
if(player.getDamagedHp()>0) str+=('并摸'+get.cnNumber(player.getDamagedHp())+'张牌');
player.chooseToDiscard(get.prompt('clanxieshu'),'弃置'+get.cnNumber(num)+'张牌'+str,'he',num).set('ai',function(card){
var player=_status.event.player;
var num=_status.event.num;
var num2=player.getDamagedHp();
if(num>num2) return 7-get.value(card);
if(num==num2) return lib.skill.zhiheng.check(card);
return 0;
}).set('num',num).logSkill='clanxieshu';
'step 1'
if(result.bool&&player.getDamagedHp()>0) player.draw(player.getDamagedHp());
},
ai:{threaten:3},
},
//族王浑
clanfuxun:{
audio:2,
enable:'phaseUse',
usable:1,
filterCard:true,
position:'h',
discard:false,
lose:false,
delay:false,
selectCard:function(){
var player=_status.event.player;
if(ui.selected.targets.length&&!ui.selected.targets[0].countGainableCards(player,'h')) return 1;
return [0,1];
},
filterTarget:function(card,player,target){
if(player==target) return false;
if(!ui.selected.cards.length) return target.countGainableCards(player,'h')>0;
return true;
},
content:function(){
'step 0'
if(cards.length){
player.give(cards,target);
}
else{
player.gainPlayerCard(target,'h',true);
}
'step 1'
var evtx=event.getParent('phaseUse');
if(player.countCards('h')==target.countCards('h')&&evtx&&!target.hasHistory('lose',evt=>{
return evt.getParent(3).name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards2.length;
})&&!target.hasHistory('gain',evt=>{
return evt.getParent().name!='clanfuxun'&&evt.getParent('phaseUse')==evtx&&evt.cards.length;
})&&player.countCards('he')){
var list=[];
for(var name of lib.inpile){
if(get.type(name)!='basic') continue;
if(player.hasUseTarget({name:name})) list.push(['基本','',name]);
if(name=='sha'){
for(var nature of lib.inpile_nature){
if(player.hasUseTarget({name:name,nature:nature})) list.push(['基本','',name,nature]);
}
}
}
if(list.length){
player.chooseButton(['是否将一张牌当做一种基本牌使用?',[list,'vcard']]).set('ai',button=>{
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
});
}
else event.finish();
}
else event.finish();
'step 2'
if(result.bool){
var card={
name:result.links[0][2],
nature:result.links[0][3]
};
game.broadcastAll(function(card){
lib.skill.clanfuxun_backup.viewAs=card;
},card);
var next=player.chooseToUse();
next.set('openskilldialog','将一张牌当做'+get.translation(card)+'使用');
next.set('norestore',true);
next.set('addCount',false);
next.set('_backupevent','clanfuxun_backup');
next.set('custom',{
add:{},
replace:{window:function(){}}
});
next.backup('clanfuxun_backup');
}
},
ai:{
order:2,
result:{
target:-1,
},
},
subSkill:{
backup:{
filterCard:function(card){
return get.itemtype(card)=='card';
},
position:'hes',
filterTarget:lib.filter.targetEnabled,
selectCard:1,
check:(card)=>6-get.value(card),
log:false,
precontent:function(){
delete event.result.skill;
},
},
}
},
clanchenya:{
audio:2,
trigger:{
global:['useSkillAfter','logSkill'],
},
filter:function(event,player){
if(event.type!='player') return false;
var skill=event.sourceSkill||event.skill;
var info=get.info(skill);
if(info.charlotte) return false;
var translation=lib.translate[skill+'_info'];
if(translation&&!(/(?<!“)出牌阶段限一次/.test(translation))) return false;
return event.player.countCards('h')>0;
},
check:function(event,player){
return get.attitude(player,event.player)>0;
},
logTarget:'player',
content:function(){
'step 0'
var num=trigger.player.countCards('h');
trigger.player.chooseCard('是否重铸任意张牌名字数为'+num+'的牌?',[1,Infinity],'he',(card,player,target)=>{
if(!_status.event.cards.contains(card)) return false;
var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
return mod=='unchanged';
}).set('ai',card=>{
var val=get.value(card);
return 6-val;
}).set('cards',trigger.player.getCards('he',card=>{
return lib.skill.dcweidang.getLength(card)==num;
}));
'step 1'
if(result.bool){
var cards=result.cards;
trigger.player.loseToDiscardpile(cards);
trigger.player.draw(cards.length);
}
}
},
//族王允
clanjiexuan:{
audio:2,
@ -435,7 +669,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
prompt:function(result){
if(result.index) return '点击“确定”以观看牌堆顶牌';
if(result.index>0) return '点击“确定”以观看牌堆顶牌';
return '观骨:选择观看牌的目标';
},
},
@ -508,16 +742,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
clanbaozu:{
audio:2,
audioname:['clan_zhongyan'],
trigger:{
gloabl:'dying',
},
audioname:['clan_zhongyan','clan_zhonghui'],
trigger:{global:'dying'},
clanSkill:true,
limited:true,
skillAnimation:true,
animationColor:'water',
filter:function(event,player){
return event.player.hasClan('颍川钟氏')&&event.player.hp<=0&&!event.player.isLinked();
return (event.player==player||event.player.hasClan('颍川钟氏'))&&event.player.hp<=0&&!event.player.isLinked();
},
logTarget:'player',
check:function(event,player){
@ -536,9 +768,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
player.awakenSkill('clanbaozu');
'step 1'
trigger.player.link(true);
trigger.player.recover();
}
},
},
//族王凌
clanbolong:{
@ -600,7 +834,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
clanzhongliu:{
audio:2,
audioname:['clan_wangling','clan_wangyun'],
audioname:['clan_wangling','clan_wangyun','clan_wanghun'],
trigger:{player:'useCard'},
forced:true,
clanSkill:true,
@ -1564,7 +1798,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
enable:'phaseUse',
filter:function(event,player){
return !player.storage._disableJudge||player.countCards('h',card=>['sha','shan'].contains(get.name(card)))>0;
return !player.isDisabledJudge()||player.countCards('h',card=>['sha','shan'].contains(get.name(card)))>0;
},
chooseButton:{
dialog:function(event,player){
@ -1574,7 +1808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(button,player){
var link=button.link;
if(link=='damage') return !player.storage._disableJudge;
if(link=='damage') return !player.isDisabledJudge();
var num=player.countCards('h',link);
return num>0&&num==player.getDiscardableCards(player,'h').filter(i=>get.name(i)==link).length;
},
@ -1611,7 +1845,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
order:function(item,player){
if(!player) return;
var eff=get.damageEffect(player,player,player,'fire'),disabled=!player.storage._disableJudge;
var eff=get.damageEffect(player,player,player,'fire'),disabled=!player.isDisabledJudge();
if((player.countCards('h','sha')==1||player.countCards('h','shan')==1)&&eff<0&&!disabled) return 8;
else if(eff>=0&&!disabled) return 5.8;
if(!disabled&&!player.countCards('h',card=>['sha','shan'].contains(get.name(card)))){
@ -1639,7 +1873,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.choice=choice;
if(choice=='damage'){
player.damage('fire');
if(!player.storage._disableJudge) player.disableJudge();
if(!player.isDisabledJudge()) player.disableJudge();
}else{
var cards=player.getCards('h',choice);
if(cards.length) player.discard(cards);
@ -1669,7 +1903,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ok=false;
}
if(ind==0){
if(target.storage._disableJudge) ok=false;
if(target.isDisabledJudge()) ok=false;
}
else if(ind>0){
var name=ind==1?'shan':'sha';
@ -1695,7 +1929,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} else event.finish();
'step 3'
if(result.control=='选项一'){
if(!target.storage._disableJudge) target.disableJudge();
if(!target.isDisabledJudge()) target.disableJudge();
target.damage('fire');
}
else{
@ -2058,6 +2292,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hanshao:'韩韶生卒年不详字仲黄颍川舞阳今河南省漯河市东汉桓帝时出仕。任郡吏有政绩继而被征入司徒府。他公正廉明尽心民事视民苦如在己身政绩卓著。汉永寿二年公元156年泰山贼公孙举率流寇数千骚扰嬴县守令因不能拒敌安民多受制裁朝廷命尚书府从三府司徒、司马、司空属员中选择能治理民事又能拒寇入侵的官员前往镇守。韩韶被封为“嬴长”到嬴县上任他是莱芜历史上唯一的一位“嬴长”。',
hanrong:'韩融127年196年字元长颍川舞阳今属河南省漯河市人。赢长韩韶子献帝时大臣。中平五年188年融与荀爽、陈纪等十四人并博士征不至。董卓废立融等复俱公车征。初平元年190年六月融为大鸿胪奉命与执金吾胡母班等出使关东。献帝东迁为李傕、郭汜等所败融为太仆奉命至弘农与傕、汜连和使其放遣公卿百官及宫女妇人。',
wukuang:'吴匡生卒年不详兖州陈留今河南开封市人。东汉末年大臣大将军何进部将。光熹元年公元189年汉灵帝死后十常侍干预朝政大将军何进谋诛宦官但失败被杀吴匡联合曹操、袁绍等杀尽宦官攻杀车骑将军何苗。兴平二年公元195年十月李傕、郭汜后悔放汉献帝东归洛阳于是联合起来追击曹操遂起兵平乱但在回朝后曹操挟天子以令诸侯实行专权但遭到吴匡反对。',
wanghun:'王浑223年297年字玄冲太原郡晋阳县今山西省太原市人。魏晋时期名臣曹魏司空王昶的儿子。王浑早年为大将军曹爽的掾吏高平陵政变后循例免官出任怀县县令、散骑侍郎等职袭封京陵县侯。西晋王朝建立后加号扬烈将军历任征虏将军、东中郎将、豫州刺史等职积极筹划伐吴方略。咸宁五年279年配合镇南将军杜预灭亡吴国迁征东大将军、左仆射、司徒公晋爵京陵县公。晋惠帝司马衷即位加任侍中衔。楚王司马玮发动政变有意寻求支持遭到严词拒绝。楚王司马玮死后复任司徒、录尚书事。元康七年297年王浑去世享年七十五岁谥号为元。《唐会要》尊为“魏晋八君子”之一。',
},
dynamicTranslate:{
clanlianzhu:function(player){
@ -2139,6 +2374,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
clanjiexuan_info:'限定技,转换技。阴:你可以将一张红色牌当【顺手牵羊】使用;阳:你可以将一张黑色牌当【过河拆桥】使用。',
clanmingjie:'铭戒',
clanmingjie_info:'限定技。出牌阶段,你可以选择一名角色,然后直到其下回合结束时,当你使用牌时你可以指定其为额外目标。然后其下回合结束时,你可以使用本回合使用过的黑桃牌和被抵消过的牌。',
clan_wanghun:'族王浑',
clanfuxun:'抚循',
clanfuxun_info:'出牌阶段限一次。你可以获得或交给一名其他角色一张手牌,然后若其手牌数与你相等且于此阶段仅以此法获得或失去过牌,你可以将一张牌当任意基本牌使用。',
clanchenya:'沉雅',
clanchenya_info:'当一名角色发动“出牌阶段限一次”的技能后你可以令其重铸任意张牌名字数为X的牌X为其手牌数。',
clan_zhonghui:'族钟会',
clanyuzhi:'迂志',
clanyuzhi_info:'锁定技。新的一轮开始时你依次执行以下项①若你上一轮使用的牌数或你上上轮因〖迂志〗摸的牌数小于你上轮因〖迂志〗摸的牌数你失去1点体力或失去〖保族〗。②你展示一张手牌然后摸X张牌X为此牌牌名字数。',
clanxieshu:'挟术',
clanxieshu_info:'当你使用牌造成伤害后或受到来自牌造成的伤害后你可以弃置Y张牌并摸你已损失体力值张牌Y为此牌牌名字数。',
clan_wu:'陈留·吴氏',
clan_xun:'颍川·荀氏',

View File

@ -718,53 +718,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&!player.isDisabled(1);
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1)&&!player.getEquips('ruyijingubang').length;
},
content:function(){
var card=game.createCard2('ruyijingubang','heart',9);
player.$gain2(card,false);
game.delayx();
player.equip(card);
},
mod:{
canBeGained:function(card,source,player){
if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false;
if(player.getEquips('ruyijingubang').contains(card)) return false;
},
canBeDiscarded:function(card,source,player){
if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false;
if(player.getEquips('ruyijingubang').contains(card)) return false;
},
canBeReplaced:function(card,player){
if(player.getEquips('ruyijingubang').contains(card)) return false;
},
cardname:function(card){
if(get.subtype(card,false)=='equip1') return 'sha';
},
cardnature:function(card){
if(get.subtype(card,false)=='equip1') return false;
},
targetEnabled:function(card){
if(get.subtype(card)=='equip1') return false;
if(get.subtypes(card,false).contains('equip1')) return false;
},
cardDiscardable:function(card,player){
if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false;
if(player.getEquips('ruyijingubang').contains(card)) return false;
},
cardEnabled2:function(card,player){
if(card==player.getEquip(1)&&card.name=='ruyijingubang') return false;
if(player.getEquips('ruyijingubang').contains(card)) return false;
},
},
group:'dcruyi_blocker',
subSkill:{
blocker:{
trigger:{player:['loseBefore','equipBefore','disableEquipBefore']},
trigger:{player:['loseBefore','disableEquipBefore']},
forced:true,
filter:function(event,player){
if(event.name=='disableEquip') return (event.pos=='equip1');
var card=player.getEquip(1);
if(!card||card.name!='ruyijingubang') return false;
if(event.name=='equip'){
return get.subtype(event.card)=='equip1';
}
return event.cards.contains(card);
if(event.name=='disableEquip') return (event.slots.contains('equip1'));
var cards=player.getEquips('ruyijingubang');
return event.cards.some(card=>cards.contains(card));
},
content:function(){
if(trigger.name=='lose') trigger.cards.remove(player.getEquip(1));
else trigger.cancel();
if(trigger.name=='lose'){
trigger.cards.remove(player.getEquips('ruyijingubang'));
}
else{
while(trigger.slots.contains('equip1')) trigger.slots.remove('equip1');
}
},
},
},
@ -803,11 +804,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
var num=lib.skill.ruyijingubang_skill_backup.num;
player.storage.ruyijingubang_skill=num;
var card=player.getEquip(1);
var card=player.getEquips(1);
for(var card of cards){
if(card&&card.name=='ruyijingubang'){
card.storage.ruyijingubang_skill=num;
game.log(player,'将',card,'的攻击范围改为'+num)
}
}
player.markSkill('ruyijingubang_skill');
},
}

View File

@ -3405,7 +3405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
direct:true,
filter:function(event,player){
return event.source&&event.source.isIn()&&event.source.getEquip(1);
return event.source&&event.source.isIn()&&event.source.getEquips(1).length>0;
},
content:function(){
'step 0'

View File

@ -3447,10 +3447,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
charlotte:true,
filter:function(event,player){
return !player.isDisabled(1);
return player.hasEnabledSlot(1);
},
content:function(){
if(player.isEmpty(1)){
if(player.hasEmptySlot(1)){
var card=get.cardPile2(function(card){
return get.subtype(card)=='equip1'&&!get.cardtag(card,'gifts')&&player.canUse(card,player);
});
@ -4176,12 +4176,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterCard:function(card,player){
if(!player) player=_status.event.player;
return game.hasPlayer(function(current){
return current!=player&&current.isEmpty(get.subtype(card,false));
return current!=player&&current.canEquip(card);
});
},
position:'e',
filterTarget:function(card,player,target){
return target!=player&&target.isEmpty(get.subtype(ui.selected.cards[0],false));
return target!=player&&target.canEquip(ui.selected.cards[0]);
},
check:function(card){
if(get.value(card)<=0) return 10;
@ -4197,6 +4197,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return 0;
},
promptfunc:function(){
var players=game.filterPlayer(function(current){
return current.hasSkill('kotomi_chuanxiang');
});
return '将一张装备牌传给其他角色,然后令'+get.translation(players)+'摸一张牌。若传给该角色,则其改为摸两张牌。'
},
prepare:'give',
discard:false,
lose:false,
@ -4899,7 +4905,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'disableEquipAfter'},
forced:true,
filter:function(event,player){
return player.countDisabled()>=5&&!player._chihaya_liewu;
return !player.hasEnabledSlot()&&!player._chihaya_liewu;
},
skillAnimation:true,
animationColor:'orange',
@ -4920,7 +4926,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.type(card)=='equip';
},
check:function(card){
if(_status.event.player.isDisabled(get.subtype(card))) return 5;
if(!_status.event.player.hasEquipableSlot(get.subtype(card))) return 5;
return 3-get.value(card);
},
content:function(){
@ -4956,14 +4962,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.storage.chihaya_youfeng=false;
},
hiddenCard:function(player,name){
if(player.storage.chihaya_youfeng&&player.countDisabled()>=5) return false;
if(player.storage.chihaya_youfeng&&!player.hasEnabledSlot()) return false;
if(player.hasSkill('chihaya_youfeng_'+(player.storage.chihaya_youfeng||false))) return false;
var type=get.type(name);
if(player.storage.chihaya_youfeng) return type=='basic';
return type=='trick';
},
filter:function(event,player){
if(player.storage.chihaya_youfeng&&player.countDisabled()>=5) return false;
if(player.storage.chihaya_youfeng&&!player.hasEnabledSlot()) return false;
if(player.hasSkill('chihaya_youfeng_'+(player.storage.chihaya_youfeng||false))) return false;
var type=player.storage.chihaya_youfeng?'basic':'trick';
for(var name of lib.inpile){
@ -4982,7 +4988,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
table.style.width='100%';
table.style.position='relative';
for(var i=1;i<6;i++){
if(player.isDisabled(i)) continue;
if(!player.hasEnabledSlot(i)) continue;
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+get.translation('equip'+i)+'</span>';
td.link=i;
@ -5020,12 +5026,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(button){
var player=_status.event.player;
if(typeof button.link=='number'){
if(!player.hasEmptySlot(button.link)){
var card=player.getEquip(button.link);
if(card){
var val=get.value(card);
if(val>0) return 0;
return 5-val;
}
}
switch(button.link){
case 3:return 4.5;break;
case 4:return 4.4;break;
@ -5215,20 +5223,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sakuya_junbu:{
mod:{
targetInRange:function(card,player){
if(player.countDisabled()>=1) return true;
if(player.countDisabledSlot()>=1) return true;
},
cardUsable:function(card,player){
if(player.countDisabled()>=2) return Infinity;
if(player.countDisabledSlot()>=2) return Infinity;
},
},
trigger:{player:'useCard2'},
direct:true,
filter:function(event,player){
if(player.countDisabled()>=4) return true;
if(player.countDisabledSlot()>=4) return true;
return lib.skill.sakuya_junbu.filter2.apply(this,arguments);
},
filter2:function(event,player){
if(player.countDisabled()<3) return false;
if(player.countDisabledSlot()<3) return false;
var card=event.card;
var info=get.info(card);
if(info.allowMultiple==false) return false;
@ -5243,7 +5251,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
if(player.countDisabled()>=4){
if(player.countDisabledSlot()>=4){
trigger.directHit.addArray(game.players);
if(!lib.skill.sakuya_junbu.filter2(trigger,player)){
event.finish();
@ -5280,7 +5288,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
sub:true,
filter:function(event,player){
return player.countDisabled()>=5&&event.getParent().type=='card';
return !player.hasEnabledSlot()&&event.getParent().type=='card';
},
logTarget:'player',
content:function(){
@ -6536,7 +6544,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target) return false;
var card=ui.selected.cards[0];
if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name});
return target.isEmpty(get.subtype(card,false));
return target.canEquip(card);
},
discard:false,
lose:false,
@ -10178,13 +10186,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
locked:false,
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'&&player.isDisabled(1)) return num+1;
if(card.name=='sha'&&player.hasDisabledSlot(1)) return num+1;
},
globalFrom:function(from,to,distance){
if(from.isDisabled(4)) return distance-1;
if(from.hasDisabledSlot(4)) return distance-1;
},
globalTo:function(from,to,distance){
if(to.isDisabled(3)) return distance+1;
if(to.hasDisabledSlot(3)) return distance+1;
},
},
enable:'phaseUse',
@ -10192,7 +10200,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var list=['equip1','equip2','equip3','equip4','equip5'];
for(var i=0;i<list.length;i++){
if(!player.isDisabled(list[i])&&(!player.storage.kengo_guidui2||!player.storage.kengo_guidui2.contains(list[i]))) return true;
if(player.hasEnabledSlot(list[i])&&(!player.storage.kengo_guidui2||!player.storage.kengo_guidui2.contains(list[i]))) return true;
}
return false;
},
@ -10200,16 +10208,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
var list=['equip1','equip2','equip3','equip4','equip5'];
for(var i=0;i<list.length;i++){
if(player.isDisabled(list[i])||player.storage.kengo_guidui2&&player.storage.kengo_guidui2.contains(list[i])) list.splice(i--,1);
if(!player.hasEnabledSlot(list[i])||player.storage.kengo_guidui2&&player.storage.kengo_guidui2.contains(list[i])) list.splice(i--,1);
}
player.chooseControl(list).set('prompt','请选择废除一个装备栏').ai=function(){
if(list.contains('equip1')&&player.isEmpty('equip1')&&player.countCards('h',function(card){
if(list.contains('equip1')&&player.hasEmptySlot('equip1')&&player.countCards('h',function(card){
return card.name=='sha'&&player.getUseValue(card)>0
})) return 'equip1';
if(list.contains('equip3')&&player.isEmpty('equip3')) return 'equip3';
if(list.contains('equip4')&&player.isEmpty('equip4')) return 'equip4';
if(list.contains('equip5')&&player.isEmpty('equip5')) return 'equip5';
if(list.contains('equip2')&&player.isEmpty('equip2')) return 'equip2';
if(list.contains('equip3')&&player.hasEmptySlot('equip3')) return 'equip3';
if(list.contains('equip4')&&player.hasEmptySlot('equip4')) return 'equip4';
if(list.contains('equip5')&&player.hasEmptySlot('equip5')) return 'equip5';
if(list.contains('equip2')&&player.hasEmptySlot('equip2')) return 'equip2';
return list.randomGet();
};
'step 1'
@ -10226,7 +10234,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'useCardToPlayered'},
forced:true,
filter:function(event,player){
return event.card.name=='sha'&&player.isDisabled(1)&&event.target.countCards('he')>0;
return event.card.name=='sha'&&player.hasDisabledSlot(1)&&event.target.countCards('he')>0;
},
logTarget:'target',
content:function(){
@ -10240,7 +10248,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
position:'hes',
prompt:'将一张牌当做闪使用或打出',
viewAsFilter:function(player){
return player.isDisabled(2)&&player.countCards('hes')>0;
return player.hasDisabledSlot(2)&&player.countCards('hes')>0;
},
check:function(card){
return 1/Math.max(0.1,get.value(card));
@ -10248,7 +10256,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
respondShan:true,
skillTagFilter:function(player){
return player.isDisabled(2)&&player.countCards('he')>0;
return player.hasDisabledSlot(2)&&player.countCards('he')>0;
},
},
},
@ -10256,17 +10264,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
return player.countDisabled()>0;
return player.countDisabledSlot()>0;
},
content:function(){
var list=['equip1','equip2','equip3','equip4','equip5'];
for(var i=0;i<list.length;i++){
if(!player.isDisabled(list[i])) list.splice(i--,1);
else player.enableEquip(list[i]);
var list=[];
for(var i=1;i<=5;i++){
for(var j=0;j<player.countDisabledSlot(i);j++){
list.push('equip'+i)
}
}
player.enableEquip(list);
if(!player.storage.kengo_guidui2) player.storage.kengo_guidui2=[];
player.storage.kengo_guidui2.addArray(list);
//player.addTempSkill('kengo_guidui2');
},
},
kengo_guidui2:{onremove:true},
@ -12118,7 +12127,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.loseMaxHp();
var list=[];
for(var i=1;i<6;i++){
if(!trigger.source.isDisabled(i)) list.add('equip'+((i==3||i==4)?6:i));
if(trigger.source.hasEnabledSlot(i)) list.add('equip'+((i==3||i==4)?'3_4':i));
}
if(list.length){
player.chooseControl(list).set('prompt','选择废除'+get.translation(trigger.source)+'的一种装备栏').set('ai',function(){
@ -12131,10 +12140,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event.goto(2);
'step 1'
if(result.control!='equip6') trigger.source.disableEquip(result.control);
if(result.control!='equip3_4') trigger.source.disableEquip(result.control);
else{
trigger.source.disableEquip(3);
trigger.source.disableEquip(4);
trigger.source.disableEquip(3,4);
}
'step 2'
if(player.awakenedSkills.contains('nsxingchu')){
@ -18711,7 +18719,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_xiuzheng:'修真',
ns_xiuzheng_info:'出牌阶段限一次,你可选择一名其他角色,然后展示牌堆顶的两张牌,若同为红色,则其受到一点火焰伤害;若同为黑色,其受到一点雷电伤害;若颜色不相同,你弃置其一张牌。然后你获得这两张展示的牌后再弃置两张牌',
nsanruo:'暗弱',
nsanruo_info:'锁定技,你手牌中的[杀]和普通锦囊牌(借刀杀人等带有指向目标的锦囊除外)均对你不可见。但你可以正常使用之',
nsanruo_info:'锁定技,你手牌中的【杀】和普通锦囊牌(借刀杀人等带有指向目标的锦囊除外)均对你不可见。但你可以正常使用之',
nsxunshan:'循善',
nsxunshan_info:'锁定技,你使用【暗弱】牌可以为其指定任意名合法目标(托管无效)',
nskaicheng:'开城',
@ -18857,10 +18865,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
youzhan_info:'当以你距离不大于1的角色为目标的【杀】的使用结算开始时你可以弃置一张装备牌令该角色视为使用【诱敌深入】',
kangyin:'亢音',
kangyin2:'亢音',
kangyin_info:'出牌阶段限一次你可以失去1点体力并选择一名其他角色弃置该角色的一张牌。若此牌为基本牌你可以令一至X名角色各摸一张牌不为基本牌于此回合内你的进攻距离+X且你使用杀的额外目标数上限+X。X为你已损失的体力值',
kangyin_info:'出牌阶段限一次你可以失去1点体力并选择一名其他角色弃置该角色的一张牌。若此牌为基本牌你可以令一至X名角色各摸一张牌不为基本牌于此回合内你的进攻距离+X且你使用的额外目标数上限+X。X为你已损失的体力值',
zhucheng:'筑城',
zhucheng2:'筑城',
zhucheng_info:'①结束阶段开始时若没有“筑”你可以将牌堆顶的X张牌置于你的武将牌上称为“筑”X为你已损失的体力值与1中的较大值否则你可以获取所有“筑”。②当你成为杀的目标时若有“筑”你可以令此杀的使用者弃置X张牌X为“筑”的数量否则杀对你无效',
zhucheng_info:'①结束阶段开始时若没有“筑”你可以将牌堆顶的X张牌置于你的武将牌上称为“筑”X为你已损失的体力值与1中的较大值否则你可以获取所有“筑”。②当你成为的目标时若有“筑”你可以令此杀的使用者弃置X张牌X为“筑”的数量否则杀对你无效',
duoqi:'夺气',
duoqi_info:'当一名角色于除你之外的角色的出牌阶段内因弃置而失去牌后,你可以移去一张“筑”,并结束此出牌阶段',

View File

@ -22,6 +22,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
shen_dianwei:['male','shen',4,['juanjia','qiexie','cuijue'],['wei']],
shen_dengai:['male','shen',4,['dctuoyu','dcxianjin','dcqijing'],['wei']],
tw_shen_lvmeng:['male','shen',3,['twshelie','twgongxin'],['wu']],
shen_zhangjiao:['male','shen',3,['yizhao','sijun','sanshou','tianjie'],['qun']],
@ -82,6 +83,214 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//神典韦
juanjia:{
trigger:{
global:'phaseBefore',
player:'enterGame',
},
forced:true,
filter:function(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEnabledSlot(2);
},
content:function(){
player.disableEquip(2);
player.expandEquip(1);
},
},
qiexie:{
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
return player.countEquipableSlot(1)>0;
},
content:function(){
'step 0'
if(!_status.characterlist){
lib.skill.pingjian.initList();
}
var list=_status.characterlist.randomGets(5);
if(!list.length) event.finish();
else{
var num=player.countEquipableSlot(1);
player.chooseButton([
'挈挟:选择至多'+get.cnNumber(num)+'张武将置入武器栏',
[list,'character'],
],[1,num],true).set('ai',function(button){
var name=button.link;
var info=lib.character[name];
var skills=info[3].filter(function(skill){
var info=get.skillInfoTranslation(skill);
if(!info.includes('【杀】')) return false;
var list=get.skillCategoriesOf(skill);
list.remove('锁定技');
return list.length==0;
});
var eff=0.2;
for(var i of skills){
eff+=get.skillRank(i,'in');
}
return eff;
})
}
'step 1'
if(result.bool){
var list=result.links;
game.addVideo('skill',player,['qiexie',[list]])
game.broadcastAll(function(list){
for(var name of list) lib.skill.qiexie.createCard(name);
},list);
var cards=list.map(function(name){
var card=game.createCard('qiexie_'+name,'none',get.infoMaxHp(lib.character[name][2]));
return card;
});
player.addTempSkill('qiexie_blocker','qiexieAfter');
player.markAuto('qiexie_blocker',cards);
player.$gain2(cards);
game.delayx();
for(var card of cards) player.equip(card);
}
},
video:function(player,info){
for(var name of info[0]){
lib.skill.qiexie.createCard(name);
}
},
createCard:function(name){
if(!_status.postReconnect.qiexie) _status.postReconnect.qiexie=[
function(list){
for(var name of list) lib.skill.qiexie.createCard(name);
},[]
];
_status.postReconnect.qiexie[1].add(name)
if(!lib.card['qiexie_'+name]){
if(lib.translate[name+'_ab']) lib.translate['qiexie_'+name]=lib.translate[name+'_ab'];
else lib.translate['qiexie_'+name]=lib.translate[name];
var info=lib.character[name];
var card={
fullimage:true,
image:'character:'+name,
type:'equip',
subtype:'equip1',
enable:true,
selectTarget:-1,
filterCard:function(card,player,target){
if(player!=target) return false;
return target.canEquip(card,true);
},
modTarget:true,
allowMultiple:false,
content:lib.element.content.equipCard,
toself:true,
ai:{},
skills:['qiexie_destroy'],
}
var maxHp=get.infoMaxHp(info[2]);
if(maxHp!=1) card.distance={attackFrom:(1-maxHp)};
var skills=info[3].filter(function(skill){
var info=get.skillInfoTranslation(skill);
if(!info.includes('【杀】')) return false;
var list=get.skillCategoriesOf(skill);
list.remove('锁定技');
return list.length==0;
});
var str='锁定技。';
if(skills.length){
card.skills.addArray(skills);
str+='你视为拥有技能';
for(var skill of skills){
str+='〖'+get.translation(skill)+'〗';
str+='、';
}
str=str.slice(0,str.length-1);
str+=''
}
str+='此牌离开你的装备区后,改为置入剩余武将牌牌堆。';
lib.translate['qiexie_'+name+'_info']=str;
lib.card['qiexie_'+name]=card;
}
},
subSkill:{
blocker:{
mod:{
canBeReplaced:function(card,player){
if(player.getStorage('qiexie_blocker').contains(card)) return false;
},
},
charlotte:true,
onremove:true,
trigger:{player:'equipEnd'},
forced:true,
firstDo:true,
priority:Infinity,
filter:function(event){
var evt=event.getParent();
if(evt.name!='qiexie') return false;
return !evt.next.some(event=>{
return event.name=='equip';
})
},
content:function(){
player.removeSkill('qiexie_blocker');
},
},
destroy:{
trigger:{player:'loseBegin'},
equipSkill:true,
forceDie:true,
charlotte:true,
forced:true,
popup:false,
filter:function(event,player){
return event.cards.some(card=>card.name.indexOf('qiexie_')==0)
},
content:function(){
for(var card of trigger.cards){
if(card.name.indexOf('qiexie_')==0){
card._destroy=true;
game.log(card,'被放回武将牌堆');
var name=card.name.slice(7);
if(lib.character[name]) _status.characterlist.add(name);
}
}
},
},
},
},
cuijue:{
enable:'phaseUse',
filter:function(event,player){
return player.countCards('he')>0&&game.hasPlayer(target=>lib.skill.cuijue.filterTarget('SB',player,target));
},
filterCard:true,
filterTarget:function(card,player,target){
if(player.getStorage('cuijue_used').contains(target)||!player.inRange(target)) return false;
var distance=get.distance(player,target);
return !game.hasPlayer(current=>(current!=target&&player.inRange(current)&&get.distance(player,current)>distance));
},
position:'he',
check:card=>6-get.value(card),
content:function(){
player.addTempSkill('cuijue_used','phaseUseAfter');
player.markAuto('cuijue_used',[target]);
target.damage('nocard');
},
ai:{
order:2,
result:{
target:-1.5
},
tag:{
damage:1
}
},
subSkill:{
used:{
onremove:true,
charlotte:true,
},
},
},
//神邓艾
dctuoyu:{
audio:2,
@ -1151,13 +1360,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(event.responded||event.shouli||event.type=='wuxie') return false;
if(game.hasPlayer(function(current){
return current.getEquip(4);
return current.getCards('e',card=>get.subtype(card)=='equip4').length>0;
})&&event.filterCard({
name:'sha',
storage:{shouli:true},
},player,event)) return true;
if(game.hasPlayer(function(current){
return current.getEquip(3);
return current.getCards('e',card=>get.subtype(card)=='equip3').length>0;
})&&event.filterCard({
name:'shan',
storage:{shouli:true},
@ -1169,23 +1378,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterTarget:function(card,player,target){
var event=_status.event,evt=event;
if(event._backup) evt=event._backup;
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
if(equip3&&evt.filterCard(get.autoViewAs({
var equip3=target.getCards('e',card=>get.subtype(card,false)=='equip3');
var equip4=target.getCards('e',card=>get.subtype(card,false)=='equip4');
if(equip3.length&&equip3.some(card=>evt.filterCard(get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]),player,event)) return true;
},[card]),player,event))) return true;
return equip4.some(card=>{
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(equip4&&evt.filterCard(sha,player,event)){
},[card]);
if(evt.filterCard(sha,player,event)){
if(!evt.filterTarget) return true;
return game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})
};
return false;
})
},
prompt:'将场上的一张坐骑牌当做【杀】或【闪】使用或打出',
content:function(){
@ -1193,32 +1403,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=event.getParent(2);
evt.set('shouli',true);
var list=[];
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
var equip3=target.getCards('e',card=>get.subtype(card,false)=='equip3');
var equip4=target.getCards('e',card=>get.subtype(card,false)=='equip4');
var backupx=_status.event;
_status.event=evt;
try{
if(equip3){
if(equip3.length&&equip3.some(card=>{
var shan=get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]);
if(evt.filterCard(shan,player,event)) list.push('shan');
},[card]);
if(evt.filterCard(shan,player,event)) return true;
return false;
})){
list.push('shan');
}
if(equip4){
if(equip4.length&&equip4.some(card=>{
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
},[card]);
if(evt.filterCard(sha,player,evt)&&(!evt.filterTarget||game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
}))) list.push('sha');
}))) return true;
return false;
})){
list.push('sha');
};
}catch(e){game.print(e)};
_status.event=backupx;
if(list.length==1) event._result={
if(list.length==1){
event.cardName=list[0];
var cards=list[0]=='shan'?equip3:equip4;
if(cards.length==1) event._result={
bool:true,
links:[list[0]=='shan'?equip3:equip4],
links:[cards[0]],
}
else player.choosePlayerCard(true,target,'e').set('filterButton',function(button){
return _status.event.cards.contains(button.link);
}).set('cards',cards)
}
else player.choosePlayerCard(true,target,'e').set('filterButton',function(button){
var type=get.subtype(button.link);
@ -1227,7 +1450,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
var evt=event.getParent(2);
if(result.bool&&result.links&&result.links.length){
var name=get.subtype(result.links[0])=='equip3'?'shan':'sha';
var name=(event.cardName||(get.subtype(result.links[0])=='equip4'?'sha':'shan'));
if(evt.name=='chooseToUse'){
game.broadcastAll(function(result,name){
lib.skill.shouli_backup.viewAs={
@ -1271,7 +1494,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skillTagFilter:function(player,tag){
var subtype=(tag=='respondSha'?'equip4':'equip3');
return game.hasPlayer(function(current){
return current.getEquip(subtype);
return current.hasCard(card=>get.subtype(card,false)==subtype,'e');
});
},
order:2,
@ -1743,7 +1966,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.storage.yuheng.contains(i)) return false;
}
var type=get.subtype(event.card);
if(lib.card['changandajian_'+type]&&!player.isDisabled(type)) return true;
if(lib.card['changandajian_'+type]&&player.hasEquipableSlot(type)) return true;
return false;
},
content:function(){
@ -3220,7 +3443,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i]!=player&&players[i].getEquip('qinggang')){
if(players[i]!=player&&players[i].getEquips('qinggang').length>0){
return true;
}
}
@ -3229,10 +3452,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i]!=player){
var e=players[i].getEquip('qinggang');
if(e){
var e=players[i].getEquips('qinggang');
if(e.length>0){
player.line(players[i],'green');
players[i].give(e,player);
player.gain(e,players[i],'give','bySelf');
}
}
}
@ -3562,8 +3785,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
event.target2=result.targets[0];
var list=['手牌区'];
if(lib.card[card.name].type=='equip'&&event.target2.isEmpty(lib.card[card.name].subtype)) list.push('装备区');
if(lib.card[card.name].type=='delay'&&!event.target2.storage._disableJudge&&!event.target2.hasJudge(card.name)) list.push('判定区');
if(lib.card[card.name].type=='equip'&&event.target2.canEquip(card)) list.push('装备区');
if(lib.card[card.name].type=='delay'&&!event.target2.isDisabledJudge()&&!event.target2.hasJudge(card.name)) list.push('判定区');
if(list.length==1) event._result={control:list[0]};
else{
player.chooseControl(list).set('prompt','把'+get.translation(card)+'移动到'+get.translation(event.target2)+'的...').ai=function(){return 0};
@ -3839,7 +4062,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var num=event.name=='phase'?5:3;
if(num==3?event.numFixed:!game.hasPlayer(function(current){
return current.countDisabled()<5;
return current.hasEnabledSlot();
})) return false;
return game.countPlayer(function(current){
return current.isDamaged();
@ -3855,7 +4078,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else{
player.chooseTarget(get.prompt('olzhiti'),'废除一名角色的一个随机装备栏',function(card,player,target){
return target.countDisabled()<5;
return target.hasEnabledSlot();
}).set('ai',function(target){
return -get.attitude(_status.event.player,target)*(target.countCards('e')+1)
});
@ -3866,13 +4089,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('olzhiti',target);
var list=[];
for(var i=1;i<6;i++){
if(!target.isDisabled(i)) list.add((i==3||i==4)?6:i);
if(target.hasEnabledSlot(i)) list.add((i==3||i==4)?6:i);
}
var num=list.randomGet();
if(num!=6) target.disableEquip(num);
else{
target.disableEquip(3);
target.disableEquip(4);
target.disableEquip(3,4);
}
}
},
@ -6229,7 +6451,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player!=event.player&&event.player.isIn()&&_status.currentPhase==player;
},
check:function(event,player){
if(player.countDisabled()<5&&player.isDisabled(5)) return false;
if(player.hasEnabledSlot()&&!player.hasEnabledSlot(5)) return false;
return true;
},
bannedList:[
@ -6253,7 +6475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(func(listm[i])) list.add(listm[i]);
}
event.skills=list;
if(player.countDisabled()<5){
if(player.hasEnabledSlot()){
player.chooseToDisable().ai=function(event,player,list){
if(list.contains('equip5')) return 'equip5';
return list.randomGet();
@ -7080,7 +7302,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
stianyi_info:'觉醒技准备阶段若场上的所有存活角色均于本局游戏内受到过伤害则你加2点体力上限并回复1点体力然后令一名角色获得技能〖佐幸〗。',
zuoxing:'佐幸',
zuoxing2:'佐幸',
zuoxing_info:'出牌阶段限一次若令你获得〖佐幸〗的角色存活且体力上限大于1则你可以令其减1点体力上限并视为一张普通锦囊牌。',
zuoxing_info:'出牌阶段限一次若令你获得〖佐幸〗的角色存活且体力上限大于1则你可以令其减1点体力上限并视为使用一张普通锦囊牌。',
sghuishi:'辉逝',
sghuishi_info:'限定技出牌阶段你可以选择一名其他角色若其有未发动过的觉醒技则你令其发动这些觉醒技时无视原有条件否则其摸四张牌。然后你减2点体力上限。',
shen_taishici:'神太史慈',
@ -7179,7 +7401,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twwuhun_info:'锁定技。①当你受到其他角色造成的1点伤害后你令伤害来源获得1枚“梦魇”标记。②当你对有“梦魇”标记的其他角色造成伤害后你令其获得一枚“梦魇”标记。③当你死亡时你可进行判定。若结果不为【桃】或【桃园结义】则你选择至少一名拥有“梦魇”标记的角色。令这些角色各自失去X点体力X为其“梦魇”标记数。',
shen_zhangfei:'神张飞',
shencai:'神裁',
shencai_info:'出牌阶段限一次,你可以令一名其他角色进行判定。你获得此判定牌,然后若此判定牌:包含以下要素中的任意一个,则其失去已有的下列效果,并获得对应的效果:{⒈体力:当其受到伤害后,其失去等量的体力、⒉武器:其不能使用牌响应杀、⒊打出:当其失去手牌后,其再随机弃置一张手牌(不嵌套触发)、⒋距离:其的结束阶段开始时,其翻面};若均不包含,你获得其区域里的一张牌,其获得一枚“死”并获得如下效果:其的角色手牌上限-X、其的回合结束时若X大于场上存活人数则其死亡X为其“死”标记数。',
shencai_info:'出牌阶段限一次,你可以令一名其他角色进行判定。你获得此判定牌,然后若此判定牌:包含以下要素中的任意一个,则其失去已有的下列效果,并获得对应的效果:{⒈体力:当其受到伤害后,其失去等量的体力、⒉武器:其不能使用牌响应、⒊打出:当其失去手牌后,其再随机弃置一张手牌(不嵌套触发)、⒋距离:其的结束阶段开始时,其翻面};若均不包含,你获得其区域里的一张牌,其获得一枚“死”并获得如下效果:其的角色手牌上限-X、其的回合结束时若X大于场上存活人数则其死亡X为其“死”标记数。',
xunshi:'巡使',
xunshi_info:'锁定技。①你手牌区内所有的多目标锦囊牌均视为花色为none的普【杀】。②你使用颜色为none的牌无距离和次数限制。③当你使用无颜色的牌选择目标后你令你的〖神裁〗的发动次数上限+1至多为5然后可以为此牌增加任意个目标。',
shen_zhangjiao:'神张角',
@ -7212,6 +7434,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcqijing_info:'觉醒技。一名角色的回合结束后若你的三个副区域标签均被激活则你减1点体力上限将座位移动至一名其他角色的上家之后获得〖摧心〗和一个额外回合。',
dccuixin:'摧心',
dccuixin_info:'当你不因此技能使用的基本牌或普通锦囊牌结算结束后,若此牌的目标包含你的上家或下家,则你可以视为对下家或上家再使用一张牌名和元素相同的牌。',
shen_dianwei:'神典韦',
juanjia:'捐甲',
juanjia_info:'锁定技。游戏开始时,你废除一个防具栏,然后获得一个额外的武器栏。',
qiexie:'挈挟',
qiexie_info:'锁定技。准备阶段,你在剩余武将牌堆中随机观看五张牌,选择其中的任意张,将其按照如下规则转化为武器牌置入你的武器栏:{⒈此牌不具有花色,且其攻击范围和点数等于此武将牌的体力上限。⒉此武器牌的技能为该武将牌上所有描述中包含“【杀】”且不具有锁定技以外的标签的技能。⒊此武器牌离开你的装备区时,改为放回武将牌堆。}',
cuijue:'摧决',
cuijue_info:'每回合每名角色限一次。出牌阶段你可以弃置一张牌然后对攻击范围内距离最远的一名其他角色造成1点伤害。',
extra_feng:'神话再临·风',
extra_huo:'神话再临·火',

View File

@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangkai:['male','qun',4,['dcxiangshu']],
gaoxiang:['male','shu',4,['dcchiying'],['unseen']],
yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']],
dongwan:['female','qun',3,['dcshengdu','dcxianjiao'],['unseen']],
dongwan:['female','qun',3,['dcshengdu','dcjieling'],['unseen']],
zhangchu:['female','qun',3,['dcjizhong','dcrihui','dcguangshi']],
peiyuanshao:['male','qun',4,['dcmoyu'],['unseen']],
mengjie:['male','qun',3,['dcyinlu','dcyouqi']],
@ -1051,7 +1051,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att=get.attitude(player,target);
var eff=get.effect(target,{
name:'sha',
storage:{dcxianjiao:true},
storage:{dcjieling:true},
},player,player);
var value=att/5;
if(value<0) value=-value/1.3;
@ -1102,14 +1102,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
dcxianjiao:{
dcjieling:{
audio:2,
enable:'phaseUse',
usable:1,
position:'hs',
viewAs:{
name:'sha',
storage:{dcxianjiao:true}
storage:{dcjieling:true}
},
filterCard:function(card,player){
if(ui.selected.cards.length){
@ -1123,7 +1123,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 6-get.value(card);
},
precontent:function(){
player.addTempSkill('dcxianjiao_after');
player.addTempSkill('dcjieling_after');
event.getParent().addCount=false;
},
ai:{
@ -1134,7 +1134,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
locked:false,
mod:{
targetInRange:function(card){
if(card.storage&&card.storage.dcxianjiao) return true;
if(card.storage&&card.storage.dcjieling) return true;
},
},
subSkill:{
@ -1144,7 +1144,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
charlotte:true,
filter:function(event,player){
return event.card.name=='sha'&&event.card.storage&&event.card.storage.dcxianjiao;
return event.card.name=='sha'&&event.card.storage&&event.card.storage.dcjieling;
},
content:function(){
'step 0'
@ -1152,7 +1152,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current.hasHistory('damage',evt=>evt.card==trigger.card);
});
var targets=trigger.targets.filter(i=>i.isIn());
player.logSkill('dcxianjiao_after',targets);
player.logSkill('dcjieling_after',targets);
if(damaged){
for(var target of targets){
target.loseHp();
@ -4704,9 +4704,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
enable:'phaseUse',
usable:1,
isDisabled:function(player,pos){
return pos>0?player.isDisabled(pos):player.storage._disableJudge;
},
chooseButton:{
dialog:function(event,player){
var dialog=ui.create.dialog('弥笃:选择要废除或恢复的装备栏或判定区','hidden');
@ -4714,10 +4711,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog.noforcebutton=true;
var list1=[],list2=[];
for(var i=1;i<6;i++){
(player.isDisabled(i)?list2:list1).push(i);
for(var j=0;j<player.countEnabledSlot(i);j++){
list1.push(i);
}
(player.storage._disableJudge?list2:list1).push(-1);
var addTable=function(list){
if(player.hasDisabledSlot(i)) list2.push(i);
}
(player.isDisabledJudge()?list2:list1).push(-1);
var addTable=function(list,bool){
var table=document.createElement('div');
table.classList.add('add-setting');
table.style.margin='0';
@ -4726,7 +4726,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+(i>0?get.translation('equip'+i)+'栏':'判定区')+'</span>';
td.link=i;
td.link=[i,bool];
td.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
for(var j in lib.element.button){
td[j]=lib.element.button[j];
@ -4738,43 +4738,43 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
if(list1.length){
dialog.addText('未废除');
addTable(list1);
addTable(list1,true);
}
if(list2.length){
dialog.addText('已废除');
addTable(list2);
addTable(list2,false);
}
return dialog;
},
filter:function(button,player){
if(!ui.selected.buttons.length) return true;
if(lib.skill.midu.isDisabled(player,ui.selected.buttons[0].link)) return false;
return !player.isDisabled(button.link);
if(!ui.selected.buttons[0].link[1]) return false;
return button.link[1]
},
check:function(button){
var player=_status.event.player;
if(lib.skill.midu.isDisabled(player,button.link)){
if(button.link<=0) return -10;
if(!button.link[1]){
if(button.link[0]<=0) return -10;
if(player.hasCard(function(card){
return get.subtype(card)==('equip'+button.link);
return get.subtype(card)==('equip'+button.link[0]);
},'hs')) return 15;
return 10;
}
if(button.link<=0||player.isEmpty(button.link)&&!player.hasCard(function(card){
return get.subtype(card)==('equip'+button.link)&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
if(button.link[0]<=0||player.hasEmptySlot(button.link[0])&&!player.hasCard(function(card){
return get.subtype(card)==('equip'+button.link[0])&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
},'hs')) return 5;
return 0;
},
select:[1,6],
select:[1,Infinity],
backup:function(links,player){
if(lib.skill.midu.isDisabled(player,links[0])){
if(!links[0][1]){
return {
audio:'midu',
selectCard:-1,
selectTarget:-1,
filterCard:()=>false,
filterTarget:()=>false,
equip:links[0],
equip:links[0][0],
content:function(){
var pos=lib.skill.midu_backup.equip;
if(pos<=0) player.enableJudge();
@ -4789,15 +4789,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
selectCard:-1,
filterCard:()=>false,
filterTarget:true,
equip:links.sort(),
equip:links.map(i=>i[0]).sort(),
content:function(){
var list=lib.skill.midu_backup.equip,bool=false;
for(var i of list){
if(i<=0) bool=true;
else player.disableEquip(i);
var list=lib.skill.midu_backup.equip,num=list.length,bool=false;
if(list.contains(-1)){
list.remove(-1);
bool=true;
}
if(list.length>0) player.disableEquip(list);
if(bool) player.disableJudge();
target.draw(list.length)
target.draw(num)
},
ai:{
tag:{
@ -4811,7 +4812,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
prompt:function(links,player){
if(lib.skill.midu.isDisabled(player,links[0])){
if(!links[0][1]){
return '恢复一个装备栏或判定区并获得〖活墨〗';
}
var numc=get.cnNumber(links.length);
@ -4828,11 +4829,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xianwang:{
mod:{
globalTo:function(source,player,distance){
var num=player.countDisabled();
var num=player.countDisabledSlot();
if(num>0) return distance+(num>2?2:1);
},
globalFrom:function(source,player,distance){
var num=source.countDisabled();
var num=source.countDisabledSlot();
if(num>0) return distance-(num>2?2:1);
},
},
@ -5513,7 +5514,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var info=get.info(i);
return info&&!get.is.locked(i)&&!info.limited&&!info.juexingji&&!info.zhuSkill&&!info.charlotte;
});
if(!skills.length&&target.isEmpty(2)) return 1;
if(!skills.length&&target.hasEmptySlot(2)) return 1;
return -0.5*skills.length;
},
},
@ -6458,7 +6459,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mod:{
targetInRange:function(card,player,target){
if(player.countDisabled()>=5) return true;
for(var i=1;i<=5;i++){
if(!player.hasDisabledSlot(i)) return false;
}
return true;
},
},
marktext:'萍',
@ -6469,7 +6473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'useCardAfter'},
filter:function(event,player){
return player!=event.player&&event.targets.contains(player)&&
player.countDisabled()<5&&!player.getStorage('fuping').contains(event.card.name);
player.hasEnabledSlot()&&!player.getStorage('fuping').contains(event.card.name);
},
logTarget:'player',
prompt2:(event)=>('废除一个装备栏并记录【'+get.translation(event.card.name)+'】'),
@ -6479,9 +6483,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(['nanman','wanjian'].contains(event.card.name)&&!player.hasValueTarget({name:event.card.name})) return false;
var list=[3,5,4,1,2];
for(var i of list){
if(!player.isDisabled(i)){
if(player.hasEnabledSlot(i)){
var card=player.getEquip(i);
if(!card) return true;
if(!card||player.hasEmptySlot(i)) return true;
if(get.value(card,player)<=0) return true;
}
}
@ -6493,9 +6497,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseToDisable().set('ai',function(event,player,list){
var list=[3,5,4,1,2];
for(var i of list){
if(!player.isDisabled(i)){
if(player.hasEnabledSlot(i)){
var card=player.getEquip(i);
if(!card) return 'equip'+i;
if(!card||player.hasEmptySlot(i)) return 'equip'+i;
if(get.value(card,player)<=0) return 'equip'+i;
}
}
@ -7273,14 +7277,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(num>=5) return false;
var num2=0;
for(var i=1;i<=5;i++){
if(event.player.isEmpty(i)) num2++;
num2+=event.player.countEmptySlot(i);
}
return num<num2;
},
content:function(){
var num2=0;
for(var i=1;i<=5;i++){
if(trigger.player.isEmpty(i)) num2++;
num2+=trigger.player.countEmptySlot(i);
}
player.drawTo(num2);
},
@ -10204,8 +10208,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dongwan:'董绾',
dcshengdu:'生妒',
dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段获得牌后,你摸等量的牌。',
dcxianjiao:'献绞',
dcxianjiao_info:'出牌阶段限一次。你可以将两张颜色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】造成了伤害所有目标角色失去1点体力未造成伤害你对所有目标角色依次发动一次〖生妒〗。',
dcjieling:'介绫',
dcjieling_info:'出牌阶段限一次。你可以将两张颜色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】造成了伤害所有目标角色失去1点体力未造成伤害你对所有目标角色依次发动一次〖生妒〗。',
yuanyin:'袁胤',
dcmoshou:'墨守',
dcmoshou_info:'当你成为其他角色使用的黑色牌的目标后你可以摸X张牌X为你本局游戏此前发动过此技能的次数÷3的余数+1。',
@ -10235,7 +10239,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcporui_info:'每轮限一次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】然后你交给其X张手牌X为你的体力值。',
dcgonghu:'共护',
dcgonghu_info:'锁定技。①当你于回合外失去基本牌后你于〖破锐〗后增加“若其没有因此受到伤害你回复1点体力”。②当你于回合外造成或受到伤害后你删除〖破锐〗中的“然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
yue_caiwenji:'乐蔡文姬',
yue_caiwenji:'乐蔡',
dcshuangjia:'霜笳',
dcshuangjia_tag:'胡笳',
dcshuangjia_info:'锁定技。①游戏开始,你将你的手牌标记为“胡笳”。②你的“胡笳”牌不计入手牌上限。③其他角色至你的距离+XX为你的“胡笳”数且至多为5。',

View File

@ -504,8 +504,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var names=map[first];
return !names.contains(changshi);
});
if(list.length==0) return others.randomGets(1);
return list;
return list.length?list:others;
}());
next.set('ai',button=>{
if(button.link=='scs_gaowang') return 10;
@ -1492,6 +1491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
wuxie:function(){
'step 0'
var trigger=event.getParent().getTrigger();
if(!trigger.respondTo){event.finish();return;}
var target=trigger.respondTo[0];
event.target=target;
if(!target||!target.countGainableCards(player,player==target?'e':'he')) event._result={bool:false};
@ -1704,7 +1704,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event._result={bool:false};
}
else{
trigger.player.chooseToDiscard(num,'弃置'+get.cnNumber(num)+'张手牌,或令杀的伤害+1').set('ai',function(card){
trigger.player.chooseToDiscard(num,'弃置'+get.cnNumber(num)+'张手牌,或令'+get.translation(player)+'对你造成的此伤害+1').set('ai',function(card){
var player=_status.event.player;
if(player.hp==1){
if(get.type(card)=='basic'){
@ -3786,7 +3786,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var suit2=get.suit(i.card);
if(!lib.suit.contains(suit2)) continue;
if(i!=event&&suit2==suit) return false;
list.add(suit2);
if(i.finished) list.add(suit2);
}
return list.length>1&&list.length<5;
},
@ -3799,7 +3799,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(i.getParent('phaseUse')!=evt) continue;
var suit2=get.suit(i.card);
if(!lib.suit.contains(suit2)) continue;
list.add(suit2);
if(i.finished) list.add(suit2);
}
var prompt,filterTarget,ai;
switch(list.length){
@ -4110,7 +4110,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
{
name:'ignotus',
filename:'ignotus',
timeleap:[0,1412,2824,4235,5647,5824,7059,8294,8471,9882,10941,11294,12000,12706,13412,14118,14824,15529,15882,16059,16235,16412,16588],
//Number of tracks
//轨道数量
number_of_tracks:4,
//Customize the track to generate for every note (0 is the first track)
//自定义每个音符生成的轨道0是第一个轨道
mapping:[0,2,3,1,1,0,3,0,0,3,0,0,2,1,2],
//Convert from beats (0 is the first beat) to timeleap
//将节拍0是第一拍转换为开始时间点
timeleap:game.generateBeatmapTimeleap(170,[0,4,8,12,14,16,16.5,23.5,24,31,32,40,45,46,47]),
current:-110,
judgebar_height:0.16,
range1:[84,110],
@ -4123,6 +4131,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
{
name:'Super Mario 3D World Theme',
filename:'sm3dw_overworld',
//Random (Randomly choose tracks to generate notes each play)
//随机(每次演奏时音符会随机选择轨道生成)
mapping:'random',
timeleap:[0,1071,1518,2054,4018,4286,5357,6429,7500,8571,9643,10714,11786,12321,12589,12857,13929,15000,16071,17143,18214,18482,18750,19018,19286,20357],
current:-110,
judgebar_height:0.16,
@ -4133,6 +4144,67 @@ game.import('character',function(lib,game,ui,get,ai,_status){
node_color:'linear-gradient(rgba(120, 130, 240, 1), rgba(100, 100, 230, 1))',
judgebar_color:'linear-gradient(rgba(230, 40, 30, 1), rgba(220, 30, 10, 1))',
},
{
name:'只因你太美',
filename:'chicken_you_are_so_beautiful',
number_of_tracks:7,
mapping:[3,6,4,5,6,2,3,2,1,2,0,4,3,6,5,4,3,6,3,2,3,1,0,1,2,3,4,5,6],
timeleap:game.generateBeatmapTimeleap(107,[2,3.5,4.5,5.5,6.5,8.5,10,11.5,12.5,13.5,14.5,15.5,18,19.5,20.5,21.5,22.5,24.5,26,27.5,28.5,29.5,30.5,31,31.5,32,32.5,33,33.5]),
//Hitsound file name (By default in the audio/effect folder. To redirect to the extension, please write in the format of 'ext:extension_name')
//打击音文件名默认在audio/effect文件夹下 若要重定向到扩展 请写为'ext:扩展名称'的格式)
hitsound:'chickun.wav',
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(#99f, #66c)',
judgebar_color:'linear-gradient(#ccf, #99c)',
},
{
name:'Croatian Rhapsody',
filename:'croatian_rhapsody',
mapping:[4,1,2,1,0,0,4,5,1,3,2,1,0,0],
timeleap:game.generateBeatmapTimeleap(96,[4,6,8,9,10,11,12,13.5,14,15.5,16,17,18,19]),
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(#fff, #ccc)',
judgebar_color:'linear-gradient(#fff, #ccc)',
},
{
name:'罗刹海市',
filename:'rakshasa_sea_city',
number_of_tracks:7,
mapping:'random',
timeleap:game.generateBeatmapTimeleap(150,[0,2,4,6,7,9,11,13,14,16,18,20,21,23,25,27]),
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(#333, #000)',
judgebar_color:'linear-gradient(#c66, #933)',
},
{
name:'Pigstep (Stereo Mix)',
filename:'pigstep',
number_of_tracks:16,
timeleap:game.generateBeatmapTimeleap(170,[3,4,6,6.5,7.5,11,12,14,14.5,15.5,19,20,22,22.5,23.5,27,28,30,30.5,31.5,35,36,38,38.5,39.5,43,44,46,46.5,47.5,51,52,54,54.5,55.5,59,60,62,62.5]),
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(#066, #033)',
judgebar_color:'linear-gradient(#633, #300)',
},
],
derivation:'chongxu_faq',
},
@ -4418,7 +4490,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
table.style.position='relative';
var list=['sha','shan'];
for(var i of list){
if(player.isDisabled(i)) continue;
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+get.translation(i)+'</span>';
td.link=i;
@ -6165,12 +6236,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
speed=-4;
}
};
document.addEventListener(lib.config.touchscreen?'touchend':'click',fly);
document.addEventListener(lib.config.touchscreen?'touchstart':'mousedown',fly);
event.settle=function(){
clearInterval(event.fly);
clearInterval(event.addPipe);
document.removeEventListener(lib.config.touchscreen?'touchend':'click',fly);
document.removeEventListener(lib.config.touchscreen?'touchstart':'mousedown',fly);
setTimeout(function(){
event.switchToAuto()
},1000);
@ -6433,17 +6504,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var source=event.source;
if(!source) return false;
var card=source.getEquip(1);
return card&&get.itemtype(card)=='card'&&lib.filter.canBeGained(card,player,source);
var cards=source.getEquips(1);
return cards.length&&cards.some(card=>lib.filter.canBeGained(card,player,source));
},
prompt2:function(event){
return '获得其装备区中的'+get.translation(event.source.getEquip(1));
var source=event.source;
var cards=source.getEquips(1).filter(card=>lib.filter.canBeGained(card,player,source));
return '获得其装备区中的'+get.translation(cards);
},
check:function(event,player){
return (get.attitude(player,event.source)+0.1)*get.value(event.source.getEquip(1),event.source);
},
content:function(){
player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf');
var source=trigger.source;
var cards=source.getEquips(1).filter(card=>lib.filter.canBeGained(card,player,source));
player.gain(cards,source,'give','bySelf');
},
},
xinanjian:{
@ -8269,7 +8344,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.zhengjing.length){
var card=ui.create.card(ui.special,'noclick',true);
card.init(['','',event.zhengjing.shift()]);
card.addEventListener(lib.config.touchscreen?'touchend':'click',click);
card.addEventListener(lib.config.touchscreen?'touchstart':'mousedown',click);
event.zhengjing_nodes.push(card);
card.style.position='absolute';
var rand1=Math.round(Math.random()*100);
@ -9395,14 +9470,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mod:{
cardUsable:function(card,player,num){
var cardx=player.getEquip('rewrite_zhuge');
if(card.name=='sha'&&(!cardx||player.hasSkill('rw_zhuge_skill',null,false)||(!_status.rw_zhuge_temp&&!ui.selected.cards.contains(cardx)))){
var cards=player.getEquips('rewrite_zhuge')
if(card.name=='sha'){
if(!cards.length||player.hasSkill('rw_zhuge_skill',null,false)||cards.some(card=>(card!=_status.rw_zhuge_temp&&!ui.selected.cards.contains(card)))){
if(get.is.versus()||get.is.changban()){
return num+3;
}
return Infinity;
}
}
},
cardEnabled2:function(card,player){
if(!_status.event.addCount_extra||player.hasSkill('rw_zhuge_skill',null,false)) return;
if(card&&card==player.getEquip('rewrite_zhuge')){
var cards=player.getEquips('rewrite_zhuge');
if(card&&cards.contains(card)){
try{
var cardz=get.card();
}
@ -9410,7 +9491,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return;
}
if(!cardz||cardz.name!='sha') return;
_status.rw_zhuge_temp=true;
_status.rw_zhuge_temp=card;
var bool=lib.filter.cardUsable(get.autoViewAs({name:'sha'},ui.selected.cards.concat([card])),player);
delete _status.rw_zhuge_temp;
if(!bool) return false;
@ -10324,11 +10405,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
game.delay(0.5);
if(targets[0].isDisabled(1)) event.goto(2);
if(!targets[0].hasEquipableSlot(1)) event.goto(2);
'step 1'
var target=targets[0];
var equip1=get.cardPile2(function(card){
return get.subtype(card)=='equip1';
return get.subtype(card)=='equip1'&&target.canUse(card,target);
});
if(!equip1){
player.popup('连计失败');
@ -11151,21 +11232,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseTarget(2,function(card,player,target){
if(ui.selected.targets.length){
if(!_status.event.ingame){
return target.isEmpty(2)?true:false;
var cards=ui.selected.targets[0].getEquips(2);
return cards.some(card=>target.canEquip(card))
}
var from=ui.selected.targets[0];
if(target.isMin()) return false;
var es=from.getCards('e');
for(var i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue;
if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
if(target.isEmpty(get.subtype(es[i]))) return true;
if(target.canEquip(es[i])) return true;
}
return false;
}
else{
if(!event.ingame){
if(target.getEquip(2)) return true;
if(target.getEquips(2).length) return true;
return false;
}
return target.countCards('e')>0;
@ -11181,9 +11261,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.attitude(player,current)>0){
var es=target.getCards('e');
for(var i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&current.getEquip('liulongcanjia')) continue;
else if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
else if(current.isEmpty(get.subtype(es[i]))) return true;
if(current.canEquip(es[i])) return true;
}
return false;
}
@ -11195,9 +11273,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var es=ui.selected.targets[0].getCards('e');
var i;
for(i=0;i<es.length;i++){
if(['equip3','equip4'].contains(get.subtype(es[i]))&&target.getEquip('liulongcanjia')) continue;
if(es[i].name=='liulongcanjia'&&target.countCards('e',{subtype:['equip3','equip4']})>1) continue;
if(target.isEmpty(get.subtype(es[i]))) break;
if(target.canEquip(es[i])) break;
}
if(i==es.length) return 0;
}
@ -11217,20 +11293,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 3'
if(targets.length==2){
if(!event.ingame){
event._result={
var cards=targets[0].getEquips(2);
if(cards.length==1) event._result={
bool:true,
links:[targets[0].getEquip(2)],
};
links:cards,
}
else{
player.choosePlayerCard('e',true,function(button){
return get.equipValue(button.link);
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
if(!get.subtypes(button.link,false).contains('equip2')) return false;
var targets1=_status.event.targets1;
return targets1.canEquip(button.link);
});
}
}
else{
player.choosePlayerCard('e',true,function(button){
return get.equipValue(button.link);
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1;
if(['equip3','equip4'].contains(get.subtype(button.link))&&targets1.getEquip('liulongcanjia')) return false;
if(button.link.name=='liulongcanjia'&&targets1.countCards('e',{subtype:['equip3','equip4']})>1) return false;
return !targets1.countCards('e',{subtype:get.subtype(button.link)});
return targets1.canEquip(button.link);
});
}
}
@ -12333,7 +12416,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return !player.getEquip('ly_piliche');
return !player.getEquips('ly_piliche').length;
},
content:function(){
'step 0'
@ -12347,7 +12430,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
if(card) player.chooseUseTarget(card,true,'nopopup');
'step 3'
if(event.count>0&&!player.getEquip('ly_piliche')) event.goto(1);
if(event.count>0&&!player.getEquips('ly_piliche').length) event.goto(1);
},
},
},
@ -12440,7 +12523,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isMin()) return false;
var es=from.getCards('e');
for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true;
if(target.canEquip(es[i])) return true;
}
return false;
}
@ -12464,7 +12547,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})) return 14;
if(target.countCards('e',function(card){
return get.value(card,target)<0&&game.hasPlayer(function(current){
return current!=target&&get.attitude(player,current)<0&&current.isEmpty(get.subtype(card))
return current!=target&&get.attitude(player,current)<0&&current.canEquip(card)
});
})>0) return 9;
}
@ -12473,7 +12556,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current!=target&&get.attitude(player,current)>0){
var es=target.getCards('e');
for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.value(es[i],current)>0) return true;
if(get.value(es[i],target)>0&&current.canEquip(es[i])&&get.value(es[i],current)>0) return true;
}
}
})){
@ -12489,7 +12572,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.value(es[i],target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){
target.canEquip(es[i])){
return Math.abs(att);
}
}
@ -12538,7 +12621,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link);
}
else{
return targets1.isEmpty(get.subtype(button.link));
return targets1.canEquip(button.link);
}
});
}
@ -13427,7 +13510,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chongxu:'冲虚',
chongxu_info:'出牌阶段限一次你可以随机演奏一首音乐并根据完成度来获得相应的分数至多五分。然后你可修改〖妙剑〗或〖莲华〗消耗3分并使用剩余的分数进行摸牌每张2分。',
chongxu_faq:'目前的曲库',
chongxu_faq_info:' <br>《鸟之诗》- 折户伸治<br>《竹取飛翔 ~ Lunatic Princess》- ZUN<br>《ignotus》- ak+q<br>《Super Mario 3D World Theme》- 横田真人',
chongxu_faq_info:' <br>《鸟之诗》- 折户伸治<br>《竹取飛翔 ~ Lunatic Princess》- ZUN<br>《ignotus》- ak+q<br>《Super Mario 3D World Theme》- 横田真人<br>《只因你太美》- SWIN-S<br>《Croatian Rhapsody》- Maksim<br>《罗刹海市》- 刀郎<br>《Pigstep (Stereo Mix)》- Lena Raine',
miaojian:'妙剑',
miaojian_info:'出牌阶段限一次。你可将一张【杀】当做刺【杀】使用,或将一张锦囊牌当做【无中生有】使用。',
miaojian1:'妙剑·改',
@ -13453,7 +13536,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spqishe_info:'你可以将一张装备牌当做【酒】使用。你的手牌上限+XX为你装备区内的牌数。',
sp_maojie:'毛玠',
bingqing:'秉清',
bingqing_info:'当你于出牌阶段内使用的牌结算结束后,若你于本阶段内使用的所有其他牌与此牌花色均不相同则你可根据X的值执行对应效果为2你令一名角色摸两张牌为3你弃置一名角色区域内的一张牌为4你对一名其他角色造成1点伤害。X为你本阶段内使用过的牌中包含的花色数',
bingqing_info:'当你于出牌阶段内使用的牌结算结束后,若你于本阶段内使用的所有已结算结束的其他牌与此牌花色均不相同则你可根据X的值执行对应效果为2你令一名角色摸两张牌为3你弃置一名角色区域内的一张牌为4你对一名其他角色造成1点伤害。X为你本阶段内使用过的已结算结束的牌中包含的花色数)',
yingfeng:'迎奉',
yingfeng_info:'准备阶段,你可以令一名角色获得“奉”标记并移除场上所有其他的“奉”标记。有“奉”标记的角色使用牌没有距离限制。',
xin_sunxiu:'手杀孙休',

View File

@ -1577,10 +1577,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
locked:false,
getNum:function(target,player){
return target.countCards('e',card=>{
var subtype=get.subtype(card);
return player.isDisabled(subtype);
})
return target.countCards(card=>{
var subtype=get.subtypes(card);
for(var i of subtype){
if(player.hasDisabledSlot(i)) return true;
}
return false;
});
},
group:'jsrgjuezhi_disable',
content:function(){
@ -1603,19 +1606,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
event.cards=trigger.getl(player).es;
'step 1'
var card=cards.shift(),subtype=get.subtype(card);
event.subtype=subtype;
if(!player.isDisabled(subtype)){
player.chooseBool(get.prompt('jsrgjuezhi_disable'),'废除你的'+get.translation(subtype)+'栏').set('ai',()=>1);
var card=cards.shift(),subtypes=get.subtypes(card).filter(slot=>player.hasEnabledSlot(slot));
event.subtypes=subtypes;
if(subtypes.length>0){
player.chooseBool(get.prompt('jsrgjuezhi_disable'),'废除你的'+get.translation(subtypes)+'栏').set('ai',()=>1);
}
else event._result={bool:false};
'step 2'
if(result.bool){
player.logSkill('jsrgjuezhi_disable');
var list=[];
if(event.subtype=='equip6') list.addArray(['3','4']);
else list.add(event.subtype);
for(var i of list) player.disableEquip(i);
player.disableEquip(event.subtypes);
}
if(cards.length>0) event.goto(1);
},
@ -1666,7 +1666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current.isMin()) return false;
var es=target.getCards('e');
for(var i=0;i<es.length;i++){
if(current.isEmpty(get.subtype(es[i]))) return true;
if(current.canEquip(es[i])) return true;
}
return false;
});
@ -1688,7 +1688,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],from))==-att2&&
get.sgn(get.effect(target,es[i],player,target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){
target.canEquip(es[i])){
return Math.abs(att);
}
}
@ -1740,7 +1740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link);
}
else{
return targets1.isEmpty(get.subtype(button.link));
return targets1.canEquip(button.link);
}
});
}
@ -2253,11 +2253,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
shaRelated:true,
filter:function(event,player){
return event.isFirstTarget&&event.card.name=='sha'&&!player.getEquip(1)&&!player.isDisabled(1);
return event.isFirstTarget&&event.card.name=='sha'&&player.hasEmptySlot(1);
},
content:function(){
trigger.getParent().targets=trigger.getParent().targets.concat(trigger.targets);
trigger.getParent().triggeredTargets4=trigger.getParent().triggeredTargets4.concat(trigger.targets);
// trigger.getParent().targets=trigger.getParent().targets.concat(trigger.targets);
// trigger.getParent().triggeredTargets4=trigger.getParent().triggeredTargets4.concat(trigger.targets);
trigger.getParent().effectCount++;
},
ai:{
effect:{
@ -3181,7 +3182,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
if(event.card.name!='sha') return false;
return event.nature;
},
@ -4167,17 +4168,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).setContent('chooseToCompareLose');
'step 2'
var todis=[];
for(var i=0;i<event.e1.length;i++){
if(target.isDisabled(get.subtype(event.e1[i]))) todis.push(event.e1[i]);
}
for(var i=0;i<event.j1.length;i++){
if(target.storage._disableJudge||target.hasJudge(event.j1[i].viewAs||event.j1[i].name)) todis.push(event.j1[i]);
}
for(var i=0;i<event.e2.length;i++){
if(player.isDisabled(get.subtype(event.e2[i]))) todis.push(event.e2[i]);
if(target.isDisabledJudge()||target.hasJudge(event.j1[i].viewAs||event.j1[i].name)) todis.push(event.j1[i]);
}
for(var i=0;i<event.j2.length;i++){
if(player.storage._disableJudge||player.hasJudge(event.j2[i].viewAs||event.j2[i].name)) todis.push(event.j2[i]);
if(player.isDisabledJudge()||player.hasJudge(event.j2[i].viewAs||event.j2[i].name)) todis.push(event.j2[i]);
}
if(todis.length) game.cardsDiscard(todis);
'step 3'
@ -8773,7 +8768,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zyshangyi:'尚义',
zyshangyi_info:'出牌阶段限一次。你可以令一名其他角色观看你的手牌,然后你观看其手牌并可以弃置其中一张牌。',
zymingshi:'名士',
zymingshi_info:'锁定技。若你的防具栏为空且未废除,属性【杀】对你无效。',
zymingshi_info:'锁定技。若你有空置的防具栏,属性【杀】对你无效。',
gzsuishi:'随势',
gzsuishi2:'随势',
gzsuishi_info:'锁定技其他角色进入濒死状态时若伤害来源与你势力相同你摸一张牌其他角色死亡时若其与你势力相同你失去1点体力。',

View File

@ -740,7 +740,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_fuyin:{
mod:{
targetEnabled:function(card,player,target){
if((card.name=='juedou'||card.name=='sha'||card.name=='huogong')&&player!=target&&player.countCards('h')>=target.countCards('h')&&target.isEmpty(2)) return false;
if((card.name=='juedou'||card.name=='sha'||card.name=='huogong')&&player!=target&&player.countCards('h')>=target.countCards('h')&&target.hasEmptySlot(2)) return false;
},
},
},

View File

@ -301,6 +301,8 @@ window.noname_character_rank={
'duanqiaoxiao',
'old_wanglang',
'shichangshi',
'ol_wenqin',
'clan_zhonghui',
'key_misuzu',
'key_sunohara',
'key_umi',
@ -584,6 +586,7 @@ window.noname_character_rank={
'yuantanyuanxiyuanshang',
'yanghong',
'dc_sunhanhua',
'shen_dianwei',
],
bp:[
'chess_diaochan',
@ -1223,6 +1226,9 @@ window.noname_character_rank={
'clan_zhongyan',
'sb_zhurong',
'haopu',
'xizheng',
'dc_duyu',
'clan_wanghun',
],
bm:[
'diy_xizhenxihong',
@ -1663,6 +1669,7 @@ window.noname_character_rank={
'wu_zhugeliang',
'yue_caiwenji',
'clan_zhongyan',
'shen_dianwei',
'key_tomoya',
'key_masato',
'key_shiorimiyuki',
@ -1902,6 +1909,7 @@ window.noname_character_rank={
'dc_wangjun',
'zhanghua',
'lushi',
'clan_zhonghui',
'key_kano',
'key_haruko',
'key_akiko',
@ -2386,6 +2394,8 @@ window.noname_character_rank={
'clan_wangling',
'clan_wangyun',
'quhuang',
'ol_wenqin',
'clan_wanghun',
],
junk:[
'sunshao',

View File

@ -381,30 +381,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){
relinglong:{
audio:2,
trigger:{
player:'loseAfter',
player:['loseAfter','disableEquipAfter','enableEquipAfter'],
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter','phaseBefore'],
},
forced:true,
onremove:true,
derivation:'reqicai',
filter:function(event,player){
if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){
if(event.name=='disableEquip'||event.name=='enableEquip'){
if(!event.slots.contains('equip5')) return false;
}
else if(event.name!='phase'&&(event.name!='equip'||event.player!=player)){
var evt=event.getl(player);
if(!evt||!evt.es||!evt.es.some(i=>get.subtype(i)=='equip5')) return false;
if(!evt||!evt.es||!evt.es.some(i=>get.subtypes(i).contains('equip5'))) return false;
}
var skills=player.additionalSkills['relinglong'];
return skills&&skills.length&&player.getEquip(5)||!(skills&&skills.length)&&!player.getEquip(5);
return (skills&&skills.length>0)!=player.hasEmptySlot(5);
},
content:function(){
player.removeAdditionalSkill('relinglong');
if(!player.getEquip(5)){
if(player.hasEmptySlot(5)){
player.addAdditionalSkill('relinglong',['reqicai']);
}
},
group:['linglong_bagua','relinglong_directhit'],
mod:{
maxHandcard:function(player,num){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return;
if(!player.hasEmptySlot(3)||!player.hasEmptySlot(4)) return;
return num+2;
},
},
@ -415,8 +418,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(event.card.name!='sha'&&get.type(event.card,false)!='trick') return false;
for(var i=2;i<=6;i++){
if(player.getEquip(i)) return false;
for(var i=2;i<6;i++){
if(!player.hasEmptySlot(i)) return false;
}
return true;
},
@ -428,8 +431,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(!arg||!arg.card||!arg.target||(arg.card.name!='sha'&&get.type(arg.card,false)!='trick')) return false;
for(var i=2;i<=6;i++){
if(player.getEquip(i)) return false;
for(var i=2;i<6;i++){
if(!player.hasEmptySlot(i)) return false;
}
return true;
},
@ -969,7 +972,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&event.notLink()&&[2,3,4,6].some(i=>event.player.getEquip(i));
return event.player.isIn()&&event.card&&event.card.name=='sha'&&event.cards.filterInD('od').length&&
event.notLink()&&[2,3,4].some(i=>event.player.getEquips(i).length>0);
},
group:'remoshi_retrieve',
content:function(){
@ -983,23 +987,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
filter:function(event,player){
var keys=['equip2','equip3','equip4'];
return game.hasPlayer(current=>{
if(event.name=='gain'&&current==player) return false;
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=event.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtypes(i).some(slot=>keys.contains(slot)))) return true;
});
},
direct:true,
forced:true,
content:function(){
'step 0'
var keys=['equip2','equip3','equip4'];
var targets=game.filterPlayer(current=>{
var cards=current.getExpansions('remoshi_stuck');
if(!cards.length) return false;
var evt=trigger.getl(current);
if(evt&&evt.cards2&&evt.cards2.some(i=>['equip2','equip3','equip4','equip6'].contains(get.subtype(i)))) return true;
if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtypes(i).some(slot=>keys.contains(slot)))) return true;
});
event.targets=targets;
'step 1'
@ -3057,7 +3063,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.sgn(get.value(es[i],current))!=-att||get.value(es[i],current)<5) return false;
var att2=get.sgn(get.attitude(player,current2));
if(att==att2||att2!=get.sgn(get.effect(current2,es[i],player,current2))) return false;
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i]));
return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){
return true;
}
@ -5083,7 +5089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.getHistory('sourceDamage').length){
var cards=target.getCards('e');
for(var i of cards){
if(player.isEmpty(get.subtype(i))) return true;
if(player.canEquip(i)) return true;
}
}
return target.getHistory('useCard',function(evt){
@ -5102,7 +5108,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.getHistory('sourceDamage').length){
var cards=target.getCards('e');
for(var i of cards){
if(player.isEmpty(get.subtype(i))) list.push(i);
if(player.canEquip(i)) list.push(i);
}
}
if(list.length){
@ -6735,7 +6741,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
for(var i=0;i<es.length;i++){
if(game.hasPlayer(function(current2){
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i]));
return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){
return true;
}
@ -6761,7 +6767,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !_status.event.cards.contains(card);
});
for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true;
if(target.canEquip(es[i])) return true;
}
return false;
}
@ -6779,7 +6785,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target==player&&player.hasSkill('decadexuanfeng')){
if(player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0;
return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)<0;
});
})>0) return 18;
return 7;
@ -6787,7 +6793,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else if(att>0){
if(target.countCards('e',function(card){
return get.value(card,target)<0&&!_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0;
return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)<0;
});
})>0) return 9;
}
@ -6798,7 +6804,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !_status.event.cards.contains(card);
});
for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,current)>0) return true;
if(get.value(es[i],target)>0&&current.canEquip(card)&&get.effect(current,es[i],player,current)>0) return true;
}
}
})){
@ -6818,7 +6824,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0;
});
if(bool&&player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&target.isEmpty(get.subtype(card))&&get.effect(target,card,player,player)>0;
return !_status.event.cards.contains(card)&&target.canEquip(card)&&get.effect(target,card,player,player)>0;
})) return 2.5*Math.abs(att);
else if(bool) return 1/Math.max(1,Math.abs(att));
else return get.damageEffect(target,player,player);
@ -6826,7 +6832,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.effect(target,es[i],player,target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){
target.canEquip(es[i])){
return Math.abs(att);
}
}
@ -6865,7 +6871,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},targets[0]).set('nojudge',event.nojudge||false).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
if(_status.event.cards.contains(button.link)) return false;
var targets1=_status.event.targets1;
return targets1.isEmpty(get.subtype(button.link));
return targets1.canEquip(button.link);
}).set('cards',cards);
}
else{
@ -6900,7 +6906,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
};
for(var i=0;i<friends.length;i++){
for(var j=1;j<=5;j++){
if(friends[i].isEmpty(j)){
if(friends[i].hasEmptySlot(j)){
vacancies['equip'+j]++;
}
}
@ -7566,7 +7572,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
var filterTarget=function(card,player,target){
return target!=player&&target.countCards('e',function(card){
return player.isEmpty(get.subtype(card));
return player.canEquip(card);
});
}
if(game.hasPlayer(function(current){
@ -7577,7 +7583,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0&&!target.hasSkillTag('noe')) return 0;
var num=0;
target.countCards('e',function(card){
if(player.isEmpty(get.subtype(card))){
if(player.canEquip(card)){
var eff=get.effect(player,card,player,player);
if(eff>num) num=eff;
}
@ -7594,7 +7600,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.target=target;
player.logSkill('rezishou',target);
player.choosePlayerCard(target,'e','将一张装备牌移至你的装备区').set('filterButton',function(button){
return _status.event.player.isEmpty(get.subtype(button.link));
return _status.event.player.canEquip(button.link);
});
}
else event.finish();
@ -7915,7 +7921,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
regongji:{
mod:{
attackRangeBase:function(player){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return Infinity;
if(player.getEquips(3).length>0||player.getEquips(4).length>0) return Infinity;
},
},
enable:'phaseUse',
@ -8325,7 +8331,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isMin()) return false;
var es=from.getCards('e');
for(var i=0;i<es.length;i++){
if(target.isEmpty(get.subtype(es[i]))) return true;
if(target.canEquip(es[i])) return true;
}
return false;
}
@ -8341,7 +8347,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0){
if(target.countCards('e',function(card){
return get.value(card,target)<0&&game.hasPlayer(function(current){
return current!=player&&current!=target&&get.attitude(player,current)<0&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)>0;
return current!=player&&current!=target&&get.attitude(player,current)<0&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
});
})>0) return 9;
}
@ -8350,7 +8356,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(current!=target&&current!=player&&get.attitude(player,current)>0){
var es=target.getCards('e');
for(var i=0;i<es.length;i++){
if(get.value(es[i],target)>0&&current.isEmpty(get.subtype(es[i]))&&get.effect(current,es[i],player,player)>0) return true;
if(get.value(es[i],target)>0&&current.canEquip(es[i])&&get.effect(current,es[i],player,player)>0) return true;
}
}
})){
@ -8366,7 +8372,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.value(es[i],target))==sgnatt&&
target.isEmpty(get.subtype(es[i]))){
target.canEquip(es[i])){
return Math.abs(att);
}
}
@ -8404,7 +8410,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},targets[0]).set('targets0',targets[0]).set('targets1',targets[1]).set('filterButton',function(button){
var targets1=_status.event.targets1;
return targets1.isEmpty(get.subtype(button.link));
return targets1.canEquip(button.link);
});
}
else{
@ -8433,7 +8439,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att2=get.sgn(get.attitude(player,current2));
if(att==att2||att2!=get.sgn(get.value(es[i],current2))) return false;
}
return current!=current2&&!current2.isMin()&&current2.isEmpty(get.subtype(es[i]));
return current!=current2&&!current2.isMin()&&current2.canEquip(es[i]);
})){
return true;
}
@ -9858,7 +9864,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else if(event.isMine()){
func(event.videoId);
}
event._result={control:'弃置化身'};
event._result={control:'更换技能'};
event.goto(1);
return;
}
@ -11709,7 +11715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!target.hasSex('male')) return false;
var card=ui.selected.cards[0];
if(!card) return false;
if(get.position(card)=='e'&&!target.isEmpty(get.subtype(card))) return false;
if(get.position(card)=='e'&&!target.canEquip(card)) return false;
return true;
},
discard:false,
@ -11718,7 +11724,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
if(get.position(cards[0])=='e') event._result={index:0};
else if(get.type(cards[0])!='equip'||!target.isEmpty(get.subtype(cards[0]))) event._result={index:1};
else if(get.type(cards[0])!='equip'||!target.canEquip(cards[0])) event._result={index:1};
else player.chooseControl().set('choiceList',[
'将'+get.translation(cards[0])+'置入'+get.translation(target)+'的装备区',
'弃置'+get.translation(cards[0]),
@ -14660,7 +14666,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rejiqiao:'机巧',
rejiqiao_info:'出牌阶段开始时你可以弃置任意张牌然后亮出牌堆顶X张牌X为你以此法弃置的牌数与其中装备牌数之和你获得其中所有非装备牌。',
relinglong:'玲珑',
relinglong_info:'锁定技。若你的装备区:没有防具牌,视为你装备【八卦阵】;没有坐骑牌,你的手牌上限+2没有宝物牌,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。',
relinglong_info:'锁定技。若你的装备区:有空置的防具栏,你视为拥有〖八卦阵〗;有空置的两种坐骑栏,你的手牌上限+2有空置的宝物栏,你视为拥有〖奇才〗;以上均满足:你使用的【杀】或普通锦囊牌不可被响应。',
ol_zhangzhang:'界张昭张纮',
olzhijian:'直谏',
olzhijian_info:'出牌阶段,你可以将一张装备牌置于其他角色的装备区(可替换原装备),然后摸一张牌。',

View File

@ -2016,7 +2016,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card.name=='sha') return Infinity;
},
targetInRange:function(card,player,target){
if(card.name=='sha'&&player.getEquip(1)) return true;
if(card.name=='sha'&&player.getEquips(1).length>0) return true;
},
},
trigger:{player:'useCard'},
@ -4089,7 +4089,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
mod:{
cardnature:function(card,player){
if(!player.getEquip(1)&&get.name(card,player)=='sha') return false;
if(player.hasEmptySlot(1)&&get.name(card,player)=='sha') return false;
},
},
trigger:{player:'useCardToPlayered'},

View File

@ -1000,7 +1000,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.storage.disableEquip!=undefined&&player.storage.disableEquip.length<5;
return player.hasEnabledSlot(1)||player.hasEnabledSlot(2)||player.hasEnabledSlot(5)||player.hasEnabledSlot('horse');
},
content:function(){
'step 0'
@ -1032,11 +1032,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:13,
result:{
player:function(player){
if(!player.isDisabled('equip2')) return 1;
if(!player.isDisabled('equip1')&&(player.countCards('h',function(card){
if(player.hasEnabledSlot('equip2')) return 1;
if(player.hasEnabledSlot('equip1')&&(player.countCards('h',function(card){
return get.name(card,player)=='sha'&&player.hasValueTarget(card);
})-player.getCardUsable('sha'))>1) return 1;
if(!player.isDisabled('equip5')&&player.countCards('h',function(card){
if(player.hasEnabledSlot('equip5')&&player.countCards('h',function(card){
return get.type2(card,player)=='trick'&&player.hasUseTarget(card);
})>1) return 1;
return -1;
@ -1114,7 +1114,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.type(card)=='equip';
},
check:function(card){
if(_status.event.player.isDisabled(get.subtype(card))) return 5;
if(!_status.event.player.canEquip(card)) return 5;
return 3-get.value(card);
},
content:function(){
@ -1268,24 +1268,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skillAnimation:true,
animationColor:'gray',
limited:true,
init:function(player){
player.storage.drlt_xiongluan=false;
},
filter:function(event,player){
if(player.storage.drlt_xiongluan) return false;
return true;
return !player.isDisabledJudge()||player.hasEnabledSlot();
},
filterTarget:function(card,player,target){
return target!=player;
},
content:function(){
player.awakenSkill('drlt_xiongluan');
player.storage.drlt_xiongluan=true;
player.disableEquip('equip1');
player.disableEquip('equip2');
player.disableEquip('equip3');
player.disableEquip('equip4');
player.disableEquip('equip5');
var disables=[];
for(var i=1;i<=5;i++){
for(var j=0;j<player.countEnabledSlot(i);j++){
disables.push(i);
}
}
if(disables.length>0) player.disableEquip(disables);
player.disableJudge();
player.addTempSkill('drlt_xiongluan1');
player.storage.drlt_xiongluan1=target;
@ -2584,11 +2581,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).set('filterCard',lib.filter.cardDiscardable);
'step 2'
if(result.bool&&result.cards.length){
if(get.type(result.cards[0])=='equip'&&!player.isDisabled(get.subtype(result.cards[0]))){
player.chooseUseTarget(result.cards[0],true,'nopopup');
var card=result.cards[0];
if(get.type(card)=='equip'&&player.hasUseTarget(card)){
player.chooseUseTarget(card,true,'nopopup');
}
else{
player.discard(result.cards[0]);
player.discard(card);
}
}
},
@ -3979,8 +3977,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
if(target.isMin()) return false;
var type=get.subtype(card);
return player!=target&&target.isEmpty(type);
return player!=target&&target.canEquip(card);
},
content:function(){
target.equip(cards[0]);
@ -5421,7 +5418,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
inherit:'bagua_skill',
filter:function(event,player){
if(!lib.skill.bagua_skill.filter(event,player)) return false;
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return true;
},
ai:{
@ -5431,7 +5428,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=7.5) return 0;
}
if(!target.isEmpty(2)) return;
if(!target.hasEmptySlot(2)) return;
return lib.skill.bagua_skill.ai.effect.target.apply(this,arguments);
}
}

View File

@ -242,87 +242,158 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
houfeng:{
audio:3,
group:'houfeng_zhengsu',
subSkill:{
zhengsu:{
audio:'houfeng1',
trigger:{global:'phaseUseBegin'},
logTarget:'player',
round:1,
filter:(event,player)=>player.inRange(event.player),
check:function(event,player){
var att=get.attitude(player,event.player);
return att>0;
filter:function(event,player){
if(!['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].some(i=>!event.player.hasSkill(i))) return false;
return player.inRange(event.player);
},
check:function(event,player){
return get.attitude(player,event.player)>0;
},
prompt2:()=>lib.translate.houfeng_info,
round:1,
logTarget:'player',
content:function(){
'step 0'
player.chooseButton(['选择'+get.translation(trigger.player)+'要进行的整肃类型',[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']],true).set('ai',()=>Math.random());
player.chooseButton(['选择'+get.translation(trigger.player)+'要进行的整肃类型',[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].filter(i=>!trigger.player.hasSkill(i)),'vcard']],true).set('ai',()=>Math.random());
'step 1'
if(result.bool){
var name=result.links[0][2],target=trigger.player;
target.addTempSkill('zhengsu',{player:['phaseDiscardAfter','phaseAfter']});
target.addTempSkill('houfeng_share',{player:['phaseDiscardAfter','phaseAfter']});
target.markAuto('houfeng_share',[player]);
target.addTempSkill(name,{player:['phaseDiscardAfter','phaseAfter']});
target.popup(name,'thunder');
player.addTempSkill('houfeng_share');
game.delayx();
}
},
subSkill:{
},
share:{
trigger:{global:['drawAfter','recoverAfter']},
charlotte:true,
onremove:true,
trigger:{player:'phaseDiscardEnd'},
forced:true,
popup:false,
charlotte:true,
filter:function(event,player){
return event.getParent(2).name=='zhengsu';
},
content:function(){
player.chooseDrawRecover(2,true);
'step 0'
if(!lib.skill.zhengsu.filter(trigger,player)){
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','houfeng3');
});
player.popup('整肃失败','fire');
game.log(player,'整肃失败');
event.finish();
return;
}
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','houfeng2');
});
player.popup('整肃成功','wood');
game.log(player,'整肃成功');
var list=player.getStorage('houfeng_share').filter(i=>i.isIn());
list.unshift(player);
event.list=list;
var num1=0,num2=0,num3=0;
for(var target of list){
num1+=get.effect(target,{name:'wuzhong'},player,player);
num2+=get.recoverEffect(target,player,player);
}
trigger.player.chooseControl('摸两张牌','回复体力','cancel2').set('prompt','整肃奖励:请选择'+get.translation(list)+'的整肃奖励').set('ai',function(){
return ['摸两张牌','回复体力','cancel2'][_status.event.goon.indexOf(Math.max.apply(Math,_status.event.goon))];
}).set('goon',[num1,num2,num3]);
'step 1'
if(result.control!='cancel2'){
if(result.control=='摸两张牌') game.asyncDraw(event.list,2);
else{
for(var i of event.list) i.recover();
}
}
else event.finish();
'step 2'
game.delayx();
},
},
},
},
houfeng1:{audio:true},
//手杀皇甫嵩
spzhengjun:{
audio:3,
group:'spzhengjun_zhengsu',
subSkill:{
zhengsu:{
audio:'spzhengjun1',
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return !player.hasSkill('zhengsu');
return ['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].some(i=>!player.hasSkill(i));
},
direct:true,
content:function(){
'step 0'
player.chooseButton([get.prompt('spzhengjun'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]).set('ai',()=>Math.random());
player.chooseButton([get.prompt('spzhengjun'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].filter(i=>!player.hasSkill(i)),'vcard']]).set('ai',()=>Math.random());
'step 1'
if(result.bool){
player.logSkill('spzhengjun',player);
player.logSkill('spzhengjun_zhengsu',player);
var name=result.links[0][2];
player.addTempSkill('zhengsu',{player:['phaseDiscardAfter','phaseAfter']});
player.addTempSkill('spzhengjun_share',{player:['phaseDiscardAfter','phaseAfter']});
player.addTempSkill(name,{player:['phaseDiscardAfter','phaseAfter']});
player.popup(name,'thunder');
game.delayx();
}
},
group:'spzhengjun_share',
subSkill:{
share:{
trigger:{player:['drawAfter','recoverAfter']},
direct:true,
filter:function(event,player){
return event.getParent(2).name=='zhengsu';
},
share:{
charlotte:true,
trigger:{player:'phaseDiscardEnd'},
forced:true,
popup:false,
content:function(){
'step 0'
if(!lib.skill.zhengsu.filter(trigger,player)){
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','spzhengjun3');
});
player.popup('整肃失败','fire');
game.log(player,'整肃失败');
event.finish();
return;
}
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','spzhengjun2');
});
player.popup('整肃成功','wood');
game.log(player,'整肃成功');
player.chooseDrawRecover(2,'整肃奖励摸两张牌或回复1点体力');
'step 1'
if(result.control=='cancel2'){event.finish();return;}
player.chooseTarget('整军是否令一名其他角色也回复1点体力或摸两张牌',lib.filter.notMe).set('ai',function(target){
var player=_status.event.player;
return Math.max(get.effect(target,{name:'wuzhong'},target,player),get.recoverEffect(target,target,player));
});
'step 1'
'step 2'
if(result.bool){
var target=result.targets[0];
player.logSkill('spzhengjun',target);
target.chooseDrawRecover(2,true);
event.target=target;
var num1=get.effect(target,{name:'wuzhong'},target,player);
var num2=get.recoverEffect(target,target,player);
player.line(target);
if(target.isHealthy()) result.index=0;
else player.chooseControl('摸牌','回血').set('prompt','整肃奖励:令'+get.translation(target)+'摸两张牌或回复1点体力').set('ai',function(){
return _status.event.goon?0:1;
}).set('goon',num1>=num2);
}
else event.finish();
'step 3'
if(result.index==0) target.draw(2);
else target.recover();
},
},
},
},
spzhengjun1:{audio:true},
spshiji:{
audio:2,
trigger:{source:'damageBegin2'},
@ -402,21 +473,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(att>0){
if(target.hasCard(function(card){
if(get.value(card,target)<=0&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0;
return current!=target&&current.canEquip(card,false)&&get.effect(current,card,player,player)>0;
})) return true;
return false;
},'e')) return 2*att;
if(!target.hasCard(function(card){
var sub=get.subtype(card,false);
return game.hasPlayer(function(current){
return current!=target&&current.isEmpty(sub);
return current!=target&&current.canEquip(card);
})
},'e')) return 1;
}
else if(att<0){
if(target.hasCard(function(card){
if(get.value(card,target)>=4.5&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0;
return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
})) return true;
return false;
},'e')) return -att;
@ -433,9 +503,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish();
'step 2'
var es=target.getCards('e',function(card){
var sub=get.subtype(card,false);
return game.hasPlayer(function(current){
return current!=target&&current.isEmpty(sub);
return current!=target&&current.canEquip(card);
})
});
if(es.length){
@ -443,7 +512,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else player.chooseButton(['移动'+get.translation(target)+'的一张装备牌',es],true).set('ai',function(button){
var player=_status.event.player,target=_status.event.getParent().target,card=button.link;
if(game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card,false))&&get.effect(current,card,player,player)>0;
return current!=target&&current.canEquip(card)&&get.effect(current,card,player,player)>0;
})) return -get.value(card,target)*get.attitude(player,target);
return 0;
});
@ -453,8 +522,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
event.card=result.links[0];
player.chooseTarget(true,'选择'+get.translation(event.card)+'的移动目标',function(card,player,target){
return target.isEmpty(_status.event.subtype);
}).set('subtype',get.subtype(event.card)).set('ai',function(target){
return target.canEquip(_status.event.card);
}).set('card',event.card).set('ai',function(target){
var evt=_status.event;
return get.effect(target,evt.getParent().card,evt.player,evt.player);
});
@ -505,26 +574,56 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
spyanji:{
audio:2,
audio:3,
group:'spyanji_zhengsu',
subSkill:{
zhengsu:{
audio:'spyanji',
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return !player.hasSkill('zhengsu');
return ['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].some(i=>!player.hasSkill(i));
},
direct:true,
content:function(){
'step 0'
player.chooseButton([get.prompt('spyanji'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'],'vcard']]);
player.chooseButton([get.prompt('spyanji'),[['zhengsu_leijin','zhengsu_bianzhen','zhengsu_mingzhi'].filter(i=>!player.hasSkill(i)),'vcard']]).set('ai',()=>Math.random());
'step 1'
if(result.bool){
player.logSkill('spyanji',player);
player.logSkill('spyanji_zhengsu',player);
var name=result.links[0][2];
player.addTempSkill('zhengsu',{player:'phaseDiscardAfter'});
player.addTempSkill(name,{player:'phaseDiscardAfter'});
player.addTempSkill('spyanji_share',{player:['phaseDiscardAfter','phaseAfter']});
player.addTempSkill(name,{player:['phaseDiscardAfter','phaseAfter']});
player.popup(name,'thunder');
game.delayx();
}
},
},
share:{
charlotte:true,
trigger:{player:'phaseDiscardEnd'},
forced:true,
popup:false,
content:function(){
if(!lib.skill.zhengsu.filter(trigger,player)){
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','spyanji3');
});
player.popup('整肃失败','fire');
game.log(player,'整肃失败');
event.finish();
return;
}
game.broadcastAll(function(){
if(lib.config.background_speak) game.playAudio('skill','spyanji2');
});
player.popup('整肃成功','wood');
game.log(player,'整肃成功');
player.chooseDrawRecover(2,'整肃奖励摸两张牌或回复1点体力');
},
},
},
},
spyanji1:{audio:true},
//蒋钦
spjianyi:{
audio:2,
@ -1204,7 +1303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
return event.card&&event.card.name=='sha'&&
event.source&&event.source.isIn()&&player!=event.source
&&event.cards.filterInD().length>0&&player.getEquip(1);
&&event.cards.filterInD().length>0&&player.getEquips(1).length>0;
},
check:function(event,player){
var card={
@ -1223,7 +1322,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return hs.contains(i);
}).length==cards.length&&player.canUse({name:'sha',cards:cards},target,false)){
var next=player.useCard({name:'sha'},cards,target,false);
if(!target.getEquip(1)) next.baseDamage=2;
if(!target.getEquips(1).length) next.baseDamage=2;
}
},
},
@ -1242,11 +1341,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card) player.gain(card,'gain2');
else{
var targets=game.filterPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length>0;
});
if(targets.length){
var target=targets.randomGet();
player.gain(target.getEquip(1),target,'give','bySelf');
player.gain(target.getEquips(1),target,'give','bySelf');
}
}
},
@ -1999,15 +2098,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(event.player!=player.storage.chuhai2) return false;
for(var i=1;i<6;i++){
if(player.isEmpty(i)) return true;
if(player.hasEmptySlot(i)) return true;
}
return false;
},
content:function(){
for(var i=1;i<7;i++){
if(player.isEmpty(i)){
if(player.hasEmptySlot(i)){
var sub='equip'+i,card=get.cardPile(function(card){
return get.subtype(card,false)==sub&&!get.cardtag(card,'gifts');
return get.subtype(card,false)==sub&&!get.cardtag(card,'gifts')&&player.canEquip(card);
});
if(card){
player.$gain2(card);
@ -2994,16 +3093,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
for(var i=1;i<6;i++){
if(target.isEmpty(i)) return true;
if(target.hasEmptySlot(i)) return true;
}
return false;
},
content:function(){
'step 0'
event.num=0;
event.num=1;
player.awakenSkill('rongbei');
'step 1'
while(!target.isEmpty(event.num)){
while(!target.hasEmptySlot(event.num)){
event.num++;
if(event.num>5){
event.finish();
@ -4602,7 +4701,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'muzhen',
filterTarget:[
function(card,player,target){
return target.countCards('h')>0&&target.isEmpty(ui.selected.cards[0]);
return target.countCards('h')>0&&target.canEquip(ui.selected.cards[0]);
},
function(card,player,target){
return target.countCards('e')>0;
@ -4610,9 +4709,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
][links[0]],
filterCard:[
function(card,player){
if(ui.selected.targets.length) return ui.selected.targets[0].isEmpty(card);
if(ui.selected.targets.length) return ui.selected.targets[0].canEquip(card);
return game.hasPlayer(function(current){
return current.countCards('h')>0&&current.isEmpty(card);
return current.countCards('h')>0&&current.canEquip(card);
})
},
true,
@ -5171,7 +5270,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chooseControl:function(event,player){
var list=[];
for(var i=1;i<6;i++){
if(player.getEquip(i)) list.push('equip'+i);
if(player.getEquips(i).length>0) list.push('equip'+i);
}
list.push('cancel2');
return list;
@ -6436,7 +6535,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spyanji_info:'出牌阶段开始时,你可以进行“整肃”。',
sp_huangfusong:'手杀皇甫嵩',
spzhengjun:'整军',
spzhengjun_info:'①出牌阶段开始时,你可进行“整肃”。②当你因整肃而摸牌或回复体力后,你可令一名其他角色选择摸两张牌或回复1点体力。',
spzhengjun_info:'①出牌阶段开始时,你可进行“整肃”。②当你因整肃而摸牌或回复体力后,你可令一名其他角色摸两张牌或回复1点体力。',
spshiji:'势击',
spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。',
sptaoluan:'讨乱',
@ -6447,7 +6546,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zjjuxiang:'拒降',
zjjuxiang_info:'限定技。一名其他角色脱离濒死状态时你可以对其造成1点伤害然后摸X张牌X为其体力上限且至多为5。',
houfeng:'厚俸',
houfeng_info:'每轮限一次。一名其他角色的出牌阶段开始时,若其在你的攻击范围内,则你可以令其进行“整肃”。然后当其于本回合内因整肃而摸牌或回复体力后,你可选择摸两张牌或回复1点体力。',
houfeng_info:'每轮限一次。一名其他角色的出牌阶段开始时,若其在你的攻击范围内,则你可以令其进行“整肃”。然后当其于本回合内因整肃而摸牌或回复体力后,你获得相同的整肃奖励。',
liuba:'刘巴',
duanbi:'锻币',
duanbi_info:'出牌阶段限一次。若场上所有角色的手牌数之和大于角色数之和的二倍则你可以令所有其他角色各弃置X张手牌X为该角色手牌数的一半且向下取整且至多为3。然后你可选择一名角色令其随机获得三张以此法被弃置的牌。',

View File

@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan','zhangzhi','lushi'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_wenqin'],
sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'],
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
sp_waitforsort:['ol_huban','ol_mengda','haopu'],
@ -28,6 +28,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
ol_wenqin:['male','wei',4,['olguangao','olhuiqi']],
haopu:['male','shu',4,['olzhenying']],
ol_mengda:['male','shu',4,['olgoude']],
ol_wanglang:['male','wei',3,['gushe','oljici']],
@ -686,6 +687,149 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//OL文钦
olguangao:{
audio:2,
trigger:{
global:'useCard2',
},
filter:function(event,player){
var card=event.card;
if(card.name!='sha') return false;
if(event.player==player){
if(game.hasPlayer(current=>{
return current.isIn()&&!event.targets.contains(current)&&player.canUse(event.card,current,false);
})){
return true;
}
return false;
}
return event.player.isIn()&&!event.targets.contains(player)&&event.player.canUse(card,player);
},
direct:true,
content:function(){
'step 0'
if(trigger.player==player){
player.chooseTarget(get.prompt('olguangao'),'为'+get.translation(trigger.card)+'额外指定一个目标。然后若你手牌数为偶数,你摸一张牌并令此牌对任意目标无效。',(card,player,target)=>{
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target,false);
}).set('sourcex',trigger.targets).set('ai',function(target){
var player=_status.event.player;
var eff=get.effect(target,_status.event.card,player,player);
if(player.countCards('h')%2==0&&player.hasSkill('olxieju')&&player.isPhaseUsing()&&!player.getStat().skill.olxieju) return 1-eff;
return eff;
}).set('card',trigger.card);
}
else{
trigger.player.chooseBool('是否发动'+get.translation(player)+'的【犷骜】?','令其成为'+get.translation(trigger.card)+'的额外目标。然后若其手牌数为偶数,其摸一张牌并令此牌对任意目标无效。').set('ai',()=>{
return _status.event.bool;
}).set('bool',function(){
var att=get.attitude(trigger.player,player);
var eff=get.effect(player,trigger.card,trigger.player,trigger.player);
if(player.countCards('h')%2==0&&att>0) return true;
if(eff>0) return true;
return false;
}());
}
'step 1'
if(result.bool){
var target=result.targets&&result.targets[0];
if(!target){
target=player;
trigger.player.logSkill('olguangao',player);
}
else{
player.logSkill('olguangao',target);
}
trigger.targets.add(target);
game.delayex();
}
else event.finish();
'step 2'
if(player.countCards('h')%2==0){
player.draw();
player.chooseTarget('犷骜:令此杀对其任意个目标无效',[1,Infinity],true,(card,player,target)=>{
return _status.event.targetsx.contains(target);
}).set('ai',target=>{
return 1-get.effect(target,_status.event.getTrigger().card,_status.event.player,_status.event.player);
}).set('targetsx',trigger.targets);
}
else event.finish();
'step 3'
if(result.bool){
player.line(result.targets);
trigger.excluded.addArray(result.targets);
}
}
},
olhuiqi:{
audio:2,
trigger:{
global:'phaseEnd',
},
juexingji:true,
forced:true,
skillAnimation:true,
animationColor:'thunder',
derivation:'olxieju',
filter:function(event,player){
var targets=[];
game.getGlobalHistory('useCard',evt=>{
if(evt.targets&&evt.targets.length){
targets.addArray(evt.targets);
}
});
return targets.length==3;
},
content:function(){
'step 0'
player.awakenSkill('olhuiqi');
player.addSkillLog('olxieju');
player.insertPhase();
}
},
olxieju:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return event.olxieju&&event.olxieju.length;
},
onChooseToUse:function(event){
if(!event.olxieju&&!game.online){
var targets=[];
game.getGlobalHistory('useCard',evt=>{
if(evt.targets&&evt.targets.length){
targets.addArray(evt.targets);
}
})
event.set('olxieju',targets);
}
},
filterTarget:function(card,player,target){
var event=_status.event;
if(event.olxieju.contains(target)) return true;
return false;
},
selectTarget:[1,Infinity],
content:function(){
var card={
name:'sha',
isCard:true,
};
if(target.hasUseTarget(card,true)){
target.chooseUseTarget(card,true);
}
},
ai:{
order:1,
result:{
target:function(player,target){
var val=target.getUseValue({name:'sha'},true);
return Math.sign(val);
}
}
}
},
//郝普
olzhenying:{
audio:2,
@ -4623,12 +4767,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(event.name=='phase'&&game.phaseNumber!=0) return false;
return player.countDisabled()<5;
return player.hasEnabledSlot();
},
content:function(){
var list=[];
for(var i=1;i<6;i++){
if(!player.isDisabled(i)) player.disableEquip(i);
for(var j=0;j<player.countEnabledSlot(i);j++){
list.push(i);
}
}
player.disableEquip(list);
player.draw(4);
},
mod:{
@ -4649,13 +4797,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
onremove:true,
filter:function(event,player){
var es=player.countCards('e');
return (player.countDisabled()>0&&player.countCards('he')>0)||(!player.storage.fenrui&&game.hasPlayer(function(current){
return (player.hasDisabledSlot()&&player.countCards('he')>0)||(!player.storage.fenrui&&game.hasPlayer(function(current){
return current!=player&&current.countCards('e')<es;
}));
},
content:function(){
'step 0'
if(player.countDisabled()>0&&player.countCards('he')>0){
if(player.hasDisabledSlot()&&player.countCards('he')>0){
var str='弃置一张牌,恢复一个装备栏并使用一张对应装备牌';
player.chooseToDiscard('he',get.prompt('fenrui'),str).set('ai',function(card){
return 7-get.value(card);
@ -4668,7 +4816,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
var list=[2,5,1,3,4];
for(var i of list){
if(player.isDisabled(i)) return 'equip'+i;
if(player.hasDisabledSlot(i)) return 'equip'+i;
}
});
}
@ -5816,16 +5964,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.card=card;
player.addSkill('olshengong_destroy');
player.markAuto('olshengong_destroy',[card]);
var subtype=get.subtype(card);
if(!game.hasPlayer(function(current){
return !current.isDisabled(subtype);
return current.canEquip(card);
})){
event.finish();
return;
}
player.chooseTarget(true,'将'+get.translation(card)+'置于一名角色的装备区内',function(card,player,target){
return !target.isDisabled(_status.event.subtype);
}).set('subtype',subtype).set('ai',function(target){
return target.canEquip(_status.event.card);
}).set('card',card).set('ai',function(target){
var card=_status.event.getParent().card,player=_status.event.player;
return get.effect(target,card,player,player);
});
@ -5901,16 +6048,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return !event.numFixed&&event.num>0;
},
check:function(event,player){
if(player.isEmpty(2)||player.isEmpty(5)||player.isEmpty(1)) return true;
if(player.hasEmptySlot(2)||player.hasEmptySlot(5)||player.hasEmptySlot(1)) return true;
return false;
},
prompt2:'摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
content:function(){
'step 0'
player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){
if(player.isEmpty(2)) return 'equip2';
if(player.isEmpty(5)) return 'equip5';
if(player.isEmpty(1)) return 'equip1';
if(player.hasEmptySlot(2)) return 'equip2';
if(player.hasEmptySlot(5)) return 'equip5';
if(player.hasEmptySlot(1)) return 'equip1';
return 'equip6';
});
'step 1'
@ -7447,7 +7594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
getNum:function(player,target){
var num=0;
if(target.isHealthy()) num++;
if(target.getEquip(2)) num++;
if(target.getEquips(2).length) num++;
var countSkill=function(player){
return player.getSkills(null,false,false).filter(function(skill){
var info=get.info(skill);
@ -7818,7 +7965,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'phaseBegin'},
direct:true,
filter:function(event,player){
return event.player.isIn()&&event.player.isEmpty(5)&&player.hasCard(lib.skill.zhuangshu.filterCard,'he');
return event.player.isIn()&&event.player.hasEmptySlot(5)&&player.hasCard(lib.skill.zhuangshu.filterCard,'he');
},
filterCard:function(card){
if(_status.connectMode) return true;
@ -7842,13 +7989,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
var name='zhuangshu_'+get.type2(result.cards[0],result.cards[0].original=='h'?player:false);
if(lib.card[name]&&trigger.player.isIn&&trigger.player.isEmpty(5)){
if(lib.card[name]&&trigger.player.isIn&&trigger.player.hasEmptySlot(5)){
var target=game.findPlayer(function(current){
var equip=current.getEquip(5);
var equip=current.getEquip(name);
return equip&&equip.name==name;
});
if(target){
var card=target.getEquip(5);
var card=target.getEquip(name);
target.$give(card,trigger.player,false);
}
else{
@ -7898,8 +8045,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.type!='discard'||event.getlx===false) return false;
return game.hasPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
var cards=current.getEquips(5);
if(!cards.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
}
var evt=event.getl(current);
if(!evt||!evt.cards2) return false;
@ -7914,8 +8061,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=[];
game.countPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
var cards=current.getEquips(5);
if(!cards.some(card=>card.name.indexOf('zhuangshu_')==0)) return false;
}
var evt=trigger.getl(current);
for(var i of evt.cards2){
@ -9856,14 +10003,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.storage.youlong2) player.storage.youlong2=[];
},
hiddenCard:function(player,name){
if(player.storage.youlong2.contains(name)||player.countDisabled()>=5) return false;
if(player.storage.youlong2.contains(name)||!player.hasEnabledSlot()) return false;
if(player.hasSkill('youlong_'+(player.storage.youlong||false))) return false;
var type=get.type(name);
if(player.storage.youlong) return type=='basic';
return type=='trick';
},
filter:function(event,player){
if(player.storage.youlong2.contains(name)||player.countDisabled()>=5) return false;
if(player.storage.youlong2.contains(name)||!player.hasEnabledSlot()) return false;
if(player.hasSkill('youlong_'+(player.storage.youlong||false))) return false;
var type=player.storage.youlong?'basic':'trick';
for(var name of lib.inpile){
@ -9882,7 +10029,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
table.style.width='100%';
table.style.position='relative';
for(var i=1;i<6;i++){
if(player.isDisabled(i)) continue;
if(!player.hasEnabledSlot(i)) continue;
var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
td.innerHTML='<span>'+get.translation('equip'+i)+'</span>';
td.link=i;
@ -10038,13 +10185,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.awakenSkill('luanfeng');
trigger.player.recover(3-trigger.player.hp);
'step 1'
var num=trigger.player.countDisabled();
if(num){
var list=[];
for(var i=1;i<6;i++){
if(trigger.player.isDisabled(i)) trigger.player.enableEquip(i);
for(var j=0;j<player.countDisabledSlot(i);j++){
list.push(i);
}
}
trigger.player.drawTo(6-num);
if(list.length>0) player.enableEquip(list);
if(list.length<6) trigger.player.drawTo(6-list.length);
if(trigger.player.storage.kotarou_rewrite) trigger.player.storage.kotarou_rewrite=[];
if(player==trigger.player) player.storage.youlong2=[];
},
@ -10298,7 +10446,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
direct:true,
filter:function(event,player){
return player!=event.player&&!event.player.storage._disableJudge&&event.player.countCards('he')&&!event.player.countCards('j');
return player!=event.player&&!event.player.isDisabledJudge()&&event.player.countCards('he')&&!event.player.countCards('j');
},
content:function(){
'step 0'
@ -10557,17 +10705,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',targets[1]).set('addCount',false);
'step 2'
var card=targets[0].getEquip(1);
if(!result.bool&&card){
event.card=card;
player.chooseTarget(true,'将'+get.translation(card)+'交给一名其他角色').set('ai',function(target){
var card=_status.event.getParent().card;
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(card));
var cards=targets[0].getEquips(1);
if(!result.bool&&cards.length){
event.cards=cards;
player.chooseTarget(true,'将'+get.translation(cards)+'交给一名其他角色').set('ai',function(target){
var card=_status.event.getParent().cards;
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(cards[0]));
});
}
else event.finish();
'step 3'
result.targets[0].gain(card,result.targets[0],'give').giver=player;
result.targets[0].gain(cards,result.targets[0],'give').giver=player;
},
ai:{
order:4,
@ -11875,12 +12023,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){
'step 0'
player.chooseTarget(get.prompt('new_mumu'),'弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌',function(card,player,target){
if(target==player) return target.getEquip(2)!=undefined;
if(target==player) return target.getEquips(2).length>0;
return target.countCards('e')>0;
}).set('ai',function(target){
var player=_status.event.player;
var att=get.attitude(player,target)
if(target.getEquip(2)&&player.isEmpty(2)){
if(target.getEquip(2)&&player.hasEmptySlot(2)){
return -2*att;
}
return -att;
@ -11890,12 +12038,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.target=result.targets[0];
player.logSkill('new_mumu',event.target);
player.line(event.target,'green');
var e=event.target.getEquip(2);
var e=event.target.getEquips(2);
event.e=e;
if(target==player) event.choice='获得一张防具牌';
else if(e){
else if(e.length>0){
player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){
if(_status.event.player.getEquip(2)){
if(_status.event.player.getEquips(2).length>0){
return '弃置一张装备牌';
}
return '获得一张防具牌';
@ -11904,7 +12052,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{
event.choice='弃置一张装备牌';
}
}else event.finish();
}
else event.finish();
'step 2'
var choice=event.choice||result.control;
if(choice=='弃置一张装备牌'){
@ -12678,8 +12827,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.gain(card,'gain2');
}
'step 2'
var equip1=target.getEquip(1);
if(equip1){
var equip1=target.getEquips(1);
if(equip1.length){
game.delay();
target.give(equip1,player);
target.line(player);
@ -12716,8 +12865,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.list=result.targets.slice(0);
}
'step 2'
var equip1=player.getEquip(1);
if(equip1){
var equip1=player.getEquips(1);
if(equip1.length){
for(var i=0;i<event.list.length;i++){
if(event.list[i].isDead()) event.list.splice(i--,1);
}
@ -16127,20 +16276,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'linglong_bagua',
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'&&!player.getEquip(1)) return num+1;
if(card.name=='sha'&&player.hasEmptySlot(1)) return num+1;
},
maxHandcard:function(player,num){
if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return;
if(!player.hasEmptySlot(3)||!player.hasEmptySlot(4)) return;
return num+1;
},
targetInRange:function(card,player,target,now){
if(player.getEquip(5)) return;
if(!player.hasEmptySlot(5)) return;
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
},
canBeDiscarded:function (card,source,player){
if(player.getEquip(5)) return;
if(get.position(card)=='e'&&['equip2','equip5'].contains(get.subtype(card))) return false;
if(!player.hasEmptySlot(5)) return;
if(get.position(card)=='e'&&get.subtypes(card).some(slot=>slot=='equip2'||slot=='equip5')) return false;
},
/*cardDiscardable:function (card,player){
if(player.getEquip(5)) return;
@ -16154,7 +16303,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
inherit:'bagua_skill',
filter:function(event,player){
if(!lib.skill.bagua_skill.filter(event,player)) return false;
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return true;
},
ai:{
@ -16715,15 +16864,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filterTarget:function(card,player,target){
if(target==player) return false;
return target.getEquip(1)||target.getEquip(2);
return target.getEquips(1).length>0||target.getEquips(2).length>0;
},
content:function(){
'step 0'
var e1=target.getEquip(1);
var e2=target.getEquip(2);
var e1=target.getEquips(1);
var e2=target.getEquips(2);
event.e1=e1;
event.e2=e2;
if(e1&&e2){
if(e1.length&&e2.length){
player.chooseControl('武器牌','防具牌').set('ai',function(){
if(_status.event.player.getEquip(2)){
return '武器牌';
@ -16731,7 +16880,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '防具牌';
});
}
else if(e1){
else if(e1.length){
event.choice='武器牌';
}
else{
@ -18720,7 +18869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.turnOver();
"step 1"
var num=game.countPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length;
});
player.draw(2+num);
player.addSkill('kuiwei2');
@ -18739,7 +18888,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:false,
content:function(){
var num=game.countPlayer(function(current){
return current.getEquip(1);
return current.getEquips(1).length;
});
if(num>=player.countCards('he')){
player.discard(player.getCards('he'));
@ -20901,7 +21050,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
position:'he',
filterTarget:function(card,player,target){
return target.isEmpty(get.subtype(card));
return target.canEquip(card);
},
ai1:function(card){
return 6-get.value(card);
@ -21160,7 +21309,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 1"
if(result.bool){
event.card=result.links[0];
if(player.isEmpty(get.subtype(event.card))){
if(player.canEquip(event.card)){
player.chooseBool('是否将'+get.translation(event.card)+'置入自己的装备区?').ai=function(){
return true;
};
@ -21870,7 +22019,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//priority:15,
filter:function (event,player){
if(player.hasSkill('smh_huoji')||player.hasSkill('smh_lianhuan')) return false;
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
if(event.nature) return true;
return get.type(event.card,'trick')=='trick';
},
@ -21887,7 +22036,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=8) return 0;
}
if(!target.isEmpty(2)) return;
if(!target.hasEmptySlot(2)) return;
if(get.tag(card,'natureDamage')) return 'zerotarget';
if(get.type(card)=='trick'&&get.tag(card,'damage')){
return 'zeroplayertarget';
@ -22499,6 +22648,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ruiji:['dc_ruiji','ruiji'],
jsp_huangyueying:['jsp_huangyueying','re_jsp_huangyueying'],
ganfuren:['dc_ganfuren','ganfuren'],
wenqin:['wenqin','pe_wenqin'],
},
translate:{
"xinfu_lingren":"凌人",
@ -23583,6 +23733,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
haopu:'郝普',
olzhenying:'镇荧',
olzhenying_info:'出牌阶段限两次。你可以选择一名手牌数不大于你的其他角色,你与其同时将手牌摸或弃置至至多两张。然后你与其中手牌数较少的角色视为对另一名角色使用一张【决斗】。',
ol_wenqin:'文钦',
olguangao:'犷骜',
olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(使用者不为你则有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效。',
olhuiqi:'彗企',
olhuiqi_info:'觉醒技。一名角色回合结束后,若仅有三名角色于此回合成为过牌的目标,你获得〖偕举〗并获得一个额外的回合。',
olxieju:'偕举',
olxieju_info:'出牌阶段限一次。你可以令任意名本回合成为过牌的目标的角色依次视为使用一张【杀】。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

View File

@ -1139,7 +1139,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.num=target.countCards('e');
var subtypes=[];
for(var i=1;i<7;i++){
if(target.isEmpty(i)) subtypes.push('equip'+i);
if(target.hasEmptySlot(i)) subtypes.push('equip'+i);
}
if(subtypes.length){
subtypes.randomSort();
@ -4075,7 +4075,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
return player.countDisabled()<5;
return player.hasEnabledSlot();
},
content:function(){
'step 0'
@ -4108,7 +4108,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
var cardType=result.control;
event.cardType=cardType;
var num=player.countDisabled();
var num=player.countDisabledSlot();
if(num<5) player.draw(5-num);
player.chooseTarget(lib.filter.notMe,'是否令一名其他角色从牌堆中使用一张'+get.translation(cardType)+'牌?').set('ai',function(target){
var player=_status.event.player,type=_status.event.cardType;
@ -4134,7 +4134,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'disableEquipAfter'},
forced:true,
filter:function(event,player){
return player.countDisabled()>=5;
return !player.hasEnabledSlot();
},
content:function(){
player.gainMaxHp(2);
@ -4630,7 +4630,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return !player.storage._disableJudge&&game.hasPlayer(function(current){
return !player.isDisabledJudge()&&game.hasPlayer(function(current){
return current!=player&&current.countCards('j',function(card){
return player.canAddJudge(card);
})>0;
@ -5874,7 +5874,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.countDisabled()<5;
return player.hasEnabledSlot();
},
chooseButton:{
dialog:function(event,player){
@ -5883,14 +5883,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chooseControl:function(event,player){
var list=[];
for(var i=1;i<6;i++){
if(!player.isDisabled(i)) list.push('equip'+i);
if(player.hasEnabledSlot(i)) list.push('equip'+i);
}
list.push('cancel2');
return list;
},
check:function(event,player){
for(var i=5;i>0;i--){
if(player.isEmpty(i)) return ('equip'+i);
if(player.hasEmptySlot(i)) return ('equip'+i);
}
return 'cancel2';
},
@ -5988,7 +5988,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.gainMaxHp();
player.recover();
'step 1'
if(player.countDisabled()>=5){
if(!player.hasEnabledSlot()){
player.loseMaxHp(4);
player.addSkill('tuxing2');
}
@ -8005,10 +8005,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.markAuto('pingjian',[result.control]);
player.addTempSkill(result.control);
player.storage.pingjian_check[result.control]=(trigger.name=='damage'?trigger:'phaseJieshu');
if(trigger.name=='damage'){
var info=lib.translate[result.control+'_info'];
if(info&&info.indexOf('1点伤害')+info.indexOf('一点伤害')!=-2) trigger.num=1;//暂时想到的让多点伤害只执行一次的拙见
}
},
group:'pingjian_use',
phaseUse_special:[],
@ -8986,7 +8982,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<event.toequip.length;i++){
if(get.type(card)=='equip'&&get.subtype(card)==get.subtype(event.toequip[i])) bool1=false;
}
return (get.type(card)=='equip'&&!event.toequip.contains(card)&&target.isEmpty(get.subtype(card))&&bool1);
return (get.type(card)=='equip'&&!event.toequip.contains(card)&&target.hasEmptySlot(card)&&bool1);
});
if(equip) event.toequip.push(equip);
else event.num=0;
@ -10018,7 +10014,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return str;
},
},
perfectPair:{},
perfectPair:{
nanhualaoxian:['zuoci','yuji'],
re_nanhualaoxian:['zuoci','yuji'],
},
characterReplace:{
lijue:['lijue','ns_lijue'],
fanchou:['fanchou','tw_fanchou','ns_fanchou'],

View File

@ -5,8 +5,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
standard:{
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan","re_lidian"],
standard_2013:["huaxiong","re_yuanshu","re_xushu"],
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan"],
standard_2013:["huaxiong","re_yuanshu","re_xushu","re_lidian"],
standard_2019:["gongsunzan","xf_yiji"],
standard_2023:["std_panfeng"],
},
@ -2223,8 +2223,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
player.awakenSkill('zhanshen');
var card=player.getEquip(1);
if(card) player.discard(card);
var card=player.getEquips(1);
if(cards.length) player.discard(card);
player.loseMaxHp();
player.addSkill('mashu');
player.addSkill('shenji');

View File

@ -4801,7 +4801,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
num=Math.min(num,5+player.countCards('h'));
player.drawTo(num);
if(!player.storage._disableJudge){
if(!player.isDisabledJudge()){
player.disableJudge();
event.finish();
}
@ -5960,7 +5960,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:['enterGame','phaseZhunbeiBegin']
},
filter:function(event,player){
if(player.getEquip(1)) return false;
if(player.getEquips(1).length) return false;
return event.name!='phase'||game.phaseNumber==0;
},
forced:true,
@ -6000,7 +6000,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
filter:function(event,player){
if(!player.getEquip(1)) return false;
if(!player.getEquips(1).length) return false;
return game.hasPlayer(function(current){
return player.inRange(current)&&player.canCompare(current);
});
@ -6052,8 +6052,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
else if(!result.tie){
var card=player.getEquip(1);
if(card) target.gain(card,player,'give');
var card=player.getEquips(1);
if(card.length) target.gain(card,player,'give');
}
},
mod:{
@ -6073,7 +6073,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'twjianwei',
trigger:{player:'compare',target:'compare'},
filter:function(event,player){
if(!player.getEquip(1)||player.getAttackRange()<=0) return false;
if(!player.getEquips(1).length||player.getAttackRange()<=0) return false;
if(event.player==player) return !event.iwhile;
return true;
},
@ -6112,8 +6112,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
if(!result.tie){
if(result.bool){
var card=player.getEquip(1);
if(card) trigger.player.gain(card,player,'give');
var card=player.getEquips(1);
if(card.length) trigger.player.gain(card,player,'give');
}
else {
var num=0;
@ -6499,7 +6499,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
game.log(player,'成功完成使命');
player.awakenSkill('twchuhai');
if(!player.storage._disableJudge) player.disableJudge();
if(!player.isDisabledJudge()) player.disableJudge();
event.current=player.next;
'step 1'
if(!event.current.countCards('he')) event.goto(3);
@ -8412,8 +8412,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
var list=_status.event.list,link=button.link;
if(list.contains(link)){
if(player.isDisabled(4)) return '攻击马';
if(player.isDisabled(3)) return '防御马';
if(player.hasDisabledSlot(4)) return '攻击马';
if(player.hasDisabledSlot(3)) return '防御马';
return '攻击马';
}
if(!list.contains(link)){
@ -8483,7 +8483,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
usable:1,
content:function(){
var card=get.cardPile(function(card){
return get.type(card)=='equip'&&player.isEmpty(get.subtype(card));
return get.type(card)=='equip'&&player.canEquip(card);
});
if(card){
player.$gain2(card);
@ -9013,12 +9013,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var val=get.value(i);
if(att>0){
if(val<=Math.min(0,equip)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(i))&&get.effect(current,i,player,player)>0;
return current!=target&&current.canEquip(i)&&get.effect(current,i,player,player)>0;
})) equip=val;
}
else{
if(val>Math.max(0,equip)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(i))&&get.effect(current,i,player,player)>0;
return current!=target&&current.canEquip(i)&&get.effect(current,i,player,player)>0;
})) equip=val;
}
}
@ -9121,7 +9121,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.canAddJudge(button.link);
}
else{
return targets1.isEmpty(get.subtype(button.link));
return targets1.canEquip(button.link);
}
}).set('ai',function(button){
var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets0;
@ -11538,7 +11538,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterCard:{type:'equip'},
filterTarget:function(card,player,target){
var card=ui.selected.cards[0];
return target.isEmpty(get.subtype(card));
return target.canEquip(card);
},
discard:false,
lose:false,
@ -11657,7 +11657,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
return !player.isDisabled('equip3')||!player.isDisabled('equip4');
return player.hasEnabledSlot(3)||player.hasEnabledSlot(4);
},
skillAnimation:true,
animationColor:'water',
@ -11673,8 +11673,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
event.target=result.targets[0];
var list=[];
if(!player.isDisabled(3)) list.push('equip3');
if(!player.isDisabled(4)) list.push('equip4');
if(player.hasEnabledSlot(3)) list.push('equip3');
if(!player.hasEnabledSlot(4)) list.push('equip4');
if(list.length==1) event._result={control:list[0]};
else player.chooseControl(list).set('prompt','选择废除一个坐骑栏');
}
@ -11695,16 +11695,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true,
filter:function(event,player){
for(var i of player.getStorage('twjuezhu_restore')){
if(i[0]==event.player&&player.isDisabled(i[1])) return true;
if(i[0]==event.player&&player.hasEnabledSlot(i[1])) return true;
}
return false;
},
content:function(){
var list=[];
for(var i of player.getStorage('twjuezhu_restore')){
if(i[0]==trigger.player&&player.isDisabled(i[1])) list.add(i[1]);
if(i[0]==trigger.player&&player.hasEnabledSlot(i[1])) list.push(i[1]);
}
for(var i of list) player.enableEquip(i);
player.enableEquip(list);
},
},
},
@ -12151,7 +12151,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
locked:false,
filter:function(event,player){
return (event.name!='phase'||game.phaseNumber==0)&&!player.isDisabled(1);
return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1);
},
content:function(){
if(!lib.inpile.contains('meiyingqiang')){
@ -12160,7 +12160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else{
var card=get.cardPile(function(card){
return card.name=='meiyingqiang'&&card!=player.getEquip(1);
return card.name=='meiyingqiang'&&!player.getEquips(1).contains(card);
},'field');
if(card) player.equip(card);
}

View File

@ -4,7 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'xianding',
connect:true,
character:{
dc_duyu:['male','wei',3,['dcjianguo','dcdyqingshi'],['unseen']],
dc_duyu:['male','wei',4,['dcjianguo','dcdyqingshi']],
ganfurenmifuren:['female','shu',3,['dcchanjuan','dcxunbie']],
dc_ganfuren:['female','shu',3,['dcshushen','dcshenzhi']],
dc_mifuren:['female','shu',3,['dcguixiu','dccunsi']],
@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huanfan:['male','wei',3,['dcjianzheng','dcfumou']],
chentai:['male','wei',4,['dcctjiuxian','dcchenyong']],
sunyu:['male','wu',3,['dcquanshou','dcshexue'],['unseen']],
xizheng:['male','shu',3,['dcdanyi','dcwencan'],['unseen']],
xizheng:['male','shu',3,['dcdanyi','dcwencan']],
dc_ruiji:['female','wu',4,['dcwangyuan','dclingyin','dcliying']],
zerong:['male','qun',4,['dccansi','dcfozong']],
xielingyu:['female','wu',3,['dcyuandi','dcxinyou']],
@ -1556,6 +1556,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
storage:{dcctjiuxian:true}
},true);
},
ai:{
order:5.5,
result:{player:1},
},
subSkill:{
help:{
trigger:{global:'damageSource'},
@ -1827,12 +1831,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!event.targets||!event.targets.length) return false;
var evt=lib.skill.dcjianying.getLastUsed(player,event.getParent());
if(!evt||!evt.targets||!evt.targets.length||evt.targets.length!=event.targets.length) return false;
var targetsx=event.targets.slice().sort((a,b)=>a.seatNum-b.seatNum);
var targetsy=evt.targets.slice().sort((a,b)=>a.seatNum-b.seatNum);
for(var i=0;i<targetsx.length;i++){
if(targetsx[i]!=targetsy[i]) return false;
}
return true;
var targetsx=event.targets.slice();
var targetsy=evt.targets.slice();
return targetsx.slice().removeArray(targetsy).length==0&&targetsy.slice().removeArray(targetsx).length==0;
},
frequent:true,
locked:false,
@ -2951,15 +2952,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.filter.filterTarget.apply(this,arguments);
}).set('addCount',false).set('source',player).set('prompt2','对除'+get.translation(player)+'外的一名角色使用一张【杀】,并将装备区内的武器牌交给其中一名目标角色;或点击“取消”,令'+get.translation(player)+'视为对你使用一张【杀】,并获得你装备区内的武器牌');
'step 2'
var card=targets[0].getEquip(1);
var card=targets[0].getEquips(1);
if(result.bool){
player.addSkill('dclianji_1');
if(card&&result.targets.filter(target=>target.isIn()).length>0){
if(card.length&&result.targets.filter(target=>target.isIn()).length>0){
event.card=card;
targets[0].chooseTarget(true,'将'+get.translation(card)+'交给一名目标角色',(card,player,target)=>{
return _status.event.targets.contains(target);
}).set('ai',function(target){
var card=_status.event.getParent().card;
var card=_status.event.getParent().card[0];
return (target.hasSkillTag('nogain')?0:get.attitude(_status.event.player,target))*Math.max(0.1,target.getUseValue(card));
}).set('targets',result.targets);
} else event.finish();
@ -2974,8 +2975,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 4'
player.useCard({name:'sha',isCard:true},targets[0],false);
'step 5'
var card=targets[0].getEquip(1);
if(card) targets[0].give(card,player,'give');
var card=targets[0].getEquips(1);
if(card.length) targets[0].give(card,player,'give');
},
ai:{
order:4,
@ -4246,7 +4247,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
}
else{
return !player.isDisabled(5);
return player.hasEquipableSlot(5);
}
},
direct:true,
@ -5241,7 +5242,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
content:function(){
if(player.isDisabled(5)||player.getEquip('dagongche')){
if(!player.hasEquipableSlot(5)||player.getEquip('dagongche')){
var next=player.phaseUse();
event.next.remove(next);
trigger.getParent().next.push(next);
@ -8645,7 +8646,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.num=1;
'step 1'
var type='equip'+num;
if(!player.isEmpty(type)) return;
if(!player.hasEmptySlot(type)) return;
var card=get.cardPile2(function(card){
return get.subtype(card,false)==type&&player.canUse(card,player);
});
@ -10745,7 +10746,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinyingbing_info:'锁定技。每回合每名角色限一次,当你使用牌指定有“咒”的角色为目标后,你摸两张牌。',
wufan:'吴范',
tianyun:'天运',
tianyun_info:'①游戏的第一个回合开始前你从牌堆中获得手牌区内没有的花色的各一张牌。②一名角色的回合开始时若其座位号等于游戏轮数则你可观看牌堆顶的X张牌并以任意顺序置于牌堆顶或牌堆。若你将所有的牌均置于了牌堆底则你可以令一名角色摸X张牌然后失去1点体力。X为你手牌中包含的花色数',
tianyun_info:'①游戏的第一个回合开始前你从牌堆中获得手牌区内没有的花色的各一张牌。②一名角色的回合开始时若其座位号等于游戏轮数则你可观看牌堆顶的X张牌并以任意顺序置于牌堆顶或牌堆。若你将所有的牌均置于了牌堆底则你可以令一名角色摸X张牌然后失去1点体力。X为你手牌中包含的花色数',
wfyuyan:'预言',
wfyuyan_info:'一轮游戏开始时,你选择一名角色(对其他角色不可见):当第一次有角色于本轮内进入濒死状态时,若其是你选择的角色,则你获得〖奋音〗直到你的回合结束;当第一次有角色于本轮内造成伤害后,若其是你选择的角色,则你摸两张牌。',
re_fengfangnv:'冯妤',

View File

@ -1586,7 +1586,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_andong":"安东",
"xinfu_andong_info":"当你受到伤害时你可以令伤害来源选择一项1.令你观看其的手牌并获得其中的所有红桃牌2.防止此伤害,然后其本回合内的红桃手牌不计入手牌上限。",
"xinfu_yingshi":"应势",
"xinfu_yingshi_info":"出牌阶段开始时,若场上的所有角色均没有「酬」,则你可以将所有的红桃牌置于一名其他角色的武将牌旁,称之为「酬」。有「酬」的角色受到「杀」的伤害/死亡时,伤害来源/你获得其中的一张/所有的「酬」。",
"xinfu_yingshi_info":"出牌阶段开始时,若场上的所有角色均没有「酬」,则你可以将所有的红桃牌置于一名其他角色的武将牌旁,称之为「酬」。有「酬」的角色受到【杀】的伤害后/死亡时,伤害来源/你获得其中的一张/所有的「酬」。",
"yingshi_heart":"应势",
"yingshi_heart_info":"",
"yingshi_die":"应势",

View File

@ -6231,7 +6231,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
var num=Math.min(game.countPlayer(function(current){
return player.inRange(current);
}),player.getEquip(1)?4:2);
}),player.getEquips(1).length?4:2);
if(trigger.target.countCards('h')<num){
event.directfalse=true;
}
@ -6256,8 +6256,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
var e1=player.getEquips(1);
if(e1.length){
player.discard(e1,'notBySelf');
}
event.finish();
@ -6318,14 +6318,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.attitude(player,event.player)<0;
},
filter:function(event,player){
return event.getParent().name=='sha'&&player.getEquip(1);
return event.getParent().name=='sha'&&player.getEquips(1).length>0;
},
content:function(){
'step 0'
var num=1;
var info=get.info(player.getEquip(1));
var num=0,cards=player.getEquips(1);
for(var card of cards){
var numz=1;
var info=get.info(card,false);
if(info&&info.distance&&info.distance.attackFrom){
num-=info.distance.attackFrom;
numz-=info.distance.attackFrom;
}
num+=numz;
}
if(trigger.player.countCards('h')<num){
event.directfalse=true;
@ -6351,8 +6355,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(!event.directfalse&&result.bool){
var e1=player.getEquip(1);
if(e1){
var e1=player.getEquips(1);
if(e1.length){
player.discard(e1,'notBySelf');
}
}
@ -8966,7 +8970,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var prompt='弃置一张牌'
if(trigger.source.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquip(1)));
if(trigger.source.getEquips(1).length) prompt+=(',然后获得'+get.translation(trigger.source)+'装备区中的'+get.translation(trigger.source.getEquips(1)));
var next=player.chooseToDiscard('he',get.prompt('duodao',trigger.source),prompt);
next.logSkill=['duodao',trigger.source];
next.set('ai',function(card){
@ -8977,8 +8981,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 0;
});
'step 1'
if(result.bool&&trigger.source.getEquip(1)){
player.gain(trigger.source.getEquip(1),trigger.source,'give','bySelf');
if(result.bool&&trigger.source.getEquips(1).length){
player.gain(trigger.source.getEquips(1),trigger.source,'give','bySelf');
}
},
ai:{
@ -9058,27 +9062,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reduodao:{
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquip(1):player.countCards('he')>0);
return event.card.name=='sha'&&(get.color(event.card)=='red'?event.player.getEquips(1).length>0:player.countCards('he')>0);
},
direct:true,
audio:2,
content:function(){
'step 0'
var prompt='弃置一张牌'
if(trigger.player.getEquip(1)) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquip(1)));
if(trigger.player.getEquips(1).length) prompt+=(',然后获得'+get.translation(trigger.player)+'装备区中的'+get.translation(trigger.player.getEquips(1)));
var next=player.chooseToDiscard('he',get.prompt('reduodao',trigger.player),prompt);
next.logSkill=['reduodao',trigger.player];
next.set('ai',function(card){
if(!_status.event.getTrigger().player.getEquip(1)) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquip(1))<=0){
if(!_status.event.getTrigger().player.getEquips(1).length) return 0;
if(get.attitude(_status.event.player,_status.event.getTrigger().player)*get.value(_status.event.getTrigger().player.getEquips(1))<=0){
return 6-get.value(card);
}
return 0;
});
'step 1'
if(result.bool&&trigger.player.getEquip(1)){
if(result.bool&&trigger.player.getEquips(1).length){
if(!result.cards||!result.cards.length) player.logSkill('reduodao',trigger.player);
player.gain(trigger.player.getEquip(1),trigger.player,'give','bySelf');
player.gain(trigger.player.getEquips(1),trigger.player,'give','bySelf');
}
},
},
@ -10835,7 +10839,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0"
var next;
if(trigger.player.hasCard(function(card){
return player.isEmpty(get.subtype(card));
return player.canEquip(card);
},'e')){
next=player.chooseControl('移动装备','draw_card','cancel2',function(event,player){
var source=_status.event.sourcex;
@ -10865,7 +10869,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.control=='移动装备'){
player.logSkill('qieting',trigger.player);
player.choosePlayerCard(trigger.player,'e','将一张装备牌移至你的装备区',true).set('filterButton',function(button){
return _status.event.player.isEmpty(get.subtype(button.link));
return _status.event.player.canEquip(button.link);
}).set('ai',function(button){
return get.effect(player,button.link,player,player);
});
@ -11827,7 +11831,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
audio:2,
filter:function(event,player){
if(player.getEquip(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return (event.card.name=='sha'&&get.color(event.card)=='black')
},
content:function(){
@ -11836,10 +11840,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{
effect:{
target:function(card,player,target){
if(player==target&&get.subtype(card)=='equip2'){
if(player==target&&get.subtypes(card).contains('equip2')){
if(get.equipValue(card)<=8) return 0;
}
if(target.getEquip(2)) return;
if(!player.hasEmptySlot(2)) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
}
}
@ -14131,7 +14135,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
danshou_info:'出牌阶段你可以选择你攻击范围内的一名其他角色然后弃置X张牌X为此前你于此阶段你发动“胆守”的次数+1。若X为1你弃置该角色的一张牌为2令该角色交给你一张牌为3你对该角色造成1点伤害不小于4你与该角色各摸两张牌。',
olddanshou_info:'当你造成伤害后,你可以摸一张牌。若如此做,终止一切结算,当前回合结束。',
xindanshou_info:'①每回合限一次当你成为基本牌或锦囊牌的目标后你可以摸X张牌X为你本回合内成为过基本牌或锦囊牌的目标的次数。②一名其他角色的结束阶段若你本回合内没有发动过〖胆守①〗则你可以弃置X张牌并对其造成1点伤害X为其手牌数无牌则不弃。',
yizhong_info:'锁定技,当你的防具栏为空时,黑色的杀对你无效',
yizhong_info:'锁定技,当你的防具栏为空时,黑色的对你无效',
xinzhan_info:'出牌阶段限一次你可以观看牌堆顶的3张牌然后展示其中任意数量♥的牌并获得之。',
huilei_info:'锁定技,当你死亡时,杀死你的角色弃置所有的牌。',
enyuan_info:'锁定技。①当其他角色令你回复1点体力后该角色摸一张牌。②当其他角色对你造成伤害后其须交给你一张♥手牌否则失去1点体力。',

View File

@ -1945,7 +1945,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
derivation:['cheliji_sichengliangyu','cheliji_tiejixuanyu','cheliji_feilunzhanyu'],
filter:function(event,player){
return !player.getEquip(5)&&player.countCards('he',{color:'black'})>0;
return !player.getEquips(5).length&&player.countCards('he',{color:'black'})>0;
},
filterCard:{color:'black'},
position:'he',
@ -2011,7 +2011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiangshou:{
mod:{
globalFrom:function(player,target,distance){
if(player.getEquip(5)) return distance-1;
if(player.getEquips(5).length) return distance-1;
}
},
},

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.124',
'v1.9.125',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -176,7 +176,6 @@ window.noname_asset_list=[
'audio/card/male/yuanjiao.mp3',
'audio/card/male/zhibi.mp3',
'audio/die/ahuinan.mp3',
'audio/die/baosanniang.mp3',
'audio/die/beimihu.mp3',
@ -241,6 +240,7 @@ window.noname_asset_list=[
'audio/die/clan_xuncan.mp3',
'audio/die/clan_xunchen.mp3',
'audio/die/clan_xunshu.mp3',
'audio/die/clan_zhonghui.mp3',
'audio/die/cuimao.mp3',
'audio/die/cuiyan.mp3',
'audio/die/daqiao.mp3',
@ -1048,6 +1048,7 @@ window.noname_asset_list=[
'audio/die/xinping.mp3',
'audio/die/xinxianying.mp3',
'audio/die/xinzhongyong.mp3',
'audio/die/xizheng.mp3',
'audio/die/xizhicai.mp3',
'audio/die/xuangongzhu.mp3',
'audio/die/xuelingyun.mp3',
@ -1227,7 +1228,6 @@ window.noname_asset_list=[
'audio/effect/tori_no_uta.mp3',
'audio/effect/win.mp3',
'audio/skill/aichen1.mp3',
'audio/skill/aichen2.mp3',
'audio/skill/anguo1.mp3',
@ -1527,6 +1527,8 @@ window.noname_asset_list=[
'audio/skill/cixiong_skill.mp3',
'audio/skill/clanbalong1.mp3',
'audio/skill/clanbalong2.mp3',
'audio/skill/clanbaozu_clan_zhonghui1.mp3',
'audio/skill/clanbaozu_clan_zhonghui2.mp3',
'audio/skill/clanbeishi1.mp3',
'audio/skill/clanbeishi2.mp3',
'audio/skill/clanbolong1.mp3',
@ -1567,6 +1569,8 @@ window.noname_asset_list=[
'audio/skill/clanshangshen2.mp3',
'audio/skill/clanshenjun1.mp3',
'audio/skill/clanshenjun2.mp3',
'audio/skill/clanxieshu1.mp3',
'audio/skill/clanxieshu2.mp3',
'audio/skill/clanxumin_clan_hanrong1.mp3',
'audio/skill/clanxumin_clan_hanrong2.mp3',
'audio/skill/clanxumin_clan_hanshao1.mp3',
@ -1575,6 +1579,8 @@ window.noname_asset_list=[
'audio/skill/clanyirong2.mp3',
'audio/skill/clanyunshen1.mp3',
'audio/skill/clanyunshen2.mp3',
'audio/skill/clanyuzhi1.mp3',
'audio/skill/clanyuzhi2.mp3',
'audio/skill/clanzhanding1.mp3',
'audio/skill/clanzhanding2.mp3',
'audio/skill/clanzhongliu_clan_wangling1.mp3',
@ -1682,6 +1688,8 @@ window.noname_asset_list=[
'audio/skill/dccuijin2.mp3',
'audio/skill/dccuixin1.mp3',
'audio/skill/dccuixin2.mp3',
'audio/skill/dcdanyi1.mp3',
'audio/skill/dcdanyi2.mp3',
'audio/skill/dcdanying1.mp3',
'audio/skill/dcdanying2.mp3',
'audio/skill/dcdeshao1.mp3',
@ -1911,6 +1919,8 @@ window.noname_asset_list=[
'audio/skill/dcwangyuan2.mp3',
'audio/skill/dcweidang1.mp3',
'audio/skill/dcweidang2.mp3',
'audio/skill/dcwencan1.mp3',
'audio/skill/dcwencan2.mp3',
'audio/skill/dcwudao1.mp3',
'audio/skill/dcwudao2.mp3',
'audio/skill/dcwudao3.mp3',
@ -5607,8 +5617,8 @@ window.noname_asset_list=[
'audio/skill/zhuiyi_re_bulianshi2.mp3',
'audio/skill/zhuiyi1.mp3',
'audio/skill/zhuiyi2.mp3',
'audio/skill/zhujian.mp3',
'audio/skill/zhujian1.mp3',
'audio/skill/zhujian2.mp3',
'audio/skill/zhukou1.mp3',
'audio/skill/zhukou2.mp3',
'audio/skill/zhuning1.mp3',
@ -5808,6 +5818,7 @@ window.noname_asset_list=[
'image/card/duanjian.png',
'image/card/dunpaigedang.png',
'image/card/dz_mantianguohai.png',
'image/card/expandedSlots.png',
'image/card/fangtian.png',
'image/card/feibiao.png',
'image/card/feilongduofeng.png',
@ -6257,6 +6268,7 @@ window.noname_asset_list=[
'image/character/chunyuqiong.jpg',
'image/character/clan_hanrong.jpg',
'image/character/clan_hanshao.jpg',
'image/character/clan_wanghun.jpg',
'image/character/clan_wangling.jpg',
'image/character/clan_wangyun.jpg',
'image/character/clan_wuban.jpg',
@ -6266,6 +6278,7 @@ window.noname_asset_list=[
'image/character/clan_xuncan.jpg',
'image/character/clan_xunchen.jpg',
'image/character/clan_xunshu.jpg',
'image/character/clan_zhonghui.jpg',
'image/character/clan_zhongyan.jpg',
'image/character/cuimao.jpg',
'image/character/cuiyan.jpg',
@ -6278,6 +6291,7 @@ window.noname_asset_list=[
'image/character/dc_caiyang.jpg',
'image/character/dc_caozhi.jpg',
'image/character/dc_chenqun.jpg',
'image/character/dc_duyu.jpg',
'image/character/dc_fuwan.jpg',
'image/character/dc_ganfuren.jpg',
'image/character/dc_gaolan.jpg',
@ -6954,14 +6968,6 @@ window.noname_asset_list=[
'image/character/mifangfushiren.jpg',
'image/character/mifuren.jpg',
'image/character/miheng.jpg',
'image/character/mini_diaochan.jpg',
'image/character/mini_jiangwei.jpg',
'image/character/mini_lvbu.jpg',
'image/character/mini_lvmeng.jpg',
'image/character/mini_sunquan.jpg',
'image/character/mini_zhangchunhua.jpg',
'image/character/mini_zhugeliang.jpg',
'image/character/mini_zuoci.jpg',
'image/character/mizhu.jpg',
'image/character/mtg_ayeni.jpg',
'image/character/mtg_jiding.jpg',
@ -7070,6 +7076,7 @@ window.noname_asset_list=[
'image/character/ol_wanglang.jpg',
'image/character/ol_wangrong.jpg',
'image/character/ol_weiyan.jpg',
'image/character/ol_wenqin.jpg',
'image/character/ol_wuyi.jpg',
'image/character/ol_xiahouyuan.jpg',
'image/character/ol_xiaoqiao.jpg',
@ -7465,6 +7472,7 @@ window.noname_asset_list=[
'image/character/shen_caocao.jpg',
'image/character/shen_caopi.jpg',
'image/character/shen_dengai.jpg',
'image/character/shen_dianwei.jpg',
'image/character/shen_diaochan.jpg',
'image/character/shen_ganning.jpg',
'image/character/shen_guanyu.jpg',
@ -7889,6 +7897,7 @@ window.noname_asset_list=[
'image/character/xinpi.jpg',
'image/character/xinping.jpg',
'image/character/xinxianying.jpg',
'image/character/xizheng.jpg',
'image/character/xizhicai.jpg',
'image/character/xuangongzhu.jpg',
'image/character/xuelingyun.jpg',

File diff suppressed because it is too large Load Diff

View File

@ -1,67 +1,69 @@
window.noname_update={
version:'1.9.124.0.1',
update:'1.9.124',
version:'1.9.125',
update:'1.9.124.0.1',
changeLog:[
'整合@mengxinzxz @shijian的Pull Request',
'整合@Tipx-L @copcap @shijian @lieren2023 @mengxinzxz的Pull Request',
'神典韦,以及配套的一系列“额外装备栏”机制',
'OL文钦、族王浑十周年杜预、郤正',
'孙寒华新谱面+AI操作可跳过',
'bug修复',
],
files:[
//'LICENSE',
//'card/extra.js',
'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
//'card/standard.js',
'card/sp.js',
'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
//'card/yongjian.js',
'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
'card/zhulu.js',
'character/clan.js',
//'character/collab.js',
'character/collab.js',
'character/ddd.js',
//'character/diy.js',
//'character/extra.js',
//'character/hearth.js',
//'character/huicui.js',
'character/diy.js',
'character/extra.js',
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
'character/huicui.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
//'character/old.js',
'character/offline.js',
'character/old.js',
//'character/ow.js',
'character/rank.js',
//'character/refresh.js',
//'character/sb.js',
//'character/shenhua.js',
//'character/shiji.js',
//'character/rank.js',
'character/refresh.js',
'character/sb.js',
'character/shenhua.js',
'character/shiji.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
'character/standard.js',
'character/tw.js',
//'character/swd.js',
'character/xianding.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
//'character/yijiang.js',
//'character/yingbian.js',
'character/xinghuoliaoyuan.js',
'character/yijiang.js',
'character/yingbian.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'font/suits.ttf',
//'layout/default/layout.css',
'layout/default/layout.css',
//'layout/default/menu.css',
//'layout/long2/layout.css',
//'layout/mobile/equip.css',
//'layout/mobile/layout.css',
//'layout/newlayout/global.css',
//'layout/nova/layout.css',
//'mode/boss.js',
'mode/boss.js',
//'mode/brawl.js',
//'mode/chess.js',
//'mode/connect.js',
@ -71,7 +73,7 @@ window.noname_update={
//'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',
'mode/versus.js',
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',
@ -80,6 +82,7 @@ window.noname_update={
//'game/pinyinjs.js',
//'game/asset.js',
//'game/source.js',
'theme/simple/style.css',
//'theme/style/hp/custom.css',
//'theme/style/hp/emotion.css',
//'theme/style/hp/glass.css',

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

BIN
image/character/dc_duyu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
image/character/xizheng.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -387,6 +387,9 @@ table {
right: 7px;
bottom: 7px;
z-index: 1;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
#splash>div>.avatar {
width: 86px;
@ -1319,6 +1322,9 @@ body>.background.land {
top: 9px;
left: 6px;
text-align: center;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.card.fullimage>.name.long {
top: 6px;
@ -1937,6 +1943,9 @@ div:not(.handcards)>.card>.info>span,
top: 22px;
max-height: 68px;
overflow: hidden;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.button.character>.hp {
left: 5px;
@ -2170,6 +2179,9 @@ div:not(.handcards)>.card>.info>span,
top: 24px;
font-size: 20px;
font-family: 'xinwei';
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.player>.name.name2 {
left: 81px
@ -2201,7 +2213,7 @@ div:not(.handcards)>.card>.info>span,
}
.button.character>.name {
font-family: 'xinwei'
font-family: 'xinwei';
}
.player>.intro {
top: 87px;
@ -2230,6 +2242,9 @@ div:not(.handcards)>.card>.info>span,
top:calc(50% - 50px);
width: 100%;
left: 0;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.player>.chain{
top: calc(50% - 10px);
@ -2829,6 +2844,9 @@ div:not(.handcards)>.card>.info>span,
.player>.name_seat {
opacity: 0;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.player:not([data-position='0']).unseen.unseen2>.name_seat,
.player:not([data-position='0']):not(.fullskin2).unseen>.name_seat {
@ -3765,6 +3783,9 @@ div:hover>.intro {
#window>.choosedouble.character>.name {
left: 6%;
top: 8%;
white-space: nowrap;
writing-mode: vertical-rl;
-webkit-writing-mode: vertical-rl;
}
.hrefnode{
@ -4211,10 +4232,8 @@ div[data-decoration="bronze"]::after{
left: 7px;
/*border:1px solid #631515;*/
border-radius: 4px;
padding-top: 2px;
padding-bottom: 2px;
padding-left: 1px;
padding-right: 1px;
padding-top: 3px;
padding-bottom: 3px;
/*color:#631515;*/
border: 1px solid rgb(74, 29, 1);
color: rgb(74, 29, 1);
@ -4454,7 +4473,6 @@ div[data-decoration="bronze"]::after{
}
.coin_menu .content>.caption>.coin_buy>.menubutton {
width: auto;
display: inline-block;
position: relative;
float: right;
padding-left: 5px;

View File

@ -1890,7 +1890,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.num=1.5;
'step 1'
var card=cards.shift();
if(player.isEmpty(get.subtype(card))&&Math.random()<event.num){
if(player.canEquip(card)&&Math.random()<event.num){
player.equip(card);
event.num=0.5;
}
@ -2494,7 +2494,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
priority:-0.3,
equipSkill:false,
filter:function(event,player){
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return lib.skill.renwang_skill.filter.apply(this,arguments);
},
},
@ -2615,7 +2615,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
priority:6,
audio:true,
filter:function(event,player){
if(!player.isEmpty('equip2')) return false;
if(!player.hasEmptySlot('equip2')) return false;
if(event.card.name=='nanman') return true;
if(event.card.name=='wanjian') return true;
return event.card.name=='sha'&&!get.nature(event.card);
@ -2626,7 +2626,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ai:{
effect:{
target:function(card,player,target,current){
if(!target.isEmpty('equip2')) return;
if(!target.hasEmptySlot('equip2')) return;
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
if(card.name=='sha'){
var equip1=player.getEquip(1);

View File

@ -525,7 +525,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_miheng:['male','qun',3,['gzrekuangcai','gzshejian'],['gzskin']],
gz_fengxi:['male','wu',3,['gzyusui','gzboyan'],['gzskin']],
gz_dengzhi:['male','shu',3,['gzjianliang','gzweimeng'],['gzskin']],
gz_re_nanhualaoxian:['male','qun',4,['gzgongxiu','gztaidan','gzrejinghe']],
gz_re_nanhualaoxian:['male','qun',3,['gzgongxiu','gztaidan','gzrejinghe']],
gz_zhouyi:['female','wu',3,['gzzhukou','gzduannian','gzlianyou']],
gz_re_xunchen:['male','qun',3,['gzfenglve','gzanyong']],
gz_lvlingqi:['female','qun',4,['guowu','gzshenwei','gzzhuangrong'],['gzskin']],
@ -661,7 +661,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return event.player.isFriendOf(player)&&event.targets.some(target=>target.isMajor());
},
check:function(event,player){
var num=0,targets=event.targets.some(target=>target.isMajor());
var num=0,targets=event.targets.filter(target=>target.isMajor());
for(var target of targets) num+=get.sgn(get.attitude(player,target)*get.effect(target,event.card,event.player,player));
return num>=0;
},
@ -966,7 +966,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
equipSkill:true,
mod:{
maxHandcard:function(player,num){
if(!player.isEmpty(2)) return;
if(!player.hasEmptySlot(2)) return;
if(player.hasSkill('huangjintianbingfu')){
num+=player.getExpansions('huangjintianbingfu').length;
}
@ -978,14 +978,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
audio:'tianshu',
inherit:'taipingyaoshu',
filter:function(event,player){
if(!player.isEmpty(2)) return false;
if(!player.hasEmptySlot(2)) return false;
return lib.skill.taipingyaoshu.filter(event,player);
},
noHidden:true,
ai:{
effect:{
target:function(card,player,target){
if(!target.isEmpty(2)) return;
if(!target.hasEmptySlot(2)) return;
if(player==target&&get.subtype(card)=='equip2'){
if(get.equipValue(card)<=7.5) return 0;
}
@ -7619,6 +7619,146 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
yigui_gzshan:{
enable:'chooseToUse',
filter:function(event,player){
if(event.type!='respondShan'||!event.filterCard({name:'shan'},player,event)||!lib.inpile.contains('shan')) return false;
var storage=player.storage.yigui,target=event.getParent().player;
if(!storage||!target||!storage.character.length||storage.used.contains('shan')) return false;
var identity=target.identity;
return ['unknown','ye'].contains(identity)||storage.character.some(function(i){
if(lib.character[i][1]=='ye') return true;
var double=get.is.double(i,true);
var groups=(double?double:[lib.character[i][1]]);
return groups.contains(identity);
});
},
chooseButton:{
dialog:function(event,player){
var dialog=ui.create.dialog('役鬼','hidden');
dialog.add([player.storage.yigui.character,'character']);
return dialog;
},
filter:function(button,player){
var evt=_status.event.getParent('chooseToUse');
var target=evt.getParent().player,identity=target.identity;
if(['unknown','ye'].contains(identity)) return true;
if(lib.character[button.link][1]=='ye') return true;
var double=get.is.double(button.link,true);
var groups=(double?double:[lib.character[button.link][1]]);
return groups.contains(identity);
},
check:function(button){
return 1/(1+game.countPlayer(function(current){
return current.identity==button.link;
}));
},
backup:function(links,player){
var character=links[0];
var next={
character:character,
filterCard:()=>false,
selectCard:-1,
complexCard:true,
check:()=>1,
popname:true,
audio:'yigui',
viewAs:{name:'shan',isCard:true},
onuse:function(result,player){
player.logSkill('yigui');
var character=lib.skill.yigui_gzshan_backup.character;
player.flashAvatar('yigui',character);
player.storage.yigui.character.remove(character);
_status.characterlist.add(character);
game.log(player,'从「魂」中移除了','#g'+get.translation(character));
player.syncStorage('yigui');
player.updateMarks('yigui');
player.storage.yigui.used.add(result.card.name);
},
};
return next;
},
},
ai:{
respondShan:true,
skillTagFilter:function(player){
var storage=player.storage.yigui;
if(!storage||!storage.character.length||storage.used.contains('shan')||!lib.inpile.contains('shan')) return false;
},
order:0.1,
result:{player:1},
},
},
yigui_gzwuxie:{
hiddenCard:function(player,name){
var storage=player.storage.yigui;
if(name!='wuxie'||!storage||!storage.character.length||storage.used.contains(name)||!lib.inpile.contains(name)) return false;
return true;
},
enable:'chooseToUse',
filter:function(event,player){
if(event.type!='wuxie'||!event.filterCard({name:'wuxie'},player,event)||!lib.inpile.contains('wuxie')) return false;
var storage=player.storage.yigui,target=event.getParent(2).player;
if(!storage||!target||!storage.character.length||storage.used.contains('wuxie')) return false;
var identity=target.identity;
return ['unknown','ye'].contains(identity)||storage.character.some(function(i){
if(lib.character[i][1]=='ye') return true;
var double=get.is.double(i,true);
var groups=(double?double:[lib.character[i][1]]);
return groups.contains(identity);
});
},
chooseButton:{
dialog:function(event,player){
var dialog=ui.create.dialog('役鬼','hidden');
dialog.add([player.storage.yigui.character,'character']);
return dialog;
},
filter:function(button,player){
var evt=_status.event.getParent('chooseToUse');
var target=evt.getParent(2).player,identity=target.identity;
if(['unknown','ye'].contains(identity)) return true;
if(lib.character[button.link][1]=='ye') return true;
var double=get.is.double(button.link,true);
var groups=(double?double:[lib.character[button.link][1]]);
return groups.contains(identity);
},
check:function(button){
return 1/(1+game.countPlayer(function(current){
return current.identity==button.link;
}));
},
backup:function(links,player){
var character=links[0];
var next={
character:character,
filterCard:()=>false,
selectCard:-1,
complexCard:true,
check:()=>1,
popname:true,
audio:'yigui',
viewAs:{name:'wuxie',isCard:true},
onuse:function(result,player){
player.logSkill('yigui');
var character=lib.skill.yigui_gzwuxie_backup.character;
player.flashAvatar('yigui',character);
player.storage.yigui.character.remove(character);
_status.characterlist.add(character);
game.log(player,'从「魂」中移除了','#g'+get.translation(character));
player.syncStorage('yigui');
player.updateMarks('yigui');
player.storage.yigui.used.add(result.card.name);
},
};
return next;
},
},
ai:{
order:0.1,
result:{player:1},
},
},
jihun:{
trigger:{
player:'damageEnd',
@ -7858,7 +7998,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(event.numFixed||player.isDisabled(5)) return false;
return !game.hasPlayer(function(current){
return current.getEquip('yuxi');
return current.getEquips('yuxi').length>0;
})
},
content:function(){trigger.num++},
@ -7876,7 +8016,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return game.hasPlayer(function(current){
return player.canUse('zhibi',current);
})&&!game.hasPlayer(function(current){
return current.getEquip('yuxi');
return current.getEquips('yuxi').length>0;
});
},
content:function(){
@ -8243,7 +8383,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
if(!game.hasPlayer(function(current){
return !current.isUnseen()&&current.getEquip('yuxi')||current.hasSkill('gzyongsi')&&!game.hasPlayer(function(current){
return current.getEquip('yuxi');
return current.getEquips('yuxi').length>0;
});
})&&game.hasPlayer(function(current){return current!=player&&current.isUnseen()})){
var identity;
@ -10797,7 +10937,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ai:{
order:function(item,player){
if(player.hasSkillTag('noe')||!player.countCards('h',function(card){
return get.type(card)=='equip'&&player.getEquip(get.subtype(card))&&player.hasValueTarget(card);
return get.type(card)=='equip'&&!player.canEquip(card)&&player.hasValueTarget(card);
})) return 1;
return 10;
},
@ -11987,7 +12127,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(player==target) return false;
var card=ui.selected.cards[0];
if(get.type(card)!='equip') return true;
return target.isEmpty(get.subtype(card));
return target.canEquip(card);
},
prompt:get.prompt2('gzhuyuan'),
complexSelect:true,
@ -12053,7 +12193,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
position:'he',
filterTarget:function(card,player,target){
return target.isEmpty(get.subtype(card));
return target.canEquip(card);
},
ai1:function(card){
return 6-get.value(card);
@ -12728,7 +12868,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var range1=[1,player.maxHp];
if(player.hasSkill('dinglanyemingzhu_skill')){
for(var i=0;i<ui.selected.cards.length;i++){
if(ui.selected.cards[i]==player.getEquip(5)) return range1;
if(ui.selected.cards[i]==player.getEquip('dinglanyemingzhu')) return range1;
}
return [1,Infinity]
}
@ -12736,7 +12876,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
filterCard:function(card,player){
if(ui.selected.cards.length<player.maxHp||!player.hasSkill('dinglanyemingzhu_skill')) return true;
return card!=player.getEquip(5);
return card!=player.getEquip('dinglanyemingzhu');
},
complexCard:true,
complexSelect:true,
@ -14409,15 +14549,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzzongyu_info:'当【六龙骖驾】进入其他角色的装备区后,你可以将你装备区内所有坐骑牌(至少一张)与【六龙骖驾】交换位置。锁定技,当你使用坐骑牌后,若场上或弃牌堆中有【六龙骖驾】,则将【六龙骖驾】置入你的装备区。',
yigui:"役鬼",
"yigui_info":"当你首次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以展示一张“魂”并将其置入剩余武将牌堆,视为使用一张本回合内未以此法使用过的基本牌或普通锦囊牌。(此牌指定目标,且目标须为未确定势力的角色或野心家或与此“魂”势力相同的角色)",
"yigui_info":"当你首次明置此武将牌时,你将剩余武将牌堆的两张牌置于武将牌上,称为“魂”;你可以展示一张武将牌上的“魂”并将其置入剩余武将牌堆,视为使用一张本回合内未以此法使用过的基本牌或普通锦囊牌。(此牌指定目标,且目标须为未确定势力的角色或野心家或与此“魂”势力相同的角色)",
"yigui_init":"役鬼",
"yigui_init_info":"",
"yigui_refrain":"役鬼",
"yigui_refrain_info":"",
yigui_shan:'役鬼',
yigui_wuxie:'役鬼',
yigui_gzshan:'役鬼',
yigui_gzwuxie:'役鬼',
jihun:"汲魂",
jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌当做“魂”扣置于游戏外。",
jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌置于武将牌上,称为“魂”。",
_guozhan_marks:'标记',
_guozhan_marks_backup:'标记',
@ -15892,22 +16034,25 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(name2.indexOf('gz_shibing')==0) return false;
if(get.is.jun(this.name1)) return true;
if(choosing&&lib.character[name1][1]!='ye'&&lib.character[name2][1]!='ye'&&lib.character[name1][1]!=lib.character[name2][1]) return false;
var list=['re','diy','sp','jsp','shen','jg','xin','old','ol','sb','sc','gz'];
for(var i=0;i<list.length;i++){
if(name1.indexOf(list[i]+'_')==0){
name1=name1.slice(list[i].length+1);
if(name1.indexOf('gz_')==0){
name1=name1.slice(name1.indexOf('_')+1);
}
if(name2.indexOf(list[i]+'_')==0){
name2=name2.slice(list[i].length+1);
else{
while(name1.indexOf('_')!=-1&&!lib.perfectPair[name1]){
name1=name1.slice(name1.indexOf('_')+1);
}
}
if(lib.perfectPair[name1]&&lib.perfectPair[name1].contains(name2)){
return true;
if(name2.indexOf('gz_')==0){
name2=name2.slice(name2.indexOf('_')+1);
}
if(lib.perfectPair[name2]&&lib.perfectPair[name2].contains(name1)){
return true;
else{
while(name2.indexOf('_')!=-1&&!lib.perfectPair[name2]){
name2=name2.slice(name2.indexOf('_')+1);
}
return false;
}
var list=Object.keys(lib.perfectPair).concat(Object.values(lib.perfectPair)).flat(Infinity);
if(!list.contains(name1)||!list.contains(name2)) return false;
return (lib.perfectPair[name1]&&lib.perfectPair[name1].flat(Infinity).contains(name2))||(lib.perfectPair[name2]&&lib.perfectPair[name2].flat(Infinity).contains(name1));
},
siege:function(player){
if(this.identity=='unknown'||this.hasSkill('undist')) return false;

View File

@ -278,7 +278,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
game.players[i].setIdentity(list[i]);
game.players[i].node.identity.style.display='none';
game.players[i].getId();
game.players[i].node.action.innerHTML='即<br>胜';
game.players[i].node.action.innerHTML='<br>胜';
game.players[i].node.action.style.letterSpacing='0px';
game.players[i].node.action.style.lineHeight='22px';
game.players[i].node.action.style.top='3px';

View File

@ -30,6 +30,7 @@ html{
#arena.mobile.textequip:not(.chess) .player[data-position='0'] .equips{
background-image: none;
box-shadow: rgba(0, 0, 0, 0.2) -1px 0px 0px 0px;
overflow-y: scroll;
}
#arena:not(.chess).textequip .player[data-position='0'] .equips>.card{
background-image: linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.4)) !important;