diff --git a/audio/die/ol_zhouqun.mp3 b/audio/die/ol_zhouqun.mp3 new file mode 100644 index 000000000..8e4f727f3 Binary files /dev/null and b/audio/die/ol_zhouqun.mp3 differ diff --git a/audio/skill/olchenshuo1.mp3 b/audio/skill/olchenshuo1.mp3 new file mode 100644 index 000000000..449af0060 Binary files /dev/null and b/audio/skill/olchenshuo1.mp3 differ diff --git a/audio/skill/olchenshuo2.mp3 b/audio/skill/olchenshuo2.mp3 new file mode 100644 index 000000000..f631f6955 Binary files /dev/null and b/audio/skill/olchenshuo2.mp3 differ diff --git a/audio/skill/oltianhou1.mp3 b/audio/skill/oltianhou1.mp3 new file mode 100644 index 000000000..fdd809e56 Binary files /dev/null and b/audio/skill/oltianhou1.mp3 differ diff --git a/audio/skill/oltianhou2.mp3 b/audio/skill/oltianhou2.mp3 new file mode 100644 index 000000000..17f9e9cb4 Binary files /dev/null and b/audio/skill/oltianhou2.mp3 differ diff --git a/audio/skill/oltianhou_club.mp3 b/audio/skill/oltianhou_club.mp3 new file mode 100644 index 000000000..14857360e Binary files /dev/null and b/audio/skill/oltianhou_club.mp3 differ diff --git a/audio/skill/oltianhou_diamond.mp3 b/audio/skill/oltianhou_diamond.mp3 new file mode 100644 index 000000000..a91f6d5c8 Binary files /dev/null and b/audio/skill/oltianhou_diamond.mp3 differ diff --git a/audio/skill/oltianhou_heart.mp3 b/audio/skill/oltianhou_heart.mp3 new file mode 100644 index 000000000..2d38f606a Binary files /dev/null and b/audio/skill/oltianhou_heart.mp3 differ diff --git a/audio/skill/oltianhou_spade.mp3 b/audio/skill/oltianhou_spade.mp3 new file mode 100644 index 000000000..8b23adffe Binary files /dev/null and b/audio/skill/oltianhou_spade.mp3 differ diff --git a/character/clan.js b/character/clan.js index 27ef90ec8..985ec60c7 100644 --- a/character/clan.js +++ b/character/clan.js @@ -567,8 +567,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!targets.length){ var num=lib.skill.clanguangu_backup.num; var cards=get.cards(num); - game.cardsGotoOrdering(cards); - event.cards=cards; + event.cards=cards.slice(0); + while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); + game.updateRoundNumber(); event.goto(2); } else{ @@ -644,11 +645,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ next.set('owner',owner); } } - 'step 4' - if(!targets.length){ - while(cards.length) ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); - game.updateRoundNumber(); - } }, ai:{ order:10, diff --git a/character/rank.js b/character/rank.js index 276fb0fa6..6828e867f 100644 --- a/character/rank.js +++ b/character/rank.js @@ -30,6 +30,8 @@ window.noname_character_rank={ 'wanglang', 'caojinyu', 'zhangmancheng', + 'wu_zhugeliang', + 'sunlingluan', 'key_mio', 'key_midori', 'key_yuri', @@ -120,7 +122,6 @@ window.noname_character_rank={ 'key_yuuki', 'db_key_liyingxia', 'key_kiyu', - 'wu_zhugeliang', ], a:[ 'diy_zaozhirenjun', @@ -596,6 +597,7 @@ window.noname_character_rank={ 'zhoubuyi', 'jsrg_sunce', 're_caorui', + 'ol_zhouqun', ], bp:[ 'chess_diaochan', @@ -1686,6 +1688,8 @@ window.noname_character_rank={ 'yue_caiwenji', 'clan_zhongyan', 'shen_dianwei', + 'sunlingluan', + 'ol_zhouqun', 'key_tomoya', 'key_masato', 'key_shiorimiyuki', @@ -1926,6 +1930,8 @@ window.noname_character_rank={ 'zhanghua', 'lushi', 'clan_zhonghui', + 'zhoubuyi', + 'dc_wangjun', 'key_kano', 'key_haruko', 'key_akiko', @@ -2457,6 +2463,7 @@ window.noname_character_rank={ 'zerong', 'std_panfeng', 're_caochong', + 're_caorui', ], } }; diff --git a/character/sp.js b/character/sp.js index 73c531d10..c8e91f0bd 100755 --- a/character/sp.js +++ b/character/sp.js @@ -765,6 +765,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, spade:{ + audio:true, mark:true, marktext:'雨', intro:{ @@ -807,6 +808,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, miehuo:{ + audio:'oltianhou_spade', trigger:{global:'damageBegin2'}, forced:true, logTarget:'source', @@ -818,6 +820,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, heart:{ + audio:true, mark:true, marktext:'暑', intro:{ @@ -834,6 +837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, club:{ + audio:true, mark:true, marktext:'霜', intro:{ @@ -850,6 +854,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, diamond:{ + audio:true, mark:true, marktext:'雾', intro:{ @@ -1035,7 +1040,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 2' if(player.countCards('h')%2==0){ player.draw(); - player.chooseTarget('犷骜:令此杀对其任意个目标无效',[1,Infinity],true,(card,player,target)=>{ + player.chooseTarget('犷骜:令此杀对其任意个目标无效',[1,Infinity],(card,player,target)=>{ return _status.event.targetsx.contains(target); }).set('ai',target=>{ return 1-get.effect(target,_status.event.getTrigger().card,_status.event.player,_status.event.player); @@ -6240,7 +6245,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return; } player.chooseTarget(true,'将'+get.translation(card)+'置于一名角色的装备区内',function(card,player,target){ - return target.canEquip(_status.event.card); + return target.canEquip(_status.event.card,true); }).set('card',card).set('ai',function(target){ var card=_status.event.getParent().card,player=_status.event.player; return get.effect(target,card,player,player); @@ -23999,7 +24004,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olzhenying_info:'出牌阶段限两次。你可以选择一名手牌数不大于你的其他角色,你与其同时将手牌摸或弃置至至多两张。然后你与其中手牌数较少的角色视为对另一名角色使用一张【决斗】。', ol_wenqin:'文钦', olguangao:'犷骜', - olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(使用者不为你则有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效。', + olguangao_info:'当你/其他角色使用【杀】时,你/该角色可以额外指定一个目标/你为目标(使用者不为你则有距离限制)。然后若你的手牌数为偶数,你摸一张牌并令此牌对任意目标无效(可不选)。', olhuiqi:'彗企', olhuiqi_info:'觉醒技。一名角色回合结束后,若仅有三名角色于此回合成为过牌的目标,你获得〖偕举〗并获得一个额外的回合。', olxieju:'偕举', diff --git a/character/tw.js b/character/tw.js index 5c80548ca..1a56ef2a0 100644 --- a/character/tw.js +++ b/character/tw.js @@ -11693,14 +11693,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ charlotte:true, filter:function(event,player){ for(var i of player.getStorage('twjuezhu_restore')){ - if(i[0]==event.player&&player.hasEnabledSlot(i[1])) return true; + if(i[0]==event.player&&player.hasDisabledSlot(i[1])) return true; } return false; }, content:function(){ var list=[]; for(var i of player.getStorage('twjuezhu_restore')){ - if(i[0]==trigger.player&&player.hasEnabledSlot(i[1])) list.push(i[1]); + if(i[0]==trigger.player&&player.hasDisabledSlot(i[1])) list.push(i[1]); } player.enableEquip(list); }, diff --git a/character/xianding.js b/character/xianding.js index 5c078f9e2..abc580710 100644 --- a/character/xianding.js +++ b/character/xianding.js @@ -147,6 +147,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addTempSkill('dcpandi_effect','phaseUseAfter'); } }, + ai:{ + threaten:4, + order:12, + result:{ + player:function(player,target){ + return player.getCards('hs').reduce(function(eff,card){ + return Math.max(eff,lib.skill.dcpandi.getUseValue(card,target,player)-lib.skill.dcpandi.getUseValue(card,player,player)) + },0) + }, + }, + }, + getUseValue:function(card,player,viewer){ + if(typeof(card)=='string'){ + card={name:card,isCard:true}; + } + var targets=game.filterPlayer(); + var value=[]; + var min=0; + var info=get.info(card); + if(!info||info.notarget) return 0; + var range; + var select=get.copy(info.selectTarget); + if(select==undefined){ + if(info.filterTarget==undefined) return true; + 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,player); + if(info.singleCard) range=[1,1]; + game.checkMod(card,player,range,'selectTarget',player); + if(!range) return 0; + + for(var i=0;i1){ + allcards=allcards.concat(list[1][1]); + } + var canchoose=allcards.slice(0); var player=_status.event.player; var getv=function(button){ if(button.name=='sha'&&allcards.filter(function(card){ diff --git a/game/game.js b/game/game.js index 82c9716c7..7ffcdf8fb 100644 --- a/game/game.js +++ b/game/game.js @@ -11854,9 +11854,12 @@ }, cardsDiscard:function(){ game.getGlobalHistory().cardMove.push(event); + var withPile=false; for(var i=0;i6){