Merge branch 'libccy:PR-Branch' into PR-Branch
This commit is contained in:
commit
73331c30a9
|
@ -11,7 +11,6 @@
|
|||
"no-unused-vars": 0,
|
||||
"no-undef": 0,
|
||||
"no-redeclare": 0,
|
||||
"no-prototype-builtins": 0,
|
||||
"require-yield": 0,
|
||||
"no-irregular-whitespace": ["error", { "skipStrings": true, "skipTemplates": true }],
|
||||
"no-constant-condition": ["error", { "checkLoops": false }]/* ,
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -310,7 +310,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
return 1;
|
||||
},
|
||||
natureDamage:function(card){
|
||||
if(game.hasNature(card)) return 1;
|
||||
if(game.hasNature(card,'linked')) return 1;
|
||||
},
|
||||
fireDamage:function(card,nature){
|
||||
if(game.hasNature(card,'fire')) return 1;
|
||||
|
|
|
@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'collab',
|
||||
connect:true,
|
||||
character:{
|
||||
nezha:['male','qun',2,['dcsantou','dcfaqi']],
|
||||
dc_caocao:['male','wei',4,['dcjianxiong']],
|
||||
dc_liubei:['male','shu',4,['dcrende']],
|
||||
dc_sunquan:['male','wu',4,['dczhiheng']],
|
||||
|
@ -33,10 +34,134 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
collab_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben","old_lingju",'sp_mushun'],
|
||||
collab_duanwu:['sunwukong','longwang','taoshen'],
|
||||
collab_decade:['libai','xiaoyuehankehan','zhutiexiong','wu_zhutiexiong'],
|
||||
collab_remake:['dc_caocao','dc_liubei','dc_sunquan'],
|
||||
collab_remake:['dc_caocao','dc_liubei','dc_sunquan','nezha'],
|
||||
},
|
||||
},
|
||||
skill:{
|
||||
//哪吒
|
||||
dcsantou:{
|
||||
audio:2,
|
||||
trigger:{player:'damageBegin4'},
|
||||
forced:true,
|
||||
group:'dcsantou_gain',
|
||||
content:function*(event,map){
|
||||
var player=map.player,trigger=map.trigger;
|
||||
var source=trigger.source;
|
||||
trigger.cancel();
|
||||
var hp=player.getHp();
|
||||
var lose=false;
|
||||
if(hp>=3){
|
||||
if(player.hasHistory('useSkill',evt=>{
|
||||
var evtx=evt.event;
|
||||
return evt.skill=='dcsantou'&&evtx.getTrigger().source==source&&evtx.getParent(2)!=trigger;
|
||||
})) lose=true;
|
||||
}
|
||||
else if(hp==2){
|
||||
if(trigger.hasNature()) lose=true;
|
||||
}
|
||||
else if(hp==1){
|
||||
if(trigger.card&&get.color(trigger.card)=='red') lose=true;
|
||||
}
|
||||
if(lose) player.loseHp();
|
||||
},
|
||||
subSkill:{
|
||||
gain:{
|
||||
audio:'dcsantou',
|
||||
trigger:{
|
||||
global:'phaseBefore',
|
||||
player:'enterGame',
|
||||
},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
if(player.maxHp>=3) return false;
|
||||
return (event.name!='phase'||game.phaseNumber==0);
|
||||
},
|
||||
content:function*(event,map){
|
||||
var player=map.player;
|
||||
yield player.gainMaxHp(3-player.maxHp);
|
||||
var num=3-player.getHp(true);
|
||||
if(num>0) player.recover(num);
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
filterDamage:true,
|
||||
skillTagFilter:function(player,tag,arg){
|
||||
if(arg&&arg.player&&arg.player.hasSkillTag('jueqing',false,player)) return false;
|
||||
},
|
||||
effect:{
|
||||
target:function(card,player,target){
|
||||
if(player.hasSkillTag('jueqing',false,target)) return;
|
||||
if(player._dcsantou_temp) return;
|
||||
if(get.tag(card,'damage')){
|
||||
const hp=target.getHp();
|
||||
if(hp>=3){
|
||||
if(target.hasHistory('useSkill',evt=>evt.skill=='dcsantou'&&evt.event.getTrigger().source==player)) return [1,-2];
|
||||
else if(get.attitude(player,target)<0){
|
||||
if(card.name=='sha') return;
|
||||
let sha=false;
|
||||
player._dcsantou_temp=true;
|
||||
let num=player.countCards('h',card=>{
|
||||
if(card.name=='sha'){
|
||||
if(sha) return false;
|
||||
else sha=true;
|
||||
}
|
||||
return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0;
|
||||
});
|
||||
delete player._dcsantou_temp;
|
||||
if(player.hasSkillTag('damage')){
|
||||
num++;
|
||||
}
|
||||
if(num<2){
|
||||
var enemies=player.getEnemies();
|
||||
if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){
|
||||
return;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(hp==2&&get.tag(card,'natureDamage')||hp==1&&get.color(card)=='red'&&get.itemtype(card)=='card') return [1,-2];
|
||||
else return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
dcfaqi:{
|
||||
audio:2,
|
||||
trigger:{player:'useCardAfter'},
|
||||
filter:function(event,player){
|
||||
if(get.type(event.card)!='equip') return false;
|
||||
if(!player.isPhaseUsing()) return false;
|
||||
for(const name of lib.inpile){
|
||||
if(get.type(name)!='trick') continue;
|
||||
if(!player.hasStorage('dcfaqi',name)&&player.hasUseTarget({name:name,isCard:true})) return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
direct:true,
|
||||
content:function*(event,map){
|
||||
var player=map.player;
|
||||
var list=get.inpileVCardList(info=>{
|
||||
if(info[0]!='trick') return false;
|
||||
var name=info[2];
|
||||
return !player.hasStorage('dcfaqi',name)&&player.hasUseTarget({name:name,isCard:true});
|
||||
});
|
||||
if(list.length){
|
||||
var result=yield player.chooseButton(['法器:视为使用一张普通锦囊牌',[list,'vcard']],true).set('ai',button=>{
|
||||
return get.player().getUseValue({name:button.link[2]});
|
||||
});
|
||||
if(result.bool){
|
||||
var name=result.links[0][2];
|
||||
if(!player.storage.dcfaqi) player.when({global:'phaseAfter'}).then(()=>delete player.storage.dcfaqi);
|
||||
player.markAuto('dcfaqi',name);
|
||||
player.chooseUseTarget({name:name,isCard:true},true,false).logSkill='dcfaqi';
|
||||
}
|
||||
}
|
||||
else event.finish();
|
||||
}
|
||||
},
|
||||
//隅泣曹操
|
||||
dcjianxiong:{
|
||||
audio:'rejianxiong',
|
||||
|
@ -1513,6 +1638,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
jiben:'吉本(?—218年),东汉末年太医令。建安二十三年春正月,时金祎自以世为汉臣,睹汉祚将移,谓可季兴,乃喟然发愤,遂与太医令本、少府耿纪、司直韦晃、本子邈、邈弟穆等结谋攻许,杀曹公长史王必,南援刘备。后必营,必与典农中郎将严匡讨斩之。在《三国演义》中,吉本在此为吉平或吉太,因字称平,故又唤作吉平。曾参与董承等人刺杀曹操的计划,并企图在为曹操治病时毒死曹操,但被曹操识破而遭处刑。之后其子吉邈和吉穆都参与了由耿纪和韦晃等人所发动的反叛曹操的行动,但都失败被杀。',
|
||||
xiaoyuehankehan:'小约翰可汗,知乎答主,<style type="text/css">#xiaoyuehankehan_bilibili:link, #xiaoyuehankehan_bilibili:visited {color:white;}</style><a id="xiaoyuehankehan_bilibili" href="https://space.bilibili.com/23947287" target="_blank">bilibili知识区up主</a>,其视频以介绍冷门国家和名人为主,因其视频极具特色的幽默风格而知名。代表作包括《奇葩小国》系列和《硬核狠人》系列。昵称里的“小约翰”来源于《纸牌屋》里的主角弗朗西斯·厄克特的外号Little John。家乡在内蒙古通辽市,在《奇葩小国》系列视频中,介绍小国面积和人口时,常用通辽市的面积和人口作为计量单位,后简化为T。1T=6万平方公里或287万人(如:阿富汗面积约为64万平方公里,超过10T)。此梗成为该系列视频的特色之一,可汗也因此被称为“通辽可汗”。',
|
||||
zhutiexiong:'朱铁雄,福建莆田人,1994年出生,短视频创作者。中国魔法少年的英雄梦,国风变装的热血与浪漫。抖音年度高光时刻作者,国风变装现象级人物。创玩节期间化身三国杀武将,来一场热血变身!',
|
||||
nezha:'哪吒是中国神话中的民俗神之一,在古典名著《西游记》《封神演义》等及其衍生作品中也多有登场。传说中,哪吒是托塔天王李靖的第三子。哪吒之母怀胎三年,而哪吒出生之时是一个肉球,李靖惊怒之下,用剑劈开了肉球,而哪吒就在肉球中。哪吒广泛流传于道教以及民间传说中,被称为三坛海会大神、威灵显圣大将军、中坛元帅等,民间俗称“三太子”,又常冠其父姓,称为“李哪吒”。哪吒的原型为佛教护法神“那咤”。在不同作品的设定中,哪吒的师承关系有所不同,比如《封神演义》中,哪吒是太乙真人的弟子、元始天尊的徒孙,而《西游记》之中,哪吒则是释迦牟尼(如来佛祖)的弟子。在传说中,哪吒的形象常被形容为可化作三头六臂(封神之中是三头八臂),使用多种武器战斗。比如,《封神演义》中哪吒使用的武器(法宝)为乾坤圈、混天绫、火尖枪和风火轮等,西游记中是斩妖剑、砍妖刀、缚妖索、降妖杵、绣球儿、火轮儿。而哪吒第一次死后被其师父(太乙真人或如来佛祖)以莲花和莲藕复活。',
|
||||
},
|
||||
card:{
|
||||
ruyijingubang:{
|
||||
|
@ -1621,6 +1747,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dc_sunquan_prefix:'经典',
|
||||
dczhiheng:'制衡',
|
||||
dczhiheng_info:'①出牌阶段限一次。你可以弃置任意张牌并摸等量的牌,若你在发动〖制衡〗时弃置了所有手牌,则你多摸一张牌。②每回合每名角色限一次。当你对其他角色造成伤害后,你令〖制衡①〗于此回合发动次数上限+1。',
|
||||
nezha:'哪吒',
|
||||
dcsantou:'三头',
|
||||
dcsantou_info:'锁定技。①当你受到伤害时,防止之,然后若以下有条件成立,你失去1点体力:1.你于本回合此前以此法防止过该伤害来源的伤害,且你的体力值不小于3;2.本次伤害为属性伤害,且你的体力值为2;3.本次伤害的渠道为红色的牌,且你的体力值为1。②游戏开始时,若你的体力上限小于3,你将体力上限加至3并将体力回复至3。',
|
||||
dcfaqi:'法器',
|
||||
dcfaqi_info:'当你于出牌阶段使用装备牌结算结束后,你视为使用一张本回合未以此法使用过的普通锦囊牌。',
|
||||
|
||||
collab_olympic:'OL·伦敦奥运会',
|
||||
collab_tongque:'OL·铜雀台',
|
||||
|
|
|
@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'huicui',
|
||||
connect:true,
|
||||
character:{
|
||||
dc_jiachong:['male','wei',3,['dcbeini','dcshizong']],
|
||||
dc_sunchen:['male','wu',4,['dczigu','dczuowei']],
|
||||
dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']],
|
||||
yue_zhoufei:['female','wu',3,['dclingkong','dcxianshu']],
|
||||
|
@ -99,12 +100,266 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_taiping:['guanhai','liupi','peiyuanshao','zhangchu','zhangkai','dc_zhangmancheng'],
|
||||
sp_yanhan:['dc_liuba','dc_huangquan','furongfuqian','xianglang','dc_huojun','gaoxiang','dc_wuban'],
|
||||
sp_jishi:['dc_jiben','zhenghun','dc_sunhanhua','liuchongluojun'],
|
||||
sp_raoting:['dc_huanghao','dc_sunziliufang','dc_sunchen'],
|
||||
sp_raoting:['dc_huanghao','dc_sunziliufang','dc_sunchen','dc_jiachong'],
|
||||
sp_yijun:['gongsundu','mengyou'],
|
||||
sp_zhengyin:['yue_caiwenji','yue_zhoufei'],
|
||||
}
|
||||
},
|
||||
skill:{
|
||||
//魏贾充
|
||||
dcbeini:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filterCard:function(card,player){
|
||||
const delt=player.countCards('h')-player.maxHp;
|
||||
return delt>0;
|
||||
},
|
||||
selectCard:function(){
|
||||
const player=get.player();
|
||||
const delt=player.countCards('h')-player.maxHp;
|
||||
return delt>0?delt:-1;
|
||||
},
|
||||
promptfunc:()=>{
|
||||
const player=get.player();
|
||||
const delt=player.countCards('h')-player.maxHp;
|
||||
let str='';
|
||||
if(delt>0) str+=`弃置${get.cnNumber(delt)}张牌`;
|
||||
else if(delt==0) str+=`点击“确定”`;
|
||||
else str+=`摸${get.cnNumber(-delt)}张牌`;
|
||||
return `${str},然后选择两名角色,前者视为对后者使用一张【杀】,且这两者的非锁定技失效。`;
|
||||
},
|
||||
content:function*(event,map){
|
||||
var player=map.player;
|
||||
if(player.countCards('h')<player.maxHp) yield player.drawTo(player.maxHp);
|
||||
if(game.countPlayer()<2){
|
||||
event.finish();
|
||||
return;
|
||||
}
|
||||
var result=yield player.chooseTarget('悖逆:请选择两名角色','前者视为对后者使用一张【杀】,且这两名角色的非锁定技失效直到回合结束。',true,2,(card,player,target)=>{
|
||||
var sha=new lib.element.VCard({name:'sha',isCard:true});
|
||||
if(ui.selected.targets.length){
|
||||
var targetx=ui.selected.targets[0];
|
||||
return targetx.canUse(sha,target,false);
|
||||
}
|
||||
return lib.filter.cardEnabled(sha,target);
|
||||
}).set('targetprompt',['打人','被打']).set('multitarget',true).set('ai',target=>{
|
||||
var aiTargets=get.event('aiTargets');
|
||||
if(aiTargets){
|
||||
return aiTargets[ui.selected.targets.length]==target?10:0;
|
||||
}
|
||||
return 0;
|
||||
}).set('aiTargets',(()=>{
|
||||
var targets=[],eff=0;
|
||||
var sha=new lib.element.VCard({name:'sha',isCard:true});
|
||||
for(var user of game.filterPlayer()){
|
||||
for(var target of game.filterPlayer()){
|
||||
if(user==target) continue;
|
||||
var targetsx=[user,target];
|
||||
targetsx.forEach(i=>i.addSkill('dcbeini_fengyin'));
|
||||
var effx=get.effect(target,sha,user,player);
|
||||
targetsx.forEach(i=>i.removeSkill('dcbeini_fengyin'));
|
||||
if(user==player) effx+=1;
|
||||
if(get.attitude(player,user)>0) effx-=0.1;
|
||||
if(effx>eff){
|
||||
eff=effx;
|
||||
targets=targetsx;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(targets.length) return targets;
|
||||
return null;
|
||||
})());
|
||||
if(result.bool){
|
||||
var user=result.targets[0],target=result.targets[1];
|
||||
result.targets.forEach(i=>i.addTempSkill('dcbeini_fengyin'));
|
||||
var sha=new lib.element.VCard({name:'sha',isCard:true});
|
||||
if(user.canUse(sha,target,false)) user.useCard(sha,target,false,'noai');
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:0.1,
|
||||
result:{
|
||||
player:function(player){
|
||||
if(player.countCards('h')-player.maxHp>=3) return 1;
|
||||
return game.hasPlayer(current=>get.attitude(player,current)<=0)?1:0;
|
||||
}
|
||||
},
|
||||
},
|
||||
subSkill:{
|
||||
fengyin:{
|
||||
inherit:'fengyin',
|
||||
},
|
||||
}
|
||||
},
|
||||
dcshizong:{
|
||||
audio:2,
|
||||
enable:'chooseToUse',
|
||||
hiddenCard:function(player,name){
|
||||
if(get.type(name)!='basic') return false;
|
||||
return player.countCards('he')>=player.countMark('dcshizong')+1;
|
||||
},
|
||||
filter:function(event,player){
|
||||
if(event.type=='wuxie'||event.dcshizong) return false;
|
||||
if(player.countCards('he')<player.countMark('dcshizong')+1) return false;
|
||||
for(const name of lib.inpile){
|
||||
if(get.type(name)!='basic') continue;
|
||||
const card={name:name,isCard:true};
|
||||
if(event.filterCard(card,player,event)) return true;
|
||||
if(name=='sha'){
|
||||
for(const nature of lib.inpile_nature){
|
||||
card.nature=nature;
|
||||
if(event.filterCard(card,player,event)) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
chooseButton:{
|
||||
dialog:function(event,player){
|
||||
const vcards=get.inpileVCardList(info=>{
|
||||
if(info[0]!='basic') return;
|
||||
const card={name:info[2],nature:info[3],isCard:true};
|
||||
return event.filterCard(card,player,event);
|
||||
})
|
||||
return ui.create.dialog('恃纵',[vcards,'vcard'],'hidden');
|
||||
},
|
||||
check:function(button){
|
||||
if(get.event().getParent().type!='phase') return 1;
|
||||
const player=get.player();
|
||||
const card={name:button.link[2],nature:button.link[3]};
|
||||
if(game.hasPlayer(current=>{
|
||||
return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
|
||||
})){
|
||||
switch(button.link[2]){
|
||||
case 'tao':return 5;
|
||||
case 'jiu':return 3.01;
|
||||
case 'sha':
|
||||
if(button.link[3]=='fire') return 2.95;
|
||||
else if(button.link[3]=='thunder') return 2.92;
|
||||
else return 2.9;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
backup:function(links,player){
|
||||
return {
|
||||
filterCard:true,
|
||||
filterTarget:lib.filter.notMe,
|
||||
selectTarget:1,
|
||||
selectCard:()=>get.player().countMark('dcshizong')+1,
|
||||
viewAs:{
|
||||
name:links[0][2],
|
||||
nature:links[0][3],
|
||||
suit:'none',
|
||||
number:null,
|
||||
isCard:true,
|
||||
},
|
||||
position:'he',
|
||||
popname:true,
|
||||
ignoreMod:true,
|
||||
ai1:function(card){
|
||||
return 1/(1.1+Math.max(-1,get.value(card)));
|
||||
},
|
||||
ai2:function(target){
|
||||
const att=get.attitude(get.player(),target);
|
||||
const value=ui.selected.cards.map(card=>get.value(card)).reduce((p,c)=>{
|
||||
return p+c;
|
||||
},0);
|
||||
if(value>0||player.getHp()<=1) return att;
|
||||
return -att;
|
||||
},
|
||||
precontent:function*(event,map){
|
||||
var player=map.player,target=event.result.targets[0];
|
||||
player.logSkill('dcshizong',target);
|
||||
if(!player.countMark('dcshizong')) player.when({global:'phaseAfter'}).then(()=>delete player.storage.dcshizong);
|
||||
player.addMark('dcshizong',1,false);
|
||||
yield player.give(event.result.cards.slice(),target);
|
||||
var viewAs=new lib.element.VCard({name:event.result.card.name,nature:event.result.card.nature,isCard:true});
|
||||
var result=yield target.chooseCard('恃纵:是否将一张牌置于牌堆底?',`若如此做,${get.translation(player)}视为使用一张${get.translation(viewAs.nature)}【${get.translation(viewAs.name)}】`,'he').set('ai',card=>{
|
||||
if(get.event('goon')) return 7-get.value(card);
|
||||
return 0;
|
||||
}).set('goon',get.attitude(target,player)*(player.getUseValue(viewAs)||1)>=1);
|
||||
var card=event.result.cards[0];
|
||||
if(result.bool){
|
||||
var card=result.cards[0];
|
||||
game.delayex();
|
||||
var next=target.loseToDiscardpile(card,ui.cardPile);
|
||||
next.log=false;
|
||||
if(get.position(card)=='e'){
|
||||
game.log(target,'将',card,'置于了牌堆底');
|
||||
}
|
||||
else{
|
||||
next.blank=true;
|
||||
game.log(target,'将一张牌置于了牌堆底');
|
||||
}
|
||||
result=yield next;
|
||||
game.broadcastAll(viewAs=>{
|
||||
lib.skill.dcshizong_backup2.viewAs=viewAs;
|
||||
},lib.skill.dcshizong_backup.viewAs);
|
||||
var evt=event.getParent();
|
||||
evt.set('_backupevent','dcshizong_backup2');
|
||||
evt.set('openskilldialog',`请选择${get.translation(viewAs.nature)}${get.translation(viewAs.name)}的目标`);
|
||||
evt.backup('dcshizong_backup2');
|
||||
evt.set('norestore',true);
|
||||
evt.set('custom',{
|
||||
add:{},
|
||||
replace:{window:function(){}}
|
||||
});
|
||||
evt.goto(0);
|
||||
}
|
||||
else{
|
||||
target.chat('不放!');
|
||||
game.log(target,'选择不将牌置于牌堆底');
|
||||
var evt=event.getParent();
|
||||
evt.set('dcshizong',true);
|
||||
evt.goto(0);
|
||||
}
|
||||
game.delayx();
|
||||
},
|
||||
ai:{
|
||||
order:10,
|
||||
},
|
||||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
return `###恃纵:选择要交出的牌和目标角色###将${get.cnNumber(player.countMark('dcshizong')+1)}张牌交给一名其他角色,其可以选择将一张牌置于牌堆底,视为你使用一张${get.translation(links[0][3]||'')}${get.translation(links[0][2])}。`;
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:function(){
|
||||
const player=get.player(),event=get.event();
|
||||
if(event.filterCard({name:'jiu'},player,event)&&get.effect(player,{name:'jiu'})>0){
|
||||
return get.order({name:'jiu'})+0.1;
|
||||
}
|
||||
return get.order({name:'sha'})+0.1;
|
||||
},
|
||||
respondSha:true,
|
||||
fireAttack:true,
|
||||
respondShan:true,
|
||||
skillTagFilter:function(player,tag,arg){
|
||||
if(tag=='fireAttack') return true;
|
||||
if(player.countCards('he')<player.countMark('dcshizong')+1) return false;
|
||||
if(tag=='respondSha'&&arg!='use') return false;
|
||||
},
|
||||
result:{
|
||||
player:function(player){
|
||||
if(_status.event.dying) return get.attitude(player,_status.event.dying);
|
||||
return 1;
|
||||
},
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
backup:{},
|
||||
backup2:{
|
||||
filterCard:()=>false,
|
||||
selectCard:-1,
|
||||
precontent:function(){
|
||||
delete event.result.skill;
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
//张曼成
|
||||
dclvecheng:{
|
||||
audio:2,
|
||||
|
@ -565,6 +820,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.chooseTarget(get.prompt2('dcmanzhi'),(card,player,target)=>{
|
||||
if(player==target) return false;
|
||||
return !player.hasSkill('dcmanzhi_1')&&target.countCards('he')||!player.hasSkill('dcmanzhi_2')&&target.countCards('hej');
|
||||
}).set('ai',target=>{
|
||||
return 1-get.attitude(get.player(),target);
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
|
@ -1736,7 +1993,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.useCard({name:'sha',isCard:true},trigger.player,false).set('shanReq',num).set('oncard',card=>{
|
||||
var evt=_status.event;
|
||||
evt.baseDamage++;
|
||||
for(var target of evt.targets){
|
||||
for(var target of game.filterPlayer(null,null,true)){
|
||||
var id=target.playerid;
|
||||
var map=evt.customArgs;
|
||||
if(!map[id]) map[id]={};
|
||||
|
@ -10632,6 +10889,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
|
||||
dczhongji:'螽集',
|
||||
dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。',
|
||||
dc_jiachong:'贾充',
|
||||
dcbeini:'悖逆',
|
||||
dcbeini_info:'出牌阶段限一次。你可以将手牌调整至体力上限,然后令一名角色视为对另一名角色使用一张【杀】,且这些角色的非锁定技失效直到回合结束。',
|
||||
dcshizong:'恃纵',
|
||||
dcshizong_info:'当你需要使用一张基本牌时,你可以交给一名其他角色X张牌,然后其可以将一张牌置于牌堆底,视为你使用之。若其不为当前回合角色,此技能失效直到回合结束(X为你本回合发动〖恃纵〗的次数)。',
|
||||
|
||||
sp_baigei:'无双上将',
|
||||
sp_caizijiaren:'才子佳人',
|
||||
|
|
|
@ -711,7 +711,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:'twjilun',
|
||||
inherit:'twjilun',
|
||||
filter:function(event,player){
|
||||
return player.hasSkill('twjichou');
|
||||
return player.hasSkill('twjichou',null,false,false);
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -815,6 +815,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return{
|
||||
type:result.control,
|
||||
audio:'twjiaohua',
|
||||
filterCard:()=>false,
|
||||
selectCard:-1,
|
||||
filterTarget:true,
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
|
|
@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
old_guanyu:['male','shu',4,['wusheng','yijue']],
|
||||
old_caochun:['male','wei',4,['shanjia']],
|
||||
masu:['male','shu',3,['xinzhan','huilei']],
|
||||
xushu:['male','shu',3,['xswuyan','jujian'],['border:wei']],
|
||||
xushu:['male','shu',3,['wuyan','jujian'],['border:wei']],
|
||||
liru:['male','qun',3,['juece','mieji','fencheng']],
|
||||
xin_yujin:['male','wei',4,['jieyue']],
|
||||
//lusu:['male','wu',3,['haoshi','dimeng']],
|
||||
|
|
|
@ -344,6 +344,7 @@ window.noname_character_rank={
|
|||
'star_yuanshu',
|
||||
'jiangji',
|
||||
'tianshangyi',
|
||||
'malingli',
|
||||
],
|
||||
am:[
|
||||
'diy_caiwenji',
|
||||
|
@ -628,6 +629,8 @@ window.noname_character_rank={
|
|||
're_zhugedan',
|
||||
'tw_yanxiang',
|
||||
'yanxiang',
|
||||
'nezha',
|
||||
'dc_jiachong',
|
||||
],
|
||||
bp:[
|
||||
'chess_diaochan',
|
||||
|
@ -993,6 +996,7 @@ window.noname_character_rank={
|
|||
'liwei',
|
||||
'xin_wuban',
|
||||
'ol_liuyan',
|
||||
'sunhuan',
|
||||
],
|
||||
b:[
|
||||
'diy_feishi',
|
||||
|
|
|
@ -11388,12 +11388,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
check:function (card){return 8-get.value(card)},
|
||||
},
|
||||
reshuangxiong:{
|
||||
audio:"shuangxiong",
|
||||
audioname:['re_yanwen'],
|
||||
group:['reshuangxiong1',"reshuangxiong2"],
|
||||
},
|
||||
reshuangxiong1:{
|
||||
audio:"shuangxiong1",
|
||||
audioname:['re_yanwen'],
|
||||
trigger:{
|
||||
player:"phaseDrawBegin1",
|
||||
},
|
||||
group:"reshuangxiong2",
|
||||
audio:"shuangxiong",
|
||||
audioname:['re_yanwen'],
|
||||
check:function (event,player){
|
||||
if(player.countCards('h')>player.hp) return true;
|
||||
if(player.countCards('h')>3) return true;
|
||||
|
@ -11402,6 +11406,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filter:function(event,player){
|
||||
return !event.numFixed;
|
||||
},
|
||||
prompt2:function(){
|
||||
return '放弃摸牌,然后展示牌堆顶的两张牌并选择获得其中的一张。本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用';
|
||||
},
|
||||
content:function(){
|
||||
"step 0"
|
||||
trigger.changeToZero();
|
||||
|
@ -11450,10 +11457,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
var card2=event.card2;
|
||||
player.gain(card2,'gain2');
|
||||
player.addTempSkill('shuangxiong2');
|
||||
player.storage.shuangxiong=get.color(card2);
|
||||
player.markAuto('shuangxiong2',[get.color(card2,false)]);
|
||||
},
|
||||
},
|
||||
"reshuangxiong2":{
|
||||
reshuangxiong2:{
|
||||
trigger:{
|
||||
player:"damageEnd",
|
||||
},
|
||||
|
@ -14782,7 +14789,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xinguidao_info:'一名角色的判定牌生效前,你可以打出一张黑色牌作为判定牌并获得原判定牌。若你以此法打出的牌为黑桃2-9,则你摸一张牌。',
|
||||
xinhuangtian:'黄天',
|
||||
xinhuangtian2:'黄天',
|
||||
xinhuangtian_info:'主公技。其他群势力角色的出牌阶段限一次,该角色可以交给一张【闪】或黑桃手牌。',
|
||||
xinhuangtian_info:'主公技。其他群势力角色的出牌阶段限一次,该角色可以交给你一张【闪】或黑桃手牌。',
|
||||
reqiangxi:"强袭",
|
||||
"reqiangxi_info":"出牌阶段对每名其他角色限一次,你可以选择一项:1. 失去1点体力并对你攻击范围内的一名其他角色造成1点伤害;2. 弃置一张武器牌并对你攻击范围内的一名其他角色造成1点伤害。",
|
||||
rehuoji:"火计",
|
||||
|
@ -14790,9 +14797,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
rekanpo:"看破",
|
||||
rekanpo_info:"你可以将一张黑色牌当作【无懈可击】使用。",
|
||||
reshuangxiong:"双雄",
|
||||
"reshuangxiong_info":"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到【决斗】造成的伤害时,你可以获得对方于此决斗中打出的所有【杀】。",
|
||||
"reshuangxiong2":"双雄",
|
||||
"reshuangxiong2_info":"",
|
||||
reshuangxiong1:"双雄",
|
||||
reshuangxiong2:"双雄",
|
||||
reshuangxiong_info:"摸牌阶段,你可以放弃摸牌。若如此做,你展示牌堆顶的两张牌并选择获得其中的一张。然后,你本回合内可以将与此牌颜色不同的一张手牌当做【决斗】使用。当你受到【决斗】造成的伤害时,你可以获得对方于此决斗中打出的所有【杀】。",
|
||||
|
||||
reguanxing:'观星',
|
||||
reguanxing_info:'准备阶段,你可以观看牌堆顶的五张牌(存活角色小于4时改为三张),并将其以任意顺序置于牌堆项或牌堆底,若你将〖观星〗的牌都放在了牌堆底,则你可以在结束阶段再次发动〖观星〗。',
|
||||
|
|
|
@ -2694,7 +2694,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
trigger.directHit.add(target);
|
||||
player.chooseToDuiben(target).set('title','谋弈').set('namelist',[
|
||||
'出阵迎战','拱卫中军','直取敌营','扰阵疲敌'
|
||||
]);
|
||||
]).set('ai',button=>{
|
||||
var source=get.event().getParent().player,target=get.event().getParent().target;
|
||||
if(!target.countCards('he')&&button.link[2]=='db_def2') return 10;
|
||||
if(!target.countCards('he')&&get.attitude(target,source)<=0&&button.link[2]=='db_atk1') return 10;
|
||||
return 1+Math.random();
|
||||
});
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
if(result.player=='db_def1') player.gainPlayerCard(target,'he',true);
|
||||
|
@ -4696,7 +4701,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
forced:true,
|
||||
locked:false,
|
||||
filter:function(event,player){
|
||||
return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1;
|
||||
return player.hasSkill('splveying',null,false,false)&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1;
|
||||
},
|
||||
content:function(){
|
||||
player.removeMark('splveying',2);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue