This commit is contained in:
Spmario233 2021-01-19 22:04:52 +08:00
parent bcc652fee9
commit 5906ec40a4
21 changed files with 4531 additions and 4044 deletions

View File

@ -855,8 +855,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
effect:{ effect:{
player:function(card,player,target,current){ player:function(card,player,target,current,isLink){
if(card.name=='sha'&&target.countCards('h')==0&&!target.hasSkillTag('filterDamage',null,{ if(card.name=='sha'&&!isLink&&target.countCards('h')==0&&!target.hasSkillTag('filterDamage',null,{
player:player, player:player,
card:card, card:card,
})) return [1,0,1,-3]; })) return [1,0,1,-3];
@ -891,11 +891,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{ })||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})) return; })) return;
if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget'; if(card.name=='nanman'||card.name=='wanjian'||card.name=='chuqibuyi') return 'zerotarget';
@ -984,12 +984,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(arg&&arg.player){ if(arg&&arg.player){
if(arg.player.hasSkillTag('unequip',false,{ if(arg.player.hasSkillTag('unequip',false,{
name:arg.card?arg.card.name:null, name:arg.card?arg.card.name:null,
target:player, target:target,
card:arg.card, card:arg.card,
})) return false; })) return false;
if(arg.player.hasSkillTag('unequip_ai',false,{ if(arg.player.hasSkillTag('unequip_ai',false,{
name:arg.card?arg.card.name:null, name:arg.card?arg.card.name:null,
target:player, target:target,
card:arg.card, card:arg.card,
})) return false; })) return false;
if(arg.player.hasSkillTag('jueqing',false,player)) return false; if(arg.player.hasSkillTag('jueqing',false,player)) return false;

View File

@ -173,33 +173,56 @@ game.import('card',function(lib,game,ui,get,ai,_status){
} }
}, },
ai:{ ai:{
canLink:function(player,target,card){
if(!target.isLinked()&&!player.hasSkill('wutiesuolian_skill')) return false;
if(target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)) return false;
if(player.hasSkill('jueqing')||target.hasSkill('gangzhi')||target.hasSkill('gangzhi')) return false;
return true;
},
basic:{ basic:{
useful:[5,1], useful:[5,1],
value:[5,1], value:[5,1],
}, },
order:function(item,player){ order:function(item,player){
if(player.hasSkillTag('presha',true,null,true)) return 10; if(player.hasSkillTag('presha',true,null,true)) return 10;
if(lib.linked.contains(get.nature(item))) return (player.getCardUsable('sha')>1?3:3.1); if(lib.linked.contains(get.nature(item))){
if(game.hasPlayer(function(current){
return current!=player&&current.isLinked()&&player.canUse(item,current,null,true)&&get.effect(current,item,player,player)>0&&lib.card.sha.ai.canLink(player,current,item);
})&&game.countPlayer(function(current){
return current.isLinked()&&get.damageEffect(current,player,player,get.nature(item))>0;
})>1) return 3.1;
return 3;
}
return 3.05; return 3.05;
}, },
result:{ result:{
target:function(player,target,card,isLink){ target:function(player,target,card,isLink){
if(!isLink&&player.hasSkill('jiu')){ var eff=function(){
if(!target.hasSkillTag('filterDamage',null,{ if(!isLink&&player.hasSkill('jiu')){
player:player, if(!target.hasSkillTag('filterDamage',null,{
card:card, player:player,
jiu:true, card:card,
})){ jiu:true,
if(get.attitude(player,target)>0){ })){
return -7; if(get.attitude(player,target)>0){
} return -7;
else{ }
return -4; else{
} return -4;
}
}
return -0.5;
} }
return -0.5; return -1.5;
} }();
return -1.5; if(!isLink&&target.mayHaveShan()&&!player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)) return eff/1.2;
return eff;
}, },
}, },
tag:{ tag:{
@ -1070,13 +1093,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
result:{ result:{
target:-1.5, target:-1.5,
player:function(player,target,card){ player:function(player,target,card){
if(get.cardtag(card,'yingbian_fujia')){ if(player.hasSkillTag('directHit_ai',true,{
var num=player.countCards('h',function(cardx){ target:target,
return cardx!=card&&(!card.cards||!card.cards.contains(cardx)); card:card,
}); },true)){
if(!game.hasPlayer(function(current){ return 0;
return current.countCards('h')>num;
})) return 0;
} }
if(get.damageEffect(target,player,target)>0&&get.attitude(player,target)>0&&get.attitude(target,player)>0){ if(get.damageEffect(target,player,target)>0&&get.attitude(player,target)>0&&get.attitude(target,player)>0){
return 0; return 0;
@ -1654,11 +1675,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{ })||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})) return; })) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
@ -1847,7 +1868,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger._result.bool=false; trigger._result.bool=false;
trigger._result.result=null; trigger._result.result=null;
} }
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)<0&&arg.card.name=='sha'&&player.countCards('he',function(card){
return card!=player.getEquip('guanshi')&&card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<5;
})>1) return true;
return false;
},
},
}, },
fangtian_skill:{ fangtian_skill:{
equipSkill:true, equipSkill:true,
@ -1979,7 +2009,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.responded) return false; if(event.responded) return false;
if(event.bagua_skill) return false; if(event.bagua_skill) return false;
if(!event.filterCard({name:'shan'},player,event)) return false; if(!event.filterCard||!event.filterCard({name:'shan'},player,event)) return false;
if(event.name=='chooseToRespond'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false; if(event.name=='chooseToRespond'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false;
if(player.hasSkillTag('unequip2')) return false; if(player.hasSkillTag('unequip2')) return false;
var evt=event.getParent(); var evt=event.getParent();
@ -2020,11 +2050,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{ })||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card card:card
})) return; })) return;
if(get.tag(card,'respondShan')) return 0.5; if(get.tag(card,'respondShan')) return 0.5;

View File

