2016-06-08 01:43:10 +00:00
|
|
|
|
'use strict';
|
|
|
|
|
character.ow={
|
|
|
|
|
character:{
|
2016-06-08 09:05:04 +00:00
|
|
|
|
ow_liekong:['female','shu',3,['shanxian','shanhui']],
|
2016-06-25 16:38:59 +00:00
|
|
|
|
ow_sishen:['male','shu',3,['xiandan','yihun','shouge']],
|
2016-06-09 15:06:55 +00:00
|
|
|
|
ow_tianshi:['female','qun',3,['shouhu','ziyu','feiying']],
|
2016-06-10 02:56:48 +00:00
|
|
|
|
ow_falaozhiying:['female','shu',3,['feidan','huoyu','feiying']],
|
2016-06-09 15:06:55 +00:00
|
|
|
|
ow_zhixuzhiguang:['female','qun',3,['guangshu']],
|
|
|
|
|
ow_luxiao:['male','wu',3,['yuedong','kuoyin','huhuan']],
|
2016-06-10 02:56:48 +00:00
|
|
|
|
ow_shibing:['male','shu',4,['tuji','mujing']],
|
|
|
|
|
ow_yuanshi:['male','qun',3,['feiren','lianpo','zhanlong']],
|
2016-07-16 02:11:40 +00:00
|
|
|
|
ow_chanyata:['male','qun',3,['xie','luan','sheng']],
|
2016-07-17 03:28:46 +00:00
|
|
|
|
ow_dva:['female','shu',2,['jijia','tuijin','zihui','chongzhuang']],
|
2016-07-17 08:06:07 +00:00
|
|
|
|
ow_mei:['female','wei',3,['bingqiang','jidong','baoxue']],
|
2016-07-25 15:33:50 +00:00
|
|
|
|
ow_ana:['female','wei',3,['zhiyuan','mianzhen','aqianghua']],
|
2016-07-17 03:28:46 +00:00
|
|
|
|
ow_heibaihe:['female','qun',3,['juji','duwen','dulei']],
|
2016-07-18 02:08:26 +00:00
|
|
|
|
ow_maikelei:['male','shu',4,['shanguang','tiandan','shenqiang']],
|
2016-07-19 07:32:04 +00:00
|
|
|
|
ow_kuangshu:['male','shu',3,['liudan','shoujia','shihuo']],
|
2016-07-16 02:11:40 +00:00
|
|
|
|
|
2016-07-19 07:32:04 +00:00
|
|
|
|
// ow_tuobiang:['male','shu',3,[]],
|
2016-06-08 01:43:10 +00:00
|
|
|
|
// ow_baolei:['female','shu',3,[]],
|
2016-07-16 02:11:40 +00:00
|
|
|
|
// ow_banzang:['male','shu',4,[]],
|
|
|
|
|
// ow_laiyinhate:['male','shu',4,[]],
|
|
|
|
|
// ow_luba:['male','shu',4,[]],
|
|
|
|
|
// ow_wensidun:['male','shu',4,[]],
|
|
|
|
|
// ow_zhaliya:['female','shu',4,[]],
|
2016-06-08 09:05:04 +00:00
|
|
|
|
},
|
|
|
|
|
skill:{
|
2016-07-25 15:33:50 +00:00
|
|
|
|
aqianghua:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filter:function(event,player){
|
2016-07-30 13:28:26 +00:00
|
|
|
|
return player.num('h')>=1;
|
2016-07-25 15:33:50 +00:00
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player;
|
|
|
|
|
},
|
|
|
|
|
filterCard:true,
|
|
|
|
|
selectCard:-1,
|
|
|
|
|
discard:false,
|
|
|
|
|
prepare:function(cards,player,targets){
|
|
|
|
|
player.$give(cards,targets[0]);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
target.gain(cards);
|
|
|
|
|
target.changeHujia();
|
|
|
|
|
target.addSkill('aqianghua2');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.5,
|
|
|
|
|
order:2.1,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(ai.get.attitude(player,target)<3) return 0;
|
|
|
|
|
if(target.num('j','lebu')) return 0;
|
|
|
|
|
if(target.hasSkill('aqianghua2')) return 0.1;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
aqianghua2:{
|
|
|
|
|
trigger:{source:'damageBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.num++;
|
|
|
|
|
player.unmarkSkill('aqianghua2');
|
|
|
|
|
player.removeSkill('aqianghua2');
|
|
|
|
|
},
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'下一次造成的伤害+1'
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-19 07:32:04 +00:00
|
|
|
|
shihuo:{
|
|
|
|
|
trigger:{global:'damageEnd'},
|
2016-07-18 02:08:26 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event){
|
2016-07-19 07:32:04 +00:00
|
|
|
|
return event.nature=='fire';
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.draw();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shoujia:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('h')>0;
|
|
|
|
|
},
|
|
|
|
|
filterCard:true,
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
discard:false,
|
|
|
|
|
prepare:function(cards,player,targets){
|
|
|
|
|
player.$give(1,targets[0]);
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&!target.hasSkill('shoujia2');
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
target.storage.shoujia=cards[0];
|
|
|
|
|
target.storage.shoujia2=player;
|
|
|
|
|
target.addSkill('shoujia2');
|
|
|
|
|
target.syncStorage('shoujia');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:1,
|
|
|
|
|
expose:0.2,
|
|
|
|
|
threaten:1.4,
|
|
|
|
|
result:{
|
|
|
|
|
target:-1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shoujia2:{
|
|
|
|
|
mark:true,
|
|
|
|
|
trigger:{player:'useCardToBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return get.suit(event.card)==get.suit(player.storage.shoujia)&&event.target!=player;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
player.showCards([player.storage.shoujia],get.translation(player)+'发动了【兽夹】');
|
|
|
|
|
'step 1'
|
|
|
|
|
ui.discardPile.appendChild(player.storage.shoujia);
|
|
|
|
|
delete player.storage.shoujia;
|
|
|
|
|
delete player.storage.shoujia2;
|
|
|
|
|
player.removeSkill('shoujia2');
|
|
|
|
|
game.addVideo('storage',player,['shoujia',null]);
|
|
|
|
|
game.addVideo('storage',player,['shoujia2',null]);
|
|
|
|
|
if(!player.isTurnedOver()){
|
|
|
|
|
player.turnOver();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
mark:function(dialog,content,player){
|
|
|
|
|
if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){
|
|
|
|
|
dialog.add([player.storage.shoujia]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content:function(content,player){
|
|
|
|
|
if(player.storage.shoujia2&&player.storage.shoujia2.isUnderControl(true)){
|
|
|
|
|
return get.translation(player.storage.shoujia);
|
|
|
|
|
}
|
|
|
|
|
return '已成为'+get.translation(player.storage.shoujia2)+'的兽夹目标';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
group:'shoujia3'
|
|
|
|
|
},
|
|
|
|
|
shoujia3:{
|
|
|
|
|
trigger:{source:'damageEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player==player.storage.shoujia2;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
ui.discardPile.appendChild(player.storage.shoujia);
|
|
|
|
|
player.$throw(player.storage.shoujia);
|
|
|
|
|
delete player.storage.shoujia;
|
|
|
|
|
delete player.storage.shoujia2;
|
|
|
|
|
player.removeSkill('shoujia2');
|
|
|
|
|
game.addVideo('storage',player,['shoujia',null]);
|
|
|
|
|
game.addVideo('storage',player,['shoujia2',null]);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
liudan:{
|
|
|
|
|
trigger:{player:'useCard'},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(event.targets.contains(game.players[i])==false&&
|
|
|
|
|
game.players[i]!=player&&
|
|
|
|
|
lib.filter.targetEnabled(event.card,player,game.players[i])){
|
|
|
|
|
list.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<list.length;i++){
|
|
|
|
|
num+=ai.get.effect(list[i],event.card,player,player);
|
|
|
|
|
}
|
|
|
|
|
return num>=0;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(event.card.name!='sha') return false;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(event.targets.contains(game.players[i])==false&&
|
|
|
|
|
game.players[i]!=player&&
|
|
|
|
|
lib.filter.targetEnabled(event.card,player,game.players[i])){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var list=[];
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(trigger.targets.contains(game.players[i])==false&&
|
|
|
|
|
game.players[i]!=player&&
|
|
|
|
|
lib.filter.targetEnabled(trigger.card,player,game.players[i])){
|
|
|
|
|
list.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(list.length){
|
|
|
|
|
var list2=[];
|
|
|
|
|
for(var i=0;i<list.length;i++){
|
|
|
|
|
if(Math.random()<0.5){
|
|
|
|
|
list2.push(list[i]);
|
|
|
|
|
trigger.targets.push(list[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(list2.length){
|
|
|
|
|
game.log(list2,'被追加为额外目标');
|
|
|
|
|
player.line(list2,'green');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shenqiang:{
|
|
|
|
|
trigger:{source:'damageEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.card&&event.card.name=='sha'&&_status.currentPhase==player;
|
2016-07-18 02:08:26 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.getStat().card.sha--;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tiandan:{
|
2016-07-19 07:32:04 +00:00
|
|
|
|
trigger:{player:'phaseDrawBegin'},
|
2016-07-18 02:08:26 +00:00
|
|
|
|
filter:function(event,player){
|
2016-07-19 07:32:04 +00:00
|
|
|
|
return Math.min(5,player.hp)>player.num('h')&&!player.skipList.contains('phaseUse')&&!player.skipList.contains('phaseDiscard');
|
2016-07-18 02:08:26 +00:00
|
|
|
|
},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
var nh=player.num('h');
|
2016-07-19 07:32:04 +00:00
|
|
|
|
if(Math.min(5,player.hp)-nh>=2) return true;
|
2016-07-18 02:08:26 +00:00
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-19 07:32:04 +00:00
|
|
|
|
var num=Math.min(5,player.hp)-player.num('h');
|
2016-07-18 02:08:26 +00:00
|
|
|
|
var cards=[];
|
|
|
|
|
while(num--){
|
|
|
|
|
cards.push(game.createCard('sha'));
|
|
|
|
|
}
|
|
|
|
|
player.gain(cards,'gain2');
|
2016-07-19 07:32:04 +00:00
|
|
|
|
player.skip('phaseUse');
|
2016-07-18 02:08:26 +00:00
|
|
|
|
player.skip('phaseDiscard');
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-18 02:08:45 +00:00
|
|
|
|
shanguang:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filterCard:true,
|
|
|
|
|
position:'he',
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player;
|
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
target.addTempSkill('shanguang2','phaseAfter');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
2016-07-19 07:32:04 +00:00
|
|
|
|
order:7.9,
|
2016-07-18 02:08:45 +00:00
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
2016-07-19 07:32:04 +00:00
|
|
|
|
var nh=target.num('h');
|
|
|
|
|
if(ai.get.attitude(player,target)<0&&nh>=3&&
|
|
|
|
|
player.canUse('sha',target)&&player.num('h','sha')&&
|
|
|
|
|
ai.get.effect(target,{name:'sha'},player,player)>0){
|
|
|
|
|
return -nh-5;
|
|
|
|
|
}
|
|
|
|
|
return -nh;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shanguang2:{
|
|
|
|
|
mod:{
|
|
|
|
|
cardEnabled:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardUsable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardRespondable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardSavable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
effect:{
|
|
|
|
|
target:function(card,player,target,current){
|
|
|
|
|
if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){
|
|
|
|
|
if(current<0) return 1.5;
|
|
|
|
|
}
|
2016-07-18 02:08:45 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-17 08:06:07 +00:00
|
|
|
|
baoxue:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
init:function(player){
|
|
|
|
|
player.storage.baoxue=false;
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
content:'limited'
|
|
|
|
|
},
|
|
|
|
|
mark:true,
|
|
|
|
|
skillAnimation:true,
|
|
|
|
|
animationColor:'water',
|
|
|
|
|
line:'thunder',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return !player.storage.baoxue&&player.num('he',{color:'black'})>0;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player;
|
|
|
|
|
},
|
|
|
|
|
selectTarget:function(){
|
|
|
|
|
return [1,_status.event.player.num('he',{color:'black'})];
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
if(target==targets[0]){
|
|
|
|
|
player.storage.baoxue=true;
|
|
|
|
|
player.unmarkSkill('baoxue');
|
|
|
|
|
player.showHandcards();
|
|
|
|
|
player.discard(player.get('he',{color:'black'}));
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
var he=target.get('he');
|
|
|
|
|
if(he.length){
|
|
|
|
|
target.discard(he.randomGet());
|
|
|
|
|
}
|
|
|
|
|
'step 2'
|
|
|
|
|
target.loseHp();
|
|
|
|
|
'step 3'
|
|
|
|
|
if(!target.isTurnedOver()){
|
|
|
|
|
target.turnOver();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:function(skill,player){
|
|
|
|
|
var num=0;
|
|
|
|
|
var nh=player.num('h',{color:'black'});
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(ai.get.attitude(player,game.players[i])<0){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(nh==1&&num>1) return 0;
|
|
|
|
|
if(nh>num) return 1;
|
|
|
|
|
return 11;
|
|
|
|
|
},
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
var mode=get.mode();
|
|
|
|
|
if(mode=='identity'||mode=='guozhan'){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].ai.shown<=0) return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-17 03:28:46 +00:00
|
|
|
|
mianzhen:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filter:function(event,player){
|
2016-07-25 15:33:50 +00:00
|
|
|
|
return player.num('he')>0;
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&!target.hasSkill('mianzhen2');
|
|
|
|
|
},
|
2016-07-25 15:33:50 +00:00
|
|
|
|
filterCard:true,
|
2016-07-17 03:28:46 +00:00
|
|
|
|
position:'he',
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 8-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-25 15:33:50 +00:00
|
|
|
|
'step 0'
|
|
|
|
|
target.chooseToRespond({name:'shan'});
|
|
|
|
|
'step 1'
|
|
|
|
|
if(!result.bool) target.addSkill('mianzhen2');
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
ai:{
|
2016-07-25 15:33:50 +00:00
|
|
|
|
order:2.2,
|
2016-07-17 03:28:46 +00:00
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
return Math.min(-0.1,-1-target.num('h')+Math.sqrt(target.hp)/2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mianzhen2:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'不能使用或打出手牌直到受到伤害或下一回合结束'
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:['damageEnd','phaseEnd']},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.removeSkill('mianzhen2');
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
cardEnabled:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardUsable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardRespondable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardSavable:function(){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
zhiyuan:{
|
|
|
|
|
trigger:{source:'damageBefore'},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
if(event.player.hp<event.player.maxHp&&ai.get.attitude(player,event.player)<0) return false;
|
|
|
|
|
player.disabledSkills.temp='zhiyuan';
|
|
|
|
|
var num=ai.get.damageEffect(event.player,player,player,event.nature)<ai.get.recoverEffect(event.player,player,player);
|
|
|
|
|
delete player.disabledSkills.temp;
|
|
|
|
|
return num;
|
|
|
|
|
},
|
|
|
|
|
prompt:function(event,player){
|
|
|
|
|
return '是否对'+get.translation(event.player)+'发动【支援】?';
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.num>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.untrigger();
|
|
|
|
|
trigger.finish();
|
|
|
|
|
trigger.player.recover(trigger.num);
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
effect:{
|
|
|
|
|
player:function(card,player,target){
|
|
|
|
|
if(get.tag(card,'damage')&&ai.get.attitude(player,target)>0){
|
|
|
|
|
if(target.hp==target.maxHp) return [0,0,0,0];
|
|
|
|
|
return [0,0,0,1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
duwen:{
|
|
|
|
|
trigger:{source:'damageBegin'},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
return ai.get.attitude(player,event.player)<=0;
|
|
|
|
|
},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
2016-07-26 16:43:59 +00:00
|
|
|
|
return player.num('h')==event.player.num('h')&&event.notLink();
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-26 16:43:59 +00:00
|
|
|
|
trigger.num++;
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.5
|
2016-07-26 16:43:59 +00:00
|
|
|
|
},
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
duwen2:{
|
|
|
|
|
trigger:{source:'damageEnd'},
|
|
|
|
|
forced:true,
|
2016-07-26 16:43:59 +00:00
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.card&&event.card.name=='sha'&&player.hp==event.player.hp&&event.notLink();
|
2016-07-17 03:28:46 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-26 16:43:59 +00:00
|
|
|
|
player.draw(2);
|
2016-07-17 03:28:46 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-25 15:33:50 +00:00
|
|
|
|
juji:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
2016-07-26 16:43:59 +00:00
|
|
|
|
position:'he',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('he')>0;
|
|
|
|
|
},
|
2016-07-25 15:33:50 +00:00
|
|
|
|
filterCard:function(card){
|
|
|
|
|
var suit=get.suit(card);
|
|
|
|
|
for(var i=0;i<ui.selected.cards.length;i++){
|
|
|
|
|
if(get.suit(ui.selected.cards[i])==suit) return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&target.num('h')>0;
|
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
if(ui.selected.cards.length>1) return 0;
|
|
|
|
|
return 5-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
selectCard:[1,4],
|
|
|
|
|
content:function(){
|
|
|
|
|
var suits=[];
|
|
|
|
|
for(var i=0;i<cards.length;i++){
|
|
|
|
|
suits.push(get.suit(cards[i]));
|
|
|
|
|
}
|
|
|
|
|
var success=false;
|
|
|
|
|
for(var i=0;i<suits.length;i++){
|
|
|
|
|
if(target.num('h',{suit:suits[i]})){
|
|
|
|
|
success=true;break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!success){
|
|
|
|
|
player.popup('失败');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.popup('成功');
|
|
|
|
|
player.addSkill('juji2');
|
|
|
|
|
player.storage.juji2=target;
|
|
|
|
|
player.markSkillCharacter('juji2',target,'狙击','与'+get.translation(target)+'的距离视为1且'+get.translation(target)+'不能闪避你的杀,直到回合结束');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:4,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(!player.num('h','sha')) return 0;
|
|
|
|
|
if(target.num('h')<=1&&get.distance(player,target,'attack')<=1) return 0;
|
|
|
|
|
var min=[];
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=player&&
|
|
|
|
|
player.canUse('sha',game.players[i],false)){
|
|
|
|
|
var eff=ai.get.effect(target,{name:'sha'},player,player);
|
|
|
|
|
if(eff>num){
|
|
|
|
|
min.length=0;
|
|
|
|
|
min.push(game.players[i]);
|
|
|
|
|
num=eff;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<min.length;i++){
|
|
|
|
|
if(ai.get.attitude(player,min[i])>0) return 0;
|
|
|
|
|
if(min[i].num('h')<=1&&get.distance(player,min[i],'attack')<=1) return 0;
|
|
|
|
|
}
|
|
|
|
|
if(min.contains(target)) return -1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
juji2:{
|
|
|
|
|
ai:{
|
|
|
|
|
effect:{
|
|
|
|
|
player:function(card,player,target){
|
|
|
|
|
if(card.name=='sha'&&target==player.storage.juji2) return [1,0,1,-1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'phaseAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.unmarkSkill('juji2');
|
|
|
|
|
player.removeSkill('juji2');
|
|
|
|
|
delete player.storage.juji2;
|
|
|
|
|
},
|
|
|
|
|
group:'juji3'
|
|
|
|
|
},
|
|
|
|
|
juji3:{
|
|
|
|
|
trigger:{player:'shaBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.target==player.storage.juji2;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.directHit=true;
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
globalFrom:function(from,to){
|
|
|
|
|
if(to==from.storage.juji2) return -Infinity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-17 03:28:46 +00:00
|
|
|
|
dulei:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return !player.skills.contains('dulei2');
|
|
|
|
|
},
|
|
|
|
|
filterCard:true,
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
discard:false,
|
|
|
|
|
prepare:function(cards,player){
|
|
|
|
|
player.$give(1,player);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.storage.dulei=cards[0];
|
|
|
|
|
player.addSkill('dulei2');
|
|
|
|
|
player.syncStorage('dulei');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:1,
|
|
|
|
|
result:{
|
|
|
|
|
player:1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
dulei2:{
|
|
|
|
|
mark:true,
|
|
|
|
|
trigger:{target:'useCardToBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player!=player&&get.suit(event.card)==get.suit(player.storage.dulei);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
2016-07-20 07:04:45 +00:00
|
|
|
|
player.showCards([player.storage.dulei],get.translation(player)+'发动了【诡雷】');
|
2016-07-17 03:28:46 +00:00
|
|
|
|
'step 1'
|
|
|
|
|
ui.discardPile.appendChild(player.storage.dulei);
|
|
|
|
|
delete player.storage.dulei;
|
|
|
|
|
player.removeSkill('dulei2');
|
|
|
|
|
game.addVideo('storage',player,['dulei',null]);
|
|
|
|
|
trigger.player.loseHp();
|
|
|
|
|
'step 2'
|
|
|
|
|
var he=trigger.player.get('he');
|
|
|
|
|
if(he.length){
|
|
|
|
|
trigger.player.discard(he.randomGet());
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
mark:function(dialog,content,player){
|
|
|
|
|
if(player==game.me||player.isUnderControl()){
|
|
|
|
|
dialog.add([player.storage.dulei]);
|
|
|
|
|
}
|
|
|
|
|
else{
|
2016-07-20 07:04:45 +00:00
|
|
|
|
return '已发动诡雷';
|
2016-07-17 03:28:46 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content:function(content,player){
|
|
|
|
|
if(player==game.me||player.isUnderControl()){
|
|
|
|
|
return get.translation(player.storage.dulei);
|
|
|
|
|
}
|
2016-07-20 07:04:45 +00:00
|
|
|
|
return '已发动诡雷';
|
2016-07-17 03:28:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-24 05:22:17 +00:00
|
|
|
|
juji_old:{
|
2016-07-17 03:28:46 +00:00
|
|
|
|
trigger:{player:'shaBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return get.distance(event.target,player,'attack')>1;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.directHit=true;
|
|
|
|
|
},
|
|
|
|
|
group:'juji2'
|
|
|
|
|
},
|
2016-07-25 15:33:50 +00:00
|
|
|
|
juji2_old:{
|
2016-07-17 03:28:46 +00:00
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
target.addTempSkill('juji3',{player:'phaseEnd'});
|
|
|
|
|
if(!target.storage.juji3){
|
|
|
|
|
target.storage.juji3=[];
|
|
|
|
|
}
|
|
|
|
|
target.storage.juji3.push(player);
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetInRange:function(card,player,target){
|
|
|
|
|
if(target.hasSkill('juji3')&&Array.isArray(target.storage.juji3)&&target.storage.juji3.contains(player)){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-25 15:33:50 +00:00
|
|
|
|
juji3_old:{
|
2016-07-17 03:28:46 +00:00
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
nocount:true,
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '对'+get.translation(storage)+'使用卡牌无视距离';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetInRange:function(card,player,target){
|
|
|
|
|
if(Array.isArray(player.storage.juji3)&&player.storage.juji3.contains(target)){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
zhuagou:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
changeSeat:true,
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return player!=target&&player.next!=target;
|
|
|
|
|
},
|
|
|
|
|
filterCard:true,
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 4-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
while(player.next!=target){
|
|
|
|
|
game.swapSeat(player,player.next);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:5,
|
|
|
|
|
result:{
|
|
|
|
|
player:function(player,target){
|
|
|
|
|
var att=ai.get.attitude(player,target);
|
|
|
|
|
if(target==player.previous&&att>0) return 1;
|
|
|
|
|
if(target==player.next.next&&ai.get.attitude(player,player.next)<0) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-16 18:53:04 +00:00
|
|
|
|
bingqiang:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
position:'he',
|
|
|
|
|
filterCard:function(card){
|
|
|
|
|
var color=get.color(card);
|
|
|
|
|
for(var i=0;i<ui.selected.cards.length;i++){
|
|
|
|
|
if(get.color(ui.selected.cards[i])!=color) return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
selectCard:[1,Infinity],
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return !target.hasSkill('bingqiang2')&&!target.hasSkill('bingqiang5')&&
|
|
|
|
|
!target.next.hasSkill('bingqiang2')&&!target.next.hasSkill('bingqiang5')&&
|
|
|
|
|
!target.previous.hasSkill('bingqiang2')&&!target.previous.hasSkill('bingqiang5');
|
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
var player=_status.event.player;
|
|
|
|
|
var max=0,min=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(!lib.skill.bingqiang.filterTarget(null,player,game.players[i])) continue;
|
|
|
|
|
var num=lib.skill.bingqiang.ai.result.playerx(player,game.players[i]);
|
|
|
|
|
if(num>max){
|
|
|
|
|
max=num;
|
|
|
|
|
}
|
|
|
|
|
if(num<min){
|
|
|
|
|
min=num;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(max==-min){
|
|
|
|
|
return 5-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
else if(max>-min){
|
|
|
|
|
if(get.color(card)=='red') return 5-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(get.color(card)=='black') return 5-ai.get.value(card);
|
|
|
|
|
}
|
2016-07-20 10:51:00 +00:00
|
|
|
|
return 0;
|
2016-07-16 18:53:04 +00:00
|
|
|
|
},
|
|
|
|
|
changeTarget:function(player,targets){
|
|
|
|
|
var target=targets[0];
|
2016-07-17 03:28:46 +00:00
|
|
|
|
var add=game.filterPlayer(function(player){
|
|
|
|
|
return get.distance(target,player,'pure')==1;
|
|
|
|
|
});
|
|
|
|
|
for(var i=0;i<add.length;i++){
|
|
|
|
|
targets.add(add[i]);
|
|
|
|
|
}
|
2016-07-16 18:53:04 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
if(get.color(cards[0])=='red'){
|
|
|
|
|
target.storage.bingqiang2=cards.length;
|
|
|
|
|
target.addSkill('bingqiang2');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
target.storage.bingqiang5=cards.length;
|
|
|
|
|
target.addSkill('bingqiang5');
|
|
|
|
|
}
|
|
|
|
|
if(!player.storage.bingqiang){
|
|
|
|
|
player.storage.bingqiang=[];
|
|
|
|
|
}
|
|
|
|
|
player.storage.bingqiang.add(target);
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:11,
|
|
|
|
|
result:{
|
|
|
|
|
playerx:function(player,target){
|
2016-07-17 03:28:46 +00:00
|
|
|
|
var targets=game.filterPlayer(function(player){
|
|
|
|
|
return player==target||get.distance(target,player,'pure')==1;
|
|
|
|
|
});
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<targets.length;i++){
|
|
|
|
|
num+=ai.get.attitude(player,targets[i]);
|
|
|
|
|
}
|
|
|
|
|
return num;
|
2016-07-16 18:53:04 +00:00
|
|
|
|
},
|
|
|
|
|
player:function(player,target){
|
|
|
|
|
var num=lib.skill.bingqiang.ai.result.playerx(player,target);
|
|
|
|
|
if(ui.selected.cards.length){
|
|
|
|
|
if(get.color(ui.selected.cards[0])=='black'){
|
|
|
|
|
return -num;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
return num;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
group:'bingqiang_remove'
|
|
|
|
|
},
|
|
|
|
|
bingqiang_remove:{
|
|
|
|
|
trigger:{player:['phaseBegin','dieBegin']},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.storage.bingqiang&&player.storage.bingqiang.length>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
for(var i=0;i<player.storage.bingqiang.length;i++){
|
|
|
|
|
player.storage.bingqiang[i].removeSkill('bingqiang2');
|
|
|
|
|
player.storage.bingqiang[i].removeSkill('bingqiang5');
|
|
|
|
|
}
|
|
|
|
|
player.storage.bingqiang=[];
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
bingqiang_old:{
|
|
|
|
|
trigger:{global:'phaseBegin'},
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('he')>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var goon=false;
|
|
|
|
|
var goon2=false;
|
|
|
|
|
var att=ai.get.attitude(player,trigger.player);
|
|
|
|
|
if(att>0){
|
|
|
|
|
if(trigger.player.hp==1) goon=true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(Math.random()<0.5) goon=true;
|
|
|
|
|
}
|
|
|
|
|
if(Math.random()<0.3) goon2=true;
|
|
|
|
|
player.chooseToDiscard([1,player.num('h')],'he','是否对'+get.translation(trigger.player)+'发动【冰墙】?').set('logSkill',['bingqiang',trigger.player]).ai=function(card){
|
|
|
|
|
if(ui.selected.cards.length) return 0;
|
|
|
|
|
if(goon) return 6-ai.get.value(card);
|
|
|
|
|
if(goon2) return 4-ai.get.value(card);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
'step 1'
|
|
|
|
|
if(result.bool){
|
|
|
|
|
var num=result.cards.length;
|
|
|
|
|
event.num=num;
|
|
|
|
|
player.chooseControl('选项一','选项二','选项三','选项四',function(){
|
|
|
|
|
if(ai.get.attitude(player,trigger.player)>0){
|
|
|
|
|
if(Math.random()<0.7) return '选项一';
|
|
|
|
|
return '选项三';
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(Math.random()<0.7) return '选项四';
|
|
|
|
|
return '选项二';
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
}).set('prompt','冰墙<br><br><div class="text center">选项一:防御距离+'+num+
|
|
|
|
|
'</div><br><div class="text center">选项二:防御距离-'+num+
|
|
|
|
|
'</div><br><div class="text center">选项三:进攻距离+'+num+
|
|
|
|
|
'</div><br><div class="text center">选项四:进攻距离-'+num+'</div>');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
'step 2'
|
|
|
|
|
switch(result.control){
|
|
|
|
|
case '选项一':{
|
|
|
|
|
trigger.player.storage.bingqiang2=event.num;
|
|
|
|
|
trigger.player.addTempSkill('bingqiang2',{player:'phaseBegin'});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '选项二':{
|
|
|
|
|
trigger.player.storage.bingqiang3=event.num;
|
|
|
|
|
trigger.player.addTempSkill('bingqiang3',{player:'phaseBegin'});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '选项三':{
|
|
|
|
|
trigger.player.storage.bingqiang4=event.num;
|
|
|
|
|
trigger.player.addTempSkill('bingqiang4',{player:'phaseBegin'});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case '选项四':{
|
|
|
|
|
trigger.player.storage.bingqiang5=event.num;
|
|
|
|
|
trigger.player.addTempSkill('bingqiang5',{player:'phaseBegin'});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
expose:0.1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
bingqiang2:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '防御距离+'+storage;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
globalTo:function(from,to,distance){
|
|
|
|
|
if(typeof to.storage.bingqiang2=='number') return distance+to.storage.bingqiang2;
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
bingqiang3:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '防御距离-'+storage;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
globalTo:function(from,to,distance){
|
|
|
|
|
if(typeof to.storage.bingqiang3=='number') return distance-to.storage.bingqiang3;
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
bingqiang4:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '进攻距离+'+storage;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
globalFrom:function(from,to,distance){
|
|
|
|
|
if(typeof from.storage.bingqiang4=='number') return distance-from.storage.bingqiang4;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
bingqiang5:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '进攻距离-'+storage;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
globalFrom:function(from,to,distance){
|
|
|
|
|
if(typeof from.storage.bingqiang5=='number') return distance+from.storage.bingqiang5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shuangqiang:{
|
|
|
|
|
trigger:{source:'damageBegin'},
|
|
|
|
|
check:function(event,player){
|
2016-07-17 03:28:46 +00:00
|
|
|
|
var att=ai.get.attitude(player,event.player);
|
|
|
|
|
if(event.player.hp==1) return att>0;
|
2016-07-16 18:53:04 +00:00
|
|
|
|
return att<=0;
|
|
|
|
|
},
|
2016-07-17 03:28:46 +00:00
|
|
|
|
prompt:function(event,player){
|
|
|
|
|
return '是否对'+get.translation(event.player)+'发动【霜枪】?';
|
|
|
|
|
},
|
2016-07-16 18:53:04 +00:00
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return !event.player.isTurnedOver()&&event.num>0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.num--;
|
|
|
|
|
trigger.player.draw();
|
|
|
|
|
trigger.player.turnOver();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
jidong:{
|
|
|
|
|
trigger:{global:'phaseEnd'},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.hp==1&&!player.isTurnedOver();
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
player.turnOver();
|
|
|
|
|
player.recover(2);
|
|
|
|
|
'step 1'
|
|
|
|
|
if(player.isTurnedOver()){
|
|
|
|
|
player.addTempSkill('jidong2',{player:'turnOverAfter'});
|
|
|
|
|
}
|
2016-07-17 08:06:07 +00:00
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:function(player,target){
|
|
|
|
|
if(target.hp==1) return 2;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2016-07-16 18:53:04 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
jidong2:{
|
|
|
|
|
trigger:{player:'damageBefore'},
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.untrigger();
|
|
|
|
|
trigger.finish();
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
nofire:true,
|
|
|
|
|
nothunder:true,
|
|
|
|
|
nodamage:true,
|
|
|
|
|
effect:{
|
|
|
|
|
target:function(card,player,target,current){
|
|
|
|
|
if(get.tag(card,'damage')) return [0,0];
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetEnabled:function(card,player,target){
|
|
|
|
|
if(player!=target) return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-16 06:16:24 +00:00
|
|
|
|
chongzhuang:{
|
|
|
|
|
trigger:{source:'damageEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.storage.jijia<=0&&event.num>0;
|
|
|
|
|
},
|
|
|
|
|
popup:false,
|
|
|
|
|
unique:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.storage.jijia2+=trigger.num;
|
|
|
|
|
if(player.storage.jijia2>=4){
|
|
|
|
|
player.storage.jijia=4;
|
|
|
|
|
player.storage.jijia2=0;
|
|
|
|
|
player.markSkill('jijia');
|
|
|
|
|
if(lib.config.skill_animation){
|
|
|
|
|
player.logSkill('chongzhuang');
|
|
|
|
|
player.$skill('重装')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tuijin:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
usable:1,
|
|
|
|
|
unique:true,
|
|
|
|
|
filter:function(event,player){
|
2016-07-16 18:53:04 +00:00
|
|
|
|
if(player.storage.jijia>0){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(get.distance(player,game.players[i])>1) return true;
|
|
|
|
|
}
|
2016-07-16 06:16:24 +00:00
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&get.distance(player,target)>1;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.storage.tuijin2=target;
|
|
|
|
|
player.markSkillCharacter('tuijin2',target,'推进','与'+get.translation(target)+'的距离视为1,直到回合结束');
|
|
|
|
|
player.addSkill('tuijin2');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:11,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(ai.get.attitude(player,target)<0){
|
|
|
|
|
if(get.distance(player,target)>2) return -1.5;
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
return 0.3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tuijin2:{
|
|
|
|
|
mod:{
|
|
|
|
|
globalFrom:function(from,to){
|
|
|
|
|
if(to==from.storage.tuijin2) return -Infinity;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
priority:-1,
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.unmarkSkill('tuijin2');
|
|
|
|
|
player.removeSkill('tuijin2');
|
|
|
|
|
delete player.storage.tuijin2;
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-07-16 03:32:55 +00:00
|
|
|
|
jijia:{
|
|
|
|
|
mark:true,
|
2016-07-16 06:16:24 +00:00
|
|
|
|
unique:true,
|
2016-07-16 03:32:55 +00:00
|
|
|
|
init:function(player){
|
|
|
|
|
player.storage.jijia=4;
|
|
|
|
|
player.storage.jijia2=0;
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
content:function(storage){
|
|
|
|
|
return '机甲体力值:'+storage;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
maxHandcard:function(player,num){
|
|
|
|
|
if(player.storage.jijia>0){
|
|
|
|
|
return num+player.storage.jijia;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'changeHp'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.storage.jijia>0&&event.parent.name=='damage'&&event.num<0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.hp-=trigger.num;
|
|
|
|
|
player.update();
|
|
|
|
|
player.storage.jijia+=trigger.num;
|
|
|
|
|
if(player.storage.jijia<=0){
|
|
|
|
|
player.unmarkSkill('jijia');
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.updateMarks();
|
|
|
|
|
}
|
2016-07-16 06:16:24 +00:00
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:function(player,target){
|
|
|
|
|
if(target.storage.jijia<=0) return 2;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
zihui:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.storage.jijia>0;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&get.distance(player,target)<=2;
|
|
|
|
|
},
|
|
|
|
|
unique:true,
|
|
|
|
|
selectTarget:-1,
|
|
|
|
|
skillAnimation:true,
|
|
|
|
|
animationColor:'fire',
|
|
|
|
|
line:'fire',
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
2016-07-16 18:53:04 +00:00
|
|
|
|
target.chooseToDiscard(player.storage.jijia,'he','弃置'+get.cnNumber(player.storage.jijia)+'张牌,或受到2点火焰伤害').ai=function(card){
|
2016-07-16 06:16:24 +00:00
|
|
|
|
if(target.hasSkillTag('nofire')) return 0;
|
|
|
|
|
if(get.type(card)!='basic') return 11-ai.get.value(card);
|
|
|
|
|
if(target.hp>4) return 7-ai.get.value(card);
|
|
|
|
|
if(target.hp==4&&player.storage.jijia>=3) return 7-ai.get.value(card);
|
|
|
|
|
if(target.hp==3&&player.storage.jijia>=4) return 7-ai.get.value(card);
|
|
|
|
|
if(player.storage.hujia>1) return 8-ai.get.value(card);
|
|
|
|
|
return 10-ai.get.value(card);
|
|
|
|
|
};
|
|
|
|
|
'step 1'
|
|
|
|
|
if(!result.bool){
|
|
|
|
|
target.damage(2,'fire');
|
|
|
|
|
}
|
|
|
|
|
if(target==targets[targets.length-1]){
|
|
|
|
|
player.storage.jijia=0;
|
|
|
|
|
player.unmarkSkill('jijia');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:2,
|
|
|
|
|
result:{
|
|
|
|
|
player:function(player){
|
|
|
|
|
var num=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]==player||game.players[i].hasSkillTag('nofire')||get.distance(player,game.players[i])>2) continue;
|
|
|
|
|
var nh=game.players[i].num('h');
|
|
|
|
|
var att=ai.get.attitude(player,game.players[i]);
|
|
|
|
|
if(nh<player.storage.jijia){
|
|
|
|
|
if(att<0){
|
|
|
|
|
if(game.players[i].hp<=2){
|
|
|
|
|
num+=2;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
num+=1.5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(att>0){
|
|
|
|
|
if(game.players[i].hp<=2){
|
|
|
|
|
num-=2;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
num-=1.5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(nh==player.storage.jijia){
|
|
|
|
|
if(att<0){
|
|
|
|
|
num+=0.5;
|
|
|
|
|
}
|
|
|
|
|
else if(att>0){
|
|
|
|
|
num-=0.5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(num>=2) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-07-16 03:32:55 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-25 16:38:59 +00:00
|
|
|
|
xiandan:{
|
|
|
|
|
trigger:{player:'shaBegin'},
|
|
|
|
|
direct:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var dis=trigger.target.num('h','shan')||trigger.target.num('e','bagua')||trigger.target.num('h')>2;
|
|
|
|
|
var next=player.chooseToDiscard('是否发动【霰弹】?');
|
|
|
|
|
next.ai=function(card){
|
|
|
|
|
if(dis) return 7-ai.get.value(card);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
next.logSkill='xiandan';
|
|
|
|
|
"step 1"
|
|
|
|
|
if(result.bool){
|
|
|
|
|
if(get.color(result.cards[0])=='red'){
|
|
|
|
|
trigger.directHit=true;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.addTempSkill('xiandan2','shaAfter');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
xiandan2:{
|
|
|
|
|
trigger:{source:'damageBegin'},
|
|
|
|
|
filter:function(event){
|
|
|
|
|
return event.card&&event.card.name=='sha'&&event.notLink();
|
|
|
|
|
},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.num++;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
shouge:{
|
|
|
|
|
trigger:{source:'dieAfter'},
|
|
|
|
|
frequent:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.gain(game.createCard('zhiliaobo'),'gain2');
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
tuji:{
|
|
|
|
|
mod:{
|
|
|
|
|
globalFrom:function(from,to,distance){
|
|
|
|
|
if(_status.currentPhase==from){
|
|
|
|
|
return distance-get.cardCount(true,from);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
mujing:{
|
|
|
|
|
trigger:{player:'useCardToBegin'},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.target&&event.target!=player&&get.distance(event.target,player,'attack')>1;
|
|
|
|
|
},
|
|
|
|
|
direct:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
player.discardPlayerCard('是否发动【目镜】?',trigger.target).logSkill=['mujing'];
|
|
|
|
|
'step 1'
|
2016-07-16 03:32:55 +00:00
|
|
|
|
if(result.bool&&player.num('h')<=trigger.target.num('h')){
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.draw();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
zhanlong:{
|
|
|
|
|
trigger:{player:'phaseBegin'},
|
|
|
|
|
unique:true,
|
|
|
|
|
mark:true,
|
|
|
|
|
skillAnimation:true,
|
|
|
|
|
init:function(player){
|
|
|
|
|
player.storage.zhanlong=false;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.storage.zhanlong) return false;
|
|
|
|
|
if(player.num('he')==0) return false;
|
|
|
|
|
if(player.hp!=1) return false;
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
player.discard(player.get('he'));
|
|
|
|
|
'step 1'
|
|
|
|
|
player.addTempSkill('zhanlong2','phaseAfter');
|
|
|
|
|
player.unmarkSkill('zhanlong');
|
|
|
|
|
player.storage.zhanlong=true;
|
|
|
|
|
var cards=[];
|
|
|
|
|
for(var i=0;i<3;i++){
|
|
|
|
|
cards.push(game.createCard('sha'));
|
|
|
|
|
}
|
|
|
|
|
player.gain(cards,'gain2');
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:function(player,target){
|
|
|
|
|
if(target.hp==1) return 3;
|
|
|
|
|
return 1;
|
|
|
|
|
},
|
|
|
|
|
effect:{
|
|
|
|
|
target:function(card,player,target){
|
|
|
|
|
if(!target.hasFriend()) return;
|
|
|
|
|
if(get.tag(card,'damage')==1&&target.hp==2&&target.num('he')&&!target.isTurnedOver()&&
|
|
|
|
|
_status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
content:'limited'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
zhanlong2:{
|
|
|
|
|
mod:{
|
|
|
|
|
cardUsable:function(card){
|
|
|
|
|
if(card.name=='sha') return Infinity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
feiren:{
|
|
|
|
|
trigger:{player:'useCard'},
|
|
|
|
|
forced:true,
|
|
|
|
|
priority:10,
|
|
|
|
|
filter:function(event){
|
|
|
|
|
return event.card.name=='sha';
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.addTempSkill('unequip','useCardAfter');
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetInRange:function(card){
|
|
|
|
|
if(card.name=='sha') return true;
|
|
|
|
|
},
|
|
|
|
|
selectTarget:function(card,player,range){
|
|
|
|
|
if(card.name=='sha'&&range[1]!=-1&&get.suit(card)=='club'){
|
|
|
|
|
range[1]++;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
group:['feiren2'],
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.4
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
feiren2:{
|
|
|
|
|
trigger:{player:'useCardAfter'},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(event.parent.name=='feiren2') return false;
|
|
|
|
|
if(event.card.name!='sha') return false;
|
|
|
|
|
if(get.suit(event.card)!='spade') return false;
|
|
|
|
|
var card=game.createCard(event.card.name,event.card.suit,event.card.number,event.card.nature);
|
|
|
|
|
for(var i=0;i<event.targets.length;i++){
|
|
|
|
|
if(!event.targets[i].isAlive()) return false;
|
|
|
|
|
if(!player.canUse({name:event.card.name},event.targets[i],false,false)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var card=game.createCard(trigger.card.name,trigger.card.suit,trigger.card.number,trigger.card.nature);
|
|
|
|
|
player.useCard(card,trigger.targets);
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.3
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
xie:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
unique:true,
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&!target.hasSkill('xie2');
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('h',{suit:'heart'});
|
|
|
|
|
},
|
|
|
|
|
filterCard:{suit:'heart'},
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var current=game.findPlayer(function(player){
|
|
|
|
|
return player.hasSkill('xie2');
|
|
|
|
|
});
|
|
|
|
|
if(current){
|
|
|
|
|
current.removeSkill('xie2');
|
|
|
|
|
}
|
|
|
|
|
target.addSkill('xie2');
|
2016-06-11 02:51:33 +00:00
|
|
|
|
target.storage.xie='now';
|
2016-06-10 02:56:48 +00:00
|
|
|
|
target.storage.xie2=player;
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
2016-06-11 02:51:33 +00:00
|
|
|
|
expose:0.2,
|
2016-06-10 02:56:48 +00:00
|
|
|
|
order:9.1,
|
|
|
|
|
threaten:2,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
var current=game.findPlayer(function(player){
|
|
|
|
|
return player.hasSkill('xie2');
|
|
|
|
|
});
|
|
|
|
|
if(current&&ai.get.recoverEffect(current,player,player)>0){
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
return ai.get.recoverEffect(target,player,target);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
xie2:{
|
|
|
|
|
mark:true,
|
2016-06-11 02:51:33 +00:00
|
|
|
|
trigger:{global:'phaseEnd'},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
2016-06-11 02:51:33 +00:00
|
|
|
|
if(player.storage.xie=='now'){
|
|
|
|
|
return event.player==player;
|
|
|
|
|
}
|
|
|
|
|
var num=game.phaseNumber-player.storage.xie;
|
|
|
|
|
return num&&num%6==0;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-06-11 02:51:33 +00:00
|
|
|
|
if(player.storage.xie=='now'){
|
|
|
|
|
player.storage.xie=game.phaseNumber;
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.recover();
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
2016-06-11 02:51:33 +00:00
|
|
|
|
content:function(storage,player){
|
|
|
|
|
var str='每隔六回合回复一点体力,直到'+get.translation(storage)+'死亡';
|
|
|
|
|
if(typeof player.storage.xie=='number'){
|
|
|
|
|
var num=game.phaseNumber-player.storage.xie;
|
|
|
|
|
num=num%6;
|
|
|
|
|
if(num==0){
|
|
|
|
|
str+='(下次生效于本回合)'
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
str+='(下次生效于'+(6-num)+'回合后)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return str;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
onunmark:function(storage,player){
|
|
|
|
|
delete player.storage.xie;
|
|
|
|
|
delete player.storage.xie2;
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-11 14:11:37 +00:00
|
|
|
|
group:['xie3','xie4']
|
|
|
|
|
},
|
|
|
|
|
xie3:{
|
|
|
|
|
trigger:{global:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
var num=game.phaseNumber-player.storage.xie;
|
|
|
|
|
num=num%6;
|
|
|
|
|
if(num){
|
|
|
|
|
num=6-num;
|
|
|
|
|
}
|
|
|
|
|
player.storage.xie2_markcount=num;
|
|
|
|
|
player.updateMarks();
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
xie4:{
|
|
|
|
|
trigger:{global:'dieAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player==player.storage.xie2;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-16 02:11:40 +00:00
|
|
|
|
game.log(player,'解除了','【谐】');
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.removeSkill('xie2');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
luan:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
unique:true,
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target!=player&&!target.hasSkill('luan2');
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('h',{suit:'spade'});
|
|
|
|
|
},
|
|
|
|
|
filterCard:{suit:'spade'},
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
var current=game.findPlayer(function(player){
|
|
|
|
|
return player.hasSkill('luan2');
|
|
|
|
|
});
|
|
|
|
|
if(current){
|
|
|
|
|
current.removeSkill('luan2');
|
|
|
|
|
}
|
|
|
|
|
target.addSkill('luan2');
|
2016-07-16 02:11:40 +00:00
|
|
|
|
// target.storage.luan='now';
|
2016-06-10 02:56:48 +00:00
|
|
|
|
target.storage.luan2=player;
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
2016-06-11 02:51:33 +00:00
|
|
|
|
expose:0.2,
|
2016-06-10 02:56:48 +00:00
|
|
|
|
order:9.1,
|
|
|
|
|
threaten:2,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
var current=game.findPlayer(function(player){
|
|
|
|
|
return player.hasSkill('luan2');
|
|
|
|
|
});
|
|
|
|
|
if(current){
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2016-07-16 02:11:40 +00:00
|
|
|
|
return -1;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
luan2:{
|
2016-07-16 02:11:40 +00:00
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'受到的伤害+1,直到首次进入濒死状态'
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'damageBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.num++;
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.2
|
|
|
|
|
},
|
|
|
|
|
group:['luan3','luan4']
|
|
|
|
|
},
|
|
|
|
|
luan3:{
|
|
|
|
|
trigger:{player:'dyingAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
game.log(player,'解除了','【乱】');
|
|
|
|
|
player.removeSkill('luan2');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
luan2_old:{
|
2016-06-10 02:56:48 +00:00
|
|
|
|
mark:true,
|
2016-06-11 02:51:33 +00:00
|
|
|
|
trigger:{global:'phaseEnd'},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
2016-06-11 02:51:33 +00:00
|
|
|
|
if(player.storage.luan=='now'){
|
|
|
|
|
return event.player==player;
|
|
|
|
|
}
|
|
|
|
|
var num=game.phaseNumber-player.storage.luan;
|
|
|
|
|
return num&&num%6==0;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-06-11 02:51:33 +00:00
|
|
|
|
if(player.storage.luan=='now'){
|
|
|
|
|
player.storage.luan=game.phaseNumber;
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.loseHp();
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
2016-06-11 02:51:33 +00:00
|
|
|
|
content:function(storage,player){
|
|
|
|
|
var str='每隔六回合失去一点体力,直到'+get.translation(storage)+'死亡';
|
|
|
|
|
if(typeof player.storage.luan=='number'){
|
|
|
|
|
var num=game.phaseNumber-player.storage.luan;
|
|
|
|
|
num=num%6;
|
|
|
|
|
if(num==0){
|
|
|
|
|
str+='(下次生效于本回合)'
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
str+='(下次生效于'+(6-num)+'回合后)'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return str;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
onunmark:function(storage,player){
|
|
|
|
|
delete player.storage.luan;
|
|
|
|
|
delete player.storage.luan2;
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-11 14:11:37 +00:00
|
|
|
|
group:['luan3','luan4']
|
|
|
|
|
},
|
2016-07-16 02:11:40 +00:00
|
|
|
|
luan3_old:{
|
2016-06-11 14:11:37 +00:00
|
|
|
|
trigger:{global:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
var num=game.phaseNumber-player.storage.luan;
|
|
|
|
|
num=num%6;
|
|
|
|
|
if(num){
|
|
|
|
|
num=6-num;
|
|
|
|
|
}
|
|
|
|
|
player.storage.luan2_markcount=num;
|
|
|
|
|
player.updateMarks();
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
luan4:{
|
|
|
|
|
trigger:{global:'dieAfter'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player==player.storage.luan2;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-16 02:11:40 +00:00
|
|
|
|
game.log(player,'解除了','【乱】');
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.removeSkill('luan2');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
sheng:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
unique:true,
|
|
|
|
|
mark:true,
|
|
|
|
|
skillAnimation:true,
|
|
|
|
|
animationColor:'metal',
|
|
|
|
|
init:function(player){
|
|
|
|
|
player.storage.sheng=false;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.storage.sheng) return false;
|
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target.isDamaged();
|
|
|
|
|
},
|
|
|
|
|
selectTarget:[1,Infinity],
|
|
|
|
|
content:function(){
|
|
|
|
|
if(target==targets[0]){
|
|
|
|
|
player.turnOver();
|
|
|
|
|
player.addSkill('sheng2');
|
|
|
|
|
player.unmarkSkill('sheng');
|
|
|
|
|
player.storage.sheng=true;
|
|
|
|
|
}
|
|
|
|
|
target.recover();
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:1,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
var eff=ai.get.recoverEffect(target,player,target);
|
|
|
|
|
if(player.hp==1) return eff;
|
|
|
|
|
if(player.hasUnknown()) return 0;
|
|
|
|
|
var num1=0,num2=0,num3=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(ai.get.attitude(player,game.players[i])>0){
|
|
|
|
|
num1++;
|
|
|
|
|
if(game.players[i].isDamaged()){
|
|
|
|
|
num2++;
|
|
|
|
|
if(game.players[i].hp<=1){
|
|
|
|
|
num3++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(num1==num2) return eff;
|
|
|
|
|
if(num2==num1-1&&num3) return eff;
|
|
|
|
|
if(num3>=2) return eff;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
content:'limited'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
sheng2:{
|
|
|
|
|
trigger:{player:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.removeSkill('sheng2');
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetEnabled:function(card,player,target){
|
|
|
|
|
if(player!=target) return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-25 16:38:59 +00:00
|
|
|
|
xiandan_old:{
|
2016-06-10 02:56:48 +00:00
|
|
|
|
mod:{
|
|
|
|
|
selectTarget:function(card,player,range){
|
|
|
|
|
if(card.name=='sha'&&range[1]!=-1){
|
|
|
|
|
var num=0;
|
|
|
|
|
var attack=false;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(player!=game.players[i]){
|
|
|
|
|
if(get.distance(player,game.players[i])<=1){
|
|
|
|
|
num++;
|
|
|
|
|
}
|
|
|
|
|
else if(get.distance(player,game.players[i],'attack')<=1){
|
|
|
|
|
attack=true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(!attack){
|
|
|
|
|
num--;
|
|
|
|
|
}
|
|
|
|
|
if(num>0){
|
|
|
|
|
range[1]+=num;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
playerEnabled:function(card,player,target){
|
|
|
|
|
if(card.name=='sha'&&get.distance(player,target)>1){
|
|
|
|
|
for(var i=0;i<ui.selected.targets.length;i++){
|
|
|
|
|
if(get.distance(player,ui.selected.targets[i])>1){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yihun:{
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
2016-06-25 16:38:59 +00:00
|
|
|
|
return player.num('he',{suit:'spade'})>0&&!player.hasSkill('yihun2');
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
2016-06-20 12:02:56 +00:00
|
|
|
|
var next=player.chooseCardTarget({
|
|
|
|
|
prompt:'是否发动【移魂】?',
|
|
|
|
|
position:'he',
|
|
|
|
|
filterCard:{suit:'spade'},
|
|
|
|
|
ai1:function(card){
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
ai2:function(target){
|
|
|
|
|
var att=-ai.get.attitude(player,target);
|
|
|
|
|
if(target==player.next){
|
|
|
|
|
att/=10;
|
|
|
|
|
}
|
|
|
|
|
if(target==player.next.next){
|
|
|
|
|
att/=2;
|
|
|
|
|
}
|
|
|
|
|
return att;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return player!=target;
|
|
|
|
|
},
|
|
|
|
|
});
|
2016-06-10 02:56:48 +00:00
|
|
|
|
'step 1'
|
|
|
|
|
if(result.bool){
|
2016-06-20 12:02:56 +00:00
|
|
|
|
player.discard(result.cards);
|
|
|
|
|
player.logSkill('yihun',result.targets);
|
|
|
|
|
player.addSkill('yihun2');
|
2016-07-01 01:31:02 +00:00
|
|
|
|
var target=result.targets[0]
|
|
|
|
|
player.storage.yihun2=target;
|
|
|
|
|
if(target&&(get.mode()!='guozhan')||!target.isUnseen()){
|
|
|
|
|
player.markSkillCharacter('yihun2',target,'移魂','在'+get.translation(target)+'的下一回合开始时视为对其使用一张杀');
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
}
|
2016-06-20 12:02:56 +00:00
|
|
|
|
},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
},
|
|
|
|
|
yihun2:{
|
2016-06-25 16:38:59 +00:00
|
|
|
|
trigger:{global:['phaseBegin','dieAfter']},
|
2016-06-20 12:02:56 +00:00
|
|
|
|
forced:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player==player.storage.yihun2;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-06-25 16:38:59 +00:00
|
|
|
|
if(player.storage.yihun2.isAlive()){
|
|
|
|
|
player.useCard({name:'sha'},player.storage.yihun2);
|
|
|
|
|
}
|
2016-06-20 12:02:56 +00:00
|
|
|
|
player.removeSkill('yihun2');
|
|
|
|
|
delete player.storage.yihun2;
|
|
|
|
|
},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
mod:{
|
|
|
|
|
targetEnabled:function(){
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
cardEnabled:function(card,player){
|
|
|
|
|
return false;
|
2016-06-20 12:02:56 +00:00
|
|
|
|
},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-09 15:06:55 +00:00
|
|
|
|
huoyu:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
unique:true,
|
|
|
|
|
mark:true,
|
|
|
|
|
skillAnimation:true,
|
|
|
|
|
animationColor:'fire',
|
|
|
|
|
init:function(player){
|
|
|
|
|
player.storage.huoyu=false;
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.storage.huoyu) return false;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
if(player.num('he',{color:'red'})<2) return false;
|
2016-06-09 15:06:55 +00:00
|
|
|
|
return true;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return player.canUse('chiyuxi',target);
|
|
|
|
|
},
|
|
|
|
|
filterCard:{color:'red'},
|
|
|
|
|
selectCard:2,
|
|
|
|
|
position:'he',
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
selectTarget:-1,
|
|
|
|
|
multitarget:true,
|
|
|
|
|
multiline:true,
|
|
|
|
|
line:'fire',
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
targets.sort(lib.sort.seat);
|
|
|
|
|
player.unmarkSkill('huoyu');
|
|
|
|
|
player.storage.huoyu=true;
|
|
|
|
|
player.useCard({name:'chiyuxi'},targets).animate=false;
|
|
|
|
|
'step 1'
|
|
|
|
|
player.useCard({name:'chiyuxi'},targets).animate=false;
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:5,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(player.hasUnknown()) return 0;
|
|
|
|
|
return ai.get.effect(target,{name:'chiyuxi'},player,target);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
intro:{
|
|
|
|
|
content:'limited'
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-10 02:56:48 +00:00
|
|
|
|
feidan:{
|
2016-06-09 15:06:55 +00:00
|
|
|
|
trigger:{source:'damageAfter'},
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.num('he')==0) return false;
|
|
|
|
|
if(!event.card) return false;
|
|
|
|
|
if(event.card.name!='sha') return false;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=event.player&&get.distance(event.player,game.players[i])<=1) return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var eff=0;
|
|
|
|
|
var targets=[];
|
|
|
|
|
event.targets=targets;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i]!=trigger.player&&get.distance(trigger.player,game.players[i])<=1){
|
|
|
|
|
eff+=ai.get.damageEffect(game.players[i],player,player);
|
|
|
|
|
targets.push(game.players[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-10 02:56:48 +00:00
|
|
|
|
player.chooseToDiscard('是否发动【飞弹】?').set('ai',function(card){
|
2016-06-09 15:06:55 +00:00
|
|
|
|
if(eff>0) return 7-ai.get.value(card);
|
|
|
|
|
return 0;
|
2016-06-10 02:56:48 +00:00
|
|
|
|
}).set('logSkill',['feidan',targets]);
|
2016-06-09 15:06:55 +00:00
|
|
|
|
"step 1"
|
|
|
|
|
if(result.bool){
|
|
|
|
|
event.targets.sort(lib.sort.seat);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
event.finish();
|
|
|
|
|
}
|
|
|
|
|
"step 2"
|
|
|
|
|
if(event.targets.length){
|
|
|
|
|
event.targets.shift().damage();
|
|
|
|
|
event.redo();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetInRange:function(card,player,target){
|
|
|
|
|
if(card.name=='sha'){
|
|
|
|
|
if(get.distance(player,target)<=1) return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yuedong:{
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
direct:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
'step 0'
|
|
|
|
|
var num=1+player.storage.yuedong_num;
|
|
|
|
|
player.chooseTarget('是否发动【乐动】?',[1,num],function(card,player,target){
|
|
|
|
|
if(player.storage.yuedong_recover){
|
|
|
|
|
return target.hp<target.maxHp;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}).set('ai',function(target){
|
|
|
|
|
if(player.storage.yuedong_recover){
|
|
|
|
|
return ai.get.recoverEffect(target,player,player);
|
|
|
|
|
}
|
|
|
|
|
return ai.get.attitude(player,target)/Math.sqrt(2+target.num('h'));
|
|
|
|
|
});
|
|
|
|
|
'step 1'
|
|
|
|
|
if(result.bool){
|
|
|
|
|
player.logSkill('yuedong',result.targets);
|
|
|
|
|
var eff=1+player.storage.yuedong_eff;
|
|
|
|
|
if(player.storage.yuedong_recover){
|
|
|
|
|
result.targets.sort(lib.sort.seat);
|
|
|
|
|
for(var i=0;i<result.targets.length;i++){
|
|
|
|
|
result.targets[i].recover(eff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
game.asyncDraw(result.targets,eff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
expose:0.2,
|
|
|
|
|
threaten:1.6
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
huhuan:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filterCard:true,
|
|
|
|
|
selectCard:2,
|
|
|
|
|
position:'he',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('he')>1&&!player.storage.yuedong_recover;
|
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
player.storage.yuedong_recover=true;
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
order:10.2,
|
|
|
|
|
result:{
|
|
|
|
|
player:function(player){
|
|
|
|
|
var num1=0,num2=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(ai.get.attitude(player,game.players[i])>0){
|
|
|
|
|
num2++;
|
|
|
|
|
if(game.players[i].hp<=2&&game.players[i].maxHp>2){
|
|
|
|
|
num1++;
|
|
|
|
|
if(game.players[i].hp==1){
|
|
|
|
|
num1++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(num1>=3){
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
kuoyin:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filterCard:true,
|
|
|
|
|
selectCard:function(){
|
|
|
|
|
if(_status.event.player.storage.yuedong_eff) return 1;
|
2016-06-10 15:45:51 +00:00
|
|
|
|
if(_status.event.player.storage.yuedong_num) return 2;
|
2016-06-09 15:06:55 +00:00
|
|
|
|
return [1,2];
|
|
|
|
|
},
|
|
|
|
|
position:'he',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
if(player.storage.yuedong_eff&&player.storage.yuedong_num) return false;
|
|
|
|
|
return player.num('he')>0;
|
|
|
|
|
},
|
|
|
|
|
check:function(card){
|
|
|
|
|
var player=_status.event.player;
|
|
|
|
|
var num1=0,num2=0;
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(ai.get.attitude(player,game.players[i])>0){
|
|
|
|
|
num2++;
|
|
|
|
|
if(game.players[i].hp<=2&&game.players[i].maxHp>2){
|
|
|
|
|
num1++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(player.storage.yuedong_recover){
|
|
|
|
|
if(num1>1&&!player.storage.yuedong_num){
|
|
|
|
|
if(ui.selected.cards.length) return 0;
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
if(num2>1&&!player.storage.yuedong_num){
|
|
|
|
|
if(ui.selected.cards.length) return 0;
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
if(num2>2){
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
return 5-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
if(cards.length==1){
|
|
|
|
|
player.storage.yuedong_num+=2;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.storage.yuedong_eff++;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
threaten:1.6,
|
|
|
|
|
order:10.1,
|
|
|
|
|
result:{
|
|
|
|
|
player:1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
group:'kuoyin2'
|
|
|
|
|
},
|
|
|
|
|
kuoyin2:{
|
|
|
|
|
trigger:{player:'phaseBegin'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
silent:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.storage.yuedong_recover=false;
|
|
|
|
|
player.storage.yuedong_num=0;
|
|
|
|
|
player.storage.yuedong_eff=0;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guangshu:{
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
check:function(card){
|
2016-06-10 15:45:51 +00:00
|
|
|
|
var player=_status.event.player;
|
2016-06-09 15:06:55 +00:00
|
|
|
|
var suit=get.suit(card);
|
|
|
|
|
if(suit=='heart'){
|
|
|
|
|
for(var i=0;i<game.players.length;i++){
|
|
|
|
|
if(game.players[i].hp==1&&ai.get.attitude(player,game.players[i])>0){
|
|
|
|
|
return 8-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(suit=='spade'){
|
|
|
|
|
return 7-ai.get.value(card);
|
|
|
|
|
}
|
|
|
|
|
return 6-ai.get.value(card);
|
|
|
|
|
},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('he')>0;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return !target.hasSkill('guangshu_heart')&&
|
|
|
|
|
!target.hasSkill('guangshu_spade')&&
|
|
|
|
|
!target.hasSkill('guangshu_club')&&
|
|
|
|
|
!target.hasSkill('guangshu_diamond');
|
|
|
|
|
},
|
|
|
|
|
filterCard:true,
|
|
|
|
|
position:'he',
|
|
|
|
|
content:function(){
|
|
|
|
|
target.addSkill('guangshu_'+get.suit(cards[0]));
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
expose:0.2,
|
|
|
|
|
threaten:1.6,
|
|
|
|
|
order:5,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
if(!ui.selected.cards.length) return 0;
|
|
|
|
|
switch(get.suit(ui.selected.cards[0])){
|
|
|
|
|
case 'heart':if(target.hp==1) return 1;return 0.1;
|
|
|
|
|
case 'diamond':return 1+Math.sqrt(target.num('h'));
|
|
|
|
|
case 'club':return -target.num('h')-Math.sqrt(target.num('h','sha'));
|
|
|
|
|
case 'spade':return ai.get.damageEffect(target,player,target,'thunder');
|
|
|
|
|
default:return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guangshu_diamond:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'下次造成伤害时摸两张牌'
|
|
|
|
|
},
|
|
|
|
|
trigger:{source:'damageEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.draw(2);
|
|
|
|
|
player.removeSkill('guangshu_diamond');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guangshu_heart:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'进入濒死状态时回复一点体力'
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'dying'},
|
|
|
|
|
priority:6,
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.recover();
|
|
|
|
|
player.removeSkill('guangshu_heart');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guangshu_club:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'无法使用杀直到下一回合结束'
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.removeSkill('guangshu_club');
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
cardEnabled:function(card){
|
|
|
|
|
if(card.name=='sha') return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
guangshu_spade:{
|
|
|
|
|
mark:true,
|
|
|
|
|
intro:{
|
|
|
|
|
content:'下个回合结束阶段受到一点无来源的雷电伤害'
|
|
|
|
|
},
|
|
|
|
|
trigger:{player:'phaseEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.damage('thunder','nosource');
|
|
|
|
|
player.removeSkill('guangshu_spade');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ziyu:{
|
|
|
|
|
trigger:{global:'phaseEnd'},
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return game.phaseNumber%4==0;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var controls=['draw_card'];
|
|
|
|
|
if(player.hp<player.maxHp){
|
|
|
|
|
controls.push('recover_hp');
|
|
|
|
|
}
|
|
|
|
|
controls.push('cancel');
|
|
|
|
|
player.chooseControl(controls).set('prompt','是否发动【自愈】?').set('ai',function(event,player){
|
|
|
|
|
if(player.hp<player.maxHp) return 'recover_hp';
|
|
|
|
|
return 'draw_card';
|
|
|
|
|
});
|
|
|
|
|
"step 1"
|
|
|
|
|
if(result.control!='cancel'){
|
|
|
|
|
player.logSkill('ziyu');
|
|
|
|
|
if(result.control=='draw_card'){
|
|
|
|
|
player.draw();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.recover();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ziyu_old:{
|
|
|
|
|
trigger:{global:'phaseBegin'},
|
|
|
|
|
direct:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player.hasSkill('ziyu3');
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
"step 0"
|
|
|
|
|
var controls=['draw_card'];
|
|
|
|
|
if(player.hp<player.maxHp){
|
|
|
|
|
controls.push('recover_hp');
|
|
|
|
|
}
|
|
|
|
|
controls.push('cancel');
|
|
|
|
|
player.chooseControl(controls).set('prompt','是否发动【自愈】?').set('ai',function(event,player){
|
|
|
|
|
if(player.hp<player.maxHp) return 'recover_hp';
|
|
|
|
|
return 'draw_card';
|
|
|
|
|
});
|
|
|
|
|
"step 1"
|
|
|
|
|
if(result.control!='cancel'){
|
|
|
|
|
player.logSkill('ziyu');
|
|
|
|
|
if(result.control=='draw_card'){
|
|
|
|
|
player.draw();
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.recover();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
group:'ziyu2'
|
|
|
|
|
},
|
|
|
|
|
ziyu2:{
|
|
|
|
|
trigger:{global:'recoverEnd'},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
silent:true,
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.source==player&&event.player!=player;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
trigger.player.addTempSkill('ziyu3',{player:'phaseEnd'});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ziyu3:{},
|
|
|
|
|
shouhu:{
|
|
|
|
|
mod:{
|
|
|
|
|
cardEnabled:function(card){
|
|
|
|
|
if(card.name=='sha') return false;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
enable:'phaseUse',
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return player.num('h','sha')>0;
|
|
|
|
|
},
|
|
|
|
|
filterTarget:function(card,player,target){
|
|
|
|
|
return target.hp<target.maxHp&&target!=player;
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
target.recover();
|
|
|
|
|
},
|
|
|
|
|
filterCard:{name:'sha'},
|
|
|
|
|
ai:{
|
|
|
|
|
order:7,
|
|
|
|
|
threaten:2,
|
|
|
|
|
result:{
|
|
|
|
|
target:function(player,target){
|
|
|
|
|
return ai.get.recoverEffect(target,player,target);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-08 09:05:04 +00:00
|
|
|
|
shanxian:{
|
|
|
|
|
trigger:{global:'phaseBefore'},
|
|
|
|
|
filter:function(event,player){
|
|
|
|
|
return event.player!=player&&!player.isTurnedOver()&&!player.storage.shanxian;
|
|
|
|
|
},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
return ai.get.attitude(player,event.player)<0&&
|
|
|
|
|
((player.num('h')>player.hp&&player.num('h','lebu')==0)||get.distance(player,event.player)>1);
|
|
|
|
|
},
|
|
|
|
|
prompt:function(event,player){
|
|
|
|
|
return '是否对'+get.translation(event.player)+'发动【闪现】?'
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
2016-07-09 00:56:41 +00:00
|
|
|
|
"step 0"
|
|
|
|
|
player.draw(false);
|
|
|
|
|
player.$draw();
|
|
|
|
|
player.line(trigger.player,'green');
|
|
|
|
|
"step 1"
|
2016-06-08 09:05:04 +00:00
|
|
|
|
player.storage.shanxian_h=player.get('h');
|
|
|
|
|
player.storage.shanxian_e=player.get('e');
|
2016-06-15 14:16:41 +00:00
|
|
|
|
player.storage.shanxian_n=2;
|
2016-06-08 09:05:04 +00:00
|
|
|
|
player.syncStorage('shanxian_e');
|
|
|
|
|
player.phase();
|
|
|
|
|
player.storage.shanxian=trigger.player;
|
2016-06-15 14:16:41 +00:00
|
|
|
|
player.removeSkill('shanxian2');
|
2016-07-09 00:56:41 +00:00
|
|
|
|
"step 2"
|
2016-06-08 09:05:04 +00:00
|
|
|
|
if(!player.isTurnedOver()){
|
|
|
|
|
player.turnOver();
|
|
|
|
|
}
|
|
|
|
|
delete player.storage.shanxian;
|
|
|
|
|
},
|
|
|
|
|
mod:{
|
|
|
|
|
targetInRange:function(card,player,target,now){
|
|
|
|
|
if(target==player.storage.shanxian) return true;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ai:{
|
|
|
|
|
expose:0.1,
|
|
|
|
|
effect:{
|
|
|
|
|
target:function(card){
|
|
|
|
|
if(card.name=='guiyoujie') return [0,0];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-15 14:16:41 +00:00
|
|
|
|
shanxian2:{
|
|
|
|
|
trigger:{player:['gainBegin','loseBegin']},
|
|
|
|
|
forced:true,
|
|
|
|
|
popup:false,
|
|
|
|
|
content:function(){
|
|
|
|
|
player.removeSkill('shanxian2');
|
|
|
|
|
}
|
|
|
|
|
},
|
2016-06-08 09:05:04 +00:00
|
|
|
|
shanhui:{
|
|
|
|
|
unique:true,
|
2016-06-15 14:16:41 +00:00
|
|
|
|
trigger:{player:'damageEnd',source:'damageEnd'},
|
2016-06-08 09:05:04 +00:00
|
|
|
|
filter:function(event,player){
|
2016-06-15 14:16:41 +00:00
|
|
|
|
return player.storage.shanxian_h&&player.storage.shanxian_e&&
|
|
|
|
|
player.storage.shanxian_n>0&&!player.hasSkill('shanxian2');
|
2016-06-08 09:05:04 +00:00
|
|
|
|
},
|
|
|
|
|
check:function(event,player){
|
|
|
|
|
var n1=player.num('he');
|
|
|
|
|
var n2=player.storage.shanxian_h.length+player.storage.shanxian_e.length;
|
2016-06-15 14:16:41 +00:00
|
|
|
|
if(n1<n2) return true;
|
|
|
|
|
if(player.hp==player.maxHp) return false;
|
2016-06-08 09:05:04 +00:00
|
|
|
|
if(n1==n2+1) return true;
|
2016-06-08 13:06:42 +00:00
|
|
|
|
if(n2==n2+2&&player.hp<=1) return true;
|
2016-06-08 09:05:04 +00:00
|
|
|
|
return false;
|
|
|
|
|
},
|
|
|
|
|
video:function(player){
|
|
|
|
|
var cards=player.get('he');
|
|
|
|
|
for(var i=0;i<cards.length;i++){
|
|
|
|
|
cards[i].remove();
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<player.storage.shanxian_e.length;i++){
|
|
|
|
|
player.$equip(player.storage.shanxian_e[i]);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
content:function(){
|
|
|
|
|
game.addVideo('skill',player,'shanhui');
|
|
|
|
|
for(var i=0;i<player.storage.shanxian_h.length;i++){
|
2016-06-08 13:06:42 +00:00
|
|
|
|
if(get.position(player.storage.shanxian_h[i])=='s'){
|
2016-06-08 09:05:04 +00:00
|
|
|
|
player.storage.shanxian_h[i]=game.createCard(player.storage.shanxian_h[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(var i=0;i<player.storage.shanxian_e.length;i++){
|
2016-06-08 13:06:42 +00:00
|
|
|
|
if(get.position(player.storage.shanxian_e[i])=='s'){
|
2016-06-08 09:05:04 +00:00
|
|
|
|
player.storage.shanxian_e[i]=game.createCard(player.storage.shanxian_e[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
var cards=player.get('he');
|
|
|
|
|
for(var i=0;i<cards.length;i++){
|
|
|
|
|
ui.discardPile.appendChild(cards[i]);
|
|
|
|
|
}
|
|
|
|
|
player.directgain(player.storage.shanxian_h);
|
|
|
|
|
for(var i=0;i<player.storage.shanxian_e.length;i++){
|
|
|
|
|
player.$equip(player.storage.shanxian_e[i]);
|
|
|
|
|
}
|
|
|
|
|
if(cards.length>player.storage.shanxian_h.length+player.storage.shanxian_e.length){
|
|
|
|
|
player.recover();
|
|
|
|
|
}
|
2016-06-15 14:16:41 +00:00
|
|
|
|
player.storage.shanxian_n--;
|
|
|
|
|
if(player.storage.shanxian_n<=0){
|
|
|
|
|
delete player.storage.shanxian_h;
|
|
|
|
|
delete player.storage.shanxian_e;
|
|
|
|
|
delete player.storage.shanxian_n;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
player.addSkill('shanxian2');
|
|
|
|
|
}
|
2016-06-08 09:05:04 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
translate:{
|
2016-07-19 07:32:04 +00:00
|
|
|
|
liudan:'榴弹',
|
|
|
|
|
liudan_info:'每当你使用一张杀,你可以令所有不是此杀目标的其他角色有50%概率成为此杀的额外目标',
|
|
|
|
|
shoujia:'兽夹',
|
|
|
|
|
shoujia2:'兽夹',
|
|
|
|
|
shoujia3:'兽夹',
|
|
|
|
|
shoujia_info:'出牌阶段限一次,你可以将一张牌背面朝上置于一名其他角色的武将牌上,当该角色使用一张与此牌花色相同的牌指定其他角色为目标时,将此牌置入弃牌堆,该角色将武将牌翻至背面;当该角色对你造成伤害时,将此牌置入弃牌堆',
|
|
|
|
|
shihuo:'嗜火',
|
|
|
|
|
shihuo_info:'锁定技,每当一名角色受到火焰伤害,你摸一张牌',
|
2016-07-18 02:08:26 +00:00
|
|
|
|
shanguang:'闪光',
|
|
|
|
|
shanguang_info:'出牌阶段限一次,你可以弃置一张牌令一名其他角色本回合内不能使用或打出卡牌',
|
|
|
|
|
tiandan:'填弹',
|
2016-07-19 07:32:04 +00:00
|
|
|
|
tiandan_info:'摸牌阶段开始时,你可以跳过出牌和弃牌阶段,然后获得若干张杀直到你的手牌数等于你的体值(最多为5)',
|
2016-07-18 02:08:26 +00:00
|
|
|
|
shenqiang:'神枪',
|
2016-07-19 07:32:04 +00:00
|
|
|
|
shenqiang_info:'若你使用杀指定了惟一目标且造成伤害,则此杀不计入回合内的出杀次数限制',
|
2016-07-17 03:28:46 +00:00
|
|
|
|
mianzhen:'眠针',
|
|
|
|
|
mianzhen2:'眠针',
|
2016-07-25 15:33:50 +00:00
|
|
|
|
mianzhen_info:'出牌阶段限一次,你可以弃置一张牌并令一名其他角色打出一张闪,否则该角色不能使用或打出卡牌直到其受到伤害或下一回合结束',
|
|
|
|
|
aqianghua:'强化',
|
|
|
|
|
aqianghua2:'强化',
|
2016-07-30 13:28:26 +00:00
|
|
|
|
aqianghua_info:'出牌阶段限一次,你可以将你的全部手牌(至少一张)交给一名其他角色,该角色获得一点护甲且下一次造成的伤害+1',
|
2016-07-17 03:28:46 +00:00
|
|
|
|
zhiyuan:'支援',
|
|
|
|
|
zhiyuan_info:'每当你即将造成伤害,你可以防止此伤害,改为令目标回复等量的体力',
|
|
|
|
|
juji:'狙击',
|
|
|
|
|
juji2:'狙击',
|
|
|
|
|
juji3:'狙击',
|
2016-07-24 05:22:17 +00:00
|
|
|
|
juji_info:'出牌阶段限一次,你可以弃置任意张花色不同的牌并指定一名有手牌的其他角色,若该角色的手牌中含有与你弃置的牌花色相同的牌,则本回合内你与其距离为1且该角色不能闪避你的杀',
|
2016-07-17 03:28:46 +00:00
|
|
|
|
duwen:'毒吻',
|
2016-07-26 16:43:59 +00:00
|
|
|
|
duwen2:'毒吻',
|
|
|
|
|
duwen_info:'锁定技,当你造成伤害时,若你的手牌数与受伤害角色相等,此伤害+1',
|
2016-07-17 03:28:46 +00:00
|
|
|
|
zhuagou:'抓钩',
|
|
|
|
|
zhuagou_info:'出牌阶段限一次,你可以弃置一张手牌并将你的座位移到任意位置',
|
|
|
|
|
dulei:'诡雷',
|
|
|
|
|
dulei2:'诡雷',
|
|
|
|
|
dulei_info:'出牌阶段,若你武将牌上没有牌,你可以将一张牌背面朝上置于你的武将牌上,当一名角色使用与该牌花色相同的牌指定你为目标时,你展示并将此牌置于弃牌堆,然后该角色失去一点体力并随机弃置一张牌',
|
2016-07-16 18:53:04 +00:00
|
|
|
|
shuangqiang:'霜枪',
|
|
|
|
|
shuangqiang_info:'每当你对一名未翻面的角色造成伤害,你可以令伤害-1,然后令受伤害角色翻面',
|
2016-07-17 08:06:07 +00:00
|
|
|
|
baoxue:'暴雪',
|
|
|
|
|
baoxue_info:'限定技,出牌阶段,你可以展示并弃置你的所有黑色牌,然后令至多X名其他角色随机弃置一张牌、流失一点体力并将武将牌翻至背面,X为你的弃牌数',
|
2016-07-16 18:53:04 +00:00
|
|
|
|
bingqiang:'冰墙',
|
|
|
|
|
bingqiang2:'冰墙',
|
|
|
|
|
bingqiang2_bg:'墙',
|
|
|
|
|
bingqiang3:'冰墙',
|
|
|
|
|
bingqiang3_bg:'墙',
|
|
|
|
|
bingqiang4:'冰墙',
|
|
|
|
|
bingqiang4_bg:'墙',
|
|
|
|
|
bingqiang5:'冰墙',
|
2016-07-17 08:06:07 +00:00
|
|
|
|
bingqiang5_bg:'障',
|
2016-07-16 18:53:04 +00:00
|
|
|
|
bingqiang_info:'出牌阶段,你可以弃置X张红色牌令一名角色和其相邻角色的防御离+X,或弃置X张黑色牌令一名角色和其相邻角色的进攻离-X,效果持续到你的下个回合开始',
|
|
|
|
|
jidong:'急冻',
|
|
|
|
|
jidong_info:'在一名角色的回合结束阶段,若你的体力值为1,你可以翻面并回复两点体力,在你的武将牌翻至正面前,你防止所有伤害,也不能成为其他角色卡牌的目标',
|
2016-07-16 03:32:55 +00:00
|
|
|
|
jijia:'机甲',
|
|
|
|
|
jijia_info:'锁定技,游戏开始时,你获得一个体力为4的机甲;你的手牌上限为你和机甲的体力之和;你受到的伤害由机甲承担',
|
|
|
|
|
zihui:'自毁',
|
2016-07-16 06:16:24 +00:00
|
|
|
|
zihui_info:'出牌阶段,你可以令距离2以内的所有其他角色选择一项:弃置数量等同你机甲体力值的牌,或受到2点火焰伤害,并在结算完毕后摧毁你的机甲',
|
2016-07-16 03:32:55 +00:00
|
|
|
|
tuijin:'推进',
|
|
|
|
|
tuijin_info:'出牌阶段限一次,若你有机甲,你可以指定一名角色,本回合内视为与其距离为1',
|
|
|
|
|
chongzhuang:'重装',
|
2016-07-16 06:16:24 +00:00
|
|
|
|
chongzhuang_info:'在你失去机甲后,当你累计造成了4点伤害时,你重新获得机甲',
|
2016-06-25 16:38:59 +00:00
|
|
|
|
shouge:'收割',
|
|
|
|
|
shouge_info:'每当你杀死一名角色,你可以获得一张治疗波',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
tuji:'突击',
|
|
|
|
|
tuji_info:'锁定技,在你的回合内,你每使用一次牌后,你计算与其他角色的距离便减少1,直到回合结束',
|
|
|
|
|
mujing:'目镜',
|
2016-07-16 03:32:55 +00:00
|
|
|
|
mujing_info:'每当你对攻击范围不含你的角色使用一张牌,你可以弃置目标一张牌;若你的手牌数不多于目标,你摸一张牌',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
feiren:'飞刃',
|
|
|
|
|
feiren2:'飞刃',
|
|
|
|
|
feiren_info:'你的杀无视距离和防具;你的黑桃杀可以额外结算一次,梅花杀可以额外指定一个目标',
|
|
|
|
|
zhanlong:'斩龙',
|
|
|
|
|
zhanlong_info:'限定技,回合开始阶段,若你体力值为1,你可以弃置所有牌(至少一张),然后将三张杀置入你的手牌,若如此做,你本回合使用杀无次数限制',
|
|
|
|
|
xie:'谐',
|
|
|
|
|
xie2:'谐',
|
2016-06-11 02:51:33 +00:00
|
|
|
|
xie_info:'出牌阶段,你可以弃置一张红桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合回复一点体力,直到你死亡。同一时间只能对一人发动',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
luan:'乱',
|
|
|
|
|
luan2:'乱',
|
2016-07-16 02:11:40 +00:00
|
|
|
|
luan_old_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色自其下一回合开始每隔六回合失去一点体力,直到你死亡。同一时间只能对一人发动',
|
|
|
|
|
luan_info:'出牌阶段,你可以弃置一张黑桃手牌并指定一名角色,该角色受到的伤害+1,直到你死亡或其首次进入濒死状态。同一时间只能对一人发动',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
sheng:'圣',
|
|
|
|
|
sheng_info:'限定技,出牌阶段,你可以将你的武将牌翻面,然后令任意名角色回复一点体力,若如此做,你不能成为其他角色的卡牌目标直到下一回合开始',
|
|
|
|
|
xiandan:'霰弹',
|
2016-06-25 16:38:59 +00:00
|
|
|
|
xiandan_info:'每当你使用一张杀,你可以弃置一张红色牌令此杀不可闪避,或弃置一张黑色牌令此杀伤害+1',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
yihun:'移魂',
|
2016-06-20 12:02:56 +00:00
|
|
|
|
yihun_info:'回合结束阶段,你可以弃置一张黑桃牌并指定一名其他角色,你在该角色下一回合开始时视为对其使用一张杀;在此之前,你不能使用卡牌,也不能成为卡牌的目标',
|
2016-06-10 02:56:48 +00:00
|
|
|
|
feidan:'飞弹',
|
|
|
|
|
feidan_info:'你的杀只能对距离1以外的角色使用;每当你使用杀造成伤害后,你可以弃置一张牌对距离目标1以内的其他角色各造成一点伤害',
|
2016-06-09 15:06:55 +00:00
|
|
|
|
huoyu:'火雨',
|
|
|
|
|
huoyu_info:'限定技,出牌阶段,你可以弃置两张红色牌,视为使用两张炽羽袭',
|
|
|
|
|
yuedong:'乐动',
|
|
|
|
|
yuedong_info:'回合结束阶段,你可以令一名角色摸一张牌',
|
|
|
|
|
kuoyin:'扩音',
|
|
|
|
|
kuoyin_info:'出牌阶段,你可以弃置一张牌令本回合乐动的目标数改为3,或弃置两张牌令本回合乐动的摸牌或治疗量改为2',
|
|
|
|
|
huhuan:'互换',
|
|
|
|
|
huhuan_info:'出牌阶段,你可以弃置两张牌令本回合乐动的摸牌效果改回复体力',
|
|
|
|
|
guangshu:'光枢',
|
|
|
|
|
guangshu_heart:'光盾',
|
|
|
|
|
guangshu_spade:'光塔',
|
|
|
|
|
guangshu_club:'光井',
|
|
|
|
|
guangshu_diamond:'光流',
|
|
|
|
|
guangshu_info:'出牌阶段,你可以弃置一张牌,并指定一名角色,根据弃置牌的花色执行如下效果:♥该角色进入濒死状态时回复一点体力;♦︎该角色下次造成伤害时摸两张牌;♣该角色无法使用杀直到下一回合结束;♠该角色于下个回合结束阶段受到一点无来源的雷电伤害',
|
|
|
|
|
ziyu:'自愈',
|
|
|
|
|
ziyu_info:'在一名角色的回合结束阶段,你可以回复一点体力或摸一张牌,每隔四回合发动一次',
|
|
|
|
|
shouhu:'守护',
|
|
|
|
|
shouhu_info:'你不能使用杀;出牌阶段,你可以弃置一张杀令一名其他角色回复一点体力',
|
2016-06-08 09:05:04 +00:00
|
|
|
|
shanxian:'闪现',
|
2016-07-09 00:56:41 +00:00
|
|
|
|
shanxian_info:'在一名其他角色的回合开始前,若你的武将牌正面朝上,你可以摸一张牌并进行一个额外回合,并在回合结束后将武将牌翻至背面。若如此做,你对其使用卡牌无视距离直到回合结束。',
|
2016-06-08 09:05:04 +00:00
|
|
|
|
shanhui:'闪回',
|
2016-07-09 00:56:41 +00:00
|
|
|
|
shanhui_info:'每当你造成或受到一次伤害,你可以将你的牌重置为上次发动闪现时的状态,若你的牌数因此而减少,你回复一点体力。每个状态最多可重现两次',
|
2016-06-08 09:05:04 +00:00
|
|
|
|
ow_liekong:'猎空',
|
|
|
|
|
ow_sishen:'死神',
|
|
|
|
|
ow_tianshi:'天使',
|
|
|
|
|
ow_falaozhiying:'法老之鹰',
|
|
|
|
|
ow_zhixuzhiguang:'秩序之光',
|
|
|
|
|
ow_luxiao:'卢西奥',
|
|
|
|
|
ow_shibing:'士兵76',
|
|
|
|
|
ow_yuanshi:'源氏',
|
2016-07-16 03:32:55 +00:00
|
|
|
|
ow_chanyata:'禅雅塔',
|
|
|
|
|
ow_dva:'DVA',
|
2016-07-16 18:53:04 +00:00
|
|
|
|
ow_mei:'小美',
|
2016-07-17 03:28:46 +00:00
|
|
|
|
ow_heibaihe:'黑百合',
|
|
|
|
|
ow_ana:'安娜',
|
|
|
|
|
ow_baolei:'堡垒',
|
|
|
|
|
ow_maikelei:'麦克雷',
|
|
|
|
|
ow_banzang:'半藏',
|
|
|
|
|
ow_kuangshu:'狂鼠',
|
|
|
|
|
ow_tuobiang:'托比昂',
|
|
|
|
|
ow_laiyinhate:'莱因哈特',
|
|
|
|
|
ow_luba:'路霸',
|
|
|
|
|
ow_wensidun:'温斯顿',
|
|
|
|
|
ow_zhaliya:'查莉娅',
|
2016-06-08 01:43:10 +00:00
|
|
|
|
}
|
|
|
|
|
};
|