diff --git a/audio/die/key_abyusa.mp3 b/audio/die/key_abyusa.mp3 new file mode 100644 index 000000000..5a609f908 Binary files /dev/null and b/audio/die/key_abyusa.mp3 differ diff --git a/audio/die/key_shiina.mp3 b/audio/die/key_shiina.mp3 new file mode 100644 index 000000000..591e85ab5 Binary files /dev/null and b/audio/die/key_shiina.mp3 differ diff --git a/audio/skill/abyusa_dunying1.mp3 b/audio/skill/abyusa_dunying1.mp3 new file mode 100644 index 000000000..6be1c09d4 Binary files /dev/null and b/audio/skill/abyusa_dunying1.mp3 differ diff --git a/audio/skill/abyusa_dunying2.mp3 b/audio/skill/abyusa_dunying2.mp3 new file mode 100644 index 000000000..b2c2fda91 Binary files /dev/null and b/audio/skill/abyusa_dunying2.mp3 differ diff --git a/audio/skill/abyusa_jueqing1.mp3 b/audio/skill/abyusa_jueqing1.mp3 new file mode 100644 index 000000000..de86088d7 Binary files /dev/null and b/audio/skill/abyusa_jueqing1.mp3 differ diff --git a/audio/skill/abyusa_jueqing2.mp3 b/audio/skill/abyusa_jueqing2.mp3 new file mode 100644 index 000000000..26b3b0e6b Binary files /dev/null and b/audio/skill/abyusa_jueqing2.mp3 differ diff --git a/audio/skill/shiina_feiyan1.mp3 b/audio/skill/shiina_feiyan1.mp3 new file mode 100644 index 000000000..bb13d0512 Binary files /dev/null and b/audio/skill/shiina_feiyan1.mp3 differ diff --git a/audio/skill/shiina_qingshen1.mp3 b/audio/skill/shiina_qingshen1.mp3 new file mode 100644 index 000000000..8a447c226 Binary files /dev/null and b/audio/skill/shiina_qingshen1.mp3 differ diff --git a/audio/skill/shiina_retieji1.mp3 b/audio/skill/shiina_retieji1.mp3 new file mode 100644 index 000000000..cffb589fd Binary files /dev/null and b/audio/skill/shiina_retieji1.mp3 differ diff --git a/character/diy.js b/character/diy.js index 48a63d25c..cff3aa50d 100755 --- a/character/diy.js +++ b/character/diy.js @@ -6472,6 +6472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'abyusa_jueqing_rewrite', subSkill:{ rewrite:{ + audio:'abyusa_jueqing', trigger:{source:'damageBefore'}, forced:true, charlotte:true, @@ -6518,6 +6519,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, abyusa_dunying:{ + audio:2, trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']}, forced:true, filter:function(event,player){ @@ -9476,6 +9478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, shiina_qingshen:{ + audio:1, trigger:{ player:'damageEnd', source:'damageSource', @@ -9522,6 +9525,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, shiina_feiyan:{ + audio:1, animalList:['key_inari','key_doruji'], trigger:{global:'phaseBegin'}, direct:true, @@ -9555,6 +9559,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, shiina_retieji:{ + audio:1, shaRelated:true, trigger:{player:'useCardToPlayered'}, check:function(event,player){ diff --git a/character/huicui.js b/character/huicui.js index 468579db6..cb64cdc46 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏','unseen']], yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']], liuchongluojun:['male','qun',3,['dcminze','dcjini']], - yuechen:['male','wei',4,['dcporui','dcgonghu'],['unseen']], + yuechen:['male','wei',4,['dcporui','dcgonghu']], zhangkai:['male','qun',4,['dcxiangshu']], gaoxiang:['male','shu',4,['dcchiying'],['unseen']], yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']], @@ -618,10 +618,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseJieshuBegin'}, filter:function(event,player){ if(player==event.player) return false; - if(player.hasSkill('dcporui_round')) return false; + if(player.countMark('dcporui_round')>=(player.hasMark('dcgonghu_basic')?2:1)||player.countCards('h')==0) return false; return game.hasPlayer(current=>{ if(current==player||current==event.player) return false; - return current.getHistory('lose').length>0; + return current.hasHistory('lose',function(evt){ + return evt.cards.length>0; + }); })&&(_status.connectMode||player.hasCard({type:'basic'},'h')); }, direct:true, @@ -638,7 +640,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ selectCard:1, targets:game.filterPlayer(current=>{ if(current==player||current==trigger.player) return false; - return current.getHistory('lose').length>0; + return current.hasHistory('lose',function(evt){ + return evt.cards.length>0; + }); }), filterTarget:function(card,player,target){ return _status.event.targets.contains(target); @@ -656,9 +660,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.target=target; player.logSkill('dcporui',target); player.discard(cards); - event.num2=Math.max(0,player.hp); + event.num2=Math.min(5,target.getHistory('lose').reduce(function(num,evt){ + return num=evt.cards2.length; + },0)); event.num=event.num2+1; player.addTempSkill('dcporui_round','roundStart'); + player.addMark('dcporui_round',1,false); } else event.finish(); 'step 2' @@ -677,11 +684,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else if(cards.length<=event.num2) event._result={bool:true,cards:cards}; else player.chooseCard('破锐:交给'+get.translation(target)+get.cnNumber(event.num2)+'张手牌',true,event.num2); } - else event.goto(6) + else event.finish(); 'step 5' if(result.bool){ player.give(result.cards,target); } + event.finish(); 'step 6' if(player.hasMark('dcgonghu_basic')){ if(!target.hasHistory('damage',evt=>{ @@ -692,7 +700,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, subSkill:{ - round:{charlotte:true} + round:{charlotte:true,onremove:true} }, ai:{ expose:0.4, @@ -708,13 +716,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, forced:true, filter:function(event,player){ + if(!_status.currentPhase||_status.currentPhase==player) return false; if(event.name=='damage'){ if(player.hasMark('dcgonghu_damage')) return false; - return _status.currentPhase&&_status.currentPhase!=player; + var num=0; + player.getHistory('damage',evt=>num+=evt.num); + player.getHistory('sourceDamage',evt=>num+=evt.num); + return num>1; } if(player.hasMark('dcgonghu_basic')) return false; var evt=event.getl(player); - return evt&&evt.cards2&&evt.cards2.some(i=>get.type2(i,player)=='basic'); + if(!evt||!evt.cards2||!evt.cards2.some(i=>get.type2(i,player)=='basic')) return false; + var num=0; + player.getHistory('lose',function(evtx){ + if(num<2){ + if(evtx&&evtx.cards2) num+=evtx.cards2.filter(i=>get.type2(i,player)=='basic').length; + } + }); + return num>=2; }, group:['dcgonghu_basic','dcgonghu_trick'], content:function(){ @@ -9817,7 +9836,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return str; }, dcporui:function(player){ - return '每轮限一次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':',然后你交给其X张手牌')+'(X为你的体力值)。'+(player.hasMark('dcgonghu_basic')?'若其没有因此受到伤害,你回复1点体力。':''); + return '每轮限'+(player.hasMark('dcgonghu_basic')?'两':'一')+'次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':',然后你交给其X张手牌')+'(X为其本回合失去的牌数且至多为5)。'; }, }, perfectPair:{}, @@ -10236,9 +10255,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcjini_info:'当你受到伤害后,你可以重铸至多Y张手牌(Y为你的体力上限减本回合你以此法重铸过的牌数)。若你以此法获得了【杀】,你可以对伤害来源使用一张无视距离且不可被响应的【杀】。', yuechen:'乐綝', dcporui:'破锐', - dcporui_info:'每轮限一次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】,然后你交给其X张手牌(X为你的体力值)。', + dcporui_info:'每轮限一次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】,然后你交给其X张手牌(X为其本回合失去的牌数且至多为5)。', dcgonghu:'共护', - dcgonghu_info:'锁定技。①当你于回合外失去基本牌后,你于〖破锐〗后增加“若其没有因此受到伤害,你回复1点体力”。②当你于回合外造成或受到伤害后,你删除〖破锐〗中的“,然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。', + dcgonghu_info:'锁定技。你的回合外:①当你失去基本牌后,若你本回合内失去基本牌的数量大于1,你将〖破锐〗改为每轮限两次。②当你造成或受到伤害后,若你本回合内造成或受到的伤害大于1,你删除〖破锐〗中的“,然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。', yue_caiwenji:'乐蔡琰', dcshuangjia:'霜笳', dcshuangjia_tag:'胡笳', diff --git a/character/xianding.js b/character/xianding.js index ff2dd948f..02f543aed 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'xianding', connect:true, character:{ + sunlingluan:['female','wu',3,['dclingyue','dcpandi']], dc_duyu:['male','wei',4,['dcjianguo','dcdyqingshi']], ganfurenmifuren:['female','shu',3,['dcchanjuan','dcxunbie']], dc_ganfuren:['female','shu',3,['dcshushen','dcshenzhi']], @@ -77,7 +78,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren'], sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'], sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'], - sp2_yinyu:['zhouyi','luyi'], + sp2_yinyu:['zhouyi','luyi','sunlingluan'], sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao'], sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'], sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun'], @@ -86,6 +87,162 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //孙翎鸾 + dclingyue:{ + audio:2, + trigger:{global:'damageSource'}, + forced:true, + filter:function(event,player){ + if(!event.source||!event.source.isIn()) return false; + var history=event.source.actionHistory; + for(var i=history.length-1;i>=0;i--){ + if(i==history.length-1){ + if(history[i].sourceDamage.indexOf(event)>0) return false; + } + else if(history[i].sourceDamage.some(evt=>evt!=event)) return false; + if(history[i].isRound) break; + } + return true; + }, + content:function(){ + var num=1,current=_status.currentPhase; + if(current&&trigger.player!=current){ + var num=0,players=game.players.slice(0).concat(game.dead); + for(var target of players){ + target.getHistory('sourceDamage',function(evt){ + num+=evt.num; + }); + } + } + player.draw(num); + }, + }, + dcpandi:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + var players=event.dcpandi; + if(!players||!players.length) return false; + var source=player.storage.dcpandi_effect; + return get.itemtype(source)!='player'||!source.isIn(); + }, + onChooseToUse:function(event){ + if(!game.online&&event.type=='phase'){ + var players=game.filterPlayer(function(current){ + return current!=event.player&¤t.getHistory('sourceDamage').length==0; + }) + event.set('dcpandi',players) + } + }, + filterTarget:function(card,player,target){ + var players=_status.event.dcpandi; + if(!players||!players.length) return false; + return players.contains(target); + }, + content:function(){ + if(target.isIn()){ + player.storage.dcpandi_effect=target; + player.addTempSkill('dcpandi_effect','phaseUseAfter'); + } + }, + subSkill:{ + effect:{ + audio:'dcpandi', + charlotte:true, + priority:Infinity, + onremove:true, + mark:'character', + intro:{ + content:'下一张牌视为由$使用', + }, + trigger:{player:'useCardBefore'}, + forced:true, + filter:function(event,player){ + var source=player.storage.dcpandi_effect; + return get.itemtype(source)=='player'&&source.isIn(); + }, + logTarget:(event,player)=>player.storage.dcpandi_effect, + content:function(){ + trigger.player=player.storage.dcpandi_effect; + trigger.noai=true; + player.removeSkill('dcpandi_effect'); + game.delay(0.5); + }, + mod:{ + selectCard:function(card,player,range){ + var source=player.storage.dcpandi_effect; + if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return; + var range,info=get.info(card); + var select=get.copy(info.selectTarget); + if(select==undefined){ + if(info.filterTarget==undefined) return [0,0]; + range=[1,1]; + } + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,source); + game.checkMod(card,source,range,'selectTarget',source); + }, + cardEnabled2:function(card,player,event){ + var source=player.storage.dcpandi_effect; + if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return; + var check=game.checkMod(card,source,event,'unchanged','cardEnabled2',source); + return check; + }, + cardEnabled:function(card,player,event){ + var source=player.storage.dcpandi_effect; + if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return; + if(event==='forceEnable'){ + var mod=game.checkMod(card,source,event,'unchanged','cardEnabled',source); + if(mod!='unchanged') return mod; + return true; + } + else{ + var filter=get.info(card).enable; + if(!filter) return; + var mod=game.checkMod(card,player,source,'unchanged','cardEnabled',source); + if(mod!='unchanged') return mod; + if(typeof filter=='boolean') return filter; + if(typeof filter=='function') return filter(card,player,event); + } + }, + cardUsable:function(card,player,num){ + var source=player.storage.dcpandi_effect; + if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return; + var event=_status.event; + if(event.type=='chooseToUse_button') event=event.getParent(); + if(source!=_status.event.player) return true; + if(info.updateUsable=='phaseUse'){ + if(event.getParent().name!='phaseUse') return true; + if(event.getParent().player!=source) return true; + } + event.addCount_extra=true; + var num=info.usable; + if(typeof num=='function') num=num(card,source); + num=game.checkMod(card,source,num,event,'cardUsable',source); + if(typeof num!='number') return true; + if(source.countUsed(card)糜夫人,刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。' + ganfurenmifuren:'甘夫人,刘备起兵后于沛城娶之为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月,刘备病死于白帝城,追谥甘夫人为“昭烈皇后”。
糜夫人,刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。', + sunlingluan:'孙翎鸾,孙坚与妾室丁氏的女儿,孙策的妹妹,孙权、孙尚香的姐姐。孙翎年幼时曾得杜夔点化,窥得音律玄妙,丝竹八音,擅长琵琶,每次弹奏琵琶时,经常引来百鸟,称为奇观。早年孙翎鸾出游,山林巧遇葛玄,葛玄观其面相为吉,特传授修行辟谷之法,可令其身心洗涤,容颜久存。孙翎鸾有恋人名张奋,两人情投意合,可惜造化弄人,张奋病死外域,孙翎鸾倚楼盼归,日复一日、年复一年。后有五彩孔雀自东南而来,绕楼而鸣,其声如慕,孙翎鸾泪染笑靥,与孔雀耳语几句后乘翎而去。', }, characterTitle:{ // wulan:'#b对决限定武将', @@ -11017,6 +11175,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dcjianguo_info:'出牌阶段限一次。你可以选择一名角色并选择一项:1.令其摸一张牌,然后其弃置一半的手牌;2.令其弃置一张牌,然后其摸等同于手牌数一半的牌(均向下取整)。', dcdyqingshi:'倾势', dcdyqingshi_info:'当你于回合内使用【杀】或普通锦囊牌指定第一个目标后,若目标角色包括其他角色且此牌为你本回合使用的第X张牌,你可以对其中一名不为你的目标角色造成1点伤害(X为你的手牌数)。', + sunlingluan:'孙翎鸾', + dclingyue:'聆乐', + dclingyue_info:'锁定技。一名角色于一轮内首次造成伤害后,你摸一张牌。若此时是该角色回合外,则改为摸X张牌(X为本回合全场造成的伤害值)。', + dcpandi:'盻睇', + dcpandi_info:'出牌阶段,你可以选择一名本回合内未造成过伤害的角色。你本阶段内使用的下一张牌改为以该角色为基准判断使用目标合法性,且使用者改为该角色。', sp2_yinyu:'隐山之玉', sp2_huben:'百战虎贲', diff --git a/game/game.js b/game/game.js index 8172e5506..2580fa534 100644 --- a/game/game.js +++ b/game/game.js @@ -28463,19 +28463,19 @@ if(player==undefined) player=_status.event.player; if(!player) return false; if(get.itemtype(card)=='card'){ - var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + var mod2=game.checkMod(card,player,event,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; } card=get.autoViewAs(card,null,player); if(event==='forceEnable'){ - var mod=game.checkMod(card,player,'unchanged','cardEnabled',player); + var mod=game.checkMod(card,player,event,'unchanged','cardEnabled',player); if(mod!='unchanged') return mod; return true; } else{ var filter=get.info(card).enable; if(!filter) return; - var mod=game.checkMod(card,player,'unchanged','cardEnabled',player); + var mod=game.checkMod(card,player,event,'unchanged','cardEnabled',player); if(mod!='unchanged') return mod; if(typeof filter=='boolean') return filter; if(typeof filter=='function') return filter(card,player,event); @@ -28492,7 +28492,7 @@ } if(player==undefined) player=_status.event.player; if(get.itemtype(card)=='card'){ - var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + var mod2=game.checkMod(card,player,event,'unchanged','cardEnabled2',player); if(mod2!='unchanged') return mod2; } var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); @@ -28511,7 +28511,7 @@ } var num=info.usable; if(typeof num=='function') num=num(card,player); - num=game.checkMod(card,player,num,'cardUsable',player); + num=game.checkMod(card,player,num,event,'cardUsable',player); if(typeof num!='number') return true; else return(player.countUsed(card)