noname/character/sp.js

7532 lines
212 KiB
JavaScript
Raw Normal View History

'use strict';
2015-04-29 03:25:17 +00:00
character.sp={
2016-05-07 14:55:53 +00:00
connect:true,
2015-04-29 03:25:17 +00:00
character:{
2015-11-26 00:50:57 +00:00
yangxiu:['male','wei',3,['jilei','danlao']],
chenlin:['male','wei',3,['bifa','songci']],
caohong:['male','wei',4,['yuanhu']],
xiahouba:['male','shu',4,['baobian']],
gongsunzan:['male','qun',4,['yicong']],
2016-08-10 14:07:35 +00:00
yuanshu:['male','qun',4,['yongsi','weidi']],
2015-11-26 00:50:57 +00:00
sp_diaochan:['female','qun',3,['lihun','biyue']],
sp_zhaoyun:['male','qun',3,['longdan','chongzhen']],
jsp_zhaoyun:['male','qun',3,['chixin','yicong','suiren']],
liuxie:['male','qun',3,['tianming','mizhao']],
zhugejin:['male','wu',3,['hongyuan','huanshi','mingzhe']],
zhugeke:['male','wu',3,['aocai','duwu']],
guanyinping:['female','shu',3,['huxiao','xueji','wuji']],
simalang:['male','wei',3,['junbing','quji']],
zhangxingcai:['female','shu',3,['shenxian','qiangwu']],
fuwan:['male','qun',4,['moukui']],
2017-01-16 07:48:07 +00:00
sp_sunshangxiang:['female','shu',3,['liangzhu','fanxiang']],
2015-11-26 00:50:57 +00:00
caoang:['male','wei',4,['kaikang']],
re_yuanshu:['male','qun',4,['wangzun','tongji']],
sp_caoren:['male','wei',4,['kuiwei','yanzheng']],
zhangbao:['male','qun',3,['zhoufu','yingbin']],
zhangliang:['male','qun',3,['fulu','fuji']],
maliang:['male','shu',3,['xiemu','naman']],
sp_pangtong:['male','qun',3,['manjuan','zuixiang']],
zhugedan:['male','wei',4,['gongao','juyi']],
sp_jiangwei:['male','shu',4,['kunfen','fengliang']],
sp_machao:['male','qun',4,['zhuiji','cihuai']],
sunhao:['male','wu',5,['canshi','chouhai']],
shixie:['male','qun',3,['biluan','lixia']],
2015-12-09 13:16:20 +00:00
mayunlu:['female','shu',4,['fengpo','mashu']],
2015-11-26 00:50:57 +00:00
zhanglu:['male','qun',3,['yishe','bushi','midao']],
wutugu:['male','qun',15,['ranshang','hanyong']],
sp_caiwenji:['female','wei',3,['chenqing','mozhi']],
zhugeguo:['female','shu',3,['yuhua','qirang']],
2015-12-19 09:28:50 +00:00
liuzan:['male','wu',4,['fenyin']],
lingcao:['male','wu',4,['dujin']],
2017-01-12 14:50:54 +00:00
sunru:['female','wu',3,['yingjian','shixin']],
2015-12-19 09:28:50 +00:00
lingju:['female','qun',3,['jieyuan','fenxin']],
2015-12-31 07:03:13 +00:00
lifeng:['male','shu',3,['tunchu','shuliang']],
2016-03-18 08:33:13 +00:00
cuiyan:['male','wei',3,['yawang','xunzhi']],
sp_zhangfei:['male','shu',4,['jie','dahe']],
jsp_guanyu:['male','wei',4,['wusheng','danji']],
jsp_huangyueying:['female','qun',3,['jiqiao','linglong']],
2016-01-24 08:34:21 +00:00
sunluyu:['female','wu',3,['meibu','mumu']],
hanba:['female','qun',4,['fentian','zhiri']],
2016-01-28 06:46:42 +00:00
zumao:['male','wu',4,['yinbing','juedi']],
2016-03-18 08:33:13 +00:00
wenpin:['male','wei',4,['zhenwei']],
2016-02-14 09:04:31 +00:00
daxiaoqiao:['female','wu',3,['xingwu','luoyan']],
sp_daqiao:['female','wu',3,['yanxiao','anxian']],
2016-02-15 12:03:41 +00:00
sp_ganning:['male','wu',4,['yinling','junwei']],
2016-03-18 08:33:13 +00:00
sp_xiahoudun:['male','wei',4,['fenyong','xuehen']],
2016-07-02 16:16:11 +00:00
sp_lvmeng:['male','wu',3,['tanhu','mouduan']],
2016-03-18 08:33:13 +00:00
wangji:['male','wei',3,['qizhi','jinqu']],
2016-05-10 10:45:06 +00:00
guansuo:['male','shu',4,['zhengnan','xiefang']],
tadun:['male','qun',4,['luanzhan']],
2016-05-11 15:50:00 +00:00
yanbaihu:['male','qun',4,['zhidao','jili']],
2016-06-04 08:04:13 +00:00
chengyu:['male','wei',3,['shefu','benyu']],
2016-08-10 11:23:23 +00:00
2016-08-09 16:48:05 +00:00
wanglang:['male','wei',3,['gushe','jici']],
sp_pangde:['male','wei',4,['mashu','juesi']],
sp_jiaxu:['male','wei',3,['zhenlue','jianshu','yongdi']],
2016-09-15 02:21:42 +00:00
2016-09-20 07:21:28 +00:00
litong:['male','wei',4,['tuifeng']],
mizhu:['male','shu',3,['ziyuan','jugu']],
buzhi:['male','wu',3,['hongde','dingpan']],
2017-01-13 16:02:19 +00:00
sp_liubei:['male','shu',4,['zhaolie','shichou']],
caochun:['male','wei',4,['shanjia']],
zhuling:['male','wei',4,['zhanyi']],
dongbai:['female','qun',3,['lianzhu','xiehui']],
2015-04-29 03:25:17 +00:00
},
2015-11-28 07:19:04 +00:00
perfectPair:{
zhugejin:['zhugeke'],
guanyinping:['guanyu'],
zhangxingcai:['liushan'],
fuwan:['fuhuanghou'],
sunshangxiang:['liubei'],
caoang:['caocao'],
zhangbao:['zhangliang','zhangjiao'],
zhangliang:['zhangjiao'],
maliang:['masu'],
2015-12-19 09:28:50 +00:00
lingcao:['lingtong'],
lingju:['diaochan','lvbu'],
2016-01-07 09:29:44 +00:00
jiangqing:['zhoutai'],
dingfeng:['xusheng'],
caohong:['caoren'],
2016-02-14 09:04:31 +00:00
daxiaoqiao:['zhouyu','sunce'],
2016-03-18 08:33:13 +00:00
cuiyan:['caocao'],
2016-08-10 11:23:23 +00:00
guansuo:['guanyu'],
2016-08-28 00:30:25 +00:00
mateng:['machao','madai','mayunlu'],
madai:['mayunlu'],
chengpu:['zhouyu'],
hanba:['swd_muyun'],
2017-01-13 18:51:13 +00:00
dongbai:['dongzhuo']
2015-11-28 07:19:04 +00:00
},
2015-04-29 03:25:17 +00:00
skill:{
2017-01-14 04:56:52 +00:00
lianzhu:{
enable:'phaseUse',
usable:1,
filterCard:true,
position:'he',
filterTarget:function(card,player,target){
return target!=player;
},
check:function(card){
var num=ai.get.value(card);
if(get.color(card)=='black'){
if(num>=6) return 0;
return 20-num;
}
else{
if(_status.event.player.needsToDiscard()){
return 7-num;
}
}
return 0;
},
discard:false,
prepare:'give',
content:function(){
'step 0'
target.gain(cards,player);
if(get.color(cards[0])=='black'){
target.chooseToDiscard(2,'he','弃置两张牌,或令'+get.translation(player)+'摸两张牌').set('ai',function(card){
if(_status.event.goon) return 7-ai.get.value(card);
return 0;
}).set('goon',ai.get.attitude(target,player)<0);
}
else{
event.finish();
}
'step 1'
if(!result.bool){
player.draw(2);
}
},
ai:{
order:8,
expose:0.2,
result:{
target:function(player,target){
if(ui.selected.cards.length&&get.color(ui.selected.cards[0])=='red'){
if(target.num('h')<player.num('h')) return 1;
return 0.5;
}
return -1;
}
}
}
},
2017-01-13 16:02:19 +00:00
xiehui:{
mod:{
2017-01-13 18:51:13 +00:00
maxHandcard:function(player,num){
var hs=player.get('h');
for(var i=0;i<hs.length;i++){
if(get.color(hs[i])=='black'){
num++;
}
}
return num;
},
},
trigger:{global:'gainBegin'},
forced:true,
popup:false,
filter:function(event,player){
2017-01-14 04:56:52 +00:00
if(event.source==player&&event.player!=player){
2017-01-13 18:51:13 +00:00
for(var i=0;i<event.cards.length;i++){
if(get.color(event.cards[i])=='black') return true;
}
2017-01-13 16:02:19 +00:00
}
2017-01-13 18:51:13 +00:00
return false;
},
content:function(){
trigger.player.addSkill('xiehui2');
if(!trigger.player.storage.xiehui2){
trigger.player.storage.xiehui2=[];
}
2017-01-14 04:56:52 +00:00
for(var i=0;i<trigger.cards.length;i++){
if(get.color(trigger.cards[i])=='black'){
trigger.player.storage.xiehui2.add(trigger.cards[i]);
}
}
2017-01-13 18:51:13 +00:00
}
},
xiehui2:{
mark:true,
intro:{
2017-01-14 04:56:52 +00:00
content:'不能使用、打出或弃置获得的黑色牌',
nocount:true
2017-01-13 18:51:13 +00:00
},
mod:{
cardDiscardable:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false;
},
cardEnabled:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false;
},
cardUsable:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false;
},
cardRespondable:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false;
},
cardSavable:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false;
},
},
2017-01-14 04:56:52 +00:00
group:['xiehui3','xiehui4']
2017-01-13 18:51:13 +00:00
},
xiehui3:{
trigger:{player:'changeHp'},
forced:true,
popup:false,
filter:function(event){
return event.num<0;
},
content:function(){
player.removeSkill('xiehui2');
delete player.storage.xiehui2;
2017-01-13 16:02:19 +00:00
}
},
2017-01-14 04:56:52 +00:00
xiehui4:{
trigger:{player:'loseEnd'},
forced:true,
popup:false,
silent:true,
content:function(){
if(player.storage.xiehui2){
for(var i=0;i<player.storage.xiehui2.length;i++){
if(trigger.cards.contains(player.storage.xiehui2[i])){
player.storage.xiehui2.splice(i--,1);
}
}
}
// player.updateMarks();
}
},
2017-01-13 16:02:19 +00:00
shanjia:{
init:function(player){
player.storage.shanjia=0;
},
mark:true,
intro:{
content:function(storage){
if(storage==0) return '未使用过装备牌';
return '已使用过'+storage+'张装备牌';
}
},
group:'shanjia2',
trigger:{player:'phaseUseBegin'},
frequent:true,
filter:function(event,player){
return player.storage.shanjia>0;
},
content:function(){
'step 0'
player.draw(player.storage.shanjia);
'step 1'
player.chooseToDiscard('he',player.storage.shanjia,true);
'step 2'
var useCard=false;
if(result.bool&&result.cards){
for(var i=0;i<result.cards.length;i++){
if(result.cards[i].original=='e'){
useCard=true;break;
}
}
}
if(useCard){
player.chooseTarget('是否视为使用一张杀?',function(card,player,target){
return lib.filter.targetEnabled({name:'sha'},player,target);
}).set('ai',function(target){
return ai.get.effect(target,{name:'sha'},_status.event.player);
});
}
else{
event.finish();
}
'step 3'
if(result.bool){
2017-01-18 03:00:22 +00:00
player.useCard({name:'sha'},result.targets,false);
2017-01-13 16:02:19 +00:00
}
},
ai:{
threaten:function(player,target){
if(typeof target.storage.shanjia=='number'){
return Math.min(2,Math.sqrt(1+target.storage.shanjia));
}
}
}
},
shanjia2:{
trigger:{player:'useCard'},
forced:true,
popup:false,
silent:true,
filter:function(event,player){
return get.type(event.card)=='equip'&&player.storage.shanjia<7;
},
content:function(){
player.storage.shanjia++;
player.updateMarks();
}
},
zhanyi:{
enable:'phaseUse',
usable:1,
filterCard:true,
position:'he',
check:function(card){
var player=_status.event.player;
if(player.hp<3) return 0;
var type=get.type(card,'trick');
if(type=='trick'){
return 6-ai.get.value(card);
}
else if(type=='equip'){
2017-01-15 06:58:39 +00:00
if(player.hasSha()){
2017-01-13 16:02:19 +00:00
for(var i=0;i<game.players.length;i++){
if(player.canUse('sha',game.players[i])&&
ai.get.attitude(player,game.players[i])<0&&
ai.get.effect(game.players[i],{name:'sha'},player,player)>0){
return 6-ai.get.value(card);
}
}
}
}
return 0;
},
content:function(){
player.loseHp();
switch(get.type(cards[0],'trick')){
case 'basic':player.addTempSkill('zhanyi_basic','phaseAfter');break;
case 'equip':player.addTempSkill('zhanyi_equip','phaseAfter');break;
case 'trick':player.addTempSkill('zhanyi_trick','phaseAfter');player.draw(2);break;
}
},
ai:{
order:9.1,
result:{
player:1
}
}
},
zhanyi_basic:{
group:['zhanyi_basic_sha','zhanyi_basic_jiu','zhanyi_basic_tao']
},
zhanyi_basic_tao:{
enable:'chooseToUse',
filterCard:{type:'basic'},
viewAs:{name:'tao'},
viewAsFilter:function(player){
if(!player.num('h',{type:'basic'})) return false;
},
prompt:'将一张基本牌当桃使用',
check:function(card){
return 8-ai.get.value(card);
},
ai:{
skillTagFilter:function(player){
if(!player.num('h',{type:'basic'})) return false;
},
save:true,
}
},
zhanyi_basic_sha:{
enable:'chooseToUse',
filterCard:{type:'basic'},
viewAs:{name:'sha'},
viewAsFilter:function(player){
if(!player.num('h',{type:'basic'})) return false;
},
prompt:'将一张基本牌当杀使用',
check:function(card){return 4-ai.get.value(card)},
ai:{
skillTagFilter:function(player){
if(!player.num('h',{type:'basic'})) return false;
},
respondSha:true,
}
},
zhanyi_basic_jiu:{
enable:'chooseToUse',
filterCard:{type:'basic'},
viewAs:{name:'jiu'},
viewAsFilter:function(player){
if(!player.num('h',{type:'basic'})) return false;
},
prompt:'将一张基本牌当酒使用',
check:function(card){
if(_status.event.type=='dying') return 1;
return 4-ai.get.value(card);
},
ai:{
skillTagFilter:function(player){
return player.num('h',{type:'basic'})>0&&player.hp<=0;
},
save:true,
}
},
zhanyi_equip:{
trigger:{player:'shaBegin'},
forced:true,
filter:function(event,player){
return event.target.num('he')>0;
},
content:function(){
trigger.target.chooseToDiscard('he',true,2);
}
},
zhanyi_trick:{
mod:{
targetInRange:function(){
return true;
}
}
},
shichou:{
skillAnimation:true,
unique:true,
enable:'phaseUse',
zhuSkill:true,
filter:function(event,player){
if(!player.hasZhuSkill('shichou'))return false;
if(player.num('he')<2) return false;
return !player.storage.shichou;
},
selectCard:2,
init:function(player){
2017-01-19 13:00:41 +00:00
if(player.hasZhuSkill('shichou')){
player.markSkill('shichou');
player.storage.shichou=false;
}
2017-01-13 16:02:19 +00:00
},
filterTarget:function(card,player,target){
return target.group=='shu'&&target!=player;
},
filterCard:true,
position:'he',
check:function(card){
return 7-ai.get.value(card);
},
discard:false,
prepare:'give',
content:function(){
player.storage.shichou=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('shichou');
2017-01-13 18:51:13 +00:00
target.gain(cards,player);
2017-01-13 16:02:19 +00:00
player.storage.shichou_target=target;
player.addSkill('shichou2');
target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态');
},
intro:{
content:'limited'
},
ai:{
order:7,
result:{
player:function(player,target){
if(player.hasUnknown()) return 0;
var att=ai.get.attitude(player,target);
if(att<=0){
if(target.hp==1) return (10-att)/2;
return 10-att;
}
else{
if(target.hp==1) return 0;
return (10-att)/4;
}
},
}
}
},
shichou2:{
group:'shichou3',
trigger:{player:'damageBefore'},
forced:true,
popup:false,
content:function(){
trigger.untrigger();
trigger.player=player.storage.shichou_target;
trigger.player.addSkill('shichou4');
trigger.trigger('damageBefore');
player.logSkill('shichou2',player.storage.shichou_target);
game.delay(0.5);
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'damage')){
if(player.hasSkill('jueqing')) return [1,-2];
if(ai.get.attitude(player,target)>0) return [0,0];
var eff=ai.get.damageEffect(target.storage.shichou_target,player,target);
if(eff>0){
return [0,1];
}
else if(eff<0){
return [0,-2];
}
else{
return [0,0];
}
}
}
}
}
},
shichou3:{
trigger:{global:['dying','dieBegin']},
forced:true,
popup:false,
priority:10,
filter:function(event,player){
return event.player==player.storage.shichou_target;
},
content:function(){
trigger.player.unmarkSkill('shichou');
delete player.storage.shichou_target;
player.removeSkill('shichou2');
}
},
shichou4:{
trigger:{player:['damageAfter','damageCancelled']},
forced:true,
popup:false,
audio:false,
content:function(){
if(event.triggername=='damageAfter'&&trigger.num){
player.draw(trigger.num);
}
player.removeSkill('shichou4');
}
},
zhaolie:{
trigger:{player:'phaseDrawBegin'},
check:function(event,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&
get.distance(player,game.players[i],'attack')<=1&&
ai.get.attitude(player,game.players[i])<=0&&
ai.get.damageEffect(game.players[i],player,player)>0){
return true;
}
}
return false;
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('zhaolie'),function(card,player,target){
return target!=player&&get.distance(player,target,'attack')<=1;
}).set('ai',function(target){
var player=_status.event.player;
if(ai.get.attitude(player,target)>0) return 0;
return ai.get.damageEffect(target,player,player);
});
'step 1'
if(result.bool){
trigger.num--;
player.storage.zhaolie=result.targets[0];
player.logSkill('zhaolie',result.targets);
player.addTempSkill('zhaolie2','phaseDrawAfter');
}
}
},
zhaolie2:{
trigger:{player:'phaseDrawEnd'},
forced:true,
popup:false,
content:function(){
'step 0'
event.cards=get.cards(3);
player.showCards(event.cards);
'step 1'
event.basic=[];
event.nonbasic=[];
for(var i=0;i<event.cards.length;i++){
if(get.type(event.cards[i])=='basic'){
if(event.cards[i].name=='tao'){
ui.discardPile.appendChild(event.cards[i]);
}
else{
event.basic.push(event.cards[i]);
}
}
else{
ui.discardPile.appendChild(event.cards[i]);
event.nonbasic.push(event.cards[i]);
}
}
var num=event.nonbasic.length;
if(num==0){
if(event.basic.length==0){
event.finish();
return;
}
player.storage.zhaolie.chooseTarget(function(card,player,target){
var source=_status.event.source;
return target==source||target==source.storage.zhaolie;
},true,'选择一个目标获得'+get.translation(event.basic)).set('ai',function(target){
return ai.get.attitude(_status.event.player,target);
}).set('source',player);
}
else{
player.storage.zhaolie.chooseToDiscard(num,'he','弃置'+get.cnNumber(num)+
'张牌,或受到'+get.cnNumber(num)+'点伤害').set('ai',function(card){
var player=_status.event.player;
switch(_status.event.num){
case 1:return player.hp>1?0:7-ai.get.value(card);
case 2:return 8-ai.get.value(card);
case 3:return 10-ai.get.value(card);
default:return 0;
}
}).set('num',num);
}
'step 2'
var num=event.nonbasic.length;
var undone=false;
if(num==0){
if(event.basic.length){
result.targets[0].gain(event.basic,'gain2');
game.log(result.targets[0],'获得了',event.basic);
}
}
else{
if(result.bool){
if(event.basic.length){
player.gain(event.basic,'gain2');
game.log(player,'获得了',event.basic);
}
}
else{
player.storage.zhaolie.damage(num);
if(event.basic.length){
undone=true;
}
}
}
if(!undone){
delete player.storage.zhaolie;
event.finish();
}
'step 3'
if(player.storage.zhaolie.isAlive()){
game.log(player.storage.zhaolie,'获得了',event.basic);
player.storage.zhaolie.gain(event.basic,'gain2');
}
else{
for(var i=0;i<event.basic.length;i++){
ui.discardPile.appendChild(event.basic[i]);
}
}
delete player.storage.zhaolie;
}
},
2017-01-12 14:50:54 +00:00
yingjian:{
trigger:{player:'phaseBegin'},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt('yingjian'),function(card,player,target){
return lib.filter.targetEnabled({name:'sha'},player,target);
2017-01-13 16:02:19 +00:00
}).set('ai',function(target){
return ai.get.effect(target,{name:'sha'},_status.event.player);
});
2017-01-12 14:50:54 +00:00
"step 1"
if(result.bool){
player.logSkill('yingjian');
player.useCard({name:'sha'},result.targets,false);
}
},
ai:{
threaten:function(player,target){
return 1.6;
}
}
},
2016-09-20 07:21:28 +00:00
dingpan:{
enable:'phaseUse',
filter:function(event,player){
var num;
if(get.mode()=='identity'){
num=get.population('fan');
}
else{
num=1;
}
if(player.getStat().skill.dingpan>=num) return false;
return true;
},
filterTarget:function(card,player,target){
return target.num('e')>0;
},
content:function(){
'step 0'
target.draw();
'step 1'
2017-01-14 08:57:14 +00:00
var goon=ai.get.damageEffect(target,player,target)>=0;
if(!goon&&target.hp>=4&&ai.get.attitude(player,target)<0){
var es=target.get('e');
for(var i=0;i<es.length;i++){
if(ai.get.equipValue(es[i],target)>=8){
goon=true;break;
}
}
}
2016-09-20 07:21:28 +00:00
target.chooseControl('选项一','选项二',function(){
if(_status.event.goon) return '选项二';
return '选项一';
2017-01-14 08:57:14 +00:00
}).set('goon',goon).set('prompt','定叛<br><br><div class="text">选项一:令'+get.translation(player)+'弃置你装备区里的一张牌</div><br><div class="text">选项二:获得你装备区内的所有牌并受到一点伤害</div>');
2016-09-20 07:21:28 +00:00
'step 2'
if(result.control=='选项一'){
player.discardPlayerCard(target,true,'e');
event.finish();
}
else{
2017-01-14 08:57:14 +00:00
target.gain(target.get('e'),'gain2');
2016-09-20 07:21:28 +00:00
}
'step 3'
game.delay(0.5);
target.damage();
},
ai:{
order:7,
result:{
target:function(player,target){
2017-01-14 08:57:14 +00:00
if(ai.get.damageEffect(target,player,target)>=0) return 2;
2016-09-20 07:21:28 +00:00
var att=ai.get.attitude(player,target);
if(att==0) return 0;
var es=target.get('e');
for(var i=0;i<es.length;i++){
var val=ai.get.equipValue(es[i],target);
2017-01-14 08:57:14 +00:00
if(val<=4){
if(att>0){
return 1;
}
}
else if(val>=7){
if(att<0){
return -1;
}
}
2016-09-20 07:21:28 +00:00
}
return 0;
}
}
}
},
hongde:{
trigger:{player:['gainEnd','loseEnd']},
direct:true,
filter:function(event,player){
return event.cards&&event.cards.length>1;
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('hongde'),function(card,player,target){
return target!=player;
}).set('ai',function(target){
return ai.get.attitude(player,target);
});
'step 1'
if(result.bool){
player.logSkill('hongde',result.targets);
result.targets[0].draw();
}
}
},
ziyuan:{
enable:'phaseUse',
usable:1,
filterCard:function(card){
var num=0;
for(var i=0;i<ui.selected.cards.length;i++){
num+=get.number(ui.selected.cards[i]);
}
return get.number(card)+num<=13;
},
selectCard:function(){
var num=0;
for(var i=0;i<ui.selected.cards.length;i++){
num+=get.number(ui.selected.cards[i]);
}
if(num==13) return ui.selected.cards.length;
return ui.selected.cards.length+2;
},
discard:false,
2017-01-13 16:02:19 +00:00
prepare:'give',
2016-09-20 07:21:28 +00:00
filterTarget:function(card,player,target){
return player!=target;
},
check:function(card){
var num=0;
for(var i=0;i<ui.selected.cards.length;i++){
num+=get.number(ui.selected.cards[i]);
}
if(num+get.number(card)==13) return 9-ai.get.value(card);
if(ui.selected.cards.length==0){
var cards=_status.event.player.get('h');
for(var i=0;i<cards.length;i++){
for(var j=i+1;j<cards.length;j++){
if(cards[i].number+cards[j].number==13){
if(cards[i]==card||cards[j]==card) return 8.5-ai.get.value(card);
}
}
}
}
return 0;
},
content:function(){
2017-01-13 18:51:13 +00:00
target.gain(cards,player);
2016-09-20 07:21:28 +00:00
target.recover();
},
ai:{
order:function(skill,player){
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp&&
game.players[i]!=player&&
ai.get.recoverEffect(game.players[i],player,player)>0){
return 10;
}
}
return 1;
},
result:{
player:function(player,target){
var eff=ai.get.recoverEffect(target,player,player);
if(eff<0) return 0;
if(eff>0){
if(target.hp==1) return 3;
return 2;
}
if(player.needsToDiscard()) return 1;
return 0;
}
},
threaten:1.3
}
},
jugu:{
mod:{
maxHandcard:function(player,num){
return num+player.maxHp;
}
},
trigger:{global:'gameStart'},
forced:true,
content:function(){
player.draw(player.maxHp);
}
},
2016-09-20 05:06:35 +00:00
tuifeng:{
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return player.num('h')>0;
},
2016-09-20 07:21:28 +00:00
init:function(player){
player.storage.tuifeng=[];
},
2016-09-20 05:06:35 +00:00
content:function(){
'step 0'
2016-10-09 04:59:47 +00:00
player.chooseCard(get.prompt('tuifeng'),'he',[1,trigger.num]).set('ai',function(card){
2016-09-20 07:21:28 +00:00
if(card.name=='du') return 20;
return 7-ai.get.useful(card);
});
'step 1'
if(result.bool){
player.logSkill('tuifeng');
player.lose(result.cards,ui.special);
player.$give(result.cards,player);
2016-10-09 04:59:47 +00:00
for(var i=0;i<result.cards.length;i++){
player.storage.tuifeng.push(result.cards[i]);
}
2016-09-20 07:21:28 +00:00
player.markSkill('tuifeng');
}
},
marktext:'锋',
intro:{
content:'cards'
},
2016-09-20 15:26:59 +00:00
group:'tuifeng2',
ai:{
threaten:0.8
}
2016-09-20 07:21:28 +00:00
},
tuifeng2:{
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
return player.storage.tuifeng.length>0;
},
content:function(){
player.draw(2*player.storage.tuifeng.length);
player.addTempSkill('tuifeng3','phaseAfter');
player.$throw(player.storage.tuifeng.slice(0),1000);
player.storage.tuifeng3=player.storage.tuifeng.length;
while(player.storage.tuifeng.length){
ui.discardPile.appendChild(player.storage.tuifeng.shift());
}
player.unmarkSkill('tuifeng')
}
},
tuifeng3:{
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'&&player.storage.tuifeng3) return num+player.storage.tuifeng3;
}
},
onremove:function(player){
delete player.storage.tuifeng3;
2016-09-20 05:06:35 +00:00
}
},
2016-08-10 14:07:35 +00:00
weidi:{
2016-08-11 11:52:17 +00:00
trigger:{global:['gameStart','zhuUpdate']},
forced:true,
popup:false,
filter:function(event,player){
2016-08-10 14:07:35 +00:00
var mode=get.mode();
2016-08-11 11:52:17 +00:00
return (mode=='identity'||(mode=='versus'&&_status.mode=='four'));
},
content:function(){
var list=[];
var zhu=get.zhu(player);
if(zhu&&zhu!=player&&zhu.skills){
for(var i=0;i<zhu.skills.length;i++){
if(lib.skill[zhu.skills[i]]&&lib.skill[zhu.skills[i]].zhuSkill){
list.push(zhu.skills[i]);
2016-08-10 14:07:35 +00:00
}
}
}
2016-08-11 11:52:17 +00:00
player.addAdditionalSkill('weidi',list);
player.storage.zhuSkill_weidi=list;
2016-08-10 14:07:35 +00:00
}
},
2016-08-10 11:23:23 +00:00
zhenlue:{
mod:{
targetEnabled:function(card,player,target){
if(get.type(card)=='delay'&&player!=target){
return false;
}
}
},
ai:{
playernowuxie:true
}
},
jianshu:{
unique:true,
enable:'phaseUse',
animationColor:'thunder',
skillAnimation:'epic',
filter:function(event,player){
return !player.storage.jianshu&&player.num('h',{color:'black'})>0;
},
init:function(player){
player.storage.jianshu=false;
},
filterTarget:function(card,player,target){
if(ui.selected.targets.length){
return target.num('h')>0&&target.distanceTo(ui.selected.targets[0])<=1;
}
return true;
},
filterCard:{color:'black'},
mark:true,
discard:false,
2017-01-15 02:06:03 +00:00
delay:0,
2016-08-10 11:23:23 +00:00
check:function(card){return 6-ai.get.value(card);},
selectTarget:2,
multitarget:true,
content:function(){
'step 0'
2017-01-15 02:06:03 +00:00
player.$give(cards,targets[0]);
2017-01-23 09:28:05 +00:00
player.awakenSkill('jianshu');
2016-08-10 11:23:23 +00:00
player.storage.jianshu=true;
2017-01-13 18:51:13 +00:00
targets[0].gain(cards,player);
2016-08-10 11:23:23 +00:00
'step 1'
targets[0].chooseToCompare(targets[1]);
'step 2'
if(result.bool){
targets[0].chooseToDiscard('he',2,true);
targets[1].loseHp();
}
else{
targets[1].chooseToDiscard('he',2,true);
targets[0].loseHp();
}
},
intro:{
content:'limited'
},
ai:{
expose:0.4,
order:4,
result:{
target:function(player,target){
if(player.hasUnknown()) return 0;
if(ui.selected.targets.length) return -1;
return -0.5;
}
}
}
},
yongdi:{
unique:true,
trigger:{player:'damageEnd'},
animationColor:'fire',
skillAnimation:'legend',
filter:function(event,player){
return !player.storage.yongdi;
},
init:function(player){
player.storage.yongdi=false;
},
mark:true,
direct:true,
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('yongdi'),function(card,player,target){
2016-08-11 11:52:17 +00:00
return target.sex=='male'&&target!=player;
2016-08-10 11:23:23 +00:00
}).set('ai',function(target){
if(!_status.event.goon) return 0;
2016-08-10 14:07:35 +00:00
var player=_status.event.player;
2016-08-10 11:23:23 +00:00
var att=ai.get.attitude(player,target);
if(att<=1) return 0;
2016-08-10 14:07:35 +00:00
var mode=get.mode();
if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){
if(target.name&&lib.character[target.name]){
for(var i=0;i<lib.character[target.name][3].length;i++){
if(lib.skill[lib.character[target.name][3][i]].zhuSkill){
return att*2;
}
}
}
}
2016-08-10 11:23:23 +00:00
return att;
2016-08-10 14:07:35 +00:00
}).set('goon',!player.hasUnknown());
'step 1'
if(result.bool){
2017-01-23 09:28:05 +00:00
player.awakenSkill('yongdi');
2016-08-10 14:07:35 +00:00
player.storage.yongdi=true;
player.logSkill('yongdi',result.targets);
var target=result.targets[0];
target.gainMaxHp(true);
var mode=get.mode();
if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){
if(target.name&&lib.character[target.name]){
var skills=lib.character[target.name][3];
target.storage.zhuSkill_yongdi=[];
for(var i=0;i<skills.length;i++){
var info=lib.skill[skills[i]];
if(info.zhuSkill){
target.storage.zhuSkill_yongdi.push(skills[i]);
if(info.init){
info.init(target);
}
if(info.init2){
info.init2(target);
}
}
}
}
}
}
2016-08-10 11:23:23 +00:00
},
ai:{
expose:0.2
}
},
gushe:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return target!=player&&target.num('h')>0;
},
selectTarget:[1,3],
filter:function(event,player){
return player.num('h')>0;
},
multitarget:true,
multiline:true,
content:function(){
player.chooseToCompare(targets).callback=lib.skill.gushe.callback;
},
init:function(player){
player.storage.gushe=0;
},
intro:{
name:'饶舌',
content:'mark'
},
chat:['粗鄙之语','天地不容','谄谀之臣','皓首匹夫,苍髯老贼','二臣贼子','断脊之犬','我从未见过有如此厚顔无耻之人!'],
callback:function(){
'step 0'
event.num1=event.card1.number;
event.num2=event.card2.number;
if(player.hasSkill('jici')&&event.num1<=player.storage.gushe){
2016-09-20 05:06:35 +00:00
player.chooseBool(get.prompt('jici'));
2016-08-10 11:23:23 +00:00
}
else{
event.goto(2);
}
'step 1'
if(result.bool){
if(event.num1<player.storage.gushe){
event.num1+=player.storage.gushe;
}
else{
player.getStat().skill.gushe--;
}
}
'step 2'
if(event.num1>event.num2){
target.chooseToDiscard('he','弃置一张牌,或令'+get.translation(player)+'摸一张牌').set('ai',function(card){
2016-08-11 11:52:17 +00:00
if(_status.event.goon) return 6-ai.get.value(card);
return 0;
}).set('goon',ai.get.attitude(target,player)<0);
2016-08-10 11:23:23 +00:00
}
else{
target.chat(lib.skill.gushe.chat[player.storage.gushe]);
game.delay();
player.storage.gushe++;
player.markSkill('gushe');
if(player.storage.gushe>=7){
player.die();
}
else{
2016-08-11 14:09:10 +00:00
// player.chooseToDiscard('弃置一张牌,或摸一张牌').set('ai',function(){return -1;});
event.finish();
2016-08-10 11:23:23 +00:00
}
}
'step 3'
if(!result.bool){
player.draw();
}
},
ai:{
order:7,
result:{
target:function(player,target){
var num=0;
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])<0&&game.players[i]!=player&&game.players[i].num('h')){
num++;
}
}
if(num>3) num=3;
var hs=player.get('h');
for(var i=0;i<hs.length;i++){
if(ai.get.value(hs[i])<=6){
switch(hs[i].number){
case 13:return -1;
case 12:if(player.storage.gushe+num<=8) return -1;break;
case 11:if(player.storage.gushe+num<=7) return -1;break;
default:if(hs[i].number>5&&player.storage.gushe+num<=6) return -1;
}
}
}
return 0;
},
}
}
},
jici:{},
juesi:{
enable:'phaseUse',
filter:function(event,player){
return player.num('h','sha')>0;
},
filterTarget:function(card,player,target){
return target!=player&&target.num('he')>0;
},
filterCard:{name:'sha'},
content:function(){
'step 0'
target.chooseToDiscard('he',true);
'step 1'
if(target.hp>=player.hp&&result.bool&&result.cards[0].name!='sha'){
player.useCard({name:'juedou'},target);
}
},
ai:{
order:2,
result:{
target:function(player,target){
if(ai.get.effect(target,{name:'juedou'},player,player)<=0){
return 0;
}
if(target.hp<player.hp){
if(player.num('h')>player.hp) return -0.1;
return 0;
}
var hs1=target.get('h','sha');
var hs2=player.get('h','sha');
2016-08-10 14:07:35 +00:00
if(hs1.length>hs2.length){
return 0;
}
var hsx=target.get('h');
if(hsx.length>2&&hs2.length<=1&&hsx[0].number<6){
return 0;
}
if(hsx.length>3&&hs2.length<=1){
2016-08-10 11:23:23 +00:00
return 0;
}
2016-08-10 14:07:35 +00:00
if(hs1.length>hs2.length-1&&hs1.length>0&&(hs2.length<=1||hs1[0].number>hs2[0].number)){
2016-08-10 11:23:23 +00:00
return 0;
}
return -1;
}
}
}
},
2016-06-04 08:04:13 +00:00
shefu:{
trigger:{player:'phaseEnd'},
direct:true,
2016-06-05 01:53:10 +00:00
audio:2,
2016-06-04 08:04:13 +00:00
init:function(player){
player.storage.shefu=[];
player.storage.shefu2=[];
},
filter:function(event,player){
return player.num('h')>0;
},
intro:{
content:'cards',
mark:function(dialog,content,player){
if(content&&content.length){
2017-01-29 05:26:58 +00:00
dialog.addAuto(content);
2016-06-04 08:04:13 +00:00
if(player.isUnderControl(true)){
var str='';
for(var i=0;i<player.storage.shefu2.length;i++){
str+=get.translation(player.storage.shefu2[i]);
if(i<player.storage.shefu2.length-1){
str+='、';
}
}
dialog.add('<div class="text center">'+str+'</div>')
}
}
},
},
content:function(){
'step 0'
2016-06-05 01:53:10 +00:00
var list1=[],list2=[],list3=[];
2016-06-04 08:04:13 +00:00
for(var i=0;i<lib.inpile.length;i++){
var type=get.type(lib.inpile[i]);
if(type=='basic'){
list1.push(['基本','',lib.inpile[i]]);
}
else if(type=='trick'){
list2.push(['锦囊','',lib.inpile[i]]);
}
2016-06-05 01:53:10 +00:00
else if(type=='delay'){
list3.push(['锦囊','',lib.inpile[i]]);
}
2016-06-04 08:04:13 +00:00
}
2016-09-20 05:06:35 +00:00
player.chooseButton([get.prompt('shefu'),[list1.concat(list2).concat(list3),'vcard']]).set('filterButton',function(button){
2016-06-04 08:04:13 +00:00
var player=_status.event.player;
if(player.storage.shefu2&&player.storage.shefu2.contains(button.link[2])) return false;
return true;
}).set('ai',function(button){
2016-06-05 01:53:10 +00:00
var rand=_status.event.rand*2;
2016-06-04 08:04:13 +00:00
switch(button.link[2]){
case 'sha':return 5+rand[1];
2016-06-05 01:53:10 +00:00
case 'tao':return 4+rand[2];
2016-06-04 08:04:13 +00:00
case 'lebu':return 3+rand[3];
2016-06-05 01:53:10 +00:00
case 'shan':return 4.5+rand[4];
2016-06-04 08:04:13 +00:00
case 'wuzhong':return 4+rand[5];
case 'shunshou':return 3+rand[6];
case 'nanman':return 2+rand[7];
case 'wanjian':return 2+rand[8];
default:return rand[9];
}
}).set('rand',[Math.random(),Math.random(),Math.random(),Math.random(),
Math.random(),Math.random(),Math.random(),Math.random()],Math.random());
'step 1'
if(result.bool){
player.storage.shefu2.push(result.links[0][2]);
player.logSkill('shefu');
player.chooseCard('h','选择一张手牌作为“伏兵”',true);
2016-06-05 01:53:10 +00:00
if(player.isOnline2()){
player.send(function(storage){
game.me.storage.shefu2=storage;
},player.storage.shefu2);
}
2016-06-04 08:04:13 +00:00
}
else{
event.finish();
}
'step 2'
if(result.bool){
var card=result.cards[0];
player.lose(card,ui.special);
player.storage.shefu.push(card);
player.syncStorage('shefu');
player.markSkill('shefu');
player.$give(card,player);
}
2016-06-05 01:53:10 +00:00
},
group:['shefu2']
},
shefu2:{
trigger:{global:['useCard','respondEnd']},
priority:15,
audio:'shefu',
filter:function(event,player){
2016-06-10 02:56:48 +00:00
if(_status.currentPhase==player) return false;
2016-06-05 01:53:10 +00:00
if(event.name=='respond'){
if(event.getParent(2).name!='sha') return false;
}
return player.storage.shefu2&&player.storage.shefu2.contains(event.card.name);
},
direct:true,
content:function(){
"step 0"
var effect=0;
if(trigger.card.name=='wuxie'||trigger.name=='respond'){
if(ai.get.attitude(player,trigger.player)<-1){
effect=-1;
}
}
else if(trigger.targets&&trigger.targets.length){
for(var i=0;i<trigger.targets.length;i++){
effect+=ai.get.effect(trigger.targets[i],trigger.card,trigger.player,player);
}
}
var str='设伏:是否令'+get.translation(trigger.player);
if(trigger.targets&&trigger.targets.length){
str+='对'+get.translation(trigger.targets);
}
str+='的'+get.translation(trigger.card)+'失效?'
var next=player.chooseBool(str,function(){
var player=_status.event.player;
var trigger=_status.event.getTrigger();
if(_status.event.effect<0){
if(trigger.card.name=='sha'){
var target=trigger.targets[0];
if(target==player){
return !player.num('h','shan');
}
else{
return target.hp==1||(target.num('h')<=2&&target.hp<=2);
}
}
else{
return true;
}
}
return false;
});
next.set('effect',effect);
"step 1"
if(result.bool){
player.logSkill('shefu');
var index=player.storage.shefu2.indexOf(trigger.card.name);
if(index!=-1){
var card=player.storage.shefu[index];
ui.discardPile.appendChild(card);
player.$throw(card);
player.storage.shefu.splice(index,1);
player.storage.shefu2.splice(index,1);
if(player.storage.shefu.length==0){
player.unmarkSkill('shefu');
}
else{
player.syncStorage('shefu');
player.markSkill('shefu');
if(player.isOnline2()){
player.send(function(storage){
game.me.storage.shefu2=storage;
},player.storage.shefu2);
}
}
}
game.delay(2);
if(trigger.name=='respond'){
if(trigger.parent.result){
trigger.parent.result.bool=false;
}
}
else{
trigger.untrigger();
trigger.finish();
}
}
else{
event.finish();
}
"step 2"
game.broadcastAll(ui.clear);
},
ai:{
threaten:1.8,
expose:0.3
2016-06-04 08:04:13 +00:00
}
},
2016-06-05 01:53:10 +00:00
benyu:{
audio:2,
trigger:{player:'damageEnd'},
filter:function(event,player){
2016-06-15 14:16:41 +00:00
if(!event.source) return false;
var nh1=player.num('h');
var nh2=event.source.num('h');
if(nh1==nh2) return false;
if(nh2<nh2&&nh1>=5) return false;
if(nh2>nh2&&event.source.isDead()) return false;
return true;
2016-06-05 01:53:10 +00:00
},
direct:true,
content:function(){
"step 0"
var num1=player.num('h');
var num2=trigger.source.num('h');
if(num1>num2){
var next=player.chooseToDiscard([num2+1,num1],'贲育:是否弃置至少'+(num2+1)+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害?');
next.logSkill=['benyu',trigger.source];
next.set('ai',function(card){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
if(ui.selected.cards.length>=_status.event.num){
return -1;
}
if(ai.get.damageEffect(trigger.source,player,player)>0&&_status.event.num<=2){
return 8-ai.get.value(card);
}
return -1;
});
next.set('num',num2+1);
}
else{
event.draw=true;
2016-06-15 14:16:41 +00:00
event.num=Math.min(num2,5)-num1;
2016-10-07 14:00:06 +00:00
player.chooseBool(get.prompt('benyu'));
2016-06-05 01:53:10 +00:00
}
"step 1"
if(result.bool){
if(event.draw){
player.logSkill('benyu',trigger.source);
player.draw(event.num);
}
else{
trigger.source.damage(player);
}
}
},
},
2016-05-11 15:50:00 +00:00
jili:{
trigger:{global:'useCard'},
forced:true,
2016-06-27 02:17:51 +00:00
check:function(event,player){
return ai.get.effect(player,event.card,event.player,player)>0;
},
2016-05-11 15:50:00 +00:00
filter:function(event,player){
if(get.color(event.card)!='red') return false;
if(!event.targets) return false;
if(event.player==player) return false;
if(event.targets.contains(player)) return false;
var type=get.type(event.card);
if(type!='basic'&&type!='trick') return false;
if(lib.filter.targetEnabled2(event.card,event.player,player)){
for(var i=0;i<event.targets.length;i++){
if(get.distance(event.targets[i],player)<=1) return true;
}
}
return false;
},
content:function(){
'step 0'
game.delay(0.5);
'step 1'
trigger.targets.add(player);
trigger.player.line(player,'green');
}
},
zhidao:{
trigger:{source:'damageEnd'},
filter:function(event,player){
return _status.currentPhase==player&&event.player.isAlive()&&
2016-08-12 08:26:31 +00:00
event.player.num('hej')>0&&event.player!=player&&!player.hasSkill('zhidao2');
2016-05-11 15:50:00 +00:00
},
forced:true,
content:function(){
var num=0;
if(trigger.player.num('h')) num++;
if(trigger.player.num('e')) num++;
if(trigger.player.num('j')) num++;
if(num){
player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){
for(var i=0;i<ui.selected.buttons.length;i++){
if(get.position(button.link)==get.position(ui.selected.buttons[i].link)) return false;
}
return true;
});
}
player.addTempSkill('zhidao2','phaseAfter');
}
},
zhidao2:{
mod:{
playerEnabled:function(card,player,target){
if(player!=target) return false;
}
}
},
luanzhan:{
mod:{
selectTarget:function(card,player,range){
if(!player.storage.luanzhan) return;
if(range[1]==-1) return;
if(card.name=='sha') range[1]+=player.storage.luanzhan;
if(get.color(card)=='black'&&get.type(card)=='trick'){
var info=get.info(card);
if(info.multitarget) return false;
range[1]+=player.storage.luanzhan;
}
},
},
trigger:{source:'damageEnd'},
forced:true,
popup:false,
silent:true,
mark:true,
intro:{
content:function(storage){
return '可以额外指定'+storage+'个目标';
}
},
init:function(player){
player.storage.luanzhan=0;
},
content:function(){
if(typeof player.storage.luanzhan=='number'){
player.storage.luanzhan+=trigger.num;
}
else{
player.storage.luanzhan=trigger.num;
}
player.markSkill('luanzhan');
},
group:'luanzhan_cancel',
subSkill:{
cancel:{
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
if(!player.storage.luanzhan) return false;
var check=false;
var card=event.card;
if(card.name=='sha'){
check=true;
}
else if(get.color(card)=='black'&&get.type(card)=='trick'){
var info=get.info(card);
if(!info.multitarget){
check=true;
if(info.selectTarget==-1){
check=false;
}
else if(Array.isArray(info.selectTarget)&&info.selectTarget[1]==-1){
check=false;
}
}
}
if(check&&event.targets&&event.targets.length<player.storage.luanzhan){
return true;
}
return false;
},
content:function(){
player.storage.luanzhan=0;
player.markSkill('luanzhan');
}
}
}
},
zhengnan:{
trigger:{global:'dieAfter'},
frequent:true,
content:function(){
'step 0'
player.draw(3);
var list=[];
if(!player.hasSkill('wusheng')){
list.push('wusheng');
}
if(!player.hasSkill('dangxian')){
list.push('dangxian');
}
if(!player.hasSkill('zhiman')){
list.push('zhiman');
}
if(list.length){
player.chooseControl(list).set('prompt','选择获得一项技能');
}
'step 1'
player.addSkill(result.control);
player.popup(result.control);
game.log(player,'获得技能','【'+get.translation(result.control)+'】');
},
ai:{
threaten:1.4
}
},
xiefang:{
mod:{
globalFrom:function(from,to,distance){
for(var i=0;i<game.players.length;i++){
if(game.players[i].sex=='female'){
distance--;
}
}
return distance;
}
}
},
2016-03-18 08:33:13 +00:00
qizhi:{
trigger:{player:'useCard'},
direct:true,
filter:function(event,player){
if(!event.targets) return false;
if(_status.currentPhase!=player) return false;
2016-03-18 16:37:06 +00:00
var type=get.type(event.card,'trick');
if(type!='basic'&&type!='trick') return false;
2016-03-18 08:33:13 +00:00
return game.hasPlayer(function(target){
return !event.targets.contains(target)&&target.num('he')>0;
});
},
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('qizhi'),function(card,player,target){
2016-05-07 03:12:04 +00:00
return !_status.event.getTrigger().targets.contains(target)&&target.num('he')>0;
}).set('ai',function(target){
var player=_status.event.player;
2016-03-18 08:33:13 +00:00
if(target==player) return 2;
if(ai.get.attitude(player,target)<=0){
return 1
}
return 0.5;
2016-05-07 03:12:04 +00:00
});
2016-03-18 08:33:13 +00:00
'step 1'
if(result.bool){
player.storage.qizhi++;
if(!event.isMine()) game.delay();
2016-04-04 11:20:05 +00:00
player.logSkill('qizhi',result.targets);
2016-04-03 16:11:05 +00:00
player.discardPlayerCard(result.targets[0],true,'he');
2016-03-18 08:33:13 +00:00
event.target=result.targets[0];
}
else{
event.finish();
}
'step 2'
event.target.draw();
},
group:'qizhi2'
},
qizhi2:{
trigger:{player:'phaseBegin'},
forced:true,
popup:false,
silent:true,
content:function(){
player.storage.qizhi=0;
}
},
jinqu:{
trigger:{player:'phaseEnd'},
check:function(event,player){
return player.storage.qizhi>=player.num('h');
},
prompt:function(event,player){
if(typeof player.storage.qizhi!='number'){
'进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(0)+'张?';
}
return '进趋:是否摸两张牌并将手牌弃置至'+get.cnNumber(player.storage.qizhi)+'张?';
},
content:function(){
'step 0'
player.draw(2);
'step 1'
if(typeof player.storage.qizhi!='number'){
player.storage.qizhi=0;
}
var dh=player.num('h')-player.storage.qizhi;
if(dh>0){
player.chooseToDiscard(dh,true);
}
}
},
mouduan:{
2016-03-27 12:13:20 +00:00
init2:function(player){
2016-05-07 03:12:04 +00:00
game.broadcastAll(function(player){
player._mouduan_mark=player.mark('武',{
content:'拥有技能【激昂】、【谦逊】'
});
},player);
2016-08-11 11:52:17 +00:00
player.addAdditionalSkill('mouduan',['jiang','qianxun']);
2016-03-18 08:33:13 +00:00
},
onremove:function(player){
2016-05-07 03:12:04 +00:00
game.broadcastAll(function(player){
if(player._mouduan_mark){
player._mouduan_mark.delete();
delete player._mouduan_mark;
}
},player);
2016-08-11 11:52:17 +00:00
player.removeAdditionalSkill('mouduan');
2016-03-18 08:33:13 +00:00
},
trigger:{player:'loseEnd'},
forced:true,
filter:function(event,player){
2016-05-07 03:12:04 +00:00
return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.num('h')<=2;
2016-03-18 08:33:13 +00:00
},
content:function(){
2016-05-07 03:12:04 +00:00
game.broadcastAll(function(player){
if(!player._mouduan_mark) return;
player._mouduan_mark.name='文';
player._mouduan_mark.skill='文';
player._mouduan_mark.firstChild.innerHTML='文';
player._mouduan_mark.info.content='拥有技能【英姿】、【克己】';
},player);
2016-08-11 11:52:17 +00:00
player.addAdditionalSkill('mouduan',['yingzi','keji']);
2016-03-18 08:33:13 +00:00
},
group:'mouduan2'
},
mouduan2:{
trigger:{global:'phaseBegin'},
priority:5,
filter:function(event,player){
2016-05-07 03:12:04 +00:00
return player._mouduan_mark&&player._mouduan_mark.name=='文'&&player.num('h')>2;
2016-03-18 08:33:13 +00:00
},
direct:true,
content:function(){
'step 0'
player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){
return -1;
}
'step 1'
if(result.bool&&player.num('h')>2){
2016-05-07 03:12:04 +00:00
game.broadcastAll(function(player){
if(!player._mouduan_mark) return;
player._mouduan_mark.name='武';
player._mouduan_mark.skill='武';
player._mouduan_mark.firstChild.innerHTML='武';
player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】';
},player);
2016-08-11 11:52:17 +00:00
player.addAdditionalSkill('mouduan',['jiang','qianxun']);
2016-03-18 08:33:13 +00:00
}
}
},
tanhu:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.num('h');
},
filter:function(event,player){
return player.num('h')>0;
},
content:function(){
'step 0'
player.chooseToCompare(target);
'step 1'
if(result.bool){
target.addTempSkill('tanhu2','phaseAfter');
}
},
ai:{
result:{
target:function(player,target){
var hs=player.get('h');
if(hs.length<3) return 0;
var bool=false;
for(var i=0;i<hs.length;i++){
if(hs[i].number>=9&&ai.get.value(hs[i])<7){
bool=true;
break;
}
}
if(!bool) return 0;
return -1;
}
},
order:9,
},
group:'tanhu3'
},
tanhu2:{
mark:true,
intro:{
content:'已成为探虎目标'
}
},
tanhu3:{
mod:{
globalFrom:function(from,to){
2016-08-12 08:26:31 +00:00
if(to.hasSkill('tanhu2')) return -Infinity;
2016-03-18 08:33:13 +00:00
}
},
trigger:{player:'useCardToBegin'},
frequent:true,
filter:function(event){
2016-08-12 08:26:31 +00:00
return get.type(event.card)=='trick'&&event.target&&event.target.hasSkill('tanhu2');
2016-03-18 08:33:13 +00:00
},
content:function(){
player.draw();
}
},
jiqiao:{
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.num('he',{type:'equip'})>0;
},
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseToDiscard(get.prompt('jiqiao'),[1,player.num('he',{type:'equip'})],'he',function(card){
2016-03-18 08:33:13 +00:00
return get.type(card)=='equip';
2016-05-07 02:18:09 +00:00
}).set('ai',function(card){
2016-03-18 08:33:13 +00:00
if(card.name=='bagua') return 10;
return 7-ai.get.value(card);
2016-05-07 02:18:09 +00:00
});
2016-03-18 08:33:13 +00:00
'step 1'
if(result.bool){
player.logSkill('jiqiao');
event.cards=get.cards(3*result.cards.length);
player.showCards(event.cards);
}
else{
event.finish();
}
'step 2'
var gained=[];
for(var i=0;i<event.cards.length;i++){
if(get.type(event.cards[i],'trick')=='trick'){
gained.push(event.cards[i]);
}
else{
ui.discardPile.appendChild(event.cards[i]);
}
}
player.gain(gained,'gain2');
},
ai:{
threaten:1.5
}
},
linglong:{
inherit:'bagua_skill',
filter:function(event,player){
if(!event.filterCard({name:'shan'})) return false;
if(event.parent.player.num('s','unequip')) return false;
if(player.get('e','2')) return false;
return true;
},
ai:{
effect:{
target:function(card,player,target){
if(player==target&&get.subtype(card)=='equip2'){
if(ai.get.equipValue(card)<=8) return 0;
}
if(target.get('e','2')) return;
2016-08-12 08:26:31 +00:00
if(player.hasSkill('unequip')) return;
2016-03-18 08:33:13 +00:00
if(get.tag(card,'respondShan')) return [0.5,0];
}
}
},
mod:{
maxHandcard:function(player,num){
if(player.get('e','3')||player.get('e','4')) return;
return num+1;
2016-04-03 16:11:05 +00:00
},
targetInRange:function(card,player,target,now){
if(player.get('e','5')) return;
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
2016-03-18 08:33:13 +00:00
}
}
},
fenyong:{
trigger:{player:'damageEnd'},
content:function(){
player.addSkill('fenyong2');
}
},
fenyong2:{
mark:true,
intro:{
content:'防止你受到的所有伤害'
},
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];
}
},
}
},
xuehen:{
trigger:{global:'phaseEnd'},
forced:true,
filter:function(event,player){
2016-08-12 08:26:31 +00:00
return player.hasSkill('fenyong2')&&event.player.isAlive();
2016-03-18 08:33:13 +00:00
},
content:function(){
'step 0'
player.removeSkill('fenyong2');
player.chooseControl('弃牌','出杀',function(){
2016-05-07 03:12:04 +00:00
var player=_status.event.player;
var trigger=_status.event.getTrigger();
2016-03-18 08:33:13 +00:00
if(ai.get.attitude(player,trigger.player)<0){
var he=trigger.player.num('he');
2016-06-15 14:16:41 +00:00
if(he<2) return '出杀';
2016-03-18 08:33:13 +00:00
if(player.maxHp-player.hp>=2&&he<=3){
return '弃牌';
}
if(player.maxHp-player.hp>=3&&he<=5){
return '弃牌';
}
if(player.maxHp-player.hp>3){
return '弃牌';
}
2016-06-15 14:16:41 +00:00
return '出杀';
2016-03-18 08:33:13 +00:00
}
return '出杀';
2016-05-07 03:12:04 +00:00
}).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀');
2016-03-18 08:33:13 +00:00
'step 1'
if(result.control=='弃牌'){
player.line(trigger.player,'green');
if(player.hp<player.maxHp&&trigger.player.num('he')){
player.discardPlayerCard(trigger.player,true,'he',player.maxHp-player.hp);
}
}
else{
player.chooseTarget('选择一个出杀目标',function(card,player,target){
return lib.filter.targetEnabled({name:'sha'},player,target);
2016-08-10 11:23:23 +00:00
},true).set('ai',function(target){
2016-05-07 03:12:04 +00:00
return ai.get.effect(target,{name:'sha'},_status.event.player);
});
2016-03-18 08:33:13 +00:00
event.sha=true;
}
'step 2'
2016-08-10 11:23:23 +00:00
if(event.sha&&result.targets&&result.targets.length){
2016-03-18 08:33:13 +00:00
player.useCard({name:'sha'},result.targets);
}
}
},
zhenwei:{
trigger:{global:'useCardToBefore'},
direct:true,
priority:5,
filter:function(event,player){
if(player==event.target||player==event.player) return false;
if(!player.num('he')) return false;
if(event.targets.length>1) return false;
if(!event.target) return false;
2016-04-07 06:42:16 +00:00
if(event.target.hp>=player.hp) return false;
2016-03-18 08:33:13 +00:00
var card=event.card;
if(card.name=='sha') return true;
if(get.color(card)=='black'&&get.type(card)=='trick') return true;
return false;
},
content:function(){
"step 0"
var save=false;
if(ai.get.attitude(player,trigger.target)>2){
if(trigger.card.name=='sha'){
if(player.num('h','shan')||player.get('e','2')||
trigger.target.hp==1||player.hp>trigger.target.hp+1){
if(!trigger.target.num('h','shan')||trigger.target.num('h')<player.num('h')){
save=true;
}
}
}
else if(trigger.card.name=='juedou'&&trigger.target.hp==1){
save=true;
}
else if(trigger.card.name=='shunshou'&&
ai.get.attitude(player,trigger.player)<0&&
ai.get.attitude(trigger.player,trigger.target)<0){
save=true;
}
}
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard('he',get.prompt('zhenwei'));
2016-03-18 08:33:13 +00:00
next.logSkill=['zhenwei',trigger.target];
2016-05-07 02:18:09 +00:00
next.set('ai',function(card){
if(_status.event.aisave){
2016-03-18 08:33:13 +00:00
return 7-ai.get.value(card);
}
return 0;
2016-05-07 02:18:09 +00:00
});
next.set('aisave',save);
2016-03-18 08:33:13 +00:00
"step 1"
if(result.bool){
player.chooseControl('转移','失效',function(){
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-05-07 02:18:09 +00:00
var player=_status.event.player;
2016-03-18 08:33:13 +00:00
if(trigger.card.name=='sha'){
if(player.num('h','shan')) return '转移';
}
else if(trigger.card.name=='juedou'){
if(player.num('h','sha')) return '转移';
}
return '失效';
2016-05-07 02:18:09 +00:00
}).set('prompt','将'+get.translation(trigger.card)+'转移给你,或令其失效');
2016-03-18 08:33:13 +00:00
}
else{
event.finish();
}
"step 2"
if(result.control=='转移'){
player.draw();
trigger.target=player;
trigger.targets.length=0;
trigger.targets.push(player);
trigger.untrigger();
trigger.trigger('useCardToBefore');
trigger.trigger(trigger.card.name+'Before');
trigger.player.line(player);
}
else{
2016-03-26 05:32:00 +00:00
if(get.itemtype(trigger.card)=='card'){
trigger.player.$gain2(trigger.card);
if(!trigger.player.storage.zhenwei2){
trigger.player.storage.zhenwei2=[trigger.card];
}
else{
trigger.player.storage.zhenwei2.push(trigger.card);
}
ui.special.appendChild(trigger.card);
2016-05-07 02:18:09 +00:00
trigger.player.markSkill('zhenwei2');
2016-03-18 08:33:13 +00:00
}
trigger.untrigger();
trigger.finish();
trigger.player.addSkill('zhenwei2');
}
game.delay();
},
ai:{
threaten:1.1
}
},
zhenwei2:{
mark:true,
intro:{
content:'cards'
},
trigger:{global:'phaseAfter'},
forced:true,
content:function(){
player.gain(player.storage.zhenwei2,'gain2');
delete player.storage.zhenwei2;
player.removeSkill('zhenwei2');
}
},
jie:{
trigger:{source:'damageBegin'},
filter:function(event){
return event.card&&event.card.name=='sha'&&get.color(event.card)=='red'&&event.notLink();
},
forced:true,
content:function(){
trigger.num++;
}
},
dahe:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.num('h');
},
filter:function(event,player){
return player.num('h')>0;
},
content:function(){
'step 0'
2017-01-23 15:49:24 +00:00
player.chooseToCompare(target).set('preserve','win');
2016-03-18 08:33:13 +00:00
'step 1'
2016-08-10 11:23:23 +00:00
if(result.bool&&result.target){
2016-03-18 08:33:13 +00:00
event.type=true;
2016-07-17 03:28:46 +00:00
event.card=result.target;
2016-03-18 08:33:13 +00:00
player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){
return target.hp<=player.hp;
2016-05-07 02:18:09 +00:00
}).set('ai',function(target){
2016-07-09 15:23:11 +00:00
var att=ai.get.attitude(_status.event.player,target);
if(_status.event.du) return -att;
return att;
}).set('du',event.card.name=='du');
2016-03-18 08:33:13 +00:00
target.addTempSkill('dahe2','phaseAfter');
}
else{
event.type=false;
if(player.num('h')){
player.showHandcards();
player.chooseToDiscard('h',true);
}
}
'step 2'
if(event.type){
if(result.bool){
player.line(result.targets,'green');
result.targets[0].gain(event.card,'gain2');
}
}
},
ai:{
result:{
target:function(player,target){
var hs=player.get('h');
if(hs.length<3) return 0;
var bool=false;
for(var i=0;i<hs.length;i++){
if(hs[i].number>=9&&ai.get.value(hs[i])<7){
bool=true;
break;
}
}
if(!bool) return 0;
if(player.canUse('sha',target)&&(player.num('h','sha'))){
return -2;
}
return -0.5;
}
},
order:9,
}
},
dahe2:{
mark:true,
intro:{
content:'非红桃闪无效'
},
mod:{
cardRespondable:function(card,player){
if(card.name=='shan'&&get.suit(card)!='heart') return false;
},
}
},
xunzhi:{
trigger:{player:'phaseBegin'},
2016-03-18 16:34:46 +00:00
init:function(player){
player.storage.xunzhi=0;
},
2016-03-18 08:33:13 +00:00
filter:function(event,player){
2016-06-25 06:30:34 +00:00
var previous=player.getPrevious();
var next=player.getNext();
if(previous&&next){
return player.hp!=previous.hp&&player.hp!=next.hp;
}
return false;
2016-03-18 08:33:13 +00:00
},
check:function(event,player){
2016-08-13 18:04:49 +00:00
return player.hp>=3&&player.num('h')>player.hp+1+player.storage.xunzhi;
2016-03-18 08:33:13 +00:00
},
content:function(){
player.loseHp();
2016-03-18 16:34:46 +00:00
player.storage.xunzhi+=2;
},
mark:true,
intro:{
content:function(storage,player){
return '手牌上限+'+player.storage.xunzhi;
}
},
2016-03-18 08:33:13 +00:00
mod:{
maxHandcard:function(player,num){
2016-03-18 16:34:46 +00:00
if(typeof player.storage.xunzhi=='number'){
return num+player.storage.xunzhi;
}
}
}
2016-03-18 08:33:13 +00:00
},
yawang:{
trigger:{player:'phaseDrawBefore'},
2016-03-18 16:34:46 +00:00
forced:true,
2016-03-18 08:33:13 +00:00
check:function(event,player){
var num=game.countPlayer(function(target){
2016-03-29 05:25:16 +00:00
return target.hp==player.hp;
2016-03-18 08:33:13 +00:00
});
2016-08-12 08:26:31 +00:00
if(!player.hasSkill('xunzhi2')){
2016-03-18 08:33:13 +00:00
var nh=player.num('h');
if(nh>5) return false;
if(num==3&&nh>3) return false;
}
return num>=3;
},
prompt:function(event,player){
var num=game.countPlayer(function(target){
2016-03-29 05:25:16 +00:00
return target.hp==player.hp;
2016-03-18 08:33:13 +00:00
});
return '雅望:是否放弃摸牌,改为摸'+get.cnNumber(num)+'张牌?';
},
content:function(){
trigger.untrigger();
trigger.finish();
var num=game.countPlayer(function(target){
2016-03-29 05:25:16 +00:00
return target.hp==player.hp;
2016-03-18 08:33:13 +00:00
});
if(num){
player.draw(num);
}
player.storage.yawang=num;
player.addTempSkill('yawang2','phaseAfter');
}
},
yawang2:{
mod:{
cardEnabled:function(card,player){
if(_status.currentPhase!=player) return;
if(get.cardCount(true,player)>=player.storage.yawang) return false;
}
}
},
2016-02-15 12:03:41 +00:00
junwei:{
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return player.storage.yinling&&player.storage.yinling.length>=3;
},
content:function(){
'step 0'
if(player.storage.yinling.length>3){
2016-09-20 05:06:35 +00:00
player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){
2016-02-15 12:03:41 +00:00
return 1;
2016-05-07 03:12:04 +00:00
});
2016-02-15 12:03:41 +00:00
}
else{
2016-09-20 05:06:35 +00:00
player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true);
2016-02-15 12:03:41 +00:00
event.cards=player.storage.yinling.slice(0);
}
'step 1'
if(result.bool){
var cards=event.cards||result.links;
for(var i=0;i<cards.length;i++){
player.storage.yinling.remove(cards[i]);
ui.discardPile.appendChild(cards[i]);
}
player.$throw(cards);
player.syncStorage('yinling');
if(player.storage.yinling.length==0){
player.unmarkSkill('yinling');
}
2016-05-07 03:12:04 +00:00
else{
player.markSkill('yinling');
}
2016-02-15 12:03:41 +00:00
game.delay();
player.chooseTarget(true,function(card,player,target){
return player!=target;
2016-05-07 03:12:04 +00:00
}).set('ai',function(target){
return -ai.get.attitude(_status.event.player,target);
});
2016-02-15 12:03:41 +00:00
}
else{
event.finish();
}
'step 2'
if(result.bool&&result.targets&&result.targets.length){
var target=result.targets[0];
player.logSkill('junwei',result.targets);
event.target=target;
var nshan=target.num('h','shan');
if(nshan==0){
event.directfalse=true;
}
else{
target.chooseCard('交给'+get.translation(player)+'一张闪,或流失一点体力',function(card){
return card.name=='shan';
2016-05-07 03:12:04 +00:00
}).set('ai',function(card){
if(_status.event.nshan>1) return 1;
if(_status.event.player.hp>=3) return 0;
2016-02-15 12:03:41 +00:00
return 1;
2016-05-07 03:12:04 +00:00
}).set('nshan',nshan);
2016-02-15 12:03:41 +00:00
}
}
else{
event.finish();
}
'step 3'
if(!event.directfalse&&result.bool) game.delay();
ui.clear();
'step 4'
if(!event.directfalse&&result.bool){
event.cards=result.cards;
event.target.$throw(result.cards);
player.chooseTarget('将闪交给一名角色',true,function(card,player,target){
2016-05-07 03:12:04 +00:00
return target!=_status.event.getParent().target;
}).set('ai',function(target){
return ai.get.attitude(_status.event.player,target)/(target.num('h','shan')+1);
});
2016-02-15 12:03:41 +00:00
}
else{
event.target.loseHp();
delete event.cards;
}
'step 5'
if(event.cards){
player.line(result.targets,'green');
result.targets[0].gain(event.cards,'gain2');
game.log(player,'将',event.cards,'交给',result.targets[0]);
event.finish();
}
else{
if(event.target.num('e')){
player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target);
}
else{
event.finish();
}
}
'step 6'
if(result.bool){
var card=result.links[0];
if(event.target.storage.junwei2){
event.target.storage.junwei2.push(card);
2016-05-07 03:12:04 +00:00
event.target.markSkill('junwei2');
2016-02-15 12:03:41 +00:00
}
else{
event.target.storage.junwei2=[card];
}
event.target.lose(card,ui.special);
event.target.addSkill('junwei2');
event.target.syncStorage('junwei2');
}
}
},
junwei2:{
mark:true,
intro:{
content:'cards'
},
trigger:{player:'phaseEnd'},
forced:true,
content:function(){
'step 0'
if(player.storage.junwei2.length){
var card=player.storage.junwei2.shift();
player.equip(card);
event.redo();
}
'step 1'
player.removeSkill('junwei2');
delete player.storage.junwei2;
}
},
yinling:{
enable:'phaseUse',
filterCard:{color:'black'},
position:'he',
intro:{
content:'cards',
onunmark:'throw'
},
filter:function(event,player){
return player.num('he',{color:'black'})>0&&player.storage.yinling.length<4;
},
filterTarget:function(card,player,target){
return target.num('he')>0&&target!=player;
},
init:function(player){
player.storage.yinling=[];
},
check:function(card){
return 6-ai.get.value(card);
},
content:function(){
'step 0'
player.choosePlayerCard('hej',target,true);
'step 1'
target.$give(result.links,player);
target.lose(result.links,ui.special);
player.storage.yinling.push(result.links[0]);
player.markSkill('yinling');
player.syncStorage('yinling');
},
ai:{
order:10.1,
expose:0.1,
result:{
target:function(player,target){
2016-08-12 08:26:31 +00:00
if(target.hasSkill('tuntian')) return 0;
2016-02-15 12:03:41 +00:00
var es=target.get('e');
var nh=target.num('h');
2016-04-15 16:20:05 +00:00
var noe=(es.length==0||target.hasSkillTag('noe'));
2016-02-15 12:03:41 +00:00
var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp<target.maxHp);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&noe) return 0;
if(noh&&noe2) return 0.01;
if(ai.get.attitude(player,target)<=0) return (target.num('he'))?-1.5:1.5;
var js=target.get('j');
if(js.length){
var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
if(jj.name=='guohe') return 3;
if(js.length==1&&ai.get.effect(target,jj,target,player)>=0){
return -1.5;
}
return 2;
}
return -1.5;
},
},
}
},
2016-02-14 09:04:31 +00:00
yanxiao:{
enable:'phaseUse',
filterCard:{suit:'diamond'},
filterTarget:true,
check:function(card){
return 7-ai.get.value(card);
},
2016-03-04 13:31:26 +00:00
position:'he',
filter:function(event,player){
return player.num('he',{suit:'diamond'})>0;
},
2016-02-14 09:04:31 +00:00
discard:false,
2017-01-13 16:02:19 +00:00
prepare:'give',
2016-02-14 09:04:31 +00:00
content:function(){
2016-08-12 08:26:31 +00:00
if(target.hasSkill('yanxiao2')&&target.storage.yanxiao2){
2016-02-14 09:04:31 +00:00
target.storage.yanxiao2.push(cards[0]);
target.syncStorage('yanxiao2');
2016-05-07 02:18:09 +00:00
target.markSkill('yanxiao2');
2016-02-14 09:04:31 +00:00
}
else{
target.storage.yanxiao2=cards.slice(0);
target.syncStorage('yanxiao2');
target.addSkill('yanxiao2');
}
},
ai:{
order:8,
result:{
target:function(player,target){
if(target.storage.yanxiao2&&target.storage.yanxiao2.length) return 0;
if(target.num('j')) return 1;
return 0;
}
}
}
},
yanxiao2:{
mark:true,
intro:{
content:'cards'
},
trigger:{player:'phaseJudgeBegin'},
forced:true,
content:function(){
var cards=player.storage.yanxiao2.concat(player.get('j'));
player.gain(cards,'gain2');
delete player.storage.yanxiao2;
player.removeSkill('yanxiao2');
game.log(player,'获得了',cards);
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return [0,0.1];
}
}
}
},
anxian:{
group:['anxian_source','anxian_target'],
subSkill:{
source:{
trigger:{source:'damageBefore'},
filter:function(event,player){
return event.card&&event.card.name=='sha';
},
check:function(event,player){
if(ai.get.damageEffect(event.player,player,player)<=0) return true;
return false;
},
content:function(){
'step 0'
if(trigger.player.num('h')){
trigger.player.chooseToDiscard(true);
}
'step 1'
player.draw();
trigger.untrigger();
trigger.finish();
}
},
target:{
trigger:{target:'shaBefore'},
direct:true,
filter:function(event,player){
return player.num('h');
},
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard(get.prompt('anxian'));
2016-05-07 02:18:09 +00:00
next.set('ai',function(card){
var player=_status.event.player;
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-02-14 09:04:31 +00:00
if(ai.get.attitude(player,trigger.player)>0){
return 9-ai.get.value(card);
}
if(player.num('h',{name:'shan'})) return -1;
return 7-ai.get.value(card);
2016-05-07 02:18:09 +00:00
});
2016-02-14 09:04:31 +00:00
next.logSkill='anxian';
"step 1"
if(result.bool){
trigger.player.draw();
trigger.untrigger();
trigger.finish();
}
},
}
}
},
luoyan:{
group:['luoyan_tianxiang','luoyan_liuli'],
subSkill:{
tianxiang:{
audio:2,
trigger:{player:'damageBefore'},
direct:true,
filter:function(event,player){
if(!player.storage.xingwu) return false;
if(!player.storage.xingwu.length) return false;
return player.num('h',{suit:'heart'})>0&&event.num>0;
},
content:function(){
"step 0"
player.chooseCardTarget({
2017-01-13 18:51:13 +00:00
filterCard:function(card,player){
return get.suit(card)=='heart'&&lib.filter.cardDiscardable(card,player);
2016-02-14 09:04:31 +00:00
},
filterTarget:function(card,player,target){
return player!=target;
},
ai1:function(card){
return 10-ai.get.value(card);
},
ai2:function(target){
2016-05-07 02:18:09 +00:00
var att=ai.get.attitude(_status.event.player,target);
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-05-07 02:18:09 +00:00
var da=0;
if(_status.event.player.hp==1){
da=10;
}
2016-02-14 09:04:31 +00:00
if(trigger.num>1){
2016-05-07 02:18:09 +00:00
if(target.maxHp>5&&target.hp>1) return -att/10+da;
return -att+da;
2016-02-14 09:04:31 +00:00
}
var eff=ai.get.damageEffect(target,trigger.source,target,trigger.nature);
2016-05-07 02:18:09 +00:00
if(att==0) return 0.1+da;
2016-02-14 09:04:31 +00:00
if(eff>=0&&trigger.num==1){
2016-05-07 02:18:09 +00:00
return att+da;
2016-02-14 09:04:31 +00:00
}
2016-05-07 02:18:09 +00:00
if(target.hp==target.maxHp) return -att+da;
2016-02-14 09:04:31 +00:00
if(target.hp==1){
if(target.maxHp<=4&&!target.hasSkillTag('maixie')){
if(target.maxHp<=3){
2016-05-07 02:18:09 +00:00
return -att+da;
2016-02-14 09:04:31 +00:00
}
2016-05-07 02:18:09 +00:00
return -att/2+da;
2016-02-14 09:04:31 +00:00
}
2016-05-07 02:18:09 +00:00
return da;
2016-02-14 09:04:31 +00:00
}
if(target.hp==target.maxHp-1){
2016-05-07 02:18:09 +00:00
if(target.hp>2||target.hasSkillTag('maixie')) return att/5+da;
if(att>0) return 0.02+da;
return 0.05+da;
2016-02-14 09:04:31 +00:00
}
2016-05-07 02:18:09 +00:00
return att/2+da;
2016-02-14 09:04:31 +00:00
},
prompt:'天香:弃置一张红桃牌转移伤害'
});
"step 1"
if(result.bool){
player.logSkill('tianxiang',result.targets);
trigger.untrigger();
trigger.player=result.targets[0];
trigger.player.addSkill('tianxiang2');
player.discard(result.cards[0]);
}
else{
event.finish();
}
"step 2"
trigger.trigger('damageBefore');
},
ai:{
effect:{
target:function(card,player,target){
2016-08-12 08:26:31 +00:00
if(player.hasSkill('jueqing')) return;
2016-02-14 09:04:31 +00:00
if(get.tag(card,'damage')&&target.num('h')>1) return 0.7;
}
},
threaten:function(player,target){
if(target.num('h')==0) return 2;
}
}
},
liuli:{
audio:2,
trigger:{target:'shaBefore'},
direct:true,
priority:5,
filter:function(event,player){
if(!player.storage.xingwu) return false;
if(!player.storage.xingwu.length) return false;
if(player.num('he')==0) return false;
for(var i=0;i<game.players.length;i++){
if(get.distance(player,game.players[i],'attack')<=1&&
game.players[i]!=event.player&&game.players[i]!=player){
if(player.canUse(event.card,game.players[i])) return true;
}
}
return false;
},
content:function(){
"step 0"
var next=player.chooseCardTarget({
position:'he',
2017-01-13 18:51:13 +00:00
filterCard:lib.filter.cardDiscardable,
2016-02-14 09:04:31 +00:00
filterTarget:function(card,player,target){
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-02-14 09:04:31 +00:00
if(get.distance(player,target,'attack')<=1&&
target!=trigger.player&&target!=player){
if(player.canUse(trigger.card,target)) return true;
}
return false;
},
ai1:function(card){
return ai.get.unuseful(card)+9;
},
ai2:function(target){
if(_status.event.player.num('h','shan')){
return -ai.get.attitude(_status.event.player,target);
}
if(ai.get.attitude(_status.event.player,target)<5){
return 6-ai.get.attitude(_status.event.player,target);
}
if(_status.event.player.hp==1&&player.num('h','shan')==0){
return 10-ai.get.attitude(_status.event.player,target);
}
if(_status.event.player.hp==2&&player.num('h','shan')==0){
return 8-ai.get.attitude(_status.event.player,target);
}
return -1;
},
2016-09-20 05:06:35 +00:00
prompt:get.prompt('liuli')
2016-02-14 09:04:31 +00:00
});
"step 1"
if(result.bool){
player.discard(result.cards);
player.logSkill('liuli',result.targets);
trigger.target=result.targets[0];
trigger.targets.remove(player);
trigger.targets.push(result.targets[0]);
}
else{
event.finish();
}
"step 2"
trigger.untrigger();
trigger.trigger('useCardToBefore');
trigger.trigger('shaBefore');
game.delay();
},
ai:{
effect:{
target:function(card,player,target){
if(target.num('he')==0) return;
if(card.name!='sha') return;
var min=1;
var friend=ai.get.attitude(player,target)>0;
var vcard={name:'shacopy',nature:card.nature,suit:card.suit};
for(var i=0;i<game.players.length;i++){
if(player!=game.players[i]&&
ai.get.attitude(target,game.players[i])<0&&
target.canUse(card,game.players[i])){
if(!friend) return 0;
if(ai.get.effect(game.players[i],vcard,player,player)>0){
if(!player.canUse(card,game.players[0])){
return [0,0.1];
}
min=0;
}
}
}
return min;
}
}
}
}
}
},
xingwu:{
audio:2,
group:['xingwu_color','xingwu_color2'],
subSkill:{
color:{
trigger:{player:'phaseBegin'},
forced:true,
popup:false,
silent:true,
content:function(){
player.storage.xingwu_color=['black','red'];
}
},
color2:{
trigger:{player:'useCard'},
forced:true,
popup:false,
silent:true,
filter:function(event,player){
return Array.isArray(player.storage.xingwu_color)&&_status.currentPhase==player;
},
content:function(){
player.storage.xingwu_color.remove(get.color(trigger.card));
}
}
},
2016-03-18 16:34:46 +00:00
trigger:{player:'phaseDiscardBegin'},
2016-02-14 09:04:31 +00:00
direct:true,
filter:function(event,player){
2017-01-19 13:00:41 +00:00
if(!player.storage.xingwu_color) return false;
2016-02-14 09:04:31 +00:00
var length=player.storage.xingwu_color.length;
if(length==0) return false;
var hs=player.get('h');
if(hs.length==0) return false;
if(length==2) return true;
var color=player.storage.xingwu_color[0];
for(var i=0;i<hs.length;i++){
if(get.color(hs[i])==color) return true;
}
return false;
},
intro:{
content:'cards'
},
init:function(player){
player.storage.xingwu=[];
},
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseCard(get.prompt('xingwu'),function(card){
2016-05-07 02:18:09 +00:00
return _status.event.player.storage.xingwu_color.contains(get.color(card));
}).set('ai',function(card){
var player=_status.event.player;
2016-02-14 09:04:31 +00:00
if(player.storage.xingwu.length==2){
var notarget=true;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=player&&game.players[i].sex=='male'&&
ai.get.damageEffect(game.players[i],player,player)>0&&
ai.get.attitude(player,game.players[i])<0){
notarget=false;break;
}
}
if(notarget) return 0;
}
return 7-ai.get.value(card);
2016-05-07 02:18:09 +00:00
});
2016-02-14 09:04:31 +00:00
'step 1'
if(result.bool){
player.logSkill('xingwu');
if(player.storage.xingwu.length<2){
player.$give(result.cards,player);
}
player.lose(result.cards,ui.special);
player.storage.xingwu=player.storage.xingwu.concat(result.cards);
player.markSkill('xingwu');
player.syncStorage('xingwu');
}
else{
event.finish();
}
'step 2'
if(player.storage.xingwu.length==3){
player.$throw(player.storage.xingwu);
while(player.storage.xingwu.length){
ui.discardPile.appendChild(player.storage.xingwu.shift());
}
player.unmarkSkill('xingwu');
player.chooseTarget(function(card,player,target){
return target!=player&&target.sex=='male';
2016-05-07 02:18:09 +00:00
},'对一名男性角色造成两点伤害并弃置其装备区内的牌').set('ai',function(target){
var player=_status.event.player;
if(ai.get.attitude(player,target)>0) return -1;
2016-02-14 09:04:31 +00:00
return ai.get.damageEffect(target,player,player)+target.num('e')/2;
2016-05-07 02:18:09 +00:00
});
2016-02-14 09:04:31 +00:00
}
else{
event.finish();
}
'step 3'
if(result.bool){
var target=result.targets[0];
target.damage(2);
event.target=target;
player.line(target,'green');
}
else{
event.finish();
}
'step 4'
if(event.target&&event.target.isAlive()){
var es=event.target.get('e');
if(es.length){
event.target.discard(es);
}
}
},
ai:{
threaten:1.5
}
},
2016-01-28 06:46:42 +00:00
yinbing:{
trigger:{player:'phaseEnd'},
direct:true,
2016-02-01 09:32:18 +00:00
audio:2,
2016-01-28 06:46:42 +00:00
init:function(player){
player.storage.yinbing=[];
},
filter:function(event,player){
return player.num('he',{type:'basic'})<player.num('he');
},
marktext:'兵',
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
player.chooseCard([1,player.num('he')-player.num('he',{type:'basic'})],'he',get.prompt('yinbing'),function(card){
2016-01-28 06:46:42 +00:00
return get.type(card)!='basic';
2016-05-07 02:18:09 +00:00
}).set('ai',function(card){
2016-01-28 06:46:42 +00:00
return 6-ai.get.value(card);
2016-05-07 02:18:09 +00:00
});
2016-01-28 06:46:42 +00:00
"step 1"
if(result.bool){
player.$give(result.cards,player,false);
player.logSkill('yinbing');
game.log(player,'将',result.cards,'置于武将牌上');
player.storage.yinbing=player.storage.yinbing.concat(result.cards);
player.lose(result.cards,ui.special);
player.markSkill('yinbing');
player.syncStorage('yinbing');
}
},
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
for(var i=0;i<storage.length;i++){
ui.discardPile.appendChild(storage[i]);
}
player.$throw(storage);
delete player.storage.yinbing;
}
}
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha'||card.name=='juedou'){
if(current<0) return 1.2;
}
}
},
2016-11-30 15:02:10 +00:00
threaten:function(player,target){
if(target.storage.yinbing&&target.storage.yinbing.length) return 2;
return 1;
}
2016-01-28 06:46:42 +00:00
},
subSkill:{
discard:{
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return event.card&&player.storage.yinbing.length>0&&
(event.card.name=='sha'||event.card.name=='juedou');
},
content:function(){
'step 0'
player.chooseCardButton('将一张引兵牌置入弃牌堆',true,player.storage.yinbing);
'step 1'
var card=result.links[0];
player.storage.yinbing.remove(card);
ui.discardPile.appendChild(card);
player.$throw(card);
game.log(player,'将',card,'置入弃牌堆');
player.syncStorage('yinbing');
if(player.storage.yinbing.length==0){
player.unmarkSkill('yinbing');
}
}
}
},
group:'yinbing_discard'
},
juedi:{
trigger:{player:'phaseBegin'},
filter:function(event,player){
return player.storage.yinbing&&player.storage.yinbing.length>0;
},
direct:true,
2016-02-01 09:32:18 +00:00
audio:2,
2016-01-28 06:46:42 +00:00
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('juedi'),function(card,player,target){
2016-01-28 06:46:42 +00:00
return player.hp>=target.hp;
2016-05-07 02:18:09 +00:00
}).set('ai',function(target){
var player=_status.event.player;
2016-11-30 15:02:10 +00:00
if(target==player){
if(player.num('h')>=player.maxHp) return 0;
return 0.5;
}
2016-01-28 06:46:42 +00:00
var att=ai.get.attitude(player,target);
if(att<2) return 0;
if(target.hp==1&&att>2){
att+=2;
}
if(player.num('j','lebu')){
if(target.hp==target.maxHp) return att-2;
return att-1;
}
if(target.hp==target.maxHp) return 0;
if(player.num('h')<player.hp-1){
return att-3;
}
return att-2;
2016-05-07 02:18:09 +00:00
});
2016-01-28 06:46:42 +00:00
'step 1'
if(result.bool){
player.logSkill('juedi',result.targets);
if(result.targets[0]==player){
player.$throw(player.storage.yinbing,1000);
2016-11-30 15:02:10 +00:00
var num=player.maxHp-player.num('h');
if(num>0) player.draw(num);
2016-01-28 06:46:42 +00:00
while(player.storage.yinbing.length){
ui.discardPile.appendChild(player.storage.yinbing.shift());
}
player.syncStorage('yinbing');
player.unmarkSkill('yinbing');
}
else{
var target=result.targets[0];
game.log(target,'获得了',player.storage.yinbing);
target.recover();
target.gain(player.storage.yinbing.slice(0),'gain2');
2016-11-30 15:02:10 +00:00
target.draw(player.storage.yinbing.length);
2016-01-28 06:46:42 +00:00
player.storage.yinbing.length=0;
}
player.syncStorage('yinbing');
player.unmarkSkill('yinbing');
}
}
},
2016-01-24 08:34:21 +00:00
meibu:{
trigger:{global:'phaseUseBegin'},
filter:function(event,player){
return event.player!=player&&get.distance(event.player,player,'attack')>1;
},
2016-09-20 05:06:35 +00:00
logTarget:'player',
2016-01-24 08:34:21 +00:00
check:function(event,player){
if(ai.get.attitude(player,event.player)>=0) return false;
var e2=player.get('e','2');
if(e2){
if(e2.name=='tengjia') return true;
if(e2.name=='bagua') return true;
}
return player.num('h','shan')>0;
},
content:function(){
var target=trigger.player;
target.addTempSkill('meibu_viewas','phaseAfter');
target.addTempSkill('meibu_range','phaseAfter');
target.storage.meibu=player;
2016-05-07 02:18:09 +00:00
target.markSkillCharacter('meibu',player,'魅步','锦囊牌均视为杀且'+get.translation(player)+'视为在攻击范围内');
2016-01-24 08:34:21 +00:00
},
ai:{
expose:0.2
},
subSkill:{
range:{
mod:{
targetInRange:function(card,player,target){
if(card.name=='sha'&&target==player.storage.meibu){
return true;
}
}
},
onremove:function(player){
2016-05-07 02:18:09 +00:00
game.broadcast(function(player){
if(player.marks.meibu){
player.marks.meibu.delete();
delete player.marks.meibu;
}
},player);
2016-01-24 08:34:21 +00:00
if(player.marks.meibu){
player.marks.meibu.delete();
delete player.marks.meibu;
game.addVideo('unmark',player,'meibu');
}
},
trigger:{player:'useCard'},
forced:true,
popup:false,
filter:function(event,player){
return event.skill=='meibu_viewas'
},
content:function(){
player.removeSkill('meibu_viewas');
2016-05-07 02:18:09 +00:00
game.broadcastAll(function(player){
if(player.marks.meibu&&player.marks.meibu.info){
player.marks.meibu.info.content=player.marks.meibu.info.content.slice(8);
}
},player);
2016-01-24 08:34:21 +00:00
}
},
viewas:{
mod:{
cardEnabled:function(card,player){
if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
},
cardUsable:function(card,player){
if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
},
cardRespondable:function(card,player){
if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
},
cardSavable:function(card,player){
if(card.name!='sha'&&get.type(card,'trick')=='trick') return false;
},
},
enable:['chooseToUse','chooseToRespond'],
filterCard:function(card){
return get.type(card,'trick')=='trick';
},
viewAs:{name:'sha'},
check:function(){return 1},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondSha')&&current<0) return 0.8
}
},
respondSha:true,
order:4,
useful:-1,
value:-1
}
}
}
},
mumu:{
enable:'phaseUse',
2016-02-01 09:32:18 +00:00
usable:1,
2016-01-24 08:34:21 +00:00
filterCard:function(card,player,target){
return card.name=='sha'||(get.type(card,'trick')=='trick'&&get.color(card)=='black');
},
check:function(card){
return 7-ai.get.value(card);
},
filterTarget:function(card,player,target){
if(target==player) return false;
return target.get('e','1')||target.get('e','2');
},
content:function(){
'step 0'
var e1=target.get('e','1');
var e2=target.get('e','2');
event.e1=e1;
event.e2=e2;
if(e1&&e2){
2016-05-07 02:18:09 +00:00
player.chooseControl('武器牌','防具牌').set('ai',function(){
if(_status.event.player.get('e','2')){
2016-01-24 08:34:21 +00:00
return '武器牌';
}
return '防具牌';
2016-05-07 02:18:09 +00:00
});
2016-01-24 08:34:21 +00:00
}
else if(e1){
event.choice='武器牌';
}
else{
event.choice='防具牌';
}
'step 1'
var choice=event.choice||result.control;
if(choice=='武器牌'){
2016-08-18 10:51:06 +00:00
if(event.e1){
target.discard(event.e1);
}
2016-01-24 08:34:21 +00:00
player.draw();
}
else{
2016-08-18 10:51:06 +00:00
if(event.e2){
player.equip(event.e2);
target.$give(event.e2,player);
}
2016-01-24 08:34:21 +00:00
}
},
ai:{
order:8,
result:{
target:function(player,target){
if(target.get('e','2')&&!player.get('e','2')){
return -2;
}
return -1;
}
}
}
},
fentian:{
audio:2,
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
if(player.num('h')>=player.hp) return false;
for(var i=0;i<game.players.length;i++){
2016-02-04 06:55:02 +00:00
if(player!=game.players[i]&&
get.distance(player,game.players[i],'attack')<=1&&
game.players[i].num('he')){
2016-01-24 08:34:21 +00:00
return true;
}
}
return false;
},
intro:{
content:'cards',
},
init:function(player){
player.storage.fentian=[];
},
content:function(){
'step 0'
player.chooseTarget('焚天:选择一名攻击范围内的角色,将其一张牌置于你的武将牌上',true,function(card,player,target){
2016-02-04 06:55:02 +00:00
return player!=target&&get.distance(player,target,'attack')<=1&&target.num('he')>0;
2016-05-07 02:18:09 +00:00
}).set('ai',function(target){
return -ai.get.attitude(_status.event.player,target)
});
2016-01-24 08:34:21 +00:00
'step 1'
if(result.bool){
player.logSkill('fentian',result.targets);
event.target=result.targets[0];
player.choosePlayerCard(result.targets[0],'he',true);
}
else{
event.finish();
}
'step 2'
if(result.bool){
event.target.$give(result.links,player);
event.target.lose(result.links,ui.special);
player.storage.fentian=player.storage.fentian.concat(result.links);
player.syncStorage('fentian');
setTimeout(function(){
player.markSkill('fentian');
},700);
}
},
mod:{
attackFrom:function(from,to,distance){
return distance-from.storage.fentian.length;
}
}
},
zhiri:{
trigger:{player:'phaseBegin'},
forced:true,
unique:true,
audio:2,
skillAnimation:true,
animationColor:'fire',
filter:function(event,player){
return player.storage.fentian&&player.storage.fentian.length>=3&&!player.storage.zhiri;
},
content:function(){
player.loseMaxHp();
player.addSkill('xintan');
player.storage.zhiri=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('zhiri');
2016-01-24 08:34:21 +00:00
}
},
xintan:{
enable:'phaseUse',
usable:1,
audio:2,
unique:true,
filter:function(event,player){
return player.storage.fentian&&player.storage.fentian.length>=2;
},
filterTarget:true,
prompt:'两张“焚”置入弃牌堆并令一名角色失去一点体力',
content:function(){
'step 0'
player.chooseCardButton(2,'两张“焚”置入弃牌堆并令'+get.translation(target)+'失去一点体力',player.storage.fentian,true);
'step 1'
if(result.bool){
player.$throw(result.links);
for(var i=0;i<result.links.length;i++){
player.storage.fentian.remove(result.links[i]);
ui.discardPile.appendChild(result.links[i]);
}
player.syncStorage('fentian');
target.loseHp();
}
},
ai:{
order:8,
result:{
target:-1
}
}
},
2015-12-27 16:58:56 +00:00
danji:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-12-27 16:58:56 +00:00
trigger:{player:'phaseBegin'},
forced:true,
filter:function(event,player){
return !player.storage.danji&&player.num('h')>player.hp;
},
content:function(){
player.storage.danji=true;
player.loseMaxHp();
player.addSkill('mashu');
player.addSkill('nuzhan');
2017-01-23 09:28:05 +00:00
player.awakenSkill('danji');
2015-12-27 16:58:56 +00:00
}
},
nuzhan:{
trigger:{player:'useCard'},
filter:function(event,player){
2016-03-18 08:33:13 +00:00
return event.card&&event.card.name=='sha'&&event.cards&&
event.cards.length==1&&get.type(event.cards[0],'trick')=='trick';
2015-12-27 16:58:56 +00:00
},
forced:true,
content:function(){
if(player.stat[player.stat.length-1].card.sha>0){
player.stat[player.stat.length-1].card.sha--;
}
},
group:'nuzhan2'
},
nuzhan2:{
2016-03-18 08:33:13 +00:00
trigger:{source:'damageBegin'},
2015-12-27 16:58:56 +00:00
forced:true,
filter:function(event,player){
2016-03-18 08:33:13 +00:00
return event.card&&event.card.name=='sha'&&event.cards&&
event.cards.length==1&&get.type(event.cards[0])=='equip';
2015-12-27 16:58:56 +00:00
},
content:function(){
2016-03-18 08:33:13 +00:00
trigger.num++;
2015-12-27 16:58:56 +00:00
}
},
2015-12-19 09:28:50 +00:00
tunchu:{
2015-12-20 04:34:31 +00:00
audio:2,
2015-12-19 09:28:50 +00:00
trigger:{player:'phaseDrawBegin'},
check:function(event,player){
return player.num('h')-player.num('h',{type:'equip'})+2<=player.hp;
},
content:function(){
trigger.num+=2;
player.addTempSkill('tunchu_choose','phaseDrawAfter');
},
init:function(player){
player.storage.tunchu=[];
},
intro:{
content:'cards'
},
group:'tunchu_disable',
subSkill:{
choose:{
trigger:{player:'phaseDrawEnd'},
forced:true,
popup:false,
content:function(){
'step 0'
player.removeSkill('tunchu_choose');
if(player.num('h')){
player.chooseCard('h',true);
}
else{
event.finish();
}
'step 1'
player.lose(result.cards,ui.special);
player.storage.tunchu=player.storage.tunchu.concat(result.cards);
player.markSkill('tunchu');
player.syncStorage('tunchu');
}
},
disable:{
mod:{
cardEnabled:function(card,player){
if(player.storage.tunchu&&player.storage.tunchu.length&&
(card.name=='sha'||card.name=='juedou')){
return false;
}
},
cardUsable:function(card,player){
if(player.storage.tunchu&&player.storage.tunchu.length&&
(card.name=='sha'||card.name=='juedou')){
return false;
}
},
}
}
}
},
shuliang:{
2015-12-20 04:34:31 +00:00
audio:2,
2015-12-19 09:28:50 +00:00
trigger:{global:'phaseEnd'},
direct:true,
filter:function(event,player){
2016-04-11 06:13:35 +00:00
return player.storage.tunchu&&player.storage.tunchu.length>0&&event.player.num('h')==0&&event.player.isAlive();
2015-12-19 09:28:50 +00:00
},
content:function(){
'step 0'
var goon=(ai.get.attitude(player,trigger.player)>0);
2016-09-20 05:06:35 +00:00
player.chooseCardButton(get.prompt('shuliang',trigger.player),player.storage.tunchu).set('ai',function(){
2016-05-07 02:18:09 +00:00
if(_status.event.goon) return 1;
2015-12-19 09:28:50 +00:00
return 0;
2016-05-07 02:18:09 +00:00
}).set('goon',goon);
2015-12-19 09:28:50 +00:00
'step 1'
if(result.bool){
player.logSkill('shuliang',trigger.player);
player.storage.tunchu.remove(result.links[0]);
player.$throw(result.links);
ui.discardPile.appendChild(result.links[0]);
player.syncStorage('tunchu');
if(player.storage.tunchu.length==0){
player.unmarkSkill('tunchu');
}
trigger.player.draw(2);
}
}
},
jieyuan:{
group:['jieyuan_more','jieyuan_less'],
subSkill:{
more:{
2015-12-20 04:34:31 +00:00
audio:true,
2015-12-19 09:28:50 +00:00
trigger:{source:'damageBegin'},
direct:true,
filter:function(event,player){
if(!player.num('h',{color:'black'})) return false;
return event.player.hp>=player.hp&&player!=event.player;
},
content:function(){
'step 0'
var goon=(ai.get.attitude(player,trigger.player)<0);
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard(get.prompt('jieyuan',trigger.player),{color:'black'});
2016-05-07 02:18:09 +00:00
next.set('ai',function(card){
if(_status.event.goon){
2015-12-19 09:28:50 +00:00
return 8-ai.get.value(card);
}
return 0;
2016-05-07 02:18:09 +00:00
});
next.set('goon',goon);
2015-12-20 04:34:31 +00:00
next.logSkill=['jieyuan_more',trigger.player];
2015-12-19 09:28:50 +00:00
'step 1'
if(result.bool){
trigger.num++;
}
}
},
less:{
2015-12-20 04:34:31 +00:00
audio:true,
2015-12-19 09:28:50 +00:00
trigger:{player:'damageBegin'},
filter:function(event,player){
if(!player.num('h',{color:'red'})) return false;
return event.source&&event.source.hp>=player.hp&&player!=event.source;
},
direct:true,
content:function(){
"step 0"
var next=player.chooseToDiscard('竭缘:是否弃置一张红色手牌令伤害-1',{color:'red'});
2016-05-07 02:18:09 +00:00
next.set('ai',function(card){
var player=_status.event.player;
2016-05-07 03:12:04 +00:00
if(player.hp==1||_status.event.getTrigger().num>1){
2015-12-19 09:28:50 +00:00
return 9-ai.get.value(card);
}
if(player.hp==2){
return 8-ai.get.value(card);
}
return 7-ai.get.value(card);
2016-05-07 02:18:09 +00:00
});
2015-12-20 04:34:31 +00:00
next.logSkill='jieyuan_less';
2015-12-19 09:28:50 +00:00
"step 1"
if(result.bool){
game.delay();
trigger.num--;
}
}
}
},
ai:{
expose:0.2,
threaten:1.5
}
},
fenxin:{
mode:['identity'],
trigger:{source:'dieBegin'},
2015-12-20 04:34:31 +00:00
init:function(player){
player.storage.fenxin=false;
},
intro:{
content:'limited'
},
2015-12-30 04:00:49 +00:00
skillAnimation:'epic',
2015-12-20 04:34:31 +00:00
audio:2,
mark:true,
2015-12-19 09:28:50 +00:00
filter:function(event,player){
2015-12-20 04:34:31 +00:00
if(player.storage.fenxin) return false;
2015-12-19 09:28:50 +00:00
return event.player.identity!='zhu'&&player.identity!='zhu'&&
player.identity!='mingzhong'&&event.player.identity!='mingzhong';
},
check:function(event,player){
if(player.identity==event.player.identity) return Math.random()<0.5;
var stat=ai.get.situation();
switch(player.identity){
case 'fan':
if(stat<0) return false;
if(stat==0) return Math.random()<0.6;
return true;
case 'zhong':
if(stat>0) return false;
if(stat==0) return Math.random()<0.6;
return true;
case 'nei':
if(event.player.identity=='fan'&&stat<0) return true;
if(event.player.identity=='zhong'&&stat>0) return true;
if(stat==0) return Math.random()<0.7;
return false;
}
},
prompt:function(event,player){
return '焚心:是否与'+get.translation(event.player)+'交换身份?';
},
content:function(){
2016-05-07 02:18:09 +00:00
game.broadcastAll(function(player,target,shown){
var identity=player.identity;
player.identity=target.identity;
if(shown||player==game.me){
player.setIdentity();
}
target.identity=identity;
2016-05-20 12:30:12 +00:00
},player,trigger.player,trigger.player.identityShown);
2015-12-19 09:28:50 +00:00
player.line(trigger.player,'green');
2015-12-20 04:34:31 +00:00
player.storage.fenxin=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('fenxin');
2015-12-19 09:28:50 +00:00
}
},
qingyi:{
group:['qingyi1','qingyi2']
},
qingyi1:{
2015-12-20 04:34:31 +00:00
audio:true,
2015-12-19 09:28:50 +00:00
trigger:{player:'phaseBegin'},
direct:true,
content:function(){
"step 0"
player.addSkill('qingyi3');
var check= player.num('h')>2;
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('qingyi'),function(card,player,target){
2015-12-19 09:28:50 +00:00
if(player==target) return false;
return player.canUse({name:'sha'},target);
}).ai=function(target){
if(!check) return 0;
return ai.get.effect(target,{name:'sha'},_status.event.player);
}
"step 1"
if(result.bool){
player.logSkill('qingyi1',result.targets);
player.useCard({name:'sha'},result.targets[0],false);
player.skip('phaseJudge');
player.skip('phaseDraw');
}
player.removeSkill('qingyi3');
}
},
qingyi2:{
2015-12-20 04:34:31 +00:00
audio:true,
2015-12-19 09:28:50 +00:00
trigger:{player:'phaseUseBefore'},
direct:true,
filter:function(event,player){
return player.num('he',{type:'equip'})>0;
},
content:function(){
"step 0"
player.addSkill('qingyi3');
var check=player.num('h')<=player.hp;
player.chooseCardTarget({
2016-09-20 05:06:35 +00:00
prompt:get.prompt('qingyi'),
2017-01-13 18:51:13 +00:00
filterCard:function(card,player){
return get.type(card)=='equip'&&lib.filter.cardDiscardable(card,player);
2015-12-19 09:28:50 +00:00
},
position:'he',
filterTarget:function(card,player,target){
if(player==target) return false;
return player.canUse({name:'sha'},target);
},
ai1:function(card){
2016-05-07 02:18:09 +00:00
if(!_status.event.check) return 0;
2015-12-19 09:28:50 +00:00
return 6-ai.get.value(card);
},
ai2:function(target){
2016-05-07 02:18:09 +00:00
if(!_status.event.check) return 0;
2015-12-19 09:28:50 +00:00
return ai.get.effect(target,{name:'sha'},_status.event.player);
2016-05-07 02:18:09 +00:00
},
check:check
2015-12-19 09:28:50 +00:00
});
"step 1"
if(result.bool){
player.logSkill('qingyi2',result.targets);
player.discard(result.cards[0]);
player.useCard({name:'sha'},result.targets[0]);
trigger.untrigger();
trigger.finish();
}
player.removeSkill('qingyi3');
}
},
qingyi3:{
mod:{
targetInRange:function(card,player,target,now){
return true;
}
},
},
shixin:{
2015-12-20 04:34:31 +00:00
audio:2,
2015-12-19 09:28:50 +00:00
trigger:{player:'damageBefore'},
filter:function(event){
return event.nature=='fire';
},
forced:true,
content:function(){
trigger.untrigger();
trigger.finish();
},
ai:{
nofire:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'fireDamage')) return 0;
}
}
}
},
fenyin:{
audio:2,
trigger:{player:'useCard'},
frequent:true,
2016-07-01 01:31:02 +00:00
usable:3,
2015-12-19 09:28:50 +00:00
filter:function(event,player){
if(!event.cards||event.cards.length!=1) return false;
if(_status.currentPhase!=player) return false;
if(!player.storage.fenyin) return false;
return get.color(player.storage.fenyin)!=get.color(event.cards[0]);
},
content:function(){
player.draw();
},
intro:{
content:'card'
},
group:['fenyin2','fenyin3']
},
fenyin3:{
trigger:{player:'useCard'},
priority:-1,
forced:true,
popup:false,
silent:true,
filter:function(event,player){
if(!event.cards||event.cards.length!=1) return false;
if(_status.currentPhase!=player) return false;
return true;
},
content:function(){
player.storage.fenyin=trigger.cards[0];
}
},
fenyin2:{
2016-03-19 10:39:09 +00:00
trigger:{player:'phaseBefore'},
2015-12-19 09:28:50 +00:00
forced:true,
silent:true,
popup:false,
2016-03-19 10:39:09 +00:00
priority:10,
2015-12-19 09:28:50 +00:00
content:function(){
player.storage.fenyin=null;
}
},
dujin:{
audio:2,
trigger:{player:'phaseDrawBegin'},
frequent:true,
content:function(){
trigger.num+=1+Math.floor(player.num('e')/2);
}
},
2015-11-25 10:25:18 +00:00
qirang:{
2015-12-09 12:17:15 +00:00
audio:2,
2015-11-25 10:25:18 +00:00
trigger:{player:'equipEnd'},
frequent:true,
content:function(){
player.gain(get.cardPile(function(card){
return get.type(card,'trick')=='trick';
}),'gain2');
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.type(card)=='equip') return [1,3];
}
},
threaten:1.3
}
},
yuhua:{
trigger:{player:'phaseDiscardBegin'},
forced:true,
2015-12-09 12:17:15 +00:00
audio:2,
2015-11-25 10:25:18 +00:00
filter:function(event,player){
2017-01-13 16:02:19 +00:00
return event.parent.name=='phaseDiscard'&&player.num('h',{type:'basic'})<player.num('h');
2015-11-25 10:25:18 +00:00
},
2017-01-13 16:02:19 +00:00
content:function(){},
mod:{
maxHandcard:function(player,num){
var hs=player.get('h');
for(var i=0;i<hs.length;i++){
if(get.type(hs[i])!='basic'){
num++;
}
2015-11-25 10:25:18 +00:00
}
2017-01-13 16:02:19 +00:00
return num;
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&get.type(card)!='basic') return false;
2015-11-25 10:25:18 +00:00
}
},
},
2015-11-21 05:30:26 +00:00
chenqing:{
trigger:{global:'dying'},
priority:6,
filter:function(event,player){
2016-08-12 08:26:31 +00:00
return event.player.hp<=0&&!player.hasSkill('chenqing2');
2015-11-21 05:30:26 +00:00
},
direct:true,
content:function(){
'step 0'
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('chenqing'),function(card,player,target){
2016-05-07 03:12:04 +00:00
return target!=player&&target!=_status.event.getTrigger().player;
2016-05-07 02:18:09 +00:00
}).set('ai',function(target){
var player=_status.event.player;
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2015-11-21 05:30:26 +00:00
if(ai.get.attitude(player,trigger.player)>0){
var att1=ai.get.attitude(target,player);
var att2=ai.get.attitude(target,trigger.player);
var att3=ai.get.attitude(player,target);
if(att3<0) return 0;
return att1/2+att2+att3;
}
else{
2016-01-07 09:29:44 +00:00
return 0;
// return ai.get.attitude(player,target);
2015-11-21 05:30:26 +00:00
}
2016-05-07 02:18:09 +00:00
});
2015-11-21 05:30:26 +00:00
'step 1'
if(result.bool){
player.addTempSkill('chenqing2',{player:'phaseBegin'});
event.target=result.targets[0];
event.target.draw(4);
player.logSkill('chenqing',event.target);
}
else{
event.finish();
}
'step 2'
var target=event.target;
var tosave=trigger.player;
var att=ai.get.attitude(target,tosave);
var hastao=target.num('h','tao');
2016-05-07 02:18:09 +00:00
target.chooseToDiscard(4,true,'he').set('ai',function(card){
var hastao=_status.event.hastao;
var att=_status.event.att;
2015-11-21 05:30:26 +00:00
if(!hastao&&att>0){
var suit=get.suit(card);
for(var i=0;i<ui.selected.cards.length;i++){
if(get.suit(ui.selected.cards[i])==suit){
return -4-ai.get.value(card);
}
}
}
2015-11-30 13:08:29 +00:00
if(att<0&&ui.selected.cards.length==3){
var suit=get.suit(card);
for(var i=0;i<ui.selected.cards.length;i++){
if(get.suit(ui.selected.cards[i])==suit){
return -ai.get.value(card);
}
}
return -10-ai.get.value(card);
}
2015-11-21 05:30:26 +00:00
return -ai.get.value(card);
2016-05-07 02:18:09 +00:00
}).set('hastao',hastao).set('att',att);
2015-11-21 05:30:26 +00:00
'step 3'
if(result.cards&&result.cards.length==4){
var suits=[];
for(var i=0;i<result.cards.length;i++){
suits.add(get.suit(result.cards[i]));
}
if(suits.length==4){
event.target.useCard({name:'tao'},trigger.player);
}
}
},
ai:{
skillTagFilter:function(player){
2016-08-12 08:26:31 +00:00
return !player.hasSkill('chenqing2');
2015-11-21 05:30:26 +00:00
},
expose:0.2,
threaten:1.5,
save:true,
}
},
mozhi:{
intro:{
content:'cards'
},
init:function(player){
player.storage.mozhi=[];
},
trigger:{player:'phaseEnd'},
2015-11-25 14:12:10 +00:00
direct:true,
2015-11-21 05:30:26 +00:00
filter:function(event,player){
return player.storage.mozhi.length>0&&player.num('h')>0;
},
content:function(){
if(player.storage.mozhi.length&&player.num('h')){
var card=player.storage.mozhi.shift();
card={name:card.name,nature:card.nature,suit:card.suit,number:card.number};
if(lib.filter.cardEnabled(card)){
for(var i=0;i<game.players.length;i++){
if(player.canUse(card,game.players[i])){
break;
}
}
if(i<game.players.length){
lib.skill.mozhix.viewAs=card;
var next=player.chooseToUse();
2016-05-07 02:18:09 +00:00
if(next.isOnline()){
player.send(function(card){
lib.skill.mozhix.viewAs=card;
},card)
2015-11-21 05:30:26 +00:00
}
2016-05-07 02:18:09 +00:00
next.logSkill='mozhi';
next.set('openskilldialog','将一张手牌当'+get.translation(card)+'使用');
next.set('norestore',true);
next.set('_backupevent','mozhix');
2015-11-21 05:30:26 +00:00
next.backup('mozhix');
}
}
event.redo();
}
},
group:['mozhi2','mozhi3']
},
mozhix:{
filterCard:true,
2016-02-18 06:22:24 +00:00
selectCard:1,
popname:true,
2015-11-21 05:30:26 +00:00
},
mozhi2:{
trigger:{player:'phaseAfter'},
forced:true,
silent:true,
popup:false,
content:function(){
player.storage.mozhi.length=0;
player.unmarkSkill('mozhi');
}
},
mozhi3:{
trigger:{player:'useCard'},
forced:true,
silent:true,
popup:false,
filter:function(event,player){
if(_status.currentPhase!=player) return false;
if(event.parent.parent.name!='phaseUse') return false;
var type=get.type(event.card);
return player.storage.mozhi.length<2&&(type=='basic'||type=='trick');
},
content:function(){
player.storage.mozhi.add(trigger.card);
2016-04-05 05:18:30 +00:00
if(player.get('s').contains('mozhi')) player.markSkill('mozhi');
2015-11-21 05:30:26 +00:00
}
},
chenqing2:{},
ranshang:{
2015-12-09 04:55:37 +00:00
audio:2,
2015-11-21 05:30:26 +00:00
trigger:{player:'damageEnd'},
filter:function(event,player){
return event.nature=='fire';
},
init:function(player){
player.storage.ranshang=0;
},
forced:true,
check:function(){
return false;
},
content:function(){
if(player.storage.ranshang){
player.storage.ranshang++;
}
else{
player.storage.ranshang=1;
}
2016-04-29 12:25:08 +00:00
player.markSkill('ranshang');
2015-11-21 05:30:26 +00:00
game.addVideo('storage',player,['ranshang',player.storage.ranshang]);
},
intro:{
content:'mark'
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha'){
2016-08-12 08:26:31 +00:00
if(card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2;
2015-11-21 05:30:26 +00:00
}
if(get.tag(card,'fireDamage')&&current<0) return 2;
}
}
},
group:'ranshang2'
},
ranshang2:{
2015-12-09 04:55:37 +00:00
audio:2,
2015-11-21 05:30:26 +00:00
trigger:{player:'phaseEnd'},
forced:true,
filter:function(event,player){
return player.storage.ranshang>0;
},
content:function(){
player.loseHp(player.storage.ranshang);
}
},
hanyong:{
trigger:{player:'useCard'},
filter:function(event,player){
return player.storage.hanyong>player.hp&&event.card&&
(event.card.name=='nanman'||event.card.name=='wanjian');
},
content:function(){
player.addTempSkill('hanyong3','useCardAfter');
},
init:function(player){
player.storage.hanyong=0;
},
group:'hanyong2'
},
hanyong2:{
2015-12-09 04:55:37 +00:00
audio:false,
2015-11-21 05:30:26 +00:00
trigger:{player:'phaseBegin'},
forced:true,
popup:false,
silent:true,
content:function(){
player.storage.hanyong++;
}
},
hanyong3:{
2015-12-09 04:55:37 +00:00
audio:false,
2015-11-21 05:30:26 +00:00
trigger:{source:'damageBegin'},
forced:true,
filter:function(event,player){
return event.card&&(event.card.name=='nanman'||event.card.name=='wanjian');
},
content:function(){
trigger.num++;
}
},
yishe:{
trigger:{player:'phaseEnd'},
init:function(player){
player.storage.yishe=[];
},
filter:function(event,player){
return !player.storage.yishe||!player.storage.yishe.length;
},
intro:{
content:'cards'
},
content:function(){
'step 0'
player.draw(2);
player.chooseCard(2,'he',true,'选择两张牌作为“米”');
'step 1'
player.storage.yishe=result.cards;
player.lose(result.cards,ui.special);
2016-04-25 07:59:31 +00:00
player.syncStorage('yishe');
player.markSkill('yishe');
2015-11-21 05:30:26 +00:00
}
},
bushi:{
trigger:{player:'damageEnd',source:'damageEnd'},
filter:function(event,player){
return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive();
},
direct:true,
content:function(){
'step 0'
trigger.player.chooseCardButton('选择获得一张“米”',player.storage.yishe);
'step 1'
if(result.bool){
player.logSkill('bushi');
2016-04-25 07:59:31 +00:00
game.log(player,'获得了',result.links);
trigger.player.gain(result.links[0],'draw2');
player.storage.yishe.remove(result.links[0]);
player.syncStorage('yishe');
2015-11-21 05:30:26 +00:00
if(player.storage.yishe.length==0){
player.recover();
player.unmarkSkill('yishe');
}
2016-04-25 07:59:31 +00:00
else{
player.markSkill('yishe');
}
2015-11-21 05:30:26 +00:00
}
}
},
midao:{
unique:true,
trigger:{global:'judge'},
direct:true,
filter:function(event,player){
return player.storage.yishe&&player.storage.yishe.length&&event.player.isAlive();
},
content:function(){
"step 0"
var list=player.storage.yishe;
2016-04-25 07:59:31 +00:00
player.chooseButton([get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+get.translation(trigger.player.judging[0])+
2016-09-20 05:06:35 +00:00
''+get.prompt('midao'),list,'hidden'],function(button){
2015-11-21 05:30:26 +00:00
var card=button.link;
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2015-11-21 05:30:26 +00:00
var player=_status.event.player;
2016-04-25 07:59:31 +00:00
var judging=_status.event.judging;
var result=trigger.judge(card)-trigger.judge(judging);
2015-11-21 05:30:26 +00:00
var attitude=ai.get.attitude(player,trigger.player);
return result*attitude;
2016-04-25 07:59:31 +00:00
}).set('judging',trigger.player.judging);
2015-11-21 05:30:26 +00:00
"step 1"
if(result.bool){
2016-04-25 07:59:31 +00:00
player.logSkill('midao',trigger.player);
var card=result.links[0];
player.storage.yishe.remove(card);
player.syncStorage('yishe');
2015-11-21 05:30:26 +00:00
if(player.storage.yishe.length==0){
player.recover();
player.unmarkSkill('yishe');
}
2016-04-25 07:59:31 +00:00
else{
player.markSkill('yishe');
2015-11-21 05:30:26 +00:00
}
2016-04-25 07:59:31 +00:00
player.$throw(card);
game.broadcastAll(function(card){
if(card.clone){
card.clone.classList.add('thrownhighlight');
}
},card);
if(trigger.player.judging[0].clone){
trigger.player.judging[0].clone.classList.remove('thrownhighlight');
game.broadcast(function(card){
if(card.clone){
card.clone.classList.remove('thrownhighlight');
}
},trigger.player.judging[0]);
game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
}
trigger.player.judging[0]=card;
trigger.position.appendChild(card);
game.log(player,'的判定牌改为',card);
2015-11-21 05:30:26 +00:00
game.delay(2);
}
},
ai:{
tag:{
rejudge:0.6
}
}
},
fengpo:{
2015-12-09 04:55:37 +00:00
audio:2,
2015-11-21 05:30:26 +00:00
trigger:{player:['shaBegin','juedouBegin']},
filter:function(event,player){
2016-08-12 08:26:31 +00:00
if(player.hasSkill('fengpo3')) return false;
2015-11-21 05:30:26 +00:00
return event.target&&event.targets&&event.targets.length==1;
},
direct:true,
content:function(){
'step 0'
player.addTempSkill('fengpo3','phaseAfter');
2017-01-16 07:48:07 +00:00
player.chooseControl('draw_card','加伤害','cancel2').set('prompt',get.prompt('fengpo'));
2015-11-21 05:30:26 +00:00
'step 1'
2017-01-16 07:48:07 +00:00
if(result.control&&result.control!='cancel2'){
2015-11-21 05:30:26 +00:00
player.logSkill('fengpo');
var nd=trigger.target.num('h',{suit:'diamond'});
if(result.control=='draw_card'){
player.draw(nd);
}
else{
player.addTempSkill('fengpo2','useCardToAfter');
player.storage.fengpo=nd;
}
}
}
},
fengpo2:{
trigger:{source:'damageBegin'},
filter:function(event){
2016-04-25 07:59:31 +00:00
return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink();
2015-11-21 05:30:26 +00:00
},
forced:true,
2015-12-09 04:55:37 +00:00
audio:false,
2015-11-21 05:30:26 +00:00
content:function(){
if(typeof player.storage.fengpo=='number'){
trigger.num+=player.storage.fengpo;
}
}
},
fengpo3:{},
2015-11-18 05:46:30 +00:00
biluan:{
trigger:{player:'phaseDrawBefore'},
2015-11-21 05:30:26 +00:00
mark:true,
unique:true,
intro:{
content:function(storage){
if(storage>0){
return '防御距离+'+storage;
}
else if(storage<0){
return '防御距离'+storage;
}
else{
return '无距离变化';
}
}
},
init:function(player){
player.storage.biluan=0;
},
2015-11-18 05:46:30 +00:00
check:function(event,player){
2015-11-21 05:30:26 +00:00
if(player.num('h')>player.hp) return true;
if(player.num('j','lebu')) return true;
2015-11-18 05:46:30 +00:00
var ng=[];
for(var i=0;i<game.players.length;i++){
if(game.players[i].group!='unknown'){
ng.add(game.players[i].group);
}
}
ng=ng.length;
if(ng<2) return false;
var nai=0;
for(var i=0;i<game.players.length;i++){
2015-11-21 05:30:26 +00:00
if(game.players[i]!=player){
var dist=get.distance(game.players[i],player,'attack');
if(dist<=1&&dist+ng>1){
nai++;
}
2015-11-18 05:46:30 +00:00
}
}
return nai>=2;
},
filter:function(event,player){
for(var i=0;i<game.players.length;i++){
2015-11-21 05:30:26 +00:00
if(game.players[i]!=player&&
get.distance(game.players[i],player)<=1){
2015-11-18 05:46:30 +00:00
return true;
}
}
return false;
},
2015-11-21 05:30:26 +00:00
content:function(){
var ng=[];
for(var i=0;i<game.players.length;i++){
if(game.players[i].group!='unknown'){
ng.add(game.players[i].group);
}
}
player.$damagepop(ng.length,'unknownx');
player.storage.biluan+=ng.length;
2016-04-25 07:59:31 +00:00
player.markSkill('biluan');
2015-11-21 05:30:26 +00:00
game.addVideo('storage',player,['biluan',player.storage.biluan]);
trigger.untrigger();
trigger.finish();
},
mod:{
globalTo:function(from,to,distance){
if(typeof to.storage.biluan=='number'){
return distance+to.storage.biluan;
}
}
}
2015-11-18 05:46:30 +00:00
},
2015-11-21 05:30:26 +00:00
lixia:{
trigger:{global:'phaseEnd'},
filter:function(event,player){
2016-04-19 08:56:58 +00:00
return event.player.isAlive()&&event.player!=player&&get.distance(event.player,player,'attack')>1;
2015-11-21 05:30:26 +00:00
},
forced:true,
content:function(){
'step 0'
player.chooseTarget(function(card,player,target){
2016-05-07 03:12:04 +00:00
return target==player||target==_status.event.getTrigger().player;
2016-04-25 07:59:31 +00:00
},true,'礼下:选择一个目标摸一张牌').set('ai',function(target){
2015-11-21 05:30:26 +00:00
return player==target?1:0;
2016-04-25 07:59:31 +00:00
});
2015-11-21 05:30:26 +00:00
'step 1'
if(result.targets.length){
result.targets[0].draw();
player.line(result.targets[0],'green');
}
player.storage.biluan--;
2016-04-25 07:59:31 +00:00
player.markSkill('biluan');
2015-11-21 05:30:26 +00:00
game.addVideo('storage',player,['biluan',player.storage.biluan]);
}
2015-11-18 05:46:30 +00:00
},
2015-05-06 08:46:40 +00:00
fuji:{
trigger:{global:'damageBegin'},
filter:function(event){
return event.source&&event.nature=='thunder';
},
check:function(event,player){
2016-07-01 01:31:02 +00:00
return ai.get.attitude(player,event.source)>0&&ai.get.attitude(player,event.player)<0;
2015-05-06 08:46:40 +00:00
},
prompt:function(event){
2016-09-20 05:06:35 +00:00
return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji');
2015-05-06 08:46:40 +00:00
},
content:function(){
"step 0"
2015-05-11 03:43:37 +00:00
trigger.source.judge(ui.special);
2015-05-06 08:46:40 +00:00
"step 1"
if(result.color=='black'){
2015-05-11 03:43:37 +00:00
result.card.goto(ui.discardPile);
2015-05-06 08:46:40 +00:00
trigger.num++;
}
else{
trigger.source.gain(result.card);
trigger.source.$gain2(result.card);
}
}
},
fulu:{
enable:'chooseToUse',
filterCard:function(card){
return card.name=='sha'&&!card.nature;
},
viewAs:{name:'sha',nature:'thunder'},
ai:{
order:function(){
return lib.card.sha.ai.order+0.1;
}
}
},
2015-04-29 03:25:17 +00:00
canshi:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseDrawBefore'},
check:function(event,player){
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp){
num++;
if(num>3) return true;
}
}
return false;
},
prompt:function(){
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp){
num++;
}
}
2016-03-18 08:33:13 +00:00
return '残蚀:是否放弃摸牌,改为摸'+get.cnNumber(num)+'张牌?';
2015-04-29 03:25:17 +00:00
},
content:function(){
trigger.untrigger();
trigger.finish();
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp){
num++;
}
}
if(num>0){
player.draw(num);
}
player.addTempSkill('canshi2','phaseAfter');
}
},
canshi2:{
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
if(player.num('he')==0) return false;
var type=get.type(event.card,'trick');
return type=='basic'||type=='trick';
},
content:function(){
game.delay(0.5);
player.chooseToDiscard(true,'he');
}
},
chouhai:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'damageBegin'},
forced:true,
2015-06-27 16:21:25 +00:00
check:function(){
return false;
},
2015-04-29 03:25:17 +00:00
filter:function(event,player){
return player.num('h')==0;
},
content:function(){
trigger.num++;
},
ai:{
effect:{
target:function(card,player,target,current){
if(get.tag(card,'damage')&&target.num('h')==0) return [1,-2];
}
}
}
},
kunfen:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseEnd'},
direct:true,
content:function(){
"step 0"
2016-01-24 08:34:21 +00:00
if(player.storage.kunfen||
(lib.config.mode=='guozhan'&&player.hiddenSkills.contains('kunfen'))){
2016-04-25 07:59:31 +00:00
if(!player.storage.kunfen){
event.skillHidden=true;
}
2016-09-20 05:06:35 +00:00
player.chooseBool(get.prompt('kunfen')).set('ai',function(){
2016-04-25 07:59:31 +00:00
var player=_status.event.player;
2015-04-29 03:25:17 +00:00
if(player.hp>3) return true;
if(player.hp==3&&player.num('h')<3) return true;
if(player.hp==2&&player.num('h')==0) return true;
return false;
2016-04-25 07:59:31 +00:00
});
2015-04-29 03:25:17 +00:00
}
else{
event.forced=true;
}
"step 1"
if(event.forced||result.bool){
player.logSkill('kunfen');
player.loseHp();
}
else{
event.finish();
}
"step 2"
player.draw(2);
},
ai:{
threaten:1.5
}
},
fengliang:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-04-29 03:25:17 +00:00
unique:true,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'dying'},
priority:10,
forced:true,
filter:function(event,player){
return !player.storage.kunfen;
},
content:function(){
"step 0"
player.loseMaxHp();
"step 1"
if(player.hp<2){
player.recover(2-player.hp);
}
"step 2"
player.addSkill('tiaoxin');
player.storage.kunfen=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('fengliang');
2015-04-29 03:25:17 +00:00
},
},
zhuiji:{
mod:{
globalFrom:function(from,to){
if(from.hp>to.hp) return -Infinity;
}
}
},
cihuai:{
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.num('h','sha')==0;
},
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('cihuai'),function(card,player,target){
2015-04-29 03:25:17 +00:00
return player.canUse({name:'sha'},target);
2016-04-25 07:59:31 +00:00
}).set('ai',function(target){
var player=_status.event.player;
2015-04-29 03:25:17 +00:00
return ai.get.effect(target,{name:'sha'},player,player);
2016-04-25 07:59:31 +00:00
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
player.logSkill('cihuai');
player.showHandcards();
player.useCard({name:'sha'},result.targets);
}
},
ai:{
expose:0.2,
}
},
jilei:{
trigger:{player:'damageEnd'},
priority:9,
2015-11-01 07:54:42 +00:00
audio:2,
2017-01-14 08:57:14 +00:00
direct:true,
2015-04-29 03:25:17 +00:00
filter:function(event){
return event&&event.source;
},
content:function(){
2017-01-14 08:57:14 +00:00
'step 0'
2017-01-16 07:48:07 +00:00
player.chooseControl('basic','trick','equip','cancel2',function(){
2017-01-14 08:57:14 +00:00
var source=_status.event.source;
2017-01-16 07:48:07 +00:00
if(ai.get.attitude(_status.event.player,source)>0) return 'cancel2';
2017-01-14 08:57:14 +00:00
if(_status.currentPhase!=source) return 'trick';
if(lib.filter.cardUsable({name:'sha'},source)&&source.num('h')>=2) return 'basic';
return 'trick';
}).set('prompt',get.prompt('jilei',trigger.source)).set('source',trigger.source);
'step 1'
2017-01-16 07:48:07 +00:00
if(result.control!='cancel2'){
2017-01-14 08:57:14 +00:00
player.logSkill('jilei',trigger.source);
player.popup(get.translation(result.control)+'牌');
trigger.source.storage.jilei2=result.control;
trigger.source.addTempSkill('jilei2','phaseAfter');
}
2015-04-29 03:25:17 +00:00
},
ai:{
2017-01-14 08:57:14 +00:00
threaten:0.7
2015-04-29 03:25:17 +00:00
}
},
jilei2:{
unique:true,
2017-01-14 08:57:14 +00:00
intro:{
content:function(storage){
return '不能使用、打出或弃置'+get.translation(storage)+'牌';
}
},
mark:true,
onremove:function(player){
delete player.storage.jilei2;
},
2015-04-29 03:25:17 +00:00
mod:{
2017-01-14 08:57:14 +00:00
cardDiscardable:function(card,player){
if(player.storage.jilei2==get.type(card,'trick')) return false;
2015-04-29 03:25:17 +00:00
},
2017-01-14 08:57:14 +00:00
cardEnabled:function(card,player){
if(player.storage.jilei2==get.type(card,'trick')) return false;
2015-04-29 03:25:17 +00:00
},
2017-01-14 08:57:14 +00:00
cardUsable:function(card,player){
if(player.storage.jilei2==get.type(card,'trick')) return false;
},
cardRespondable:function(card,player){
if(player.storage.jilei2==get.type(card,'trick')) return false;
},
cardSavable:function(card,player){
if(player.storage.jilei2==get.type(card,'trick')) return false;
2015-04-29 03:25:17 +00:00
},
},
},
danlao:{
2015-09-03 03:49:14 +00:00
priority:9,
2015-11-01 07:54:42 +00:00
audio:2,
2015-09-03 03:49:14 +00:00
filter:function(event,player){
return event.player!=player&&get.type(event.card)=='trick'&&event.targets&&event.targets.length>1;
},
check:function(event,player){
return get.tag(event.card,'multineg')||ai.get.effect(player,event.card,event.player,player)<=0;
},
trigger:{target:'useCardToBefore'},
content:function(){
trigger.untrigger();
trigger.finish();
player.draw();
},
ai:{
effect:{
target:function(card){
if(get.type(card)!='trick') return;
if(card.name=='tiesuo') return [0,0];
if(card.name=='yihuajiemu') return [0,1];
if(get.tag(card,'multineg')) return [0,2];
}
}
}
2015-04-29 03:25:17 +00:00
},
taichen:{
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player.canUse('sha',target);
},
content:function(){
"step 0"
player.loseHp();
"step 1"
player.useCard({name:'sha'},target,false);
},
ai:{
order:1,
result:{
target:function(player,target){
if(player.hp>2&&player.hp>target.hp&&target.num('he')<4){
return ai.get.effect(target,{name:'sha'},player,target);
}
return 0;
}
}
}
},
manjuan:{
2015-11-01 07:54:42 +00:00
audio:true,
2015-04-29 03:25:17 +00:00
trigger:{global:'discardAfter'},
filter:function(event,player){
if(event.player==player) return false;
if(!player.num('he')) return false;
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])=='d'){
return true;
}
}
return false;
},
direct:true,
2016-07-29 17:25:53 +00:00
unique:true,
gainable:true,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
var cards=[];
var suits=['club','spade','heart','diamond']
for(var i=0;i<trigger.cards.length;i++){
if(get.position(trigger.cards[i])=='d'){
cards.push(trigger.cards[i]);
suits.remove(get.suit(trigger.cards[i]));
}
}
if(cards.length){
var maxval=0;
for(var i=0;i<cards.length;i++){
var tempval=ai.get.value(cards[i]);
if(tempval>maxval){
maxval=tempval;
}
}
maxval+=cards.length-1;
2016-04-25 07:59:31 +00:00
var next=player.chooseToDiscard('he',{suit:suits});
next.set('ai',function(card){
return _status.event.maxval-ai.get.value(card);
});
next.set('maxval',maxval);
2016-09-20 05:06:35 +00:00
next.set('dialog',[get.prompt(event.name),'hidden',cards])
2015-12-06 15:23:47 +00:00
next.logSkill=event.name;
2015-04-29 03:25:17 +00:00
event.cards=cards;
}
"step 2"
if(result.bool){
2015-12-08 13:54:44 +00:00
game.log(player,'获得了',event.cards);
2015-04-29 03:25:17 +00:00
player.gain(event.cards,'gain2');
}
},
ai:{
threaten:1.3
}
},
zuixiang:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-11-01 07:54:42 +00:00
audio:true,
2015-04-29 03:25:17 +00:00
unique:true,
mark:true,
trigger:{player:'phaseBegin'},
priority:10,
filter:function(event,player){
if(player.storage.zuixiang) return false;
return true;
},
check:function(event,player){
return player.num('h')<player.hp&&player.hp==player.maxHp;
},
content:function(){
"step 0"
player.storage.zuixiang=get.cards(3);
player.showCards(player.storage.zuixiang);
2017-01-26 04:16:59 +00:00
player.markSkill('zuixiang');
2016-04-25 07:59:31 +00:00
player.syncStorage('zuixiang');
2015-04-29 03:25:17 +00:00
"step 1"
var cards=player.storage.zuixiang;
if(cards[0].number==cards[1].number||
cards[0].number==cards[2].number||
cards[2].number==cards[1].number){
player.gain(player.storage.zuixiang,'draw2');
player.storage.zuixiang=[];
2017-01-26 04:16:59 +00:00
player.awakenSkill('zuixiang');
2015-04-29 03:25:17 +00:00
delete player.storage.zuixiang2;
}
else{
player.storage.zuixiang2=[];
for(var i=0;i<cards.length;i++){
player.storage.zuixiang2.add(get.type(cards[i],'trick'));
}
}
player.storage.zuixiangtemp=true;
},
group:'zuixiang2',
intro:{
content:'cards'
},
mod:{
targetEnabled:function(card,player,target){
if(target.storage.zuixiang2&&target.storage.zuixiang2.contains(get.type(card,'trick'))){
return false;
}
},
cardEnabled:function(card,player){
if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){
return false;
}
},
cardUsable:function(card,player){
if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){
return false;
}
},
cardRespondable:function(card,player){
if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){
return false;
}
},
cardSavable:function(card,player){
if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){
return false;
}
}
}
},
zuixiang2:{
unique:true,
trigger:{player:'phaseBegin'},
2015-11-04 01:59:00 +00:00
priority:9.5,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
if(player.storage.zuixiang&&player.storage.zuixiang.length) return true;
return false;
},
forced:true,
popup:false,
content:function(){
"step 0"
if(player.storage.zuixiangtemp){
delete player.storage.zuixiangtemp;
event.finish();
}
else{
for(var i=0;i<player.storage.zuixiang.length;i++){
ui.discardPile.appendChild(player.storage.zuixiang[i]);
}
player.storage.zuixiang=get.cards(3);
player.showCards(player.storage.zuixiang);
2016-04-25 07:59:31 +00:00
player.markSkill('zuixiang');
player.syncStorage('zuixiang');
2015-04-29 03:25:17 +00:00
}
"step 1"
var cards=player.storage.zuixiang;
if(cards[0].number==cards[1].number||
cards[0].number==cards[2].number||
cards[2].number==cards[1].number){
player.gain(player.storage.zuixiang,'draw2');
player.storage.zuixiang=[];
2017-01-26 04:16:59 +00:00
player.awakenSkill('zuixiang');
2015-04-29 03:25:17 +00:00
delete player.storage.zuixiang2;
}
else{
player.storage.zuixiang2=[];
for(var i=0;i<cards.length;i++){
player.storage.zuixiang2.add(get.type(cards[i]));
}
}
},
},
naman:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'respondEnd'},
filter:function(event,player){
if(event.card.name!='sha') return false;
if(event.player==player) return false;
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])=='d') return true;
}
}
return false;
},
frequent:true,
content:function(){
var cards=trigger.cards.slice(0);
for(var i=0;i<cards.length;i++){
if(get.position(cards[i])!='d'){
cards.splice(i--,1);
}
}
game.delay(0.5);
player.gain(cards,'gain2');
},
},
xiemu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{target:'useCardToBegin'},
filter:function(event,player){
if(get.color(event.card)!='black') return false;
if(!event.player) return false;
if(event.player==player) return false;
return player.num('h','sha')>0;
},
direct:true,
content:function(){
"step 0"
2015-11-21 05:30:26 +00:00
var next=player.chooseToDiscard('协穆:是否弃置一张杀并摸两张牌?',{name:'sha'});
2016-04-25 07:59:31 +00:00
next.set('ai',function(card){
2015-04-29 03:25:17 +00:00
return 9-ai.get.value(card);
2016-04-25 07:59:31 +00:00
});
2015-11-21 05:30:26 +00:00
next.logSkill='xiemu';
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
player.draw(2);
}
},
ai:{
effect:{
target:function(card,player,target){
if(get.color(card)=='black'&&target.num('h')>0){
return [1,0.5];
}
}
}
}
},
spmengjin:{
trigger:{player:'shaBegin'},
filter:function(event,player){
return event.target.num('he')>0;
},
direct:true,
content:function(){
"step 0"
var att=ai.get.attitude(player,trigger.target);
2016-09-20 05:06:35 +00:00
player.choosePlayerCard(get.prompt('spmengjin',trigger.target),'he',trigger.target).ai=function(button){
2015-04-29 03:25:17 +00:00
var val=ai.get.buttonValue(button);
if(att>0) return -val;
return val;
};
"step 1"
if(result.bool){
trigger.target.discard(result.links);
player.logSkill('spmengjin',trigger.target);
trigger.target.addTempSkill('mengjin2','shaAfter');
}
},
ai:{
expose:0.2
}
},
fenxun:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'shaBefore'},
direct:true,
filter:function(event,player){
return event.targets.length==1;
},
position:'he',
content:function(){
"step 0"
player.chooseCardTarget({
2017-01-13 18:51:13 +00:00
filterCard:lib.filter.cardDiscardable,
2015-04-29 03:25:17 +00:00
filterTarget:function(card,player,target){
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2015-04-29 03:25:17 +00:00
return lib.filter.targetEnabled(trigger.card,player,target)&&target!=trigger.targets[0];
},
ai1:function(card){
return 6-ai.get.value(card);
},
ai2:function(target){
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-04-19 08:56:58 +00:00
var player=_status.event.player;
2015-04-29 03:25:17 +00:00
return ai.get.effect(target,trigger.card,player,player);
},
2016-09-20 05:06:35 +00:00
prompt:get.prompt('fenxun')
2015-04-29 03:25:17 +00:00
});
"step 1"
if(result.bool){
player.discard(result.cards);
trigger.targets.push(result.targets[0]);
player.logSkill('fenxun',result.targets);
}
}
},
zhoufu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
usable:1,
filterCard:true,
filterTarget:function(card,player,target){
2016-08-12 08:26:31 +00:00
return player!=target&&!target.hasSkill('zhoufu2');
2015-06-27 16:21:25 +00:00
},
2017-01-13 16:02:19 +00:00
prepare:'throw',
2015-06-27 16:21:25 +00:00
discard:false,
2015-04-29 03:25:17 +00:00
content:function(){
target.$gain2(cards);
target.storage.zhoufu2=cards[0];
target.addSkill('zhoufu2');
target.storage.zhoufu3=player;
ui.special.appendChild(cards[0]);
2016-04-25 07:59:31 +00:00
target.syncStorage('zhoufu2');
2015-04-29 03:25:17 +00:00
},
2015-05-06 08:46:40 +00:00
check:function(card){
return 3-ai.get.value(card)
},
2015-04-29 03:25:17 +00:00
ai:{
2015-06-27 16:21:25 +00:00
expose:0.1,
2015-04-29 03:25:17 +00:00
order:1,
result:{
player:1
}
}
},
zhoufu2:{
trigger:{player:'judge'},
forced:true,
priority:10,
mark:'card',
content:function(){
"step 0"
player.$throw(player.storage.zhoufu2);
2016-04-25 07:59:31 +00:00
game.broadcastAll(function(card){
if(card.clone){
card.clone.classList.add('thrownhighlight');
}
},player.storage.zhoufu2);
if(player.judging[0].clone){
player.judging[0].clone.classList.remove('thrownhighlight');
game.broadcast(function(card){
if(card.clone){
card.clone.classList.remove('thrownhighlight');
}
},player.judging[0]);
game.addVideo('deletenode',player,get.cardsInfo([player.judging[0].clone]));
2015-06-27 16:21:25 +00:00
}
2015-12-12 08:37:15 +00:00
player.judging[0]=player.storage.zhoufu2;
2015-04-29 03:25:17 +00:00
trigger.position.appendChild(player.storage.zhoufu2);
2015-12-08 13:54:44 +00:00
game.log(player,'的判定牌改为',player.storage.zhoufu2);
2016-04-25 07:59:31 +00:00
game.delay(2);
"step 1"
if(player.storage.zhoufu3.isAlive()&&player.storage.zhoufu3.get('s').contains('yingbin')){
player.storage.zhoufu3.logSkill('yingbin');
player.storage.zhoufu3.draw(2);
}
2015-04-29 03:25:17 +00:00
player.removeSkill('zhoufu2');
delete player.storage.zhoufu2;
delete player.storage.zhoufu3;
},
intro:{
content:'card'
},
group:'zhoufu3'
},
zhoufu3:{
trigger:{player:'phaseEnd'},
forced:true,
content:function(){
2015-11-26 08:15:28 +00:00
if(player.storage.zhoufu2){
player.unmark(player.storage.zhoufu2.name);
if(player.storage.zhoufu3.isAlive()){
player.storage.zhoufu3.gain(player.storage.zhoufu2);
player.$give(player.storage.zhoufu2,player.storage.zhoufu3);
game.delay();
}
else{
ui.discardPile.appendChild(player.storage.zhoufu2);
}
2015-05-05 09:23:31 +00:00
}
player.removeSkill('zhoufu2');
delete player.storage.zhoufu2;
delete player.storage.zhoufu3;
2015-04-29 03:25:17 +00:00
},
},
2015-11-01 07:54:42 +00:00
yingbin:{
audio:2,
},
2015-04-29 03:25:17 +00:00
kuiwei:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseEnd'},
check:function(event,player){
if(player.isTurnedOver()) return true;
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].get('e','1')) num++;
}
return num>1;
},
content:function(){
"step 0"
player.turnOver();
"step 1"
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].get('e','1')) num++;
}
player.draw(2+num);
player.addSkill('kuiwei2');
},
ai:{
effect:{
target:function(card){
if(card.name=='guiyoujie') return [0,2];
}
}
}
},
kuiwei2:{
trigger:{player:'phaseDrawBegin'},
forced:true,
2015-11-25 12:34:54 +00:00
audio:false,
2015-04-29 03:25:17 +00:00
content:function(){
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].get('e','1')) num++;
}
if(num>=player.num('he')){
player.discard(player.get('he'));
}
else if(num){
2016-07-02 03:05:40 +00:00
player.chooseToDiscard('he',num,true);
2015-04-29 03:25:17 +00:00
}
player.removeSkill('kuiwei2');
}
},
yanzheng:{
enable:'chooseToUse',
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
return player.hp<player.num('h')&&player.num('e')>0;
},
viewAsFilter:function(player){
return player.hp<player.num('h')&&player.num('e')>0;
},
filterCard:true,
position:'e',
viewAs:{name:'wuxie'},
prompt:'将一张装备区内的牌当无懈可击使用',
check:function(card){return 8-ai.get.equipValue(card)},
threaten:1.2
},
tongji:{
2015-12-11 05:07:11 +00:00
global:'tongji_disable',
2015-04-29 03:25:17 +00:00
unique:true,
gainnable:true,
2015-12-11 05:07:11 +00:00
subSkill:{
disable:{
mod:{
targetEnabled:function(card,player,target){
2016-08-12 08:26:31 +00:00
if(player.hasSkill('tongji')) return;
2015-12-11 05:07:11 +00:00
if(card.name=='sha'){
2016-08-12 08:26:31 +00:00
if(target.hasSkill('tongji')) return;
2015-12-11 05:07:11 +00:00
for(var i=0;i<game.players.length;i++){
2016-08-12 08:26:31 +00:00
if(game.players[i].hasSkill('tongji')){
2015-12-11 05:07:11 +00:00
if(game.players[i].hp<game.players[i].num('h')&&
get.distance(player,game.players[i],'attack')<=1){
return false;
}
}
2015-04-29 03:25:17 +00:00
}
}
}
}
}
}
},
wangzun:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'phaseBegin'},
check:function(event,player){
var att=ai.get.attitude(player,event.player);
for(var i=0;i<game.players.length;i++){
if(ai.get.attitude(player,game.players[i])<att) return false;
}
return true;
},
filter:function(event,player){
return event.player!=player&&!player.storage.wangzun;
},
2016-08-12 12:54:55 +00:00
logTarget:'player',
2015-04-29 03:25:17 +00:00
content:function(){
player.draw();
player.markSkill('wangzun');
player.storage.wangzun=trigger.player;
trigger.player.addTempSkill('wangzun3','phaseAfter');
},
ai:{
expose:0.2
},
intro:{
content:'player'
},
group:'wangzun2'
},
wangzun2:{
trigger:{player:'phaseBegin'},
forced:true,
popup:false,
2015-09-25 00:26:16 +00:00
silent:true,
2015-04-29 03:25:17 +00:00
content:function(){
player.unmarkSkill('wangzun');
player.storage.wangzun=null;
}
},
wangzun3:{
mod:{
maxHandcard:function(player,num){
return num-1;
}
}
},
kaikang:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'shaBegin'},
filter:function(event,player){
return get.distance(player,event.target)<=1;
},
check:function(event,player){
return ai.get.attitude(player,event.target)>=0;
},
content:function(){
"step 0"
player.draw();
if(trigger.target!=player){
2016-04-25 07:59:31 +00:00
player.chooseCard(true,'he','交给'+get.translation(trigger.target)+'一张牌').set('ai',function(card){
if(get.position(card)=='e') return -1;
2015-04-29 03:25:17 +00:00
if(card.name=='shan') return 1;
2016-04-25 07:59:31 +00:00
if(get.type(card)=='equip') return 0.5;
return 0;
});
2015-04-29 03:25:17 +00:00
}
else{
event.finish();
}
"step 1"
2017-01-13 18:51:13 +00:00
trigger.target.gain(result.cards,player);
2015-04-29 03:25:17 +00:00
player.$give(result.cards,trigger.target);
game.delay();
event.card=result.cards[0];
if(get.type(event.card)!='equip') event.finish();
"step 2"
2016-01-07 09:29:44 +00:00
if(!trigger.target.isMin()){
2016-04-25 07:59:31 +00:00
trigger.target.chooseBool('是否装备'+get.translation(event.card)+'').set('ai',function(){
var current=_status.event.player.get('e',{subtype:get.subtype(_status.event.card)});
2016-01-07 09:29:44 +00:00
if(current&&current.length){
return ai.get.equipValue(event.card)>ai.get.equipValue(current[0]);
}
return true;
2016-04-25 07:59:31 +00:00
}).set('card',event.card);
2016-01-07 09:29:44 +00:00
}
else{
event.finish();
}
2015-04-29 03:25:17 +00:00
"step 3"
if(result.bool){
trigger.target.equip(event.card);
}
},
ai:{
threaten:1.1
}
},
liangzhu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'recoverAfter'},
2017-01-16 07:48:07 +00:00
direct:true,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
2017-01-16 07:48:07 +00:00
return _status.currentPhase==event.player;
2015-04-29 03:25:17 +00:00
},
content:function(){
2017-01-16 07:48:07 +00:00
'step 0'
if(player==trigger.player){
player.chooseControl('摸一张','摸两张','cancel2',function(){
return '摸两张';
}).set('prompt',get.prompt('liangzhu'));
event.single=true;
}
else{
player.chooseTarget(get.prompt('liangzhu'),function(card,player,target){
return target==_status.event.player||target==_status.event.target;
}).set('target',trigger.player).set('ai',function(target){
var player=_status.event.player;
if(player==target) return 1;
return ai.get.attitude(player,target)-1.5;
});
}
'step 1'
if(event.single){
if(result.control!='cancel2'){
player.logSkill('liangzhu',player);
if(result.control=='摸一张'){
player.draw();
}
else{
player.draw(2);
player.storage.liangzhu=player;
}
}
}
else if(result.bool){
var target=result.targets[0];
player.logSkill('liangzhu',target);
if(target==player){
target.draw();
}
else{
target.draw(2);
target.storage.liangzhu=player;
}
}
2015-04-29 03:25:17 +00:00
},
ai:{
2017-01-16 07:48:07 +00:00
expose:0.1
2015-04-29 03:25:17 +00:00
}
},
2017-01-16 07:48:07 +00:00
fanxiang:{
skillAnimation:true,
animationColor:'fire',
audio:2,
unique:true,
forceunique:true,
trigger:{player:'phaseBegin'},
filter:function(event,player){
2017-01-22 03:22:02 +00:00
if(player.storage.fanxiang) return false;
2017-01-16 07:48:07 +00:00
for(var i=0;i<game.players.length;i++){
if(game.players[i].storage.liangzhu==player&&game.players[i].isDamaged()){
return true;
}
}
return false;
},
forced:true,
content:function(){
2017-01-22 03:22:02 +00:00
player.storage.fanxiang=true;
2017-01-16 07:48:07 +00:00
player.gainMaxHp();
player.recover();
player.removeSkill('liangzhu');
player.addSkill('xiaoji');
2017-01-23 09:28:05 +00:00
player.awakenSkill('fanxiang');
2017-01-16 07:48:07 +00:00
},
},
2015-04-29 03:25:17 +00:00
mingshi:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'damageBegin'},
direct:true,
filter:function(event,player){
return event.source&&event.source.hp>player.hp;
},
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard(get.prompt('mingshi'),{color:'black'});
2016-04-19 08:56:58 +00:00
next.set('ai',function(card){
2015-04-29 03:25:17 +00:00
return 9-ai.get.value(card);
2016-04-19 08:56:58 +00:00
});
next.set('logSkill','mingshi');
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
trigger.num--;
}
},
ai:{
threaten:0.8
}
},
lirang:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'discardAfter'},
filter:function(event,player){
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])=='d'){
return true;
}
}
return false;
},
direct:true,
popup:false,
content:function(){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('lirang'),function(card,player,target){
2015-04-29 03:25:17 +00:00
return player!=target
2016-04-19 08:56:58 +00:00
}).set('ai',function(target){
2016-07-09 15:23:11 +00:00
var att=ai.get.attitude(_status.event.player,target);
if(_status.event.du) return -att;
return att;
}).set('du',(trigger.cards.length==1&&trigger.cards[0].name=='du'));
2015-04-29 03:25:17 +00:00
"step 2"
if(result.bool){
var target=result.targets[0];
player.logSkill('lirang',target);
var cards=[];
for(var i=0;i<trigger.cards.length;i++){
if(get.position(trigger.cards[i])=='d'){
cards.push(trigger.cards[i]);
}
}
target.gain(cards);
if(event.isMine()){
target.$draw(cards);
}
else{
target.$gain2(cards);
}
if(target==game.me){
game.delay();
}
}
},
ai:{
threaten:0.9,
expose:0.1
}
},
moukui:{
trigger:{player:'shaBegin'},
direct:true,
2015-12-12 08:45:43 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
var controls=['draw_card'];
if(trigger.target.num('he')){
controls.push('discard_card');
}
controls.push('cancel');
2016-04-25 07:59:31 +00:00
player.chooseControl(controls).set('ai',function(){
2016-05-07 03:12:04 +00:00
var trigger=_status.event.getTrigger();
2016-04-25 07:59:31 +00:00
if(trigger.target.num('he')&&ai.get.attitude(_status.event.player,trigger.target)<0){
2015-04-29 03:25:17 +00:00
return 'discard_card';
}
else{
return 'draw_card';
}
2016-04-25 07:59:31 +00:00
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.control=='draw_card'){
player.draw();
2016-04-25 07:59:31 +00:00
player.logSkill('moukui');
2015-04-29 03:25:17 +00:00
}
else if(result.control=='discard_card'&&trigger.target.num('he')){
2016-04-25 07:59:31 +00:00
player.discardPlayerCard(trigger.target,'he',true).logSkill=['moukui',trigger.target];
2015-04-29 03:25:17 +00:00
}
else event.finish();
"step 2"
player.addTempSkill('moukui2','shaEnd');
},
ai:{
expose:0.1
}
},
moukui2:{
2015-12-12 08:45:43 +00:00
audio:false,
2015-04-29 03:25:17 +00:00
trigger:{player:'shaMiss'},
forced:true,
filter:function(event,player){
return player.num('he')>0;
},
content:function(){
trigger.target.discardPlayerCard(player,true);
}
},
shenxian:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'discardAfter'},
filter:function(event,player){
if(event.player==player||_status.currentPhase==player) return false;
2016-08-12 08:26:31 +00:00
if(player.hasSkill('shenxian2')) return false;
2015-04-29 03:25:17 +00:00
for(var i=0;i<event.cards.length;i++){
if(get.type(event.cards[i])=='basic'){
return true;
}
}
return false;
},
frequent:true,
content:function(){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
player.draw();
2015-04-30 16:30:29 +00:00
player.addTempSkill('shenxian2','phaseAfter');
2015-04-29 03:25:17 +00:00
},
ai:{
threaten:1.5
}
},
2015-04-30 16:30:29 +00:00
shenxian2:{},
2015-04-29 03:25:17 +00:00
qiangwu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
usable:1,
content:function(){
"step 0"
player.judge();
"step 1"
player.storage.qiangwu=result.number;
},
ai:{
result:{
player:1
},
order:11
},
mod:{
targetInRange:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&card.number<player.storage.qiangwu) return true;
},
cardUsable:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&card.number>player.storage.qiangwu) return Infinity;
}
},
2016-01-24 16:07:47 +00:00
group:['qiangwu2','qiangwu3']
2015-04-29 03:25:17 +00:00
},
qiangwu2:{
trigger:{player:'phaseUseBegin'},
forced:true,
popup:false,
2016-06-25 06:30:34 +00:00
silent:true,
2015-04-29 03:25:17 +00:00
content:function(){
delete player.storage.qiangwu;
}
},
2016-01-24 16:07:47 +00:00
qiangwu3:{
trigger:{player:'useCard'},
filter:function(event,player){
if(_status.currentPhase==player&&event.card.name=='sha'&&
event.card.number>player.storage.qiangwu) return true;
return false;
},
forced:true,
popup:false,
content:function(){
if(player.stat[player.stat.length-1].card.sha>0){
player.stat[player.stat.length-1].card.sha--;
}
},
},
2015-04-29 03:25:17 +00:00
zhendu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'phaseUseBegin'},
filter:function(event,player){
return event.player!=player&&player.num('h')>0;
},
direct:true,
content:function(){
"step 0"
var nono=(Math.abs(ai.get.attitude(player,trigger.player))<3);
2016-04-19 08:56:58 +00:00
if(ai.get.damageEffect(trigger.player,player,player)<=0){
nono=true
2015-04-29 03:25:17 +00:00
}
2016-07-01 01:31:02 +00:00
else if(trigger.player.hp>2){
nono=true;
}
else if(trigger.player.hp>1&&player.num('h')<3){
nono=true;
}
else if(trigger.player.canUse('sha',player)&&!player.num('h','shan')&&trigger.player.num('h')>=3){
nono=true;
}
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard(get.prompt('zhendu',trigger.player));
2016-04-19 08:56:58 +00:00
next.set('ai',function(card){
if(_status.event.nono) return -1;
return 7-ai.get.useful(card);
});
next.set('logSkill',['zhendu',trigger.player]);
next.set('nono',nono);
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
trigger.player.damage();
}
else{
event.finish();
}
"step 2"
trigger.player.useCard({name:'jiu'},trigger.player);
},
ai:{
threaten:2,
expose:0.3
}
},
qiluan:{
trigger:{source:'dieAfter'},
forced:true,
priority:-10,
silent:true,
popup:false,
filter:function(event){
return _status.currentPhase!=event.player;
},
2015-04-29 03:25:17 +00:00
content:function(){
2016-04-19 08:56:58 +00:00
if(!player.storage.qiluan){
player.storage.qiluan=1;
}
else{
player.storage.qiluan++;
}
2015-04-29 03:25:17 +00:00
},
group:['qiluan2','qiluan3']
2015-04-29 03:25:17 +00:00
},
qiluan2:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'phaseAfter'},
forced:true,
filter:function(event,player){
return player.storage.qiluan?true:false;
},
2015-04-29 03:25:17 +00:00
content:function(){
2016-04-19 08:56:58 +00:00
player.draw(3*player.storage.qiluan);
player.storage.qiluan=0;
2015-04-29 03:25:17 +00:00
}
},
qiluan3:{
trigger:{source:'dieAfter'},
forced:true,
priority:-10,
filter:function(event){
return _status.currentPhase==event.player;
},
content:function(){
2016-04-19 08:56:58 +00:00
var num=3;
if(player.storage.qiluan){
num+=3*player.storage.qiluan;
player.storage.qiluan=0;
}
player.draw(num);
},
},
2015-04-29 03:25:17 +00:00
shangyi:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.num('h');
},
content:function(){
"step 0"
2016-04-19 08:56:58 +00:00
player.chooseCardButton(target,target.get('h')).set('filterButton',function(button){
2015-04-29 03:25:17 +00:00
return get.color(button.link)=='black';
2016-04-19 08:56:58 +00:00
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
target.discard(result.links[0]);
}
},
ai:{
order:11,
result:{
target:function(player,target){
return -target.num('h');
}
},
threaten:1.1
},
},
shengxi:{
2015-04-30 16:30:29 +00:00
trigger:{player:'phaseDiscardBegin'},
2015-04-29 03:25:17 +00:00
frequent:true,
filter:function(event,player){
return !player.getStat('damage');
},
content:function(){
player.draw(2);
2015-11-01 07:54:42 +00:00
},
2016-04-19 08:56:58 +00:00
audio:2,
audioname:['liushan']
2015-04-29 03:25:17 +00:00
},
shoucheng:{
trigger:{global:'loseEnd'},
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
check:function(event,player){
return ai.get.attitude(player,event.player)>0;
},
filter:function(event,player){
if(event.player.num('h')) return false;
if(_status.currentPhase==event.player) return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
return false;
},
content:function(){
trigger.player.draw();
2016-04-19 08:56:58 +00:00
player.line(trigger.player,'green');
2015-04-29 03:25:17 +00:00
},
ai:{
threaten:1.3,
2016-06-27 07:20:26 +00:00
expose:0.2,
noh:true,
2015-04-29 03:25:17 +00:00
}
},
hengzheng:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseDrawBefore'},
filter:function(event,player){
return player.hp==1||player.num('h')==0;
},
check:function(event,player){
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].num('he')&&game.players[i]!=player&&
ai.get.attitude(player,game.players[i])<=0){
num++;
}
if(game.players[i].num('j')&&game.players[i]!=player&&
ai.get.attitude(player,game.players[i])>0){
num+=2;
}
if(num>1) return true;
}
return false;
},
content:function(){
"step 0"
var targets=game.players.slice(0);
targets.remove(player);
targets.sort(lib.sort.seat);
event.targets=targets;
event.num=0;
trigger.untrigger();
trigger.finish();
"step 1"
if(num<event.targets.length){
if(event.targets[num].num('hej')){
player.gainPlayerCard(event.targets[num],'hej',true);
}
event.num++;
event.redo();
}
},
ai:{
threaten:function(player,target){
if(target.hp==1) return 2.5;
return 1;
},
}
},
yongjue:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'useCardEnd'},
2017-01-14 08:57:14 +00:00
usable:1,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
if(event.card.name!='sha') return false;
if(event.player==player) return false;
if(event.targets.contains(player)) return false;
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])=='d') return true;
}
}
return false;
},
frequent:true,
content:function(){
var cards=trigger.cards.slice(0);
for(var i=0;i<cards.length;i++){
if(get.position(cards[i])!='d'){
cards.splice(i--,1);
}
}
player.gain(cards,'gain2');
},
},
guixiu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{target:'shaBegin'},
frequent:true,
filter:function(event,player){
return player.num('h')<player.hp;
},
content:function(){
player.draw();
}
},
cunsi:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
unique:true,
enable:'phaseUse',
mark:true,
filter:function(event,player){
return !player.storage.cunsi&&player.num('h')&&!player.isTurnedOver();
},
init:function(player){
player.storage.cunsi=false;
},
filterTarget:function(card,player,target){
return player!=target&&target.sex=='male';
},
content:function(){
"step 0"
2017-01-23 09:28:05 +00:00
player.awakenSkill('cunsi');
2015-04-29 03:25:17 +00:00
var cards=player.get('h');
2017-01-13 18:51:13 +00:00
target.gain(cards,player);
2015-04-29 03:25:17 +00:00
player.$give(cards.length,target);
player.storage.cunsi=true;
game.delay();
target.addSkill('yongjue');
2017-01-14 08:57:14 +00:00
target.markSkillCharacter('yongjue',player,'存嗣','$<div><div class="skill">【勇决】</div><div>每当其他角色于回合内使用一张杀,若目标不是你,你可以获得之,每回合限一次</div></div>');
2015-04-29 03:25:17 +00:00
"step 1"
player.turnOver();
},
intro:{
content:'limited'
},
ai:{
order:4,
result:{
target:function(player,target){
2015-05-05 14:57:35 +00:00
if(target.isMin()) return 0;
2015-04-29 03:25:17 +00:00
if(player.hp>1){
if(game.phaseNumber<game.players.length) return 0;
if(target.hp==1&&target.maxHp>2) return 0;
if(ai.get.attitude(player,target)<5) return 0;
}
if(ai.get.attitude(player,target)<5) return 0;
if(target.hp==1&&target.maxHp>2) return 0.2;
if(target==game.me) return 1.2;
return 1;
}
},
expose:0.5,
threaten:1.5
}
},
fenming:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseEnd'},
check:function(event,player){
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].isLinked()&&game.players[i].num('he')){
num+=ai.get.attitude(player,game.players[i]);
}
}
return num<0;
},
filter:function(event,player){
return player.isLinked();
},
content:function(){
"step 0"
event.targets=[];
for(var i=0;i<game.players.length;i++){
if(game.players[i].isLinked()&&game.players[i].num('he')){
event.targets.push(game.players[i]);
}
}
event.num=0;
event.targets.sort(lib.sort.seat);
"step 1"
if(event.num<event.targets.length){
var target=event.targets[event.num];
if(player==target){
player.chooseToDiscard(true,'he');
}
else{
player.discardPlayerCard(true,'he',target);
}
event.num++;
event.redo();
}
}
},
duanxie:{
enable:'phaseUse',
usable:1,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
filterTarget:function(card,player,target){
return player!=target&&!target.isLinked();
},
content:function(){
"step 0"
if(!target.isLinked()) target.link();
"step 1"
if(!player.isLinked()) player.link();
},
ai:{
result:{
target:-1,
player:function(player){
return player.isLinked()?0:-0.8;
}
},
order:2,
expose:0.3,
effect:{
target:function(card){
if(card.name=='tiesuo'){
return 0.5;
}
}
}
}
},
xiaoguo:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'phaseEnd'},
check:function(event,player){
return ai.get.damageEffect(event.player,player,player)>0;
},
filter:function(event,player){
2016-04-19 08:56:58 +00:00
return event.player.isAlive()&&event.player!=player&&player.num('h',{type:'basic'});
2015-04-29 03:25:17 +00:00
},
direct:true,
content:function(){
"step 0"
var nono=(Math.abs(ai.get.attitude(player,trigger.player))<3);
2016-04-19 08:56:58 +00:00
if(ai.get.damageEffect(trigger.player,player,player)<=0){
nono=true;
2015-04-29 03:25:17 +00:00
}
2016-09-20 05:06:35 +00:00
var next=player.chooseToDiscard(get.prompt('xiaoguo',trigger.player),{type:'basic'});
2016-04-19 08:56:58 +00:00
next.set('ai',function(card){
if(_status.event.nono) return 0;
return 8-ai.get.useful(card);
});
next.set('logSkill',['xiaoguo',trigger.player]);
next.set('nono',nono);
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2015-09-03 03:49:14 +00:00
var nono=(ai.get.damageEffect(trigger.player,player,trigger.player)>=0);
2016-04-19 08:56:58 +00:00
trigger.player.chooseToDiscard('he',{type:'equip'}).set('ai',function(card){
if(_status.event.nono){
2015-09-03 03:49:14 +00:00
return 0;
}
2016-04-19 08:56:58 +00:00
if(_status.event.player.hp==1) return 10-ai.get.value(card);
2015-04-29 03:25:17 +00:00
return 9-ai.get.value(card);
2016-04-19 08:56:58 +00:00
}).set('nono',nono);
2015-04-29 03:25:17 +00:00
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.draw();
}
else{
trigger.player.damage();
}
},
ai:{
expose:0.3,
threaten:1.3
}
},
suishi:{
trigger:{global:'dying'},
forced:true,
2016-01-24 08:34:21 +00:00
popup:false,
2015-04-29 03:25:17 +00:00
priority:6,
2016-04-19 08:56:58 +00:00
check:function(){
return false;
},
2015-04-29 03:25:17 +00:00
filter:function(event,player){
2016-01-24 08:34:21 +00:00
return event.player!=player&&event.parent.name=='damage'&&event.parent.source&&event.parent.source!=event.player;
2015-04-29 03:25:17 +00:00
},
content:function(){
2016-01-24 08:34:21 +00:00
'step 0'
var str;
if(trigger.parent.source==player){
str='随势:是否摸一张牌?';
}
else{
str='随势:是否令'+get.translation(player)+'摸一张牌?'
}
2016-04-19 08:56:58 +00:00
trigger.parent.source.chooseBool(str).set('ai',function(){
return ai.get.attitude(_status.event.player,_status.event.target)>0;
}).set('target',player);
2016-01-24 08:34:21 +00:00
'step 1'
if(result.bool){
player.logSkill('suishi');
trigger.parent.source.line(player,'green');
player.draw();
}
2015-04-29 03:25:17 +00:00
},
group:'suishi2'
},
suishi2:{
trigger:{global:'dieAfter'},
forced:true,
2016-01-24 08:34:21 +00:00
popup:false,
2015-04-29 03:25:17 +00:00
check:function(){
return false;
},
filter:function(event,player){
2016-01-24 08:34:21 +00:00
return event.player!=player&&event.source&&event.source!=player&&event.source!=event.player;
2015-04-29 03:25:17 +00:00
},
content:function(){
2016-01-24 08:34:21 +00:00
'step 0'
var str;
if(trigger.source==player){
str='随势:是否流失一点体力?';
}
else{
str='随势:是否令'+get.translation(player)+'流失一点体力?'
}
2016-04-19 08:56:58 +00:00
trigger.source.chooseBool(str).set('ai',function(){
return ai.get.attitude(_status.event.player,_status.event.target)<0;
}).set('target',player);
2016-01-24 08:34:21 +00:00
'step 1'
if(result.bool){
player.logSkill('suishi');
trigger.source.line(player,'green');
player.loseHp();
}
2015-04-29 03:25:17 +00:00
},
},
sijian:{
trigger:{player:'loseEnd'},
direct:true,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
if(player.num('h')) return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
return false;
},
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('sijian'),function(card,player,target){
2015-04-29 03:25:17 +00:00
return player!=target&&target.num('he')>0;
2016-04-19 08:56:58 +00:00
}).set('ai',function(target){
return -ai.get.attitude(_status.event.player,target);
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2016-04-19 08:56:58 +00:00
player.logSkill('sijian',result.targets);
2015-04-29 03:25:17 +00:00
event.target=result.targets[0];
player.discardPlayerCard(event.target,true);
}
else{
event.finish();
}
},
ai:{
expose:0.2,
}
},
quji:{
enable:'phaseUse',
usable:1,
position:'he',
filterCard:true,
selectCard:function(){
var player=_status.event.player;
var num=0;
for(var i=0;i<game.players.length;i++){
if(game.players[i].hp<game.players[i].maxHp){
num++;
}
}
return [1,Math.min(num,player.maxHp-player.hp)];
},
filterTarget:function(card,player,target){
return target.hp<target.maxHp;
},
filter:function(event,player){
return player.hp<player.maxHp;
},
selectTarget:function(){
return ui.selected.cards.length;
},
check:function(card){
if(get.color(card)=='black') return -1;
return 9-ai.get.value(card);
},
content:function(){
"step 0"
target.recover();
"step 1"
if(target==player){
for(var i=0;i<cards.length;i++){
if(get.color(cards[i])=='black'){
player.loseHp();
break;
}
}
}
},
ai:{
result:{
target:1
},
order:6
}
},
junbing2:{
2015-12-20 07:54:32 +00:00
trigger:{player:'phaseEnd'},
2015-04-29 03:25:17 +00:00
filter:function(event,player){
2016-07-17 03:28:46 +00:00
if(player.num('h')>1) return false;
2015-04-29 03:25:17 +00:00
for(var i=0;i<game.players.length;i++){
2016-08-12 08:26:31 +00:00
if(game.players[i].hasSkill('junbing')){
2015-04-29 03:25:17 +00:00
return true;
}
}
return false;
},
check:function(event,player){
for(var i=0;i<game.players.length;i++){
2016-08-12 08:26:31 +00:00
if(game.players[i].hasSkill('junbing')){
2015-04-29 03:25:17 +00:00
var num=game.players[i].num('h');
var att=ai.get.attitude(player,game.players[i]);
if(num==0) return true;
if(num==1) return att>-1;
if(num==2) return att>0;
return att>1;
}
}
return false;
},
content:function(){
"step 0"
player.draw();
2016-07-17 03:28:46 +00:00
if(player.hasSkill('junbing')){
event.finish();
}
else{
for(var i=0;i<game.players.length;i++){
2016-08-12 08:26:31 +00:00
if(game.players[i].hasSkill('junbing')){
2016-07-17 03:28:46 +00:00
event.target=game.players[i];break;
}
2015-04-29 03:25:17 +00:00
}
}
"step 1"
var cards=player.get('h');
2017-01-13 18:51:13 +00:00
target.gain(cards,player);
2015-04-29 03:25:17 +00:00
event.num=cards.length;
player.$give(event.num,target);
game.delay();
"step 2"
target.chooseCard('选择还给'+get.translation(player)+'的牌',true,event.num);
2016-04-25 07:59:31 +00:00
game.delay(0.2);
2015-04-29 03:25:17 +00:00
"step 3"
2017-01-13 18:51:13 +00:00
player.gain(result.cards,target);
2015-04-29 03:25:17 +00:00
target.$give(result.cards.length,player);
game.delay();
}
},
junbing:{
global:'junbing2',
2016-07-17 03:28:46 +00:00
unique:true,
forceunique:true
2015-04-29 03:25:17 +00:00
},
xiongyi:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-04-29 03:25:17 +00:00
unique:true,
enable:'phaseUse',
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
mark:true,
filter:function(event,player){
return !player.storage.xiongyi;
},
init:function(player){
player.storage.xiongyi=false;
},
filterTarget:function(card,player,target){
2016-04-19 08:56:58 +00:00
if(get.mode()=='guozhan'){
if(player.identity=='unknown'||player.identity=='ye') return player==target;
return player.identity==target.identity;
}
else{
return true;
2015-04-29 03:25:17 +00:00
}
},
multitarget:true,
multiline:true,
2016-04-19 08:56:58 +00:00
selectTarget:function(){
if(get.mode()=='guozhan') return -1;
return [1,3];
},
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
player.storage.xiongyi=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('xiongyi');
2016-04-19 08:56:58 +00:00
game.asyncDraw(targets,3);
2015-04-29 03:25:17 +00:00
"step 1"
2016-04-19 08:56:58 +00:00
if(targets.length<=2){
2015-04-29 03:25:17 +00:00
player.recover();
}
},
intro:{
content:'limited'
},
ai:{
order:1,
result:{
2016-04-19 08:56:58 +00:00
target:function(player){
2015-04-29 03:25:17 +00:00
var num=player.num('h');
if(player.hp==1) return 1;
2017-01-28 12:29:36 +00:00
if(player.hp==2&&num<=2) return 1;
if(player.hp==3&&num<=1) return 1;
2016-04-19 08:56:58 +00:00
if(game.phaseNumber<game.players.length*2) return 0;
2017-01-28 12:29:36 +00:00
if(player.hasUnknown()) return 0;
2015-04-29 03:25:17 +00:00
return 1;
},
}
}
},
shushen:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'recoverAfter'},
direct:true,
content:function(){
"step 0"
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('shushen'),function(card,player,target){
2015-04-29 03:25:17 +00:00
return target!=player;
2016-04-19 08:56:58 +00:00
}).set('ai',function(target){
return ai.get.attitude(_status.event.player,target);
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2016-04-19 08:56:58 +00:00
player.logSkill('shushen',result.targets);
2015-04-29 03:25:17 +00:00
event.target=result.targets[0];
if(event.target.hp==event.target.maxHp){
event.target.draw(2);
event.finish();
}
else{
event.target.chooseControl('draw_card','recover_hp',function(event,target){
if(target.hp>=2||target.hp>=target.maxHp-1) return 'draw_card';
if(target.hp==2&&target.num('h')==0) return 'draw_card';
return 'recover_hp';
});
}
}
else{
event.finish();
}
"step 2"
if(result.control=='draw_card'){
target.draw(2);
}
else{
target.recover();
}
},
ai:{
threaten:0.8,
2015-04-29 03:25:17 +00:00
expose:0.1
}
},
shenzhi:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseBegin'},
check:function(event,player){
if(player.hp>2) return false;
var cards=player.get('h');
if(cards.length<player.hp) return false;
if(cards.length>3) return false;
for(var i=0;i<cards.length;i++){
if(ai.get.value(cards[i])>7||get.tag(cards[i],'recover')>=1) return false;
}
return true;
},
2015-08-15 09:10:06 +00:00
filter:function(event,player){
return player.num('h')>0;
},
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
var cards=player.get('h');
event.bool=cards.length>=player.hp;
player.discard(cards);
"step 1"
if(event.bool){
player.recover();
}
}
},
wuji:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseEnd'},
forced:true,
filter:function(event,player){
2017-01-23 09:28:05 +00:00
return player.getStat('damage')>=3&&!player.storage.wuji;
2015-04-29 03:25:17 +00:00
},
content:function(){
"step 0"
player.removeSkill('huxiao');
player.gainMaxHp();
"step 1"
player.recover();
2017-01-23 09:28:05 +00:00
player.awakenSkill('wuji');
player.storage.wuji=true;
2015-04-29 03:25:17 +00:00
}
},
xueji:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.hp<player.maxHp&&player.num('he',{color:'red'})>0;
},
filterTarget:function(card,player,target){
return player!=target&&get.distance(player,target,'attack')<=1;
},
selectTarget:function(){
return [1,_status.event.player.maxHp-_status.event.player.hp];
},
position:'he',
filterCard:function(card){
return get.color(card)=='red';
},
check:function(card){
return 8-ai.get.useful(card);
},
content:function(){
"step 0"
target.damage();
"step 1"
target.draw();
},
ai:{
order:7,
result:{
target:function(player,target){
return ai.get.damageEffect(target,player);
}
},
threaten:function(player,target){
if(target.hp==1) return 2;
if(target.hp==2) return 1.5;
return 0.5;
},
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
2015-10-08 06:16:37 +00:00
if(target.hp==target.maxHp&&target.hasFriend()) return [0,1];
2015-04-29 03:25:17 +00:00
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
huxiao:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'shaMiss'},
forced:true,
content:function(){
player.storage.huxiao++;
},
check:function(event,player){
return player.num('h','sha')>0;
},
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.storage.huxiao;
}
},
group:'huxiao2'
},
huxiao2:{
trigger:{player:'phaseUseBegin'},
forced:true,
popup:false,
silent:true,
content:function(){
player.storage.huxiao=0;
},
},
aocai:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'chooseToRespondBegin'},
frequent:true,
filter:function(event,player){
if(event.responded) return false;
return _status.currentPhase!==player;
},
content:function(){
"step 0"
var cards=[];
if(ui.cardPile.childNodes.length<2){
var discardcards=get.cards(2);
for(var i=0;i<discardcards.length;i++){
ui.discardPile.appendChild(discardcards[i]);
}
}
for(var i=0;i<2;i++){
cards.push(ui.cardPile.childNodes[i]);
}
2016-04-25 07:59:31 +00:00
player.chooseCardButton('傲才:选择一张卡牌打出',cards).set('filterButton',function(button){
2016-05-07 03:12:04 +00:00
return get.type(button.link)=='basic'&&_status.event.getTrigger().filterCard(button.link);
2016-04-25 07:59:31 +00:00
});
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2015-12-08 13:54:44 +00:00
game.log(player,'傲才发动成功');
2015-04-29 03:25:17 +00:00
trigger.untrigger();
trigger.responded=true;
2016-04-25 07:59:31 +00:00
result.links[0].remove();
trigger.result={bool:true,card:result.links[0]}
2015-04-29 03:25:17 +00:00
}
},
ai:{
effect:{
target:function(card,player,target,effect){
if(get.tag(card,'respondShan')) return 0.7;
if(get.tag(card,'respondSha')) return 0.7;
}
}
},
group:'aocai2',
},
aocai2:{
enable:'chooseToUse',
filter:function(event,player){
2016-04-02 08:05:24 +00:00
return _status.currentPhase!==player&&event.type!='wuxie'&&event.getParent().name!='_chenhuodajie';
2015-04-29 03:25:17 +00:00
},
2016-04-25 07:59:31 +00:00
onChooseToUse:function(event){
if(!game.online){
var cards=[];
if(ui.cardPile.childNodes.length<2){
var discardcards=get.cards(2);
for(var i=0;i<discardcards.length;i++){
ui.discardPile.appendChild(discardcards[i]);
}
2015-04-29 03:25:17 +00:00
}
2016-04-25 07:59:31 +00:00
for(var i=0;i<2;i++){
cards.push(ui.cardPile.childNodes[i]);
2015-04-29 03:25:17 +00:00
}
2016-04-25 07:59:31 +00:00
event.set('aocaicards',cards);
2015-04-29 03:25:17 +00:00
}
2016-04-25 07:59:31 +00:00
},
chooseButton:{
dialog:function(event,player){
return ui.create.dialog('傲才:选择一张卡牌使用',event.aocaicards);
},
filter:function(button,player){
var evt=_status.event.getParent();
if(evt&&evt.filterCard){
return get.type(button.link)=='basic'&&evt.filterCard(button.link,player,evt);
}
return false;
},
check:function(button){
return 1;
},
backup:function(links,player){
return {
filterCard:function(){return false},
selectCard:-1,
viewAs:links[0],
}
},
prompt:function(links,player){
return '选择'+get.translation(links)+'的目标';
2015-04-29 03:25:17 +00:00
}
},
ai:{
order:11,
save:true,
result:{
player:function(player){
if(player.tempSkills.aocai4) return 0;
2015-04-29 03:25:17 +00:00
if(_status.dying) return ai.get.attitude(player,_status.dying);
return 1;
}
}
}
},
hongyuan:{
trigger:{player:'phaseDrawBegin'},
direct:true,
2015-11-28 08:29:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
var check;
if(player.num('h')==0){
check=false;
}
else{
var i,num=0;
for(i=0;i<game.players.length;i++){
if(player!=game.players[i]){
if(ai.get.attitude(player,game.players[i])>1){
num++;
}
}
}
check=(num>=2);
}
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('hongyuan'),[1,2],function(card,player,target){
2015-04-29 03:25:17 +00:00
return player!=target;
},
function(target){
2016-04-25 07:59:31 +00:00
if(!_status.event.check) return 0;
2015-04-29 03:25:17 +00:00
return ai.get.attitude(_status.event.player,target);
2016-04-25 07:59:31 +00:00
}).set('check',check);
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
player.logSkill('hongyuan',result.targets);
// for(var i=0;i<result.targets.length;i++){
// result.targets[i].draw();
// }
game.asyncDraw(result.targets);
trigger.num--;
}
},
},
huanshi:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'judge'},
filter:function(event,player){
return player.num('he')>0;
},
check:function(event,player){
if(ai.get.attitude(player,event.player)<=0) return false;
var cards=player.get('he');
2015-12-12 08:37:15 +00:00
var judge=event.judge(event.player.judging[0]);
2015-04-29 03:25:17 +00:00
for(var i=0;i<cards.length;i++){
var judge2=event.judge(cards[i]);
if(_status.currentPhase!=player&&judge2==judge&&get.color(cards[i])=='red'&&ai.get.useful(cards[i])<5) return true;
if(judge2>judge) return true;
}
return false;
},
content:function(){
"step 0"
var target=trigger.player;
2016-06-17 15:44:19 +00:00
player.line(target,'green');
2015-12-12 08:37:15 +00:00
var judge=trigger.judge(target.judging[0]);
2015-04-29 03:25:17 +00:00
var attitude=ai.get.attitude(target,player);
2016-04-25 07:59:31 +00:00
target.choosePlayerCard('请选择代替判定的牌','he','visible',true,player).set('ai',function(button){
2015-04-29 03:25:17 +00:00
var card=button.link;
2016-04-25 07:59:31 +00:00
var judge=_status.event.judge;
var attitude=_status.event.attitude;
2015-04-29 03:25:17 +00:00
var result=trigger.judge(card)-judge;
2016-04-25 07:59:31 +00:00
var player=_status.event.player;
2015-04-29 03:25:17 +00:00
if(result>0){
return 20+result;
}
if(result==0){
if(_status.currentPhase==player) return 0;
if(attitude>=0){
return get.color(card)=='red'?7:0-ai.get.value(card);
}
else{
return get.color(card)=='black'?10:0+ai.get.value(card);
}
}
if(attitude>=0){
return get.color(card)=='red'?0:-10+result;
}
else{
return get.color(card)=='black'?0:-10+result;
}
2016-04-25 07:59:31 +00:00
}).set('judge',judge).set('attitude',attitude);
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2016-04-30 01:51:01 +00:00
event.card=result.links[0];
2015-11-06 10:05:08 +00:00
player.respond(event.card,'highlight');
2015-04-29 03:25:17 +00:00
}
else{
event.finish();
}
"step 2"
if(result.bool){
2015-12-12 08:37:15 +00:00
if(trigger.player.judging[0].clone){
2016-04-25 07:59:31 +00:00
trigger.player.judging[0].clone.classList.remove('thrownhighlight');
game.broadcast(function(card){
if(card.clone){
card.clone.classList.remove('thrownhighlight');
}
},trigger.player.judging[0]);
game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
2015-11-04 01:59:00 +00:00
}
2015-12-12 08:37:15 +00:00
ui.discardPile.appendChild(trigger.player.judging[0]);
trigger.player.judging[0]=event.card;
2016-06-17 15:44:19 +00:00
if(!get.owner(event.card,'judge')){
2016-04-25 07:59:31 +00:00
trigger.position.appendChild(event.card);
}
game.log(trigger.player,'的判定牌改为',event.card);
2015-04-29 03:25:17 +00:00
game.delay(2);
}
},
ai:{
tag:{
rejudge:1,
}
}
},
mingzhe:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:['useCardAfter','respondAfter','discardAfter']},
frequent:true,
filter:function(event,player){
if(player==_status.currentPhase) return false;
if(event.cards){
for(var i=0;i<event.cards.length;i++){
if(get.color(event.cards[i])=='red'&&
event.cards[i].original!='j') return true;
2015-04-29 03:25:17 +00:00
}
}
return false;
},
content:function(){
player.draw();
},
ai:{
threaten:0.7
}
},
duwu:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
filter:function(event,player){
2016-08-12 08:26:31 +00:00
return player.hasSkill('duwu2')==false;
2015-04-29 03:25:17 +00:00
},
2016-04-25 07:59:31 +00:00
filterCard:function(){
if(ui.selected.targets.length) return false;
return true;
},
2015-04-29 03:25:17 +00:00
position:'he',
selectCard:[1,Infinity],
2016-04-25 07:59:31 +00:00
complexSelect:true,
2015-04-29 03:25:17 +00:00
filterTarget:function(card,player,target){
2016-06-25 16:38:59 +00:00
return target!=player&&get.distance(player,target,'attack')<=1&&ui.selected.cards.length==target.hp;
2015-04-29 03:25:17 +00:00
},
check:function(card){
switch(ui.selected.cards.length){
case 0:return 7-ai.get.value(card);
case 1:return 6-ai.get.value(card);
case 2:return 3-ai.get.value(card);
default:return 0;
}
},
content:function(){
"step 0"
target.damage();
if(target.hp>1){
event.finish();
}
"step 1"
player.addSkill('duwu2');
player.loseHp();
},
ai:{
order:2,
result:{
target:function(player,target){
return ai.get.damageEffect(target,player);
}
},
threaten:1.5,
expose:0.3
}
},
duwu2:{
trigger:{player:'phaseBegin'},
forced:true,
popup:false,
2015-11-25 12:34:54 +00:00
audio:false,
2015-04-29 03:25:17 +00:00
content:function(){
player.removeSkill('duwu2');
}
},
yicong:{
mod:{
globalFrom:function(from,to,current){
if(from.hp>2) return current-1;
},
globalTo:function(from,to,current){
if(to.hp<=2) return current+1;
},
},
ai:{
threaten:0.8
}
},
yongsi:{
group:['yongsi1','yongsi2'],
ai:{
threaten:2.2
}
},
yongsi1:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseDrawBegin'},
forced:true,
content:function(){
var list=['wei','shu','wu','qun'],num=0;
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
trigger.num+=num;
}
},
yongsi2:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseDiscardBegin'},
forced:true,
content:function(){
var list=['wei','shu','wu','qun'],num=0;
for(var i=0;i<game.players.length&&list.length;i++){
if(list.contains(game.players[i].group)){
list.remove(game.players[i].group);
num++;
}
}
player.chooseToDiscard(num,'he',true);
}
},
bifa:{
trigger:{player:'phaseEnd'},
direct:true,
2015-11-01 07:54:42 +00:00
audio:2,
2015-05-06 08:46:40 +00:00
filter:function(event,player){
return player.num('h')>0;
},
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
for(var i=0;i<game.players.length;i++){
if(game.players[i].storage.bifa){
game.players[i].addSkill('bifa2');
}
}
player.chooseCardTarget({
filterCard:true,
filterTarget:function(card,player,target){
return player!=target&&!target.storage.bifa;
},
ai1:function(card){
2015-11-12 01:12:03 +00:00
return 7-ai.get.value(card);
2015-04-29 03:25:17 +00:00
},
ai2:function(target){
var num=target.hasSkillTag('maixie')?2:0;
return -ai.get.attitude(_status.event.player,target)-num;
},
2016-09-20 05:06:35 +00:00
prompt:get.prompt('bifa')
2015-04-29 03:25:17 +00:00
});
"step 1"
if(result.bool){
player.logSkill('bifa',result.targets[0]);
result.targets[0].addSkill('bifa2');
result.targets[0].storage.bifa=[result.cards[0],player];
player.lose(result.cards[0],result.targets[0].node.special);
player.$give(1,result.targets[0]);
}
},
ai:{
threaten:1.7,
expose:0.3
}
},
bifa2:{
trigger:{player:'phaseBegin'},
forced:true,
mark:true,
2015-11-25 12:34:54 +00:00
audio:false,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
2016-05-09 07:10:32 +00:00
if(player.storage.bifa[1].isAlive()&&player.num('h')){
2015-04-29 03:25:17 +00:00
player.chooseCard(get.translation(player.storage.bifa[1])+
'的笔伐牌为'+get.translation(player.storage.bifa[0]),function(card){
2016-04-22 06:59:46 +00:00
return get.type(card,'trick')==_status.event.type;
}).set('ai',function(card){
2015-04-29 03:25:17 +00:00
return 8-ai.get.value(card);
2016-04-22 06:59:46 +00:00
}).set('type',get.type(player.storage.bifa[0],'trick'));
2015-04-29 03:25:17 +00:00
}
else{
event.directfalse=true;
}
"step 1"
if(result.bool&&!event.directfalse){
2017-01-13 18:51:13 +00:00
player.storage.bifa[1].gain(result.cards,player);
2015-04-29 03:25:17 +00:00
player.$give(result.cards,player.storage.bifa[1]);
player.gain(player.storage.bifa[0],'draw2');
2017-01-16 07:48:07 +00:00
game.log(player,'获得了',player.storage.bifa[0]);
2015-04-29 03:25:17 +00:00
}
else{
ui.discardPile.appendChild(player.storage.bifa[0]);
2015-12-08 13:54:44 +00:00
game.log(player.storage.bifa[0],'进入弃牌堆');
2016-05-09 07:10:32 +00:00
player.$throw(player.storage.bifa[0],1000);
2015-04-29 03:25:17 +00:00
player.loseHp();
}
player.removeSkill('bifa2');
delete player.storage.bifa;
},
intro:{
name:'笔伐',
content:'已成为笔伐目标'
}
},
songci:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
filter:function(){
for(var i=0;i<game.players.length;i++){
if(!game.players[i].storage.songci) return true;
}
return false;
},
init:function(player){
player.storage.songci=false;
},
filterTarget:function(card,player,target){
2015-10-20 17:44:00 +00:00
return (!target.storage.songci&&target.num('h')!=target.hp);
2015-04-29 03:25:17 +00:00
},
content:function(){
if(target.num('h')>target.hp){
target.chooseToDiscard(2,'he',true);
}
else{
target.draw(2);
}
target.storage.songci=true;
2016-04-19 10:48:55 +00:00
target.markSkill('songci');
},
intro:{
content:'已发动'
2015-04-29 03:25:17 +00:00
},
ai:{
order:7,
threaten:1.5,
2015-11-09 03:15:16 +00:00
expose:0.2,
2015-04-29 03:25:17 +00:00
result:{
target:function(player,target){
if(target.num('h')<target.hp){
2015-12-01 05:46:28 +00:00
if(target.num('h')<=2) return 1;
2015-04-29 03:25:17 +00:00
}
else if(target.num('h')>target.hp){
if(target.num('h')<=3) return -1;
}
}
}
}
},
baobian:{
trigger:{player:['phaseBefore','changeHp']},
forced:true,
popup:false,
unique:true,
content:function(){
if(!player.storage.baobian){
player.storage.baobian=[];
2016-08-12 08:26:31 +00:00
if(player.hasSkill('tiaoxin')){
2015-04-29 03:25:17 +00:00
player.storage.baobian.push('tiaoxin');
}
2016-08-12 08:26:31 +00:00
if(player.hasSkill('paoxiao')){
2015-04-29 03:25:17 +00:00
player.storage.baobian.push('paoxiao');
}
2017-01-23 09:28:05 +00:00
if(player.hasSkill('xinshensu')){
player.storage.baobian.push('xinshensu');
2015-04-29 03:25:17 +00:00
}
}
if(player.storage.baobian.contains('tiaoxin')==false){
player.removeSkill('tiaoxin');
}
if(player.storage.baobian.contains('paoxiao')==false){
player.removeSkill('paoxiao');
}
2017-01-23 09:28:05 +00:00
if(player.storage.baobian.contains('xinshensu')==false){
player.removeSkill('xinshensu');
2015-04-29 03:25:17 +00:00
}
if(player.hp<=3){
player.addSkill('tiaoxin');
}
if(player.hp<=2){
player.addSkill('paoxiao');
}
if(player.hp==1){
2017-01-23 09:28:05 +00:00
player.addSkill('xinshensu');
2015-04-29 03:25:17 +00:00
}
},
ai:{
maixie:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
2015-05-05 14:57:35 +00:00
if(!target.hasFriend()) return;
2015-04-29 03:25:17 +00:00
if(target.hp>=4) return [0,1];
}
if(get.tag(card,'recover')&&player.hp>=player.maxHp-1) return [0,0];
}
}
}
},
chongzhen:{
group:['chongzhen1','chongzhen2'],
ai:{
mingzhi:false,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')||get.tag(card,'respondSha')){
if(ai.get.attitude(target,player)<=0){
if(current>0) return;
if(target.num('h')==0) return 1.6;
if(target.num('h')==1) return 1.2;
2015-11-21 05:30:26 +00:00
if(target.num('h')==2) return [0.8,0.2,0,-0.2];
2015-04-29 03:25:17 +00:00
return [0.4,0.7,0,-0.7];
}
}
},
},
}
},
chongzhen1:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'shaBefore'},
filter:function(event,player){
2015-12-11 05:07:11 +00:00
if(event.skill!='longdan_sha') return false;
2015-04-29 03:25:17 +00:00
return event.target.num('h')>0;
},
content:function(){
2017-01-13 18:51:13 +00:00
player.gain(trigger.target.get('h').randomGet(),trigger.target);
2015-04-29 03:25:17 +00:00
trigger.target.$give(1,player);
game.delay();
}
},
chongzhen2:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{player:'respond'},
filter:function(event,player){
2015-12-11 05:07:11 +00:00
if(event.skill!='longdan_shan'&&event.skill!='longdan_sha') return false;
2015-04-29 03:25:17 +00:00
return event.source&&event.source.num('h')>0;
},
content:function(){
2017-01-13 18:51:13 +00:00
player.gain(trigger.source.get('h').randomGet(),trigger.source);
2015-04-29 03:25:17 +00:00
trigger.source.$give(1,player);
game.delay();
}
},
lihun:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.sex=='male';
},
filterCard:true,
position:'he',
content:function(){
2017-01-13 18:51:13 +00:00
player.gain(target.get('h'),target);
2015-04-29 03:25:17 +00:00
target.$give(target.num('h'),player);
player.turnOver();
player.addSkill('lihun2');
player.storage.lihun=target;
},
check:function(card){return 8-ai.get.value(card)},
ai:{
order:10,
result:{
player:function(player){
if(player.classList.contains('turnedover')) return 10;
return 0;
},
target:function(player,target){
if(target.num('h')>target.hp) return target.hp-target.num('h');
return 0;
}
},
threaten:1.5,
effect:{
target:function(card){
if(card.name=='guiyoujie') return [0,2];
}
}
},
},
lihun2:{
trigger:{player:'phaseUseEnd'},
forced:true,
popup:false,
2015-11-25 12:34:54 +00:00
audio:false,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
player.removeSkill('lihun2');
if(player.storage.lihun.classList.contains('dead')){
event.finish();
}
else{
player.chooseCard('he',true,player.storage.lihun.hp);
}
"step 1"
2017-01-13 18:51:13 +00:00
player.storage.lihun.gain(result.cards,player);
2015-04-29 03:25:17 +00:00
player.$give(result.cards.length,player.storage.lihun);
}
},
yuanhu:{
2015-11-01 07:54:42 +00:00
audio:3,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return player.num('he',{type:'equip'})>0;
},
content:function(){
"step 0"
player.chooseCardTarget({
filterCard:function(card){
return get.type(card)=='equip';
},
position:'he',
filterTarget:function(card,player,target){
return !target.get('e',get.subtype(card)[5]);
},
ai1:function(card){
return 6-ai.get.value(card);
},
ai2:function(target){
2016-04-22 06:59:46 +00:00
return ai.get.attitude(_status.event.player,target)-3;
2015-04-29 03:25:17 +00:00
},
2016-09-20 05:06:35 +00:00
prompt:get.prompt('yuanhu')
2015-04-29 03:25:17 +00:00
});
"step 1"
if(result.bool){
player.logSkill('yuanhu',result.targets);
var thisTarget=result.targets[0];
var thisCard=result.cards[0];
thisTarget.equip(thisCard);
event.target=thisTarget;
if(thisTarget!=player){
player.$give(thisCard,thisTarget);
}
switch(get.subtype(thisCard)){
2016-04-22 06:59:46 +00:00
case 'equip1':{
for(var i=0;i<game.players.length;i++){
if(get.distance(thisTarget,game.players[i])<=1) break;
2015-04-29 03:25:17 +00:00
}
2016-04-22 06:59:46 +00:00
if(i==game.players.length) return;
game.delay();
player.chooseTarget(true,function(card,player,target){
return get.distance(_status.event.thisTarget,target)<=1&&target.num('hej');
}).set('ai',function(target){
var attitude=ai.get.attitude(_status.event.player,target);
if(attitude>0&&target.num('j')){
return attitude*1.5;
}
return -attitude;
}).set('thisTarget',thisTarget);
return;
}
case 'equip2':{
thisTarget.draw();event.finish();
return;
}
default:{
thisTarget.recover();
event.finish();
return;
}
2015-04-29 03:25:17 +00:00
}
}
else{
event.finish();
}
"step 2"
if(result.targets.length){
player.discardPlayerCard(true,result.targets[0],'hej');
}
},
ai:{
threaten:1.2
}
},
tianming:{
2015-12-27 08:09:12 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{target:'shaBegin'},
check:function(event,player){
var cards=player.get('h');
if(cards.length<=2){
for(var i=0;i<cards.length;i++){
if(cards[i].name=='shan'||cards[i].name=='tao') return false;
}
}
return true;
},
content:function(){
"step 0"
player.chooseToDiscard(2,true,'he');
player.draw(2);
var players=game.players.slice(0);
players.sort(function(a,b){
return b.hp-a.hp;
});
if(players[0].hp>players[1].hp&&players[0]!=player){
2016-09-20 05:06:35 +00:00
players[0].chooseBool(get.prompt('tianming'));
2015-04-29 03:25:17 +00:00
event.player=players[0];
}
else{
event.finish();
}
"step 1"
if(result.bool){
player.chooseToDiscard(2,true,'he');
player.draw(2);
}
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha') return [1,0.5];
}
}
}
},
mizhao:{
enable:'phaseUse',
usable:1,
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
filter:function(event,player){
return player.num('h')>0;
},
filterCard:true,
selectCard:-1,
filterTarget:function(card,player,target){
return player!=target;
},
discard:false,
2017-01-13 18:51:13 +00:00
prepare:'give2',
2015-04-29 03:25:17 +00:00
ai:{
order:1,
result:{
player:0,
target:function(player,target){
if(player.num('h')>1){
return 1;
}
2015-08-15 09:10:06 +00:00
for(var i=0;i<game.players.length;i++){
if(game.players[i].num('h')&&game.players[i]!=target&&game.players[i]!=player&&ai.get.attitude(player,game.players[i])<0){
break;
}
}
if(i==game.players.length){
return 1;
}
2015-04-29 03:25:17 +00:00
return -2/(target.num('h')+1);
}
}
},
content:function(){
"step 0"
event.target1=targets[0];
2017-01-13 18:51:13 +00:00
targets[0].gain(cards,player);
2017-01-15 02:06:03 +00:00
// game.delay();
2015-04-29 03:25:17 +00:00
for(var i=0;i<game.players.length;i++){
if(game.players[i].num('h')&&game.players[i]!=event.target1&&game.players[i]!=player){
break;
}
}
if(i==game.players.length){
event.finish();
}
"step 1"
player.chooseTarget(true,'选择拼点目标',function(card,player,target){
2016-04-25 07:59:31 +00:00
return target.num('h')&&target!=_status.event.target1&&target!=player;
}).set('ai',function(target){
var player=_status.event.player;
var eff=ai.get.effect(target,{name:'sha'},_status.event.target1,player);
2015-08-15 09:10:06 +00:00
var att=ai.get.attitude(player,target);
if(att>0){
return eff-10;
}
return eff;
2016-04-25 07:59:31 +00:00
}).set('target1',event.target1);
2015-04-29 03:25:17 +00:00
"step 2"
if(result.targets.length){
event.target2=result.targets[0];
2015-08-15 09:10:06 +00:00
event.target1.line(event.target2);
2015-04-29 03:25:17 +00:00
event.target1.chooseToCompare(event.target2);
}
else{
event.finish();
}
"step 3"
if(result.bool){
event.target1.useCard({name:'sha'},event.target2);
}
else{
event.target2.useCard({name:'sha'},event.target1);
}
}
},
gongao:{
2015-11-01 07:54:42 +00:00
audio:2,
2015-04-29 03:25:17 +00:00
trigger:{global:'dieAfter'},
forced:true,
unique:true,
content:function(){
player.gainMaxHp();
player.recover();
},
ai:{
threaten:1.5
}
},
juyi:{
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-11-01 07:54:42 +00:00
audio:true,
2015-04-29 03:25:17 +00:00
trigger:{player:'phaseBegin'},
filter:function(event,player){
return player.maxHp>game.players.length&&player.hp<player.maxHp&&!player.storage.juyi;
},
forced:true,
unique:true,
content:function(){
var num=player.maxHp-player.num('h');
if(num>0){
player.draw(num);
}
player.addSkill('benghuai');
player.addSkill('weizhong');
player.storage.juyi=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('juyi');
2015-04-29 03:25:17 +00:00
}
},
weizhong:{
2015-11-01 07:54:42 +00:00
audio:true,
2015-04-29 03:25:17 +00:00
trigger:{player:['gainMaxHpEnd','loseMaxHpEnd']},
forced:true,
content:function(){
player.draw();
}
},
chixin:{
group:['chixin1','chixin2'],
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha'){
return num+20;
}
},
},
trigger:{player:'shaBefore'},
forced:true,
2015-05-03 15:17:15 +00:00
popup:false,
2015-04-29 03:25:17 +00:00
check:function(event,player){
return player.num('h','sha')>0;
},
filter:function(event,player){
return _status.currentPhase==player;
},
content:function(){
var target=trigger.target;
2016-08-12 08:26:31 +00:00
if(target.hasSkill('chixin3')){
2015-04-29 03:25:17 +00:00
target.storage.chixin++;
}
else{
target.storage.chixin=1;
target.addTempSkill('chixin3','phaseUseEnd');
}
}
},
chixin1:{
enable:['chooseToRespond','chooseToUse'],
filterCard:{suit:'diamond'},
position:'he',
viewAs:{name:'sha'},
prompt:'将一张♦牌当杀使用或打出',
check:function(card){return 5-ai.get.value(card)},
ai:{
respondSha:true,
}
},
chixin2:{
enable:['chooseToRespond'],
filterCard:{suit:'diamond'},
viewAs:{name:'shan'},
position:'he',
prompt:'将一张♦牌当闪打出',
check:function(card){return 5-ai.get.value(card)},
ai:{
respondShan:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')&&current<0) return 0.8
}
},
}
},
chixin3:{
mod:{
targetEnabled:function(card,player,target){
if(card.name!='sha') return;
if(player==_status.currentPhase&&player.get('s').contains('chixin')){
var num=game.checkMod(card,player,1,'cardUsable',player.get('s'))-20;
for(var i=0;i<game.players.length;i++){
2016-08-12 08:26:31 +00:00
if(game.players[i].hasSkill('chixin3')){
2015-04-29 03:25:17 +00:00
num+=1-game.players[i].storage.chixin;
}
}
return num>1;
}
}
}
},
suiren:{
trigger:{player:'phaseBegin'},
2015-12-30 04:00:49 +00:00
skillAnimation:true,
2015-04-29 03:25:17 +00:00
check:function(event,player){
return player.hp==1||(player.hp==2&&player.num('h')<=1);
},
2015-05-04 03:17:03 +00:00
filter:function(event,player){
return !player.storage.suiren;
},
intro:{
content:'limited',
},
mark:true,
2015-04-29 03:25:17 +00:00
direct:true,
2015-05-09 02:56:55 +00:00
unique:true,
2015-04-29 03:25:17 +00:00
content:function(){
"step 0"
var check=(player.hp==1||(player.hp==2&&player.num('h')<=1));
2016-09-20 05:06:35 +00:00
player.chooseTarget(get.prompt('suiren')).set('ai',function(target){
2016-04-25 07:59:31 +00:00
if(!_status.event.check) return 0;
return ai.get.attitude(_status.event.player,target);
}).set('check',check);
2015-04-29 03:25:17 +00:00
"step 1"
if(result.bool){
2015-05-04 03:17:03 +00:00
player.storage.suiren=true;
2017-01-23 09:28:05 +00:00
player.awakenSkill('suiren');
2015-04-29 03:25:17 +00:00
player.logSkill('suiren',result.targets);
player.removeSkill('yicong');
player.gainMaxHp();
player.recover();
result.targets[0].draw(3);
}
}
2016-01-24 08:34:21 +00:00
},
kuangfu:{
trigger:{source:'damageEnd'},
direct:true,
audio:2,
filter:function(event){
return event.card&&event.card.name=='sha'&&event.player.num('e');
},
content:function(){
"step 0"
var neg=ai.get.attitude(player,trigger.player)<=0;
2016-04-19 08:56:58 +00:00
player.choosePlayerCard('e',trigger.player).set('ai',function(button){
if(_status.event.neg){
2016-01-24 08:34:21 +00:00
return ai.get.buttonValue(button);
}
return 0;
2016-04-19 08:56:58 +00:00
}).set('neg',neg);
2016-01-24 08:34:21 +00:00
"step 1"
if(result.bool){
player.logSkill('kuangfu');
trigger.player.$give(result.links,player);
game.delay(2);
player.equip(result.links[0]);
}
}
},
2015-04-29 03:25:17 +00:00
},
translate:{
2016-09-15 02:21:42 +00:00
litong:'李通',
mizhu:'糜竺',
buzhi:'步骘',
2015-04-29 03:25:17 +00:00
chenlin:'陈琳',
yuanshu:'袁术',
2015-12-06 15:23:47 +00:00
re_yuanshu:'新袁术',
2015-04-29 03:25:17 +00:00
gongsunzan:'公孙瓒',
2015-12-06 15:23:47 +00:00
sp_diaochan:'sp貂蝉',
2015-04-29 03:25:17 +00:00
yangxiu:'杨修',
2015-12-06 15:23:47 +00:00
sp_zhaoyun:'sp赵云',
jsp_zhaoyun:'界sp赵云',
2015-04-29 03:25:17 +00:00
caohong:'曹洪',
liuxie:'刘协',
xiahouba:'夏侯霸',
zhugejin:'诸葛谨',
zhugeke:'诸葛恪',
guanyinping:'关银屏',
ganfuren:'甘夫人',
sunhao:'孙皓',
chengyu:'程昱',
simalang:'司马朗',
2015-05-06 08:46:40 +00:00
zhangliang:'张梁',
2015-04-29 03:25:17 +00:00
tianfeng:'田丰',
2015-12-07 11:15:35 +00:00
sp_pangtong:'sp庞统',
2016-08-09 16:48:05 +00:00
sp_jiaxu:'sp贾诩',
2015-04-29 03:25:17 +00:00
maliang:'马良',
2015-12-06 15:23:47 +00:00
sp_caoren:'sp曹仁',
2015-04-29 03:25:17 +00:00
yuejin:'乐进',
mifuren:'糜夫人',
2015-12-06 15:23:47 +00:00
sp_dongzhuo:'sp董卓',
2015-04-29 03:25:17 +00:00
chendong:'陈武董袭',
jiangfei:'蒋琬费祎',
jiangqing:'蒋钦',
hetaihou:'何太后',
dingfeng:'丁奉',
zhangxingcai:'张星彩',
caoang:'曹昂',
kongrong:'孔融',
fuwan:'伏完',
2016-08-09 16:48:05 +00:00
sp_pangde:'sp庞德',
2015-04-29 03:25:17 +00:00
sp_sunshangxiang:'孙尚香',
zhugedan:'诸葛诞',
2015-12-06 15:23:47 +00:00
sp_machao:'sp马超',
2015-12-09 05:29:35 +00:00
sp_jiangwei:'sp姜维',
2015-04-29 03:25:17 +00:00
zhangbao:'张宝',
yangxiou:'杨修',
2015-11-18 05:46:30 +00:00
shixie:'士燮',
mayunlu:'马云騄',
zhanglu:'张鲁',
wutugu:'兀突骨',
2015-04-29 03:25:17 +00:00
mateng:'马腾',
2015-12-06 15:23:47 +00:00
sp_caiwenji:'sp蔡文姬',
2015-11-25 10:25:18 +00:00
zhugeguo:'诸葛果',
2015-12-19 09:28:50 +00:00
liuzan:'留赞',
lingcao:'凌操',
sunru:'孙茹',
lingju:'灵雎',
lifeng:'李丰',
2015-12-27 16:58:56 +00:00
jsp_guanyu:'sp关羽',
2016-01-24 08:34:21 +00:00
zhuling:'朱灵',
sunluyu:'孙鲁育',
hanba:'旱魃',
panfeng:'潘凤',
2016-01-28 06:46:42 +00:00
zumao:'祖茂',
2016-02-14 09:04:31 +00:00
daxiaoqiao:'大小乔',
sp_daqiao:'sp大乔',
sp_ganning:'sp甘宁',
2016-03-18 08:33:13 +00:00
sp_zhangfei:'sp张飞',
sp_xiahoudun:'sp夏侯惇',
cuiyan:'崔琰',
wenpin:'文聘',
jsp_huangyueying:'sp黄月英',
sp_lvmeng:'sp吕蒙',
wangji:'王基',
2016-05-10 10:45:06 +00:00
guansuo:'关索',
tadun:'蹋顿',
yanbaihu:'严白虎',
2016-08-10 11:23:23 +00:00
wanglang:'王朗',
2017-01-13 16:02:19 +00:00
sp_liubei:'sp刘备',
caochun:'曹纯',
2017-01-14 04:56:52 +00:00
dongbai:'董白',
2015-11-18 05:46:30 +00:00
2017-01-13 18:51:13 +00:00
xiehui:'黠慧',
xiehui2:'黠慧',
xiehui_info:'锁定技,你的黑色牌不占用手牌上限;其他角色获得你的黑色牌时,其不能使用、打出、弃置这些牌直到其体力值减少为止',
lianzhu:'连诛',
lianzhu_info:'出牌阶段限一次你可以展示并交给一名其他角色一张牌若该牌为黑色其选择一项1.你摸两张牌2.弃置两张牌',
2017-01-13 16:02:19 +00:00
zhaolie:'昭烈',
zhaolie_info:'摸牌阶段摸牌时你可以少摸一张指定你攻击范围内的一名角色亮出牌堆顶上3张牌将其中的非基本牌和【桃】置于弃牌堆该角色进行二选一你对其造成X点伤害然后他获得这些基本牌或他弃置X张牌然后你获得这些基本牌。X为其中非基本牌的数量',
shichou:'誓仇',
shichou2:'誓仇',
shichou_info:'主公技,限定技,回合开始时,你可指定一名蜀国角色并交给其两张牌。本盘游戏中,每当你受到伤害时,改为该角色替你受到等量的伤害,然后摸等量的牌,直至该角色第一次进入濒死状态',
shanjia:'缮甲',
shanjia_info:'出牌阶段开始时你可以先摸X张牌再弃置等量的牌若你以此法弃置了装备区内的牌视为你使用了一张无视距离的【杀】X为你于本局游戏内使用过的装备牌数且最大为7',
2016-09-15 02:21:42 +00:00
tuifeng:'推锋',
2016-09-20 07:21:28 +00:00
tuifeng2:'推锋',
2016-09-15 02:21:42 +00:00
tuifeng_info:'1.当你受到1点伤害后你可以将一张牌置于武将牌上称为“锋”。2.准备阶段开始时若你的武将牌上有“锋”你将所有“锋”置入弃牌堆摸2X张牌然后你于此回合的出牌阶段内使用【杀】的次数上限+XX为你此次置入弃牌堆的“锋”数',
ziyuan:'资援',
ziyuan_info:'出牌阶段限一次你可以将任意张点数之和为13的手牌交给一名其他角色然后该角色回复1点体力',
jugu:'巨贾',
jugu_info:'锁定技1.你的手牌上限+X。2.游戏开始时你摸X张牌X为你的体力上限',
hongde:'弘德',
hongde_info:'当你一次获得或失去至少两张牌后,你可以令一名其他角色摸一张牌',
dingpan:'定叛',
2016-09-20 07:34:30 +00:00
dingpan_info:'出牌阶段限X次你可以令一名装备区里有牌的角色摸一张牌然后其选择一项1.令你弃置其装备区里的一张牌2.获得其装备区里的所有牌若如此做你对其造成1点伤害X为场上存活的反贼数非身份模式改为1',
2016-08-10 14:07:35 +00:00
weidi:'伪帝',
weidi_info:'锁定技,你视为拥有当前主公的主公技',
2016-08-09 16:48:05 +00:00
juesi:'决死',
juesi_info:'出牌阶段,你可以弃置一张杀并选择你攻击范围内的一名有牌的其他角色,该角色弃置一张牌,然后若弃置的牌不是杀且你的体力值不大于该角色,你视为对其使用决斗',
zhenlue:'缜略',
2016-08-10 11:23:23 +00:00
zhenlue_info:'锁定技,你使用的非延时类锦囊牌不能被无懈可击响应;你不能成为其他角色的延时类锦囊的目标',
2016-08-09 16:48:05 +00:00
jianshu:'间书',
jianshu_info:'限定技,出牌阶段,你可以将一张黑色手牌交给一名其他角色,并选择一名攻击范围内含有其的另一名其他角色,然后令这两名角色拼点,赢的角色弃置两张牌,没赢的角色失去一点体力',
yongdi:'拥嫡',
yongdi_info:'限定技,当你受到伤害后,你可令一名其他男性角色增加一点体力上限,然后若该角色的武将牌上有主公技且其不为主公,其获得此主公技',
gushe:'鼓舌',
2016-08-10 11:23:23 +00:00
gushe_bg:'舌',
2016-08-11 14:09:10 +00:00
gushe_info:'出牌阶段限一次你可以用一张手牌与至多三名角色同时拼点然后依次结算拼点结果若你赢对方选择一项1.弃置一张牌2.令你摸一张牌。若你没赢你获得一个“饶舌”标记你有7个饶舌标记时你死亡',
2016-08-09 16:48:05 +00:00
jici:'激词',
jici_info:'当你发动“鼓舌”拼点的牌亮出后若点数小于X你可令点数+X若点数等于X你可令你本回合发动“鼓舌”的次数上限+1X为你“饶舌”标记的数量',
2016-06-04 08:04:13 +00:00
shefu:'设伏',
2017-01-08 04:09:34 +00:00
shefu_bg:'伏',
2016-06-04 08:04:13 +00:00
shefu_info:'结束阶段开始时,你可以将一张手牌移出游戏,称为"伏兵"。然后为"伏兵"记录一个基本牌或锦囊牌名称(须与其他"伏兵"记录的名称均不同)。你的回合外,当有其他角色使用与你记录的"伏兵"牌名相同的牌时,你可以令此牌无效,然后将该"伏兵"置入弃牌堆',
benyu:'贲育',
2016-06-05 01:53:10 +00:00
benyu2:'贲育',
2016-06-04 08:04:13 +00:00
benyu_info:'每当你受到伤害后若你的手牌数不大于伤害来源手牌数你可以将手牌摸至与伤害来源手牌数相同最多摸至5张否则你可以弃置大于伤害来源手牌数的手牌然后对其造成1点伤害',
2016-05-10 10:45:06 +00:00
zhidao:'雉盗',
2016-05-11 15:50:00 +00:00
zhidao_info:'锁定技,当你于你的回合内第一次对区域里有牌的其他角色造成伤害后,你获得其手牌、装备区和判定区里的各一张牌,然后直到回合结束,其他角色不能被选择为你使用牌的目标',
2016-05-10 10:45:06 +00:00
jili:'寄篱',
jili_info:'锁定技当一名其他角色成为红色基本牌或红色非延时类锦囊牌的目标时若其与你的距离为1且你既不是此牌的使用者也不是目标你也成为此牌的目标',
luanzhan:'乱战',
luanzhan_info:'你使用【杀】或黑色非延时类锦囊牌可以额外选择X名角色为目标当你使用【杀】或黑色非延时类锦囊牌指定目标后若此牌的目标角色数小于X则X减至0。X为你于本局游戏内造成过伤害的次数',
zhengnan:'征南',
zhengnan_info:'当其他角色死亡后,你可以摸三张牌。若如此做,你获得下列技能中的任意一个:“武圣”、 “当先”和“制蛮”',
xiefang:'撷芳',
xiefang_info:'锁定技,你计算与其他角色的距离-XX为女性角色数',
2016-03-18 08:33:13 +00:00
qizhi:'奇制',
qizhi_info:'当你于回合内使用基本牌或锦囊牌指定目标后,你可以弃置不是此牌目标的一名角色的一张牌。若如此做,其摸一张牌',
jinqu:'进趋',
jinqu_info:'结束阶段开始时你可以摸两张牌若如此做你将手牌弃置至X张X为你于此回合发动过“奇制”的次数',
tanhu:'探虎',
tanhu2:'探虎',
tanhu3:'探虎',
tanhu_info:'出牌阶段限一次你可以与一名其他角色拼点。若你赢你获得以下技能直到回合结束你与该角色的距离为1你对该角色使用非延时类锦囊时可以摸一张牌',
mouduan:'谋断',
mouduan_info:'通常状态下你拥有标记“武”并拥有技能“激昂”和“谦逊”。当你的手牌数为2张或以下时你须将你的标记翻面为“文”将该两项技能转化为“英姿”和“克己”。任一角色的回合开始前你可弃一张牌将标记翻回',
jiqiao:'机巧',
jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶三倍数量的牌,你获得其中的锦囊牌,将其余的牌置入弃牌堆',
linglong:'玲珑',
linglong_info:'锁定技,若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1若你的装备区没有宝物牌你使用锦囊牌无距离限制',
fenyong:'愤勇',
fenyong2:'愤勇',
fenyong2_bg:'勇',
fenyong_info:'每当你受到一次伤害后,你可以获得一枚愤勇标记;当你有愤勇标记时,防止你受到的所有伤害',
xuehen:'雪恨',
xuehen_info:'每个角色的回合结束阶段开始时若你有愤勇标记你须弃置之然后选择一项1.弃置当前回合角色X张牌X为你已损失的体力值2.视为对一名任意角色使用一张【杀】',
zhenwei:'镇卫',
zhenwei2:'镇卫',
zhenwei_info:'当一名其他角色成为【杀】或黑色锦囊牌的目标时使用者不是你若该角色的体力值小于你且此牌的目标角色数为1你可以弃置一张牌。若如此做你选择一项1、摸一张牌然后将此【杀】或黑色锦囊牌转移给你2、令此【杀】或黑色锦囊牌无效然后将此【杀】或黑色锦囊牌置于使用者的武将牌旁若如此做当前回合结束后使用者获得使用者武将牌旁的这些牌',
jie:'嫉恶',
jie_info:'锁定技,你使用的红色【杀】造成的伤害+1',
dahe:'大喝',
dahe2:'大喝',
dahe2_bg:'喝',
dahe_info:'出牌阶段,你可以与一名其他角色拼点。若你赢,该角色的非红心【闪】无效直到回合结束,你可将该角色拼点的牌交给场上一名体力不多于你的角色。若你没赢,你须展示手牌并选择一张弃置。每阶段限一次',
2016-02-14 09:04:31 +00:00
yinling:'银铃',
yinling_bg:'锦',
yinling_info:'出牌阶段,你可以弃置一张黑色牌并指定一名其他角色。若如此做,你获得其一张牌并置于你的武将牌上,称为“锦”(数量最多为四)',
junwei:'军威',
2016-02-15 12:03:41 +00:00
junwei2:'军威',
2016-02-14 09:04:31 +00:00
junwei_info:'回合结束阶段开始时你可以将三张“锦”置入弃牌堆。若如此做你须指定一名角色并令其选择一项1.亮出一张【闪】然后由你交给任意一名角色。2.该角色失去1点体力然后由你选择将其装备区的一张牌移出游戏。在该角色的回合结束后将以此法移出游戏的装备牌移回原处',
yanxiao:'言笑',
yanxiao2:'言笑',
yanxiao_info:'出牌阶段,你可以将一张♦牌置于一名角色的武将牌上,武将牌上有“言笑”牌的角色下个判定阶段开始时,获得言笑牌及其判定区里的所有牌',
anxian:'安娴',
anxian_info:'每当你使用【杀】对目标角色造成伤害时,你可以防止此次伤害,令其弃置一张手牌,然后你摸一张牌;当你成为【杀】的目标时,你可以弃置一张手牌使之无效,然后该【杀】的使用者摸一张牌',
xingwu:'星舞',
xingwu_info:'弃牌阶段开始时你可以将一张与你本回合使用的牌颜色均不同的手牌置于武将牌上若你有至少三张“星舞牌”你将之置入弃牌堆并选择一名男性角色该角色受到2点伤害并弃置其装备区的所有牌',
luoyan:'落雁',
luoyan_info:'锁定技。若你的武将牌上有“星舞牌”,你拥有“天香”和“流离”',
2016-01-28 06:46:42 +00:00
yinbing:'引兵',
yinbing_info:'结束阶段开始时,你可以将至少一张非基本牌置于武将牌上。每当你受到【杀】或【决斗】的伤害后,你将一张“引兵牌”置入弃牌堆。',
juedi:'绝地',
2016-11-30 15:02:10 +00:00
juedi_info:'锁定技准备阶段你选择一项1.移去“引兵”牌将手牌补至体力上限数2.将“引兵”牌交给一名体力值不大于你的其他角色其回复1点体力摸等量的牌',
2016-01-24 08:34:21 +00:00
kuangfu:'狂斧',
kuangfu_info:'每当你使用杀造成伤害,可以将对方的一张装备牌移到你的装备区',
xintan:'心惔',
xintan_info:'出牌阶段限一次,你可以将两张“焚”置入弃牌堆并选择一名角色,该角色失去一点体',
fentian:'焚天',
fentian_info:'锁定技,结束阶段开始时,若你的手牌数少于体力值,你须选择一名攻击范围内的角色,将其一张牌置于你的武将牌上,称为“焚”。锁定技,你的攻击范围+XX为“焚”的数量',
zhiri:'炙日',
zhiri_info:'觉醒技准备阶段开始时若“焚”数不小于3你减1点体力上限然后获得技能“心惔”出牌阶段限一次你可以将两张“焚”置入弃牌堆并选择一名角色该角色失去一点体力',
meibu:'魅步',
2016-02-14 09:04:31 +00:00
meibu_info:'一名其他角色的出牌阶段开始时,若你不在其攻击范围内,你可以令该角色的锦囊牌均视为【杀】,直到该角色以此法使用了一张【杀】或回合结束。若如此做,则直到回合结束,视为你在其攻击范围内',
2016-01-24 08:34:21 +00:00
mumu:'穆穆',
mumu_info:'出牌阶段限一次,你可以弃置一张【杀】或黑色锦囊牌,然后选择一项:弃置场上一张武器牌,然后摸一张牌;或将场上的一张防具牌移动到你的装备区里(可替换原防具)',
zhanyi:'战意',
2017-01-13 16:02:19 +00:00
zhanyi_basic_sha:'战杀',
zhanyi_basic_jiu:'战酒',
zhanyi_basic_tao:'战桃',
zhanyi_info:'出牌阶段限一次你可以弃置一张牌并失去1点体力然后根据你弃置的牌获得以下效果直到回合结束基本牌你可以将一张基本牌当作杀、酒或桃使用锦囊牌摸两张牌且你使用的牌无距离限制装备牌你使用【杀】指定目标角色后其弃置两张牌',
2015-12-27 16:58:56 +00:00
nuzhan:'怒斩',
2016-03-18 08:33:13 +00:00
nuzhan2:'怒斩',
nuzhan_info:'锁定技,你每当你使用由一张锦囊牌转化而来的【杀】时,你可以额外使用一张杀;锁定技,你使用的由一张装备牌转化而来的【杀】的伤害值基数+1',
2015-12-27 16:58:56 +00:00
danji:'单骑',
danji_info:'觉醒技准备阶段开始时若你的手牌数大于你的体力值你减1点体力上限然后获得“马术”和“怒斩”',
2015-12-19 09:28:50 +00:00
tunchu:'屯储',
tunchu_info:'摸牌阶段摸牌时,你可以额外摸两张牌,若如此做,将一张手牌置于你的武将上,称为“粮”,只要你的武将牌上有“粮”,你便不能使用【杀】和【决斗】',
shuliang:'输粮',
shuliang_info:'每当一名角色的结束阶段开始时,若其没有手牌,你可以将一张“粮”置入弃牌堆,然后该角色摸两张牌',
jieyuan:'竭缘',
2015-12-20 04:34:31 +00:00
jieyuan_more:'竭缘',
jieyuan_less:'竭缘',
2015-12-19 09:28:50 +00:00
jieyuan_info:'当你对一名其他角色造成伤害时,若其体力值大于或等于你的体力值,你可弃置一张黑色手牌令此伤害+1当你受到一名其他角色造成的伤害时若其体力值大于或等于你的体力值你可弃置一张红色手牌令此伤害-1。',
fenxin:'焚心',
2015-12-20 04:34:31 +00:00
fenxin_info:'限定技,当你杀死一名非主公角色时,在其翻开身份牌之前,你可以与该角色交换身份牌。(你的身份为主公时不能发动此技能)',
2015-12-19 09:28:50 +00:00
shixin:'释衅',
shixin_info:'锁定技,当你受到火属性伤害时,你防止此伤害',
qingyi:'轻逸',
2016-05-07 02:18:09 +00:00
qingyi1:'轻逸',
qingyi2:'轻逸',
2015-12-19 09:28:50 +00:00
qingyi_info:'你可以跳过摸牌阶段,或跳过出牌阶段并弃置一张装备牌,若如此则视为对任意一名使用一张【杀】',
dujin:'独进',
dujin_info:'摸牌阶段你可以额外摸X+1张牌X为你装备区里牌数的一半且向下取整',
2015-11-25 10:25:18 +00:00
yuhua:'羽化',
yuhua_info:'锁定技,弃牌阶段内,你的非基本牌不计入手牌数,且你不能弃置你的非基本牌',
qirang:'祈禳',
qirang_info:'当有装备牌进入你的装备区时,你可以获得牌堆中的一张锦囊牌',
2015-11-18 05:46:30 +00:00
biluan:'避乱',
biluan_info:'摸牌阶段开始时若有其他角色与你距离不大于1则你可以放弃摸牌。若如此做其他角色与你距离+XX为势力数',
lixia:'礼下',
lixia_info:'锁定技,其他角色结束阶段开始时,若你不在其攻击范围内,你摸一张牌或令其摸一张牌。若如此做,其他角色与你的距离-1',
yishe:'义舍',
2015-11-21 05:30:26 +00:00
yishe_bg:'米',
2015-11-18 05:46:30 +00:00
yishe_info:'结束阶段开始时若你的武将牌上没有牌你可以摸两张牌。若如此做你将两张牌置于武将牌上称为“米”当“米”移至其他区域后若你的武将牌上没有“米”你回复1点体力',
bushi:'布施',
midao:'米道',
bushi_info:'当你受到1点伤害后或其他角色受到你造成的1点伤害后受到伤害的角色可以获得一张“米”',
midao_info:'当一张判定牌生效前,你可以打出一张“米”代替之',
fengpo:'凤魄',
fengpo_info:'当你于出牌阶段内使用第一张【杀】或【决斗】指定目标后若目标角色数为1你可以选择一项1.摸X张牌2.此牌造成的伤害+XX为其手牌中方牌的数量',
chenqing:'陈情',
chenqing_info:'每轮限一次,当一名角色处于濒死状态时,你可以令另一名其他角色摸四张牌,然后弃置四张牌。若其以此法弃置的四张牌花色各不相同,则视为该角色对濒死的角色使用一张【桃】',
mozhi:'默识',
mozhi_info:'结束阶段开始时,你可以将一张手牌当你本回合出牌阶段使用的第一张基本或非延时类锦囊牌使用。然后,你可以将一张手牌当你本回合出牌阶段使用的第二张基本或非延时类锦囊牌使用',
ranshang:'燃殇',
2015-11-21 05:30:26 +00:00
ranshang2:'燃殇',
2015-11-18 05:46:30 +00:00
ranshang_info:'锁定技当你受到1点火焰伤害后你获得1枚“燃”标记结束阶段开始时你失去X点体力X为“燃”标记的数量',
hanyong:'悍勇',
hanyong_info:'当你使用【南蛮入侵】或【万箭齐发】时,若你的体力值小于游戏轮数,你可以令此牌造成的伤害+1',
yicong:'义从',
2015-04-29 03:25:17 +00:00
yongsi:'庸肆',
yongsi1:'庸肆',
yongsi2:'庸肆',
bifa:'笔伐',
bifa2:'笔伐',
songci:'颂词',
baobian:'豹变',
lihun:'离魂',
chongzhen:'冲阵',
chongzhen1:'冲阵',
chongzhen2:'冲阵',
yuanhu:'援护',
tianming:'天命',
mizhao:'密诏',
duwu:'黩武',
mingzhe:'明哲',
huanshi:'缓释',
hongyuan:'弘援',
aocai:'傲才',
aocai2:'傲才',
2016-04-25 07:59:31 +00:00
aocai2_backup:'傲才',
2015-04-29 03:25:17 +00:00
aocai3:'傲才',
huxiao:'虎啸',
xueji:'血祭',
wuji:'武继',
shushen:'淑慎',
shenzhi:'神智',
xiongyi:'雄异',
junbing:'郡兵',
junbing2:'郡兵',
quji:'去疾',
sijian:'死谏',
suishi:'随势',
suishi2:'随势',
xiaoguo:'骁果',
duanxie:'断绁',
fenming:'奋命',
guixiu:'闺秀',
cunsi:'存嗣',
yongjue:'勇决',
hengzheng:'横征',
shengxi:'生息',
shoucheng:'守成',
shangyi:'尚义',
zhendu:'鸩毒',
qiluan:'戚乱',
qiluan2:'戚乱',
qiluan3:'戚乱',
shenxian:'甚贤',
qiangwu:'枪舞',
moukui:'谋溃',
moukui2:'谋溃',
lirang:'礼让',
mingshi:'名士',
liangzhu:'良助',
kaikang:'慷忾',
wangzun:'妄尊',
tongji:'同疾',
kuiwei:'溃围',
kuiwei2:'溃围',
yanzheng:'严整',
zhoufu:'咒缚',
zhoufu2:'咒缚',
zhoufu3:'咒缚',
yingbin:'影兵',
fenxun:'奋迅',
spmengjin:'猛进',
xiemu:'协穆',
naman:'纳蛮',
zuixiang:'醉乡',
manjuan:'漫卷',
taichen:'抬榇',
jilei:'鸡肋',
jilei2:'鸡肋',
2017-01-14 08:57:14 +00:00
jilei2_bg:'肋',
2015-05-06 08:46:40 +00:00
fulu:'符箓',
fuji:'助祭',
2015-12-19 09:28:50 +00:00
fenyin:'奋音',
2016-03-18 08:33:13 +00:00
yawang:'雅望',
xunzhi:'殉志',
2017-01-12 14:50:54 +00:00
yingjian:'影箭',
2017-01-16 07:48:07 +00:00
fanxiang:'返乡',
fanxiang_info:'觉醒技准备阶段开始时若全场有至少一名已受伤且你曾发动【良助】令其摸牌的角色则你回复1点体力和体力上限失去技能【良助】并获得技能【枭姬】',
2017-01-12 14:50:54 +00:00
yingjian_info:'回合开始阶段,你可以视为使用一张无视距离的杀',
2016-03-18 08:33:13 +00:00
xunzhi_info:'准备阶段开始时若你的上家和下家与你的体力值均不相等你可以失去1点体力。若如此做你的手牌上限+2',
yawang_info:'锁定技摸牌阶段开始时你放弃摸牌改为摸x张牌然后你于出牌阶段内至多使用x张牌x为与你体力值相等的角色数',
2015-12-30 04:00:49 +00:00
fenyin_info:'你的回合内当你使用牌时若此牌与你于此回合内使用的上一张牌颜色不同则你可以摸一张牌每回合最多发动3次',
2015-05-06 08:46:40 +00:00
fuji_info:'当一名角色造成雷电伤害时,你可以令其进行一次判定,若结果为黑色,此伤害+1若结果为红色该角色获得此牌。',
fulu_info:'你可以将【杀】当雷【杀】使用。',
2017-01-14 08:57:14 +00:00
jilei_info:'每当你受到有来源的伤害时,你可以选择一种牌的类别,令伤害来源不能使用、打出或弃置其此类别的手牌,直到回合结束',
2015-04-29 03:25:17 +00:00
danlao:'啖酪',
2015-04-29 03:44:48 +00:00
danlao_info:'当你成为一张指定了多个目标的锦囊牌的目标时,你可以取消之,并摸一张牌。',
2015-04-29 03:25:17 +00:00
gongao:'功獒',
zhuiji:'追击',
chouhai:'仇海',
chouhai_info:'锁定技,当你每次受到伤害时,若你没有手牌,此伤害+1。',
guiming:'归命',
guiming_info:'主公技,其他吴势力角色于你的回合内视为已受伤的角色。',
chixin:'赤心',
2015-05-03 15:17:15 +00:00
chixin1:'赤心',
chixin2:'赤心',
2015-04-29 03:25:17 +00:00
chixin_info:'你可以将♦牌当【杀】或【闪】使用或打出。出牌阶段,你对你攻击范围内的每名角色均可使用一张【杀】。',
suiren:'随仁',
suiren_info:'限定技准备阶段开始时你可以失去技能“义从”然后加1点体力上限并回复1点体力再令一名角色摸三张牌。',
canshi:'残蚀',
canshi2:'残蚀',
canshi_info:'摸牌阶段开始时你可以放弃摸牌改为摸x张牌x为已受伤的角色数若如此做当你与此回合内使用基本牌或锦囊牌时你弃置一张牌。',
zhuiji_info:'锁定技你与体力值低于你的角色距离为1。',
kunfen:'困奋',
kunfen_info:'锁定技,回合结束阶段开始时,你失去1点体力,然后摸两张牌',
fengliang:'逢亮',
fengliang_info:'觉醒技,当你进入濒死状态时,你减1点体力上限并将体力值回复至2点,然后获得技能挑衅,将困奋改为非锁定技',
cihuai:'刺槐',
cihuai_info:'出牌阶段开始时,若你手牌中没有杀,你可以展示你的手牌,视为对一名角色使用一张杀',
gongao_info:'锁定技,每当一名角色死亡后,你增加一点体力上限,回复一点体力。',
juyi:'举义',
juyi_info:'觉醒技,准备阶段开始时,若你已受伤且体力上限大于存活角色数,你须将手牌摸至体力上限,然后获得技能“崩坏”和“威重”。',
weizhong:'威重',
weizhong_info:'锁定技,每当你的体力上限增加或减少时,你摸一张牌。',
taichen_info:'出牌阶段限一次,你可以自减一点体力,视为对一名角色使用一张杀(不计入回合内出杀限制)',
manjuan_info:'其他角色的卡牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得之',
zuixiang_info:'限定技回合开始阶段开始时你可以展示牌库顶的3张牌并置于你的武将牌上你不可使用或打出与该些牌同类的牌所有同类牌对你无效。之后每个你的回合开始阶段你须重复展示一次直至该些牌中任意两张点数相同时将你武将牌上的全部牌置于你的手上。',
naman_info:'你可以获得其他角色打出的杀',
xiemu_info:'每当你成为其他角色的黑色牌的目标,可以弃置一张杀并摸两张牌',
spmengjin_info:'每当你使用一张杀,可以弃置目标一张牌',
fenxun_info:'每当你使用杀且仅指定了一个目标,你可以弃置一张牌并额外指定一个无视距离的目标',
yingbin_info:'受到“咒缚”技能影响的角色进行判定时,你可以摸两张牌。',
zhoufu_info:'出牌阶段限一次,你可以指定一名其他角色并将一张手牌移出游戏(将此牌置于该角色的武将牌旁)。若如此做,该角色进行判定时,改为将此牌作为判定牌。该角色的回合结束时,若此牌仍在该角色旁,你将此牌收入手牌。',
yanzheng_info:'若你的手牌数大于你的体力值,你可以将你装备区内的牌当【无懈可击】使用',
kuiwei_info:'回合结束阶段开始时你可以摸2+X张牌然后将你的武将牌翻面。在你的下个摸牌阶段开始时你须弃置X张牌。X等于当时场上装备区内的武器牌的数量',
tongji_info:'锁定技。若你的手牌数大于你的体力值,则只要你在任一其他角色的攻击范围内,该角色使用【杀】时便不能指定你以外的角色为目标',
wangzun_info:'其他角色的回合开始时,你可以摸一张牌,然后令该角色此回合的手牌上限-1直到你的回合开始你不能再次发动此技',
kaikang_info:'每当你距离1以内的角色成为杀的目标后你可以摸一张牌。若如此做你交给其一张牌并展示之若该牌为装备牌该角色可以使用此牌。',
2017-01-16 07:48:07 +00:00
liangzhu_info:'当一名角色于其出牌阶段内回复体力时你可以选择一项1、摸一张牌2、令该角色摸两张牌 ',
2015-04-29 03:25:17 +00:00
mingshi_info:'当你即将受到伤害时,若伤害来源的体力值大于你,你可以弃置一张黑色手牌令伤害-1 ',
lirang_info:'你可以将你弃置的卡牌交给一名其他角色 ',
moukui_info:'当你使用【杀】指定一名角色为目标后,你可以选择一项:摸一张牌,或弃置其一张牌。若如此做,此【杀】被【闪】抵消时,该角色弃置你的一张牌。 ',
qiangwu_info:'出牌阶段,你可以进行一次判定。若如此做,则直到回合结束,你使用点数小于判定牌的 【杀】时不受距离限制,且你使用点数大于判定牌的【杀】时不计入出牌阶段的使用次数。',
2015-04-30 16:30:29 +00:00
shenxian_info:'每名角色的回合限一次,你的回合外,每当有其他角色因弃置而失去牌时,若其中有基本牌,你可以摸一张牌。',
2015-04-29 03:25:17 +00:00
qiluan_info:'每当你杀死一名角色后,可以在回合结束时摸三张牌。',
zhendu_info:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用一张【酒】,然后你对其造成一点伤害。',
shangyi_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后弃置其中的一张黑色牌',
shoucheng_info:'每当一名其他角色在其回合外失去最后的手牌时,你可令该角色摸一张牌。',
2015-04-30 16:30:29 +00:00
shengxi_info:'若你于出牌阶段未造成伤害,你可在弃牌阶段开始时摸两张牌。',
2015-04-29 03:25:17 +00:00
hengzheng_info:'摸牌阶段开始时若你的体力值为1或你没有手牌你可以放弃摸牌获得每名其他角色区域里的一张牌。',
2017-01-14 08:57:14 +00:00
cunsi_info:'限定技,出牌阶段,你可以将所有手牌交给一名男性角色,令该角色获得技能【勇决】,然后将武将牌翻面',
2015-04-29 03:25:17 +00:00
guixiu_info:'每当你成为杀的目标,若你的手牌数小于体力值,可以摸一张牌',
fenming_info:'结束阶段开始时,若你处于连环状态,你可以弃置处于连环状态的每名角色的一张牌。',
duanxie_info:'出牌阶段限一次,你可以令一名其他角色横置武将牌,若如此做,你横置武将牌。',
xiaoguo_info:'其他角色的结束阶段开始时你可以弃置一张基本牌令该角色选择一项1.弃置一张装备牌并令你摸一张牌2.受到你对其造成的1点伤害。',
sijian_info:'当你失去最后的手牌时,你可以弃置一名其他角色的一张牌。',
2016-01-24 08:34:21 +00:00
suishi_info:'每当其他角色进入濒死状态时伤害来源可以令你摸一张牌每当其他角色死亡时伤害来源可以令你失去1点体力',
2015-04-29 03:25:17 +00:00
quji_info:'出牌阶段限一次你可以弃置X张牌X为你已损失的体力值然后令至多X名已受伤的角色各回复1点体力。若你以此法弃置的牌中有黑色牌你失去一点体力。',
junbing_info:'一名角色的结束阶段开始时若其手牌数少于或者等于1该角色可以摸一张牌。若如此做该角色须将所有手牌交给你然后你交给其等量的牌。',
2016-04-19 08:56:58 +00:00
xiongyi_info:'限定技出牌阶段你可以与你势力相同的所有角色各摸3张牌非国战模式改为任选至多3名角色若你指定的角色数不超过2你回复1点体力',
2015-04-29 03:25:17 +00:00
shenzhi_info:'回合开始阶段开始时你可以弃置所有手牌若你以此法弃置的牌的张数不小于X你回复1点体力X为你当前的体力值。',
shushen_info:'当你回复1点体力时你可以令一名其他角色回复1点体力或摸两张牌',
wuji_info:'觉醒技回合结束阶段开始时若你于此回合内已造成3点或更多伤害你加1点体力上限回复1点体力然后失去技能“虎啸”。',
xueji_info:'出牌阶段你可弃置一张红色牌并选择你攻击范围内的至多X名其他角色对这些角色各造成1点伤害X为你已损失的体力值然后这些角色各摸一张牌。每阶段限一次。',
huxiao_info:'锁定技,你于出牌阶段内每使用一张【杀】被【闪】抵消,你于此阶段内可以额外使用一张【杀】。',
aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。',
hongyuan_info:'摸牌阶段摸牌时,你可以少摸一张牌,然后指定至多两名其他角色各摸一张牌。',
huanshi_info:'一名角色的判定牌生效前,你可令其观看你的手牌。若如此做,该角色选择你的一张牌,令你打出此牌代替之。',
mingzhe_info:'你的回合外,每当你因使用、打出或弃置而失去一张红色牌时,你可以摸一张牌。',
duwu_info:'出牌阶段你可以弃置X张牌对你攻击范围内的一名其他角色造成1点伤害(X为该角色的体力值)。若你以此法令该角色进入濒死状态则濒死状态结算后你失去1点体力且本回合不能再发动黩武。',
tianming_info:'当你成为【杀】的目标时,你可以弃置两张牌(不足则全弃,无牌则不弃),然后摸两张牌;若此时全场体力值最多的角色仅有一名(且不是你),该角色也可以如此做。',
mizhao_info:'出牌阶段,你可以将所有手牌(至少一张)交给一名其他角色。若如此做,你令该角色与你指定的另一名有手牌的角色拼点。视为拼点赢的角色对没赢的角色使用一张【杀】。每阶段限一次。',
2016-04-22 06:59:46 +00:00
yuanhu_info:'回合结束阶段开始时你可以将一张装备牌置于一名角色的装备区里然后根据此装备牌的种类执行以下效果。武器牌弃置距离该角色1以内的一名角色区域中的一张牌防具牌该角色摸一张牌坐骑牌该角色回复1点体力。',
2016-07-24 05:22:17 +00:00
lihun_info:'出牌阶段,你可以弃置一张牌并将你的武将牌翻面,若如此做,你指定一名男性角色,获得其所有手牌。出牌阶段结束时,你需为该角色每一点体力分配给其一张牌。每回合限一次。',
2015-04-29 03:25:17 +00:00
chongzhen_info:'每当你发动“龙胆”使用或打出一张手牌时,你可以立即获得对方的一张手牌。',
bifa_info:'回合结束阶段开始时你可以将一张手牌移出游戏并指定一名其他角色。该角色的回合开始时其观看你移出游戏的牌并选择一项交给你一张与此牌同类型的手牌并获得此牌或将此牌置入弃牌堆然后失去1点体力。',
songci_info:'出牌阶段,你可以选择一项:令一名手牌数小于其体力值的角色摸两张牌;或令一名手牌数大于其体力值的角色弃置两张牌。此技能对每名角色只能使用一次。',
yongsi_info:'锁定技摸牌阶段你额外摸X张牌X为场上现存势力数。弃牌阶段你至少须弃置等同于场上现存势力数的牌不足则全弃。',
yicong_info:'锁定技只要你的体力值大于2点你计算与其他角色的距离时始终-1只要你的体力值为2点或更低其他角色计算与你的距离时始终+1。',
baobian_info:'锁定技若你的体力值为3或更少你视为拥有技能“挑衅”若你的体力值为2或更少你视为拥有技能“咆哮”若你的体力值为1你视为拥有技能“神速”。',
},
}