diff --git a/audio/die/dufuren.mp3 b/audio/die/dufuren.mp3 new file mode 100644 index 000000000..5486145db Binary files /dev/null and b/audio/die/dufuren.mp3 differ diff --git a/audio/die/lvlingqi.mp3 b/audio/die/lvlingqi.mp3 new file mode 100644 index 000000000..aee9ac155 Binary files /dev/null and b/audio/die/lvlingqi.mp3 differ diff --git a/audio/die/ol_wangrong.mp3 b/audio/die/ol_wangrong.mp3 new file mode 100644 index 000000000..15f2cf2dc Binary files /dev/null and b/audio/die/ol_wangrong.mp3 differ diff --git a/audio/skill/guowu1.mp3 b/audio/skill/guowu1.mp3 new file mode 100644 index 000000000..023ac184a Binary files /dev/null and b/audio/skill/guowu1.mp3 differ diff --git a/audio/skill/guowu2.mp3 b/audio/skill/guowu2.mp3 new file mode 100644 index 000000000..2616c3c59 Binary files /dev/null and b/audio/skill/guowu2.mp3 differ diff --git a/audio/skill/olfengzi1.mp3 b/audio/skill/olfengzi1.mp3 new file mode 100644 index 000000000..89e1fb457 Binary files /dev/null and b/audio/skill/olfengzi1.mp3 differ diff --git a/audio/skill/olfengzi2.mp3 b/audio/skill/olfengzi2.mp3 new file mode 100644 index 000000000..b82f76b00 Binary files /dev/null and b/audio/skill/olfengzi2.mp3 differ diff --git a/audio/skill/olfusong1.mp3 b/audio/skill/olfusong1.mp3 new file mode 100644 index 000000000..73622c938 Binary files /dev/null and b/audio/skill/olfusong1.mp3 differ diff --git a/audio/skill/olfusong2.mp3 b/audio/skill/olfusong2.mp3 new file mode 100644 index 000000000..56bd01408 Binary files /dev/null and b/audio/skill/olfusong2.mp3 differ diff --git a/audio/skill/oljizhan1.mp3 b/audio/skill/oljizhan1.mp3 new file mode 100644 index 000000000..8b4eeface Binary files /dev/null and b/audio/skill/oljizhan1.mp3 differ diff --git a/audio/skill/oljizhan2.mp3 b/audio/skill/oljizhan2.mp3 new file mode 100644 index 000000000..7f99a9a6a Binary files /dev/null and b/audio/skill/oljizhan2.mp3 differ diff --git a/audio/skill/shunshi1.mp3 b/audio/skill/shunshi1.mp3 new file mode 100644 index 000000000..300445eda Binary files /dev/null and b/audio/skill/shunshi1.mp3 differ diff --git a/audio/skill/shunshi2.mp3 b/audio/skill/shunshi2.mp3 new file mode 100644 index 000000000..c89c681e5 Binary files /dev/null and b/audio/skill/shunshi2.mp3 differ diff --git a/audio/skill/yise1.mp3 b/audio/skill/yise1.mp3 new file mode 100644 index 000000000..17df7ea12 Binary files /dev/null and b/audio/skill/yise1.mp3 differ diff --git a/audio/skill/yise2.mp3 b/audio/skill/yise2.mp3 new file mode 100644 index 000000000..f21332bcd Binary files /dev/null and b/audio/skill/yise2.mp3 differ diff --git a/audio/skill/zhuangrong1.mp3 b/audio/skill/zhuangrong1.mp3 new file mode 100644 index 000000000..002474fa2 Binary files /dev/null and b/audio/skill/zhuangrong1.mp3 differ diff --git a/audio/skill/zhuangrong2.mp3 b/audio/skill/zhuangrong2.mp3 new file mode 100644 index 000000000..7809fcbb9 Binary files /dev/null and b/audio/skill/zhuangrong2.mp3 differ diff --git a/character/diy.js b/character/diy.js index b45c2e35c..504bad4cb 100755 --- a/character/diy.js +++ b/character/diy.js @@ -8649,6 +8649,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ usedu:true, save:true, skillTagFilter:function(player,tag,target){ + if(tag=='usedu') return player.isDamaged(); return player==target&&player.hasUsableCard('du')&&!player.hasSkill('lucia_duqu_terra'); }, }, diff --git a/character/mobile.js b/character/mobile.js index fe41de20a..b72b7c78a 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -128,7 +128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hujinding:['female','shu','2/6',['renshi','wuyuan','huaizi']], re_zhanggong:['male','wei',3,['reqianxin','rezhenxing']], - re_xugong:['male','wu',3,['rebiaozhao','yechou']], + re_xugong:['male','qun',3,['rebiaozhao','yechou']], re_weiwenzhugezhi:['male','wu',4,['refuhai']], xin_yuanshao:['male','qun',4,['reluanji','xueyi'],['zhu']], diff --git a/character/rank.js b/character/rank.js index b7daf6306..165bd1ff9 100644 --- a/character/rank.js +++ b/character/rank.js @@ -255,6 +255,7 @@ window.noname_character_rank={ 'caochun', 'xin_caifuren', 'shen_xunyu', + 'ol_wangrong', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -473,6 +474,7 @@ window.noname_character_rank={ 'ns_yanghu', 'ns_zhangning', 'huangchengyan', + 'lvlingqi', 'zhongyan', 'wangling', 'zhouchu', @@ -703,6 +705,7 @@ window.noname_character_rank={ 'ol_lusu', 'zhangzhongjing', 'db_wenyang', + 'dufuren', ], b:[ 'diy_feishi', @@ -1405,6 +1408,7 @@ window.noname_character_rank={ 're_panshu', 'db_wenyang', 'qiaozhou', + 'lvlingqi', 'key_kano', 'key_haruko', 'key_akiko', @@ -1741,6 +1745,8 @@ window.noname_character_rank={ 'jiachong', 'ol_lusu', 'xin_sunluban', + 'ol_wangrong', + 'dufuren', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index d282824dc..de2f0092b 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -6134,7 +6134,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ content:function(storage,player,skill){ var str='
  • 锁定技,你不能于〖蛊惑〗的结算流程中进行质疑。当你的体力值不大于1时,你的其他技能失效。'; - var list=player.getSkills(null,null,false).filter(function(i){ + var list=player.getSkills(null,false,false).filter(function(i){ return lib.skill.rechanyuan.skillBlocker(i,player); }); if(list.length) str+=('
  • 失效技能:'+get.translation(list)) diff --git a/character/shenhua.js b/character/shenhua.js index 6e0e91e6c..856de004e 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -7193,7 +7193,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{ content:function(storage,player,skill){ var str='
  • 锁定技,你不能质疑于吉,只要你的体力值为1,你的其他技能便全部失效。'; - var list=player.getSkills(null,null,false).filter(function(i){ + var list=player.getSkills(null,false,false).filter(function(i){ return lib.skill.rechanyuan.skillBlocker(i,player); }); if(list.length) str+=('
  • 失效技能:'+get.translation(list)) diff --git a/character/sp.js b/character/sp.js index 87f77124c..26a302b0c 100755 --- a/character/sp.js +++ b/character/sp.js @@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, character:{ - ol_wangrong:['female','qun',3,['olfengzi','oljizhan','olfusong'],['unseen']], + ol_wangrong:['female','qun',3,['olfengzi','oljizhan','olfusong']], ol_dengzhi:['male','shu',3,['olxiuhao','olsujian']], bianfuren:['female','wei',3,['fuwei','yuejian']], duxi:['male','wei',3,['quxi','bixiong']], @@ -413,8 +413,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player!=game.me&&!player.isUnderControl()&&!player.isOnline()) game.delayx(); var type=get.type(trigger.card,false); player.chooseToDiscard('h',get.prompt('olfengzi'),'弃置一张'+get.translation(type)+'牌,令'+get.translation(trigger.card)+'结算两次',function(card,player){ - return get.type(card,player)==_status.event.type; - }).set('type',type).logSkill='olfengzi'; + return get.type2(card,player)==_status.event.type; + }).set('type',type).set('ai',()=>-1).logSkill='olfengzi'; 'step 1' if(result.bool){ player.addTempSkill('olfengzi_buff','phaseUseAfter'); @@ -454,7 +454,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.showCards(card,get.translation(player)+'发动了【吉占】'); 'step 1' var str=get.strNumber(num); - player.chooseControl('大于'+str,'小于'+str,'cancel2').set('prompt','吉占:猜测下一张牌的点数'); + player.chooseControl('大于'+str,'小于'+str,'cancel2').set('prompt','吉占:猜测下一张牌的点数').set('choice',num<7?0:1).set('ai',()=>_status.event.choice); 'step 2' var card=get.cards()[0]; game.cardsGotoOrdering(card); @@ -485,13 +485,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.chooseTarget(get.prompt('olfusong'),'令一名体力上限大于你的其他角色获得〖丰姿〗或〖吉占〗',function(card,player,target){ return target.maxHp>player.maxHp; - }).set('forceDie',true); + }).set('forceDie',true).set('ai',(target)=>get.attitude(_status.event.player,target)); 'step 1' if(result.bool){ var target=result.targets[0]; event.target=target; player.logSkill('olfusong',target); - player.chooseControl('olfengzi','oljizhan').set('prompt','令'+get.translation(target)+'获得其中一个技能'); + player.chooseControl('olfengzi','oljizhan').set('prompt','令'+get.translation(target)+'获得其中一个技能').set('ai',()=>(Math.random()>0.5?0:1)); } else event.finish(); 'step 2' diff --git a/character/sp2.js b/character/sp2.js index 628828f48..7a95b30c1 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + lvlingqi:['female','qun',4,['guowu','zhuangrong']], + dufuren:['female','wei',3,['yise','shunshi']], zhanghu:['male','wei',4,['cuijian','tongyuan']], caoanmin:['male','wei',4,['xianwei']], re_panshu:['female','wu',3,['zhiren','yaner']], @@ -54,7 +56,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xingdaorong:['male','qun','4/6',['xuxie']], lijue:["male","qun","4/6",["xinfu_langxi","xinfu_yisuan"],[]], zhangji:["male","qun",4,["xinfu_lveming","xinfu_tunjun"],[]], - fanchou:["male","qun",4,["xinfu_xingluan"],[]], + fanchou:["male","qun",4,["xinxingluan"],[]], guosi:["male","qun",4,["xinfu_tanbei","xinfu_sidao"],[]], lvkai:["male","shu",3,["xinfu_tunan","xinfu_bijing"],[]], zhanggong:["male","wei",3,["xinfu_zhenxing","xinfu_qianxin"],[]], @@ -102,10 +104,428 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu','dufuren'], } }, skill:{ + //樊稠 + xinxingluan:{ + audio:'xinfu_xingluan', + usable:1, + trigger:{player:'useCardAfter'}, + direct:true, + filter:function(event,player){ + return player.isPhaseUsing(); + }, + content:function(){ + 'step 0' + var list=['观看牌堆中两张点数为6的牌并获得其中一张']; + event.addIndex=1; + var bool2=false,bool3=game.hasPlayer(function(current){ + if(current!=player&¤t.countCards('he')>0) bool2=true; + return current.hasCard(function(card){ + return get.number(card)==6&&lib.filter.canBeGained(card,current,player); + },'ej'); + }); + if(bool2){ + event.addIndex=0; + list.push('令一名其他角色弃置一张点数为6的牌或交给你一张牌'); + } + if(bool3) list.push('获得场上一张点数为6的牌'); + player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('xinxingluan')).set('ai',function(){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + if(current==player) return false; + var att=-get.sgn(get.attitude(player,current)-0.1); + return current.hasCard(function(card){ + return get.number(card)==6&&lib.filter.canBeGained(card,current,player)&&get.sgn(get.useful(card,current))==att; + },'ej'); + })) return 2-_status.event.getParent().addIndex; + if(game.hasPlayer(function(target){ + if(target==player) return false; + var att=get.attitude(player,target); + return att<0&&target.countCards('he')>0&&!target.hasCard(function(card){ + return get.value(card,target)<=0; + },'he'); + })) return 1; + return 0; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.index==0){ + player.logSkill('xinxingluan'); + } + else if(result.index+event.addIndex==1) event.goto(6); + else event.goto(4); + } + else event.finish(); + 'step 2' + var cards=[]; + while(cards.length<2){ + var card=get.cardPile(function(card){ + return !cards.contains(card)&&get.number(card)==6; + }); + if(!card) break; + cards.push(card); + } + if(!cards.length){ + player.draw(); + event.finish(); + } + else if(cards.length==1){ + event._result={bool:true,links:cards}; + } + else player.chooseButton(['兴乱:选择获得其中一张',cards],true).set('ai',function(button){ + return get.value(button.link,_status.event.player); + }); + 'step 3' + if(result.bool){ + player.gain(result.links,'gain2'); + } + event.finish(); + 'step 4' + player.chooseTarget('获得一名角色装备区或判定区内点数为6的牌',true,function(card,player,current){ + return current.hasCard(function(card){ + return get.number(card)==6&&lib.filter.canBeGained(card,current,player); + },'ej'); + }).set('ai',function(target){ + var player=_status.event.player,att=-get.sgn(get.attitude(player,target)-0.1),max=0,ej=target.getCards('ej',function(card){ + return get.number(card)==6&&lib.filter.canBeGained(card,target,player); + }); + for(var i of ej){ + var num=get.useful(i,target)*att; + if(num>max) max=num; + return max; + } + }); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('xinxingluan',target); + player.gainPlayerCard(target,'ej',true).set('filterButton',function(button){ + return get.number(button.link)==6; + }); + } + event.finish(); + 'step 6' + player.chooseTarget('令一名其他角色弃置一张点数为6的牌,否则交给你一张牌',true,function(card,player,current){ + return current!=player&¤t.countCards('he')>0; + }).set('ai',function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(att>=0) return 0; + if(!target.hasCard(function(card){ + return get.value(card,target)<=0; + },'he')) return -att/Math.sqrt(target.countCards('he')); + return 0; + }); + 'step 7' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xinxingluan',target); + target.chooseToDiscard('he','弃置一张点数为6的牌,否则交给'+get.translation(player)+'一张牌',function(card){ + return get.number(card)==6; + }).ai=(card)=>(8-get.value(card)); + } + 'step 8' + if(!result.bool){ + target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌'); + } + else event.finish(); + 'step 9' + if(result.bool) player.gain(result.cards,target,'giveAuto'); + }, + }, + rexingluan:{ + audio:'xinfu_xingluan', + usable:1, + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return event.targets&&event.targets.length==1&&typeof get.number(event.card,false)=='number'&&player.isPhaseUsing(); + }, + direct:true, + content:function(){ + 'step 0' + var str='',num=get.number(trigger.card,false),nums=get.strNumber(num); + var list=game.filterPlayer(function(current){ + return current.hasCard(function(card){ + return get.number(card)==num&&lib.filter.canBeGained(card,current,player); + },'ej'); + }); + if(list.length){ + str+='获得一名角色装备区或判定区内的一张点数为'+nums+'的牌,或直接从牌堆中获得一张点数为'+nums+'的牌'; + player.chooseTarget(get.prompt('rexingluan'),str,[0,1],function(card,player,target){ + return _status.event.targets.contains(target); + }).set('targets',list).set('ai',function(target){ + if(!target) return 1; + var player=_status.event.player,num=get.number(_status.event.getTrigger().card,false),att=-get.sgn(get.attitude(player,target)); + if(target.hasCard(function(card){ + return get.number(card)==num&&get.effect(target,card,target,player)<0; + },'j')) return 1.2*Math.abs(get.attitude(player,target)); + if(target.hasCard(function(card){ + return get.number(card)==num&&get.sgn(get.value(card,target)+0.1)==att; + },'e')) return Math.abs(get.attitude(player,target)); + return 0; + }); + } + else{ + player.chooseBool(get.prompt('rexingluan'),'从牌堆中获得一张点数为'+nums+'的牌').ai=()=>true; + } + 'step 1' + if(result.bool){ + if(result.targets&&result.targets.length){ + var target=result.targets[0]; + player.logSkill('rexingluan',target); + player.gainPlayerCard(target,'ej',true).set('num',get.number(trigger.card,false)).set('filterButton',function(button){ + return get.number(button.link)==_status.event.num; + }); + } + else{ + player.logSkill('rexingluan'); + var num=get.number(trigger.card,false),card=get.cardPile2(function(i){ + return get.number(i,false)==num; + }); + if(card) player.gain(card,'gain2'); + } + } + }, + }, + //吕玲绮 + guowu:{ + trigger:{player:'phaseUseBegin'}, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + var hs=player.getCards('h'); + player.showCards(hs,get.translation(player)+'发动了【帼舞】'); + var list=[]; + for(var i of hs){ + list.add(get.type2(i,player)); + if(list.length>=3) break; + } + if(list.length>=1){ + var card=get.discardPile(function(i){ + return i.name=='sha'; + }); + if(card) player.gain(card,'gain2'); + } + if(list.length>=2) player.addTempSkill('guowu_dist','phaseUseAfter'); + if(list.length>=3) player.addTempSkill('guowu_add','phaseUseAfter'); + }, + subSkill:{ + dist:{ + charlotte:true, + mod:{targetInRange:()=>true}, + }, + add:{ + charlotte:true, + trigger:{player:'useCard1'}, + direct:true, + filter:function(event,player){ + var info=get.info(event.card,false); + if(info.allowMultiple==false) return false; + if(event.card.name!='sha'&&info.type!='trick') return false; + if(event.targets&&!info.multitarget){ + if(game.hasPlayer(function(current){ + return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current); + })){ + return true; + } + } + return false; + }, + content:function(){ + 'step 0' + var num=game.countPlayer(function(current){ + return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(trigger.card,player,current)&&lib.filter.targetInRange(trigger.card,player,current); + }); + player.chooseTarget('帼舞:是否为'+get.translation(trigger.card)+'增加'+(num>1?'至多两个':'一个')+'目标?',[1,Math.min(2,num)],function(card,player,target){ + var trigger=_status.event.getTrigger(); + var card=trigger.card; + return !trigger.targets.contains(target)&&lib.filter.targetEnabled2(card,player,target)&&lib.filter.targetInRange(card,player,target); + }).set('ai',function(target){ + var player=_status.event.player; + var card=_status.event.getTrigger().card; + return get.effect(target,card,player,player); + }); + 'step 1' + if(result.bool){ + if(player!=game.me&&!player.isOnline()) game.delayx(); + } + else event.finish(); + 'step 2' + var targets=result.targets.sortBySeat(); + player.logSkill('guowu_add',targets); + trigger.targets.addArray(targets); + }, + }, + }, + }, + zhuangrong:{ + derivation:['llqshenwei','wushuang'], + trigger:{global:'phaseEnd'}, + forced:true, + juexingji:true, + skillAnimation:true, + animationColor:'gray', + filter:function(event,player){ + return player.hp==1||player.countCards('h')==1; + }, + content:function(){ + 'step 0' + player.awakenSkill('zhuangrong'); + player.loseMaxHp(); + 'step 1' + if(player.maxHp>player.hp) player.recover(player.maxHp-player.hp); + 'step 2' + player.drawTo(Math.min(5,player.maxHp)); + player.addSkillLog('llqshenwei'); + player.addSkillLog('wushuang'); + }, + }, + llqshenwei:{ + audio:2, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:(event)=>!event.numFixed, + content:function(){ + trigger.num+=2; + }, + mod:{ + maxHandcard:(player,num)=>num+2, + }, + }, + //杜夫人 + yise:{ + audio:2, + trigger:{global:'gainAfter'}, + filter:function(event,player){ + if(player==event.player||!event.player.isIn()) return false; + var evt=event.getl(player); + if(!evt||!evt.cards2.length) return false; + if(event.player.isDamaged()) return true; + for(var i of evt.cards2){ + var color=get.color(i,player); + if(color=='black') return true; + } + return false; + }, + direct:true, + content:function(){ + 'step 0' + var cards=trigger.getl(player).cards2; + for(var i of cards){ + event[get.color(i,player)]=true; + if(event.red&&event.black) break; + } + if(event.red&&trigger.player.isDamaged()){ + player.chooseBool(get.prompt('yise',trigger.player),'令'+get.translation(trigger.player)+'回复1点体力').set('ai',()=>get.recoverEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0); + } + 'step 1' + if(event.black||event.red&&result.bool) player.logSkill('yise',trigger.player); + if(event.red&&result.bool) trigger.player.recover(); + if(event.black){ + trigger.player.addMark('yise_damage',1,false); + trigger.player.addSkill('yise_damage'); + } + }, + subSkill:{ + damage:{ + trigger:{player:'damageBegin1'}, + forced:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'&&event.getParent().name=='sha'; + }, + content:function(){ + trigger.num+=player.countMark('yise_damage'); + player.removeSkill('yise_damage'); + }, + intro:{ + content:'下一次受到杀的伤害+#', + }, + }, + }, + }, + shunshi:{ + trigger:{player:['damageEnd','phaseZhunbeiBegin']}, + direct:true, + filter:function(event,player){ + return (event.name!='damage'||player!=_status.currentPhase)&&player.countCards('he')>0&&game.hasPlayer(function(current){ + return current!=player&¤t!=event.source; + }); + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt('shunshi'), + prompt2:'将一张牌交给一名其他角色,并获得+1效果', + filterCard:true, + filterTarget:function(card,player,target){ + return target!=player&&target!=_status.event.source; + }, + position:'he', + source:trigger.source, + ai1:function(card){ + var player=_status.event.player; + if(player.hasSkill('yise')){ + if(get.color(card,player)=='red'&&game.hasPlayer(function(current){ + return current!=player&¤t!=_status.event.source&¤t.isDamaged()&&get.recoverEffect(current,player,player)>0; + })) return 10-get.value(card); + if(get.color(card,player)=='black') return 4-get.value(card); + } + return 8-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player,card=ui.selected.cards[0]; + if(player.hasSkill('yise')){ + if(get.color(card)=='red'&&target.isDamaged()) return 2*get.recoverEffect(target,player,player); + if(get.color(card)=='black') return -get.attitude(player,target); + } + if(get.value(card,target)<0) return -get.attitude(player,target); + if(get.value(card,target)<1) return 0.01*-get.attitude(player,target); + return Math.max(1,get.value(card,target)-get.value(card,player))*get.attitude(player,target); + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('shunshi',target); + target.gain(result.cards,player,'giveAuto'); + player.addMark('shunshi_mark',1,false); + player.addTempSkill('shunshi_mark',{player:'phaseEnd'}); + } + }, + subSkill:{ + mark:{ + onremove:true, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + charlotte:true, + popup:false, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num+=player.countMark('shunshi_mark'); + }, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('shunshi_mark'); + }, + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+player.countMark('shunshi_mark'); + }, + }, + intro:{ + content:'拥有#层效果', + }, + }, + }, + }, cuijian:{ audio:2, enable:'phaseUse', @@ -170,11 +590,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'修改了技能','#g【摧坚】'); } else{ - if(trigger.card.name=='wuxie') trigger.directHit.addArray(game.players); - else{ - if(typeof trigger.baseDamage!='number') trigger.baseDamage=1; - trigger.baseDamage++; - } + if(trigger.card.name=='wuxie') trigger.directHit.addArray(game.players); + else{ + if(typeof trigger.baseDamage!='number') trigger.baseDamage=1; + trigger.baseDamage++; + } } }, }, @@ -8279,7 +8699,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseJieshuBegin'}, frequent:true, filter:function(event,player){ - if(player.getHistory('skipped').contains('phaseUse')) return false; + //if(player.getHistory('skipped').contains('phaseUse')) return false; return player.getHistory('useCard',function(evt){ if(evt.targets&&evt.targets.length&&evt.isPhaseUsing()){ var targets=evt.targets.slice(0); @@ -8944,7 +9364,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - "xinfu_zhenxing":{ + xinfu_zhenxing:{ audio:2, trigger:{ player:["damageEnd","phaseJieshuBegin"], @@ -9609,6 +10029,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luyusheng:'陆郁生(?年-?),三国时期吴国官员陆绩之女。陆郁生的父亲陆绩是吴郡公认的才子,又是当时吴郡陆氏的领袖。陆绩赴任担任郁林太守,遂取此名。陆郁生年少的时候就定下坚贞的志向。建安二十四年(219年),陆绩早亡,她与两个兄弟陆宏、陆睿当时都只有几岁,一起返回吴县,被他们的从兄陆瑁接回抚养。13周岁的陆郁生嫁给同郡出身的张白为妻。出嫁3个月后,张白因为其兄张温一族的案件遭到连坐,被处以流刑,后死于流放地,陆郁生成为了寡妇,其后公开宣言不再改嫁,困难于生计但拒绝了所有提亲,在艰苦中从未停止服侍、照顾张白的姐妹。事情传到朝廷,皇帝褒奖陆郁生,号其为“义姑”。她的表侄姚信在文集中称赞她的义举。', dongxie:'董卓之女,牛辅之妻。在《三国群英传》中名为董宜,在电视剧《三国群英会之吕布与貂蝉》中名为董媛。', caoanmin:'曹安民(?-197年),沛国谯县(今安徽亳州)人,字安民。东汉时期人物,曹德之子,曹操之侄,曹昂的堂兄弟,曹丕的堂兄,死于宛城之战。按曹丕《典论》记载的“亡兄孝廉子脩、从兄安民遇害。”等情况来看,安民应该是曹操侄子错不了,曹丕是他们属于兄弟关系肯定不会弄错。另外从典论的记载来看安民是和子脩并提的,子脩是曹昂的字,安民则肯定也是字不是名,至于三国志中记载则应取自曹丕之《典论》但陈寿又不知曹安民其名,故写为“长子昂、弟子安民”。', + dufuren:'杜夫人(生卒年不详),东汉末年至三国时人。有异色,原为吕布将秦宜禄之妻,生子秦朗。后为曹操纳为妾,又生曹林、曹衮、金乡公主。', + lvlingqi:'吕玲绮,虚拟人物,源于日本光荣株式会社(现光荣特库摩公司)旗下游戏《真·三国无双》系列,初次登场于《真三国无双7:猛将传》。吕布的女儿,寂寥而威风凛凛的战姬,发挥着不亚于父亲的武艺,非常勇敢地身先士卒立于前线。虽然有着能够直面困难的坚强意志,却由于过去的经历而有着非常害怕孤独的一面。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -9759,7 +10181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rewenji:'问计', rewenji_info:'出牌阶段开始时,你可以令一名其他角色交给你一张牌。你于本回合内使用与该牌类型相同的牌时不能被其他角色响应。', sptunjiang:'屯江', - sptunjiang_info:'结束阶段,若你未跳过本回合的出牌阶段,且你于本回合出牌阶段内未使用牌指定过其他角色为目标,则你可以摸X张牌(X为全场势力数)。', + sptunjiang_info:'结束阶段,若你未于本回合的出牌阶段内使用牌指定过其他角色为目标,则你可以摸X张牌(X为全场势力数)。', zongkui:'纵傀', zongkui_mark:'纵傀', zongkui_mark_bg:'傀', @@ -10204,6 +10626,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cuijian_info:'出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中:有【闪】,其将装备区内的防具牌和所有【闪】交给你,然后你交给其等量的牌;没有【闪】,你弃置一张手牌。', tongyuan:'同援', tongyuan_info:'锁定技。①当你于回合外使用【无懈可击】时,你将〖摧坚〗中的“弃置一张手牌”改为“摸一张牌”;②当你于回合外使用【桃】时,你将〖摧坚〗中的“等量的牌”改为“一张牌”。③当你使用【无懈可击】/【桃】时,若你已发动过〖摧坚①〗和〖摧坚②〗,则此牌不可被响应/回复值+1。', + dufuren:'杜夫人', + yise:'异色', + yise_info:'其他角色获得你的牌后,若这些牌中:有红色牌,你可令其回复1点体力;有黑色牌,其下次受到【杀】造成的伤害时,此伤害+1。', + shunshi:'顺世', + shunshi_info:'准备阶段开始时,或当你受到伤害后,你可将一张牌交给一名其他角色并获得如下效果直到你的回合结束:摸牌阶段的额定摸牌数+1,使用【杀】的次数上限+1,手牌上限+1。', + lvlingqi:'吕玲绮', + guowu:'帼舞', + guowu_info:'出牌阶段开始时,你可以展示全部手牌,根据你展示的类型数,你获得对应效果:至少一类,从弃牌堆获得一张【杀】;至少两类,此阶段使用牌无距离限制;至少三类,此阶段使用【杀】或普通锦囊牌可以多指定两个目标。', + zhuangrong:'妆戎', + zhuangrong_info:'觉醒技,一名角色的回合结束时,若你的体力值或手牌数为1,你减1点体力上限并回复体力至上限,将手牌摸至体力上限,然后获得〖神威〗和〖无双〗。', + llqshenwei:'神威', + llqshenwei_info:'锁定技,摸牌阶段开始时,你令额定摸牌数+2;你的手牌上限+2。', + rexingluan:'兴乱', + rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。', + xinxingluan:'兴乱', + xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸一张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/standard.js b/character/standard.js index 381925d15..e4cf81cde 100755 --- a/character/standard.js +++ b/character/standard.js @@ -2448,7 +2448,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wushuang:{ shaRelated:true, audio:2, - audioname:['re_lvbu','shen_lvbu'], + audioname:['re_lvbu','shen_lvbu','lvlingqi'], forced:true, locked:true, group:['wushuang1','wushuang2'], @@ -2456,7 +2456,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, wushuang1:{ audio:'wushuang', - audioname:['re_lvbu','shen_lvbu'], + audioname:['re_lvbu','shen_lvbu','lvlingqi'], trigger:{player:'useCardToPlayered'}, forced:true, filter:function(event,player){ @@ -2484,7 +2484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, wushuang2:{ audio:'wushuang', - audioname:['re_lvbu','shen_lvbu'], + audioname:['re_lvbu','shen_lvbu','lvlingqi'], trigger:{player:'useCardToPlayered',target:'useCardToTargeted'}, forced:true, logTarget:function(trigger,player){ diff --git a/character/yijiang.js b/character/yijiang.js index 774305cdb..f3781535d 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -9508,6 +9508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{ order:1, + combo:'quanji', result:{ player:1, } diff --git a/character/yingbian.js b/character/yingbian.js index 4dcfd8fcd..3a2a14384 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -9,7 +9,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhongyan:['female','jin',3,['bolan','yifa']], weiguan:['male','jin',3,['zhongyun','shenpin']], cheliji:['male','qun',4,['chexuan','qiangshou']], - simazhou:['male','jin',4,['caiwang','naxiang']], + simazhou:['male','jin',4,['recaiwang','naxiang']], ol_lisu:['male','qun',3,['qiaoyan','xianzhu']], jin_yanghuiyu:['female','jin',3,['huirong','ciwei','caiyuan'],['hiddenSkill']], shibao:['male','jin',4,['zhuosheng']], @@ -31,6 +31,81 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + recaiwang:{ + audio:'caiwang', + inherit:'caiwang', + group:['recaiwang_hand','recaiwang_equip','recaiwang_judge'], + }, + recaiwang_hand:{ + audio:'caiwang', + enable:['chooseToUse','chooseToRespond'], + viewAsFilter:function(player){ + var js=player.getCards('h'); + return js.length==1&&game.checkMod(js[0],player,'unchanged','cardEnabled2',player); + }, + selectCard:-1, + filterCard:true, + position:'h', + prompt:'将全部手牌当做【闪】使用', + viewAs:{name:'shan'}, + check:(card)=>10-get.value(card), + ai:{ + order:1, + respondShan:true, + skillTagFilter:function(player){ + return player.countCards('h')==1; + }, + }, + }, + recaiwang_equip:{ + audio:'caiwang', + enable:['chooseToUse','chooseToRespond'], + viewAsFilter:function(player){ + var js=player.getCards('e'); + return js.length==1&&game.checkMod(js[0],player,'unchanged','cardEnabled2',player); + }, + selectCard:-1, + filterCard:true, + check:(card)=>9-get.value(card), + position:'e', + prompt:'将装备区的牌当做【无懈可击】使用', + viewAs:{name:'wuxie'}, + ai:{ + order:1, + }, + }, + recaiwang_judge:{ + audio:'caiwang', + enable:['chooseToUse','chooseToRespond'], + viewAsFilter:function(player){ + var js=player.getCards('j'); + return js.length==1&&game.checkMod(js[0],player,'unchanged','cardEnabled2',player); + }, + selectCard:-1, + filterCard:true, + position:'j', + prompt:'将判定区的牌当做【杀】使用', + viewAs:{name:'sha'}, + check:(card)=>1, + locked:false, + ai:{ + order:10, + respondSha:true, + skillTagFilter:function(player){ + return player.countCards('j')==1; + }, + effect:{ + target:function(card,player,target,current){ + if(card&&(card.name=='shandian'||card.name=='fulei')&&player==target&&!target.countCards('j')&&target.isPhaseUsing()&&target.hasValueTarget({name:'sha'},null,true)) return [1,2]; + }, + }, + }, + mod:{ + aiOrder:function(player,card,num){ + if(card.name=='shandian'||card.name=='fulei') return num+3; + }, + }, + }, zhaosong:{ trigger:{global:'phaseUseBegin'}, logTarget:'player', @@ -991,9 +1066,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ check:function(event,player){ return get.attitude(player,lib.skill.caiwang.logTarget(event,player))<=0; }, + popup:false, content:function(){ + 'step 0' if(player!=game.me&&!player.isOnline()) game.delayx(); + 'step 1' var target=lib.skill.caiwang.logTarget(trigger,player); + player.logSkill(event.name,target); player[player.getStorage('naxiang2').contains(target)?'gainPlayerCard':'discardPlayerCard'](target,'he',true); }, }, @@ -2532,7 +2611,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caiwang_info:'当你使用或打出牌响应其他角色使用的牌,或其他角色使用或打出牌响应你使用的牌后,若这两张牌颜色相同,则你可以弃置对方的一张牌。', naxiang:'纳降', naxiang2:'纳降', - naxiang_info:'锁定技,当你受到其他角色造成的伤害后,或你对其他角色造成伤害后,你对其发动〖才望〗时的“弃置”改为“获得”直到你的下回合开始。', + naxiang_info:'锁定技,当你受到其他角色造成的伤害后,或你对其他角色造成伤害后,你对其发动〖才望①〗时的“弃置”改为“获得”直到你的下回合开始。', cheliji:'彻里吉', chexuan:'车悬', chexuan_info:'出牌阶段,若你的装备区里没有宝物牌,你可弃置一张黑色牌,选择一张【舆】置入你的装备区;当你失去装备区里的宝物牌后,你可进行判定,若结果为黑色,将一张随机的【舆】置入你的装备区。', @@ -2570,6 +2649,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhaosong_info:'一名其他角色于其出牌阶段开始时,若其没有标记,你可令其正面向上交给你一张手牌,然后根据此牌的类型,令该角色获得对应的标记:锦囊牌,“诔”标记;装备牌,“赋”标记;基本牌,“颂”标记。进入濒死时,你可弃置"诔",减少一点体力上限,回复至1体力并摸1张牌;出牌阶段开始时,你可弃置“赋”,弃置一名角色区域内的一张牌,然后可令其摸一张牌;你使用仅指定一个目标的【杀】时,可弃置“颂”为此【杀】额外选择至多两个目标,然后若此【杀】造成的伤害小于2,你失去1点体力。', lisi:'离思', lisi_info:'每当你于回合外使用牌的置入弃牌堆时,你可将其交给一名手牌数不大于你的其他角色。', + recaiwang:'才望', + recaiwang_info:'①当你使用或打出牌响应其他角色使用的牌,或其他角色使用或打出牌响应你使用的牌后,若这两张牌颜色相同,则你可以弃置对方的一张牌。②若你的手牌数为1,则你可以将该手牌当做【闪】使用或打出。③若你的装备区牌数为1,则你可以将该装备当做【无懈可击】使用或打出。④若你的判定区牌数为1,则你可以将该延时锦囊牌当做【杀】使用或打出。', + recaiwang_hand:'才望', + recaiwang_equip:'才望', + recaiwang_judge:'才望', yingbian_pack1:'文德武备·理', yingbian_pack2:'文德武备·备', diff --git a/game/asset.js b/game/asset.js index 54b603e4f..b5522c909 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.9.3.4', + 'v1.9.110.9.3.5', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -798,6 +798,9 @@ window.noname_asset_list=[ 'audio/die/re_lusu.mp3', 'audio/die/wuban.mp3', 'audio/die/yuejiu.mp3', + 'audio/die/dufuren.mp3', + 'audio/die/lvlingqi.mp3', + 'audio/die/ol_wangrong.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3594,6 +3597,20 @@ window.noname_asset_list=[ 'audio/skill/reweimu2.mp3', 'audio/skill/wansha_re_jiaxu1.mp3', 'audio/skill/wansha_re_jiaxu2.mp3', + 'audio/skill/guowu1.mp3', + 'audio/skill/guowu2.mp3', + 'audio/skill/olfengzi1.mp3', + 'audio/skill/olfengzi2.mp3', + 'audio/skill/olfusong1.mp3', + 'audio/skill/olfusong2.mp3', + 'audio/skill/oljizhan1.mp3', + 'audio/skill/oljizhan2.mp3', + 'audio/skill/shunshi1.mp3', + 'audio/skill/shunshi2.mp3', + 'audio/skill/yise1.mp3', + 'audio/skill/yise2.mp3', + 'audio/skill/zhuangrong1.mp3', + 'audio/skill/zhuangrong2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4539,6 +4556,9 @@ window.noname_asset_list=[ 'image/character/xin_caozhen.jpg', 'image/character/xin_sunluban.jpg', 'image/character/ol_dengzhi.jpg', + 'image/character/dufuren.jpg', + 'image/character/lvlingqi.jpg', + 'image/character/ol_wangrong.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index ba491f74f..e3e00e282 100644 --- a/game/game.js +++ b/game/game.js @@ -51721,16 +51721,21 @@ return false; }; if(create!='discardPile'){ + var num=get.rand(0,ui.cardPile.childNodes.length-1); for(var i=0;i=ui.cardPile.childNodes.length) j-=ui.cardPile.childNodes.length; + if(filter(ui.cardPile.childNodes[j])){ + return ui.cardPile.childNodes[j]; } } } if(create!='cardPile'){ for(var i=0;i=ui.discardPile.childNodes.length) j-=ui.discardPile.childNodes.length; + if(filter(ui.discardPile.childNodes[j])){ + return ui.discardPile.childNodes[j]; } } } diff --git a/game/update.js b/game/update.js index d536c5f8a..9564bdfa0 100644 --- a/game/update.js +++ b/game/update.js @@ -1,8 +1,9 @@ window.noname_update={ - version:'1.9.110.9.3.4', - update:'1.9.110.9.3.3', + version:'1.9.110.9.3.5', + update:'1.9.110.9.3.4', changeLog:[ - '界鲁肃、孙登、郭皇后、薛综、杜畿技能修改', + '杜夫人、吕玲绮、OL王荣', + '司马伷,樊稠技能修改', 'bug修复', ], files:[ @@ -19,7 +20,7 @@ window.noname_update={ //'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', + 'character/diy.js', //'character/extra.js', //'character/hearth.js', //'character/gujian.js', @@ -36,11 +37,11 @@ window.noname_update={ 'character/sp.js', 'character/sp2.js', //'character/tw.js', - //'character/standard.js', + 'character/standard.js', //'character/swd.js', //'character/xianjian.js', - 'character/xinghuoliaoyuan.js', - //'character/yingbian.js', + //'character/xinghuoliaoyuan.js', + 'character/yingbian.js', 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', @@ -49,18 +50,18 @@ window.noname_update={ //'layout/default/menu.css', //'layout/nova/layout.css', //'layout/mobile/equip.css', - 'mode/boss.js', - //'mode/brawl.js', + //'mode/boss.js', + 'mode/brawl.js', //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', - //'game/game.js', + 'game/game.js', //'game/keyWords.js', //'game/NoSleep.js', //'game/config.js', diff --git a/image/character/dufuren.jpg b/image/character/dufuren.jpg new file mode 100644 index 000000000..e8caa1493 Binary files /dev/null and b/image/character/dufuren.jpg differ diff --git a/image/character/lvlingqi.jpg b/image/character/lvlingqi.jpg new file mode 100644 index 000000000..d459a02a8 Binary files /dev/null and b/image/character/lvlingqi.jpg differ diff --git a/image/character/ol_wangrong.jpg b/image/character/ol_wangrong.jpg new file mode 100644 index 000000000..0f9ccac3c Binary files /dev/null and b/image/character/ol_wangrong.jpg differ diff --git a/mode/brawl.js b/mode/brawl.js index 78b304260..3cc59d466 100644 --- a/mode/brawl.js +++ b/mode/brawl.js @@ -468,7 +468,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ for(var j=0;j