@ -230,12 +230,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
subtype:'equip5', subtype:'equip5',
loseDelay:false, loseDelay:false,
onEquip:function(){ onEquip:function(){
player.logSkill('tianjitu');
if(player.countCards('he',function(cardx){ if(player.countCards('he',function(cardx){
return cardx!=card; return cardx!=card;
})) player.chooseToDiscard(true,function(card){ })>0){
return card!=_status.event.card; player.logSkill('tianjitu');
},'he').set('card',card); player.chooseToDiscard(true,function(card){
return card!=_status.event.card;
},'he').set('card',card);
}
}, },
onLose:function(){ onLose:function(){
var next=game.createEvent('tianjitu_lose'); var next=game.createEvent('tianjitu_lose');
@ -252,6 +254,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}); });
}, },
ai:{ ai:{
value:function(card,player){
if(player.countCards('h')>3||get.position(card)!='e') return 0.5;
return (player.countCards('h')-5)/3;
},
equipValue:function(card,player){
if(player.countCards('h')>3||get.position(card)!='e') return 0.5;
return (player.countCards('h')-5)/3;
},
basic:{ basic:{
equipValue:0.5 equipValue:0.5
} }

View File

@ -383,6 +383,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
player.removeSkill('hiroto_huyu2'); player.removeSkill('hiroto_huyu2');
player.removeSkill('hiroto_zonglve'); player.removeSkill('hiroto_zonglve');
player.removeGaintag('hiroto_huyu2');
var target=player.storage.hiroto_huyu2; var target=player.storage.hiroto_huyu2;
if(target&&target.isAlive()){ if(target&&target.isAlive()){
var cards=[]; var cards=[];
@ -398,6 +399,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mark:'character', mark:'character',
intro:{content:'已成为$的工具人'}, intro:{content:'已成为$的工具人'},
group:'hiroto_huyu_gain',
},
hiroto_huyu_gain:{
trigger:{player:'gainBegin'},
silent:true,
filter:function(event,player){
if(player==_status.currentPhase) event.gaintag.add('hiroto_huyu2');
return false;
},
}, },
hiroto_zonglve:{ hiroto_zonglve:{
enable:'phaseUse', enable:'phaseUse',
@ -515,13 +525,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
position:'he', position:'he',
content:function(){ content:function(){
'step 0' player.draw(cards.length*2).gaintag=['shizuku_sizhi2'];
player.draw(cards.length*2); player.addTempSkill('shizuku_sizhi2');
'step 1'
if(get.itemtype(result)=='cards'){
player.addTempSkill('shizuku_sizhi2');
player.markAuto('shizuku_sizhi2',result);
}
}, },
ai:{ ai:{
order:5, order:5,
@ -529,49 +534,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
shizuku_sizhi2:{ shizuku_sizhi2:{
intro:{ onremove:function(player){
mark:function(dialog,content,player){ player.removeGaintag('shizuku_sizhi2');
if(content&&content.length){
if(player==game.me||player.isUnderControl()){
dialog.addAuto(content);
}
else{
return '本回合以此法获得了'+get.cnNumber(content.length)+'张牌';
}
}
},
content:'cards',
}, },
onremove:true,
mod:{ mod:{
targetInRange:function(card,player,target){ targetInRange:function(card,player,target){
if(!card.cards) return; if(!card.cards) return;
var storage=player.getStorage('shizuku_sizhi2');
for(var i of card.cards){ for(var i of card.cards){
if(!storage.contains(i)||get.color(i)!='black') return; if(!i.hasGaintag('shizuku_sizhi2')||get.color(i)!='black') return;
} }
return true; return true;
}, },
cardUsable:function(card,player,target){ cardUsable:function(card,player,target){
if(!card.cards) return; if(!card.cards) return;
var storage=player.getStorage('shizuku_sizhi2');
for(var i of card.cards){ for(var i of card.cards){
if(!storage.contains(i)||get.color(i)!='black') return; if(!i.hasGaintag('shizuku_sizhi2')||get.color(i)!='black') return;
} }
return Infinity; return Infinity;
}, },
ignoredHandcard:function(card,player){ ignoredHandcard:function(card,player){
if(player.getStorage('shizuku_sizhi2').contains(card)&&get.color(card)=='red'){ if(card.hasGaintag('shizuku_sizhi2')&&get.color(card)=='red'){
return true; return true;
} }
}, },
cardDiscardable:function(card,player,name){ cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&player.getStorage('shizuku_sizhi2').contains(card)&&get.color(card)=='red'){ if(name=='phaseDiscard'&&card.hasGaintag('shizuku_sizhi2')&&get.color(card)=='red'){
return false; return false;
} }
}, },
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(player.getStorage('shizuku_sizhi2').contains(card)&&get.color(card)=='black') return num-0.1; if(get.itemtype(card)=='card'&&card.hasGaintag('shizuku_sizhi2')&&get.color(card)=='black') return num-0.1;
}, },
}, },
}, },
@ -2608,18 +2600,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 3; return 3;
}); });
'step 1' 'step 1'
if(result.control=='cancel2'){event.finish();return;} if(result.control=='cancel2') return;
player.logSkill('shiorimiyuki_tingxian'); player.logSkill('shiorimiyuki_tingxian');
var num=1+result.index; var num=1+result.index;
player.draw(num); player.draw(num).gaintag=['shiorimiyuki_tingxian'];
'step 2'
event.cards=result;
player.recover(); player.recover();
'step 3' player.addTempSkill('shiorimiyuki_tingxian2');
if(get.itemtype(cards)=='cards'){
trigger.shiorimiyuki_tingxian=cards;
player.addTempSkill('shiorimiyuki_tingxian2');
}
}, },
}, },
shiorimiyuki_tingxian2:{ shiorimiyuki_tingxian2:{
@ -2628,25 +2614,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true, charlotte:true,
mod:{ mod:{
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; if(get.itemtype(card)=='card'&&card.hasGaintag('shiorimiyuki_tingxian')) return num+2;
if(cards&&cards.contains(card)) return num+2;
}, },
aiValuetarget:function(player,card,num){ aiValue:function(player,card,num){
var cards=_status.event.getParent('phaseUse').shiorimiyuki_tingxian; if(get.itemtype(card)=='card'&&card.hasGaintag('shiorimiyuki_tingxian')) return 0;
if(cards&&cards.contains(card)) return 0;
}, },
}, },
filter:function(event,player){ filter:function(event,player){
var hs=player.getCards('h'); return player.countCards('h',function(card){
return Array.isArray(event.shiorimiyuki_tingxian)&&event.shiorimiyuki_tingxian.filter(function(card){ return card.hasGaintag('shiorimiyuki_tingxian');
return hs.contains(card); })>0;
}).length>0
}, },
content:function(){ content:function(){
var hs=player.getCards('h'); player.loseHp(player.countCards('h',function(card){
player.loseHp(trigger.shiorimiyuki_tingxian.filter(function(card){ return card.hasGaintag('shiorimiyuki_tingxian');
return hs.contains(card); }));
}).length); player.removeGaintag('shiorimiyuki_tingxian');
}, },
}, },
shizuru_nianli:{ shizuru_nianli:{
@ -3965,6 +3948,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
trigger.directHit.addArray(game.players); trigger.directHit.addArray(game.players);
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name==player.storage.riki_spwenji_respond;
},
},
} }
} }
}, },
@ -4113,6 +4102,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='useCard') trigger.directHit.addArray(game.players); if(trigger.name=='useCard') trigger.directHit.addArray(game.players);
else trigger.directHit.add(player); else trigger.directHit.add(player);
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name=='sha';
},
},
global:'doruji_feiqu_ai',
},
doruji_feiqu_ai:{
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name=='sha'&&(arg.target.hasSkill('doruji_feiqu')||arg.target.hasSkill('godan_feiqu'));
},
},
}, },
akane_jugu:{ akane_jugu:{
audio:2, audio:2,
@ -4306,30 +4310,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]); if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]);
else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards); else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards);
cards=cards.filterInD('od'); cards=cards.filterInD('od');
trigger.player.gain(cards,'gain2','log'); trigger.player.gain(cards,'gain2','log').gaintag.add('sasami_funan');
trigger.player.addTempSkill('sasami_funan_use'); trigger.player.addTempSkill('sasami_funan_use');
if(!trigger.player.storage.sasami_funan_use){
trigger.player.storage.sasami_funan_use=[];
}
trigger.player.storage.sasami_funan_use.addArray(cards);
} }
'step 1' 'step 1'
var cards=trigger.cards.filterInD('od'); var cards=trigger.cards.filterInD('od');
player.gain(cards,'log','gain2'); player.gain(cards,'log','gain2');
}, },
subSkill:{ subSkill:{
jiexun:{
charlotte:true,
mark:true,
intro:{
content:'你发动“复难”时,无须令其他角色获得你使用的牌'
},
},
use:{ use:{
onremove:true, onremove:function(player){
player.removeGaintag('sasami_funan');
},
charlotte:true,
mod:{ mod:{
cardEnabled2:function(card,player){ cardEnabled2:function(card,player){
if(player.storage.sasami_funan_use&&player.storage.sasami_funan_use.contains(card)){ if(get.itemtype(card)=='card'&&card.hasGaintag('sasami_funan')){
return false; return false;
} }
} }
@ -5690,6 +5686,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
init:function(player,skill){ init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[]; if(!player.storage[skill]) player.storage[skill]=[];
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return player.storage.yukine_magic&&player.storage.yukine_magic.contains(arg.card.name);
},
},
}, },
komari_tiankou:{ komari_tiankou:{
trigger:{ trigger:{
@ -6504,6 +6506,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseToUse(); var next=player.chooseToUse();
next.set('norestore',true); next.set('norestore',true);
next.set('_backupevent','nsdaizhanx'); next.set('_backupevent','nsdaizhanx');
next.set('custom',{
add:{},
replace:{window:function(){}}
});
next.backup('nsdaizhanx'); next.backup('nsdaizhanx');
}, },
}, },
@ -11854,8 +11860,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rin_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后你进行判定。若结果为红色此【杀】对其的伤害值基数+1为黑色其无法闪避此【杀】为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。', rin_baoqiu_info:'锁定技,你的攻击范围+2。当你使用【杀】指定目标后你进行判定。若结果为红色此【杀】对其的伤害值基数+1为黑色其无法闪避此【杀】为♠/♥,此【杀】不计入使用次数限制且你摸一张牌;为♦/♣,目标角色的所有非锁定技失效直到回合结束,且你弃置其一张牌。',
sasami_miaobian:'喵变', sasami_miaobian:'喵变',
sasami_miaobian_info:'当你的体力值变为3以下时你获得技能〖公清〗2以下时你获得技能〖复难〗1以下时你获得技能〖暴球〗', sasami_miaobian_info:'当你的体力值变为3以下时你获得技能〖公清〗2以下时你获得技能〖复难〗1以下时你获得技能〖暴球〗',
"sasami_gongqing":"公清", sasami_gongqing:"公清",
"sasami_gongqing_info":"锁定技。当你受到伤害时,若伤害来源的攻击范围:<3则你令此伤害的数值减为1。>3你令此伤害+1。", sasami_gongqing_info:"锁定技。当你受到伤害时,若伤害来源的攻击范围:<3则你令此伤害的数值减为1。>3你令此伤害+1。",
sasami_funan:'复难', sasami_funan:'复难',
sasami_funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。', sasami_funan_info:'其他角色使用或打出牌响应你使用的牌时,你可令其获得你使用的牌(其本回合不能使用或打出这些牌),然后你获得其使用或打出的牌。',
sasami_baoqiu:'暴球', sasami_baoqiu:'暴球',

View File

@ -1946,10 +1946,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.tag(card,'respondSha')&&current<0) return 0.6 if(get.tag(card,'respondSha')&&current<0) return 0.6
} }
}, },
respondSha:true, directHit_ai:true,
order:4, skillTagFilter:function(player,tag,arg){
useful:-1, return arg.card.name=='sha'&&get.suit(arg.card)=='heart';
value:-1 },
} }
}, },
wuhun:{ wuhun:{

View File

@ -9,13 +9,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer"], mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer"],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"],
mobile_sunben:["re_sunben"], mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun"], mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian"],
mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao"], mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao"],
mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"],
}, },
}, },
character:{ character:{
xin_zhangfei:['male','shu',4,['new_repaoxiao','liyong']],
xin_hansui:['male','qun',4,['xinniluan','xiaoxi_hansui']], xin_hansui:['male','qun',4,['xinniluan','xiaoxi_hansui']],
hucheer:['male','qun',4,['daoji']], hucheer:['male','qun',4,['daoji']],
re_lingtong:['male','wu',4,['rexuanfeng']], re_lingtong:['male','wu',4,['rexuanfeng']],
@ -313,6 +314,80 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
skill:{ skill:{
//铁骑飞
liyong:{
audio:'retishen',
trigger:{player:'shaMiss'},
forced:true,
filter:function(event,player){
return player.isPhaseUsing();
},
content:function(){
trigger.getParent().liyong=true;
player.addTempSkill('liyong2','phaseUseEnd');
},
},
liyong2:{
audio:'retishen',
mark:true,
intro:{
content:'铁骑!强命!加伤!然后掉血嘞…',
},
trigger:{player:'useCardToPlayered'},
forced:true,
filter:function(event,player){
if(!event.card||event.card.name!='sha') return false;
var evt=event.getParent();
if(evt.liyong) return false;
var history=player.getHistory('useCard',function(evt){
return evt.card.name=='sha';
});
var evt2=history[history.indexOf(evt)-1];
return evt2&&evt2.liyong;
},
logTarget:'target',
content:function(){
var target=trigger.target;
target.addTempSkill('fengyin');
trigger.directHit.add(target);
var id=target.playerid;
var map=trigger.customArgs;
if(!map[id]) map[id]={};
if(!map[id].extraDamage) map[id].extraDamage=0;
map[id].extraDamage++;
trigger.getParent().liyong2=true;
},
group:['liyong3','liyong4'],
},
liyong3:{
trigger:{source:'damageSource'},
forced:true,
popup:false,
filter:function(event,player){
return event.card&&event.card.name=='sha'&&
event.player.isAlive()&&event.getParent(2).liyong2==true;
},
content:function(){
player.loseHp();
},
},
liyong4:{
trigger:{player:'useCardAfter'},
forced:true,
silent:true,
filter:function(evt,player){
if(!evt.card||evt.card.name!='sha') return false;
if(evt.liyong) return false;
var history=player.getHistory('useCard',function(evt){
return evt.card.name=='sha';
});
var evt2=history[history.indexOf(evt)-1];
return evt2&&evt2.liyong;
},
content:function(){
player.removeSkill('liyong2');
},
},
//韩遂 //韩遂
xinniluan:{ xinniluan:{
trigger:{global:'phaseJieshuBegin'}, trigger:{global:'phaseJieshuBegin'},
@ -687,7 +762,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}).length>0; }).length>0;
}, },
logTarget:'player', logTarget:'player',
@ -700,7 +775,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.awakenSkill('quanfeng'); player.awakenSkill('quanfeng');
var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}); });
if(list.length==1) event._result={control:list[0]}; if(list.length==1) event._result={control:list[0]};
else player.chooseControl(list).set('prompt','选择获得'+get.translation(trigger.player)+'的一个技能').set('forceDie',true).set('ai',function(){ else player.chooseControl(list).set('prompt','选择获得'+get.translation(trigger.player)+'的一个技能').set('forceDie',true).set('ai',function(){
@ -6479,7 +6554,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chengzhao_info:'一名角色的结束阶段,若你于本回合内获得了两张以上的牌,则你可以与一名其他角色拼点。若你赢,你视为对其使用一张无视防具的【杀】。', chengzhao_info:'一名角色的结束阶段,若你于本回合内获得了两张以上的牌,则你可以与一名其他角色拼点。若你赢,你视为对其使用一张无视防具的【杀】。',
yangyi:'杨仪', yangyi:'杨仪',
duoduan:'度断', duoduan:'度断',
duoduan_info:'每回合限一次,当你成为【杀】的目标后,你可以重铸一张牌。若如此做,此【杀】的使用者选择一项:摸两张牌令此【杀】无效,或弃置一张牌并令你不能闪避此【杀】。', duoduan_info:'每回合限一次,当你成为【杀】的目标后,你可以重铸一张牌。若如此做,你选择一项:①令使用者摸两张牌,且此【杀】无效。②令使用弃置一张牌,且你不能响应此【杀】。',
gongsun:'共损', gongsun:'共损',
gongsun_info:'出牌阶段开始时,你可以弃置两张牌并指定一名其他角色。你选择一个基本牌或普通锦囊牌的牌名。直到你的下回合开始或你死亡,你与其不能使用或打出或弃置此名称的牌。', gongsun_info:'出牌阶段开始时,你可以弃置两张牌并指定一名其他角色。你选择一个基本牌或普通锦囊牌的牌名。直到你的下回合开始或你死亡,你与其不能使用或打出或弃置此名称的牌。',
gongsun_shadow:'共损', gongsun_shadow:'共损',
@ -6575,7 +6650,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hongyi2:'弘仪', hongyi2:'弘仪',
hongyi_info:'出牌阶段限一次你可以弃置X张牌并选择一名其他角色X为场上已阵亡的角色数且至多为2。你的下回合开始前该角色造成伤害时进行判定若结果为黑色此伤害-1。红色受到伤害的角色摸一张牌。', hongyi_info:'出牌阶段限一次你可以弃置X张牌并选择一名其他角色X为场上已阵亡的角色数且至多为2。你的下回合开始前该角色造成伤害时进行判定若结果为黑色此伤害-1。红色受到伤害的角色摸一张牌。',
quanfeng:'劝封', quanfeng:'劝封',
quanfeng_info:'锁定技,限定技,一名角色死亡时,你选择获得其的一个技能(主公技,限定技,觉醒技,带有Charlotte标签的技能除外然后加1点体力上限并回复1点体力。', quanfeng_info:'锁定技,限定技,一名角色死亡时,你选择获得其的一个技能(主公技,限定技,觉醒技,隐匿技,带有Charlotte标签的技能除外然后加1点体力上限并回复1点体力。',
simashi:'司马师', simashi:'司马师',
baiyi:'败移', baiyi:'败移',
baiyi_info:'限定技,出牌阶段,若你已受伤,你可以交换两名其他角色的座次。', baiyi_info:'限定技,出牌阶段,若你已受伤,你可以交换两名其他角色的座次。',
@ -6595,6 +6670,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinniluan_info:'其他角色的结束阶段,若其本回合对除其以外的角色使用过牌,则你可以对其使用一张【杀】。若以此法使用的【杀】造成伤害,则你弃置其一张牌。', xinniluan_info:'其他角色的结束阶段,若其本回合对除其以外的角色使用过牌,则你可以对其使用一张【杀】。若以此法使用的【杀】造成伤害,则你弃置其一张牌。',
xiaoxi_hansui:'骁袭', xiaoxi_hansui:'骁袭',
xiaoxi_hansui_info:'你可以将一张黑色牌当做【杀】使用或打出。', xiaoxi_hansui_info:'你可以将一张黑色牌当做【杀】使用或打出。',
xin_zhangfei:'手杀张飞',
liyong:'厉勇',
liyong2:'厉勇',
liyong3:'厉勇',
liyong_info:'锁定技,若你于出牌阶段使用的【杀】被【闪】抵消,本阶段你下一张【杀】不可被响应且伤害+1指定的目标本回合非锁定技失效当此【杀】造成伤害后若目标角色未死亡你失去1点体力。',
mobile_standard:'手杀异构·标准包', mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临', mobile_shenhua:'手杀异构·神话再临',
mobile_yijiang1:'手杀异构·一将成名', mobile_yijiang1:'手杀异构·一将成名',

View File

@ -34,7 +34,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
old_caochong:['male','wei',3,['oldrenxin','oldchengxiang']], old_caochong:['male','wei',3,['oldrenxin','oldchengxiang']],
yuji:['male','qun',3,['old_guhuo'],['forbidai']], yuji:['male','qun',3,['old_guhuo'],['forbidai']],
zhangjiao:['male','qun',3,['leiji','guidao','huangtian'],['zhu']], zhangjiao:['male','qun',3,['leiji','guidao','huangtian'],['zhu']],
old_zhangfei:['male','shu',4,['paoxiao','new_tishen']], old_zhangfei:['male','shu',4,['new_repaoxiao','new_tishen']],
old_zhaoyun:['male','shu',4,['longdan','new_yajiao']], old_zhaoyun:['male','shu',4,['longdan','new_yajiao']],
old_huatuo:['male','qun',3,['jijiu','chulao']], old_huatuo:['male','qun',3,['jijiu','chulao']],
jsp_caoren:['male','wei',4,['kuiwei','yanzheng']], jsp_caoren:['male','wei',4,['kuiwei','yanzheng']],

File diff suppressed because it is too large Load Diff

View File

@ -938,6 +938,7 @@ window.noname_character_rank={
'mini_zhangchunhua', 'mini_zhangchunhua',
'hucheer', 'hucheer',
'jin_xiahouhui', 'jin_xiahouhui',
'xin_zhangfei',
], ],
c:[ c:[
'xiahoudun', 'xiahoudun',
@ -1526,6 +1527,7 @@ window.noname_character_rank={
'xin_lingtong', 'xin_lingtong',
'xin_liubiao', 'xin_liubiao',
're_xinxianying', 're_xinxianying',
'xin_zhangfei',
'wangrong', 'wangrong',
're_quyi', 're_quyi',
'hanfu', 'hanfu',

View File

@ -1182,7 +1182,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip_ai:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)>0) return false;
if(tag=='directHit_ai') return arg.target.hp>=Math.max(1,arg.target.countCards('h')-1);
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false; return false;
} }
@ -1318,7 +1321,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip_ai:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(tag=='directHit_ai') return arg.card.name=='sha'&&arg.target.countCards('e',function(card){
return get.value(card)>1;
})>0;
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false; return false;
} }
@ -2943,7 +2950,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip_ai:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)>0) return false;
if(tag=='directHit_ai') return arg.target.hp>=Math.max(1,arg.target.countCards('h')-1);
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false; return false;
} }
@ -3616,7 +3626,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var skills=lib.character[name][3]; var skills=lib.character[name][3];
for(var j=0;j<skills.length;j++){ for(var j=0;j<skills.length;j++){
var info=lib.skill[skills[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(info.charlotte||(info.unique&&!info.gainable)||info.juexingji||info.limited||info.zhuSkill||info.hiddenSkill) skills.splice(j--,1);
} }
if(skills.length){ if(skills.length){
player.storage.rehuashen.character.push(name); player.storage.rehuashen.character.push(name);
@ -4102,7 +4112,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
useShan:true, useShan:true,
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(get.tag(card,'respondShan')){ if(get.tag(card,'respondShan')&&!player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)){
var hastarget=game.hasPlayer(function(current){ var hastarget=game.hasPlayer(function(current){
return get.attitude(target,current)<0; return get.attitude(target,current)<0;
}); });
@ -4881,7 +4894,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
result:{ result:{
target:function (player,target){ target:function(player,target){
var hs=player.getCards('h'); var hs=player.getCards('h');
if(hs.length<3) return 0; if(hs.length<3) return 0;
if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){ if(target.countCards('h')>target.hp+1&&get.recoverEffect(target)>0){
@ -4894,24 +4907,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
order:9, order:9,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(!arg.target.hasSkillTag('new_yijue2')) return false;
},
}, },
}, },
"new_yijue2":{ "new_yijue2":{
trigger:{ trigger:{
player:"damageBegin1", player:"damageBegin1",
}, },
filter:function (event){ filter:function(event){
return event.source&&event.source.hasSkill('new_yijue')&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink(); return event.source&&event.source.hasSkill('new_yijue')&&event.card&&event.card.name=='sha'&&get.suit(event.card)=='heart'&&event.notLink();
}, },
silent:true, silent:true,
popup:false, popup:false,
forced:true, forced:true,
content:function (){ content:function(){
trigger.num++; trigger.num++;
}, },
mark:true, mark:true,
mod:{ mod:{
cardEnabled2:function (card){ cardEnabled2:function(card){
if(get.position(card)=='h') return false; if(get.position(card)=='h') return false;
}, },
}, },
@ -4919,10 +4936,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:"不能使用或打出手牌", content:"不能使用或打出手牌",
}, },
}, },
paoxiao_re_zhangfei:{audio:2},
"new_repaoxiao":{ "new_repaoxiao":{
audio:"paoxiao", audio:"paoxiao",
firstDo:true, firstDo:true,
audioname2:{old_guanzhang:'old_fuhun'}, audioname2:{
old_guanzhang:'old_fuhun',
xin_zhangfei:'paoxiao_re_zhangfei',
},
audioname:['re_zhangfei','guanzhang','xiahouba'], audioname:['re_zhangfei','guanzhang','xiahouba'],
trigger:{player:'useCard1'}, trigger:{player:'useCard1'},
forced:true, forced:true,
@ -5401,22 +5422,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
frequent:true, frequent:true,
content:function(){ content:function(){
"step 0" "step 0"
if(!player.storage.reluoshen) player.storage.reluoshen=[]; player.addTempSkill('reluoshen_add');
if(event.cards==undefined) event.cards=[]; event.cards=[];
"step 1"
var next=player.judge(function(card){ var next=player.judge(function(card){
if(get.color(card)=='black') return 1.5; if(get.color(card)=='black') return 1.5;
return -1.5; return -1.5;
}); });
if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){ if(get.mode()!='guozhan'&&!player.hasSkillTag('rejudge')) next.set('callback',function(){
if(event.judgeResult.color=='black'&&get.position(card,true)=='o'){ if(event.judgeResult.color=='black'&&get.position(card,true)=='o'){
player.storage.reluoshen.push(card); player.gain(card,'gain2').gaintag.add('reluoshen');
player.gain(card,'gain2');
} }
}); });
else next.set('callback',function(){ else next.set('callback',function(){
if(event.judgeResult.color=='black') event.getParent().orderingCards.remove(card); if(event.judgeResult.color=='black') event.getParent().orderingCards.remove(card);
}); });
"step 1" "step 2"
if(result.bool){ if(result.bool){
event.cards.push(result.card); event.cards.push(result.card);
player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','reluoshen'); player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','reluoshen');
@ -5429,14 +5450,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
} }
if(event.cards.length){ if(event.cards.length){
player.gain(event.cards,'gain2'); player.gain(event.cards,'gain2').gaintag.add('reluoshen');
player.storage.reluoshen.addArray(event.cards);
} }
event.finish(); event.finish();
} }
"step 2" "step 3"
if(result.bool){ if(result.bool){
event.goto(0); event.goto(1);
} }
else{ else{
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<event.cards.length;i++){
@ -5445,31 +5465,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
} }
if(event.cards.length){ if(event.cards.length){
player.gain(event.cards,'gain2'); player.gain(event.cards,'gain2').gaintag.add('reluoshen');
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:{ subSkill:{
clear:{ add:{
trigger:{player:'phaseAfter'}, mod:{
silent:true, ignoredHandcard:function(card,player){
content:function(){ if(card.hasGaintag('reluoshen')){
delete player.storage.reluoshen; return true;
} }
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&card.hasGaintag('reluoshen')){
return false;
}
},
},
onremove:function(player){
player.removeGaintag('reluoshen');
},
} }
} }
}, },
@ -6841,7 +6857,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audioname:['boss_lvbu3'], audioname:['boss_lvbu3'],
trigger:{player:'useCardToPlayered'}, trigger:{player:'useCardToPlayered'},
check:function(event,player){ check:function(event,player){
return get.attitude(player,event.target)<0; return get.attitude(player,event.target)<=0;
}, },
filter:function(event,player){ filter:function(event,player){
return event.card.name=='sha'; return event.card.name=='sha';
@ -6873,10 +6889,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{ ai:{
ignoreSkill:true, ignoreSkill:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(tag=='directHit_ai'){
return get.attitude(player,arg.target)<=0;
}
if(!arg||arg.isLink||!arg.card||arg.card.name!='sha') return false; if(!arg||arg.isLink||!arg.card||arg.card.name!='sha') return false;
if(!arg.target||get.attitude(player,arg.target)>=0) return false; if(!arg.target||get.attitude(player,arg.target)>=0) return false;
if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).contains(arg.skill)) return false; if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).contains(arg.skill)) return false;
}, },
directHit_ai:true,
} }
}, },
reyicong:{ reyicong:{
@ -7017,7 +7037,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
trigger.directHit.addArray(game.players); trigger.directHit.addArray(game.players);
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name=='sha'&&get.color(arg.card)=='red';
},
},
}, },
zhuhai:{ zhuhai:{
trigger:{global:'phaseJieshuBegin'}, trigger:{global:'phaseJieshuBegin'},
@ -7460,7 +7486,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
"step 0" "step 0"
target.chooseToUse({name:'sha'},'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ target.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.filterTarget.apply(this,arguments); return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',player); }).set('sourcex',player);
@ -8096,7 +8125,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reguhuo_ally_bg:'真', reguhuo_ally_bg:'真',
reguhuo_betray_bg:'假', reguhuo_betray_bg:'假',
rehuashen:'化身', rehuashen:'化身',
rehuashen_info:'游戏开始后,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技或主公技)。', rehuashen_info:'游戏开始后,你随机获得三张未加入游戏的武将牌,选一张置于你面前并声明该武将牌的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。你的每个准备阶段和结束后,你可以选择一项:①弃置至多两张未展示的化身牌并重新获得等量化身牌;②更换所展示的化身牌或技能。(你不可声明限定技、觉醒技、隐匿技、主公技等特殊技能)。',
rexinsheng:'新生', rexinsheng:'新生',
rexinsheng_info:'当你受到1点伤害后你可以获得一张新的化身牌。', rexinsheng_info:'当你受到1点伤害后你可以获得一张新的化身牌。',
re_zhurong:'界祝融', re_zhurong:'界祝融',

