noname/character/refresh.js

4074 lines
127 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
game.import('character',function(lib,game,ui,get,ai,_status){
return {
name:'refresh',
characterSort:{
refresh:{
refresh_standard:["re_caocao","re_simayi","re_guojia","re_lidian","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_xushu","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_gongsunzan","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong"],
refresh_feng:['caoren','re_xiahouyuan','re_huangzhong','re_weiyan','re_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'],
refresh_huo:["re_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","xin_yuanshao","re_pangde"],
refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'],
refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','re_sunben','re_liushan','re_zhangzhang','re_zuoci'],
},
},
connect:true,
character:{
re_caocao:['male','wei',4,['hujia','new_rejianxiong'],['zhu']],
re_simayi:['male','wei',3,['refankui','reguicai']],
re_guojia:['male','wei',3,['tiandu','new_reyiji']],
re_lidian:['male','wei',3,['xunxun','wangxi']],
re_zhangliao:['male','wei',4,['new_retuxi']],
re_xuzhu:['male','wei',4,['new_reluoyi']],
re_xiahoudun:['male','wei',4,['reganglie','new_qingjian']],
re_zhangfei:['male','shu',4,['new_repaoxiao','new_tishen']],
re_zhaoyun:['male','shu',4,['longdan','new_yajiao']],
re_guanyu:['male','shu',4,['new_rewusheng','new_yijue']],
re_machao:['male','shu',4,['mashu','retieji']],
re_xushu:['male','shu',4,['zhuhai','qianxin']],
re_zhouyu:['male','wu',3,['reyingzi','refanjian']],
re_lvmeng:['male','wu',4,['keji','qinxue']],
re_ganning:['male','wu',4,['qixi','fenwei']],
re_luxun:['male','wu',3,['reqianxun','relianying']],
re_daqiao:['female','wu',3,['reguose','liuli']],
re_huanggai:['male','wu',4,['rekurou','zhaxiang']],
re_lvbu:['male','qun',5,['wushuang','new_liyu']],
re_gongsunzan:['male','qun',4,['qiaomeng','reyicong']],
re_huatuo:['male','qun',3,['jijiu','new_reqingnang']],
re_liubei:['male','shu',4,['rerende','jijiang'],['zhu']],
re_diaochan:['female','qun',3,['lijian','rebiyue']],
re_huangyueying:['female','shu',3,['rejizhi','reqicai']],
re_sunquan:['male','wu',4,['rezhiheng','rejiuyuan'],['zhu']],
re_sunshangxiang:['female','wu',3,['xiaoji','rejieyin']],
re_zhenji:['female','wei',3,['reluoshen','reqingguo']],
re_zhugeliang:['male','shu',3,['reguanxing','kongcheng']],
re_huaxiong:["male","qun",6,["new_reyaowu"]],
re_zhangjiao:['male','qun',3,['xinleiji','xinguidao','huangtian'],['zhu']],
xin_yuji:['male','qun',3,['reguhuo']],
re_zuoci:['male','qun',3,['rehuashen','rexinsheng']],
re_xiahouyuan:['male','wei',4,['xinshensu']],
caoren:['male','wei',4,['xinjushou','xinjiewei']],
re_huangzhong:['male','shu',4,['xinliegong']],
re_weiyan:['male','shu',4,['xinkuanggu','qimou']],
re_xiaoqiao:['female','wu',3,['retianxiang','hongyan']],
zhoutai:['male','wu',4,['buqu','fenji']],
re_pangde:['male','qun',4,['mashu','jianchu']],
re_xuhuang:['male','wei',4,['duanliang','jiezi']],
re_sp_zhugeliang:["male","shu",3,["rehuoji","rekanpo","bazhen"],[]],
re_xunyu:["male","wei",3,["quhu","rejieming"],[]],
re_dianwei:["male","wei",4,["reqiangxi"],[]],
re_yanwen:["male","qun",4,["reshuangxiong"],[]],
re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]],
xin_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']],
re_zhurong:['female','shu',4,['juxiang','relieren']],
re_menghuo:['male','shu',4,['huoshou','rezaiqi']],
re_dongzhuo:['male','qun',8,['rejiuchi','roulin','benghuai','baonue'],['zhu']],
re_sunjian:['male','wu',4,['gzyinghun','repolu']],
re_caopi:['male','wei',3,['rexingshang','refangzhu','songwei'],['zhu']],
re_dengai:['male','wei',4,['retuntian','zaoxian']],
re_jiangwei:['male','shu',4,['retiaoxin','zhiji']],
re_caiwenji:['female','qun',3,['rebeige','duanchang']],
re_liushan:['male','shu',3,['xiangle','refangquan','ruoyu'],['zhu']],
re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']],
re_zhangzhang:['male','wu',3,['rezhijian','guzheng']],
},
characterIntro:{
re_gongsunzan:'群雄之一。出身贵族,因母地位卑贱,只当了郡中小吏。他貌美,声音洪亮,机智善辩。后随卢植于缑氏山中读书,粗通经传。',
re_lidian:'字曼成,曹操麾下将领。李典深明大义,不与人争功,崇尚学习与高贵儒雅,尊重博学之士,在军中被称为长者。李典有长者之风,官至破虏将军,三十六岁去世。魏文帝曹丕继位后追谥号为愍侯。',
},
characterFilter:{
re_zuoci:function(mode){
return mode=='identity'||mode=='single';
}
},
perfectPair:{
sunben:['zhouyu','taishici','daqiao'],
},
skill:{
rehuashen:{
mode:['identity','single'],
audio:'huashen1',
unique:true,
direct:true,
content:function(){
"step 0"
event.videoId=lib.status.videoId++;
var cards=player.storage.rehuashen.character.slice(0);
if(player.isOnline2()){
player.send(function(cards,id){
var dialog=ui.create.dialog('是否发动【化身】?',[cards,'character']);
dialog.videoId=id;
},cards,event.videoId);
}
event.dialog=ui.create.dialog(get.prompt('rehuashen'),[cards,'character']);
event.dialog.videoId=event.videoId;
if(!event.isMine()){
event.dialog.style.display='none';
}
if(event.triggername=='rehuashen') event._result={control:'更换技能'};
else player.chooseControl('弃置化身','更换技能','cancel2');
"step 1"
event.control=result.control;
if(event.control=='cancel2'){
if(player.isOnline2()){
player.send('closeDialog',event.videoId);
}
event.dialog.close();
event.finish();return;
}
if(!event.logged){player.logSkill('rehuashen');event.logged=true}
var next=player.chooseButton(true).set('dialog',event.videoId);
if(event.control=='弃置化身'){
next.set('selectButton',[1,2]);
next.set('filterButton',function(button){
return button.link!=_status.event.current;
});
next.set('current',player.storage.rehuashen.current);
}
var prompt=event.control=='弃置化身'?'选择弃置至多两张化身':'选择要切换的化身';
var func=function(id,prompt){
var dialog=get.idDialog(id);
if(dialog){
dialog.content.childNodes[0].innerHTML=prompt;
}
}
if(player.isOnline2()){
player.send(func,event.videoId,prompt);
}
else if(event.isMine()){
func(event.videoId,prompt);
}
"step 2"
if(result.bool&&event.control!='弃置化身'){
event.card=result.links[0];
var func=function(card,id){
var dialog=get.idDialog(id);
if(dialog){
for(var i=0;i<dialog.buttons.length;i++){
if(dialog.buttons[i].link==card){
dialog.buttons[i].classList.add('selectedx');
}
else{
dialog.buttons[i].classList.add('unselectable');
}
}
}
}
if(player.isOnline2()){
player.send(func,event.card,event.videoId);
}
else if(event.isMine()){
func(event.card,event.videoId);
}
var list=player.storage.rehuashen.map[event.card].slice(0);
list.push('返回');
player.chooseControl(list);
}
else{
lib.skill.rehuashen.removeHuashen(player,result.links.slice(0));
lib.skill.rehuashen.addHuashens(player,result.links.length);
}
"step 3"
if(result.control=='返回'){
var func=function(id){
var dialog=get.idDialog(id);
if(dialog){
for(var i=0;i<dialog.buttons.length;i++){
dialog.buttons[i].classList.remove('selectedx');
dialog.buttons[i].classList.remove('unselectable');
}
}
}
if(player.isOnline2()){
player.send(func,event.videoId);
}
else if(event.isMine()){
func(event.videoId);
}
event._result={control:'更换化身'};
event.goto(1);
return;
}
if(player.isOnline2()){
player.send('closeDialog',event.videoId);
}
event.dialog.close();
if(event.control=='弃置化身') return;
if(player.storage.rehuashen.current!=event.card){
player.storage.rehuashen.current=event.card;
game.broadcastAll(function(character,player){
player.sex=lib.character[character][0];
player.group=lib.character[character][1];
player.node.name.dataset.nature=get.groupnature(player.group);
},event.card,player);
}
var link=result.control;
player.storage.rehuashen.current2=link;
if(!player.additionalSkills.rehuashen||!player.additionalSkills.rehuashen.contains(link)){
player.addAdditionalSkill('rehuashen',link);
player.flashAvatar('rehuashen',event.card);
game.log(player,'获得技能','#g【'+get.translation(link)+'】');
player.popup(link);
player.syncStorage('rehuashen');
player.updateMarks('rehuashen');
}
},
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]={
character:[],
map:{},
}
},
group:'rehuashen_init',
trigger:{
player:['phaseBegin','phaseEnd','rehuashen'],
},
filter:function(event,player,name){
if(name=='phaseBegin'&&game.phaseNumber==1) return false;
return player.storage.rehuashen&&player.storage.rehuashen.character.length>0;
},
addHuashen:function(player){
if(!player.storage.rehuashen) return;
_status.characterlist.randomSort();
var bool=false;
for(var i=0;i<_status.characterlist.length;i++){
var name=_status.characterlist[i];
if(name.indexOf('zuoci')!=-1||name.indexOf('key')==0) continue;
var skills=lib.character[name][3];
for(var j=0;j<skills.length;j++){
var info=lib.skill[skills[j]];
if(info.charlotte||(info.unique&&!info.gainable)||info.juexingji||info.limited||info.zhuSkill) skills.splice(j--,1);
}
if(skills.length){
player.storage.rehuashen.character.push(name);
player.storage.rehuashen.map[name]=skills;
_status.characterlist.remove(name);
return name;
}
}
},
addHuashens:function(player,num){
var list=[];
for(var i=0;i<num;i++){
var name=lib.skill.rehuashen.addHuashen(player);
if(name) list.push(name);
}
if(list.length){
game.log(player,'获得了',get.cnNumber(list.length)+'张','#g化身')
lib.skill.rehuashen.drawCharacter(player,list);
}
},
removeHuashen:function(player,links){
player.storage.rehuashen.character.removeArray(links);
_status.characterlist.addArray(links);
game.log(player,'移去了',get.cnNumber(links.length)+'张','#g化身')
},
drawCharacter:function(player,list){
game.broadcastAll(function(player,list){
if(player.isUnderControl(true)){
var cards=[];
for(var i=0;i<list.length;i++){
var cardname='huashen_card_'+list[i];
lib.card[cardname]={
fullimage:true,
image:'character:'+list[i]
}
lib.translate[cardname]=lib.translate[list[i]];
cards.push(game.createCard(cardname,'',''));
}
player.$draw(cards,'nobroadcast');
}
},player,list);
},
intro:{
onunmark:function(storage,player){
_status.characterlist.addArray(storage.character);
storage.character=[];
},
mark:function(dialog,storage,player){
if(storage&&storage.current) dialog.addSmall([[storage.current],'character']);
if(storage&&storage.current2) dialog.addText('【'+get.translation(storage.current2)+
'】'+lib.translate[storage.current2+'_info']);
if(storage&&storage.character.length){
if(player.isUnderControl(true)){
dialog.addSmall([storage.character,'character']);
}
else{
dialog.addText('共有'+get.cnNumber(storage.character.length)+'张“化身”');
}
}
else{
return '没有化身';
}
},
content:function(storage,player){
return '共有'+get.cnNumber(storage.character.length)+'张“化身”'
},
markcount:function(storage,player){
if(storage&&storage.character) return storage.character.length;
return 0;
},
},
},
rehuashen_init:{
trigger:{
global:'gameDrawAfter',
player:'enterGame',
},
forced:true,
popup:false,
content:function(){
lib.skill.rehuashen.addHuashens(player,3);
player.syncStorage('rehuashen');
player.markSkill('rehuashen');
var next=game.createEvent('rehuashen');
next.player=player;
next._trigger=trigger;
next.triggername='rehuashen';
next.setContent(lib.skill.rehuashen.content);
},
},
rexinsheng:{
mode:['identity','single'],
unique:true,
audio:'xinsheng',
trigger:{player:'damageEnd'},
frequent:true,
content:function(){
lib.skill.rehuashen.addHuashens(player,trigger.num);
player.syncStorage('rehuashen');
player.updateMarks('rehuashen');
},
},
"reguhuo":{
group:["reguhuo_guess","reguhuo_respond","reguhuo_wuxie"],
derivation:'rechanyuan',
enable:"chooseToUse",
filter:function (event,player){
if(!player.countCards('h')||player.hasSkill('reguhuo_phase')) return false;
var list=['sha','tao','shan','jiu','taoyuan','wugu','juedou','huogong','jiedao','tiesuo','guohe','shunshou','wuzhong','wanjian','nanman'];
if(get.mode()=='guozhan'){
list=list.concat(['xietianzi','shuiyanqijunx','lulitongxin','lianjunshengyan','chiling','diaohulishan','yuanjiao','huoshaolianying']);
}
for(var i=0;i<list.length;i++){
if(event.filterCard({name:list[i]},player)) return true;
}
return false;
},
chooseButton:{
dialog:function (){
var list=[];
for(var i=0;i<lib.inpile.length;i++){
var name=lib.inpile[i];
if(name=='wuxie') continue;
if(name=='sha'){
list.push(['基本','','sha']);
list.push(['基本','','sha','fire']);
list.push(['基本','','sha','thunder']);
}
else if(get.type(name)=='trick') list.push(['锦囊','',name]);
else if(get.type(name)=='basic') list.push(['基本','',name]);
}
return ui.create.dialog('蛊惑',[list,'vcard']);
},
filter:function (button,player){
var evt=_status.event.getParent();
if(evt&&evt.filterCard){
return evt.filterCard({name:button.link[2]},player,evt);
}
return true;
},
backup:function (links,player){
return {
filterCard:true,
selectCard:1,
viewAs:{name:links[0][2],nature:links[0][3]},
}
},
prompt:function (links,player){
return '将一张手牌当'+get.translation(links[0][2])+'使用';
},
},
ai:{
save:true,
respondShan:true,
respondSha:true,
skillTagFilter:function(player){
if(!player.countCards('h')||player.hasSkill('reguhuo_phase')) return false;
},
},
},
"reguhuo_guess":{
audio:'guhuo_guess',
trigger:{
player:"useCardBefore",
},
filter:function (event,player){
return event.skill=="reguhuo_backup"||event.skill=="reguhuo_wuxie";
},
forced:true,
direct:true,
priority:15,
content:function (){
'step 0'
player.logSkill('reguhuo_guess');
player.addTempSkill('reguhuo_phase');
player.popup(trigger.card.name,'metal');
player.lose(trigger.cards,ui.special);
player.line(trigger.targets,trigger.card.nature);
trigger.line=false;
event.prompt=get.translation(player)+'声明了'+get.translation(trigger.card.name)+',是否质疑?';
event.guessers=game.filterPlayer(function(current){
return current!=player&&!current.hasSkill('rechanyuan');
});
event.guessers.sort(lib.sort.seat);
event.ally=[];
event.betray=[];
'step 1'
if(event.guessers.length==0) event.goto(3);
else{
event.guessers[0].chooseControl('质疑','不质疑').set('prompt',event.prompt).set('ai',function(){
if(get.attitude(event.guessers[0],player)>0) return '不质疑';
return Math.random()<0.5?'不质疑':'质疑';
});
}
'step 2'
if(!result.control) result.control='不质疑';
event.guessers[0].chat(result.control);
game.delay();
if(result.control=='不质疑'){
game.log(event.guessers[0],'#g不质疑');
event.ally.push(event.guessers[0]);
}else{
game.log(event.guessers[0],'#y质疑');
event.betray.push(event.guessers[0]);
}
event.guessers.remove(event.guessers[0]);
if(event.guessers.length) event.goto(1);
'step 3'
player.showCards(trigger.cards);
if(event.betray.length){
if(trigger.card.name==trigger.cards[0].name){
event.fake=false;
}
else{
event.fake=true;
game.log(player,'使用的','#y'+get.translation(trigger.card.name),'作废了');
game.cardsDiscard(trigger.cards);
trigger.cancel();
game.asyncDraw(event.betray);
if(trigger.name=='useCard'&&trigger.parent) trigger.parent.goto(0);
}
}
else event.finish();
'step 4'
if(event.fake){
game.delay();
event.finish();
}
'step 5'
var target=event.betray.shift();
event.target=target;
target.chooseToDiscard('弃置一张牌或失去一点体力','he').ai=lib.skill.qiangxi.check;
'step 6'
if(!result.bool) target.loseHp();
'step 7'
target.addSkill('rechanyuan');
if(event.betray.length) event.goto(5);
},
},
"reguhuo_respond":{
trigger:{
player:"chooseToRespondBegin",
},
filter:function (event,player){
if(event.responded) return false;
if(!event.filterCard({name:'shan'})&&!event.filterCard({name:'sha'})) return false;
if(!player.countCards('h')||player.hasSkill('reguhuo_phase')) return false;
return true;
},
direct:true,
content:function (){
'step 0'
if(trigger.filterCard({name:'shan'})&&lib.filter.cardRespondable({name:'shan'},player,trigger)) event.name='shan';
else event.name='sha';
player.chooseCard('是否发动【蛊惑】,将一张手牌当做'+get.translation(event.name)+'打出?');
'step 1'
if(result.bool){
player.logSkill('reguhuo_guess');
player.addTempSkill('reguhuo_phase');
player.popup(event.name,'metal');
player.lose(result.cards,ui.special);
event.card=result.cards[0];
event.prompt=get.translation(player)+'声明了'+get.translation(event.name)+',是否质疑?';
event.guessers=game.filterPlayer(function(current){
return current!=player&&!current.hasSkill('rechanyuan');
});
event.guessers.sort(lib.sort.seat);
event.ally=[];
event.betray=[];
}
else event.finish();
'step 2'
if(event.guessers.length==0) event.goto(4);
else{
event.guessers[0].chooseControl('质疑','不质疑').set('prompt',event.prompt).set('ai',function(){
if(get.attitude(event.guessers[0],player)>0) return '不质疑';
return Math.random()<0.5?'不质疑':'质疑';
});
}
'step 3'
if(!result.control) result.control='不质疑';
event.guessers[0].chat(result.control);
game.delay();
if(result.control=='不质疑'){
game.log(event.guessers[0],'#g不质疑');
event.ally.push(event.guessers[0]);
}else{
game.log(event.guessers[0],'#y质疑');
event.betray.push(event.guessers[0]);
}
event.guessers.remove(event.guessers[0]);
if(event.guessers.length) event.goto(2);
'step 4'
var bool=true;
player.showCards(event.card);
if(event.betray.length){
if(event.name==event.card.name){
event.fake=false;
}
else{
event.fake=true;
game.log(player,'打出的','#y'+get.translation(event.name),'作废了');
game.cardsDiscard(event.card);
bool=false;
game.asyncDraw(event.betray);
}
}
else event.finish();
if(bool){
trigger.untrigger();
trigger.responded=true;
trigger.result={bool:true,card:{name:event.name},cards:[event.card]};
}
'step 5'
if(event.fake){
game.delay();
event.finish();
}
'step 6'
var target=event.betray.shift();
event.target=target;
target.chooseToDiscard('弃置一张牌或失去一点体力','he').ai=lib.skill.qiangxi.check;
'step 7'
if(!result.bool) target.loseHp();
'step 8'
if(target.isAlive()) target.addSkill('rechanyuan');
if(event.betray.length) event.goto(6);
},
ai:{
order:4,
useful:-1,
value:-1,
},
},
"reguhuo_wuxie":{
log:false,
silent:true,
popup:false,
enable:"chooseToUse",
filterCard:true,
viewAsFilter:function (player){
return !player.hasSkill('reguhuo_phase')&&player.countCards('h')>0;
},
viewAs:{
name:"wuxie",
},
check:function(card){
if(card.name=='wuxie') return 1000;
return 0;
},
prompt:"将一张手牌当无懈可击使用",
threaten:1.2,
},
reguhuo_phase:{},
rechanyuan:{
//charlotte:true,
firstDo:true,
trigger:{
player:["phaseBefore","changeHp"],
},
priority:99,
forced:true,
popup:false,
unique:true,
content:function (){
if(player.hp<=1){
var skills=player.getSkills(true,false);
for(var i=0;i<skills.length;i++){
var info=get.info(skills[i]);
if(skills[i]=='chanyuan'||skills[i]=='rechanyuan'||info.charlotte){
skills.splice(i--,1);
}
}
player.disableSkill('rechanyuan',skills);
}
else player.enableSkill('rechanyuan');
},
mark:true,
intro:{
content:function (storage,player,skill){
var str='<li>锁定技你不能质疑于吉只要你的体力值不大于1你的其他技能便全部失效。';
var list=[];
for(var i in player.disabledSkills){
if(player.disabledSkills[i].contains(skill)){
list.push(i)
}
}
if(list.length){
str+='<br><li>失效技能:';
for(var i=0;i<list.length;i++){
if(lib.translate[list[i]+'_info']){
str+=get.translation(list[i])+'、';
}
}
return str.slice(0,str.length-1);
}else return str;
},
},
init:function (player,skill){
if(player.hp<=1){
var skills=player.getSkills(true,false);
for(var i=0;i<skills.length;i++){
var info=get.info(skills[i]);
if(skills[i]=='chanyuan'||skills[i]=='rechanyuan'||info.charlotte){
skills.splice(i--,1);
}
}
player.disableSkill(skill,skills);
}
},
onremove:function (player,skill){
player.enableSkill(skill);
},
locked:true,
},
botu:{
audio:2,
group:'botu_kanade',
trigger:{player:'phaseAfter'},
frequent:true,
filter:function(event,player){
return player.storage.botu&&player.storage.botu.length>=4;
},
content:function(){
player.insertPhase();
},
subSkill:{
kanade:{
trigger:{player:['useCard','phaseBefore']},
silent:true,
content:function(){
if(trigger.name=='phase') player.storage.botu=[];
else{
var suit=get.suit(trigger.card);
if(suit) player.storage.botu.add(suit);
}
},
},
},
},
xinleiji:{
group:'xinleiji_misa',
audio:2,
audioname:['boss_qinglong'],
trigger:{player:['useCard','respond']},
filter:function(event,player){
return event.card.name=='shan'||event.name=='useCard'&&event.card.name=='shandian';
},
judgeCheck:function(card,bool){
var suit=get.suit(card);
if(suit=='spade'){
if(bool&&card.number>1&&card.number<10) return 5;
return 4;
}
if(suit=='club') return 2;
return 0;
},
content:function(){
player.judge(lib.skill.xinleiji.judgeCheck);
},
ai:{
useShan:true,
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')){
var hastarget=game.hasPlayer(function(current){
return get.attitude(target,current)<0;
});
var be=target.countCards('e',{color:'black'});
if(target.countCards('h','shan')&&be){
if(!target.hasSkill('xinguidao')) return 0;
return [0,hastarget?target.countCards('he')/2:0];
}
if(target.countCards('h','shan')&&target.countCards('h')>2){
if(!target.hasSkill('xinguidao')) return 0;
return [0,hastarget?target.countCards('h')/4:0];
}
if(target.countCards('h')>3||(be&&target.countCards('h')>=2)){
return [0,0];
}
if(target.countCards('h')==0){
return [1.5,0];
}
if(target.countCards('h')==1&&!be){
return [1.2,0];
}
if(!target.hasSkill('xinguidao')) return [1,0.05];
return [1,Math.min(0.5,(target.countCards('h')+be)/4)];
}
}
}
}
},
xinleiji_misa:{
audio:'xinleiji',
trigger:{player:'judgeAfter'},
direct:true,
filter:function(event,player){
return event.judgestr!='暴虐'&&event.judgestr!='助祭'&&['spade','club'].contains(event.result.suit);
},
content:function(){
'step 0'
event.num=1+['club','spade'].indexOf(trigger.result.suit);
event.logged=false;
if(event.num==1&&player.isDamaged()){
event.logged=true;
player.logSkill('xinleiji');
player.recover();
}
player.chooseTarget('雷击:是否对一名角色造成'+event.num+'点雷电伤害?',lib.filter.notMe).ai=function(target){
var player=_status.event.player;
return get.damageEffect(target,player,player,'thunder');
};
'step 1'
if(result.bool&&result.targets&&result.targets.length){
if(!event.logged) player.logSkill('xinleiji',result.targets);
else player.line(result.targets,'thunder');
result.targets[0].damage(event.num,'thunder');
}
},
},
xinguidao:{
audio:2,
trigger:{global:'judge'},
filter:function(event,player){
return player.countCards('he',{color:'black'})>0;
},
direct:true,
content:function(){
"step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('xinguidao'),'he',function(card){
return get.color(card)=='black';
}).set('ai',function(card){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
var judging=_status.event.judging;
var result=trigger.judge(card)-trigger.judge(judging);
var attitude=get.attitude(player,trigger.player);
if(attitude==0||result==0){
if(trigger.player!=player) return 0;
if(game.hasPlayer(function(current){
return get.attitude(player,current)<0;
})){
var checkx=lib.skill.xinleiji.judgeCheck(card,true)-lib.skill.xinleiji.judgeCheck(judging);
if(checkx>0) return checkx;
}
return 0;
};
if(attitude>0){
return result;
}
else{
return -result;
}
}).set('judging',trigger.player.judging[0]);
"step 1"
if(result.bool){
player.respond(result.cards,'highlight','xinguidao','noOrdering');
}
else{
event.finish();
}
"step 2"
if(result.bool){
player.$gain2(trigger.player.judging[0]);
player.gain(trigger.player.judging[0]);
var card=result.cards[0];
if(get.suit(card)=='spade'&&card.number>1&&card.number<10) player.draw('nodelay');
trigger.player.judging[0]=result.cards[0];
trigger.orderingCards.addArray(result.cards);
game.log(trigger.player,'的判定牌改为',result.cards[0]);
}
"step 3"
game.delay(2);
},
ai:{
tag:{
rejudge:1
}
}
},
reqingguo:{
audio:'qingguo',
enable:['chooseToRespond','chooseToUse'],
filterCard:function(card){
return get.color(card)=='black';
},
position:'he',
viewAs:{name:'shan'},
viewAsFilter:function(player){
if(!player.countCards('he',{color:'black'})) return false;
},
prompt:'将一张黑色牌当闪打出',
check:function(){return 1},
ai:{
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('he',{color:'black'})) return false;
},
effect:{
target:function(card,player,target,current){
if(get.tag(card,'respondShan')&&current<0) return 0.6
}
}
}
},
reqiangxi:{
subSkill:{
off:{
sub:true,
},
},
audio:"qiangxi",
enable:"phaseUse",
filterCard:function (card){
return get.subtype(card)=='equip1';
},
selectCard:function (){
return [0,1];
},
filterTarget:function (card,player,target){
if(player==target) return false;
if(target.hasSkill('reqiangxi_off')) return false;
return get.distance(player,target,'attack')<=1;
},
content:function (){
"step 0"
if(cards.length==0){
player.loseHp();
}
"step 1"
target.addTempSkill('reqiangxi_off');
target.damage('nocard');
},
check:function (card){
return 10-get.value(card);
},
position:"he",
ai:{
order:8.5,
result:{
target:function (player,target){
if(!player.countCards('he',{type:'equip'})){
if(player.hp<2) return 0;
if(target.hp>=player.hp) return 0;
}
return get.damageEffect(target,player);
},
},
},
threaten:1.5,
},
rehuoji:{
position:"he",
audio:"huoji",
enable:"chooseToUse",
filterCard:function (card){
return get.color(card)=='red';
},
viewAs:{
name:"huogong",
nature:"fire",
},
viewAsFilter:function (player){
if(!player.countCards('he',{color:'red'})) return false;
},
prompt:"将一张红色牌当火攻使用",
check:function (card){
var player=_status.currentPhase;
if(player.countCards('h')>player.hp){
return 6-get.value(card);
}
return 4-get.value(card)
},
ai:{
basic:{
order:4,
value:[3,1],
useful:1,
},
wuxie:function (target,card,player,current,state){
if(get.attitude(current,player)>=0&&state>0) return false;
},
result:{
player:function (player){
var nh=player.countCards('h');
if(nh<=player.hp&&nh<=4&&_status.event.name=='chooseToUse'){
if(typeof _status.event.filterCard=='function'&&
_status.event.filterCard({name:'huogong'})){
return -10;
}
if(_status.event.skill){
var viewAs=get.info(_status.event.skill).viewAs;
if(viewAs=='huogong') return -10;
if(viewAs&&viewAs.name=='huogong') return -10;
}
}
return 0;
},
target:function (player,target){
if(target.hasSkill('huogong2')||target.countCards('h')==0) return 0;
if(player.countCards('h')<=1) return 0;
if(target==player){
if(typeof _status.event.filterCard=='function'&&
_status.event.filterCard({name:'huogong'})){
return -1.5;
}
if(_status.event.skill){
var viewAs=get.info(_status.event.skill).viewAs;
if(viewAs=='huogong') return -1.5;
if(viewAs&&viewAs.name=='huogong') return -1.5;
}
return 0;
}
return -1.5;
},
},
tag:{
damage:1,
fireDamage:1,
natureDamage:1,
norepeat:1,
},
},
},
rekanpo:{
audio:"kanpo",
position:"he",
enable:"chooseToUse",
filterCard:function (card){
return get.color(card)=='black';
},
viewAsFilter:function (player){
return player.countCards('he',{color:'black'})>0;
},
viewAs:{
name:"wuxie",
},
prompt:"将一张黑色手牌当无懈可击使用",
check:function (card){return 8-get.value(card)},
threaten:1.2,
ai:{
basic:{
useful:[6,4],
value:[6,4],
},
result:{
player:1,
},
expose:0.2,
},
},
rejieming:{
audio:"jieming",
trigger:{
player:"damageEnd",
},
direct:true,
content:function (){
"step 0"
event.count=trigger.num;
"step 1"
player.chooseTarget(get.prompt('rejieming'),'令一名角色摸两张牌。然后若其手牌数少于体力上限,你摸一张牌').set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>2){
if((target.maxHp-target.countCards('h'))>2) return 2*att;
return att;
}
return att/3;
});
"step 2"
if(result.bool){
event.current=result.targets[0];
player.logSkill('rejieming',event.current);
player.line(event.current,'thunder');
event.current.draw(2);
event.count--;
}
else event.finish();
"step 3"
if(event.current.countCards('h')<event.current.maxHp){
player.draw();
}
if(event.count>0) event.goto(1);
},
ai:{
maixie:true,
"maixie_hp":true,
effect:{
target:function (card,player,target,current){
if(get.tag(card,'damage')&&target.hp>1){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
var max=0;
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(get.attitude(target,players[i])>0){
max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max);
}
}
switch(max){
case 0:return 2;
case 1:return 1.5;
case 2:return [1,2];
default:return [0,max];
}
}
if((card.name=='tao'||card.name=='caoyao')&&
target.hp>1&&target.countCards('h')<=target.hp) return [0,0];
},
},
},
},
reshuangxiong:{
trigger:{
player:"phaseDrawBefore",
},
group:"reshuangxiong2",
audio:"shuangxiong",
check:function (event,player){
if(player.countCards('h')>player.hp) return true;
if(player.countCards('h')>3) return true;
return false;
},
content:function (){
"step 0"
trigger.cancel();
event.cards=get.cards(2);
event.videoId=lib.status.videoId++;
game.broadcastAll(function(player,id,cards){
var str;
if(player==game.me&&!_status.auto){
str='【双雄】选择获得其中一张牌';
}
else{
str='双雄';
}
var dialog=ui.create.dialog(str,cards);
dialog.videoId=id;
},player,event.videoId,event.cards);
event.time=get.utc();
game.addVideo('showCards',player,['双雄',get.cardsInfo(event.cards)]);
game.addVideo('delay',null,2);
"step 1"
var next=player.chooseButton([1,1],true);
next.set('dialog',event.videoId);
next.set('ai',function(button){
var player=_status.event.player;
var color=get.color(button.link);
var value=get.value(button.link,player);
if(player.countCards('h',{color:color})>player.countCards('h',['red','black'].remove(color)[0])) value+=5;
return value;
});
"step 2"
if(result.bool&&result.links){
var cards2=[];
for(var i=0;i<result.links.length;i++){
cards2.push(result.links[i]);
cards.remove(result.links[i]);
}
game.cardsDiscard(cards);
event.card2=cards2[0];
}
var time=1000-(get.utc()-event.time);
if(time>0){
game.delay(0,time);
}
"step 3"
game.broadcastAll('closeDialog',event.videoId);
var card2=event.card2;
player.gain(card2,'gain2');
player.addTempSkill('shuangxiong2');
player.storage.shuangxiong=get.color(card2);
game.delay();
},
},
"reshuangxiong2":{
trigger:{
player:"damageEnd",
},
forced:true,
silent:true,
popup:false,
filter:function (event,player){
return event.parent.skill=='shuangxiong2'&&event.parent.targetCards.length>0;
},
content:function (){
"step 0"
var cards=trigger.parent.targetCards.slice(0);
for(var i=0;i<cards.length;i++){
if(get.position(cards[i])!='d') cards.remove(cards[i--]);
}
if(!cards.length) event.finish();
else{
event.cards=cards;
player.chooseBool('是否获得'+get.translation(event.cards)+'?').ai=function(){
return true;
};
}
"step 1"
if(result.bool) player.gain(cards,'gain2');
},
},
"new_yajiao":{
audio:"reyajiao",
trigger:{
player:["respond","useCard"],
},
frequent:true,
filter:function (event,player){
return player!=_status.currentPhase&&get.itemtype(event.cards)=='cards';
},
content:function (){
"step 0"
event.card=get.cards();
player.showCards(event.card);
event.same=false;
if(get.type(event.card[0],'trick')==get.type(trigger.card,'trick')) event.same=true;
player.chooseTarget('选择获得此牌的角色',true).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(_status.event.du){
if(target.hasSkillTag('nodu')) return 0;
return -att;
}
if(!_status.event.same) att+=target==_status.event.player?1:0;
if(att>0){
return att+Math.max(0,5-target.countCards('h'));
}
return att;
}).set('du',event.card.name=='du').set('same',event.same);
"step 1"
if(result.targets){
player.line(result.targets,'green');
result.targets[0].gain(event.card,'gain2');
if(!event.same) player.chooseToDiscard(true,'he');
}
},
ai:{
effect:{
target:function (card,player){
if(get.tag(card,'respond')&&player.countCards('h')>1) return [1,0.2];
},
},
},
},
"new_liyu":{
audio:"liyu",
trigger:{
source:"damageSource",
},
filter:function (event,player){
if(event._notrigger.contains(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.player!=player&&event.player.isAlive()&&event.player.countGainableCards(player,'hej')>0;
},
direct:true,
content:function (){
'step 0'
player.gainPlayerCard(get.prompt('new_liyu',trigger.player),trigger.player,'hej','visibleMove').set('ai',function(card){
var player=_status.event.player;
var evt=_status.event.target;
if(get.attitude(player,evt)>0&&get.position(card)=='j') return 4+get.value(card);
if(get.type(card)=='equip'){
if(get.attitude(player,evt)>0&&game.hasPlayer(function(current){
return (player.canUse({name:'juedou'},current)&&current!=evt.target&&get.effect(current,{name:'juedou'},player,player)>2);
})){
return 5;
}
else if(game.hasPlayer(function(current){
return (player.canUse({name:'juedou'},current)&&current!=evt&&current!=player&&get.effect(current,{name:'juedou'},player,player)<0);
})){
return 1;
}
else return 4;
};
return 3;
}).set('logSkill',['new_liyu',trigger.player]);
'step 1'
if(result.bool){
if(get.type(result.cards[0])!='equip'){
trigger.player.draw();
event.finish();
}
else{
if(!game.hasPlayer(function(current){
return current!=player&&current!=trigger.player&&player.canUse('juedou',current);
})){
event.finish();
return;
}
trigger.player.chooseTarget(true,function(card,player,target){
var evt=_status.event.getParent();
return evt.player.canUse({name:'juedou'},target)&&target!=_status.event.player;
},'请选择一名角色,视为'+get.translation(player)+'对其使用【决斗】').set('ai',function(target){
var evt=_status.event.getParent();
return get.effect(target,{name:'juedou'},evt.player,_status.event.player)-2;
});
}
}
else event.finish();
'step 2'
if(result.targets){
player.useCard({name:'juedou'},result.targets[0],'noai');
}
},
ai:{
halfneg:true,
},
},
"new_retuxi":{
audio:"retuxi",
trigger:{
player:"phaseDrawBegin",
},
direct:true,
//priority:-10,
filter:function (event){
return event.num>0;
},
content:function (){
"step 0"
var num=get.copy(trigger.num);
if(get.mode()=='guozhan'&&num>2) num=2;
player.chooseTarget(get.prompt('new_retuxi'),'获得至多'+get.translation(num)+'名角色的各一张手牌,然后少摸等量的牌',[1,num],function(card,player,target){
return target.countCards('h')>0&&player!=target;
},function(target){
var att=get.attitude(_status.event.player,target);
if(target.hasSkill('tuntian')) return att/10;
return 1-att;
});
"step 1"
if(result.bool){
player.logSkill('new_retuxi',result.targets);
player.gainMultiple(result.targets);
trigger.num-=result.targets.length;
}
else{
event.finish();
}
"step 2"
if(trigger.num<=0) game.delay();
},
ai:{
threaten:1.6,
expose:0.2,
},
},
"new_reyiji":{
audio:"reyiji",
trigger:{
player:"damageEnd",
},
frequent:true,
filter:function (event){
return (event.num>0)
},
content:function (){
"step 0"
event.count=1;
"step 1"
player.draw(2);
event.given=0;
"step 2"
player.chooseCardTarget({
filterCard:true,
selectCard:[1,2-event.given],
filterTarget:function(card,player,target){
return player!=target&&target!=event.temp;
},
ai1:function(card){
if(ui.selected.cards.length>0) return -1;
if(card.name=='du') return 20;
return (_status.event.player.countCards('h')-_status.event.player.hp);
},
ai2:function(target){
var att=get.attitude(_status.event.player,target);
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return 1-att;
}
return att-4;
},
prompt:'请选择要送人的卡牌'
});
"step 3"
if(result.bool){
player.line(result.targets,'green');
result.targets[0].gain(result.cards,player,'giveAuto');
event.given+=result.cards.length;
if(event.given<2){
event.temp=result.targets[0];
event.goto(2);
}
else if(event.count<trigger.num){
delete event.temp;
event.count++;
event.goto(1);
}
}
else if(event.count<trigger.num){
delete event.temp;
event.num=1;
event.count++;
event.goto(1);
}
},
ai:{
maixie:true,
"maixie_hp":true,
result:{
effect:function (card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
var num=1;
if(get.attitude(player,target)>0){
if(player.needsToDiscard()){
num=0.7;
}
else{
num=0.5;
}
}
if(player.hp>=4) return [1,num*2];
if(target.hp==3) return [1,num*1.5];
if(target.hp==2) return [1,num*0.5];
}
},
},
threaten:0.6,
},
},
"new_rejianxiong":{
audio:"rejianxiong",
trigger:{
player:"damageEnd",
},
content:function (){
"step 0"
if(get.itemtype(trigger.cards)=='cards'&&get.position(trigger.cards[0],true)=='o'){
player.gain(trigger.cards,"gain2");
}
player.draw('nodelay');
},
ai:{
maixie:true,
"maixie_hp":true,
effect:{
target:function (card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
if(get.tag(card,'damage')&&player!=target) return [1,0.6];
},
},
},
},
"new_reluoyi":{
audio:"reluoyi",
trigger:{
player:"phaseDrawBegin",
},
forced:true,
locked:false,
content:function (){
"step 0"
var cards=get.cards(3);
event.cards=cards;
player.showCards(event.cards,'裸衣');
var cardsx=[];
for(var i=0;i<cards.length;i++){
if(get.type(cards[i])=='basic'||cards[i].name=='juedou'||
(get.type(cards[i])=='equip'&&get.subtype(cards[i])!='equip1')){
cardsx.push(cards[i]);
}
}
player.chooseBool("是否放弃摸牌,改为获得"+get.translation(cardsx)+"").ai=function(event,player){
var num=3
for(var i=0;i<event.cards.length;i++){
if(get.type(event.cards[i])!='basic'&&event.cards[i].name!='juedou'&&
(get.type(event.cards[i])!='equip'||get.subtype(event.cards[i])!='equip1')){
num--;
}
}
return num>=trigger.num;
};
"step 1"
if(result.bool){
var cards2=[];
for(var i=0;i<cards.length;i++){
if(get.type(cards[i])!='basic'&&cards[i].name!='juedou'&&
(get.type(cards[i])!='equip'||get.subtype(cards[i])!='equip1')){
cards2.push(cards[i]);
cards.splice(i--,1);
}
}
player.gain(cards,'gain2');
game.cardsDiscard(cards2);
player.addTempSkill('reluoyi2',{player:'phaseBefore'});
trigger.cancel();
}
else game.cardsDiscard(cards);
},
},
"new_rewusheng":{
mod:{
targetInRange:function (card){
if(get.suit(card)=='diamond'&&(_status.event.skill=='new_rewusheng'||card.name=='sha')) return true;
},
},
audio:"wusheng",
audioname:['re_guanyu','guanzhang','jsp_guanyu','guansuo'],
enable:["chooseToRespond","chooseToUse"],
filterCard:function (card,player){
if(get.zhu(player,'shouyue')) return true;
return get.color(card)=='red';
},
position:"he",
viewAs:{
name:"sha",
},
viewAsFilter:function (player){
if(get.zhu(player,'shouyue')){
if(!player.countCards('he')) return false;
}
else{
if(!player.countCards('he',{color:'red'})) return false;
}
},
prompt:"将一张红色牌当杀使用或打出",
check:function (card){return 4-get.value(card)},
ai:{
skillTagFilter:function (player){
if(get.zhu(player,'shouyue')){
if(!player.countCards('he')) return false;
}
else{
if(!player.countCards('he',{color:'red'})) return false;
}
},
respondSha:true,
basic:{
useful:[5,1],
value:[5,1],
},
order:function (){
if(_status.event.player.hasSkillTag('presha',true,null,true)) return 10;
return 3;
},
result:{
target:function (player,target){
if(player.hasSkill('jiu')&&!target.getEquip('baiyin')){
if(get.attitude(player,target)>0){
return -6;
}
else{
return -3;
}
}
return -1.5;
},
},
tag:{
respond:1,
respondShan:1,
damage:function (card){
if(card.nature=='poison') return;
return 1;
},
natureDamage:function (card){
if(card.nature) return 1;
},
fireDamage:function (card,nature){
if(card.nature=='fire') return 1;
},
thunderDamage:function (card,nature){
if(card.nature=='thunder') return 1;
},
poisonDamage:function (card,nature){
if(card.nature=='poison') return 1;
},
},
},
},
"new_yijue":{
audio:"yijue",
enable:"phaseUse",
usable:1,
position:"he",
filterTarget:function (card,player,target){
return player!=target&&target.countCards('h');
},
filterCard:true,
check:function (card){
return 8-get.value(card);
},
content:function (){
"step 0"
target.chooseCard(true).ai=function(card){
var player=_status.event.player;
if((player.hasShan()||player.hp<3)&&get.color(card)=='black') return 0.5;
return Math.max(1,20-get.value(card));
};
"step 1"
target.showCards(result.cards);
event.card2=result.cards[0];
if(get.color(event.card2)=='black'){
if(!target.hasSkill('fengyin')){
target.addTempSkill('fengyin');
}
target.addTempSkill('new_yijue2');
event.finish();
}
else{
player.gain(event.card2,target,'give');
if(target.hp<target.maxHp){
player.chooseBool('是否让目标回复一点体力?').ai=function(event,player){
return get.recoverEffect(target,player,player)>0;
};
}
}
"step 2"
if(result.bool){
target.recover();
}
},
ai:{
result:{
target:function (player,target){
var hs=player.getCards('h');
if(hs.length<3) return 0;
if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){
return 1;
}
if(player.canUse('sha',target)&&(player.countCards('h','sha')||player.countCards('he',{color:'red'}))){
return -2;
}
return -0.5;
},
},
order:9,
},
},
"new_yijue2":{
trigger:{
player:"damageBegin1",
},
filter:function (event){
return event.source&&event.source.hasSkill('new_yijue')&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink();
},
silent:true,
popup:false,
forced:true,
content:function (){
trigger.num++;
},
mark:true,
mod:{
cardEnabled2:function (card){
if(get.position(card)=='h') return false;
},
},
intro:{
content:"不能使用或打出手牌",
},
},
"new_repaoxiao":{
audio:"paoxiao",
inherit:"paoxiao",
mod:{
targetInRange:function (card,player){
if(card.name=='sha'&&get.cardCount({name:'sha'},player)>0) return true;
},
cardUsable:function (card,player,num){
if(card.name=='sha') return Infinity;
},
},
ai:{
unequip:true,
skillTagFilter:function (player,tag,arg){
if(!get.zhu(player,'shouyue')) return false;
if(arg&&arg.name=='sha') return true;
return false;
},
},
},
"new_tishen":{
trigger:{
player:"phaseUseEnd",
},
check:function (event,player){
var num=0;
var he=player.getCards('he');
for(var i=0;i<he.length;i++){
if(get.type(he[i],'trick')=='trick'){
num++;
}
if(get.type(he[i])=='equip'){
var subtype=get.subtype(he[i]);
if(subtype=='equip3'||subtype=='equip4'){
num++;
}
}
}
return num==0||num<=player.countCards('h')-player.maxHandcard;
},
content:function (){
var list=[];
var he=player.getCards('he');
for(var i=0;i<he.length;i++){
if(get.type(he[i],'trick')=='trick'){
list.push(he[i]);
}
if(get.type(he[i])=='equip'){
var subtype=get.subtype(he[i]);
if(subtype=='equip3'||subtype=='equip4'){
list.push(he[i]);
}
}
}
if(list.length) player.discard(list);
player.addTempSkill('new_tishen2',{player:'phaseBefore'});
},
audio:"retishen",
},
"new_tishen2":{
trigger:{
target:"shaUnhirt",
},
filter:function (event,player){
if(get.itemtype(event.cards)!='cards') return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].isInPile()){
return true;
}
}
return false;
},
forced:true,
nopop:true,
content:function (){
player.logSkill('new_tishen');
var list=[];
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].isInPile()){
list.push(trigger.cards[i]);
}
}
player.gain(list,'gain2');
},
},
"new_qingjian":{
audio:"qingjian",
//unique:true,
trigger:{
player:"gainAfter",
},
direct:true,
usable:1,
filter:function (event,player){
if(event.parent.parent.name=='phaseDraw') return false;
return event.cards&&event.cards.length>0
},
content:function (){
"step 0"
player.chooseCardTarget({
position:'he',
filterCard:true,
selectCard:[1,Infinity],
filterTarget:function(card,player,target){
return player!=target;
},
ai1:function(card){
if(get.attitude(_status.event.player,_status.currentPhase)<0&&_status.currentPhase.needsToDiscard()&&card.name!='du') return -1;
for(var i=0;i<ui.selected.cards.length;i++){
if(get.type(ui.selected.cards[i])==get.type(card)||(ui.selected.cards[i].name=='du'&&card.name!='du')) return -1;
};
if(card.name=='du') return 20;
return (_status.event.player.countCards('h')-_status.event.player.hp);
},
ai2:function(target){
if(get.attitude(_status.event.player,_status.currentPhase)<0) return -1;
var att=get.attitude(_status.event.player,target);
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return 1-att;
}
if(target.countCards('h')>_status.event.player.countCards('h')) return 0;
return att-4;
},
prompt:get.prompt2('new_qingjian'),
});
"step 1"
if(result.bool){
var target=result.targets[0];
var cards=result.cards;
var type=[];
for(var i=0;i<cards.length;i++){
if(!type.contains(get.type(cards[i],'trick'))) type.push(get.type(cards[i],'trick'));
}
player.storage.new_qingjian++;
player.logSkill('new_qingjian',target);
target.gain(cards,player,'give');
_status.currentPhase.addTempSkill('qingjian_add');
_status.currentPhase.storage.qingjian_add=type.length;
}
else{
player.storage.counttrigger.new_qingjian--;
}
},
ai:{
expose:0.3,
},
},
"qingjian_add":{
mark:true,
intro:{
content:function (storage,player){
return '手牌上限+'+player.storage.qingjian_add;
},
},
mod:{
maxHandcard:function (player,num){
return num+player.storage.qingjian_add;
},
},
onremove:function (player){
delete player.storage.qingjian_add;
},
},
"new_reqingnang":{
subSkill:{
off:{
sub:true,
},
"off2":{
sub:true,
},
},
audio:"qingnang",
enable:"phaseUse",
filterCard:true,
check:function (card,event,player){
if(game.countPlayer(function(current){
return (get.recoverEffect(current,player,player)>0&&get.attitude(player,current)>2);
})>1&&get.color(card)=='black'&&player.countCards('h',{color:'red'})>0) return 3-get.value(card);
return 9-get.value(card);
},
filter:function (event,player){
return !player.hasSkill('new_reqingnang_off2');
},
filterTarget:function (card,player,target){
if(target.hp>=target.maxHp||target.hasSkill('new_reqingnang_off')) return false;
return true;
},
content:function (){
target.addTempSkill('new_reqingnang_off');
if(get.color(cards[0])=='black') player.addTempSkill('new_reqingnang_off2');
target.recover();
},
ai:{
order:9,
result:{
target:function (player,target){
if(target.hp==1) return 5;
if(player==target&&player.countCards('h')>player.hp) return 5;
return 2;
},
},
threaten:2,
},
},
"new_reyaowu":{
trigger:{
player:"damageBegin3",
},
//priority:1,
audio:"yaowu",
filter:function (event){
return event.card&&event.card.name=='sha';
},
forced:true,
check:function (event){
if(event.card&&(event.card.name=='sha')){
return get.color(event.card)=='black';
}
},
content:function (){
if(get.color(trigger.card)!='red') player.draw();
else trigger.source.chooseDrawRecover(true);
},
ai:{
effect:{
target:function (card,player,target,current){
if(card.name=='sha'&&(get.color(card)=='red')){
return [1,-2];
}
if(card.name=='sha'&&(get.color(card)=='black')){
return [0,-0.6];
}
},
},
},
},
reguanxing:{
audio:'guanxing',
audioname:['jiangwei','re_jiangwei'],
trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
frequent:true,
filter:function(event,player,name){
if(name=='phaseJieshuBegin'){
return player.hasSkill('reguanxing_on');
}
return true;
},
content:function(){
"step 0"
if(player.isUnderControl()){
game.modeSwapPlayer(player);
}
var num=game.countPlayer()<4?3:5;
var cards=get.cards(num);
event.cards=cards;
var switchToAuto=function(){
_status.imchoosing=false;
if(event.dialog) event.dialog.close();
if(event.control) event.control.close();
var top=[];
var judges=player.node.judges.childNodes;
var stopped=false;
if(!player.hasWuxie()){
for(var i=0;i<judges.length;i++){
var judge=get.judge(judges[i]);
cards.sort(function(a,b){
return judge(b)-judge(a);
});
if(judge(cards[0])<0){
stopped=true;break;
}
else{
top.unshift(cards.shift());
}
}
}
var bottom;
if(!stopped){
cards.sort(function(a,b){
return get.value(b,player)-get.value(a,player);
});
while(cards.length){
if(get.value(cards[0],player)<=5) break;
top.unshift(cards.shift());
}
}
bottom=cards;
for(var i=0;i<top.length;i++){
ui.cardPile.insertBefore(top[i],ui.cardPile.firstChild);
}
for(i=0;i<bottom.length;i++){
ui.cardPile.appendChild(bottom[i]);
}
if(event.triggername=='phaseZhunbeiBegin'&&top.length==0){
player.addTempSkill('reguanxing_on');
}
player.popup(get.cnNumber(top.length)+'上'+get.cnNumber(bottom.length)+'下');
game.log(player,'将'+get.cnNumber(top.length)+'张牌置于牌堆顶');
game.delay(2);
};
var chooseButton=function(online,player,cards){
var event=_status.event;
player=player||event.player;
cards=cards||event.cards;
event.top=[];
event.bottom=[];
event.status=true;
event.dialog=ui.create.dialog('按顺序选择置于牌堆顶的牌(先选择的在上)',cards);
for(var i=0;i<event.dialog.buttons.length;i++){
event.dialog.buttons[i].classList.add('pointerdiv');
}
event.switchToAuto=function(){
event._result='ai';
event.dialog.close();
event.control.close();
_status.imchoosing=false;
},
event.control=ui.create.control('ok','pileTop','pileBottom',function(link){
var event=_status.event;
if(link=='ok'){
if(online){
event._result={
top:[],
bottom:[]
}
for(var i=0;i<event.top.length;i++){
event._result.top.push(event.top[i].link);
}
for(var i=0;i<event.bottom.length;i++){
event._result.bottom.push(event.bottom[i].link);
}
}
else{
var i;
for(i=0;i<event.top.length;i++){
ui.cardPile.insertBefore(event.top[i].link,ui.cardPile.firstChild);
}
for(i=0;i<event.bottom.length;i++){
ui.cardPile.appendChild(event.bottom[i].link);
}
for(i=0;i<event.dialog.buttons.length;i++){
if(event.dialog.buttons[i].classList.contains('glow')==false&&
event.dialog.buttons[i].classList.contains('target')==false)
ui.cardPile.appendChild(event.dialog.buttons[i].link);
}
if(event.triggername=='phaseZhunbeiBegin'&&event.top.length==0){
player.addTempSkill('reguanxing_on');
}
player.popup(get.cnNumber(event.top.length)+'上'+get.cnNumber(event.cards.length-event.top.length)+'下');
game.log(player,'将'+get.cnNumber(event.top.length)+'张牌置于牌堆顶');
}
event.dialog.close();
event.control.close();
game.resume();
_status.imchoosing=false;
}
else if(link=='pileTop'){
event.status=true;
event.dialog.content.childNodes[0].innerHTML='按顺序选择置于牌堆顶的牌';
}
else{
event.status=false;
event.dialog.content.childNodes[0].innerHTML='按顺序选择置于牌堆底的牌';
}
})
for(var i=0;i<event.dialog.buttons.length;i++){
event.dialog.buttons[i].classList.add('selectable');
}
event.custom.replace.button=function(link){
var event=_status.event;
if(link.classList.contains('target')){
link.classList.remove('target');
event.top.remove(link);
}
else if(link.classList.contains('glow')){
link.classList.remove('glow');
event.bottom.remove(link);
}
else if(event.status){
link.classList.add('target');
event.top.unshift(link);
}
else{
link.classList.add('glow');
event.bottom.push(link);
}
}
event.custom.replace.window=function(){
for(var i=0;i<_status.event.dialog.buttons.length;i++){
_status.event.dialog.buttons[i].classList.remove('target');
_status.event.dialog.buttons[i].classList.remove('glow');
_status.event.top.length=0;
_status.event.bottom.length=0;
}
}
game.pause();
game.countChoose();
};
event.switchToAuto=switchToAuto;
if(event.isMine()){
chooseButton();
event.finish();
}
else if(event.isOnline()){
event.player.send(chooseButton,true,event.player,event.cards);
event.player.wait();
game.pause();
}
else{
event.switchToAuto();
event.finish();
}
"step 1"
if(event.result=='ai'||!event.result){
event.switchToAuto();
}
else{
var top=event.result.top||[];
var bottom=event.result.bottom||[];
for(var i=0;i<top.length;i++){
ui.cardPile.insertBefore(top[i],ui.cardPile.firstChild);
}
for(i=0;i<bottom.length;i++){
ui.cardPile.appendChild(bottom[i]);
}
for(i=0;i<event.cards.length;i++){
if(!top.contains(event.cards[i])&&!bottom.contains(event.cards[i])){
ui.cardPile.appendChild(event.cards[i]);
}
}
if(event.triggername=='phaseZhunbeiBegin'&&top.length==0){
player.addTempSkill('reguanxing_on');
}
player.popup(get.cnNumber(top.length)+'上'+get.cnNumber(event.cards.length-top.length)+'下');
game.log(player,'将'+get.cnNumber(top.length)+'张牌置于牌堆顶');
game.updateRoundNumber();
game.delay(2);
}
},
subSkill:{
on:{}
}
},
reluoshen:{
audio:'luoshen',
locked:false,
trigger:{player:'phaseZhunbeiBegin'},
frequent:true,
content:function(){
"step 0"
if(event.cards==undefined) event.cards=[];
player.judge(function(card){
if(get.color(card)=='black') return 1.5;
return -1.5;
});
"step 1"
if(result.judge>0){
event.cards.push(result.card);
if(lib.config.autoskilllist.contains('luoshen')){
player.chooseBool('是否再次发动【洛神】?');
}
else{
event._result={bool:true};
}
}
else{
for(var i=0;i<event.cards.length;i++){
if(get.position(event.cards[i])!='d'){
event.cards.splice(i,1);i--;
}
}
player.gain(event.cards,'gain2');
player.storage.reluoshen=event.cards.slice(0);
event.finish();
}
"step 2"
if(result.bool){
event.goto(0);
}
else{
if(event.cards.length){
player.gain(event.cards,'gain2');
player.storage.reluoshen=event.cards.slice(0);
}
}
},
mod:{
ignoredHandcard:function(card,player){
if(player.storage.reluoshen&&player.storage.reluoshen.contains(card)){
return true;
}
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&player.storage.reluoshen&&player.storage.reluoshen.contains(card)){
return false;
}
},
},
group:'reluoshen_clear',
subSkill:{
clear:{
trigger:{player:'phaseAfter'},
silent:true,
content:function(){
delete player.storage.reluoshen;
}
}
}
},
rejieyin:{
audio:'jieyin',
enable:'phaseUse',
filterCard:true,
usable:1,
position:'he',
filter:function(event,player){
return player.countCards('he')>0;
},
check:function(card){
var player=_status.event.player;
if(get.position(card)=='e'){
var subtype=get.subtype(card);
if(!game.hasPlayer(function(current){
return current!=player&&current.hp!=player.hp&&get.attitude(player,current)>0&&!current.countCards('e',{subtype:subtype});
})){
return 0;
}
if(player.countCards('h',{subtype:subtype})) return 20-get.value(card);
return 10-get.value(card);
}
else{
if(player.countCards('e')) return 0;
if(player.countCards('h',{type:'equip'})) return 0;
return 8-get.value(card);
}
},
filterTarget:function(card,player,target){
if(target.sex!='male') return false;
var card=ui.selected.cards[0];
if(!card) return false;
if(get.position(card)=='e'&&!target.isEmpty(get.subtype(card))) return false;
return true;
},
discard:false,
delay:0,
lose:false,
content:function(){
'step 0'
if(get.position(cards[0])=='e'){
player.$give(cards,target);
target.equip(cards[0]);
}
else{
player.discard(cards);
}
'step 1'
if(player.hp>target.hp){
player.draw();
if(target.isDamaged()) target.recover();
}
else if(player.hp<target.hp){
target.draw();
if(player.isDamaged()) player.recover();
}
},
ai:{
order:function(){
var player=_status.event.player;
var es=player.getCards('e');
for(var i=0;i<es.length;i++){
if(player.countCards('h',{subtype:get.subtype(es[i])})) return 10;
}
return 2;
},
result:{
target:function(player,target){
var goon=function(){
var es=player.getCards('e');
for(var i=0;i<es.length;i++){
if(player.countCards('h',{subtype:get.subtype(es[i])})) return true;
}
return false;
}
if(player.hp<target.hp){
if(player.isHealthy()){
if(!player.needsToDiscard(1)||goon()) return 0.1;
return 0;
}
return 1.5;
}
if(player.hp>target.hp){
if(target.isHealthy()){
if(!player.needsToDiscard(1)||goon()) return 0.1;
return 0;
}
return 1;
}
return 0;
}
}
}
},
rejiuyuan:{
global:'rejiuyuan2',
zhuSkill:true,
},
rejiuyuan2:{
audio:'jiuyuan',
forceaudio:true,
trigger:{player:'useCardToPlayer'},
filter:function(event,player){
if(event.card.name!='tao') return false;
if(player.group!='wu') return false;
if(event.target!=player) return false;
return game.hasPlayer(function(target){
return player!=target&&!event.targets.contains(target)&&target.isDamaged()&&target.hp<player.hp&&target.hasZhuSkill('rejiuyuan',player);
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('rejiuyuan'),function(card,player,target){
return player!=target&&!_status.event.targets.contains(target)&&target.isDamaged()&&target.hp<player.hp&&target.hasZhuSkill('rejiuyuan',player);
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
}).set('targets',trigger.targets);
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('rejiuyuan2',target);
trigger.getParent().targets.remove(player);
trigger.getParent().targets.push(target);
player.draw();
}
}
},
rezhiheng:{
audio:'zhiheng',
enable:'phaseUse',
usable:1,
position:'he',
filterCard:true,
selectCard:[1,Infinity],
check:function(card){
var player=_status.event.player;
if(get.position(card)=='h'&&!player.countCards('h',function(card){
return get.value(card)>=8;
})){
return 8-get.value(card);
}
return 6-get.value(card)
},
content:function(){
'step 0'
event.num=player.hasSkill('rezhiheng_delay')?1:0;
'step 1'
player.draw(event.num+cards.length);
},
group:'rezhiheng_draw',
subSkill:{
draw:{
trigger:{player:'loseEnd'},
silent:true,
filter:function(event,player){
if(event.getParent(2).skill!='rezhiheng'&&event.getParent(2).skill!='jilue_zhiheng') return false;
if(player.countCards('h')) return false;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
return false;
},
content:function(){
player.addTempSkill('rezhiheng_delay',trigger.getParent(2).skill+'After');
}
},
delay:{}
},
ai:{
order:1,
result:{
player:1
},
threaten:1.55
},
},
reqicai:{
mod:{
targetInRange:function(card,player,target,now){
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
},
canBeDiscarded:function(card){
if(get.position(card)=='e'&&['equip2','equip5'].contains(get.subtype(card))) return false;
},
},
},
rejizhi:{
audio:'jizhi',
locked:false,
trigger:{player:'useCard'},
frequent:true,
filter:function(event){
return (get.type(event.card)=='trick');
},
init:function(player){
player.storage.rejizhi=0;
},
content:function(){
'step 0'
player.draw();
'step 1'
event.card=result[0];
if(get.type(event.card)=='basic'){
player.chooseBool('是否弃置'+get.translation(event.card)+'并令本回合手牌上限+1').set('ai',function(evt,player){
return _status.currentPhase==player&&player.needsToDiscard(-3)&&_status.event.value<6;
}).set('value',get.value(event.card,player));
}
'step 2'
if(result.bool){
player.discard(event.card);
player.storage.rejizhi++;
if(_status.currentPhase==player){
player.markSkill('rejizhi');
}
}
},
ai:{
threaten:1.4,
noautowuxie:true,
},
mod:{
maxHandcard:function(player,num){
return num+player.storage.rejizhi;
}
},
intro:{
content:'本回合手牌上限+#'
},
group:'rejizhi_clear',
subSkill:{
clear:{
trigger:{global:'phaseAfter'},
silent:true,
content:function(){
player.storage.rejizhi=0;
player.unmarkSkill('rejizhi');
}
}
}
},
rebiyue:{
audio:'biyue',
trigger:{player:'phaseJieshuBegin'},
frequent:true,
content:function(){
var num=1;
if(!player.countCards('h')){
num=2;
}
player.draw(num);
},
},
rerende:{
audio:2,
group:['rerende1'],
enable:'phaseUse',
filterCard:true,
selectCard:[1,Infinity],
discard:false,
prepare:'give2',
filterTarget:function(card,player,target){
if(player.storage.rerende2&&player.storage.rerende2.contains(target)) return false;
return player!=target;
},
onremove:['rerende','rerende2'],
check:function(card){
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0;
if(!ui.selected.cards.length&&card.name=='du') return 20;
var player=get.owner(card);
if(ui.selected.cards.length>=Math.max(2,player.countCards('h')-player.hp)) return 0;
if(player.hp==player.maxHp||player.storage.rerende<0||player.countCards('h')<=1){
var players=game.filterPlayer();
for(var i=0;i<players.length;i++){
if(players[i].hasSkill('haoshi')&&
!players[i].isTurnedOver()&&
!players[i].hasJudge('lebu')&&
get.attitude(player,players[i])>=3&&
get.attitude(players[i],player)>=3){
return 11-get.value(card);
}
}
if(player.countCards('h')>player.hp) return 10-get.value(card);
if(player.countCards('h')>2) return 6-get.value(card);
return -1;
}
return 10-get.value(card);
},
content:function(){
'step 0'
if(!Array.isArray(player.storage.rerende2)){
player.storage.rerende2=[];
}
player.storage.rerende2.push(target);
target.gain(cards,player);
if(typeof player.storage.rerende!='number'){
player.storage.rerende=0;
}
if(player.storage.rerende>=0){
player.storage.rerende+=cards.length;
if(player.storage.rerende>=2){
var list=[];
if(lib.filter.cardUsable({name:'sha'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('sha',current);
})){
list.push(['基本','','sha']);
list.push(['基本','','sha','fire']);
list.push(['基本','','sha','thunder']);
}
if(lib.filter.cardUsable({name:'tao'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('tao',current);
})){
list.push(['基本','','tao']);
}
if(lib.filter.cardUsable({name:'jiu'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){
return player.canUse('jiu',current);
})){
list.push(['基本','','jiu']);
}
if(list.length){
player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){
var player=_status.event.player;
var card={name:button.link[2],nature:button.link[3]};
if(card.name=='tao'){
if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){
return 5;
}
return 1;
}
if(card.name=='sha'){
if(game.hasPlayer(function(current){
return player.canUse(card,current)&&get.effect(current,card,player,player)>0
})){
if(card.nature=='fire') return 2.95;
if(card.nature=='thunder') return 2.92;
return 2.9;
}
return 0;
}
if(card.name=='jiu'){
return 0.5;
}
return 0;
});
}
else{
event.finish();
}
player.storage.rerende=-1;
}
else{
event.finish();
}
}
else{
event.finish();
}
'step 1'
if(result&&result.bool&&result.links[0]){
var card={name:result.links[0][2],nature:result.links[0][3]};
player.chooseUseTarget(card,true);
}
},
ai:{
order:function(skill,player){
if(player.hp<player.maxHp&&player.storage.rerende<2&&player.countCards('h')>1){
return 10;
}
return 4;
},
result:{
target:function(player,target){
if(target.hasSkillTag('nogain')) return 0;
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return -10;
}
if(target.hasJudge('lebu')) return 0;
var nh=target.countCards('h');
var np=player.countCards('h');
if(player.hp==player.maxHp||player.storage.rerende<0||player.countCards('h')<=1){
if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0;
}
return Math.max(1,5-nh);
}
},
effect:{
target:function(card,player,target){
if(player==target&&get.type(card)=='equip'){
if(player.countCards('e',{subtype:get.subtype(card)})){
if(game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0;
})){
return 0;
}
}
}
}
},
threaten:0.8
}
},
rerende1:{
trigger:{player:'phaseUseBegin'},
silent:true,
content:function(){
player.storage.rerende=0;
player.storage.rerende2=[];
}
},
liyu:{
audio:2,
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
if(event._notrigger.contains(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.player.isAlive()&&event.player.countGainableCards(player,'he')>0;
},
check:function(){
return false;
},
content:function(){
'step 0'
trigger.player.chooseTarget(function(card,player,target){
var evt=_status.event.getParent();
return evt.player.canUse({name:'juedou'},target)&&target!=_status.event.player;
},get.prompt('liyu')).set('ai',function(target){
var evt=_status.event.getParent();
return get.effect(target,{name:'juedou'},evt.player,_status.event.player)-2;
});
'step 1'
if(result.bool){
player.gainPlayerCard(trigger.player,'he',true);
event.target=result.targets[0];
trigger.player.line(player,'green');
}
else{
event.finish();
}
'step 2'
if(event.target){
player.useCard({name:'juedou'},event.target,'noai');
}
},
ai:{
halfneg:true
}
},
/*reqicai:{
trigger:{player:'equipEnd'},
frequent:true,
content:function(){
player.draw();
},
mod:{
targetInRange:function(card,player,target,now){
var type=get.type(card);
if(type=='trick'||type=='delay') return true;
}
},
},*/
retuxi:{
audio:2,
trigger:{player:'phaseDrawBefore'},
direct:true,
filter:function(event){
return event.num>0;
},
content:function(){
"step 0"
player.chooseTarget(get.prompt('retuxi'),[1,trigger.num],function(card,player,target){
return target.countCards('h')>0&&player!=target&&target.countCards('h')>=player.countCards('h');
},function(target){
var att=get.attitude(_status.event.player,target);
if(target.hasSkill('tuntian')) return att/10;
return 1-att;
});
"step 1"
if(result.bool){
player.logSkill('retuxi',result.targets);
player.gainMultiple(result.targets);
trigger.num-=result.targets.length;
}
else{
event.finish();
}
"step 2"
if(trigger.num<=0) game.delay();
},
ai:{
threaten:1.6,
expose:0.2
}
},
reguicai:{
audio:2,
trigger:{global:'judge'},
direct:true,
filter:function(event,player){
return player.countCards('he')>0;
},
content:function(){
"step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('reguicai'),'he').set('ai',function(card){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
var judging=_status.event.judging;
var result=trigger.judge(card)-trigger.judge(judging);
var attitude=get.attitude(player,trigger.player);
if(attitude==0||result==0) return 0;
if(attitude>0){
return result-get.value(card)/2;
}
else{
return -result-get.value(card)/2;
}
}).set('judging',trigger.player.judging[0]);
"step 1"
if(result.bool){
player.respond(result.cards,'reguicai','highlight','noOrdering');
}
else{
event.finish();
}
"step 2"
if(result.bool){
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]));
}
game.cardsDiscard(trigger.player.judging[0]);
trigger.player.judging[0]=result.cards[0];
trigger.orderingCards.addArray(result.cards);
game.log(trigger.player,'的判定牌改为',result.cards[0]);
game.delay(2);
}
},
ai:{
tag:{
rejudge:1,
}
}
},
refankui:{
audio:2,
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return (event.source&&event.source.countGainableCards(player,'he')&&event.num>0&&event.source!=player);
},
content:function(){
player.gainPlayerCard([1,trigger.num],get.prompt('fankui',trigger.source),trigger.source,get.buttonValue,'he').set('logSkill',['refankui',trigger.source]);
},
ai:{
maixie_defend:true,
effect:{
target:function(card,player,target){
if(player.countCards('he')>1&&get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1.5];
if(get.attitude(target,player)<0) return [1,1];
}
}
}
}
},
reluoyi:{
audio:2,
trigger:{player:'phaseDrawBegin'},
check:function(event,player){
if(player.countCards('h','sha')) return true;
return Math.random()<0.5;
},
content:function(){
"step 0"
player.addTempSkill('reluoyi2',{player:'phaseBefore'});
trigger.cancel();
"step 1"
event.cards=get.cards(3);
player.showCards(event.cards,'裸衣');
"step 2"
for(var i=0;i<cards.length;i++){
if(get.type(cards[i])!='basic'&&cards[i].name!='juedou'&&
(get.type(cards[i])!='equip'||get.subtype(cards[i])!='equip1')){
cards[i].discard();
cards.splice(i--,1);
}
}
player.gain(cards,'gain2');
}
},
reluoyi2:{
trigger:{source:'damageBegin1'},
filter:function(event){
return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.notLink();
},
forced:true,
content:function(){
trigger.num++;
},
ai:{
damageBonus:true
}
},
reganglie:{
audio:2,
trigger:{player:'damageEnd'},
filter:function(event,player){
return (event.source!=undefined&&event.num>0);
},
check:function(event,player){
return (get.attitude(player,event.source)<=0);
},
logTarget:'source',
content:function(){
"step 0"
event.num=trigger.num;
"step 1"
player.judge(function(card){
if(get.color(card)=='red') return 1;
return 0;
});
"step 2"
if(result.color=='black'){
if(trigger.source.countCards('he')){
player.discardPlayerCard(trigger.source,'he',true);
}
}
else if(trigger.source.isIn()){
trigger.source.damage();
}
event.num--;
if(event.num>0){
player.chooseBool(get.prompt2('reganglie'));
}
else{
event.finish();
}
"step 3"
if(result.bool){
player.logSkill('reganglie',trigger.source);
event.goto(1);
}
},
ai:{
maixie_defend:true,
expose:0.4
}
},
qinxue:{
skillAnimation:true,
animationColor:'wood',
audio:2,
unique:true,
juexingji:true,
derivation:'gongxin',
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
if(player.storage.qinxue) return false;
if(player.countCards('h')>=player.hp+3) return true;
if(player.countCards('h')>=player.hp+2&&game.players.length+game.dead.length>=7) return true;
return false;
},
content:function(){
player.storage.qinxue=true;
player.loseMaxHp();
player.addSkill('gongxin');
player.awakenSkill('qinxue');
}
},
qingjian:{
audio:2,
unique:true,
trigger:{player:'gainAfter'},
direct:true,
usable:4,
filter:function(event,player){
if(event.parent.parent.name=='phaseDraw') return false;
return event.cards&&event.cards.length>0
},
content:function(){
"step 0"
event.cards=trigger.cards.slice(0);
"step 1"
player.chooseCardTarget({
filterCard:function(card){
return _status.event.getParent().cards.contains(card);
},
selectCard:[1,event.cards.length],
filterTarget:function(card,player,target){
return player!=target;
},
ai1:function(card){
if(ui.selected.cards.length>0) return -1;
if(card.name=='du') return 20;
return (_status.event.player.countCards('h')-_status.event.player.hp);
},
ai2:function(target){
var att=get.attitude(_status.event.player,target);
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return 1-att;
}
if(target.countCards('h')>_status.event.player.countCards('h')) return 0;
return att-4;
},
prompt:'请选择要送人的卡牌'
});
"step 2"
if(result.bool){
player.storage.qingjian++;
player.logSkill('qingjian',result.targets);
result.targets[0].gain(result.cards,player);
player.$give(result.cards.length,result.targets[0]);
for(var i=0;i<result.cards.length;i++){
event.cards.remove(result.cards[i]);
}
if(event.cards.length) event.goto(1);
}
else{
player.storage.counttrigger.qingjian--;
}
},
ai:{
expose:0.3
},
},
reyingzi:{
audio:2,
audioname:['heqi','sunce'],
trigger:{player:'phaseDrawBegin'},
forced:true,
content:function(){
trigger.num++;
},
ai:{
threaten:1.5
},
mod:{
maxHandcard:function(player,num){
if(player.hp<player.maxHp) return num+player.getDamagedHp();
}
}
},
refanjian:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.countCards('h')>0;
},
filterTarget:function(card,player,target){
return player!=target;
},
filterCard:true,
check:function(card){
return 8-get.value(card);
},
discard:false,
prepare:'give',
content:function(){
"step 0"
target.storage.refanjian=cards[0];
target.gain(cards[0],player);
"step 1"
target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
var cards=player.getCards('he',{suit:get.suit(player.storage.refanjian)});
if(cards.length==1) return 0;
if(cards.length>=2){
for(var i=0;i<cards.length;i++){
if(get.tag(cards[i],'save')) return 1;
}
}
if(player.hp==1) return 0;
for(var i=0;i<cards.length;i++){
if(get.value(cards[i])>=8) return 1;
}
if(cards.length>2&&player.hp>2) return 1;
if(cards.length>3) return 1;
return 0;
}
"step 2"
if(result.control=='refanjian_card'){
target.showHandcards();
}
else{
target.loseHp();
event.finish();
}
"step 3"
target.discard(target.getCards('he',{suit:get.suit(target.storage.refanjian)}))
delete target.storage.refanjian;
},
ai:{
order:9,
result:{
target:function(player,target){
return -target.countCards('he')-(player.countCards('h','du')?1:0);
}
},
threaten:2,
}
},
reqianxun:{
init:function(player){
player.storage.reqianxun2=[];
},
audio:2,
trigger:{target:'useCardToBegin',player:'judgeBefore'},
filter:function(event,player){
if(player.countCards('h')==0) return false;
if(event.parent.name=='phaseJudge'){
if(lib.skill.reqianxun.trigger.player=='judgeBefore'){
return true;
}
return event.result&&event.result.judge!=0;
}
if(event.name=='judge') return false;
if(event.targets&&event.targets.length>1) return false;
if(event.card&&get.type(event.card)=='trick'&&event.player!=player) return true;
},
content:function(){
player.storage.reqianxun2=player.storage.reqianxun2.concat(player.getCards('h'));
game.addVideo('storage',player,['reqianxun2',get.cardsInfo(player.storage.reqianxun2),'cards']);
player.lose(player.getCards('h'),ui.special,'toStorage');
player.addSkill('reqianxun2');
},
ai:{
effect:function(card,player,target){
if(!target.hasFriend()) return;
if(player==target) return;
var type=get.type(card);
var nh=target.countCards();
if(type=='trick'){
if(!get.tag(card,'multitarget')||get.info(card).singleCard){
if(get.tag(card,'damage')){
if(nh<3||target.hp<=2) return 0.8;
}
return [1,nh];
}
}
else if(type=='delay'){
return [0.5,0.5];
}
},
}
},
reqianxun2:{
trigger:{global:'phaseEnd'},
forced:true,
audio:false,
content:function(){
player.gain(player.storage.reqianxun2,'fromStorage');
player.removeSkill('reqianxun2');
player.storage.reqianxun2=[];
game.addVideo('storage',player,['reqianxun2',get.cardsInfo(player.storage.reqianxun2),'cards']);
},
mark:true,
intro:{
content:'cardCount'
}
},
relianying:{
audio:2,
trigger:{player:'loseEnd'},
direct:true,
filter:function(event,player){
if(player.countCards('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"
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].original=='h') num++;
}
player.chooseTarget('选择发动连营的目标',[1,num]).ai=function(target){
var player=_status.event.player;
if(player==target) return get.attitude(player,target)+10;
return get.attitude(player,target);
}
"step 1"
if(result.bool){
player.logSkill('relianying',result.targets);
game.asyncDraw(result.targets);
}
},
ai:{
threaten:0.8,
effect:{
target:function(card){
if(card.name=='guohe'||card.name=='liuxinghuoyu') return 0.5;
}
},
noh:true,
}
},
retishen:{
audio:2,
unique:true,
mark:true,
skillAnimation:true,
animationColor:'soil',
limited:true,
trigger:{player:'phaseZhunbeiBegin'},
init:function(player){
player.storage.retishen=false;
},
filter:function(event,player){
if(player.storage.retishen) return false;
if(typeof player.storage.retishen2=='number'){
return player.hp<player.storage.retishen2;
}
return false;
},
check:function(event,player){
if(player.hp<=1) return true;
return player.hp<player.storage.retishen2-1;
},
content:function(){
player.awakenSkill('retishen');
player.recover(player.storage.retishen2-player.hp);
player.draw(player.storage.retishen2-player.hp);
player.storage.retishen=true;
},
intro:{
mark:function(dialog,content,player){
if(player.storage.retishen) return;
if(typeof player.storage.retishen2!='number'){
return '上回合体力:无';
}
return '上回合体力:'+player.storage.retishen2;
},
content:'limited'
},
group:['retishen2']
},
retishen2:{
trigger:{player:'phaseJieshuBegin'},
priority:-10,
silent:true,
content:function(){
player.storage.retishen2=player.hp;
game.broadcast(function(player){
player.storage.retishen2=player.hp;
},player);
game.addVideo('storage',player,['retishen2',player.storage.retishen2]);
},
intro:{
content:function(storage,player){
if(player.storage.retishen) return;
return '上回合体力:'+storage;
}
}
},
reyajiao:{
audio:2,
trigger:{player:['respond','useCard']},
frequent:true,
filter:function(event,player){
return player!=_status.currentPhase&&get.itemtype(event.cards)=='cards';
},
content:function(){
"step 0"
event.card=get.cards()[0];
game.broadcast(function(card){
ui.arena.classList.add('thrownhighlight');
card.copy('thrown','center','thrownhighlight',ui.arena).animate('start');
},event.card);
event.node=event.card.copy('thrown','center','thrownhighlight',ui.arena).animate('start');
ui.arena.classList.add('thrownhighlight');
game.addVideo('thrownhighlight1');
game.addVideo('centernode',null,get.cardInfo(event.card));
if(get.type(event.card,'trick')==get.type(trigger.card,'trick')){
player.chooseTarget('选择获得此牌的角色').set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(_status.event.du){
if(target.hasSkillTag('nodu')) return 0;
return -att;
}
if(att>0){
return att+Math.max(0,5-target.countCards('h'));
}
return att;
}).set('du',event.card.name=='du');
}
else{
player.chooseBool('是否弃置'+get.translation(event.card)+'');
event.disbool=true;
}
game.delay(2);
"step 1"
if(event.disbool){
if(!result.bool){
game.log(player,'展示了',event.card);
ui.cardPile.insertBefore(event.card,ui.cardPile.firstChild);
}
else{
game.log(player,'展示并弃掉了',event.card);
event.card.discard();
}
game.addVideo('deletenode',player,[get.cardInfo(event.node)]);
event.node.delete();
game.broadcast(function(card){
ui.arena.classList.remove('thrownhighlight');
if(card.clone){
card.clone.delete();
}
},event.card);
}
else if(result.targets){
player.line(result.targets,'green');
result.targets[0].gain(event.card,'log');
event.node.moveDelete(result.targets[0]);
game.addVideo('gain2',result.targets[0],[get.cardInfo(event.node)]);
game.broadcast(function(card,target){
ui.arena.classList.remove('thrownhighlight');
if(card.clone){
card.clone.moveDelete(target);
}
},event.card,result.targets[0]);
}
else{
game.log(player,'展示并弃掉了',event.card);
event.card.discard();
game.addVideo('deletenode',player,[get.cardInfo(event.node)]);
event.node.delete();
game.broadcast(function(card){
ui.arena.classList.remove('thrownhighlight');
if(card.clone){
card.clone.delete();
}
},event.card);
}
game.addVideo('thrownhighlight2');
ui.arena.classList.remove('thrownhighlight');
},
ai:{
effect:{
target:function(card,player){
if(get.tag(card,'respond')&&player.countCards('h')>1) return [1,0.2];
}
}
}
},
rejianxiong:{
audio:2,
trigger:{player:'damageEnd'},
filter:function(event,player){
return get.itemtype(event.cards)=='cards'&&get.position(event.cards[0],true)=='o';
},
content:function(){
player.gain(trigger.cards);
player.$gain2(trigger.cards);
player.draw();
},
ai:{
maixie:true,
maixie_hp:true,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
if(get.tag(card,'damage')) return [1,0.55];
}
}
}
},
rejianxiong_old:{
audio:2,
trigger:{player:'damageEnd'},
direct:true,
content:function(){
"step 0"
if(get.itemtype(trigger.cards)=='cards'&&get.position(trigger.cards[0],true)=='o'){
player.chooseControl('rejianxiong_mopai','rejianxiong_napai','cancel2').set('prompt',get.prompt('rejianxiong')).ai=function(){
var trigger=_status.event.getTrigger();
if(trigger.cards.length==1&&trigger.cards[0].name=='sha') return 0;
return 1;
};
}
else{
player.chooseControl('rejianxiong_mopai','cancel2').set('prompt',get.prompt('rejianxiong'));
}
"step 1"
if(result.control=='rejianxiong_napai'){
player.logSkill('rejianxiong');
player.gain(trigger.cards);
player.$gain2(trigger.cards);
}
else if(result.control=='rejianxiong_mopai'){
player.logSkill('rejianxiong');
player.draw();
}
},
ai:{
maixie:true,
maixie_hp:true,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
if(get.tag(card,'damage')&&player!=target) return [1,0.6];
}
}
}
},
reyiji:{
audio:2,
trigger:{player:'damageEnd'},
frequent:true,
filter:function(event){
return (event.num>0)
},
content:function(){
"step 0"
event.num=1;
event.count=1;
"step 1"
player.gain(get.cards(2));
player.$draw(2);
"step 2"
player.chooseCardTarget({
filterCard:true,
selectCard:[1,2],
filterTarget:function(card,player,target){
return player!=target&&target!=event.temp;
},
ai1:function(card){
if(ui.selected.cards.length>0) return -1;
if(card.name=='du') return 20;
return (_status.event.player.countCards('h')-_status.event.player.hp);
},
ai2:function(target){
var att=get.attitude(_status.event.player,target);
if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
if(target.hasSkillTag('nodu')) return 0;
return 1-att;
}
return att-4;
},
prompt:'请选择要送人的卡牌'
});
"step 3"
if(result.bool){
player.lose(result.cards,ui.special,'toStorage');
if(result.targets[0].hasSkill('reyiji2')){
result.targets[0].storage.reyiji2=result.targets[0].storage.reyiji2.concat(result.cards);
}
else{
result.targets[0].addSkill('reyiji2');
result.targets[0].storage.reyiji2=result.cards;
}
player.$give(result.cards.length,result.targets[0]);
player.line(result.targets,'green');
game.addVideo('storage',result.targets[0],['reyiji2',get.cardsInfo(result.targets[0].storage.reyiji2),'cards']);
if(num==1){
event.temp=result.targets[0];
event.num++;
event.goto(2);
}
else if(event.count<trigger.num){
delete event.temp;
event.num=1;
event.count++;
event.goto(1);
}
}
else if(event.count<trigger.num){
delete event.temp;
event.num=1;
event.count++;
event.goto(1);
}
},
ai:{
maixie:true,
maixie_hp:true,
result:{
effect:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
var num=1;
if(get.attitude(player,target)>0){
if(player.needsToDiscard()){
num=0.7;
}
else{
num=0.5;
}
}
if(player.hp>=4) return [1,num*2];
if(target.hp==3) return [1,num*1.5];
if(target.hp==2) return [1,num*0.5];
}
}
},
threaten:0.6
}
},
reyiji2:{
trigger:{player:'phaseDrawBegin'},
forced:true,
mark:true,
popup:'遗计拿牌',
audio:false,
content:function(){
player.$draw(player.storage.reyiji2.length);
player.gain(player.storage.reyiji2,'fromStorage');
delete player.storage.reyiji2;
player.removeSkill('reyiji2');
game.delay();
},
intro:{
content:'cardCount'
}
},
yijue:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.countCards('h');
},
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
"step 0"
player.chooseToCompare(target).set('small',true);
"step 1"
if(result.bool){
if(!target.hasSkill('fengyin')){
target.addTempSkill('fengyin');
}
target.addTempSkill('yijue2');
event.finish();
}
else if(target.hp<target.maxHp){
player.chooseBool('是否让目标回复一点体力?').ai=function(event,player){
return get.recoverEffect(target,player,player)>0;
};
}
else{
event.finish();
}
"step 2"
if(result.bool){
target.recover();
}
},
ai:{
result:{
target:function(player,target){
var hs=player.getCards('h');
if(hs.length<3) return 0;
var bool=false;
for(var i=0;i<hs.length;i++){
if(hs[i].number>=9&&get.value(hs[i])<7){
bool=true;
break;
}
}
if(!bool) return 0;
if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){
return 1;
}
if(player.canUse('sha',target)&&(player.countCards('h','sha')||player.countCards('he',{color:'red'}))){
return -2;
}
return -0.5;
}
},
order:9,
}
},
yijue2:{
mark:true,
mod:{
cardEnabled:function(){
return false;
},
cardUsable:function(){
return false;
},
cardRespondable:function(){
return false;
},
cardSavable:function(){
return false;
}
},
intro:{
content:'不能使用或打出卡牌'
}
},
retieji:{
audio:2,
audioname:['boss_lvbu3'],
trigger:{player:'useCardToPlayered'},
check:function(event,player){
return get.attitude(player,event.target)<0;
},
filter:function(event,player){
return event.card.name=='sha';
},
logTarget:'target',
content:function(){
"step 0"
player.judge(function(){return 0});
if(!trigger.target.hasSkill('fengyin')){
trigger.target.addTempSkill('fengyin');
}
"step 1"
var suit=get.suit(result.card);
var target=trigger.target;
var num=target.countCards('h','shan');
target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){
return get.suit(card)==_status.event.suit;
}).set('ai',function(card){
var num=_status.event.num;
if(num==0) return 0;
if(card.name=='shan') return num>1?2:0;
return 8-get.value(card);
}).set('num',num).set('suit',suit);
"step 2"
if(!result.bool){
trigger.getParent().directHit.add(trigger.target);
}
}
},
reyicong:{
trigger:{
player:["changeHp"],
},
audio:2,
forced:true,
filter:function(event,player){
return get.sgn(player.hp-2.5)!=get.sgn(player.hp-2.5-event.num);
},
content:function (){},
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
}
},
qiaomeng:{
audio:2,
trigger:{source:'damageSource'},
direct:true,
filter:function(event){
if(event._notrigger.contains(event.player)) return false;
return event.card&&event.card.name=='sha'&&event.cards&&
get.color(event.cards)=='black'&&event.player.countCards('e');
},
content:function(){
"step 0"
player.choosePlayerCard('e',trigger.player);
"step 1"
if(result.bool){
player.logSkill('qiaomeng');
trigger.player.discard(result.links[0]);
event.card=result.links[0];
}
else{
event.finish();
}
"step 2"
if(get.position(card)=='d'){
if(get.subtype(card)=='equip3'||get.subtype(card)=='equip4'){
player.gain(card,trigger.player);
player.$gain2(card);
}
}
}
},
rekurou:{
audio:2,
enable:'phaseUse',
usable:1,
filterCard:true,
check:function(card){
return 8-get.value(card);
},
position:'he',
content:function(){
player.loseHp();
},
ai:{
order:8,
result:{
player:function(player){
if(player.hp<=2) return player.countCards('h')==0?1:0;
if(player.countCards('h',{name:'sha',color:'red'})) return 1;
return player.countCards('h')<=player.hp?1:0;
}
},
effect:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,1];
return 1.2;
}
if(get.tag(card,'loseHp')){
if(player.hp<=1) return;
return [0,0];
}
}
}
},
zhaxiang:{
trigger:{player:'loseHpEnd'},
forced:true,
audio:2,
content:function(){
var num=trigger.num;
player.draw(3*num);
if(_status.currentPhase==player){
if(!player.storage.zhaxiang2) player.storage.zhaxiang2=0;
player.storage.zhaxiang2+=num;
player.addTempSkill('zhaxiang2',{player:'phaseAfter'});
}
else{
game.trySkillAudio('zhaxiang',player);
}
},
ai:{
maihp:true
}
},
zhaxiang2:{
mod:{
targetInRange:function(card,player,target,now){
if(card.name=='sha'&&get.color(card)=='red') return true;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.storage.zhaxiang2;
}
},
onremove:true,
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&get.color(event.card)=='red';
},
content:function(){
trigger.directHit.addArray(game.players);
}
},
zhuhai:{
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return event.player.isAlive()&&event.player.getStat('damage')&&
lib.filter.targetEnabled({name:'sha'},player,event.player)&&player.hasSha();
},
content:function(){
player.chooseToUse({name:'sha'},'诛害:是否对'+get.translation(trigger.player)+'使用一张杀?').set('logSkill','zhuhai').set('complexSelect',true).set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.targetEnabled.apply(this,arguments);
}).set('sourcex',trigger.player);
}
},
qianxin:{
skillAnimation:true,
animationColor:'orange',
audio:2,
unique:true,
juexingji:true,
trigger:{source:'damageSource'},
forced:true,
derivation:'jianyan',
filter:function(event,player){
return player.hp<player.maxHp;
},
content:function(){
player.awakenSkill('qianxin');
player.addSkill('jianyan');
player.loseMaxHp();
}
},
jianyan:{
audio:2,
enable:'phaseUse',
usable:1,
delay:0,
filter:function(event,player){
return game.hasPlayer(function(current){
return current.sex=='male';
});
},
content:function(){
"step 0"
player.chooseControl(['red','black','basic','trick','equip']).set('ai',function(){
var player=_status.event.player;
if(!player.hasShan()) return 'basic';
if(player.countCards('e')<=1) return 'equip';
if(player.countCards('h')>2) return 'trick';
return 'red';
});
"step 1"
event.card=get.cardPile(function(card){
if(get.color(card)==result.control) return true;
if(get.type(card,'trick')==result.control) return true;
return false;
},'cardPile');
if(!event.card){
event.finish();
return;
}
player.showCards([event.card]);
"step 2"
player.chooseTarget(true,'选择一名男性角色送出'+get.translation(event.card),function(card,player,target){
return target.sex=='male';
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(_status.event.neg) return -att;
return att;
}).set('neg',get.value(event.card,player,'raw')<0);
"step 3"
player.line(result.targets,'green');
result.targets[0].gain(event.card,'gain2');
},
ai:{
order:9,
result:{
player:2
},
threaten:1.2
}
},
reguose:{
audio:2,
enable:'phaseUse',
usable:1,
discard:false,
filter:function(event,player){
return player.countCards('he',{suit:'diamond'})>0;
},
prepare:'throw',
position:'he',
filterCard:{suit:'diamond'},
filterTarget:function(card,player,target){
if(player==target) return false;
if(target.hasJudge('lebu')) return true;
return lib.filter.targetEnabled({name:'lebu'},player,target);
},
check:function(card){
return 7-get.value(card);
},
content:function(){
if(target.hasJudge('lebu')){
target.discard(target.getJudge('lebu'));
}
else{
var next=player.useCard({name:'lebu'},target,cards);
next.animate=false;
next.audio=false;
}
player.draw();
},
ai:{
result:{
target:function(player,target){
if(target.hasJudge('lebu')) return -get.effect(target,{name:'lebu'},player,target);
return get.effect(target,{name:'lebu'},player,target);
}
},
order:9,
}
},
fenwei:{
skillAnimation:true,
animationColor:'wood',
audio:2,
audioname:['heqi'],
unique:true,
mark:true,
limited:true,
trigger:{global:'useCardToPlayered'},
//priority:5,
filter:function(event,player){
if(event.getParent().triggeredTargets3.length>1) return false;
if(get.type(event.card)!='trick') return false;
if(get.info(event.card).multitarget) return false;
if(event.targets.length<2) return false;
if(player.storage.fenwei) return false;
return true;
},
init:function(player){
player.storage.fenwei=false;
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt('fenwei'),
[1,trigger.targets.length],function(card,player,target){
var evt=_status.event.getTrigger().getParent();
return evt.targets.contains(target)&&!evt.excluded.contains(target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
if(game.phaseNumber>game.players.length*2&&trigger.targets.length>=game.players.length-1){
return -get.effect(target,trigger.card,trigger.player,_status.event.player);
}
return -1;
});
"step 1"
if(result.bool){
player.awakenSkill('fenwei');
player.logSkill('fenwei',result.targets);
player.storage.fenwei=true;
trigger.getParent().excluded.addArray(result.targets);
game.delay();
}
},
intro:{
content:'limited'
}
},
chulao:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
if(player==target) return false;
if(target.group=='unknown') return false;
for(var i=0;i<ui.selected.targets.length;i++){
if(ui.selected.targets[i].group==target.group) return false;
}
return target.countCards('he')>0;
},
filter:function(event,player){
return player.countCards('he')>0;
},
filterCard:true,
position:'he',
selectTarget:[1,Infinity],
check:function(card){
if(get.suit(card)=='spade') return 8-get.value(card);
return 5-get.value(card);
},
content:function(){
"step 0"
if(num==0&&get.suit(cards[0])=='spade') player.draw();
player.choosePlayerCard(targets[num],'he',true);
"step 1"
if(result.bool){
if(result.links.length) targets[num].discard(result.links[0]);
if(get.suit(result.links[0])=='spade') targets[num].draw();
}
},
ai:{
result:{
target:-1
},
threaten:1.2,
order:3
}
},
xunxun:{
audio:2,
trigger:{player:'phaseDrawBefore'},
//check:function(event,player){
// return !player.hasSkill('reyiji2');
//},
content:function(){
"step 0"
event.cards=get.cards(4);
player.chooseCardButton(event.cards,2,'选择两张牌置于牌堆顶',true).set('ai',ai.get.buttonValue);
"step 1"
if(result.bool){
var choice=[];
for(var i=0;i<result.links.length;i++){
choice.push(result.links[i]);
cards.remove(result.links[i]);
}
for(var i=0;i<cards.length;i++){
ui.cardPile.appendChild(cards[i]);
}
while(choice.length){
ui.cardPile.insertBefore(choice.pop(),ui.cardPile.firstChild);
}
}
},
},
wangxi:{
audio:2,
trigger:{player:'damageEnd',source:'damageSource'},
filter:function(event){
if(event._notrigger.contains(event.player)) return false;
return event.num&&event.source&&event.player&&
event.player.isAlive()&&event.source.isAlive()&&event.source!=event.player;
},
check:function(event,player){
if(player.isPhaseUsing()) return true;
if(event.player==player) return get.attitude(player,event.source)>-3;
return get.attitude(player,event.player)>-3;
},
logTarget:function(event,player){
if(event.player==player) return event.source;
return event.player;
},
content:function(){
"step 0"
event.count=trigger.num;
"step 1"
game.asyncDraw([trigger.player,trigger.source]);
event.count--;
"step 2"
game.delay();
"step 3"
if(event.count){
player.chooseBool(get.prompt2('wangxi',lib.skill.wangxi.logTarget(trigger,player)))
}
else event.finish();
"step 4"
if(result.bool){
player.logSkill('wangxi',lib.skill.wangxi.logTarget(trigger,player));
event.goto(1);
}
},
ai:{
maixie:true,
maixie_hp:true
}
}
},
translate:{
re_zhangliao:'界张辽',
re_huangyueying:'新黄月英',
re_simayi:'界司马懿',
re_xuzhu:'界许褚',
re_xiahoudun:'界夏侯惇',
re_lvmeng:'界吕蒙',
re_zhouyu:'界周瑜',
re_luxun:'界陆逊',
re_zhaoyun:'界赵云',
re_guanyu:'界关羽',
re_zhangfei:'界张飞',
re_machao:'界马超',
re_caocao:'界曹操',
re_guojia:'界郭嘉',
re_lvbu:'界吕布',
re_xushu:'界徐庶',
re_huanggai:'界黄盖',
re_gongsunzan:'界公孙瓒',
re_daqiao:'界大乔',
re_ganning:'界甘宁',
re_huatuo:'界华佗',
re_lidian:'李典',
re_liubei:'界刘备',
re_diaochan:'界貂蝉',
re_huangyueying:'界黄月英',
re_sunquan:'界孙权',
re_sunshangxiang:'界孙尚香',
re_zhugeliang:'界诸葛亮',
re_zhenji:'界甄姬',
re_huaxiong:"界华雄",
"re_sp_zhugeliang":"界卧龙",
"re_xunyu":"界荀彧",
"re_dianwei":"界典韦",
"re_yanwen":"界颜良文丑",
re_pangtong:"界庞统",
xin_yuanshao:"界袁绍",
re_zhangjiao:'界张角',
xinleiji:'雷击',
xinguidao:'鬼道',
xinleiji_info:'①当你使用或打出【闪】或【闪电】时,你可以进行判定。<br>②当你不因〖暴虐〗或〖助祭〗而进行的判定的判定牌生效后若结果为黑桃你可对一名其他角色造成2点雷电伤害梅花你回复1点体力并可对一名其他其他角色造成1点雷电伤害。',
xinguidao_info:'一名角色的判定牌生效前你可以打出一张黑色牌作为判定牌并获得原判定牌。若你以此法打出的牌为黑桃2-9则你摸一张牌。',
reqiangxi:"强袭",
"reqiangxi_info":"出牌阶段对每名其他角色限一次你可以选择一项1. 失去一点体力并对你攻击范围内的一名其他角色造成一点伤害2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成一点伤害。",
rehuoji:"火计",
"rehuoji_info":"出牌阶段,你可以将你的任意一张♥或♦牌当作【火攻】使用。",
rekanpo:"看破",
"rekanpo_info":"你可以将你的任意一张♠或♣牌当作【无懈可击】使用。",
rejieming:"节命",
"rejieming_info":"当你受到1点伤害后你可以令一名角色摸两张牌。然后若其手牌数小于体力上限则你摸一张牌。",
reshuangxiong:"双雄",
"reshuangxiong_info":"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到以此法使用的【决斗】的伤害时,你获得对方于此决斗中打出的所有【杀】",
"reshuangxiong2":"双雄",
"reshuangxiong2_info":"",
reguanxing:'观星',
reguanxing_info:'准备阶段你可以观看牌堆顶的5张牌存活角色小于4时改为3张并将其以任意顺序置于牌堆项或牌堆底若你将“观星”的牌都放在了牌堆底则你可以在结束阶段再次发动“观星”',
reluoshen:'洛神',
reluoshen_info:'准备阶段,你可以进行一次判定,若为黑色则可以继续判定,直到出现红色。然后你获得所有黑色的判定牌。你通过“洛神”获得的牌,不计入当前回合的手牌上限',
rejieyin:'结姻',
rejieyin_info:'出牌阶段限一次你可以选择一名男性角色并弃置一张手牌或将装备区内的一张装备牌置于其装备区你与其体力较高的角色摸一张牌体力值较低的角色回复1点体力',
rebiyue:'闭月',
rebiyue_info:'结束阶段,你可以摸一张牌,若你没有手牌,则改为摸两张牌',
rejizhi:'集智',
rejizhi_info:'当你使用非延时锦囊牌时,你可以摸一张牌。若此牌为基本牌,则你可以弃置之,然后令本回合手牌上限+1。',
reqicai:'奇才',
reqicai_info:'锁定技,你使用锦囊牌无距离限制,你装备区内的防具牌和宝物牌不能被其他角色弃置',
rezhiheng:'制衡',
rezhiheng_info:'出牌阶段限一次,你可以弃置任意张牌并摸等量的牌,若你在发动“制衡”时弃置了所有手牌,则你多摸一张牌',
rejiuyuan:'救援',
rejiuyuan_info:'主公技,其他吴国角色对自己使用【桃】时,若其体力值大于你,则 其可以选择令你回复1点体力然后其摸1张牌',
"new_yajiao":"涯角",
"new_yajiao_info":"每当你于回合外使用或打出牌时,你可以亮出牌堆顶的一张牌,并将其交给一名角色。若此牌与你此次使用或打出的牌类别不同,则你弃置一张牌。",
"new_liyu":"利驭",
"new_liyu_info":"当你使用【杀】对一名其他角色造成伤害后,你可以获得其一张牌。若此牌不为装备牌,则其摸一张牌。若此牌为装备牌,则视为你对其选择的另一名角色使用一张【决斗】。",
"new_retuxi":"突袭",
"new_retuxi_info":"摸牌阶段摸牌时,你可以少摸任意张牌,然后获得等量的角色的各一张手牌。",
"new_retuxi_info_guozhan":"摸牌阶段摸牌时,你可以少摸至多两张牌,然后获得等量的角色的各一张手牌。",
"new_reyiji":"遗计",
"new_reyiji_info":"每当你受到1点伤害后你可以摸两张牌然后可以将至多两张手牌交给其他角色。",
"new_rejianxiong":"奸雄",
"new_rejianxiong_info":"每当你受到伤害后,你可以获得对你造成伤害的牌并摸一张牌。",
"new_reluoyi":"裸衣",
"new_reluoyi_info":"你可以展示牌堆顶的三张牌。然后,你可以放弃摸牌。若如此做,你获得其中的基本牌、武器牌和【决斗】,若如此做,直到你的下回合开始,你为伤害来源的【杀】或【决斗】造成的伤害+1。否则你弃置这些牌。",
"new_rewusheng":"武圣",
"new_rewusheng_info":"你可以将一张红色牌当做【杀】使用或打出。你使用的方片杀没有距离限制。",
"new_yijue":"义绝",
"new_yijue_info":"出牌阶段限一次,你可以弃置一张牌并令一名有手牌的其他角色展示一张手牌。若此牌为黑色,则该角色不能使用或打出牌,非锁定技失效且受到来自你的红桃【杀】的伤害+1直到回合结束。若此牌为红色则你可以获得此牌并可以令其回复一点体力。",
"new_yijue2":"义绝",
"new_yijue2_info":"",
"new_repaoxiao":"咆哮",
"new_repaoxiao_info":"锁定技,出牌阶段,你使用【杀】没有数量限制。若你于此出牌阶段内使用过【杀】,则你本回合内使用【杀】没有距离限制。",
"new_tishen":"替身",
"new_tishen_info":"出牌阶段结束时,你可以弃置你所有的锦囊牌与坐骑牌。若如此做,直到你的下个回合开始,你获得所有以你为目标且未对你造成伤害的【杀】。",
"new_tishen2":"替身",
"new_tishen2_info":"",
"new_qingjian":"清俭",
"new_qingjian_info":"每当你于摸牌阶段外获得牌时,你可以展示任意张牌并交给一名其他角色。然后,当前回合角色本回合的手牌上限+XX为你给出的牌中包含的类别数。每回合限一次。",
"qingjian_add":"清俭",
"qingjian_add_info":"",
"new_reqingnang":"青囊",
"new_reqingnang_info":"出牌阶段,你可以弃置一张手牌,令一名本回合内未成为过〖青囊〗的目标的角色回复一点体力。若你弃置的是黑色牌,则你本回合内不能再发动〖青囊〗。",
"new_reyaowu":"耀武",
"new_reyaowu_info":"锁定技当一名角色使用【杀】对你造成伤害时若此杀为红色该角色回复1点体力或摸一张牌。否则则你摸一张牌。",
reqingguo:'倾国',
reqingguo_info:'你可以将一张黑色牌当做【闪】使用或打出。',
qinxue:'勤学',
retuxi:'突袭',
reluoyi:'裸衣',
reluoyi2:'裸衣',
reganglie:'刚烈',
qingjian:'清俭',
reyingzi:'英姿',
refanjian:'反间',
refanjian_card:'弃牌',
refanjian_hp:'流失体力',
reqianxun:'谦逊',
reqianxun2:'谦逊',
relianying:'连营',
retishen:'替身',
retishen2:'替身',
reyajiao:'涯角',
rejianxiong:'奸雄',
rejianxiong_mopai:'摸牌',
rejianxiong_napai:'拿牌',
reyiji:'遗计',
reyiji2:'遗计',
yijue:'义绝',
yijue2:'义绝',
retieji:'铁骑',
refankui:'反馈',
reyicong:'义从',
qiaomeng:'趫猛',
rekurou:'苦肉',
zhaxiang:'诈降',
zhaxiang2:'诈降',
zhuhai:'诛害',
qianxin:'潜心',
jianyan:'荐言',
reguicai:'鬼才',
xunxun:'恂恂',
wangxi:'忘隙',
reguose:'国色',
fenwei:'奋威',
chulao:'除疠',
liyu:'利驭',
rerende:'仁德',
rerende_info:'出牌阶段,你可以将至少一张手牌交给其他角色,然后你于此阶段内不能再以此法交给该角色牌;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌',
liyu_info:'当你使用【杀】对一名其他角色造成伤害后,该角色可令你获得其一张牌,若如此做,则视为你对其选择的另一名角色使用一张【决斗】',
xunxun_info:'摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。',
wangxi_info:'每当你对其他角色造成1点伤害后或受到其他角色造成的1点伤害后你可与该角色各摸一张牌。',
reguose_info:'出牌阶段限一次,你可以选择一项:将一张方片花色牌当做【乐不思蜀】使用;或弃置一张方片花色牌并弃置场上的一张【乐不思蜀】。选择完成后,你摸一张牌。',
fenwei_info:'限定技,当一名角色使用的锦囊牌指定了至少两名角色为目标时,你可以令此牌对其中任意名角色无效。',
chulao_info:'出牌阶段限一次,若你有牌,你可以选择任意名势力各不相同的其他角色,你弃置你和这些角色的各一张牌。然后以此法弃置黑桃牌的角色各摸一张牌。',
reguicai_info:'在任意角色的判定牌生效前,你可以打出一张牌代替之',
zhuhai_info:'一名其他角色的结束阶段开始时,若该角色本回合造成过伤害,你可以对其使用一张【杀】。',
qianxin_info:'觉醒技当你造成一次伤害后若你已受伤你须减1点体力上限并获得技能“荐言”。',
jianyan_info:'出牌阶段限一次,你可以声明一种牌的类别或颜色,并亮出牌库中第一张符合你声明的牌,然后你令一名男性角色获得此牌',
rekurou_info:'出牌阶段限一次你可以弃置一张牌然后失去1点体力。',
zhaxiang_info:'锁定技 每当你失去1点体力后你摸三张牌。然后若此时是你的出牌阶段则直到回合结束你使用红色【杀】无距离限制且不能被【闪】响应你可以额外使用一张【杀】。',
qiaomeng_info:'每当你使用黑色【杀】对一名角色造成伤害后,你可以弃置该角色装备区里的一张牌,若此牌是坐骑牌,你于此牌置入弃牌堆时获得之。',
reyicong_info:'锁定技只要你的体力值大于2点你的进攻距离+1只要你的体力值为2点或更低你的防御距离+1',
refankui_info:'每当你受到1点伤害后你可以获得伤害来源的一张牌。',
retieji_info:'当你使用【杀】指定一名角色为目标后,你可以进行一次判定并令该角色的非锁定技失效直到回合结束,除非该角色弃置一张与判定结果花色相同的牌,否则不能使用【闪】抵消此【杀】。',
yijue_info:'出牌阶段限一次,你可以与一名其他角色拼点,若你赢,则直到回合结束,该角色不能使用或打出手牌且其非锁定技失效,若你没赢,你可令该角色回复一点体力。',
reyiji_info:'每当你受到1点伤害后你可以摸两张牌。然后你可以在至多两名角色的武将牌旁边分别扣置至多两张手牌这些角色的下个摸牌阶段开始时该角色获得其武将牌旁的这些牌。',
rejianxiong_info:'每当你受到伤害后,你可以获得对你造成伤害的牌,然后摸一张牌。',
reyajiao_info:'每当你于回合外使用或打出一张手牌时,你可以亮出牌堆顶的一张牌,若此牌与你此次使用或打出的牌类别相同,你可以将之交给任意一名角色;若不同则你可以将之置入弃牌堆。',
retishen_info:'限定技准备阶段开始时你可以将体力回复至等同于你上回合结束时的体力值然后你每以此法回复1点体力便摸一张牌。',
reqianxun_info:'每当一张延时类锦囊牌或其他角色使用的普通锦囊牌生效时,若你是此牌的唯一目标,你可以将所有手牌置于你的武将牌上,若如此做,此回合结束时,你获得你武将牌上的所有牌。',
relianying_info:'当你失去最后的手牌时你可以令至多X名角色各摸一张牌X为你此次失去的手牌数。',
reyingzi_info:'锁定技,摸牌阶段摸牌时,你额外摸一张牌;你的手牌上限不会因体力值的减少而减少。',
refanjian_info:'出牌阶段限一次,你可以展示一张手牌并将此牌交给一名其他角色。然后该角色选择一项:展示其手牌并弃置所有与此牌花色相同的牌,或失去一点体力。',
qingjian_info:'每当你于摸牌阶段外获得牌时,你可以将其中任意牌以任意顺序交给其他角色,每回合最多发动四次',
qinxue_info:'觉醒技准备阶段开始时若你的手牌数比体力值多3人数不少于7时改为2或更多你须减一点体力上限并获得技能【攻心】',
retuxi_info:'摸牌阶段摸牌时,你可以少摸任意张牌,然后选择等量的手牌数大于或等于你的其他角色,获得这些角色的各一张手牌。',
reluoyi_info:'你可以跳过摸牌阶段,然后展示牌堆顶的三张牌,获得其中的基本牌、武器牌和【决斗】,若如此做,直到你的下回合开始,你为伤害来源的【杀】或【决斗】造成的伤害+1。',
reganglie_info:'每当你受到1点伤害后可进行一次判定若结果为红色你对伤害来源造成1点伤害若结果为黑色你弃置其一张牌。',
botu:'博图',
botu_info:'回合结束时,若你本回合使用的牌包含四种花色,则你可以进行一个额外回合。',
xin_yuji:'界于吉',
re_zuoci:'界左慈',
"reguhuo":"蛊惑",
"reguhuo_info":"每名角色的回合限一次你可以扣置一张手牌当一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。然后你展示此牌。若有质疑的角色若此牌为假则此牌作废且所有质疑者各摸一张牌为真则所有质疑角色须弃置一张牌或失去1点体力并获得技能〖缠怨〗。",
"reguhuo_guess":"蛊惑",
"reguhuo_guess_info":"",
rechanyuan:"缠怨",
"rechanyuan_info":"锁定技你不能质疑于吉只要你的体力值不大于1你失去你的武将技能。",
"reguhuo_respond":"蛊惑",
"reguhuo_respond_info":"",
"reguhuo_wuxie":"蛊惑",
"reguhuo_wuxie_info":"",
"reguhuo_phase":"蛊惑",
"reguhuo_phase_info":"",
rehuashen:'化身',
rehuashen_info:'游戏开始后,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技或主公技)。',
rexinsheng:'新生',
rexinsheng_info:'当你受到1点伤害后你可以获得一张新的化身牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',
refresh_huo:'界限突破·火',
refresh_lin:'界限突破·林',
refresh_shan:'界限突破·山',
},
};
});