Merge pull request #760 from mengxinzxz/PR-Branch

新武将
This commit is contained in:
Spmario233 2024-01-03 23:09:30 +08:00 committed by GitHub
commit 9dadd8a938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 553 additions and 135 deletions

BIN
audio/die/dongwan.mp3 Normal file

Binary file not shown.

BIN
audio/die/mb_chengui.mp3 Normal file

Binary file not shown.

BIN
audio/die/mb_huban.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjieling1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjieling2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshengdu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshengdu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/guimou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/guimou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbdaoshu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbdaoshu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbdaoshu3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbyilie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbyilie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/mbyilie3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/zhouxian1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/zhouxian2.mp3 Normal file

Binary file not shown.

View File

@ -1131,11 +1131,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:'damageEnd',
source:'damageSource',
},
forced:true,
filter:function(event,player,name){
var key=(name=='damageEnd'?'damage':'sourceDamage');
return player.getAllHistory(key).indexOf(event)%2==1;
filter:function(event,player){
return game.getGlobalHistory('damage',evt=>evt.player==player||(evt.source&&evt.source==player)).indexOf(event)%2==1;
},
forced:true,
content:function(){
'step 0'
var tags=['dctuoyu_fengtian','dctuoyu_qingqu','dctuoyu_junshan'];
@ -1158,20 +1157,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
dcqijing:{
derivation:'dccuixin',
audio:2,
trigger:{global:'phaseEnd'},
forced:true,
juexingji:true,
derivation:'dccuixin',
skillAnimation:true,
animationColor:'orange',
filter:function(event,player){
return player.getStorage('dctuoyu').length==3;
},
forced:true,
juexingji:true,
skillAnimation:true,
animationColor:'orange',
content:function(){
'step 0'
player.awakenSkill('dcqijing');
player.loseMaxHp();
player.addSkillLog('dccuixin');
'step 1'
if(game.countPlayer()>2){
if(player==trigger.player&&!trigger.skill){
@ -1202,7 +1202,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},player,target);
}
'step 3'
player.addSkill('dccuixin');
player.insertPhase();
},
},
@ -7977,9 +7976,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dctuoyu_junshan_tag:'<span data-nature="thundermm">峻山</span>',
dctuoyu_info:'①锁定技。当你使用拥有对应副区域标签的牌时,你令此牌获得对应效果。<br>丰田:伤害值或回复值+1清渠无次数和距离限制峻山不可被响应。②出牌阶段开始时和结束时你给你的手牌分配对应的已激活副区域标签每个区域至多五张。',
dcxianjin:'险进',
dcxianjin_info:'锁定技。当你造成或受到伤害后,若这是你本局游戏内第偶数次造成或受到伤害,则你激活一个副区域标签并摸X张牌X为你已激活的副区域数若你的手牌数为全场最多则改为摸一张牌。',
dcxianjin_info:'锁定技。当你造成或受到两次伤害后你激活一个副区域标签并摸X张牌X为你已激活的副区域数若你的手牌数为全场最多则改为摸一张牌。',
dcqijing:'奇径',
dcqijing_info:'觉醒技。一名角色的回合结束后若你的三个副区域标签均被激活则你减1点体力上限将座位移动至一名其他角色的上家之后,获得〖摧心〗和一个额外回合。',
dcqijing_info:'觉醒技。一名角色的回合结束后若你的三个副区域标签均被激活则你减1点体力上限获得〖摧心〗,将座位移动至一名其他角色的上家之后,然后执行一个额外回合。',
dccuixin:'摧心',
dccuixin_info:'当你不因此技能使用的基本牌或普通锦囊牌结算结束后,若此牌的目标于你使用此牌指定第一个目标时包含你的上家或下家,则你可以视为对下家或上家再使用一张牌名和元素相同的牌。',
shen_dianwei:'神典韦',

View File

@ -2074,8 +2074,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
if(target) event._result={bool:true,targets:[target]};
else player.chooseTarget(get.prompt2('dcshengdu'),lib.filter.notMe).set('ai',target=>{
player.chooseTarget(get.prompt2('dcshengdu'),lib.filter.notMe).set('ai',target=>{
var player=_status.event.player;
var att=get.attitude(player,target);
var eff=get.effect(target,{
@ -2085,64 +2084,46 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var value=att/5;
if(value<0) value=-value/1.3;
value=Math.max(value-eff/20,0.01);
var skills=target.getSkills(null,false,false);
for(var skill of skills){
var str=get.skillInfoTranslation(skill,target);
if(/摸牌阶段[^少放弃]{0,8}摸/.test(str)) value+=Math.random()/2+1.5;
}
return value;
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('dcshengdu',target);
target.addSkill('dcshengdu_effect');
target.markAuto('dcshengdu_effect',[player]);
target.addMark('dcshengdu',1);
}
},
intro:{content:'mark'},
group:'dcshengdu_effect',
subSkill:{
effect:{
trigger:{player:'gainAfter'},
charlotte:true,
forced:true,
popup:false,
audio:'dcshengdu',
trigger:{global:'gainAfter'},
filter:function(event,player){
return event.getParent(2).name=='phaseDraw';
return event.getParent(2).name=='phaseDraw'&&event.player.hasMark('dcshengdu');
},
forced:true,
logTarget:'player',
content:function(){
'step 0'
var targets=player.getStorage('dcshengdu_effect');
event.targets=targets.sortBySeat(player);
'step 1'
var target=targets.shift();
if(target.isIn()){
target.logSkill('dcshengdu_effect',player);
target.draw(trigger.cards.length);
}
if(targets.length) event.redo();
'step 2'
player.removeSkill('dcshengdu_effect');
game.delayx();
var num=trigger.player.countMark('dcshengdu');
player.draw(num);
trigger.player.removeMark('dcshengdu',num);
},
marktext:'绞',
intro:{
content:'下个摸牌阶段得到牌后,$摸等量的牌'
}
}
}
},
dcjieling:{
audio:2,
enable:'phaseUse',
usable:1,
position:'hs',
viewAs:{
name:'sha',
storage:{dcjieling:true}
},
filterCard:function(card,player){
if(player.getStorage('dcjieling_count').includes(get.suit(card))) return false;
if(ui.selected.cards.length){
return get.color(card)!=get.color(ui.selected.cards[0]);
return get.suit(card)!=get.suit(ui.selected.cards[0]);
}
return true;
},
@ -2154,6 +2135,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
precontent:function(){
player.addTempSkill('dcjieling_after');
event.getParent().addCount=false;
player.addTempSkill('dcjieling_count','phaseUseAfter');
player.markAuto('dcjieling_count',event.result.cards.reduce((list,card)=>list.add(get.suit(card,player)),[]));
},
ai:{
order:function(item,player){
@ -2192,10 +2175,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else{
for(var target of targets){
var next=game.createEvent('dcshengdu',false);
next.player=player;
next.target=target;
next.setContent(lib.skill.dcshengdu.content);
target.addMark('dcshengdu',1);
}
}
}
@ -6882,7 +6862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
initList:function(){
var list,skills=[];
var banned=['xunyi'];
var banned=['xunyi','mbyilie'];
if(get.mode()=='guozhan'){
list=[];
for(var i in lib.characterPack.mode_guozhan) list.push(i);
@ -10952,6 +10932,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mengyou:['mengyou','ns_mengyou'],
zhangchu:['zhangchu','jsrg_zhangchu'],
xianglang:['xianglang','mb_xianglang'],
chengui:['chengui','mb_chengui'],
},
translate:{
re_panfeng:'潘凤',
@ -11327,9 +11308,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcguangshi_info:'锁定技。准备阶段若所有其他角色均有“信众”你摸两张牌并失去1点体力。',
dongwan:'董绾',
dcshengdu:'生妒',
dcshengdu_info:'回合开始时,你可以选择一名其他角色。当其于其的下个摸牌阶段得到牌后,你摸等量的牌。',
dcshengdu_info:'回合开始时,你可以选择一名其他角色令其获得1枚“生妒”标记。有“生妒”标记的角色于摸牌阶段得到牌后你摸X张牌然后其移去所有“生妒”标记X为其拥有的“生妒”标记数。',
dcjieling:'介绫',
dcjieling_info:'出牌阶段限一次。你可以将两张颜色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】造成了伤害所有目标角色失去1点体力未造成伤害你对所有目标角色依次发动一次〖生妒〗。',
dcjieling_info:'出牌阶段每种花色限一次,你可以将两张花色不同的手牌当无距离限制且无任何次数限制的【杀】使用。然后若此【杀】造成了伤害所有目标角色失去1点体力未造成伤害所有目标角色依次获得1枚“生妒”标记。',
yuanyin:'袁胤',
dcmoshou:'墨守',
dcmoshou_info:'当你成为其他角色使用的黑色牌的目标后你可以摸X张牌X为你本局游戏此前发动过此技能的次数÷3的余数+1。',

View File

@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
mobile:{
mobile_default:['mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"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","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
mobile_default:['mb_chengui','mb_huban','mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"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","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan','yj_zhoubuyi'],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
@ -26,6 +26,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
mb_chengui:['male','qun',3,['guimou','zhouxian']],
mb_huban:['male','wei',4,['mbyilie']],
mb_xianglang:['male','shu',3,['naxue','yijie']],
yanxiang:['male','qun',3,['kujian','twruilian'],['character:tw_yanxiang','die_audio:tw_yanxiang']],
mb_sunluyu:['female','wu',3,['mbmeibu','mbmumu']],
@ -64,7 +66,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xin_jushou:['male','qun','2/3/3',['xinjianying','shibei']],
re_bulianshi:['female','wu',3,['reanxu','zhuiyi']],
re_caiwenji:['female','qun',3,['rebeige','duanchang']],
sp_jianggan:['male','wei',3,['spdaoshu','spdaizui']],
sp_jianggan:['male','wei',3,['mbdaoshu','spdaizui']],
peixiu:['male','qun',3,['xingtu','juezhi']],
re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']],
re_wuguotai:['female','wu',3,['reganlu','buyi']],
@ -389,6 +391,328 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//陈珪
guimou:{
audio:2,
trigger:{
global:'phaseBefore',
player:['enterGame','phaseEnd','phaseZhunbeiBegin'],
},
filter:function(event,player,name){
if(event.name=='phaseZhunbei'||name=='phaseEnd') return true;
return event.name!='phase'||game.phaseNumber==0;
},
direct:true,
locked:true,
content:function*(event,map){
var player=map.player,trigger=map.trigger;
if(trigger.name!='phaseZhunbei'){
player.logSkill('guimou');
var result,choiceList=[
'惩罚期间使用牌最少的角色',
'惩罚期间弃置牌最少的角色',
'惩罚期间得到牌最少的角色',
];
if(trigger.name!='phase'||game.phaseNumber==0) result={index:get.rand(0,2)};
else result=yield player.chooseControl().set('choiceList',choiceList).set('ai',()=>get.rand(0,2));
var str=choiceList[result.index];
game.log(player,'选择','#g'+str);
player.addSkill('guimou_'+result.index);
return;
}
var targets=[];
for(var i=0;i<=2;i++){
var skill='guimou_'+i;
if(player.hasSkill(skill)){
var storage=player.storage[skill],nums=storage[0].slice();
var targetx=nums.sort((a,b)=>storage[1][storage[0].indexOf(a)]-storage[1][storage[0].indexOf(b)]);
targetx=targetx.filter(target=>storage[1][storage[0].indexOf(target)]==storage[1][storage[0].indexOf(targetx[0])]);
targets.addArray(targetx);
player.removeSkill(skill);
}
}
targets=targets.filter(target=>target!=player&&target.countCards('h'));
if(targets.length){
var result=yield player.chooseTarget('请选择【诡谋】的目标','观看一名可选择的角色的手牌并选择其中至多三张牌,然后你可以将其中至多两张牌交给另一名其他角色,然后弃置剩余的牌',(card,player,target)=>{
return _status.event.targets.includes(target)&&target.countCards('h');
},true).set('ai',target=>{
return Math.sqrt(Math.min(3,target.countCards('h')))*get.effect(target,{name:'guohe_copy2'},player,player);
}).set('targets',targets);
if(result.bool){
var target=result.targets[0];
player.logSkill('guimou',target);
player.addExpose(0.3);
var result2=yield player.choosePlayerCard(target,'h','visible','<div class="text center">选择其中至多三张牌,然后你可以将其中至多两张牌交给另一名其他角色,然后弃置剩余的牌</div>',[1,3],true).set('ai',button=>get.value(button.link));
if(result2.bool){
var cards=result2.links.slice();
var result3;
if(!game.hasPlayer(targetx=>targetx!=player&&targetx!=target)) result3={bool:false};
else result3=yield player.chooseCardButton('是否将其中至多两张牌交给另一名其他角色',cards,[1,Math.min(2,cards.length)]).set('ai',button=>{
var player=_status.event.player;
if(!game.hasPlayer(target=>target!=player&&target!=_status.event.target&&get.attitude(player,target)>0)) return 0;
return get.value(button.link,_status.event.player);
}).set('target',target);
if(result3.bool){
var result4=yield player.chooseTarget('请选择获得'+get.translation(result3.links)+'的目标',(card,player,target)=>{
return target!=player&&target!=_status.event.target;
}).set('ai',target=>get.attitude(_status.event.player,target)).set('target',target);
if(result4.bool){
var targetx=result4.targets[0];
player.line(targetx);
targetx.gain(result3.links,target,'give');
cards.removeArray(result3.links);
}
}
if(cards.length) target.discard(cards).discarder=player;
}
}
}
},
subSkill:{
'0':{
charlotte:true,
onremove:true,
init:function(player,skill){
if(!player.storage[skill]){
player.storage[skill]=[[],[]];
var targets=game.filterPlayer().sortBySeat(player);
targets.forEach(target=>{
player.storage[skill][0].push(target);
player.storage[skill][1].push(0);
});
}
},
mark:true,
intro:{
markcount:storage=>0,
content:function(storage,player){
var str='当前使用牌数排行榜';
var lose=storage[1].slice().sort((a,b)=>a-b)[0];
storage[0].forEach(target=>{
str+='<br><li>';
var score=storage[1][storage[0].indexOf(target)];
if(score==lose) str+='<span class=\'texiaotext\' style=\'color:#FF0000\'>';
str+=(' '+get.translation(target)+' ');
str+=(score+'张');
if(score==lose) str+='</span>';
});
return str;
},
},
trigger:{global:'useCard'},
forced:true,
popup:false,
content:function(){
var storage=player.storage['guimou_0'];
if(!storage[0].includes(trigger.player)){
storage[0].push(trigger.player);
storage[1].push(0);
}
storage[1][storage[0].indexOf(trigger.player)]++;
},
},
'1':{
charlotte:true,
onremove:true,
init:function(player,skill){
if(!player.storage[skill]){
player.storage[skill]=[[],[]];
var targets=game.filterPlayer().sortBySeat(player);
targets.forEach(target=>{
player.storage[skill][0].push(target);
player.storage[skill][1].push(0);
});
}
},
mark:true,
intro:{
markcount:storage=>0,
content:function(storage,player){
var str='当前弃置牌数排行榜';
var lose=storage[1].slice().sort((a,b)=>a-b)[0];
storage[0].forEach(target=>{
str+='<br><li>';
var score=storage[1][storage[0].indexOf(target)];
if(score==lose) str+='<span class=\'texiaotext\' style=\'color:#FF0000\'>';
str+=(' '+get.translation(target)+' ');
str+=(score+'张');
if(score==lose) str+='</span>';
});
return str;
},
},
trigger:{global:['loseAfter','loseAsyncAfter']},
filter:function (event,player){
return event.type=='discard'&&game.hasPlayer(target=>event.getl(target).cards2.length);
},
forced:true,
popup:false,
content:function(){
var storage=player.storage['guimou_1'];
var targets=game.filterPlayer(target=>trigger.getl(target).cards2.length);
targets.forEach(target=>{
if(!storage[0].includes(target)){
storage[0].push(target);
storage[1].push(0);
}
storage[1][storage[0].indexOf(target)]+=trigger.getl(target).cards2.length;
});
},
},
'2':{
charlotte:true,
onremove:true,
init:function(player,skill){
if(!player.storage[skill]){
player.storage[skill]=[[],[]];
var targets=game.filterPlayer().sortBySeat(player);
targets.forEach(target=>{
player.storage[skill][0].push(target);
player.storage[skill][1].push(0);
});
}
},
mark:true,
intro:{
markcount:storage=>0,
content:function(storage,player){
var str='当前得到牌数排行榜';
var lose=storage[1].slice().sort((a,b)=>a-b)[0];
storage[0].forEach(target=>{
str+='<br><li>';
var score=storage[1][storage[0].indexOf(target)];
if(score==lose) str+='<span class=\'texiaotext\' style=\'color:#FF0000\'>';
str+=(' '+get.translation(target)+' ');
str+=(score+'张');
if(score==lose) str+='</span>';
});
return str;
},
},
trigger:{global:['gainAfter','loseAsyncAfter']},
forced:true,
popup:false,
content:function(){
var storage=player.storage['guimou_2'];
var targets=game.filterPlayer(target=>trigger.getg(target).length);
targets.forEach(target=>{
if(!storage[0].includes(target)){
storage[0].push(target);
storage[1].push(0);
}
storage[1][storage[0].indexOf(target)]+=trigger.getg(target).length;
});
},
},
},
},
zhouxian:{
audio:2,
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return event.player!=player&&get.tag(event.card,'damage');
},
forced:true,
logTarget:'player',
content:function*(event,map){
var player=map.player,trigger=map.trigger,target=trigger.player;
var cards=get.cards(2);
player.showCards(cards,get.translation(player)+'发动了【州贤】');
var result=yield target.chooseToDiscard('he','州贤:弃置一张其中有的类别的牌,或令此牌对'+get.translation(player)+'无效',(card,player)=>{
return _status.event.cards.some(cardx=>get.type2(cardx)==get.type2(card));
}).set('cards',cards).set('ai',card=>{
if(!_status.event.goon) return 0;
return 7.5-get.value(card);
}).set('goon',get.effect(player,trigger.card,target,target)>0);
if(!result.bool) trigger.getParent().excluded.add(player);
},
ai:{
effect:{
target_use:function(card,player,target,current){
if(get.tag(card,'damage')&&get.attitude(player,target)<0&&target!=player){
if(_status.event.name=='zhouxian') return;
if(get.attitude(player,target)>0&&current<0) return 'zerotarget';
var bs=player.getDiscardableCards(player,'he');
bs.remove(card);
if(card.cards) bs.removeArray(card.cards);
else bs.removeArray(ui.selected.cards);
var cardx=Array.from(ui.cardPile.childNodes).slice(0,2);
bs=bs.filter(i=>cardx.some(j=>get.type2(j)==get.type2(i)));
if(!bs.length) return 'zerotarget';
if(bs.length<=2){
if(bs.some(bsi=>get.value(bsi)<7)) return [1,0,1,-0.5];
return [1,0,0.3,0];
}
return [1,0,1,-0.5];
}
},
},
},
},
//胡班
mbyilie:{
audio:3,
trigger:{global:'phaseBefore',player:'enterGame'},
filter:function(event,player){
return !player.storage.mbyilie2&&(event.name!='phase'||game.phaseNumber==0);
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('mbyilie'),lib.filter.notMe).set('ai',function(target){
var player=_status.event.player;
return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random());
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('mbyilie',target);
player.storage.mbyilie2=target;
player.addSkill('mbyilie2');
}
},
marktext:'烈',
intro:{
name2:'烈',
content:'mark',
},
group:'mbyilie3',
},
mbyilie2:{
charlotte:true,
audio:'mbyilie',
trigger:{global:['damageBegin4','damageSource']},
filter:function(event,player,name){
var target=player.storage.mbyilie2;
if(name=='damageSource') return event.source==target&&event.player!=target&&player.isDamaged();
return event.player==target&&player.countMark('mbyilie')<2;
},
forced:true,
logTarget:function(event,player){
return player.storage.mbyilie2;
},
content:function(){
if(event.triggername=='damageSource') player.recover();
else{
player.addMark('mbyilie',trigger.num);
trigger.cancel();
}
},
},
mbyilie3:{
audio:'mbyilie',
trigger:{player:'phaseEnd'},
filter:function(event,player){
return player.countMark('mbyilie');
},
forced:true,
content:function(){
var num=player.countMark('mbyilie');
player.draw(num);
player.loseHp(num);
player.removeMark('mbyilie',num);
},
},
//向朗
naxue:{
audio:2,
@ -4875,6 +5199,124 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
spdaoshu1:{audio:true},
mbdaoshu:{
audio:3,
group:'mbdaoshu_use',
subSkill:{
use:{
audio:'mbdaoshu1',
enable:'phaseUse',
filter:function(event,player){
return game.hasPlayer(target=>target!=player&&target.countCards('h')>2);
},
filterTarget:function(card,player,target){
return target!=player&&target.countCards('h')>2;
},
usable:1,
prompt:()=>lib.translate.mbdaoshu_info,
content:function*(event,map){
var player=map.player,target=event.target;
var targets=[player],names=lib.inpile.randomGets(3);
if(!names.length) return;
var map={};
names.forEach(name=>map[get.translation(name)]=name);
if(get.mode()!='identity'&&get.mode()!='guozhan') targets.addArray(player.getFriends());
targets.remove(target);
targets.sortBySeat();
var result=yield target.chooseButton([
'盗书:请选择伪装的牌和牌名',
target.getCards('h'),
[Object.keys(map),'tdnodes'],
],2,true).set('filterButton',button=>{
var map=_status.event.map;
if(!ui.selected.buttons.length) return true;
if(typeof button.link==typeof ui.selected.buttons[0].link) return false;
if(typeof button.link=='string') return get.name(ui.selected.buttons[0].link,false)!=map[button.link];
return map[ui.selected.buttons[0].link]!=get.name(button.link,false);
}).set('ai',button=>{
var map=_status.event.map;
if(!ui.selected.buttons.length){
if(typeof button.link=='object'){
if(Object.values(map).some(name=>lib.card.list.some(card=>card[0]==get.suit(button.link,false)&&card[1]==get.number(button.link,false)&&card[2]==name))) return 5;
return 3.5+Math.random();
}
return 0;
}
if(typeof button.link=='string'){
var cardx=ui.selected.buttons[0].link;
if(lib.card.list.some(card=>card[0]==get.suit(cardx,false)&&card[1]==get.number(cardx,false)&&card[2]==map[button.link])) return 2+Math.random();
return 1;
}
return 0;
}).set('map',map);
if(result.bool){
var guessWinner=[];
if(typeof result.links[0]=='string') result.links.reverse();
var OriginCard=result.links[0],ChangeName=map[result.links[1]],cards=target.getCards('h').slice();
var card=game.createCard(ChangeName,get.suit(OriginCard,false),get.number(OriginCard,false));
cards[cards.indexOf(OriginCard)]=card;
if(_status.connectMode){
var list=targets.map(target2=>[target2,['请猜测'+get.translation(target)+'伪装的手牌',cards],true]);
var result2=yield player.chooseButtonOL(list).set('switchToAuto',()=>_status.event.result='ai').set('processAI',()=>{
var cards=_status.event.cards.slice();
var card=cards.find(card=>lib.card.list.some(cardx=>cardx[2]==card.name)&&!lib.card.list.some(cardx=>cardx[2]==card.name&&cardx[0]==get.suit(card,false)&&cardx[0]==get.number(card,false)));
return {
bool:true,
links:card?card:cards.randomGet(),
}
}).set('cards',cards);
for(var i in result2){
if(result2[i].links[0]==card) guessWinner.push(lib.playerOL[i]);
}
}
else{
var guessTargets=targets.slice();
while(guessTargets.length){
var target2=guessTargets.shift();
var result2=yield target2.chooseButton(['请猜测'+get.translation(target)+'伪装的手牌',cards],true).set('ai',button=>{
var cards=_status.event.cards.slice();
var card=cards.find(card=>lib.card.list.some(cardx=>cardx[2]==get.name(card,false))&&!lib.card.list.some(cardx=>cardx[2]==get.name(card,false)&&cardx[0]==get.suit(card,false)&&cardx[0]==get.number(card,false)));
return button.link==card?3:1+Math.random();
}).set('cards',cards);
if(result2.bool){
if(result2.links[0]==card) guessWinner.push(target2);
}
}
}
targets.forEach(target2=>{
if(guessWinner.includes(target2)){
target2.popup('判断正确','wood');
game.log(target2,'猜测','#g正确');
game.broadcastAll(()=>{
if(lib.config.background_speak) game.playAudio('skill','mbdaoshu2');
});
target2.line(target);
target.damage(1,target2);
}
else{
target2.popup('判断错误','fire');
game.log(target2,'猜测','#y错误');
game.broadcastAll(()=>{
if(lib.config.background_speak) game.playAudio('skill','mbdaoshu3');
});
if(target2.countCards('h')>=2) target2.discard(target2.getCards('h').randomGets(2));
else target2.loseHp();
}
});
}
},
ai:{
order:9,
result:{
target:function(player,target){
return -1/target.countCards('h');
},
},
},
},
},
},
mbdaoshu1:{audio:true},
spdaizui:{
audio:2,
trigger:{player:'damageBegin2'},
@ -15547,6 +15989,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spdaoshu_info:'每轮限一次。一名敌方角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你获得其两张手牌。',
spdaoshu_info_identity:'每轮限一次。一名其他角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你获得其两张手牌。',
spdaoshu_info_guozhan:'每轮限一次。一名其他角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你获得其两张手牌。',
mbdaoshu:'盗书',
mbdaoshu_info:'出牌阶段限一次你可以选择一名手牌数大于两张的其他角色其随机获得三个牌名并将一张手牌的牌名伪装成其中一个与原牌名不同的牌名然后你和队友观看其手牌并猜测其伪装的手牌猜对的角色对其造成1点伤害猜错的角色随机弃置两张手牌手牌数不足两张则改为失去1点体力。',
mbdaoshu_info_identity:'出牌阶段限一次你可以选择一名手牌数大于两张的其他角色其随机获得三个牌名并将一张手牌的牌名伪装成其中一个与原牌名不同的牌名然后你观看其手牌并猜测其伪装的手牌。若猜中你对其造成1点伤害若猜错你随机弃置两张手牌手牌数不足两张则改为失去1点体力。',
mbdaoshu_info_guozhan:'出牌阶段限一次你可以选择一名手牌数大于两张的其他角色其随机获得三个牌名并将一张手牌的牌名伪装成其中一个与原牌名不同的牌名然后你观看其手牌并猜测其伪装的手牌。若猜中你对其造成1点伤害若猜错你随机弃置两张手牌手牌数不足两张则改为失去1点体力。',
spdaizui:'戴罪',
spdaizui2:'戴罪',
spdaizui_info:'限定技。当你受到伤害值不小于体力值的伤害时,你可防止此伤害并将此伤害渠道对应的所有实体牌置于伤害来源的武将牌上,称为“释”。本回合结束时,其获得所有“释”。',
@ -15793,6 +16239,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
naxue_info:'你可以跳过出牌阶段。若如此做,你可以弃置任意张牌并摸等量的牌,然后你可以交给至多两名其他角色各一张手牌。',
yijie:'遗诫',
yijie_info:'锁定技。当你死亡时你令所有其他角色将体力回复或失去至XX为所有其他角色的体力之和除以所有其他角色数向下取整且X至少为1。',
mb_chengui:'手杀陈珪',
mb_chengui_prefix:'手杀',
guimou:'诡谋',
guimou_info:'锁定技。游戏开始时/回合结束时,你随机/须选择以下一项直到你的下个准备阶段:①记录场上期间角色使用牌数;②记录期间场上角色弃置牌数;③记录期间场上角色获得牌数。准备阶段,你可以选择一名场上对应记录数值最少的其他角色,观看其手牌并选择其中至多三张牌,然后你可以将其中至多两张牌交给另一名其他角色,然后弃置其余牌。',
zhouxian:'州贤',
zhouxian_info:'锁定技,当你成为其他角色使用的伤害类卡牌的目标后,你亮出牌堆顶的两张牌,然后其须选择一项:①弃置一张与亮出牌之一类别相同的牌;②令此牌对你无效。',
mb_huban:'手杀胡班',
mb_huban_prefix:'手杀',
mbyilie:'义烈',
mbyilie2:'义烈',
mbyilie3:'义烈',
mbyilie_info:'锁定技。①游戏开始时你选择一名其他角色然后你获得以下效果其受到伤害时若你的“烈”标记数小于2则你获得等同于伤害值的“烈”标记然后防止此伤害其对其他角色造成伤害后你回复1点体力。②结束阶段若你有“烈”标记你摸X张牌并失去X点体力然后移去所有“烈”标记X为你拥有的“烈”标记数。',
mobile_standard:'手杀异构·标准包',
mobile_shenhua_feng:'手杀异构·其疾如风',

View File

@ -128,6 +128,7 @@ window.noname_character_rank={
'clan_xunyou',
'caoxian',
'sb_guanyu',
'mb_chengui',
],
a:[
'diy_zaozhirenjun',
@ -646,6 +647,7 @@ window.noname_character_rank={
'dc_dongzhao',
'zhugeruoxue',
'dc_sb_lusu',
'mb_huban',
],
bp:[
'chess_diaochan',
@ -1815,6 +1817,7 @@ window.noname_character_rank={
'caoxian',
],
epic:[
'mb_chengui',
'ol_pengyang',
'ol_luyusheng',
'clan_xunchen',
@ -2084,6 +2087,8 @@ window.noname_character_rank={
'dc_sb_zhouyu',
],
rare:[
'mb_huban',
'sp_jianggan',
'ol_caozhang',
'ol_lingtong',
'luoxian',

View File

@ -129,7 +129,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
prompt:function(links,player){
return '将一张牌当作'+get.translation(links[0][3]||'')+'【'+get.translation(links[0][2])+'】'+(_status.event.name=='chooseToUse'?'使用':'打出');
return '将一张牌当作'+get.translation(links[0][3]||'')+'【'+get.translation(links[0][2])+'】'+(_status.event.name=='chooseToUse'?'使用':'打出');
},
},
ai:{
@ -197,15 +197,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{source:'damageBegin3'},
filter:function(event,player){
return event.num>=event.player.hp&&!player.getHistory('useSkill',evt=>evt.skill=='sbyijue'&&evt.targets[0]==event.player).length;
return event.num>=event.player.hp&&!player.getStorage('sbyijue').includes(event.player);
},
forced:true,
logTarget:'player',
content:function(){
trigger.cancel();
player.addTempSkill('sbyijue_effect');
player.markAuto('sbyijue',[trigger.player]);
player.markAuto('sbyijue_effect',[trigger.player]);
},
marktext:'绝',
intro:{content:'已放$一马'},
subSkill:{
effect:{
charlotte:true,
@ -227,6 +230,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
marktext:'义',
intro:{content:'本回合放$一马'},
},
},
@ -1011,7 +1015,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.removeSkill(skills);
num+=skills.length;
});
if(get.mode()=='versus'&&_status.mode=='two') num+=2;
if(get.mode()=='versus'&&_status.mode=='two') num+=3;
player.draw(num);
},
},
@ -5937,7 +5941,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_xiaoqiao_prefix:'谋',
sbtianxiang:'天香',
sbtianxiang_info:'①出牌阶段限三次你可以交给一名没有“天香”标记的其他角色一张红色牌然后令其获得此牌花色的“天香”标记。②当你受到伤害时你可以移去一名角色的“天香”标记若此“天香”标记为红桃你防止此伤害其受到伤害来源对其造成的1点伤害若没有伤害来源则改为无来源伤害方片其交给你两张牌。③准备阶段你移去场上所有的“天香”标记然后摸等量的牌。',
sbtianxiang_info_versus_two:'①出牌阶段限三次你可以交给一名没有“天香”标记的其他角色一张红色牌然后令其获得此牌花色的“天香”标记。②当你受到伤害时你可以移去一名角色的“天香”标记若此“天香”标记为红桃你防止此伤害其受到伤害来源对其造成的1点伤害若没有伤害来源则改为无来源伤害方片其交给你两张牌。③准备阶段你移去场上所有的“天香”标记然后摸X张牌X为移去的“天香”标记数+2)。',
sbtianxiang_info_versus_two:'①出牌阶段限三次你可以交给一名没有“天香”标记的其他角色一张红色牌然后令其获得此牌花色的“天香”标记。②当你受到伤害时你可以移去一名角色的“天香”标记若此“天香”标记为红桃你防止此伤害其受到伤害来源对其造成的1点伤害若没有伤害来源则改为无来源伤害方片其交给你两张牌。③准备阶段你移去场上所有的“天香”标记然后摸X张牌X为移去的“天香”标记数+3)。',
sb_sp_zhugeliang:'谋卧龙',
sb_sp_zhugeliang_prefix:'谋',
sb_zhugeliang:'谋诸葛亮',

View File

@ -795,6 +795,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!player.isPhaseUsing()) return;
if(card.name=='sha'&&!player.getStorage('dcjiaoxia_mark').includes(target)) return true;
},
targetInRange:function(card,player,target){
if(!player.isPhaseUsing()) return;
if(card.name=='sha'&&!player.getStorage('dcjiaoxia_mark').includes(target)) return true;
},
},
audio:2,
locked:false,
@ -881,9 +885,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!game.online&&!event.dchumei_num){
var player=event.player;
var evtx=event.getParent('phaseUse');
event.set('dchumei_num',player.getHistory('sourceDamage',function(evt){
event.set('dchumei_num',player.getHistory('sourceDamage',evt=>{
return evt.getParent('phaseUse')==evtx;
}).length);
}).reduce((sum,evt)=>sum+evt.num,0));
}
},
audio:2,
@ -3139,7 +3143,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
var list=['basic','trick','equip'];
for(var i of list){
if(i!=event.type) player.addTempSkill('dczhanyi_'+i);
if(i!=event.type) player.addTempSkill('dczhanyi_'+i,{player:'phaseBegin'});
}
},
subSkill:{
@ -3151,11 +3155,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:'使用基本牌无距离限制,且伤害值和回复值基数+1',
},
trigger:{source:['damageBegin1','recoverBegin']},
forced:true,
filter:function(event,player){
var evt=event.getParent();
return evt.type=='card'&&get.type(evt.card,false)=='basic';
},
forced:true,
logTarget:'player',
content:function(){
trigger.num++;
@ -3177,10 +3181,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:'使用锦囊牌时摸一张牌,且锦囊牌不计入本回合的手牌上限',
},
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return get.type2(event.card)=='trick';
},
forced:true,
content:function(){
player.draw();
},
@ -3198,13 +3202,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
marktext:'装',
mark:true,
intro:{
content:'使用装备牌时,可弃置一名其他角色的一张牌',
content:'有装备牌进汝你的装备时,可弃置一名其他角色的一张牌',
},
trigger:{player:'useCard'},
direct:true,
trigger:{player:'equipAfter'},
filter:function(event,player){
return get.type(event.card)=='equip'&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0));
return game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0));
},
direct:true,
content:function(){
'step 0'
player.chooseTarget('战意:是否弃置一名其他角色的一张牌?',function(card,player,target){
@ -10629,7 +10633,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
caoanmin:['caoanmin','ns_caoanmin'],
duanwei:['duanwei','junk_duanwei'],
xushao:['xushao','jsrg_xushao'],
huban:['ol_huban','dc_huban'],
huban:['ol_huban','dc_huban','mb_huban'],
mengda:['ol_mengda','dc_mengda','pe_mengda'],
jsp_guanyu:['jsp_guanyu','dc_jsp_guanyu','jsrg_guanyu'],
mushun:['mushun','sp_mushun'],
@ -10890,9 +10894,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jiaojie:'狡黠',
jiaojie_info:'锁定技,你的红色牌不计入手牌上限。你使用黑色牌无距离和次数限制。',
dcjiaoxia:'狡黠',
dcjiaoxia_info:'①出牌阶段开始时,你可以令自己的所有手牌于此阶段均视为【杀】。若如此做,你使用以此法转化的【杀】造成伤害后,你可以视为使用此牌对应的原卡牌。②出牌阶段,你对你本阶段未使用过【杀】的角色使用【杀】无次数限制。',
dcjiaoxia_info:'①出牌阶段开始时,你可以令自己的所有手牌于此阶段均视为【杀】。若如此做,你使用以此法转化的【杀】造成伤害后,你可以视为使用此牌对应的原卡牌。②出牌阶段,你对你本阶段未使用过【杀】的角色使用【杀】无距离和次数限制。',
dchumei:'狐魅',
dchumei_info:'出牌阶段各限一次你可以选择一名体力值不大于X的角色令其①摸一张牌。②交给你一张牌。③回复1点体力。X为你本阶段造成伤害的次数)',
dchumei_info:'出牌阶段各限一次你可以选择一名体力值不大于X的角色令其①摸一张牌。②交给你一张牌。③回复1点体力。X为你本阶段造成伤害数)',
buchen:'不臣',
buchen_info:'隐匿技,你于其他角色的回合登场时,可获得当前回合角色的一张牌。',
smyyingshi:'鹰视',
@ -11060,7 +11064,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qibie_info:'一名角色死亡后若你有手牌且这些手牌均可被弃置则你可以弃置所有手牌然后回复1点体力并摸X+2张牌X为你弃置的牌数。',
dc_zhuling:'朱灵',
dczhanyi:'战意',
dczhanyi_info:'出牌阶段开始时,你可以弃置所有基本牌/锦囊牌/装备牌,然后获得另外两种类型的牌对应的效果直到回合结束:基本牌、你使用基本牌无距离限制,且伤害值和回复值基数+1锦囊牌、你使用锦囊牌时摸一张牌且锦囊牌不计入手牌上限装备牌你使用装备牌时,你可弃置一名其他角色的一张牌。',
dczhanyi_info:'出牌阶段开始时,你可以弃置所有基本牌/锦囊牌/装备牌,然后获得另外两种类型的牌对应的效果直到你的下个回合开始:基本牌、你使用基本牌无距离限制,且伤害值和回复值基数+1锦囊牌、你使用锦囊牌时摸一张牌且锦囊牌不计入手牌上限装备牌当装备牌进入你的装备区时,你可弃置一名其他角色的一张牌。',
yanrou:'阎柔',
choutao:'仇讨',
choutao_info:'当你使用【杀】时,或成为【杀】的目标后,你可以弃置此【杀】使用者的一张牌,令此【杀】不可被响应。若你是此【杀】的使用者,则你令此【杀】不计入次数限制。',

View File

@ -4363,68 +4363,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!event.isFirstTarget) return false;
if(!event.targets||!event.targets.length) return false;
var evt=lib.skill.dcjianying.getLastUsed(player,event.getParent());
if(!evt||!evt.targets||!evt.targets.length||evt.targets.length!=event.targets.length) return false;
var targetsx=event.targets.slice();
var targetsy=evt.targets.slice();
return targetsx.slice().removeArray(targetsy).length==0&&targetsy.slice().removeArray(targetsx).length==0;
if(!evt||!evt.targets||!evt.targets.length) return false;
return event.targets.some(target=>evt.targets.includes(target));
},
frequent:true,
locked:false,
content:function(){
player.draw(trigger.targets.length);
var evt=lib.skill.dcjianying.getLastUsed(player,trigger.getParent());
player.draw(trigger.targets.filter(target=>evt.targets.includes(target)).length);
},
locked:false,
mod:{
aiOrder:function(player,card,num){
var evt=lib.skill.dcjianying.getLastUsed(player);
if(!evt) return;
var targets=evt.targets;
if(!targets.length) return;
var select=get.select(_status.event.selectTarget);
if(select[0]==-1){
var targetsx=game.filterPlayer(current=>player.canUse(card,current));
if(targetsx.length!=targets.length) return;
}
else if(targets.length>=select[0]&&targets.length<=select[1]){
var eff=0;
for(var i of targets){
eff+=get.effect(i,card,player,player);
}
if(eff<0) return;
}
return num+10;
var evt=player.getLastUsed();
if(evt&&evt.targets&&evt.targets.length&&game.hasPlayer(current=>{
return evt.targets.includes(current)&&player.canUse(card,current)&&get.effect(current,card,player,player)>0;
})) return num+10;
},
},
ai:{
threaten:2.5,
effect:{
player:function(card,player,target){
if(player._dcdanyi_aiChecking) return;
player._dcdanyi_aiChecking=true;
var evt=lib.skill.dcjianying.getLastUsed(player),targets;
if(evt){
targets=evt.targets;
var select=get.select(_status.event.selectTarget);
if(select[0]==-1){
var targetsx=game.filterPlayer(current=>player.canUse(card,current));
if(targetsx.length!=targets.length){
delete player._dcdanyi_aiChecking;
return;
}
}
else if(targets.length>=select[0]&&targets.length<=select[1]){
var eff=0;
for(var i of targets){
eff+=get.effect(i,card,player,player);
}
if(eff<0){
delete player._dcdanyi_aiChecking;
return;
}
}
}
delete player._dcdanyi_aiChecking;
if((targets||[]).includes(target)) return [1,1];
}
var evt=player.getLastUsed();
if(evt&&evt.targets.includes(target)) return [1.5,0];
},
},
},
},
@ -4436,14 +4398,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(ui.selected.targets.length){
if(ui.selected.targets[0].hp==target.hp) return false;
}
return target.hp!=player.hp;
return target!=player;
},
selectTarget:[1,2],
complexTarget:true,
multiline:true,
content:function(){
'step 0'
target.chooseToDiscard(get.translation(player)+'对你发动了【文灿】','是否弃置两张花色不同的牌?或者点击“取消”,令其本回合对你使用牌无次数限制','he',2,(card,player)=>{
target.chooseToDiscard(get.translation(player)+'对你发动了【文灿】','是否弃置两张花色不同的牌?或者点击“取消”,令其本回合对你使用牌无距离和次数限制','he',2,(card,player)=>{
if(!ui.selected.cards.length) return true;
var suit=get.suit(card,player);
for(var i of ui.selected.cards){
@ -4454,7 +4416,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(_status.event.nofear) return 0;
return 5-get.value(card);
}).set('nofear',player.countCards('hs',card=>{
return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,target)<=0;
return get.tag(card,'damage')&&player.canUse(card,target,false)&&get.effect(target,card,player,target)<=0;
})<target.hp);
'step 1'
if(!result.bool){
@ -4467,11 +4429,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true,
onremove:true,
marktext:'灿',
intro:{content:'对$使用牌无次数限制'},
intro:{content:'对$使用牌无距离和次数限制'},
mod:{
cardUsableTarget:function(card,player,target){
if(player.getStorage('dcwencan_paoxiao').includes(target)) return true;
},
targetInRange:function(card,player,target){
if(player.getStorage('dcwencan_paoxiao').includes(target)) return true;
},
}
}
},
@ -5849,8 +5814,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcjingzao:{
audio:2,
enable:'phaseUse',
filter:function(event,player) {
return !player.hasSkill('dcjingzao_ban')&&game.hasPlayer(current=>lib.skill.dcjingzao.filterTarget(null,player,current));
filter:function(event,player){
if(3+player.countMark('dcjingzao_add')-player.countMark('dcjingzao_ban')<=0) return false;
return game.hasPlayer(current=>lib.skill.dcjingzao.filterTarget(null,player,current));
},
filterTarget:function(card,player,target){
return player!=target&&!target.hasSkill('dcjingzao_temp');
@ -5858,7 +5824,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
target.addTempSkill('dcjingzao_temp');
var cards=game.cardsGotoOrdering(get.cards(3+player.countMark('dcjingzao_add'))).cards;
var cards=game.cardsGotoOrdering(get.cards(3+player.countMark('dcjingzao_add')-player.countMark('dcjingzao_ban'))).cards;
event.cards=cards;
game.log(player,'亮出了',event.cards);
event.videoId=lib.status.videoId++;
@ -5909,6 +5875,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
if(cards2.length) player.gain(cards2,'gain2');
player.addTempSkill('dcjingzao_ban');
player.addMark('dcjingzao_ban',cards2.length,false);
}
},
ai:{
@ -5919,7 +5886,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
subSkill:{
add:{charlotte:true,onremove:true},
ban:{charlotte:true},
ban:{charlotte:true,onremove:true},
temp:{charlotte:true}
}
},
@ -5932,7 +5899,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current.hasHistory('useCard',evt=>{
return evt.card.name==event.card.name&&evt!=event.getParent()&&evt.targets&&evt.targets.includes(player);
});
});
})&&(event.card.name=='sha'||get.type(event.card)=='trick');
},
content:function(){
trigger.getParent().excluded.add(player);
@ -5943,7 +5910,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player===target) return;
if(game.hasPlayer2(current=>{
return current.hasHistory('useCard',evt=>evt.card.name==card.name&&evt.targets&&evt.targets.includes(player));
})) return 'zeroplayertarget';
})&&(card.name=='sha'||get.type(card)=='trick')) return 'zeroplayertarget';
}
}
}
@ -13705,9 +13672,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcshouze_info:'锁定技。结束阶段若你有“绞”你弃1枚“绞”随机获得弃牌堆中的一张黑色牌失去1点体力。',
chengbing:'程秉',
dcjingzao:'经造',
dcjingzao_info:'出牌阶段每名角色限一次你可以选择一名其他角色并亮出牌堆顶三张牌其选择一项1.弃置一张牌名与这些牌的其中一张牌名相同的牌,然后你〖经造〗本回合亮出的牌数+12.令你随机获得这些牌中每种牌名的牌各一张,然后你本回合不能再发动〖经造〗。',
dcjingzao_info:'出牌阶段每名角色限一次你可以选择一名其他角色并亮出牌堆顶三张牌其选择一项1.弃置一张牌名与这些牌的其中一张牌名相同的牌,然后你本回合发动〖经造〗亮出的牌数+12.令你随机获得这些牌中每种牌名的牌各一张,然后你本回合发动〖经造〗亮出的牌数-XX为你获得的牌数。',
dcenyu:'恩遇',
dcenyu_info:'锁定技。当你成为其他角色使用牌的目标后,若你本回合成为过此牌名的牌的目标,此牌对你无效。',
dcenyu_info:'锁定技。当你成为其他角色使用【杀】或普通锦囊牌的目标后,若你本回合成为过此牌名的牌的目标,此牌对你无效。',
dc_zhouxuān:'周宣',
dcwumei:'寤寐',
dcwumei_info:'每轮限一次。回合开始时,你可以令一名角色记录场上所有角色的体力值并进行一个额外的回合,并将你的回合移至该回合后进行。该角色以此法进行的回合的结束阶段,将场上所有角色的体力值改为记录内的对应数值。',
@ -13776,9 +13743,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcshexue_info:'①出牌阶段开始时,你可以将一张牌当做上回合的角色于其出牌阶段内使用的最后一张基本牌或普通锦囊牌使用。②出牌阶段结束时,你可以令下回合的角色于其出牌阶段开始时可以将一张牌当做你于此阶段内使用的最后一张基本牌或普通锦囊牌使用(一名角色因〖设学〗使用的牌均无距离和次数限制)。',
xizheng:'郤正',
dcdanyi:'耽意',
dcdanyi_info:'当你使用牌指定第一个目标后,若此牌的目标与你使用的上一张牌目标相同你可以摸X张牌X为此牌目标数)。',
dcdanyi_info:'当你使用牌指定第一个目标后,你可以摸X张牌X为此牌目标数与你使用的上一张牌相同的目标数)。',
dcwencan:'文灿',
dcwencan_info:'出牌阶段限一次。你可以选择至多两名体力值不同且均与你的体力值不同的角色这些角色依次选择一项1.弃置两张花色不同的牌2.本回合你对其使用牌无次数限制。',
dcwencan_info:'出牌阶段限一次。你可以选择至多两名体力值不同的其他角色这些角色依次选择一项1.弃置两张花色不同的牌2.本回合你对其使用牌无距离和次数限制。',
zhangjinyun:'张瑾云',
dchuizhi:'蕙质',
dchuizhi_info:'准备阶段,你可以选择是否弃置任意张手牌,然后将手牌摸至与全场手牌数最多的角色相同(至少摸一张,至多摸五张)。',