View File

@ -1058,11 +1058,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{ trigger:{
player:"useCard", player:"useCard",
}, },
filter:function (event,player){ filter:function(event,player){
return player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick'); return player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick');
}, },
check:function(trigger,player){ check:function(event,player){
if(player.countCards('h')<=player.hp+1&&((get.type(trigger.card)=='trick'&&game.countPlayer(function(current){return get.attitude(current,player)<=0&&current.countCards('h',{name:'wuxie'})})>0)||trigger.card.name=='sha')) return true; if(['wuzhong','kaihua','dongzhuxianji'].contains(event.card.name)) return false;
player._wanglie_temp=true;
var eff=0;
for(var i of event.targets){
eff+=get.effect(i,event.card,player,player);
}
delete player._wanglie_temp;
if(eff<0) return true;
if(!player.countCards('h',function(card){
return player.hasValueTarget(card,null,true);
})) return true;
if(get.tag(event.card,'damage')&&!player.needsToDiscard()&&!player.countCards('h',function(card){
return get.tag(card,'damage')&&player.hasValueTarget(card,null,true);
})) return true;
return false; return false;
}, },
content:function(){ content:function(){
@ -1070,6 +1083,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.directHit.addArray(game.players); trigger.directHit.addArray(game.players);
player.addTempSkill('drlt_wanglie2'); player.addTempSkill('drlt_wanglie2');
}, },
ai:{
pretao:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(player._wanglie_temp) return false;
player._wanglie_temp=true;
var bool=function(){
if(['wuzhong','kaihua','dongzhuxianji'].contains(arg.card.name)) return false;
if(get.attitude(player,arg.target)>0||!player.isPhaseUsing()) return false;
var cards=player.getCards('h',function(card){
return card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card));
});
var sha=player.getCardUsable('sha');
if(arg.card.name=='sha') sha--;
cards=cards.filter(function(card){
if(card.name=='sha'&&sha<=0) return false;
return player.hasValueTarget(card,null,true);
});
if(!cards.length) return true;
if(!get.tag(arg.card,'damage')) return false;
if(!player.needsToDiscard()&&!cards.filter(function(card){
return get.tag(card,'damage');
}).length) return true;
return false;
}();
delete player._wanglie_temp;
return bool;
},
},
}, },
"drlt_wanglie2":{ "drlt_wanglie2":{
mod:{ mod:{
@ -1078,7 +1120,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
}, },
liangyin:{ liangyin:{
audio:2, audio:2,
group:["liangyin_1","liangyin_2"], group:["liangyin_1","liangyin_2"],
@ -2231,7 +2272,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip_ai:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(tag=='directHit_ai') return arg.card.name=='sha'&&arg.target.countCards('e',function(card){
return get.value(card)>1;
})>0;
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false; return false;
} }
@ -2748,7 +2793,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
ai:{ ai:{
threaten:0.5 threaten:0.5,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)<=0&&arg.card.name=='sha'&&player.countCards('h',function(card){
return card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card));
})>=arg.target.countCards('h')) return true;
return false;
},
} }
}, },
tiaoxin:{ tiaoxin:{
@ -2761,7 +2813,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
"step 0" "step 0"
target.chooseToUse({name:'sha'},'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ target.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},'挑衅:对'+get.translation(player)+'使用一张杀,或令其弃置你的一张牌').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.filterTarget.apply(this,arguments); return lib.filter.filterTarget.apply(this,arguments);
}).set('sourcex',player); }).set('sourcex',player);
@ -3707,7 +3762,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var skills=lib.character[name][3].slice(0); var skills=lib.character[name][3].slice(0);
for(var i=0;i<skills.length;i++){ for(var i=0;i<skills.length;i++){
var info=lib.skill[skills[i]]; var info=lib.skill[skills[i]];
if(info.limited||info.juexingji||info.charlotte||info.zhuSkill){ if(info.limited||info.juexingji||info.charlotte||info.zhuSkill||info.hiddenSkill){
skills.splice(i--,1); skills.splice(i--,1);
} }
} }
@ -3792,7 +3847,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!info){ if(!info){
continue; continue;
} }
if(!info.limited&&!info.juexingji&&!info.charlotte&&!info.zhuSkill){ if(!info.limited&&!info.juexingji&&!info.charlotte&&!info.zhuSkill&&!info.hiddenSkill){
add=true;break; add=true;break;
} }
} }
@ -4733,7 +4788,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{ else{
map[id].shanRequired=2; map[id].shanRequired=2;
} }
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg.card.name!='sha'||arg.target.sex!='female'||arg.target.countCards('h','shan')>1) return false;
},
},
}, },
benghuai:{ benghuai:{
audio:2, audio:2,
@ -5917,7 +5978,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
attackFrom:function(from,to,distance){ attackFrom:function(from,to,distance){
if(get.zhu(from,'shouyue')) return distance-1; if(get.zhu(from,'shouyue')) return distance-1;
} }
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)>0||arg.card.name!='sha') return false;
var length=arg.target.countCards('h');
return (length>=player.hp||length<=player.getAttackRange());
},
},
}, },
kuanggu:{ kuanggu:{
audio:2, audio:2,
@ -7402,7 +7471,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
beige_info:'当有角色受到【杀】造成的伤害后你可以弃一张牌并令其进行一次判定若判定结果为♥该角色回复1点体力该角色摸两张牌♣伤害来源弃两张牌♠伤害来源将其武将牌翻面', beige_info:'当有角色受到【杀】造成的伤害后你可以弃一张牌并令其进行一次判定若判定结果为♥该角色回复1点体力该角色摸两张牌♣伤害来源弃两张牌♠伤害来源将其武将牌翻面',
duanchang_info:'锁定技,杀死你的角色失去当前的所有技能。', duanchang_info:'锁定技,杀死你的角色失去当前的所有技能。',
// fushen_info:'回合开始前,你可以选择与任意一名角色交换控制权,该角色可选择在下一个回合开始前与你换回', // fushen_info:'回合开始前,你可以选择与任意一名角色交换控制权,该角色可选择在下一个回合开始前与你换回',
huashen_info:'所有人都展示武将牌后,你随机获得两张未加入游戏的武将牌,选一张置于你面前并声明该武将的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。在你的每个准备阶段和结束后,你可以替换化身牌,你须为新的化身重新声明一项技能(你不可声明限定技、觉醒技或主公技)。', huashen_info:'所有人都展示武将牌后,你随机获得两张未加入游戏的武将牌,选一张置于你面前并声明该武将的一项技能,你拥有该技能且同时将性别和势力属性变成与该武将相同直到该化身被替换。在你的每个准备阶段和结束后,你可以替换化身牌,你须为新的化身重新声明一项技能(你不可声明限定技、觉醒技、隐匿技、主公技等特殊技能)。',
xinsheng_info:'每当你受到1点伤害后你可获得一张新的化身牌。', xinsheng_info:'每当你受到1点伤害后你可获得一张新的化身牌。',
jiangwei:'姜维', jiangwei:'姜维',
liushan:'刘禅', liushan:'刘禅',

View File

@ -566,7 +566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}).length>0; }).length>0;
}, },
logTarget:'player', logTarget:'player',
@ -578,7 +578,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.awakenSkill('tuogu'); player.awakenSkill('tuogu');
var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}); });
if(list.length==1) event._result={control:list[0]}; if(list.length==1) event._result={control:list[0]};
else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){ else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){
@ -603,7 +603,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ return event.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}).length>0; }).length>0;
}, },
logTarget:'player', logTarget:'player',
@ -611,7 +611,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0' 'step 0'
var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){ var list=trigger.player.getStockSkills('仲村由理','天下第一').filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.juexingji&&!info.zhuSkill&&!info.charlotte&&!info.limited; return info&&!info.juexingji&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte&&!info.limited;
}); });
if(list.length==1) event._result={control:list[0]}; if(list.length==1) event._result={control:list[0]};
else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){ else trigger.player.chooseControl(list).set('prompt','选择令'+get.translation(player)+'获得一个技能').set('forceDie',true).set('ai',function(){
@ -3095,11 +3095,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
} }
}); });
player.$throw(list); player.$throw(list,1000);
player.lose(list,ui.discardPile,'visible'); player.lose(list,ui.discardPile,'visible');
game.log(player,'将',list,'置入弃牌堆'); game.log(player,'将',list,'置入弃牌堆');
} }
}, },
mark:{
trigger:{
player:'gainBegin',
global:'phaseBeginStart',
},
silent:true,
filter:function(event,player){
return event.name!='gain'||player!=_status.currentPhase;
},
content:function(){
if(trigger.name=='gain') trigger.gaintag.add('zishu');
else player.removeGaintag('zishu');
},
},
draw:{ draw:{
trigger:{player:'gainAfter'}, trigger:{player:'gainAfter'},
audio:"zishu", audio:"zishu",
@ -3117,7 +3131,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
threaten:1.2, threaten:1.2,
nogain:1 nogain:1
}, },
group:['zishu_draw','zishu_discard',] group:['zishu_draw','zishu_discard','zishu_mark']
}, },
xinyingyuan:{ xinyingyuan:{
audio:'yingyuan', audio:'yingyuan',
@ -3504,6 +3518,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current!=player&&get.distance(current,player)<=1; return current!=player&&get.distance(current,player)<=1;
})); }));
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return get.distance(arg.target,player)<=1;
},
},
}, },
wylianji:{ wylianji:{
enable:'phaseUse', enable:'phaseUse',
@ -4858,8 +4878,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delay:false, delay:false,
filterCard:{name:'sha'}, filterCard:{name:'sha'},
content:function(){ content:function(){
target.gain(cards,player,'giveAuto'); target.gain(cards,player,'giveAuto').gaintag.add('fuman');
target.storage.fuman3=cards[0];
target.storage.fuman2=player; target.storage.fuman2=player;
target.addTempSkill('fuman2',{player:'phaseAfter'}); target.addTempSkill('fuman2',{player:'phaseAfter'});
}, },
@ -4879,13 +4898,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fuman2:{ fuman2:{
mod:{ mod:{
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(card==player.storage.fuman3&&player.storage.fuman2.isIn()) return num+get.sgn(get.attitude(player,player.storage.fuman2)); if(get.itemtype(card)=='card'&&card.hasGaintag('fuman')&&player.storage.fuman2.isIn()) return num+get.sgn(get.attitude(player,player.storage.fuman2));
}, },
}, },
trigger:{player:'useCard'}, trigger:{player:'useCard'},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
return event.cards.contains(player.storage.fuman3)&&player.storage.fuman2.isIn(); if(!player.storage.fuman2.isIn()) return false;
return player.getHistory('lose',function(evt){
if(evt.getParent()!=event) return false;
for(var i in evt.gaintag_map){
if(evt.gaintag_map[i].contains('fuman')) return true;
}
return false;
}).length>0;
}, },
mark:true, mark:true,
intro:{ intro:{
@ -4900,7 +4926,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
onremove:function(player){ onremove:function(player){
delete player.storage.fuman2; delete player.storage.fuman2;
delete player.storage.fuman3; player.removeGaintag('fuman');
}, },
}, },
qizhou:{ qizhou:{
@ -5212,7 +5238,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){ for(var i of list){
skills.addArray((lib.character[i][3]||[]).filter(function(skill){ skills.addArray((lib.character[i][3]||[]).filter(function(skill){
var info=get.info(skill); var info=get.info(skill);
return info&&!info.zhuSkill&&!info.limited&&!info.juexingji&&!info.charlotte; return info&&!info.zhuSkill&&!info.limited&&!info.juexingji&&!info.hiddenSkill&&!info.charlotte;
})); }));
} }
if(!list.length||!skills.length){event.finish();return;} if(!list.length||!skills.length){event.finish();return;}
@ -5341,6 +5367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:'damageEnd', player:'damageEnd',
}, },
forced:true, forced:true,
locked:false,
filter:function(event){ filter:function(event){
return event.card&&event.card.name=='sha'; return event.card&&event.card.name=='sha';
}, },
@ -5637,70 +5664,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(name=='phaseDiscard'&&get.color(card)=='black') return false; if(name=='phaseDiscard'&&get.color(card)=='black') return false;
} }
}, },
trigger:{global:'gainBegin'}, trigger:{global:'gainAfter'},
forced:true, forced:true,
popup:false, popup:false,
filter:function(event,player){ filter:function(event,player){
if(event.source==player&&event.player!=player){ if(event.player!=player){
for(var i=0;i<event.cards.length;i++){ var hs=event.player.getCards('h');
if(get.color(event.cards[i])=='black') return true; var evt=event.getl(player);
} return evt&&evt.cards2&&evt.cards2.filter(function(card){
return hs.contains(card)&&get.color(card,event.player)=='black';
}).length>0;
} }
return false; return false;
}, },
content:function(){ content:function(){
trigger.player.addSkill('xiehui2'); trigger.player.addSkill('xiehui2');
if(!trigger.player.storage.xiehui2){ var hs=trigger.player.getCards('h');
trigger.player.storage.xiehui2=[]; var cards=trigger.getl(player).cards2.filter(function(card){
} return hs.contains(card)&&get.color(card,trigger.player)=='black';
for(var i=0;i<trigger.cards.length;i++){ });
if(get.color(trigger.cards[i])=='black'){ trigger.player.addGaintag(cards,'xiehui');
trigger.player.storage.xiehui2.add(trigger.cards[i]);
}
}
} }
}, },
xiehui2:{ xiehui2:{
mark:true, mark:true,
intro:{ intro:{
content:'不能使用、打出或弃置获得的黑色牌', content:'不能使用、打出或弃置获得的黑色牌',
nocount:true
}, },
mod:{ mod:{
cardDiscardable:function(card,player){ cardDiscardable:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false; if(card.hasGaintag('xiehui')) return false;
}, },
cardEnabled2:function(card,player){ cardEnabled2:function(card,player){
if(player.storage.xiehui2&&player.storage.xiehui2.contains(card)) return false; if(get.itemtype(card)=='card'&&card.hasGaintag('xiehui')) return false;
}, },
}, },
group:['xiehui3','xiehui4']
},
xiehui3:{
trigger:{player:'changeHp'}, trigger:{player:'changeHp'},
forced:true, forced:true,
popup:false, popup:false,
charlotte:true,
filter:function(event){ filter:function(event){
return event.num<0; return event.num<0;
}, },
content:function(){ content:function(){
player.removeSkill('xiehui2'); player.removeSkill('xiehui2');
delete player.storage.xiehui2; },
} onremove:function(player){
}, player.removeGaintag('xiehui');
xiehui4:{ },
trigger:{player:'loseEnd'},
silent:true,
content:function(){
if(player.storage.xiehui2){
for(var i=0;i<player.storage.xiehui2.length;i++){
if(trigger.cards.contains(player.storage.xiehui2[i])){
player.storage.xiehui2.splice(i--,1);
}
}
}
// player.updateMarks();
}
}, },
shanjia:{ shanjia:{
sync:function(player){ sync:function(player){
@ -10043,10 +10054,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseControl('basic','trick','equip','cancel2',function(){ player.chooseControl('basic','trick','equip','cancel2',function(){
var source=_status.event.source; var source=_status.event.source;
if(get.attitude(_status.event.player,source)>0) return 'cancel2'; if(get.attitude(_status.event.player,source)>0) return 'cancel2';
if(!source.storage.jilei2||!source.storage.jilei2.contains('basic')) return 'basic'; var list=['basic','trick','equip'].filter(function(name){
if(_status.currentPhase!=source) return 'trick'; return (!source.storage.jilei2||!source.storage.jilei2.contains(name));
if(lib.filter.cardUsable({name:'sha'},source)&&source.countCards('h')>=2) return 'basic'; });
return 'trick'; if(!list.length) return 'cancel2';
if(list.contains('trick')&&source.countCards('h',function(card){
return get.type(card,source)=='trick'&&source.hasValueTarget(card);
})>1) return 'trick';
return list[0];
}).set('prompt',get.prompt2('jilei',trigger.source)).set('source',trigger.source); }).set('prompt',get.prompt2('jilei',trigger.source)).set('source',trigger.source);
'step 1' 'step 1'
if(result.control!='cancel2'){ if(result.control!='cancel2'){
@ -15557,9 +15572,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olxingshen_info:'当你受到伤害后你可以随机摸至多两张牌。若如此做你获得X个“省”且下一次发动〖严教〗展示牌时移去所有“省”并多展示等量的牌。X为你已损失的体力值且你至多拥有6个“省”', olxingshen_info:'当你受到伤害后你可以随机摸至多两张牌。若如此做你获得X个“省”且下一次发动〖严教〗展示牌时移去所有“省”并多展示等量的牌。X为你已损失的体力值且你至多拥有6个“省”',
caoshuang:'曹爽', caoshuang:'曹爽',
tuogu:'托孤', tuogu:'托孤',
tuogu_info:'限定技,一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技等特殊技能除外),然后你获得其选择的技能。', tuogu_info:'限定技,一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技,隐匿技等特殊技能除外),然后你获得其选择的技能。',
retuogu:'托孤', retuogu:'托孤',
retuogu_info:'一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技等特殊技能除外),然后你获得其选择的技能并失去上次因〖托孤〗获得的技能。', retuogu_info:'一名角色死亡时,你可以令其选择其武将牌上的一个技能(主公技,限定技,觉醒技,隐匿技等特殊技能除外),然后你获得其选择的技能并失去上次因〖托孤〗获得的技能。',
shanzhuan:'擅专', shanzhuan:'擅专',
shanzhuan_info:'当你对其他角色造成伤害后,若其判定区没有牌,则你你可以将其的一张牌置于其的判定区。若此牌不为延时锦囊牌且此牌为:红色,此牌视为【乐不思蜀】;黑色,此牌视为【兵粮寸断】。回合结束时,若你本回合内未造成伤害,你可摸一张牌。', shanzhuan_info:'当你对其他角色造成伤害后,若其判定区没有牌,则你你可以将其的一张牌置于其的判定区。若此牌不为延时锦囊牌且此牌为:红色,此牌视为【乐不思蜀】;黑色,此牌视为【兵粮寸断】。回合结束时,若你本回合内未造成伤害,你可摸一张牌。',
spniluan:'逆乱', spniluan:'逆乱',

View File

@ -233,25 +233,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
player.addSkill('tairan2'); player.addSkill('tairan2');
if(!player.storage.tairan2) player.storage.tairan2={ if(!player.storage.tairan2) player.storage.tairan2=0;
num:0,
cards:[],
};
var num=Math.min(player.maxHp,5)-player.hp; var num=Math.min(player.maxHp,5)-player.hp;
if(num){ if(num>0){
player.storage.tairan2.num+=num; player.storage.tairan2+=num;
player.recover(num); player.recover(num);
} }
'step 1' 'step 1'
player.drawTo(Math.min(player.maxHp,5)); player.drawTo(Math.min(player.maxHp,5)).gaintag=['tairan'];
'step 2'
if(get.itemtype(result)=='cards') player.storage.tairan2.cards.addArray(result);
}, },
}, },
tairan2:{ tairan2:{
mod:{ mod:{
aiValue:function(player,card,num){ aiValue:function(player,card,num){
if(player.storage.tairan2.cards.contains(card)) return num/10; if(card.hasGaintag&&card.hasGaintag('tairan')) return num/10;
}, },
}, },
audio:'tairan', audio:'tairan',
@ -261,12 +256,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
onremove:true, onremove:true,
content:function(){ content:function(){
var map=player.storage.tairan2; var map=player.storage.tairan2;
if(map.num) player.loseHp(map.num); if(map>0) player.loseHp(map);
var hs=player.getCards('h'); var hs=player.getCards('h',function(card){
var cards=map.cards.filter(function(card){ return card.hasGaintag('tairan');
return hs.contains(card);
}); });
if(cards.length) player.discard(cards); if(hs.length) player.discard(hs);
player.removeSkill('tairan2'); player.removeSkill('tairan2');
}, },
}, },
@ -289,7 +283,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.card=card; event.card=card;
player.gain(card,'gain2'); player.gain(card,'gain2');
'step 1' 'step 1'
if(player.getCards('h').contains(card)&&get.subtype(card)=='equip5') player.chooseUseTarget(card,true).nopopup=true; if(player.getCards('h').contains(card)&&get.subtype(card)=='equip5') player.chooseUseTarget(card).nopopup=true;
}, },
}, },
jyishi:{ jyishi:{
@ -444,11 +438,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
player.showCards(result.cards); player.showCards(result.cards);
var type=get.type2(result.cards[0],target); var type=get.type2(result.cards[0],target);
if(!target.storage.choufa2) target.storage.choufa2=[]; var cards=target.getCards('h',function(card){
target.storage.choufa2.addArray(target.getCards('h',function(card){
return get.type2(card,target)!=type; return get.type2(card,target)!=type;
})); });
if(target.storage.choufa2.length) target.addTempSkill('choufa2',{player:'phaseAfter'}); if(cards.length){
target.addTempSkill('choufa2',{player:'phaseAfter'});
target.addGaintag(cards,'choufa');
}
}, },
ai:{ ai:{
order:9, order:9,
@ -460,22 +456,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
choufa2:{ choufa2:{
onremove:true, onremove:function(player){
player.removeGaintag('choufa');
},
charlotte:true, charlotte:true,
mod:{ mod:{
cardname:function(card,player){ cardname:function(card,player){
if(player.storage.choufa2.contains(card)) return 'sha'; if(card.hasGaintag('choufa')) return 'sha';
}, },
cardnature:function(card,player){ cardnature:function(card,player){
if(player.storage.choufa2.contains(card)) return false; if(card.hasGaintag('choufa')) return false;
}, },
}, },
trigger:{player:'loseEnd'},
silent:true,
content:function(){
player.storage.choufa2.removeArray(trigger.hs);
if(!player.storage.choufa2.length) player.removeSkill('choufa2');
},
}, },
zhaoran:{ zhaoran:{
audio:2, audio:2,
@ -631,21 +623,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseButton(true); var next=player.chooseButton(true);
next.set('dialog',event.videoId); next.set('dialog',event.videoId);
next.set('ai',function(button){ next.set('ai',function(button){
if(_status.event.answer) return button.link==_status.event.answer?1:0;
return get.value(button.link,_status.event.player); return get.value(button.link,_status.event.player);
}); });
if(player.hasSkillTag('viewHandcard',null,target,true)) next.set('answer',card);
'step 3' 'step 3'
game.broadcastAll('closeDialog',event.videoId); game.broadcastAll('closeDialog',event.videoId);
player.addTempSkill('yanxi2');
var card2=result.links[0]; var card2=result.links[0];
if(card2==card){ if(card2==card){
player.popup('洗具'); player.popup('洗具');
cards.remove(card2); cards.remove(card2);
player.$gain2(cards); player.$gain2(cards);
player.gain(cards,'log'); player.gain(cards,'log').gaintag.add('yanxi');
player.gain(card,target,'bySelf','giveAuto'); player.gain(card,target,'bySelf','giveAuto').gaintag.add('yanxi');
} }
else{ else{
player.popup('杯具'); player.popup('杯具');
player.gain(card2,'gain2'); player.gain(card2,'gain2').gaintag.add('yanxi');
} }
}, },
ai:{ ai:{
@ -656,6 +651,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
}, },
yanxi2:{
mod:{
ignoredHandcard:function(card,player){
if(card.hasGaintag('yanxi')) return true;
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&card.hasGaintag('yanxi')) return false;
},
},
onremove:function(player){
player.removeGaintag('yanxi');
},
},
sanchen:{ sanchen:{
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
@ -722,6 +730,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.loseMaxHp(); player.loseMaxHp();
player.addSkillLog('pozhu'); player.addSkillLog('pozhu');
}, },
derivation:'pozhu',
}, },
pozhu:{ pozhu:{
enable:'phaseUse', enable:'phaseUse',
@ -772,10 +781,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
var stat=player.getStat(); var stat=player.getStat();
return stat.kill&&stat.kill>0||stat.damage&&stat.damage>1; return stat.damage&&stat.damage>0;
}, },
content:function(){ content:function(){
player.addMark('xijue',1); player.addMark('xijue',player.getStat().damage);
}, },
}, },
xijue_tuxi:{ xijue_tuxi:{
@ -829,11 +838,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function(){ content:function(){
"step 0" "step 0"
var nono=(Math.abs(get.attitude(player,trigger.player))<3||trigger.player.hp>1||trigger.player.countCards('e')); var nono=(Math.abs(get.attitude(player,trigger.player))<3||trigger.player.hp>(player.countMark('xijue')*1.5)||trigger.player.countCards('e',function(card){
return get.value(card,trigger.player)<=0;
}));
if(get.damageEffect(trigger.player,player,player)<=0){ if(get.damageEffect(trigger.player,player,player)<=0){
nono=true; nono=true;
} }
var next=player.chooseToDiscard('是否弃置一枚“爵”,对'+get.translation(trigger.player)+'发动【骁果】?',{type:'basic'}); var next=player.chooseToDiscard('是否弃置一枚“爵”和一张基本牌,对'+get.translation(trigger.player)+'发动【骁果】?',{type:'basic'});
next.set('ai',function(card){ next.set('ai',function(card){
if(_status.event.nono) return 0; if(_status.event.nono) return 0;
return 8-get.useful(card); return 8-get.useful(card);
@ -1022,6 +1033,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current!=player&&get.distance(player,current)<=1; return current!=player&&get.distance(player,current)<=1;
})); }));
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return get.distance(player,arg.target)<=1;
},
},
}, },
zhuide:{ zhuide:{
audio:2, audio:2,
@ -1298,8 +1315,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.useCard(get.autoViewAs({name:'sha',nature:'ice'},result.cards),result.cards,false,trigger.player,'qingleng'); player.useCard(get.autoViewAs({name:'sha',nature:'ice'},result.cards),result.cards,false,trigger.player,'qingleng');
if(!player.storage.qingleng||!player.storage.qingleng.contains(trigger.player)){
player.draw();
player.markAuto('qingleng',[trigger.player]);
player.storage.qingleng.sortBySeat();
}
} }
}, },
intro:{
content:'已对$发动过此技能',
},
}, },
xuanmu:{ xuanmu:{
audio:2, audio:2,
@ -2103,13 +2128,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
position:'he', position:'he',
content:function(){ content:function(){
'step 0' player.draw(cards.length*2).gaintag=['minsi2'];
player.draw(cards.length*2); player.addTempSkill('minsi2');
'step 1'
if(get.itemtype(result)=='cards'){
player.addTempSkill('minsi2');
player.markAuto('minsi2',result);
}
}, },
ai:{ ai:{
order:5, order:5,
@ -2117,41 +2137,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
minsi2:{ minsi2:{
intro:{ onremove:function(player){
mark:function(dialog,content,player){ player.removeGaintag('minsi2');
if(content&&content.length){
if(player==game.me||player.isUnderControl()){
dialog.addAuto(content);
}
else{
return '本回合以此法获得了'+get.cnNumber(content.length)+'张牌';
}
}
},
content:'cards',
}, },
onremove:true,
mod:{ mod:{
targetInRange:function(card,player,target){ targetInRange:function(card,player,target){
if(!card.cards) return; if(!card.cards) return;
var storage=player.getStorage('minsi2');
for(var i of card.cards){ for(var i of card.cards){
if(!storage.contains(i)||get.color(i)!='black') return; if(!i.hasGaintag('minsi2')||get.color(i)!='black') return;
} }
return true; return true;
}, },
ignoredHandcard:function(card,player){ ignoredHandcard:function(card,player){
if(player.getStorage('minsi2').contains(card)&&get.color(card)=='red'){ if(card.hasGaintag('minsi2')&&get.color(card)=='red'){
return true; return true;
} }
}, },
cardDiscardable:function(card,player,name){ cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&player.getStorage('minsi2').contains(card)&&get.color(card)=='red'){ if(name=='phaseDiscard'&&card.hasGaintag('minsi2')&&get.color(card)=='red'){
return false; return false;
} }
}, },
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(player.getStorage('minsi2').contains(card)&&get.color(card)=='black') return num-0.1; if(get.itemtype(card)=='card'&&card.hasGaintag('minsi2')&&get.color(card)=='black') return num-0.1;
}, },
}, },
}, },
@ -2243,16 +2251,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
event.finish(); event.finish();
'step 2' 'step 2'
var list=game.filterPlayer(function(current){
return current.hasSkill('panshi');
});
player.chooseCardTarget({ player.chooseCardTarget({
prompt:get.prompt('cixiao'), prompt:get.prompt('cixiao'),
prompt2:('弃置一张牌并将'+get.translation(game.filterPlayer(function(current){ prompt2:('弃置一张牌并将'+get.translation(list)+'的「义子」标记转移给其他角色'),
return current.hasSkill('panshi');
}))+'的「义子」标记转移给其他角色'),
position:'he', position:'he',
filterTarget:function(card,player,target){ filterTarget:function(card,player,target){
return player!=target&&!target.hasSkill('panshi'); return player!=target&&!target.hasSkill('panshi');
}, },
filterCard:lib.filter.cardDiscardable, filterCard:lib.filter.cardDiscardable,
ai1:function(card){
if(_status.event.goon) return 5-get.value(card);
return 0;
},
ai2:function(target){
var player=_status.event.player;
var att=-get.attitude(player,target);
return att*target.countCards('h');
},
goon:function(target){
var att=-get.attitude(player,target);
return att*target.countCards('h')<=0;
}(list[0]),
}); });
'step 3' 'step 3'
if(result.bool){ if(result.bool){
@ -4253,7 +4275,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var max=0; var max=0;
var min=1; var min=1;
target.countCards('e',function(card){ target.countCards('e',function(card){
var val=get.value(card); var val=get.value(card,target);
if(val>max) max=val; if(val>max) max=val;
if(val<min) min=val; if(val<min) min=val;
}); });
@ -4510,7 +4532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2' 'step 2'
var target=targets.shift(); var target=targets.shift();
event.target=target; event.target=target;
if(target.isAlive()) target.chooseToDiscard('he','弃置一张牌,或本回合内不能使用或打出牌').set('ai',function(card){ if(target.isAlive()) target.chooseToDiscard('he','弃置一张牌,或本回合内不能使用或打出牌').set('ai',function(card){
var player=_status.event.player; var player=_status.event.player;
var source=_status.event.getTrigger().player; var source=_status.event.getTrigger().player;
if(get.attitude(source,player)>0) return -1; if(get.attitude(source,player)>0) return -1;
@ -4521,13 +4543,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(target.isAlive()&&!result.bool) target.addTempSkill('xiying2'); if(target.isAlive()&&!result.bool) target.addTempSkill('xiying2');
if(targets.length) event.goto(2); if(targets.length) event.goto(2);
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.target.hasSkill('xiying2');
},
},
}, },
xiying2:{ xiying2:{
mark:true, mark:true,
intro:{content:'本回合内不能使用或打出牌'}, intro:{content:'本回合内不能使用或打出牌'},
mod:{ mod:{
cardEnabled2:function (card){ cardEnabled2:function(card){
if(get.position(card)=='h') return false; return false;
}, },
}, },
}, },
@ -5737,7 +5765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.expandSkills(list2); game.expandSkills(list2);
for(var k=0;k<list2.length;k++){ for(var k=0;k<list2.length;k++){
var info=lib.skill[list2[k]]; var info=lib.skill[list2[k]];
if(!info||!info.trigger||!info.trigger.player||info.silent||info.limited||info.juexingji||info.zhuanhuanji) continue; if(!info||!info.trigger||!info.trigger.player||info.silent||info.limited||info.juexingji||info.zhuanhuanji||info.hiddenSkill) continue;
if(info.trigger.player==name2||Array.isArray(info.trigger.player)&&info.trigger.player.contains(name2)){ if(info.trigger.player==name2||Array.isArray(info.trigger.player)&&info.trigger.player.contains(name2)){
if(info.init||info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue; if(info.init||info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue;
if(info.filter){ if(info.filter){
@ -5814,7 +5842,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.expandSkills(list2); game.expandSkills(list2);
for(var k=0;k<list2.length;k++){ for(var k=0;k<list2.length;k++){
var info=lib.skill[list2[k]]; var info=lib.skill[list2[k]];
if(!info||!info.enable||info.viewAs||info.limited||info.juexingji||info.zhuanhuanji) continue; if(!info||!info.enable||info.viewAs||info.limited||info.juexingji||info.zhuanhuanji||info.hiddenSkill) continue;
if(info.enable=='phaseUse'||Array.isArray(info.enable)&&info.enable.contains('phaseUse')){ if(info.enable=='phaseUse'||Array.isArray(info.enable)&&info.enable.contains('phaseUse')){
if(info.init||info.onChooseToUse||info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue; if(info.init||info.onChooseToUse||info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue;
if(info.filter){ if(info.filter){
@ -6732,6 +6760,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current!=player; return current!=player;
})); }));
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg.card.name==player.storage.spwenji_respond;
},
},
} }
} }
}, },
@ -7344,15 +7378,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
audio:'xinfu_bijing', audio:'xinfu_bijing',
filter:function (event,player){ filter:function (event,player){
if(!player.storage.xinfu_bijing) return false;
if(event.player==player) return false; if(event.player==player) return false;
return player.getHistory('lose',function(evt){ return player.getHistory('lose',function(evt){
return evt.cards.contains(player.storage.xinfu_bijing); for(var i in evt.gaintag_map){
if(evt.gaintag_map[i].contains('xinfu_bijing')) return true;
}
}).length>0&&event.player.countCards('he')>0; }).length>0&&event.player.countCards('he')>0;
}, },
forced:true, forced:true,
logTarget:'player', logTarget:'player',
content:function (){ content:function(){
trigger.player.chooseToDiscard(2,true,'he'); trigger.player.chooseToDiscard(2,true,'he');
}, },
sub:true, sub:true,
@ -7362,13 +7397,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:"phaseZhunbeiBegin", player:"phaseZhunbeiBegin",
}, },
forced:true, forced:true,
filter:function (event,player){ filter:function(event,player){
if(!player.storage.xinfu_bijing)return false; return player.getCards('h',function(card){
return player.getCards('h').contains(player.storage.xinfu_bijing); return card.hasGaintag('xinfu_bijing');
}).length>0;
}, },
content:function (){ content:function (){
player.discard(player.storage.xinfu_bijing); player.discard(player.getCards('h',function(card){
delete player.storage.xinfu_bijing; return card.hasGaintag('xinfu_bijing');
}));
}, },
sub:true, sub:true,
}, },
@ -7389,8 +7426,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.logSkill('xinfu_bijing'); player.logSkill('xinfu_bijing');
//player.showCards(result.cards); player.addGaintag(result.cards,'xinfu_bijing');
player.storage.xinfu_bijing=result.cards[0];
} }
}, },
}, },
@ -8275,7 +8311,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gaolan:'高览', gaolan:'高览',
xiying:'袭营', xiying:'袭营',
xiying2:'袭营', xiying2:'袭营',
xiying_info:'出牌阶段开始时,你可以弃置一张非基本手牌,然后令所有其他角色依次选择一项:弃置一张牌,或本回合内不能使用或打出牌。', xiying_info:'出牌阶段开始时,你可以弃置一张非基本手牌,然后令所有其他角色依次选择一项:弃置一张牌,或本回合内不能使用或打出牌。',
lvkuanglvxiang:'吕旷吕翔', lvkuanglvxiang:'吕旷吕翔',
liehou:'列侯', liehou:'列侯',
liehou_info:'出牌阶段限一次,你可以令一名攻击范围内的角色交给你一张手牌,然后你将一张手牌交给攻击范围内的另一名角色。', liehou_info:'出牌阶段限一次,你可以令一名攻击范围内的角色交给你一张手牌,然后你将一张手牌交给攻击范围内的另一名角色。',
@ -8476,7 +8512,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huishi:'慧识', huishi:'慧识',
huishi_info:'摸牌阶段你可以放弃摸牌改为观看牌堆顶的X张牌获得其中的一半向下取整然后将其余牌置入牌堆底。X为牌堆数量的个位数', huishi_info:'摸牌阶段你可以放弃摸牌改为观看牌堆顶的X张牌获得其中的一半向下取整然后将其余牌置入牌堆底。X为牌堆数量的个位数',
qingleng:'清冷', qingleng:'清冷',
qingleng_info:'一名角色的回合结束时若其体力值与手牌数之和不小于X你可将一张牌当无距离限制的冰属性【杀】对其使用X为牌堆数量的个位数', qingleng_info:'一名角色的回合结束时若其体力值与手牌数之和不小于X你可将一张牌当无距离限制的冰属性【杀】对其使用X为牌堆数量的个位数。若你本局游戏内未对其发动过此技能,则你摸一张牌。',
xuanmu:'宣穆', xuanmu:'宣穆',
xuanmu2:'宣穆', xuanmu2:'宣穆',
xuanmu_info:'锁定技,隐匿技。你于其他角色的回合登场时,防止你受到的伤害直到回合结束。', xuanmu_info:'锁定技,隐匿技。你于其他角色的回合登场时,防止你受到的伤害直到回合结束。',
@ -8510,7 +8546,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhanghuyuechen:'张虎乐綝', zhanghuyuechen:'张虎乐綝',
xijue:'袭爵', xijue:'袭爵',
xijue_gain:'袭爵', xijue_gain:'袭爵',
xijue_info:'锁定技游戏开始时你获得4枚“爵”。回合结束时若你于本回合内造成过的伤害点数总和大于1或于本回合内杀死过角色则你获得一枚“爵”。你可弃置一枚“爵”并在合适的时机发动〖突袭〗和〖骁果〗。', xijue_info:'锁定技游戏开始时你获得4枚“爵”。回合结束时你获得X枚“爵”X为你本回合内造成的伤害数。你可弃置一枚“爵”并在合适的时机发动〖突袭〗和〖骁果〗。',
xijue_tuxi:'突袭', xijue_tuxi:'突袭',
xijue_xiaoguo:'骁果', xijue_xiaoguo:'骁果',
duyu:'杜预', duyu:'杜预',
@ -8525,7 +8561,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shiren:'识人', shiren:'识人',
shiren_info:'隐匿技。你于其他角色的回合内登场时,若其有手牌,则你可对其发动〖宴戏〗。', shiren_info:'隐匿技。你于其他角色的回合内登场时,若其有手牌,则你可对其发动〖宴戏〗。',
yanxi:'宴戏', yanxi:'宴戏',
yanxi_info:'出牌阶段,你可选择一名有手牌的角色。你将该角色的一张随机手牌与牌堆顶的两张牌混合后展示,并选择其中一张。若你以此法选择的是该角色的手牌,则你获得这三张牌。否则你获得选择的牌。', yanxi2:'宴戏',
yanxi_info:'出牌阶段,你可选择一名有手牌的角色。你将该角色的一张随机手牌与牌堆顶的两张牌混合后展示,并选择其中一张。若你以此法选择的是该角色的手牌,则你获得这三张牌。否则你获得选择的牌。你通过〖宴戏〗获得的牌,不计入当前回合的手牌上限。',
jin_simazhao:'晋司马昭', jin_simazhao:'晋司马昭',
jin_simazhao_ab:'司马昭', jin_simazhao_ab:'司马昭',
tuishi:'推弑', tuishi:'推弑',
@ -8541,7 +8578,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jin_xiahouhui:'晋夏侯徽', jin_xiahouhui:'晋夏侯徽',
jin_xiahouhui_ab:'夏侯徽', jin_xiahouhui_ab:'夏侯徽',
baoqie:'宝箧', baoqie:'宝箧',
baoqie_info:'隐匿技,锁定技。你登场后,从牌堆中获得一张不为赠物的宝物牌。若此牌在你的手牌区内为宝物牌,则你使用此牌。', baoqie_info:'隐匿技,锁定技。你登场后,从牌堆中获得一张不为赠物的宝物牌。若此牌在你的手牌区内为宝物牌,则你可以使用此牌。',
jyishi:'宜室', jyishi:'宜室',
jyishi_info:'每回合限一次,当有其他角色于其出牌阶段内因弃置而失去手牌后,你可令其获得这些牌中位于弃牌堆的一张,然后你获得其余位于弃牌堆的牌。', jyishi_info:'每回合限一次,当有其他角色于其出牌阶段内因弃置而失去手牌后,你可令其获得这些牌中位于弃牌堆的一张,然后你获得其余位于弃牌堆的牌。',
shiduo:'识度', shiduo:'识度',

