Merge pull request #728 from mengxinzxz/PR-Branch
bugfix+character[4]的tempname机制+新武将
|
@ -71,7 +71,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
zhanghu:['male','wei',4,['cuijian','zhtongyuan']],
|
||||
luyusheng:['female','wu',3,['zhente','zhiwei']],
|
||||
huaxin:['male','wei',3,['spwanggui','xibing']],
|
||||
mengyou:['male','qun',5,['hmmanyi','dcmanzhi']],
|
||||
mengyou:['male','qun',5,['manyi','dcmanzhi']],
|
||||
liuyong:['male','shu',3,['zhuning','fengxiang']],
|
||||
dc_sunru:['female','wu',3,['xiecui','youxu']],
|
||||
xiahoulingnv:['female','wei',4,['fuping','weilie']],
|
||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
character:{
|
||||
ol_sb_jiangwei:['male','shu',4,['olsbzhuri','olsbranji']],
|
||||
ol_caozhang:['male','wei',4,['oljiangchi']],
|
||||
ol_jianyong:['male','shu',3,['olqiaoshui','jyzongshi']],
|
||||
ol_jianyong:['male','shu',3,['olqiaoshui','jyzongshi'],['tempname:re_jianyong','die_audio:re_jianyong']],
|
||||
ol_lingtong:['male','wu',4,['olxuanfeng'],['die_audio:re_lingtong']],
|
||||
},
|
||||
characterSort:{
|
||||
|
@ -252,7 +252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
//界简雍
|
||||
olqiaoshui:{
|
||||
audio:2,
|
||||
audio:'reqiaoshui',
|
||||
inherit:'reqiaoshui',
|
||||
filter:function(event,player){
|
||||
return player.countCards('h')>0&&!player.hasSkill('olqiaoshui_used');
|
||||
|
|
|
@ -350,6 +350,7 @@ window.noname_character_rank={
|
|||
'sb_zhugeliang',
|
||||
'ol_jianyong',
|
||||
'ol_sb_jiangwei',
|
||||
'dc_sb_zhouyu',
|
||||
],
|
||||
am:[
|
||||
'diy_caiwenji',
|
||||
|
@ -642,6 +643,7 @@ window.noname_character_rank={
|
|||
'dc_guansuo',
|
||||
'dc_dongzhao',
|
||||
'zhugeruoxue',
|
||||
'dc_sb_lusu',
|
||||
],
|
||||
bp:[
|
||||
'chess_diaochan',
|
||||
|
@ -2076,6 +2078,7 @@ window.noname_character_rank={
|
|||
'yj_zhoubuyi',
|
||||
'ol_jianyong',
|
||||
'ol_sb_jiangwei',
|
||||
'dc_sb_zhouyu',
|
||||
],
|
||||
rare:[
|
||||
'ol_caozhang',
|
||||
|
@ -2543,6 +2546,7 @@ window.noname_character_rank={
|
|||
'yue_zhoufei',
|
||||
'ol_dingshangwan',
|
||||
'ol_liwan',
|
||||
'dc_sb_lusu',
|
||||
],
|
||||
junk:[
|
||||
'sunshao',
|
||||
|
|
|
@ -15568,14 +15568,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_lidian_prefix:'界',
|
||||
re_xushu:'界徐庶',
|
||||
re_xushu_prefix:'界',
|
||||
ol_jianyong:'OL界简雍',
|
||||
ol_jianyong_prefix:'OL界',
|
||||
olqiaoshui:'巧说',
|
||||
olqiaoshui_info:'出牌阶段,你可与一名其他角色拼点。若你赢,你使用的下一张基本牌或普通锦囊牌可以额外指定任意一名其他角色为目标或减少指定一个目标;若你没赢,此技能于本回合失效且本回合你不能使用锦囊牌。',
|
||||
ol_caozhang:'OL界曹彰',
|
||||
ol_caozhang_prefix:'OL界',
|
||||
oljiangchi:'将驰',
|
||||
oljiangchi_info:'摸牌阶段结束时,你可以选择一项:①摸一张牌,本回合使用【杀】的次数上限-1,且【杀】不计入手牌上限。②重铸一张牌,本回合使用【杀】无距离限制,且使用【杀】的次数上限+1。',
|
||||
|
||||
refresh_standard:'界限突破·标',
|
||||
refresh_feng:'界限突破·风',
|
||||
|
|
|
@ -13,12 +13,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'],
|
||||
sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'],
|
||||
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
|
||||
sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
|
||||
sp_qifu:['ol_feiyi',"caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
|
||||
sp_wanglang:['ol_wanglang','ol_puyuan','ol_zhouqun'],
|
||||
sp_zhongdan:["cuiyan","huangfusong"],
|
||||
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
|
||||
sp_others:["hanba","caiyang"],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_feiyi','ol_dingshangwan','ol_liwan','ol_liuyan'],
|
||||
sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_dingshangwan','ol_liwan','ol_liuyan'],
|
||||
},
|
||||
},
|
||||
characterFilter:{
|
||||
|
@ -1584,7 +1584,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return str+parseFloat(num);
|
||||
},'');
|
||||
},
|
||||
content:'使用点数大于$的普通锦囊牌额外结算一次',
|
||||
content:'使用的下一张点数大于$的普通锦囊牌额外结算一次',
|
||||
},
|
||||
audio:'hezhong',
|
||||
trigger:{player:'useCard'},
|
||||
|
@ -1594,14 +1594,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return typeof num=='number'&&player.getStorage('hezhong_0').some(numx=>num>numx);
|
||||
},
|
||||
forced:true,
|
||||
usable:1,
|
||||
content:function(){
|
||||
player.unmarkSkill('hezhong_0');
|
||||
trigger.effectCount++;
|
||||
game.log(trigger.card,'额外结算一次');
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
player:function(card,player,target){
|
||||
if(card.name=='tiesuo') return 'zerotarget';
|
||||
if(card.name=='tiesuo'&&(!player.storage.counttrigger||!player.storage.counttrigger.hezhong_0)) return 'zerotarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1618,7 +1620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return str+parseFloat(num);
|
||||
},'');
|
||||
},
|
||||
content:'使用点数小于$的普通锦囊牌额外结算一次',
|
||||
content:'使用的下一张点数小于$的普通锦囊牌额外结算一次',
|
||||
},
|
||||
audio:'hezhong',
|
||||
trigger:{player:'useCard'},
|
||||
|
@ -1628,14 +1630,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return typeof num=='number'&&player.getStorage('hezhong_1').some(numx=>num<numx);
|
||||
},
|
||||
forced:true,
|
||||
usable:1,
|
||||
content:function(){
|
||||
player.unmarkSkill('hezhong_1');
|
||||
trigger.effectCount++;
|
||||
game.log(trigger.card,'额外结算一次');
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
player:function(card,player,target){
|
||||
if(card.name=='tiesuo') return 'zerotarget';
|
||||
if(card.name=='tiesuo'&&(!player.storage.counttrigger||!player.storage.counttrigger.hezhong_1)) return 'zerotarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -24552,6 +24556,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.delayx();
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
threaten:3,
|
||||
},
|
||||
hasMark:(mark,player,target)=>{
|
||||
if(!target) return player.getStorage('jianjie_'+mark).length>0;
|
||||
return target.getStorage('jianjie_'+mark).contains(player);
|
||||
|
@ -24625,17 +24632,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
expose:0.4,
|
||||
threaten:3,
|
||||
},
|
||||
},
|
||||
die:{
|
||||
audio:'xinfu_jianjie',
|
||||
trigger:{global:'die'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
const skill=lib.skill.jianjie;
|
||||
return skill.hasMark('huoji',player,event.player)||skill.hasMark('lianhuan',player,event.player);
|
||||
},
|
||||
forced:true,
|
||||
logTarget:'player',
|
||||
content:function(){
|
||||
'step 0'
|
||||
if(lib.skill.jianjie.hasMark('huoji',player,trigger.player)){
|
||||
|
@ -24643,7 +24650,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return get.attitude(get.player(),target);
|
||||
});
|
||||
}
|
||||
else event.goto(3);
|
||||
else event.goto(2);
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
|
@ -24668,7 +24675,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.delayx();
|
||||
}
|
||||
},
|
||||
logTarget:'player',
|
||||
},
|
||||
huoji:{
|
||||
marktext:'龙',
|
||||
|
@ -26651,7 +26657,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
yanru:'宴如',
|
||||
yanru_info:'出牌阶段各限一次,若你的手牌数为:①奇数,你可以摸三张牌,然后弃置至少一半手牌(向下取整);②偶数,你可以弃置至少一半手牌,然后摸三张牌。',
|
||||
hezhong:'和衷',
|
||||
hezhong_info:'每回合每项限一次,当你的手牌数变为1后,你可以展示此唯一手牌A并摸一张牌,然后你选择一项:①本回合使用点数大于A的点数的普通锦囊牌额外结算一次;②本回合使用点数小于A的点数的普通锦囊牌额外结算一次。',
|
||||
hezhong_info:'每回合每项限一次,当你的手牌数变为1后,你可以展示唯一手牌并摸一张牌,然后你选择一项:①本回合使用的下一张点数大于此牌的点数的普通锦囊牌额外结算一次;②本回合使用的下一张点数小于此牌的点数的普通锦囊牌额外结算一次。',
|
||||
lvboshe:'吕伯奢',
|
||||
olfushi:'缚豕',
|
||||
olfushi_info:'①一名角色使用【杀】结算结束后,若你至其的距离不大于1,你将此【杀】对应的所有实体牌置于武将牌上。②当你需要使用一张【杀】时,你可以将任意张“缚豕”牌置入弃牌堆并摸等量的牌,视为使用一张【杀】并选择X项(X为你以此法重铸的牌数且至多为3):1.你为此【杀】额外指定一个目标;2.你选择此【杀】的一个目标角色,此牌对其造成的伤害-1;3.你选择此【杀】的一个目标角色,此【杀】对其造成的伤害+1。当此【杀】指定最后一个目标后,若此牌被选择的效果选项相邻且此牌的目标角色座位连续,则此【杀】不计入次数限制。',
|
||||
|
|
|
@ -4,7 +4,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'xianding',
|
||||
connect:true,
|
||||
character:{
|
||||
zhangjian:['male','qun',105,['dc_zj_a','dc_zj_b']],
|
||||
dc_sb_zhouyu:['male','wu',4,['dcsbronghuo','dcsbyingmou']],
|
||||
dc_sb_lusu:['male','wu',3,['dcsbmingshi','dcsbmengmou']],
|
||||
zhangjian:['male','qun',105,['dc_zj_a','dc_zj_b'],['unseen']],
|
||||
zhugeruoxue:['female','wei',3,['dcqiongying','dcnuanhui']],
|
||||
caoyi:['female','wei',4,['dcmiyi','dcyinjun']],
|
||||
malingli:['female','shu',3,['dclima','dcxiaoyin','dchuahuo']],
|
||||
|
@ -80,7 +82,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_liuzan:['male','wu',4,['refenyin','liji']],
|
||||
wenyang:['male','wei',5,['xinlvli','choujue']],
|
||||
wangshuang:['male','wei',8,['spzhuilie']],
|
||||
huaman:['female','shu',3,['hmmanyi','mansi','souying','zhanyuan']],
|
||||
huaman:['female','shu',3,['manyi','mansi','souying','zhanyuan']],
|
||||
puyuan:['male','shu',4,['pytianjiang','pyzhuren']],
|
||||
guanlu:['male','wei',3,['tuiyan','busuan','mingjie']],
|
||||
gexuan:['male','wu',3,['gxlianhua','zhafu']],
|
||||
|
@ -103,9 +105,308 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp2_qifu:['dc_guansuo','xin_baosanniang','dc_zhaoxiang'],
|
||||
sp2_gaoshan:['wanglang','liuhui','zhangjian'],
|
||||
sp2_wumiao:['wu_zhugeliang','wu_luxun'],
|
||||
sp2_mouding:['dc_sb_lusu','dc_sb_zhouyu'],
|
||||
}
|
||||
},
|
||||
skill:{
|
||||
//周瑜
|
||||
//无 双 万 军 取 首
|
||||
dcsbronghuo:{
|
||||
audio:2,
|
||||
trigger:{player:'useCard'},
|
||||
filter:function(event,player){
|
||||
return (event.card.name=='sha'&&game.hasNature(event.card,'fire'))||event.card.name=='huogong';
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
trigger.baseDamage=game.countGroup();
|
||||
},
|
||||
ai:{threaten:3.5},
|
||||
},
|
||||
dcsbyingmou:{
|
||||
mark:true,
|
||||
marktext:'☯',
|
||||
zhuanhuanji:true,
|
||||
intro:{
|
||||
content:function(storage){
|
||||
if(!storage) return '每回合限一次,当你使用牌指定第一个目标后,你可以选择一名目标角色,你将手牌数摸至与其相同(至多摸五张),然后视为对其使用一张【火攻】。'
|
||||
return '每回合限一次,当你使用牌指定第一个目标后,你可以选择一名目标角色,令一名手牌数为全场最大的角色对其使用手牌中所有的【杀】和伤害类锦囊牌(若其没有可使用的牌则将手牌数弃至与你相同)。';
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{player:'useCardToPlayered'},
|
||||
filter:function(event,player){
|
||||
return event.isFirstTarget;
|
||||
},
|
||||
usable:1,
|
||||
direct:true,
|
||||
content:function*(event,map){
|
||||
var result,player=map.player,targets=map.trigger.targets;
|
||||
var storage=player.storage.dcsbyingmou;
|
||||
if(storage){
|
||||
result=yield player.chooseCardTarget({
|
||||
prompt:get.prompt('dcsbyingmou'),
|
||||
prompt2:'选择一名目标角色,令一名手牌数为全场最大的角色对其使用手牌中所有的【杀】和伤害类锦囊牌(若其没有可使用的牌则将手牌数弃至与你相同)',
|
||||
filterTarget:function(card,player,target){
|
||||
if(!ui.selected.targets.length) return _status.event.targets.includes(target);
|
||||
return target.isMaxHandcard();
|
||||
},
|
||||
selectTarget:2,
|
||||
complexSelect:true,
|
||||
complexTarget:true,
|
||||
multitarget:true,
|
||||
targetprompt:['目标角色','使用角色'],
|
||||
filterCard:()=>false,
|
||||
selectCard:-1,
|
||||
ai2:function(target){
|
||||
var player=_status.event.player;
|
||||
var getNum=function(player,target,source){
|
||||
return player.getCards('h',card=>{
|
||||
if(get.name(card)!='sha'&&(get.type(card)!='trick'||!get.tag(card,'damage'))) return false;
|
||||
return player.canUse(card,target,false);
|
||||
}).reduce((sum,card)=>sum+get.effect(target,card,player,source),0);
|
||||
};
|
||||
if(!ui.selected.targets.length){
|
||||
var targets=game.filterPlayer(target=>target.isMaxHandcard());
|
||||
targets.sort((a,b)=>getNum(b,target,player)-getNum(a,target,player));
|
||||
return getNum(targets[0],target,player)+1;
|
||||
}
|
||||
return getNum(target,ui.selected.targets[0],player)+1;
|
||||
},
|
||||
}).set('targets',targets);
|
||||
}
|
||||
else result=yield player.chooseTarget(get.prompt('dcsbyingmou'),'选择一名目标角色,将手牌数摸至与其相同,然后视为对其使用一张【火攻】',(card,player,target)=>_status.event.targets.includes(target)).set('ai',target=>{
|
||||
var player=_status.event.player;
|
||||
return Math.max(0,Math.min(5,target.countCards('h')-player.countCards('h')))*2+get.effect(target,{name:'huogong'},player,player);
|
||||
}).set('targets',targets);
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
if(storage){
|
||||
player.logSkill('dcsbyingmou',result.targets,false);
|
||||
player.line2(result.targets);
|
||||
player.changeZhuanhuanji('dcsbyingmou');
|
||||
var source=result.targets[1],discard=true;
|
||||
while(true){
|
||||
var cards=source.getCards('h',card=>{
|
||||
if(get.name(card)!='sha'&&(get.type(card)!='trick'||!get.tag(card,'damage'))) return false;
|
||||
return source.canUse(card,target,false);
|
||||
});
|
||||
if(cards.length){
|
||||
if(discard) discard=false;
|
||||
yield source.useCard(cards.randomGet(),target,false);
|
||||
}
|
||||
else break;
|
||||
}
|
||||
if(discard&&player.countCards('h')<source.countCards('h')) source.chooseToDiscard(source.countCards('h')-player.countCards('h'),'h',true);
|
||||
}
|
||||
else{
|
||||
player.logSkill('dcsbyingmou',target);
|
||||
player.changeZhuanhuanji('dcsbyingmou');
|
||||
if(player.countCards('h')<target.countCards('h')) player.draw(Math.min(5,target.countCards('h')-player.countCards('h')));
|
||||
if(player.canUse({name:'huogong'},target,false)) player.useCard({name:'huogong'},target,false);
|
||||
}
|
||||
}
|
||||
else player.storage.counttrigger.dcsbyingmou--;
|
||||
},
|
||||
},
|
||||
//鲁肃
|
||||
dcsbmingshi:{
|
||||
audio:2,
|
||||
trigger:{player:'phaseDrawBegin2'},
|
||||
filter:function(event,player){
|
||||
return !event.numFixed;
|
||||
},
|
||||
frequent:true,
|
||||
content:function(){
|
||||
trigger.num+=2;
|
||||
player.when('phaseDrawEnd').filter((evt,player)=>evt==trigger&&player.countCards('h')).then(()=>{
|
||||
var str='明势:请展示三张牌并令一名其他角色选择获得其中的一张牌';
|
||||
if(player.countCards('h')<=3) str='明势:展示手牌并令一名其他角色选择获得其中的一张牌';
|
||||
player.chooseCardTarget({
|
||||
prompt:str,
|
||||
filterTarget:lib.filter.notMe,
|
||||
filterCard:true,
|
||||
selectCard:function(){
|
||||
var player=_status.event.player;
|
||||
if(player.countCards('h')<=3) return -1;
|
||||
return 3;
|
||||
},
|
||||
position:'h',
|
||||
forced:true,
|
||||
ai1:function(card){
|
||||
return -get.value(card);
|
||||
},
|
||||
ai2:function(target){
|
||||
var player=_status.event.player;
|
||||
if(player.hasSkill('dcsbmengmou')&&!get.is.blocked('dcsbmengmou',player)&&player.storage.dcsbmengmou&&get.attitude(player,target)<0) return get.effect(target,{name:'losehp'},player,player);
|
||||
return get.attitude(player,target);
|
||||
},
|
||||
});
|
||||
}).then(()=>{
|
||||
if(result.bool){
|
||||
var target=result.targets[0];
|
||||
event.target=target;
|
||||
var cards=result.cards;
|
||||
player.showCards(cards,get.translation(player)+'发动了【明势】');
|
||||
target.chooseButton(['明势:请获得其中一张牌',cards],true).set('filterButton',button=>{
|
||||
return lib.filter.canBeGained(button.link,_status.event.source,_status.event.player);
|
||||
}).set('ai',button=>get.value(button.link)).set('source',player);
|
||||
}
|
||||
else event.finish();
|
||||
}).then(()=>{
|
||||
if(result.bool){
|
||||
var card=result.links[0];
|
||||
if(lib.filter.canBeGained(card,player,target)) target.gain(card,player,'giveAuto');
|
||||
else game.log('但',card,'不能被',player,'获得!');
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
dcsbmengmou:{
|
||||
mark:true,
|
||||
marktext:'☯',
|
||||
zhuanhuanji:true,
|
||||
intro:{
|
||||
content:function(storage){
|
||||
if(!storage) return '每回合限一次,当你得到其他角色的牌后,你可以令该角色使用至多X张【杀】,且其每以此法造成1点伤害,其回复1点体力。(X为你的体力值)'
|
||||
return '每回合限一次,其他角色得到你的牌后,你可令该角色打出至多X张【杀】,然后其失去Y点体力。(X为你的体力值,Y为X-其打出【杀】数)';
|
||||
},
|
||||
},
|
||||
audio:2,
|
||||
trigger:{global:['gainAfter','loseAsyncAfter']},
|
||||
filter:function(event,player){
|
||||
if(!player.getHp()) return false;
|
||||
if(event.name=='loseAsync'&&event.type!='gain') return false;
|
||||
var storage=player.storage.dcsbmengmou;
|
||||
var cards;
|
||||
if(storage){
|
||||
if(player.hasSkill('dcsbmengmou_true')) return false;
|
||||
cards=event.getl(player).cards2;
|
||||
return game.hasPlayer(function(current){
|
||||
if(current==player) return false;
|
||||
var cardsx=event.getg(current);
|
||||
return cardsx.some(i=>cards.includes(i));
|
||||
});
|
||||
}
|
||||
else cards=event.getg(player);
|
||||
if(player.hasSkill('dcsbmengmou_false')) return false;
|
||||
return game.hasPlayer(function(current){
|
||||
if(current==player) return false;
|
||||
var cardsx=event.getl(current).cards2;
|
||||
return cards.some(i=>cardsx.includes(i));
|
||||
});
|
||||
},
|
||||
direct:true,
|
||||
content:function*(event,map){
|
||||
var player=map.player,trigger=map.trigger;
|
||||
var storage=player.storage.dcsbmengmou;
|
||||
player.addTempSkill('dcsbmengmou_effect','dcsbmengmouAfter');
|
||||
var targets,cards,num=player.getHp();
|
||||
if(storage){
|
||||
cards=trigger.getl(player).cards2;
|
||||
targets=game.filterPlayer(function(current){
|
||||
if(current==player) return false;
|
||||
var cardsx=trigger.getg(current);
|
||||
return cardsx.some(i=>cards.includes(i));
|
||||
});
|
||||
}
|
||||
else{
|
||||
cards=trigger.getg(player);
|
||||
targets=game.filterPlayer(function(current){
|
||||
if(current==player) return false;
|
||||
var cardsx=trigger.getl(current).cards2;
|
||||
return cards.some(i=>cardsx.includes(i));
|
||||
});
|
||||
}
|
||||
var check_true=function(player,target){
|
||||
if(get.attitude(player,target)>0){
|
||||
if(target.countCards('hs',card=>{
|
||||
if(get.name(card)!='sha') return false;
|
||||
return target.hasValueTarget(card);
|
||||
})) return 4;
|
||||
return 0.5;
|
||||
}
|
||||
if(get.attitude(player,target)<0){
|
||||
if(!target.countCards('hs',card=>{
|
||||
if(get.name(card)!='sha') return false;
|
||||
return target.hasValueTarget(card);
|
||||
})){
|
||||
if(target.countCards('hs',card=>{
|
||||
if(get.name(card)!='sha') return false;
|
||||
return target.hasUseTarget(card);
|
||||
})) return -3;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
var check_false=function(player,target){
|
||||
if(get.attitude(player,target)<0) return get.effect(target,{name:'losehp'},player,player);
|
||||
return 0;
|
||||
};
|
||||
var result,target;
|
||||
if(targets.length==1){
|
||||
target=targets[0];
|
||||
var str;
|
||||
if(storage) str='令'+get.translation(target)+'打出至多'+get.cnNumber(num)+'张【杀】,然后其失去Y点体力。(Y为'+num+'-其打出【杀】数)';
|
||||
else str='令'+get.translation(target)+'使用至多'+get.cnNumber(num)+'张【杀】,其每以此法造成1点伤害,其回复1点体力';
|
||||
result=yield player.chooseBool(get.prompt('dcsbmengmou',target),str).set('choice',(storage?check_true(player,target):check_false(player,target))>0);
|
||||
}
|
||||
else{
|
||||
result=yield player.chooseTarget(get.prompt('dcsbmengmou'),lib.skill.dcsbmengmou.intro.content(storage),(card,player,target)=>_status.event.targets.includes(target)).set('ai',target=>{
|
||||
return _status.event.check(_status.event.player,target);
|
||||
}).set('targets',targets).set('check',storage?check_true:check_false).set('ainmate',false);
|
||||
}
|
||||
if(result.bool){
|
||||
if(!target) target=result.targets[0];
|
||||
player.logSkill('dcsbmengmou',target);
|
||||
player.addTempSkill('dcsbmengmou_'+(storage||false));
|
||||
player.changeZhuanhuanji('dcsbmengmou');
|
||||
while(num>0){
|
||||
num--;
|
||||
var result2;
|
||||
if(storage){
|
||||
result2=yield target.chooseToRespond((card,player)=>{
|
||||
return get.name(card)=='sha';
|
||||
}).set('ai',card=>{
|
||||
return 1+Math.random();
|
||||
}).set('prompt','盟谋:是否打出一张【杀】?').set('prompt2','当前进度:'+(3-num)+'/3');
|
||||
}
|
||||
else result2=yield target.chooseToUse(card=>{
|
||||
if(!lib.filter.cardEnabled(card,_status.event.player,_status.event)) return false;
|
||||
return get.name(card)=='sha';
|
||||
}).set('prompt','盟谋:是否使用一张【杀】?').set('prompt2','当前进度:'+(3-num)+'/3');
|
||||
if(!result2.bool){
|
||||
if(storage){
|
||||
target.popup('杯具');
|
||||
target.loseHp(num+1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
effect:{
|
||||
charlotte:true,
|
||||
trigger:{global:'damageSource'},
|
||||
filter:function(event,player){
|
||||
if(event.getParent().type!='card') return false;
|
||||
if(event.source.isHealthy()||event.card.name!='sha') return false;
|
||||
return event.getParent(4).name=='dcsbmengmou'&&event.getParent(4).player==player;
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
firstDo:true,
|
||||
content:function(){
|
||||
trigger.source.recover(trigger.num);
|
||||
},
|
||||
},
|
||||
true:{charlotte:true},
|
||||
false:{charlotte:false},
|
||||
},
|
||||
},
|
||||
//张臶
|
||||
dc_zj_a:{
|
||||
audio:2,
|
||||
|
@ -11613,19 +11914,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
//花鬘
|
||||
manyi:{
|
||||
audio:2,
|
||||
audioname:['mengyou'],
|
||||
},
|
||||
hmmanyi:{
|
||||
audioname:['mengyou','menghuo','zhurong'],
|
||||
trigger:{target:'useCardToBefore'},
|
||||
forced:true,
|
||||
audio:'manyi',
|
||||
audioname:['mengyou'],
|
||||
filter:function(event,player){
|
||||
return event.card.name=='nanman';
|
||||
},
|
||||
forced:true,
|
||||
content:function(){
|
||||
trigger.cancel();
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
target:function(card){
|
||||
if(card.name=='nanman') return 'zerotarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
group:'manyi_single',
|
||||
subSkill:{
|
||||
single:{
|
||||
trigger:{
|
||||
player:'enterGame',
|
||||
global:'gameDrawAfter',
|
||||
},
|
||||
filter:function(event,player){
|
||||
return get.mode()=='single'&&_status.mode=='normal';
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
player.chooseUseTarget('nanman',get.prompt('manyi'),'视为使用一张【南蛮入侵】').logSkill='manyi';
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
mansi:{
|
||||
audio:2,
|
||||
|
@ -12876,6 +13196,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dczhangcai:function(player){
|
||||
return '当你使用或打出'+(player.hasSkill('dczhangcai_all')?'':'点数为8的')+'牌时,你可以摸X张牌(X为你手牌区里'+(player.hasSkill('dczhangcai_all')?'与此牌点数相同':'点数为8')+'的牌数且至少为1)。';
|
||||
},
|
||||
dcsbmengmou:function(player){
|
||||
var storage=player.storage.dcsbmengmou;
|
||||
var str='转换技,每回合每项各限一次:';
|
||||
if(!storage) str+='<span class="bluetext">';
|
||||
str+='阴,当你得到其他角色的牌后,你可以令该角色使用至多X张【杀】,且其每以此法造成1点伤害,其回复1点体力;';
|
||||
if(!storage) str+='</span>';
|
||||
if(storage) str+='<span class="bluetext">';
|
||||
str+='阳,其他角色得到你的牌后,你可令该角色打出至多X张【杀】,然后其失去Y点体力。';
|
||||
if(storage) str+='</span>';
|
||||
str+='(X为你的体力值,Y为X-其打出【杀】数)';
|
||||
return str;
|
||||
},
|
||||
dcsbyingmou:function(player){
|
||||
var storage=player.storage.dcsbyingmou;
|
||||
var str='转换技,每回合限一次,当你使用牌指定第一个目标后,你可以选择一名目标角色:';
|
||||
if(!storage) str+='<span class="bluetext">';
|
||||
str+='阴,你将手牌数摸至与其相同(至多摸五张),然后视为对其使用一张【火攻】;';
|
||||
if(!storage) str+='</span>';
|
||||
if(storage) str+='<span class="bluetext">';
|
||||
str+='阳,令一名手牌数为全场最大的角色对其使用手牌中所有的【杀】和伤害类锦囊牌(若其没有可使用的牌则将手牌数弃至与你相同)。';
|
||||
if(storage) str+='</span>';
|
||||
return str;
|
||||
},
|
||||
},
|
||||
characterReplace:{
|
||||
wenyang:['wenyang','db_wenyang','diy_wenyang'],
|
||||
|
@ -12931,8 +13274,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
wlcuorui_info_identity:'出牌阶段开始时,你可以弃置一名你至其的距离不大于1的角色区域里的一张牌,然后你选择一项:1.弃置另一名其他角色装备区里至多两张与此牌颜色相同的牌;2.展示另一名其他角色的至多两张手牌,然后获得其中与此牌颜色相同的牌。',
|
||||
wlcuorui_info_guozhan:'出牌阶段开始时,你可以弃置一名你至其的距离不大于1的角色区域里的一张牌,然后你选择一项:1.弃置另一名其他角色装备区里至多两张与此牌颜色相同的牌;2.展示另一名其他角色的至多两张手牌,然后获得其中与此牌颜色相同的牌。',
|
||||
huaman:'花鬘',
|
||||
hmmanyi:'蛮裔',
|
||||
hmmanyi_info:'锁定技,【南蛮入侵】对你无效。',
|
||||
manyi:'蛮裔',
|
||||
manyi_info:'锁定技,【南蛮入侵】对你无效。',
|
||||
manyi_info_single_normal:'锁定技,【南蛮入侵】对你无效。当你登场时,你可以视为使用一张【南蛮入侵】。',
|
||||
mansi_viewas:'蛮嗣',
|
||||
mansi:'蛮嗣',
|
||||
mansi_info:'出牌阶段限一次,你可以将所有手牌当做【南蛮入侵】使用;当有角色受到【南蛮入侵】的伤害后,你摸一张牌。',
|
||||
|
@ -13386,6 +13730,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dc_zj_a_info:'锁定技。当你受到牌造成的伤害时,若此牌有点数,则你将此伤害值改为此牌点数,否则你防止此伤害。',
|
||||
dc_zj_b:'技能',
|
||||
dc_zj_b_info:'结束阶段,你可以弃置所有牌并令一名其他角色获得〖技能〗直到你的下个回合开始。',
|
||||
dc_sb_lusu:'新杀谋鲁肃',
|
||||
dc_sb_lusu_prefix:'新杀谋',
|
||||
dcsbmingshi:'明势',
|
||||
dcsbmingshi_info:'摸牌阶段,你可以多摸两张牌,然后令展示三张牌并令一名其他角色选择获得其中的一张牌。',
|
||||
dcsbmengmou:'盟谋',
|
||||
dcsbmengmou_info:'转换技,每回合每项各限一次:阴,当你得到其他角色的牌后,你可以令该角色使用至多X张【杀】,且其每以此法造成1点伤害,其回复1点体力;阳,其他角色得到你的牌后,你可令该角色打出至多X张【杀】,然后其失去Y点体力。(X为你的体力值,Y为X-其打出【杀】数)',
|
||||
dc_sb_zhouyu:'新杀谋周瑜',
|
||||
dc_sb_zhouyu_prefix:'新杀谋',
|
||||
dcsbronghuo:'融火',
|
||||
dcsbronghuo_info:'锁定技,当你使用火【杀】或【火攻】时,此牌伤害基值改为场上势力数。',
|
||||
dcsbyingmou:'英谋',
|
||||
dcsbyingmou_info:'转换技,每回合限一次,当你使用牌指定第一个目标后,你可以选择一名目标角色:阴,你将手牌数摸至与其相同(至多摸五张),然后视为对其使用一张【火攻】;阳,令一名手牌数为全场最大的角色对其使用手牌中所有的【杀】和伤害类锦囊牌(若其没有可使用的牌则将手牌数弃至与你相同)。',
|
||||
|
||||
sp2_yinyu:'隐山之玉',
|
||||
sp2_huben:'百战虎贲',
|
||||
|
@ -13401,6 +13757,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp2_wumiao:'武庙',
|
||||
sp2_gaoshan:'高山仰止',
|
||||
sp2_qifu:'祈福',
|
||||
sp2_mouding:'谋定天下',
|
||||
},
|
||||
};
|
||||
});
|
||||
|
|
|
@ -5114,7 +5114,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
jyzongshi:{
|
||||
audio:2,
|
||||
audioname:['re_jianyong','ol_jianyong'],
|
||||
audioname:['re_jianyong'],
|
||||
trigger:{player:['chooseToCompareAfter','compareMultipleAfter'],target:['chooseToCompareAfter','compareMultipleAfter']},
|
||||
filter:function(event,player){
|
||||
if(event.preserve) return false;
|
||||
|
|
352
game/game.js
|
@ -16050,6 +16050,139 @@ new Promise(resolve=>{
|
|||
game.stopCountChoose();
|
||||
}
|
||||
},
|
||||
chooseToGive:function(){
|
||||
"step 0"
|
||||
event.result={
|
||||
bool:true,
|
||||
confirm:'ok',
|
||||
buttons:[],
|
||||
links:[],
|
||||
cards:[],
|
||||
targets:[],
|
||||
}
|
||||
event.filterCard=(event=>{
|
||||
const filterCard=event.filterCard;
|
||||
return function(card,player){
|
||||
if(!lib.filter.canBeGained(card,this.target,player)) return false;
|
||||
return filterCard.call(this,card,player);
|
||||
}
|
||||
})(event);
|
||||
if(event.directresult){
|
||||
event.result.cards=event.directresult.slice(0);
|
||||
event.goto(2);
|
||||
return;
|
||||
}
|
||||
const directFilter=(event.forced&&typeof event.filterOk!='function'&&typeof event.selectCard!='function'&&!event.complexCard);
|
||||
const cards=directFilter?player.getCards(event.position).filter(card=>!card.classList.contains('uncheck')&&lib.filter.cardAiIncluded(card)&&event.filterCard(card,player)):[];
|
||||
const range=get.select(event.selectCard);
|
||||
if(directFilter&&(range[0]>=cards.length||range[1]<=-1)){
|
||||
if(player.isOut()) event.result.cards=[];
|
||||
else event.result.cards=cards;
|
||||
}
|
||||
else if(event.isMine()){
|
||||
game.check();
|
||||
if(event.hsskill&&!event.forced&&_status.prehidden_skills.contains(event.hsskill)){
|
||||
ui.click.cancel();
|
||||
return;
|
||||
}
|
||||
game.pause();
|
||||
if(range[1]>1&&typeof event.selectCard!='function'){
|
||||
event.aiChoose=ui.create.control('AI代选',function(){
|
||||
ai.basic.chooseCard(event.ai);
|
||||
if(_status.event.custom&&_status.event.custom.add.card){
|
||||
_status.event.custom.add.card();
|
||||
}
|
||||
ui.selected.cards.forEach(i=>i.updateTransform(true));
|
||||
});
|
||||
}
|
||||
if(Array.isArray(event.dialog)){
|
||||
event.dialog=ui.create.dialog.apply(this,event.dialog);
|
||||
event.dialog.open();
|
||||
event.dialog.classList.add('noselect');
|
||||
}
|
||||
else if(event.prompt!=false){
|
||||
let prompt;
|
||||
if(typeof event.prompt =='string') prompt=event.prompt;
|
||||
else{
|
||||
let select;
|
||||
if(range[0]==range[1]) select=get.cnNumber(range[0]);
|
||||
else if(range[1]==Infinity) select='至少'+get.cnNumber(range[0]);
|
||||
else select=get.cnNumber(range[0])+'至'+get.cnNumber(range[1]);
|
||||
const position=event.position=='h'?'手':event.position=='e'?'装备':'';
|
||||
prompt=`请交给${get.translation(target)}${select}张${position}牌`;
|
||||
}
|
||||
event.dialog=ui.create.dialog(prompt);
|
||||
if(event.prompt2){
|
||||
event.dialog.addText(event.prompt2,event.prompt2.length<=20);
|
||||
}
|
||||
if(Array.isArray(event.promptx)){
|
||||
event.promptx.forEach(i=>event.dialog.add(i));
|
||||
}
|
||||
if(Array.isArray(event.selectCard)){
|
||||
event.promptbar=event.dialog.add('0/'+get.numStr(event.selectCard[1],'card'));
|
||||
event.custom.add.card=function(){
|
||||
_status.event.promptbar.innerHTML=
|
||||
ui.selected.cards.length+'/'+get.numStr(_status.event.selectCard[1],'card');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(get.itemtype(event.dialog)=='dialog'){
|
||||
event.dialog.style.display='';
|
||||
event.dialog.open();
|
||||
}
|
||||
}
|
||||
else if(event.isOnline()){
|
||||
event.send();
|
||||
}
|
||||
else{
|
||||
event.result='ai';
|
||||
}
|
||||
"step 1"
|
||||
if(event.result=='ai'){
|
||||
game.check();
|
||||
if((ai.basic.chooseCard(event.ai)||forced)&&(!event.filterOk||event.filterOk())){
|
||||
ui.click.ok();
|
||||
}
|
||||
else if(event.skill){
|
||||
ui.click.cancel();
|
||||
event._aiexclude.add(event.skill);
|
||||
event.redo();
|
||||
game.resume();
|
||||
}
|
||||
else{
|
||||
ui.click.cancel();
|
||||
}
|
||||
}
|
||||
"step 2"
|
||||
event.resume();
|
||||
if(event.aiChoose) event.aiChoose.close();
|
||||
if(event.glow_result&&event.result.cards&&!event.directresult){
|
||||
event.result.cards.forEach(i=>i.classList.add('glow'));
|
||||
}
|
||||
if(event.dialog) event.dialog.close();
|
||||
"step 3"
|
||||
if(event.result.bool&&event.result.cards&&!game.online){
|
||||
event.cards=event.result.cards.slice(0);
|
||||
if(event.logSkill){
|
||||
if(Array.isArray(event.logSkill)) player.logSkill(...event.logSkill);
|
||||
else player.logSkill(event.logSkill);
|
||||
}
|
||||
if(event.autodelay&&!event.isMine()){
|
||||
if(typeof event.autodelay=='number') game.delayx(event.autodelay);
|
||||
else game.delayx();
|
||||
}
|
||||
}
|
||||
else event.finish();
|
||||
"step 4"
|
||||
if(event.boolline) player.line(target,'green');
|
||||
event.done=target.gain(event.cards,player);
|
||||
event.done.giver=player;
|
||||
if(event.delay!==false) event.done.animate=event.visibleMove?'give':'giveAuto';
|
||||
else{
|
||||
target[event.visibleMove?'$give':'$giveAuto'](cards,player);
|
||||
if(event.visibleMove) event.done.visible=true;
|
||||
}
|
||||
},
|
||||
chooseToDiscard:function(){
|
||||
"step 0"
|
||||
if(event.autochoose()){
|
||||
|
@ -24294,6 +24427,53 @@ new Promise(resolve=>{
|
|||
next._args=Array.from(arguments);
|
||||
return next;
|
||||
}
|
||||
chooseToGive(...args){
|
||||
const next=game.createEvent('chooseToGive');
|
||||
next.player=this;
|
||||
if(args.length==1&&get.is.object(args[0])){
|
||||
for(const i in args[0]) next[i]=args[0][i];
|
||||
}
|
||||
else for(const arg of args){
|
||||
if(get.itemtype(arg)=='player'){
|
||||
next.target=arg;
|
||||
}
|
||||
else if(typeof arg=='number'){
|
||||
next.selectCard=[arg,arg];
|
||||
}
|
||||
else if(get.itemtype(arg)=='select'){
|
||||
next.selectCard=arg;
|
||||
}
|
||||
else if(get.itemtype(arg)=='dialog'){
|
||||
next.dialog=arg;
|
||||
next.prompt=false;
|
||||
}
|
||||
else if(typeof arg=='boolean'){
|
||||
next.forced=arg;
|
||||
}
|
||||
else if(get.itemtype(arg)=='position'){
|
||||
next.position=arg;
|
||||
}
|
||||
else if(typeof arg=='function'){
|
||||
if(next.filterCard) next.ai=arg;
|
||||
else next.filterCard=arg;
|
||||
}
|
||||
else if(typeof arg=='object'&&arg){
|
||||
next.filterCard=get.filter(arg);
|
||||
}
|
||||
else if(typeof arg=='string'){
|
||||
get.evtprompt(next,arg);
|
||||
}
|
||||
if(arg===null) console.log(args);
|
||||
}
|
||||
if(next.isMine()==false&&next.dialog) next.dialog.style.display='none';
|
||||
if(next.filterCard==undefined) next.filterCard=lib.filter.all;
|
||||
if(next.selectCard==undefined) next.selectCard=[1,1];
|
||||
if(next.position==undefined) next.position='h';
|
||||
if(next.ai==undefined) next.ai=get.unuseful;
|
||||
next.setContent('chooseToGive');
|
||||
next._args=args;
|
||||
return next;
|
||||
}
|
||||
chooseToDiscard(){
|
||||
var next=game.createEvent('chooseToDiscard');
|
||||
next.player=this;
|
||||
|
@ -37728,12 +37908,42 @@ new Promise(resolve=>{
|
|||
|
||||
let audioInfo=info.audio;
|
||||
if(info.audioname2){
|
||||
if(info.audioname2[player.name]) audioInfo=info.audioname2[player.name];
|
||||
else if(info.audioname2[player.name1]) audioInfo=info.audioname2[player.name1];
|
||||
else if(info.audioname2[player.name2]) audioInfo=info.audioname2[player.name2];
|
||||
else if(player.tempname){
|
||||
const name=player.tempname.find(i=>info.audioname2[i]);
|
||||
if(name) audioInfo=info.audioname2[name];
|
||||
if(player.name&&info.audioname2[player.name]) audioInfo=info.audioname2[player.name];
|
||||
else if(player.name1&&info.audioname2[player.name1]) audioInfo=info.audioname2[player.name1];
|
||||
else if(player.name2&&info.audioname2[player.name2]) audioInfo=info.audioname2[player.name2];
|
||||
else{
|
||||
var stop=false;
|
||||
if(player.tempname){
|
||||
const name=player.tempname.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
stop=true;
|
||||
audioInfo=info.audioname2[name];
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name&&get.characterSpecial(player.name).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
stop=true;
|
||||
audioInfo=info.audioname2[name];
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name1&&get.characterSpecial(player.name1).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name1).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
stop=true;
|
||||
audioInfo=info.audioname2[name];
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name2&&get.characterSpecial(player.name2).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name2).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
stop=true;
|
||||
audioInfo=info.audioname2[name];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(typeof audioInfo=='function') audioInfo=audioInfo(player);
|
||||
|
@ -37779,9 +37989,39 @@ new Promise(resolve=>{
|
|||
if(audioname.includes(player.name)) _audioname=`_${player.name}`;
|
||||
else if(audioname.includes(player.name1)) _audioname=`_${player.name1}`;
|
||||
else if(audioname.includes(player.name2)) _audioname=`_${player.name2}`;
|
||||
else if(player.tempname){
|
||||
const name=player.tempname.find(i=>audioname.includes(i));
|
||||
if(name) _audioname=`_${name}`;
|
||||
else{
|
||||
var stop=false;
|
||||
if(player.tempname){
|
||||
const name=player.tempname.find(i=>audioname.includes(i));
|
||||
if(name){
|
||||
stop=true;
|
||||
_audioname=`_${name}`;
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name&&get.characterSpecial(player.name).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>audioname.includes(i));
|
||||
if(name){
|
||||
stop=true;
|
||||
_audioname=`_${name}`;
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name1&&get.characterSpecial(player.name1).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name1).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>audioname.includes(i));
|
||||
if(name){
|
||||
stop=true;
|
||||
_audioname=`_${name}`;
|
||||
}
|
||||
}
|
||||
if(!stop&&player.name2&&get.characterSpecial(player.name2).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(player.name2).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>audioname.includes(i));
|
||||
if(name){
|
||||
stop=true;
|
||||
_audioname=`_${name}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
list=list.slice(1);//[路径,number/true,格式]
|
||||
|
@ -57609,9 +57849,19 @@ new Promise(resolve=>{
|
|||
// 有bug,先用旧版
|
||||
if(lib.config.background_speak&&e!=='init'){
|
||||
var audioname=this.link;
|
||||
if(info.audioname2&&info.audioname2[playername]){
|
||||
audioname=info.audioname2[playername];
|
||||
info=lib.skill[audioname];
|
||||
if(info.audioname2){
|
||||
if(info.audioname2[playername]){
|
||||
audioname=info.audioname2[playername];
|
||||
info=lib.skill[audioname];
|
||||
}
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
audioname=info.audioname2[name];
|
||||
info=lib.skill[audioname];
|
||||
}
|
||||
}
|
||||
}
|
||||
var audioinfo=info.audio;
|
||||
var that=this;
|
||||
|
@ -57653,7 +57903,14 @@ new Promise(resolve=>{
|
|||
audioinfo=audioinfo[1];
|
||||
}
|
||||
if(typeof audioinfo=='number'){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playAudio('skill',audioname+getIndex(audioinfo));
|
||||
}
|
||||
else if(typeof audioinfo=="object"&&"type" in audioinfo&&audioinfo.type=="direct"&&"files" in audioinfo){
|
||||
|
@ -57667,16 +57924,31 @@ new Promise(resolve=>{
|
|||
}
|
||||
}
|
||||
else if(audioinfo){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playAudio('skill',audioname);
|
||||
}
|
||||
else if(true&&info.audio!==false){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playSkillAudio(audioname,getIndex(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
}
|
||||
else{
|
||||
// 样式一
|
||||
const introduction=ui.create.div('.characterintro',uiintro),showCharacterNamePinyin=lib.config.show_characternamepinyin;
|
||||
if(showCharacterNamePinyin!='doNotShow'){
|
||||
|
@ -57880,9 +58152,19 @@ new Promise(resolve=>{
|
|||
// 有bug,先用旧版
|
||||
if(lib.config.background_speak&&e!=='init'){
|
||||
var audioname=this.link;
|
||||
if(info.audioname2&&info.audioname2[playername]){
|
||||
audioname=info.audioname2[playername];
|
||||
info=lib.skill[audioname];
|
||||
if(info.audioname2){
|
||||
if(info.audioname2[playername]){
|
||||
audioname=info.audioname2[playername];
|
||||
info=lib.skill[audioname];
|
||||
}
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname2[i]);
|
||||
if(name){
|
||||
audioname=info.audioname2[name];
|
||||
info=lib.skill[audioname];
|
||||
}
|
||||
}
|
||||
}
|
||||
var audioinfo=info.audio;
|
||||
var that=this;
|
||||
|
@ -57924,7 +58206,14 @@ new Promise(resolve=>{
|
|||
audioinfo=audioinfo[1];
|
||||
}
|
||||
if(typeof audioinfo=='number'){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playAudio('skill',audioname+getIndex(audioinfo));
|
||||
}
|
||||
else if(typeof audioinfo=="object"&&"type" in audioinfo&&audioinfo.type=="direct"&&"files" in audioinfo){
|
||||
|
@ -57938,11 +58227,25 @@ new Promise(resolve=>{
|
|||
}
|
||||
}
|
||||
else if(audioinfo){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playAudio('skill',audioname);
|
||||
}
|
||||
else if(true&&info.audio!==false){
|
||||
if(Array.isArray(info.audioname)&&info.audioname.contains(playername)) audioname=audioname+'_'+playername;
|
||||
if(Array.isArray(info.audioname)){
|
||||
if(info.audioname.includes(playername)) audioname=audioname+'_'+playername;
|
||||
else if(get.characterSpecial(playername).some(tag=>tag.startsWith('tempname:'))){
|
||||
const list=get.characterSpecial(playername).find(tag=>tag.startsWith('tempname:')).split(':').slice(1);
|
||||
const name=list.find(i=>info.audioname.includes(i));
|
||||
if(name) audioname=audioname+'_'+name;
|
||||
}
|
||||
}
|
||||
game.playSkillAudio(audioname,getIndex(2));
|
||||
}
|
||||
}
|
||||
|
@ -59836,6 +60139,11 @@ new Promise(resolve=>{
|
|||
if(lib.characterIntro[name]) return lib.characterIntro[name];
|
||||
return '暂无武将介绍';
|
||||
},
|
||||
characterSpecial:name=>{
|
||||
const character=get.character(name);
|
||||
if(!character) return [];
|
||||
return character[4]||[];
|
||||
},
|
||||
bordergroup:(info,raw)=>{
|
||||
if(!Array.isArray(info)){
|
||||
info=lib.character[info];
|
||||
|
|
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 44 KiB |
|
@ -143,6 +143,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
start:function(){
|
||||
"step 0"
|
||||
_status.mode=_status.connectMode?lib.configOL.single_mode:get.config('single_mode');
|
||||
var playback=localStorage.getItem(lib.configprefix+'playback');
|
||||
if(playback){
|
||||
ui.create.me();
|
||||
|
@ -172,7 +173,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
});
|
||||
}
|
||||
"step 2"
|
||||
_status.mode=_status.connectMode?lib.configOL.single_mode:get.config('single_mode');
|
||||
if(_status.mode=='normal'){
|
||||
lib.card.list=lib.singlePile.slice(0);
|
||||
game.fixedPile=true;
|
||||
|
@ -883,35 +883,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
skill:{
|
||||
manyi:{
|
||||
audio:2,
|
||||
trigger:{target:'useCardToBefore'},
|
||||
forced:true,
|
||||
filter:function(event,player){
|
||||
return event.card.name=='nanman';
|
||||
},
|
||||
content:function(){
|
||||
trigger.cancel();
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
target:function(card){
|
||||
if(card.name=='nanman') return 'zerotarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
group:'manyi2',
|
||||
},
|
||||
manyi2:{
|
||||
trigger:{
|
||||
player:'enterGame',
|
||||
global:'gameDrawAfter',
|
||||
},
|
||||
direct:true,
|
||||
content:function(){
|
||||
player.chooseUseTarget('nanman',get.prompt('manyi'),'视为使用一张【南蛮入侵】').logSkill='manyi';
|
||||
},
|
||||
},
|
||||
wanrong:{
|
||||
audio:2,
|
||||
trigger:{target:'useCardToTargeted'},
|
||||
|
@ -1191,8 +1162,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
changban2:'血战长坂坡',
|
||||
dianjiang2:'点将单挑',
|
||||
|
||||
manyi:'蛮裔',
|
||||
manyi_info:'锁定技,【南蛮入侵】对你无效。当你登场时,你可以视为使用一张【南蛮入侵】。',
|
||||
wanrong:'婉容',
|
||||
wanrong_info:'当你成为【杀】的目标后,你可以摸一张牌。',
|
||||
sgzhiheng:'制衡',
|
||||
|
|