diff --git a/audio/die/fanyufeng.mp3 b/audio/die/fanyufeng.mp3 new file mode 100644 index 000000000..53d338c9d Binary files /dev/null and b/audio/die/fanyufeng.mp3 differ diff --git a/audio/die/ol_lisu.mp3 b/audio/die/ol_lisu.mp3 new file mode 100644 index 000000000..ecb4cdd10 Binary files /dev/null and b/audio/die/ol_lisu.mp3 differ diff --git a/audio/skill.TXT b/audio/skill.TXT new file mode 100644 index 000000000..1edac16b8 --- /dev/null +++ b/audio/skill.TXT @@ -0,0 +1,8 @@ +bazhan1.mp3 +bazhan2.mp3 +jiaoying1.mp3 +jiaoying2.mp3 +qiaoyan1.mp3 +qiaoyan2.mp3 +xianzhu1.mp3 +xianzhu2.mp3 diff --git a/audio/skill/bazhan1.mp3 b/audio/skill/bazhan1.mp3 new file mode 100644 index 000000000..73f7b49b0 Binary files /dev/null and b/audio/skill/bazhan1.mp3 differ diff --git a/audio/skill/bazhan2.mp3 b/audio/skill/bazhan2.mp3 new file mode 100644 index 000000000..95fac9437 Binary files /dev/null and b/audio/skill/bazhan2.mp3 differ diff --git a/audio/skill/jiaoying1.mp3 b/audio/skill/jiaoying1.mp3 new file mode 100644 index 000000000..f9a5dafd1 Binary files /dev/null and b/audio/skill/jiaoying1.mp3 differ diff --git a/audio/skill/jiaoying2.mp3 b/audio/skill/jiaoying2.mp3 new file mode 100644 index 000000000..9ce4e8705 Binary files /dev/null and b/audio/skill/jiaoying2.mp3 differ diff --git a/audio/skill/qiaoyan1.mp3 b/audio/skill/qiaoyan1.mp3 new file mode 100644 index 000000000..cc8224464 Binary files /dev/null and b/audio/skill/qiaoyan1.mp3 differ diff --git a/audio/skill/qiaoyan2.mp3 b/audio/skill/qiaoyan2.mp3 new file mode 100644 index 000000000..1fabc1e3d Binary files /dev/null and b/audio/skill/qiaoyan2.mp3 differ diff --git a/audio/skill/xianzhu1.mp3 b/audio/skill/xianzhu1.mp3 new file mode 100644 index 000000000..391a0af83 Binary files /dev/null and b/audio/skill/xianzhu1.mp3 differ diff --git a/audio/skill/xianzhu2.mp3 b/audio/skill/xianzhu2.mp3 new file mode 100644 index 000000000..79d64682b Binary files /dev/null and b/audio/skill/xianzhu2.mp3 differ diff --git a/card/guozhan.js b/card/guozhan.js index 954300f65..ace90cb9a 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -17,9 +17,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ globalFrom:-1, globalTo:+1, }, - onEquip:function(){ - var cards=player.getCards('e',{subtype:['equip3','equip4']}); - if(cards.length) player.discard(cards); + customSwap:function(card){ + var type=get.subtype(card,false); + return type=='equip3'||type=='equip4'||type=='equip6'; }, skills:['liulongcanjia'], ai:{ diff --git a/character/rank.js b/character/rank.js index e9fd5609d..2dd41db9d 100644 --- a/character/rank.js +++ b/character/rank.js @@ -630,6 +630,7 @@ window.noname_character_rank={ 'hanfu', 're_quyi', 'zhanghuyuechen', + 'fanyufeng', 'key_kengo', 'key_riki', 'key_hinata', @@ -649,6 +650,7 @@ window.noname_character_rank={ 're_fuhuanghou', 're_gongsunyuan', 're_caozhen', + 'ol_lisu', ], b:[ 'diy_feishi', @@ -1284,6 +1286,7 @@ window.noname_character_rank={ 'jin_simashi', 'zhangling', 'ns_luyusheng', + 'fanyufeng', 'key_haruko', 'key_akiko', 'key_sunohara', @@ -1580,6 +1583,8 @@ window.noname_character_rank={ 're_chunyuqiong', 'sp_chenzhen', 'sp_wangcan', + 'lisu', + 'ol_lisu', ], junk:[ 'sunshao', diff --git a/character/sp.js b/character/sp.js index 8219e515e..d2c10f39f 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ sp:{ - sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","liuxie","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","fuwan","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","lingju","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','ol_lisu'], + sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","liuxie","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","fuwan","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","lingju","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying'], sp_zhongdan:["cuiyan","huangfusong"], sp_star:["sp_xiahoushi","jsp_zhaoyun","huangjinleishi","sp_pangtong","sp_daqiao","sp_ganning","sp_xiahoudun","sp_lvmeng","sp_zhangfei","sp_liubei"], sp_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], @@ -17,7 +17,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, character:{ - ol_lisu:['male','qun',3,['qiaoyan','xianzhu'],['unseen']], luyusheng:['female','wu',3,['zhente','zhiwei']], ol_xinxianying:['female','wei',3,['xincaishi','xinzhongjian']], huaxin:['male','wei',3,['wanggui','xibing']], @@ -401,107 +400,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ - //李肃 - qiaoyan:{ - trigger:{player:'damageBegin2'}, - forced:true, - filter:function(event,player){ - return player!=_status.currentPhase&&event.source&&event.source!=player; - }, - logTarget:'source', - content:function(){ - 'step 0' - var cards=player.getStorage('qiaoyan'); - if(cards.length){ - var source=trigger.source; - player.$give(cards,source,false); - source.gain(cards,'log'); - player.unmarkAuto('qiaoyan',cards); - event.goto(3); - } - else{ - trigger.cancel(); - player.draw(); - } - 'step 1' - var hs=player.getCards('he'); - if(!hs.length) event.finish(); - else if(hs.length==1) event._result={bool:true,cards:hs}; - else player.chooseCard('he',true,'将一张牌作为“珠”置于武将牌上'); - 'step 2' - if(result.bool&&result.cards&&result.cards.length){ - var cards=result.cards; - player.lose(cards,ui.special,'visible','toStorage'); - player.$give(cards,player,false); - player.markAuto('qiaoyan',cards); - game.log(player,'将',cards,'放在了武将牌上'); - } - event.finish(); - 'step 3' - game.delayx(); - }, - marktext:'珠', - intro:{content:'cards',onunmark:'throw'}, - ai:{ - filterDamage:true, - skillTagFilter:function(player,tag,arg){ - if(!player.getStorage('qiaoyan').length) return false; - if(arg&&arg.player){ - if(arg.player.hasSkillTag('jueqing',false,player)) return false; - } - }, - combo:'xianzhu', - }, - }, - xianzhu:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - locked:true, - filter:function(event,player){ - return player.storage.qiaoyan&&player.storage.qiaoyan.length>0; - }, - content:function(){ - 'step 0' - event.cards=player.storage.qiaoyan; - player.chooseTarget(true,'请选择【献珠】的目标','令一名角色获得'+get.translation(event.cards)+'。若该角色不为你自己,则你令其视为对其攻击范围内的另一名角色使用【杀】').set('ai',function(target){ - var player=_status.event.player; - var eff=get.sgn(get.attitude(player,target))*get.value(_status.event.getParent().cards); - if(player!=target) eff+=Math.max.apply(null,game.filterPlayer().map(function(current){ - if(current!=target&&target.inRange(current)&&target.canUse('sha',current)) return get.effect(current,{name:'sha'},target,player); - return 0; - })); - return eff; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('xianzhu',target); - player.$give(cards,target,false); - target.gain(cards,'log'); - player.unmarkAuto('qiaoyan',cards); - } - else event.finish(); - 'step 2' - game.delayx(); - if(player!=target&&target.isIn()&&player.isIn()&&game.hasPlayer(function(current){ - return current!=target&&target.inRange(current)&&target.canUse('sha',current); - })){ - var str=get.translation(target); - player.chooseTarget(true,'选择'+str+'攻击范围内的一名角色,视为'+str+'对其使用【杀】',function(card,player,target){ - var source=_status.event.target; - return source.inRange(target)&&source.canUse('sha',target); - }).set('target',target).set('ai',function(target){ - var evt=_status.event; - return get.effect(target,{name:'sha'},evt.target,evt.player) - }); - } - else event.finish(); - 'step 3' - if(result.bool) target.useCard({name:'sha',isCard:true},result.targets[0],false); - }, - ai:{combo:'qiaoyan'}, - }, //陆郁生 zhente:{ audio:2, @@ -7399,6 +7297,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ group:'rejici2', }, rejici2:{ + audio:'jici', trigger:{player:'die'}, forced:true, forceDie:true, @@ -7738,47 +7637,69 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(!event.source) return false; var nh1=player.countCards('h'); var nh2=event.source.countCards('h'); - if(nh1==nh2) return false; - if(nh2=5) return false; - if(nh2>nh2&&event.source.isDead()) return false; - return true; + var eh=player.countCards('e'); + if((nh1+eh)>nh2&&event.source.isAlive()) return true; + if(nh1num2){ - var next=player.chooseToDiscard([num2+1,num1],'贲育:是否弃置至少'+(num2+1)+'张手牌,并对'+get.translation(trigger.source)+'造成一点伤害?'); - next.logSkill=['benyu',trigger.source]; - next.set('ai',function(card){ - var trigger=_status.event.getTrigger(); - var player=_status.event.player; - if(ui.selected.cards.length>=_status.event.num){ - return -1; - } - if(get.damageEffect(trigger.source,player,player)>0&&_status.event.num<=2){ - return 8-get.value(card); - } - return -1; - }); - next.set('num',num2+1); + var eh=player.countCards('he',function(card){ + return lib.filter.cardDiscardable(card,player,'benyu'); + }); + var bool1=false,bool2=false; + if(num1num2&&trigger.source.isAlive()) bool2=true; + if(bool1&&bool2){ + event.chosen=true; + player.chooseControl('cancel2').set('prompt',get.prompt('benyu',trigger.source)).set('choiceList',[ + '将手牌摸至'+get.cnNumber(Math.min(num2,5))+'张', + '弃置至少'+get.cnNumber(num2+1)+'张牌并对其造成1点伤害', + ]) + } + else if(bool2) event.goto(3); + "step 1" + if(event.chosen){ + if(result.control=='cancel2') event.finish(); + else if(result.index==1) event.goto(3); + else event._result={bool:true}; + } + else player.chooseBool(get.prompt('benyu',trigger.source),'将手牌摸至'+get.cnNumber(Math.min(trigger.source.countCards('h'),5))+'张'); + "step 2" + if(result.bool){ + player.logSkill('benyu',trigger.source); + player.drawTo(Math.min(trigger.source.countCards('h'),5)); + } + event.finish(); + "step 3" + var num=trigger.source.countCards('h')+1; + var args=[[num,player.countCards('he')],'he']; + if(event.chosen){ + player.logSkill('benyu',trigger.source); + args.push(true); } else{ - event.draw=true; - event.num=Math.min(num2,5)-num1; - player.chooseBool(get.prompt2('benyu')); + args.push(get.prompt('benyu',trigger.source)); + args.push('弃置'+get.cnNumber(num)+'张牌并对其造成1点伤害'); } - "step 1" - if(result.bool){ - if(event.draw){ - player.logSkill('benyu',trigger.source); - player.draw(event.num); + var next=player.chooseToDiscard.apply(player,args); + if(!event.chosen) next.logSkill=['benyu',trigger.source]; + next.set('ai',function(card){ + var trigger=_status.event.getTrigger(); + var player=_status.event.player; + if(ui.selected.cards.length>=_status.event.num){ + return -1; } - else{ - trigger.source.damage(player); + if(get.damageEffect(trigger.source,player,player)>0&&(get.value(card,player)<0||_status.event.num<=2)){ + return 8-get.value(card); } - } + return -1; + }); + next.set('num',num); + "step 4" + if(result.bool) trigger.source.damage(); }, }, jili:{ @@ -16075,7 +15996,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ regushe_info:'出牌阶段,若X小于7,则你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。(X为你的“饶舌”标记数与本回合因“鼓舌”拼点而胜利的次数之和)', rejici:'激词', rejici2:'激词', - rejici_info:'锁定技,当你展示拼点牌后,若此牌的点数不大于X,则你令此牌点数+X,并获得此次拼点中原点数最大的拼点牌。', + rejici_info:'锁定技,当你展示拼点牌后,若此牌的点数不大于X,则你令此牌点数+X,并获得此次拼点中原点数最大的拼点牌。当你死亡时,你令杀死你的角色弃置7-X张牌并失去1点体力。(X为你的“饶舌”标记数)', gushe:'鼓舌', gushe_bg:'舌', gushe_info:'出牌阶段限一次,你可以用一张手牌与至多三名角色同时拼点,然后依次结算拼点结果,没赢的角色选择一项:1.弃置一张牌;2.令你摸一张牌。若你没赢,你获得一个“饶舌”标记。当你获得第7个“饶舌”标记时,你死亡。', @@ -16517,11 +16438,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiwei2:'至微', zhiwei_info:'游戏开始时,你选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。 ', zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ', - ol_lisu:'OL李肃', - qiaoyan:'巧言', - qiaoyan_info:'锁定技,当你于回合外受到其他角色造成的伤害时,若你:有“珠”,则你令伤害来源获得“珠”;没有“珠”,则你防止此伤害,然后摸一张牌,并将一张牌正面朝上置于武将牌上,称为“珠”。', - xianzhu:'献珠', - xianzhu_info:'锁定技,出牌阶段开始时,你令一名角色A获得“珠”。若A不为你自己,则你选择A攻击范围内的一名角色B,视为A对B使用一张【杀】。', sp_default:"常规", sp_zhongdan:"忠胆英杰", diff --git a/character/sp2.js b/character/sp2.js index c458b0002..91d6f64a1 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:{ + fanyufeng:['female','qun',3,['bazhan','jiaoying']], + ol_lisu:['male','qun',3,['qiaoyan','xianzhu']], jin_yanghuiyu:['female','jin',3,['huirong','ciwei','caiyuan'],['hiddenSkill','unseen']], shibao:['male','jin',4,['shibao_skill'],['unseen']], jin_zhangchunhua:['female','jin',3,['huishi','qingleng','xuanmu'],['hiddenSkill']], @@ -87,7 +89,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterSort:{ sp2:{ - sp_yingbian:['jin_zhangchunhua','jin_simayi','jin_wangyuanji','jin_simazhao','jin_xiahouhui','jin_yanghuiyu','jin_simashi','duyu','zhanghuyuechen','shibao'], + sp_yingbian:['jin_zhangchunhua','jin_simayi','jin_wangyuanji','jin_simazhao','jin_xiahouhui','jin_yanghuiyu','jin_simashi','duyu','zhanghuyuechen','shibao','ol_lisu'], sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], sp_longzhou:["xf_tangzi","xf_huangquan","xf_sufei","sp_liuqi"], @@ -98,7 +100,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng'], sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], sp_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], sp_yongjian:["ns_chendao","yj_caoang"], @@ -106,6 +108,309 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //樊玉凤 + bazhan:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + if(player.storage.bazhan){ + return game.hasPlayer(function(current){ + return current!=player&¤t.countGainableCards(player,'h')>0; + }) + } + return player.countCards('h')>0; + }, + filterCard:true, + discard:false, + lose:false, + selectCard:function(){ + if(_status.event.player.storage.bazhan) return 0; + return 1; + }, + filterTarget:function(card,player,target){ + if(player==target) return false; + if(player.storage.bazhan) return target.countGainableCards(player,'he')>0; + return true; + }, + prompt:function(){ + if(_status.event.player.storage.bazhan) return '获得一名其他角色的一张手牌'; + return '将一张手牌交给一名其他角色'; + }, + delay:false, + check:function(card){ + var player=_status.event.player; + var bool1=false,bool2=false; + for(var i of game.players){ + if(get.attitude(player,i)<=0||player==i) continue; + bool1=true; + if(i.isDamaged()||i.isTurnedOver()){ + bool2=true; + break; + } + } + if(bool2&&(get.suit(card,player)=='heart'||get.name(card,player)=='jiu')) return 10; + if(bool1) return 9-get.value(card); + if(get.color(card)=='red') return 5-get.value(card); + return 0; + }, + content:function(){ + 'step 0' + if(player.storage.bazhan){ + player.storage.bazhan=false; + event.recover=player; + player.gainPlayerCard(target,'h',true,'visibleMove'); + } + else{ + player.storage.bazhan=true; + event.recover=target; + target.gain(cards,player,'give'); + event.card=cards[0]; + } + 'step 1' + var target=event.recover; + if(result.bool&&result.cards&&result.cards.length){ + card=result.cards[0]; + } + if(!card||!target||!target.getCards('h').contains(card)||(get.suit(card,target)!='heart'&&get.name(card,target)!='jiu')){ + event.finish(); + return; + } + var list=[]; + event.addIndex=0; + var str=get.translation(target); + if(target.isDamaged()) list.push('令'+str+'回复一点体力'); + else event.addIndex++; + if(target.isLinked()||target.isTurnedOver()) list.push('令'+get.translation(target)+'复原武将牌'); + if(!list.length) event.finish(); + else player.chooseControl('cancel2').set('choiceList',list).set('ai',function(){ + var evt=_status.event.getParent(); + if(get.attitude(evt.player,evt.target)<0) return 'cancel2'; + if(target.hp>1&&target.isTurnedOver()) return 1-evt.addIndex; + return 0; + }); + 'step 2' + if(result.control=='cancel2') event.finish(); + else if(result.index+event.addIndex==0){ + event.recover.recover(); + event.finish(); + } + else if(event.recover.isLinked()) event.recover.link(); + 'step 3' + if(event.recover.isTurnedOver()) event.recover.turnOver(); + }, + ai:{ + order:7, + result:{ + target:function(player,target){ + if(player.storage.bazhan) return -1; + if(ui.selected.cards.length){ + var card=ui.selected.cards[0]; + if(get.value(card,target)<0) return -0.5; + if(get.attitude(player,target)>0){ + if((target.isDamaged()||target.isTurnedOver())&&(get.suit(card,target)=='heart'||get.name(card,target)=='jiu')) return 3; + if(target.hasUseTarget(card)&&target.getUseValue(card)>player.getUseValue(card,null,true)) return 1.4; + return 1; + } + if(player.hasSkill('jiaoying',true)&&target.countCards('h','shan')&&!target.hasSkillTag('respondShan',true,null,true)&&get.color(card)=='red'&&player.countCards('h',function(card){ + return get.tag(card,'respondShan')&&get.effect(target,card,player,player)>0&&player.getUseValue(card)>0; + })) return -1; + return 1; + } + return 0; + }, + }, + }, + }, + jiaoying:{ + audio:2, + trigger:{source:'gainEnd'}, + forced:true, + filter:function(event,player){ + if(player==event.player) return false; + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length; + }, + logTarget:'player', + content:function(){ + var target=trigger.player; + if(!target.storage.jiaoying2) target.storage.jiaoying2=[]; + var cs=trigger.getl(player).hs; + for(var i of cs) target.storage.jiaoying2.add(get.color(i,player)); + target.addTempSkill('jiaoying2'); + target.markSkill('jiaoying2'); + player.addTempSkill('jiaoying3'); + if(!player.storage.jiaoying3) player.storage.jiaoying3=[]; + player.storage.jiaoying3.add(target); + }, + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + var target=arg.target; + if(target.getStorage('jiaoying2').contains('red')&&get.tag(arg.card,'respondShan')&&!target.hasSkillTag('respondShan',true,null,true)) return true; + return false; + }, + } + }, + jiaoying2:{ + onremove:true, + charlotte:true, + mod:{ + cardEnabled2:function(card,player){ + if(player.getStorage('jiaoying2').contains(get.color(card))) return false; + }, + }, + intro:{ + content:'本回合内不能使用或打出$牌', + }, + }, + jiaoying3:{ + onremove:true, + trigger:{global:'useCard1'}, + silent:true, + firstDo:true, + charlotte:true, + filter:function(event,player){ + return player.storage.jiaoying3.contains(event.player); + }, + content:function(){ + while(player.storage.jiaoying3.contains(trigger.player)) player.storage.jiaoying3.remove(trigger.player); + if(!player.storage.jiaoying3.length) player.removeSkill('jiaoying3'); + }, + group:'jiaoying3_draw', + }, + jiaoying3_draw:{ + trigger:{global:'phaseEnd'}, + direct:true, + charlotte:true, + filter:function(event,player){ + return player.getStorage('jiaoying3').length>0&&game.hasPlayer(function(current){ + return current.countCards('h')2){ + return Math.min(5,target.maxHp)-target.countCards('h'); + } + return att/3; + }); + 'step 1' + if(result.bool){ + player.logSkill('jiaoying',result.targets); + for(var i=0;i0; + }, + content:function(){ + 'step 0' + event.cards=player.storage.qiaoyan; + player.chooseTarget(true,'请选择【献珠】的目标','令一名角色获得'+get.translation(event.cards)+'。若该角色不为你自己,则你令其视为对其攻击范围内的另一名角色使用【杀】').set('ai',function(target){ + var player=_status.event.player; + var eff=get.sgn(get.attitude(player,target))*get.value(_status.event.getParent().cards); + if(player!=target) eff+=Math.max.apply(null,game.filterPlayer().map(function(current){ + if(current!=target&&target.inRange(current)&&target.canUse('sha',current)) return get.effect(current,{name:'sha'},target,player); + return 0; + })); + return eff; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xianzhu',target); + player.$give(cards,target,false); + target.gain(cards,'log'); + player.unmarkAuto('qiaoyan',cards); + } + else event.finish(); + 'step 2' + game.delayx(); + if(player!=target&&target.isIn()&&player.isIn()&&game.hasPlayer(function(current){ + return current!=target&&target.inRange(current)&&target.canUse('sha',current); + })){ + var str=get.translation(target); + player.chooseTarget(true,'选择'+str+'攻击范围内的一名角色,视为'+str+'对其使用【杀】',function(card,player,target){ + var source=_status.event.target; + return source.inRange(target)&&source.canUse('sha',target); + }).set('target',target).set('ai',function(target){ + var evt=_status.event; + return get.effect(target,{name:'sha'},evt.target,evt.player) + }); + } + else event.finish(); + 'step 3' + if(result.bool) target.useCard({name:'sha',isCard:true},result.targets[0],false); + }, + ai:{combo:'qiaoyan'}, + }, recangchu:{ audio:2, trigger:{ @@ -1343,11 +1648,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' event.card=target.getCards('h').randomGet(); - var cards=get.cards(2); + var cards; + cards=get.cards(2); event.cards=cards.concat([event.card]); while(cards.length){ ui.cardPile.insertBefore(cards.pop().fix(),ui.cardPile.firstChild); } + if(get.mode()=='guozhan'){ + var num=ui.cardPile.childElementCount; + var num1=get.rand(1,num-1),num2=get.rand(1,num-1); + if(num1==num2){ + if(num1==0) num2++; + else num1--; + } + event.cards=[event.card,ui.cardPile.childNodes[num1],ui.cardPile.childNodes[num2]]; + } game.updateRoundNumber(); event.cards.randomSort(); game.log(player,'展示了',event.cards); @@ -1429,7 +1744,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var stat=player.getStat(); if(!stat.sanchen) stat.sanchen=[]; stat.sanchen.push(target); - player.addMark('sanchen',1,false); + if(get.mode()!='guozhan') player.addMark('sanchen',1,false); target.draw(3); 'step 1' if(!target.countCards('he')) event.finish(); @@ -1447,11 +1762,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(list.length==result.cards.length){ target.draw(); player.getStat('skill').sanchen--; + if(get.mode()=='guozhan') player.addTempSkill('pozhu'); } } else{ target.draw(); player.getStat('skill').sanchen--; + if(get.mode()=='guozhan') player.addTempSkill('pozhu'); } }, ai:{ @@ -1470,6 +1787,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ marktext:'陈', }, zhaotao:{ + forbid:['guozhan'], trigger:{player:'phaseZhunbeiBegin'}, forced:true, juexingji:true, @@ -1502,9 +1820,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCardAfter'}, silent:true, filter:function(event,player){ - return event.skill=='pozhu'&&!player.getHistory('sourceDamage',function(evt){ + return event.skill=='pozhu'&&(get.mode()=='guozhan'||!player.getHistory('sourceDamage',function(evt){ return evt.card==event.card; - }).length; + }).length); }, content:function(){ player.addTempSkill('pozhu3'); @@ -1515,17 +1833,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, trigger:{ global:'gameDrawAfter', - player:'enterGame', + player:['enterGame','showCharacterAfter'], }, forced:true, + filter:function(event,player){ + if(player._xijue) return false; + if(get.mode()=='guozhan') return event.name=='showCharacter'&&event.toShow&&event.toShow.contains('gz_zhanghuyuechen'); + return event.name!='showCharacter'; + }, content:function(){ player.addMark('xijue',4); + player._xijue=true; }, intro:{ name2:'爵', content:'mark', }, - derivation:['retuxi','xiaoguo'], + derivation:['xijue_tuxi','xijue_xiaoguo'], group:['xijue_gain','xijue_tuxi','xijue_xiaoguo'], }, xijue_gain:{ @@ -1554,6 +1878,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function (){ "step 0" var num=trigger.num; + if(get.mode()=='guozhan'&&num>2) num=2; player.chooseTarget('是否弃置一枚“爵”发动【突袭】?','获得至多'+get.translation(num)+'名角色的各一张手牌,然后少摸等量的牌',[1,num],function(card,player,target){ return target.countCards('h')>0&&player!=target; },function(target){ @@ -1621,7 +1946,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } "step 2" if(result.bool){ - player.draw(); + if(get.mode()!='guozhan') player.draw(); } else{ trigger.player.damage(); @@ -1845,8 +2170,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', locked:true, + filter:function(event,player){ + return Array.isArray(event.smyyingshi); + }, onChooseToUse:function(event){ - if(game.online) return; + if(game.online||!event.player.hasSkill('smyyingshi')) return; var cards=[]; for(var i=0;i阳:你可以获得一名其他角色的一张手牌。若以此法移动的牌为【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + return '转换技,出牌阶段限一次,阴:你可以将一张手牌交给一名其他角色。阳:你可以获得一名其他角色的一张手牌。若以此法移动的牌为【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。'; + }, }, perfectPair:{ jin_simayi:['jin_zhangchunhua'], @@ -9334,15 +9667,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xijue:'袭爵', xijue_gain:'袭爵', xijue_info:'锁定技,游戏开始时,你获得4枚“爵”。回合结束时,你获得X枚“爵”(X为你本回合内造成的伤害数)。你可弃置一枚“爵”并在合适的时机发动〖突袭〗和〖骁果〗。', + xijue_info_guozhan:'锁定技,当你首次明置此武将牌时,你获得4枚“爵”。回合结束时,你获得X枚“爵”(X为你本回合内造成的伤害数)。你可弃置一枚“爵”并在合适的时机发动〖突袭〗和〖骁果〗。', xijue_tuxi:'突袭', + xijue_tuxi_info:'摸牌阶段摸牌时,你可以少摸任意张牌,然后获得等量的角色的各一张手牌。', + xijue_tuxi_info_guozhan:'摸牌阶段摸牌时,你可以少摸至多两张牌,然后获得等量的角色的各一张手牌。', xijue_xiaoguo:'骁果', + xijue_xiaoguo_info:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌,然后你摸一张牌;2.受到你对其造成的1点伤害。', + xijue_xiaoguo_info_guozhan:'其他角色的结束阶段开始时,你可以弃置一张基本牌,令该角色选择一项:1.弃置一张装备牌;2.受到你对其造成的1点伤害。', duyu:'杜预', sanchen:'三陈', sanchen_info:'出牌阶段,你可选择一名本回合内未选择过的角色。其摸三张牌,然后弃置三张牌。若其未以此法弃置牌或以此法弃置的牌的类别均不相同,则其摸一张牌。否则你本阶段内不能再发动〖三陈〗。', + sanchen_info_guozhan:'出牌阶段,你可选择一名本回合内未选择过的角色。其摸三张牌,然后弃置三张牌。若其未以此法弃置牌或以此法弃置的牌的类别均不相同,则其摸一张牌且你获得技能〖破竹〗只到回合结束。否则你本阶段内不能再发动〖三陈〗。', zhaotao:'诏讨', zhaotao_info:'觉醒技,准备阶段,若你本局游戏内发动〖三陈〗的次数大于2,则你减1点体力上限并获得〖破竹〗。', pozhu:'破竹', pozhu_info:'出牌阶段,你可以将一张手牌当做【出其不意】使用。若你未因此牌造成过伤害,则你不能再发动〖破竹〗直到回合结束。', + pozhu_info_guozhan:'出牌阶段限一次,你可以将一张手牌当做【出其不意】使用。', jin_wangyuanji:'晋王元姬', jin_wangyuanji_ab:'王元姬', shiren:'识人', @@ -9350,6 +9690,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yanxi:'宴戏', yanxi2:'宴戏', yanxi_info:'出牌阶段,你可选择一名有手牌的角色。你将该角色的一张随机手牌与牌堆顶的两张牌混合后展示,并选择其中一张。若你以此法选择的是该角色的手牌,则你获得这三张牌。否则你获得选择的牌。你通过〖宴戏〗获得的牌,不计入当前回合的手牌上限。', + yanxi_info_guozhan:'出牌阶段,你可选择一名有手牌的角色。你将该角色的一张随机手牌与牌堆中的两张随机牌混合后展示,并选择其中一张。若你以此法选择的是该角色的手牌,则你获得这三张牌。否则你获得选择的牌。你通过〖宴戏〗获得的牌,不计入当前回合的手牌上限。', jin_simazhao:'晋司马昭', jin_simazhao_ab:'司马昭', tuishi:'推弑', @@ -9423,7 +9764,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ reshishou:'失守', reshishou2:'失守', reshishou_info:'锁定技,当你使用【酒】时或受到1点火焰伤害后,你移去一个“粮”。准备阶段,若你没有“粮”,你失去1点体力。', - + ol_lisu:'OL李肃', + qiaoyan:'巧言', + qiaoyan_info:'锁定技,当你于回合外受到其他角色造成的伤害时,若你:有“珠”,则你令伤害来源获得“珠”;没有“珠”,则你防止此伤害,然后摸一张牌,并将一张牌正面朝上置于武将牌上,称为“珠”。', + xianzhu:'献珠', + xianzhu_info:'锁定技,出牌阶段开始时,你令一名角色A获得“珠”。若A不为你自己,则你选择A攻击范围内的一名角色B,视为A对B使用一张【杀】。', + fanyufeng:'樊玉凤', + bazhan:'把盏', + bazhan_info:'转换技,出牌阶段限一次,阴:你可以将一张手牌交给一名其他角色。阳:你可以获得一名其他角色的一张手牌。若以此法移动的牌为【酒】或♥牌,则你可令得到此牌的角色执行一项:①回复1点体力。②复原武将牌。', + jiaoying:'醮影', + jiaoying2:'醮影', + jiaoying3:'醮影', + jiaoying3_draw:'醮影', + jiaoying_info:'锁定技,其他角色获得你的手牌后,该角色本回合不能使用或打出与此牌颜色相同的牌。然后此回合结束时,若其本回合没有再使用牌,你令一名角色将手牌摸至体力上限(至多摸至五张)。', + sp_yingbian:'文德武备', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/game/asset.js b/game/asset.js index d1ccbfeb4..7382a6449 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.109.3.1', + 'v1.9.109.3.2', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -689,6 +689,8 @@ window.noname_asset_list=[ 'audio/die/sp_sunshao.mp3', 'audio/die/sp_wangcan.mp3', 'audio/die/sp_xunchen.mp3', + 'audio/die/fanyufeng.mp3', + 'audio/die/ol_lisu.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3025,6 +3027,14 @@ window.noname_asset_list=[ 'audio/skill/spshanxi2.mp3', 'audio/skill/zuici1.mp3', 'audio/skill/zuici2.mp3', + 'audio/skill/bazhan1.mp3', + 'audio/skill/bazhan2.mp3', + 'audio/skill/jiaoying1.mp3', + 'audio/skill/jiaoying2.mp3', + 'audio/skill/qiaoyan1.mp3', + 'audio/skill/qiaoyan2.mp3', + 'audio/skill/xianzhu1.mp3', + 'audio/skill/xianzhu2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3137,6 +3147,7 @@ window.noname_asset_list=[ 'image/card/kamome_suitcase.png', 'image/card/miki_hydrogladiator.png', 'image/card/hina_shenji.png', + 'image/card/miki_binoculars.png', 'image/card/bagua.png', 'image/card/baihupifeng.png', @@ -3812,6 +3823,8 @@ window.noname_asset_list=[ 'image/character/mifangfushiren.jpg', 'image/character/tangzi.jpg', 'image/character/key_yukito.jpg', + 'image/character/fanyufeng.jpg', + 'image/character/ol_lisu.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 963b7099b..0b3da0ffc 100644 --- a/game/game.js +++ b/game/game.js @@ -10473,7 +10473,7 @@ var e2=target.getCards('e'); var todis2=[]; for(var i=0;i