View File

@ -1594,7 +1594,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
trigger.getParent().directHit.add(trigger.target); trigger.getParent().directHit.add(trigger.target);
} }
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)>0||arg.card.name!='sha'||!ui.cardPile.firstChild||get.color(ui.cardPile.firstChild,player)!='red') return false;
},
},
}, },
jizhi:{ jizhi:{
audio:2, audio:2,
@ -2397,7 +2403,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{ else{
map[id].shanRequired=2; map[id].shanRequired=2;
} }
} },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg.card.name!='sha'||arg.target.countCards('h','shan')>1) return false;
},
},
}, },
wushuang2:{ wushuang2:{
audio:'wushuang', audio:'wushuang',
@ -2421,10 +2433,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
map[idt].shaReq[id]++; map[idt].shaReq[id]++;
}, },
ai:{ ai:{
result:{ directHit_ai:true,
target:function(card,player,target){ skillTagFilter:function(player,tag,arg){
if(card.name=='juedou'&&target.countCards('h')>0) return [1,0,0,-1]; if(arg.card.name!='juedou'||Math.floor(arg.target.countCards('h','sha')/2)>player.countCards('h','sha')) return false;
}
} }
} }
}, },
@ -2683,7 +2694,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiahoudun:['re_xiahoudun','sp_xiahoudun','xin_xiahoudun','xiahoudun'], xiahoudun:['re_xiahoudun','sp_xiahoudun','xin_xiahoudun','xiahoudun'],
liubei:['re_liubei','sp_liubei','liubei'], liubei:['re_liubei','sp_liubei','liubei'],
guanyu:['re_guanyu','jsp_guanyu','guanyu'], guanyu:['re_guanyu','jsp_guanyu','guanyu'],
zhangfei:['re_zhangfei','sp_zhangfei','old_zhangfei','zhangfei'], zhangfei:['re_zhangfei','sp_zhangfei','xin_zhangfei','old_zhangfei','zhangfei'],
zhaoyun:['re_zhaoyun','sp_zhaoyun','jsp_zhaoyun','old_zhaoyun','zhaoyun'], zhaoyun:['re_zhaoyun','sp_zhaoyun','jsp_zhaoyun','old_zhaoyun','zhaoyun'],
machao:['re_machao','sp_machao','machao','old_machao'], machao:['re_machao','sp_machao','machao','old_machao'],
zhugeliang:['re_zhugeliang','zhugeliang'], zhugeliang:['re_zhugeliang','zhugeliang'],

View File

@ -606,20 +606,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
case 0:{ case 0:{
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current)&&get.effect(current,event.card,player,player)>0; return lib.filter.targetEnabled2(event.card,player,current)&&!event.targets.contains(current)&&get.effect(current,event.card,player,player)>0;
})) return 1.2+Math.random(); })) return 1.6+Math.random();
return 0; return 0;
} }
case 1:{ case 1:{
if(event.targets.filter(function(current){
var eff1=get.effect(current,event.card,player,player);
player._xinbenxi_ai=true;
var eff2=get.effect(current,event.card,player,player);
delete player._xinbenxi_ai;
return eff1>eff2;
}).length) return 1.9+Math.random();
return Math.random(); return Math.random();
} }
case 2:{ case 2:{
if(event.card.name=='sha'||event.card.name=='juedou'||get.type(event.type)=='trick'&&game.hasPlayer(function(current){ var num=1.3;
return get.attitude(current,player)<0&&current.hasWuxie(); if(event.card.name=='sha'&&event.targets.filter(function(current){
})) return 1+Math.random(); if(current.mayHaveShan()&&get.attitude(player,current)<=0){
return Math.random(); if(current.hasSkillTag('useShan')) num=1.9;
return true;
}
return false;
}).length) return num+Math.random();
return 0.5+Math.random();
} }
case 3:{ case 3:{
return get.tag(event.card,'damage')+Math.random(); return (get.tag(event.card,'damage')||0)+Math.random();
} }
} }
}); });
@ -665,17 +677,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip:true, unequip:true,
//norespond:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(tag=='unequip'){ if(tag=='unequip'){
if(arg&&player.storage.xinbenxi_unequip.contains(arg.card)) return true; if(arg&&player.storage.xinbenxi_unequip.contains(arg.card)) return true;
return false; return false;
} }
if(tag=='norespond'&&Array.isArray(arg)){ if(_status.currentPhase!=player||game.hasPlayer(function(current){
var evt=arg[2].getParent(); return get.distance(player,current)>1;
if(evt.type=='card'&&player.storage.xinbenxi_directHit.contains(evt.card)) return true; })) return false;
return false; if(tag=='directHit_ai') return arg.card.name=='sha';
} if(arg.card.name!='sha'&&arg.card.name!='chuqibuyi') return false;
var card=arg.target.getEquip(2);
if(card&&card.name.indexOf('bagua')!=-1) return true;
if(player._xinbenxi_ai) return false;
}, },
}, },
subSkill:{ subSkill:{
@ -2022,12 +2038,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]); if(get.itemtype(trigger.respondTo[1])=='card') cards.push(trigger.respondTo[1]);
else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards); else if(trigger.respondTo[1].cards) cards.addArray(trigger.respondTo[1].cards);
cards=cards.filterInD('od'); cards=cards.filterInD('od');
trigger.player.gain(cards,'gain2','log'); trigger.player.gain(cards,'gain2','log').gaintag.add('funan');
trigger.player.addTempSkill('funan_use'); trigger.player.addTempSkill('funan_use');
if(!trigger.player.storage.funan_use){
trigger.player.storage.funan_use=[];
}
trigger.player.storage.funan_use.addArray(cards);
} }
'step 1' 'step 1'
var cards=trigger.cards.filterInD('od'); var cards=trigger.cards.filterInD('od');
@ -2042,10 +2054,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
use:{ use:{
onremove:true, onremove:function(player){
player.removeGaintag('funan');
},
charlotte:true,
mod:{ mod:{
cardEnabled2:function(card,player){ cardEnabled2:function(card,player){
if(player.storage.funan_use&&player.storage.funan_use.contains(card)){ if(get.itemtype(card)=='card'&&card.hasGaintag('funan')){
return false; return false;
} }
} }
@ -2147,6 +2162,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
ai:{ ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(player._zhuandui_temp) return false;
player._zhuandui_temp=true;
var bool=function(){
if(arg.card.name!='sha'||get.attitude(player,arg.target)>=0||!arg.target.countCards('h')) return false;
if(arg.target.countCards('h')==1&&(!arg.target.getEquip('bagua')||player.hasSkillTag('unequip',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
})||player.hasSkillTag('unequip_ai',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
}))) return true;
return player.countCards('h',function(card){
return card!=arg.card&&(!arg.card.cards||!arg.card.cards.contains(card))&&get.value(card)<=4&&(card.number>=(11+arg.target.countCards('h')/2)||get.suit(card,player)=='heart');
})>0;
}();
delete player._zhuandui_temp;
return bool;
},
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(card.name=='sha'&&current<0) return 0.7; if(card.name=='sha'&&current<0) return 0.7;
@ -2161,7 +2198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player; var player=_status.event.player;
return (!player.hasCard(function(card){ return (!player.hasCard(function(card){
var val=get.value(card); var val=get.value(card);
return val<0||(val<=4&&card.number>=11); return val<0||(val<=4&&(card.number>=11||get.suit(card)=='heart'));
},'h'))?20:0; },'h'))?20:0;
}, },
filter:function(event){ filter:function(event){
@ -4697,15 +4734,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:['fulin_count','fulin_reset'], group:['fulin_count','fulin_reset'],
subSkill:{ subSkill:{
reset:{ reset:{
trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, trigger:{player:['phaseBefore','phaseAfter']},
silent:true, silent:true,
priority:10, priority:10,
content:function(){ content:function(){
player.storage.fulin=[]; player.removeGaintag('fulin');
} }
}, },
count:{ count:{
trigger:{player:'gainEnd'}, trigger:{player:'gainBegin'},
audio:'fulin', audio:'fulin',
forced:true, forced:true,
silent:true, silent:true,
@ -4713,25 +4750,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return _status.currentPhase==player; return _status.currentPhase==player;
}, },
content:function(){ content:function(){
if(!player.storage.fulin){ trigger.gaintag.add('fulin');
player.storage.fulin=[];
}
for(var i=0;i<trigger.cards.length;i++){
player.storage.fulin.add(trigger.cards[i]);
}
} }
} }
} },
onremove:function(player){
player.removeGaintag('fulin');
},
}, },
fulin2:{ fulin2:{
mod:{ mod:{
ignoredHandcard:function(card,player){ ignoredHandcard:function(card,player){
if(player.storage.fulin&&player.storage.fulin.contains(card)){ if(card.hasGaintag('fulin')){
return true; return true;
} }
}, },
cardDiscardable:function(card,player,name){ cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&player.storage.fulin&&player.storage.fulin.contains(card)){ if(name=='phaseDiscard'&&card.hasGaintag('fulin')){
return false; return false;
} }
}, },
@ -6905,6 +6940,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
effect:{ effect:{
player:function(card,player,target){ player:function(card,player,target){
if(_status.event.skill=='zhanjue'){ if(_status.event.skill=='zhanjue'){
if(player.hasSkillTag('directHit_ai',true,{
target:target,
card:card,
},true)) return;
if(player.countCards('h')>=3||target.countCards('h')>=3) return 'zeroplayertarget'; if(player.countCards('h')>=3||target.countCards('h')>=3) return 'zeroplayertarget';
if(player.countCards('h','tao')) return 'zeroplayertarget'; if(player.countCards('h','tao')) return 'zeroplayertarget';
if(target.countCards('h','sha')>1) return 'zeroplayertarget'; if(target.countCards('h','sha')>1) return 'zeroplayertarget';
@ -7761,7 +7800,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
ai:{ ai:{
unequip_ai:true, unequip_ai:true,
directHit_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(get.attitude(player,arg.target)>0||!player.isPhaseUsing()) return false;
if(tag=='directHit_ai') return arg.target.hp>=Math.max(1,arg.target.countCards('h')-1);
if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true; if(arg&&arg.name=='sha'&&arg.target.getEquip(2)) return true;
return false; return false;
} }
@ -8260,6 +8302,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.addVideo('storage',result.targets[0],['qianxi2',event.color]); game.addVideo('storage',result.targets[0],['qianxi2',event.color]);
} }
}, },
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(!arg.target.hasSkill('qianxi2')) return false;
if(arg.card.name=='sha') return arg.target.storage.qianxi2=='red'&&(!arg.target.getEquip('bagua')||player.hasSkillTag('unequip',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
})||player.hasSkillTag('unequip_ai',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
}));
return arg.target.storage.qianxi2=='black';
}
},
}, },
qianxi2:{ qianxi2:{
//trigger:{global:'phaseAfter'}, //trigger:{global:'phaseAfter'},

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[ window.noname_asset_list=[
'v1.9.108.2.2', 'v1.9.108.3',
'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3', 'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3', 'audio/background/aozhan_rewrite.mp3',
@ -3657,6 +3657,7 @@ window.noname_asset_list=[
'image/character/jin_xiahouhui.jpg', 'image/character/jin_xiahouhui.jpg',
'image/character/zhanghuyuechen.jpg', 'image/character/zhanghuyuechen.jpg',
'image/character/zhangling.jpg', 'image/character/zhangling.jpg',
'image/character/xin_zhangfei.jpg',
'image/character/baiwuchang.jpg', 'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg', 'image/character/baosanniang.jpg',

View File

@ -13776,7 +13776,8 @@
else{ else{
event.targets[1].addJudge(link); event.targets[1].addJudge(link);
} }
event.targets[0].$give(link,event.targets[1]) event.targets[0].$give(link,event.targets[1],false);
game.log(event.targets[0],'的',link,'被移动给了',event.targets[1])
event.result.card=link; event.result.card=link;
event.result.position=get.position(link); event.result.position=get.position(link);
game.delay(); game.delay();
@ -14477,20 +14478,21 @@
} }
if(event.animate!=false){ if(event.animate!=false){
if(event.visible){ if(event.visible){
player.gain(cards,'gain2'); var next=player.gain(cards,'gain2');
if(event.bottom) game.log(player,'从牌堆底摸了'+get.cnNumber(num)+'张牌(',cards,''); if(event.bottom) game.log(player,'从牌堆底摸了'+get.cnNumber(num)+'张牌(',cards,'');
else game.log(player,'摸了'+get.cnNumber(num)+'张牌(',cards,''); else game.log(player,'摸了'+get.cnNumber(num)+'张牌(',cards,'');
} }
else{ else{
player.gain(cards,'draw'); var next=player.gain(cards,'draw');
} }
} }
else{ else{
player.gain(cards); var next=player.gain(cards);
if(event.$draw){ if(event.$draw){
player.$draw(cards.length); player.$draw(cards.length);
} }
} }
if(event.gaintag) next.gaintag.addArray(event.gaintag);
event.result=cards; event.result=cards;
}, },
discard:function(){ discard:function(){
@ -14673,6 +14675,7 @@
if(lib.config.reverse_sort) sort=-sort; if(lib.config.reverse_sort) sort=-sort;
cards[num].fix(); cards[num].fix();
cards[num].style.transform=''; cards[num].style.transform='';
cards[num].addGaintag(event.gaintag);
if(_status.discarded){ if(_status.discarded){
_status.discarded.remove(cards[num]); _status.discarded.remove(cards[num]);
} }
@ -14690,14 +14693,14 @@
} }
var addv=function(){ var addv=function(){
if(player==game.me){ if(player==game.me){
game.addVideo('gain12',player,[get.cardsInfo(frag1.childNodes),get.cardsInfo(frag2.childNodes)]); game.addVideo('gain12',player,[get.cardsInfo(frag1.childNodes),get.cardsInfo(frag2.childNodes),event.gaintag]);
} }
}; };
var broadcast=function(){ var broadcast=function(){
game.broadcast(function(player,cards,num){ game.broadcast(function(player,cards,num,gaintag){
player.directgain(cards); player.directgain(cards,null,gaintag);
_status.cardPileNum=num; _status.cardPileNum=num;
},player,cards,ui.cardPile.childNodes.length); },player,cards,ui.cardPile.childNodes.length,event.gaintag);
}; };
if(event.animate=='draw'){ if(event.animate=='draw'){
player.$draw(cards.length); player.$draw(cards.length);
@ -14819,10 +14822,15 @@
} }
} }
"step 1" "step 1"
event.gaintag_map={};
var hs=[],es=[],js=[]; var hs=[],es=[],js=[];
var hej=player.getCards('hej'); var hej=player.getCards('hej');
event.stockcards=cards.slice(0); event.stockcards=cards.slice(0);
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
if(cards[i].gaintag&&cards[i].gaintag.length){
event.gaintag_map[cards[i].cardid]=cards[i].gaintag.slice(0);
cards[i].removeGaintag(true);
}
cards[i].style.transform+=' scale(0.2)'; cards[i].style.transform+=' scale(0.2)';
cards[i].classList.remove('glow'); cards[i].classList.remove('glow');
cards[i].recheck(); cards[i].recheck();
@ -15863,6 +15871,22 @@
}, },
player:{ player:{
//新函数 //新函数
addGaintag:function(cards,tag){
game.addVideo('addGaintag',this,[get.cardsInfo(cards),tag]);
game.broadcastAll(function(player,cards,tag){
var hs=player.getCards('h');
for(var i of cards){
if(hs.contains(i)) i.addGaintag(tag);
}
},this,cards,tag);
},
removeGaintag:function(tag){
game.addVideo('removeGaintag',this,tag);
game.broadcastAll(function(player,tag){
var cards=player.getCards('h');
for(var i of cards) i.removeGaintag(tag);
},this,tag);
},
canSave:function(target){ canSave:function(target){
var player=this; var player=this;
if(player.hasSkillTag('save',true,target,true)) return true; if(player.hasSkillTag('save',true,target,true)) return true;
@ -16926,6 +16950,7 @@
name1:this.name1, name1:this.name1,
name2:this.name2, name2:this.name2,
handcards:this.getCards('h'), handcards:this.getCards('h'),
gaintag:[],
equips:this.getCards('e'), equips:this.getCards('e'),
judges:this.getCards('j'), judges:this.getCards('j'),
disableJudge:this.storage._disableJudge, disableJudge:this.storage._disableJudge,
@ -16947,6 +16972,9 @@
for(var i=0;i<state.judges.length;i++){ for(var i=0;i<state.judges.length;i++){
state.views[i]=state.judges[i].viewAs; state.views[i]=state.judges[i].viewAs;
} }
for(var i=0;i<state.handcards.length;i++){
state.gaintag[i]=state.handcards[i].gaintag;
}
if(this.getModeState){ if(this.getModeState){
state.mode=this.getModeState(); state.mode=this.getModeState();
} }
@ -18090,10 +18118,14 @@
if(card.name=='du') addi+=5; if(card.name=='du') addi+=5;
var source=_status.event.source; var source=_status.event.source;
var player=_status.event.player; var player=_status.event.player;
if(source&&source!=player&&get.attitude(player,source)>1){ var getn=function(card){
return -get.number(card)-get.value(card)/2+addi; if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13;
return get.number(card);
} }
return get.number(card)-get.value(card)/2+addi; if(source&&source!=player&&get.attitude(player,source)>1){
return -getn(card)-get.value(card)/2+addi;
}
return getn(card)-get.value(card)/2+addi;
} }
next.setContent('chooseToCompareMultiple'); next.setContent('chooseToCompareMultiple');
} }
@ -18106,21 +18138,25 @@
return ais(); return ais();
} }
var player=get.owner(card); var player=get.owner(card);
var getn=function(card){
if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13;
return get.number(card);
}
var event=_status.event.getParent(); var event=_status.event.getParent();
var to=(player==event.player?event.target:event.player); var to=(player==event.player?event.target:event.player);
var addi=(get.value(card)>=8&&get.type(card)!='equip')?-10:0; var addi=(get.value(card)>=8&&get.type(card)!='equip')?-10:0;
if(card.name=='du') addi+=5; if(card.name=='du') addi+=5;
if(player==event.player){ if(player==event.player){
if(get.attitude(player,to)>0&&event.small){ if(get.attitude(player,to)>0&&event.small){
return -get.number(card)-get.value(card)/2+addi; return -getn(card)-get.value(card)/2+addi;
} }
return get.number(card)-get.value(card)/2+addi; return getn(card)-get.value(card)/2+addi;
} }
else{ else{
if(get.attitude(player,to)>0&&!event.small){ if(get.attitude(player,to)>0&&!event.small){
return -get.number(card)-get.value(card)/2+addi; return -getn(card)-get.value(card)/2+addi;
} }
return get.number(card)-get.value(card)/2+addi; return getn(card)-get.value(card)/2+addi;
} }
} }
next.setContent('chooseToCompare'); next.setContent('chooseToCompare');
@ -19159,7 +19195,7 @@
game.addVideo('directequip',this,get.cardsInfo(cards)); game.addVideo('directequip',this,get.cardsInfo(cards));
} }
}, },
directgain:function(cards,broadcast){ directgain:function(cards,broadcast,gaintag){
var hs=this.getCards('h'); var hs=this.getCards('h');
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
if(hs.contains(cards[i])){ if(hs.contains(cards[i])){
@ -19168,6 +19204,7 @@
} }
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
cards[i].fix(); cards[i].fix();
if(gaintag) cards[i].addGaintag(gaintag);
var sort=lib.config.sort_card(cards[i]); var sort=lib.config.sort_card(cards[i]);
if(this==game.me){ if(this==game.me){
cards[i].classList.add('drawinghidden'); cards[i].classList.add('drawinghidden');
@ -19253,6 +19290,7 @@
}); });
if(map.cards.length>0) return map; if(map.cards.length>0) return map;
}; };
next.gaintag=[];
return next; return next;
}, },
give:function(cards,target,visible){ give:function(cards,target,visible){
@ -23366,6 +23404,28 @@
} }
}, },
card:{ card:{
addGaintag:function(gaintag){
if(Array.isArray(gaintag)) this.gaintag=gaintag.slice(0);
else this.gaintag.add(gaintag);
var str='';
for(var gi=0;gi<this.gaintag.length;gi++){
str+=get.translation(this.gaintag[gi]);
if(gi<this.gaintag.length-1) str+=' ';
}
this.node.gaintag.innerHTML=str;
},
removeGaintag:function(tag){
if(tag===true){
if(this.gaintag&&this.gaintag.length||this.node.gaintag.innerHTML.length) this.addGaintag([]);
}
else if(this.hasGaintag(tag)){
this.gaintag.remove(tag);
this.addGaintag(this.gaintag);
}
},
hasGaintag:function(tag){
return this.gaintag&&this.gaintag.contains(tag);
},
init:function(card){ init:function(card){
if(Array.isArray(card)){ if(Array.isArray(card)){
if(card[2]=='huosha'){ if(card[2]=='huosha'){
@ -23824,7 +23884,9 @@
intro:node.querySelector('.intro'), intro:node.querySelector('.intro'),
background:node.querySelector('.background'), background:node.querySelector('.background'),
image:node.querySelector('.image'), image:node.querySelector('.image'),
gaintag:node.querySelector('.gaintag'),
} }
node.node.gaintag.innerHTML='';
var clone=true; var clone=true;
var position; var position;
for(var i=0;i<arguments.length;i++){ for(var i=0;i<arguments.length;i++){
@ -26867,6 +26929,9 @@
for(var i=0;i<info.equips.length;i++){ for(var i=0;i<info.equips.length;i++){
player.$equip(info.equips[i]); player.$equip(info.equips[i]);
} }
for(var i=0;i<info.handcards.length;i++){
info.handcards[i].addGaintag(info.gaintag[i]);
}
for(var i=0;i<info.judges.length;i++){ for(var i=0;i<info.judges.length;i++){
if(info.views[i]&&info.views[i]!=info.judges[i]){ if(info.views[i]&&info.views[i]!=info.judges[i]){
info.judges[i].classList.add('fakejudge'); info.judges[i].classList.add('fakejudge');
@ -29186,6 +29251,33 @@
console.log(player); console.log(player);
} }
}, },
addGaintag:function(player,content){
if(player&&content){
var checkMatch=function(l1,l2){
for(var i=0;i<l1.length;i++){
for(var j=0;j<l2.length;j++){
if(l2[j].suit==l1[i][0]&&l2[j].number==l1[i][1]&&l2[j].name==l1[i][2]){
l2[j].addGaintag(content[1]);
l2.splice(j--,1);
break;
}
}
}
}
checkMatch(content[0],player.getCards('h'));
}
else{
console.log(player);
}
},
removeGaintag:function(player,content){
if(player&&content){
player.removeGaintag(content);
}
else{
console.log(player);
}
},
line:function(player,content){ line:function(player,content){
if(player&&content){ if(player&&content){
player.line(game.playerMap[content[0]],content[1]); player.line(game.playerMap[content[0]],content[1]);
@ -29351,10 +29443,12 @@
var cards2=get.infoCards(cards12[1]); var cards2=get.infoCards(cards12[1]);
for(var i=0;i<cards1.length;i++){ for(var i=0;i<cards1.length;i++){
cards1[i].classList.add('drawinghidden'); cards1[i].classList.add('drawinghidden');
cards1[i].addGaintag(cards12[2]);
player.node.handcards1.insertBefore(cards1[i],player.node.handcards1.firstChild); player.node.handcards1.insertBefore(cards1[i],player.node.handcards1.firstChild);
} }
for(var i=0;i<cards2.length;i++){ for(var i=0;i<cards2.length;i++){
cards2[i].classList.add('drawinghidden'); cards2[i].classList.add('drawinghidden');
cards2[i].addGaintag(cards12[2]);
player.node.handcards2.insertBefore(cards2[i],player.node.handcards2.firstChild); player.node.handcards2.insertBefore(cards2[i],player.node.handcards2.firstChild);
} }
ui.updatehl(); ui.updatehl();
@ -43940,6 +44034,7 @@
background:ui.create.div('.background',node), background:ui.create.div('.background',node),
intro:ui.create.div('.intro',node), intro:ui.create.div('.intro',node),
range:ui.create.div('.range',node), range:ui.create.div('.range',node),
gaintag:ui.create.div('.gaintag',node),
} }
for(var i in lib.element.card){ for(var i in lib.element.card){
node[i]=lib.element.card[i]; node[i]=lib.element.card[i];
@ -43950,6 +44045,7 @@
} }
node.storage={}; node.storage={};
node.vanishtag=[]; node.vanishtag=[];
node.gaintag=[];
node._uncheck=[]; node._uncheck=[];
if(info!='noclick'){ if(info!='noclick'){
node.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.card); node.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.card);
@ -50376,7 +50472,7 @@
return num; return num;
}, },
cardtag:function(item,tag){ cardtag:function(item,tag){
if(item.cardid&&_status.cardtag&&_status.cardtag[tag]&&_status.cardtag[tag].contains(item.cardid)){ if(item.cardid&&(get.itemtype(item)=='card'||!item.cards||!item.cards.length||item.name==item.cards[0].name)&&_status.cardtag&&_status.cardtag[tag]&&_status.cardtag[tag].contains(item.cardid)){
return true; return true;
} }
return false; return false;
@ -52118,10 +52214,18 @@
final=(result1*get.attitude(player2,player)+(target?result2*get.attitude(player2,target):0)); final=(result1*get.attitude(player2,player)+(target?result2*get.attitude(player2,target):0));
} }
else final=(result1*get.attitude(player,player)+(target?result2*get.attitude(player,target):0)); else final=(result1*get.attitude(player,player)+(target?result2*get.attitude(player,target):0));
if(!isLink&&get.tag(card,'natureDamage')&&target.isLinked()&&!zerotarget){ if(!isLink&&get.tag(card,'natureDamage')&&!zerotarget){
game.countPlayer(function(current){ var info=get.info(card);
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true); if(!info||!info.ai||!info.ai.canLink){
}) if(target.isLinked()) game.countPlayer(function(current){
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true);
});
}
else if(info.ai.canLink(player,target,card)){
game.countPlayer(function(current){
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true);
});
}
} }
return final; return final;
}, },
@ -52299,10 +52403,18 @@
final=(result1*get.attitude(player2,player)+(target?result2*get.attitude(player2,target):0)); final=(result1*get.attitude(player2,player)+(target?result2*get.attitude(player2,target):0));
} }
else final=(result1*get.attitude(player,player)+(target?result2*get.attitude(player,target):0)); else final=(result1*get.attitude(player,player)+(target?result2*get.attitude(player,target):0));
if(!isLink&&get.tag(card,'natureDamage')&&target.isLinked()&&!zerotarget){ if(!isLink&&get.tag(card,'natureDamage')&&!zerotarget){
game.countPlayer(function(current){ var info=get.info(card);
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true); if(!info||!info.ai||!info.ai.canLink){
}) if(target.isLinked()) game.countPlayer(function(current){
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true);
});
}
else if(info.ai.canLink(player,target,card)){
game.countPlayer(function(current){
if(current!=target&&current.isLinked()) final+=get.effect(current,card,player,player2,true);
});
}
} }
return final; return final;
}, },

View File

@ -1,21 +1,24 @@
window.noname_update={ window.noname_update={
version:'1.9.108.2.2', version:'1.9.108.3',
update:'1.9.108.2.1', update:'1.9.108.2.2',
changeLog:[ changeLog:[
'庆祝《Angel Beats! -1st beat-》汉化版发布,特别版本更新!', '手杀厉勇张飞',
'晋势力技能修改(司马懿除外)',
'手牌标记机制',
'bug修复',
], ],
files:[ files:[
//'card/extra.js', 'card/extra.js',
//'card/gujian.js', //'card/gujian.js',
//'card/guozhan.js', //'card/guozhan.js',
//'card/gwent.js', //'card/gwent.js',
//'card/huanlekapai.js', //'card/huanlekapai.js',
//'card/mtg.js', //'card/mtg.js',
//'card/sp.js', //'card/sp.js',
//'card/standard.js', 'card/standard.js',
//'card/swd.js', //'card/swd.js',
//'card/yunchou.js', //'card/yunchou.js',
//'card/yingbian.js', 'card/yingbian.js',
//'card/zhenfa.js', //'card/zhenfa.js',
//'card/zhulu.js', //'card/zhulu.js',
'character/diy.js', 'character/diy.js',
@ -26,26 +29,27 @@ window.noname_update={
//'character/hearth.js', //'character/hearth.js',
'character/mobile.js', 'character/mobile.js',
//'character/mtg.js', //'character/mtg.js',
//'character/old.js', 'character/old.js',
//'character/rank.js', 'character/ow.js',
'character/rank.js',
'character/refresh.js', 'character/refresh.js',
'character/shenhua.js', 'character/shenhua.js',
'character/sp.js', 'character/sp.js',
'character/sp2.js', 'character/sp2.js',
//'character/tw.js', //'character/tw.js',
//'character/standard.js', 'character/standard.js',
//'character/swd.js', //'character/swd.js',
//'character/xianjian.js', //'character/xianjian.js',
//'character/xinghuoliaoyuan.js', //'character/xinghuoliaoyuan.js',
'character/yijiang.js', 'character/yijiang.js',
//'character/yxs.js', //'character/yxs.js',
//'extension/boss/extension.js', //'extension/boss/extension.js',
//'layout/default/layout.css', 'layout/default/layout.css',
//'layout/default/menu.css', //'layout/default/menu.css',
//'layout/nova/layout.css', //'layout/nova/layout.css',
//'mode/identity.js', //'mode/identity.js',
//'mode/doudizhu.js', //'mode/doudizhu.js',
//'mode/guozhan.js', 'mode/guozhan.js',
//'mode/chess.js', //'mode/chess.js',
//'mode/tafang.js', //'mode/tafang.js',
//'mode/single.js', //'mode/single.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -1306,6 +1306,14 @@ body>.background.land {
text-shadow: rgba(213, 194, 179,1) 0 0 3px,rgba(213, 194, 179,1) 0 0 3px,rgba(213, 194, 179,1) 0 0 3px, text-shadow: rgba(213, 194, 179,1) 0 0 3px,rgba(213, 194, 179,1) 0 0 3px,rgba(213, 194, 179,1) 0 0 3px,
rgba(213, 194, 179,1) 0 0 3px,black 0 0 3px; rgba(213, 194, 179,1) 0 0 3px,black 0 0 3px;
} }
.card>.gaintag {
bottom: 5px;
left: 5px;
text-align: left;
color: white;
text-shadow: rgba(255, 120, 0,1) 0 0 2px,rgba(255, 120, 0,1) 0 0 2px,rgba(255, 120, 0,1) 0 0 2px,
rgba(255, 120, 0,1) 0 0 2px,black 0 0 1px;
}
.card>.name { .card>.name {
top: 9px; top: 9px;
left: 6px; left: 6px;
@ -3363,6 +3371,7 @@ div:not(.handcards)>.card>.info>span,
#arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.name2, #arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.name2,
#arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.info, #arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.info,
#arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.range, #arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.range,
#arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.gaintag,
#arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.addinfo, #arena.selecting:not(.video) .player[data-position='0'] .card:not(.selectable)>.addinfo,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.background, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.background,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.image, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.image,
@ -3370,6 +3379,7 @@ div:not(.handcards)>.card>.info>span,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.name2, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.name2,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.info, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.info,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.range, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.range,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.gaintag,
#arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.addinfo, #arena.selecting:not(.video) .player.current_action .card:not(.selectable)>.addinfo,
#arena.selecting:not(.video) #me .card:not(.selectable)>.background, #arena.selecting:not(.video) #me .card:not(.selectable)>.background,
#arena.selecting:not(.video) #me .card:not(.selectable)>.image, #arena.selecting:not(.video) #me .card:not(.selectable)>.image,
@ -3377,6 +3387,7 @@ div:not(.handcards)>.card>.info>span,
#arena.selecting:not(.video) #me .card:not(.selectable)>.name2, #arena.selecting:not(.video) #me .card:not(.selectable)>.name2,
#arena.selecting:not(.video) #me .card:not(.selectable)>.info, #arena.selecting:not(.video) #me .card:not(.selectable)>.info,
#arena.selecting:not(.video) #me .card:not(.selectable)>.range, #arena.selecting:not(.video) #me .card:not(.selectable)>.range,
#arena.selecting:not(.video) #me .card:not(.selectable)>.gaintag,
#arena.selecting:not(.video) #me .card:not(.selectable)>.addinfo, #arena.selecting:not(.video) #me .card:not(.selectable)>.addinfo,
#arena.selecting:not(.video) .dialog:not(.noselect) .button:not(.selectable):not(.noclick):not(.replaceButton), #arena.selecting:not(.video) .dialog:not(.noselect) .button:not(.selectable):not(.noclick):not(.replaceButton),
.dead,.likedead { .dead,.likedead {
@ -3461,6 +3472,7 @@ div:not(.handcards)>.card>.info>span,
.card.selectable>.name2, .card.selectable>.name2,
.card.selectable>.info, .card.selectable>.info,
.card.selectable>.range, .card.selectable>.range,
.card.selectable>.gaintag,
.button.selectable { .button.selectable {
opacity: 1; opacity: 1;
} }

View File

@ -6036,6 +6036,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
if(trigger.name=='addJudge'){ if(trigger.name=='addJudge'){
trigger.cancel(); trigger.cancel();
var owner=get.owner(trigger.card);
if(owner&&owner.getCards('hej').contains(trigger.card)) owner.lose(trigger.card,ui.discardPile);
else game.cardsDiscard(trigger.card);
game.log(trigger.card,'进入了弃牌堆');
} }
else trigger.getParent().targets.remove(player); else trigger.getParent().targets.remove(player);
}, },
@ -6049,7 +6053,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
gzqianxun:{ gzqianxun:{
audio:'qianxun', audio:'qianxun',
trigger:{target:'useCardToTarget',player:'addJudgeBefore'}, trigger:{
target:'useCardToTarget',
player:'addJudgeBefore',
},
forced:true, forced:true,
priority:15, priority:15,
check:function(event,player){ check:function(event,player){
@ -6061,6 +6068,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
if(trigger.name=='addJudge'){ if(trigger.name=='addJudge'){
trigger.cancel(); trigger.cancel();
var owner=get.owner(trigger.card);
if(owner&&owner.getCards('hej').contains(trigger.card)) owner.lose(trigger.card,ui.discardPile);
else game.cardsDiscard(trigger.card);
game.log(trigger.card,'进入了弃牌堆');
} }
else trigger.getParent().targets.remove(player); else trigger.getParent().targets.remove(player);
}, },