diff --git a/audio/die/chunyuqiong.mp3 b/audio/die/chunyuqiong.mp3 new file mode 100644 index 000000000..a48806f45 Binary files /dev/null and b/audio/die/chunyuqiong.mp3 differ diff --git a/audio/die/sp_xuyou.mp3 b/audio/die/sp_xuyou.mp3 new file mode 100644 index 000000000..e0f2e21b1 Binary files /dev/null and b/audio/die/sp_xuyou.mp3 differ diff --git a/audio/die/xingdaorong.mp3 b/audio/die/xingdaorong.mp3 new file mode 100644 index 000000000..9ed0e7fe2 Binary files /dev/null and b/audio/die/xingdaorong.mp3 differ diff --git a/audio/die/yl_yuanshu.mp3 b/audio/die/yl_yuanshu.mp3 new file mode 100644 index 000000000..6f4f15cef Binary files /dev/null and b/audio/die/yl_yuanshu.mp3 differ diff --git a/audio/skill/cangchu1.mp3 b/audio/skill/cangchu1.mp3 new file mode 100644 index 000000000..28b4b668a Binary files /dev/null and b/audio/skill/cangchu1.mp3 differ diff --git a/audio/skill/cangchu2.mp3 b/audio/skill/cangchu2.mp3 new file mode 100644 index 000000000..5bf6f3857 Binary files /dev/null and b/audio/skill/cangchu2.mp3 differ diff --git a/audio/skill/chenggong1.mp3 b/audio/skill/chenggong1.mp3 new file mode 100644 index 000000000..6bb7cd63b Binary files /dev/null and b/audio/skill/chenggong1.mp3 differ diff --git a/audio/skill/chenggong2.mp3 b/audio/skill/chenggong2.mp3 new file mode 100644 index 000000000..425b76347 Binary files /dev/null and b/audio/skill/chenggong2.mp3 differ diff --git a/audio/skill/drlt_weidi1.mp3 b/audio/skill/drlt_weidi1.mp3 new file mode 100644 index 000000000..6834ca847 Binary files /dev/null and b/audio/skill/drlt_weidi1.mp3 differ diff --git a/audio/skill/drlt_weidi2.mp3 b/audio/skill/drlt_weidi2.mp3 new file mode 100644 index 000000000..9d22cc0fe Binary files /dev/null and b/audio/skill/drlt_weidi2.mp3 differ diff --git a/audio/skill/drlt_yongsi1.mp3 b/audio/skill/drlt_yongsi1.mp3 new file mode 100644 index 000000000..9c2d97130 Binary files /dev/null and b/audio/skill/drlt_yongsi1.mp3 differ diff --git a/audio/skill/drlt_yongsi2.mp3 b/audio/skill/drlt_yongsi2.mp3 new file mode 100644 index 000000000..2c8636740 Binary files /dev/null and b/audio/skill/drlt_yongsi2.mp3 differ diff --git a/audio/skill/liangying1.mp3 b/audio/skill/liangying1.mp3 new file mode 100644 index 000000000..83f54886c Binary files /dev/null and b/audio/skill/liangying1.mp3 differ diff --git a/audio/skill/spshicai1.mp3 b/audio/skill/spshicai1.mp3 new file mode 100644 index 000000000..9a900e8f5 Binary files /dev/null and b/audio/skill/spshicai1.mp3 differ diff --git a/audio/skill/spshicai2.mp3 b/audio/skill/spshicai2.mp3 new file mode 100644 index 000000000..d1ff641b0 Binary files /dev/null and b/audio/skill/spshicai2.mp3 differ diff --git a/audio/skill/sushou1.mp3 b/audio/skill/sushou1.mp3 new file mode 100644 index 000000000..e2c6844a3 Binary files /dev/null and b/audio/skill/sushou1.mp3 differ diff --git a/audio/skill/sushou2.mp3 b/audio/skill/sushou2.mp3 new file mode 100644 index 000000000..b2cfbdb03 Binary files /dev/null and b/audio/skill/sushou2.mp3 differ diff --git a/audio/skill/xuxie1.mp3 b/audio/skill/xuxie1.mp3 new file mode 100644 index 000000000..8e7ba33ad Binary files /dev/null and b/audio/skill/xuxie1.mp3 differ diff --git a/audio/skill/xuxie2.mp3 b/audio/skill/xuxie2.mp3 new file mode 100644 index 000000000..dae393d8e Binary files /dev/null and b/audio/skill/xuxie2.mp3 differ diff --git a/card/guozhan.js b/card/guozhan.js index 73ed312a1..e2bba55d4 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -245,21 +245,27 @@ game.import('card',function(lib,game,ui,get,ai,_status){ audio:true, type:'trick', enable:function(card,player){ + if(get.mode()=='versus') return true; return game.hasPlayer(function(current){ return current.isMajor(); }); }, - mode:['guozhan'], + mode:['guozhan','versus'], filterTarget:true, chongzhu:true, changeTarget:function(player,targets){ var target=targets[0]; game.filterPlayer(function(current){ + if(get.mode()=='versus') return current.isFriendOf(target); return current.isMajor()==target.isMajor()&¤t!=target&&!current.hasSkill('diaohulishan'); },targets); }, content:function(){ - if(target.isLinked()){ + if(get.mode()=='versus'){ + if(target.isEnemyOf(player)) target.link(true); + else if(target.isLinked()) target.draw(); + } + else if(target.isLinked()){ target.draw(); } else{ @@ -275,6 +281,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, result:{ player:function(player,target){ + if(get.mode()=='versus') return game.countPlayer(function(current){ + if(target.isFriendOf(current)){ + if(current.isFriendOf(player)&¤t.isLinked()){ + return get.attitude(player,target); + } + else if(current.isEnemyOf(player)&&!current.isLinked()){ + return -get.attitude(player,target)*0.6; + } + } + }); return game.countPlayer(function(current){ if(target.isMajor()==current.isMajor()){ if(current.isLinked()){ @@ -1377,6 +1393,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ shuiyanqijunx_info:'出牌阶段,对一名装备区里有牌的其他角色使用。目标角色选择一项:1、弃置装备区里的所有牌;2、受到你造成的1点雷电伤害', lulitongxin:'勠力同心', lulitongxin_info:'出牌阶段,对所有大势力角色或所有小势力角色使用。若目标角色:不处于“连环状态”,其横置;处于“连环状态”,其摸一张牌', + lulitongxin_info_versus:'出牌阶段,对所有敌方角色或所有己方角色使用。若目标角色:为敌方角色且不处于“连环状态”,其横置;为己方角色且处于“连环状态”,其摸一张牌。', lianjunshengyan:'联军盛宴', lianjunshengyan_info:'出牌阶段,对你和你选择的除你的势力外的一个势力的所有角色。若目标角色:为你,你选择摸Y张牌并回复X-Y点体力(X为该势力的角色数,Y∈[0,X]);不为你,其摸一张牌,然后重置。', lianjunshengyan_info_boss:'出牌阶段,对场上所有角色使用。你摸X张牌(X为目存活角色数),其他角色依次选择回复1点体力或摸一张牌。', diff --git a/card/standard.js b/card/standard.js index 51110bbd2..d8ef3fc67 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1682,22 +1682,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){ direct:true, filter:function(event,player){ if(get.mode()=='guozhan') return false; - return player.canUse('sha',event.target,false)&&player.hasSha(); + return player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h')); }, content:function(){ "step 0" - if(player.hasSkill('jiu')){ - game.broadcastAll(function(player){ - player.removeSkill('jiu'); - },player); - event.jiu=true; - } - player.chooseToUse(get.prompt('qinglong'),{name:'sha'},trigger.target,-1).set('addCount',false).logSkill='qinglong_skill'; - "step 1" - if(result.bool); - else if(event.jiu){ - player.addSkill('jiu'); - } + player.chooseToUse(get.prompt('qinglong'),function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },trigger.target,-1).set('addCount',false).logSkill='qinglong_skill'; } }, zhangba_skill:{ diff --git a/character/diy.js b/character/diy.js index bc2f3b2ec..a0a9a78bd 100755 --- a/character/diy.js +++ b/character/diy.js @@ -1527,7 +1527,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); 'step 1' if(result.bool){ - player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害'); + player.chooseTarget(lib.filter.notMe,true,'选择一名其他角色,对其造成1点雷属性伤害').set('',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player,'thunder'); + }); } else event.finish(); 'step 2' @@ -2532,7 +2535,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToUse({ cards:cards, filterCard:function(card){ - if(!_status.event.cards.contains(card)) return false; + if(get.itemtype(card)!='card'||!_status.event.cards||!_status.event.cards.contains(card)) return false; return lib.filter.filterCard.apply(this,arguments); }, prompt:'是否使用得到的牌中的一张?', @@ -8887,7 +8890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ haruka_shuangche:'双掣', kanata_shuangche:'双掣', haruka_shuangche_backup:'双掣', - haruka_shuangche_info:'出牌阶段,你可以视为使用任意基本牌或普通锦囊牌。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。', + haruka_shuangche_info:'出牌阶段,你可以视为使用任意基本牌或普通锦囊牌。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。(X为你于此回合内发动过〖双掣〗的次数)', //你不能以此法使用【回魂】 saya_shouji:'授计', saya_shouji_info:'每回合限一次,当你使用的牌结算完成后,你可以将此牌对应的所有实体牌交给一名其他角色。其可以使用这些牌中的一张,若如此做,你摸一张牌。', diff --git a/character/mobile.js b/character/mobile.js index 27eb0a9a1..122ed518e 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -612,6 +612,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.cardsGotoSpecial(cards); game.log(player,'将',cards,'置于了',target,'的武将牌上'); } + "step 4" + game.updateRoundNumber(); }, ai:{ order:10, diff --git a/character/old.js b/character/old.js index 2ee3d09ca..f7962a0e9 100755 --- a/character/old.js +++ b/character/old.js @@ -12,11 +12,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"], old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"], old_yijiang67:["ol_xinxianying","ol_zhangrang","ol_liuyu"], - old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang","panfeng","old_wangyun"], + old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang","panfeng","old_wangyun","sunluyu"], old_mobile:["old_caochun","old_majun"], }, }, character:{ + sunluyu:['female','wu',3,['new_meibu','new_mumu']], pangde:['male','qun',4,['mashu','mengjin']], ol_huaxiong:["male","qun",6,["new_reyaowu"]], old_wangyun:['male','qun',4,['wylianji','moucheng']], diff --git a/character/shenhua.js b/character/shenhua.js index 13901f624..da1110c8a 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -790,10 +790,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, "drlt_yongsi":{ + audio:2, group:["drlt_yongsi_1","drlt_yongsi_2"], subSkill:{ '1':{ - audio:["yongsi1",2], + audio:"drlt_yongsi", trigger:{ player:'phaseDrawBegin2' }, @@ -806,7 +807,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, '2':{ - audio:["yongsi2",2], + audio:"drlt_yongsi", trigger:{ player:'phaseUseEnd' }, diff --git a/character/sp.js b/character/sp.js index e52b7f525..b7979121a 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","wenyang","xujing","yuantanyuanshang","wangshuang","sunshao","liuzan","xingdaorong"], + 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","re_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","wenyang","xujing","yuantanyuanshang","wangshuang","sunshao","liuzan","xingdaorong"], sp_guansuo:['guansuo','baosanniang','huaman'], sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], @@ -16,14 +16,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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'], - sp_guozhan:["shamoke","ganfuren","yuejin","hetaihou","dingfeng","re_panfeng","jianggan"], - sp_guozhan2:["mifuren","mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","bianfuren","liqueguosi","lvfan","cuimao","jiling","zangba","zhangren","zoushi"], - sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan"], + sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","re_panfeng","jianggan"], + sp_guozhan2:["mifuren","mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","kongrong","bianfuren","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi"], + sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_single:["hejin","hansui","niujin"], sp_others:["hanba"], }, }, + characterFilter:{ + chunyuqiong:function(mode){ + return mode!='identity'&&mode!='guozhan'; + }, + sp_xuyou:function(mode){ + return mode=='versus'&&['guandu','4v4','four'].contains(_status.mode); + }, + }, character:{ + sp_xuyou:['male','qun',3,['spshicai','spfushi']], + chunyuqiong:['male','qun',5,['cangchu','sushou','liangying']], + lvkuanglvxiang:['male','qun',4,['liehou','qigong']], xingdaorong:['male','qun','4/6',['xuxie']], liuzan:['male','wu',4,['refenyin','liji']], re_panfeng:['male','qun',4,['xinkuangfu']], @@ -117,7 +128,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_zhangfei:['male','shu',4,['jie','dahe']], jsp_guanyu:['male','wei',4,['new_rewusheng','danji']], jsp_huangyueying:['female','qun',3,['jiqiao','linglong']], - sunluyu:['female','wu',3,['new_meibu','new_mumu']], + re_sunluyu:['female','wu',3,['remeibu','remumu']], hanba:['female','qun',4,['fentian','zhiri']], zumao:['male','wu',4,['yinbing','juedi']], wenpin:['male','wei',4,['zhenwei']], @@ -170,7 +181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cuimao:['male','wei',3,['zhengbi','fengying']], jiling:['male','qun',4,['shuangren']], - zangba:['male','wei',4,['hengjiang']], + zangba:['male','wei',4,['rehengjiang']], zhangren:['male','qun',4,['chuanxin','zfengshi']], zoushi:['female','qun',3,['zhuoshui','zqingcheng']], @@ -188,6 +199,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + chunyuqiong:'淳于琼(?-200年),字仲简,颍川(治今河南禹州)人。东汉时期官吏,于汉灵帝中平五年(188)被任命为西园八校尉之一的右校尉,与蹇硕、袁绍、鲍鸿、曹操、赵融、冯芳、夏牟同列。为袁绍大将,与张郃、高览等人齐名。在官渡之战时镇守乌巢,遭到曹操的偷袭而惨败,自己也被曹操处斩。', + lvkuanglvxiang:'吕旷(生卒年不详),与吕翔同是袁绍属下,袁绍去世后,为袁尚守东平,后来投降曹操,并被封为列侯。在《三国演义》中,在曹操准备往南准备攻击前,两人跟著大将曹仁和将军李典准备要攻击刘备。但吕旷被赵云刺下马身亡,而吕翔也死于张飞矛下,可以算是出师未捷身先死', caobuxing:'曹不兴,亦名弗兴,三国时著名画家。孙吴吴兴(今浙江湖州)人,生卒年不详。他在黄武年间(222—229年)享有很大的声誉。被称为“佛画之祖”。与东晋顾恺之、南朝宋陆探微、南朝梁张僧繇并称“六朝四大家”。又与赵达的算术、严武的弈棋、皇象的草书等号称“吴中八绝”。曹不兴善画龙、虎、马及人物,有“落墨为蝇”等传奇故事,其佛画成就对后世影响很大,相传其所画龙头令谢赫叹服不已。画迹今已不存,据《贞观公私画史》载,作品有《青溪龙》、《赤盘龙》、《南海监牧进十种马图》、《夷事夷兽样》、《桃源图》等,惜早已散佚。 但之后的著名画家卫协直接师承其法。', xingdaorong:'邢道荣是《三国演义》中虚构的人物,为零陵太守刘度手下武将,被评价有万夫不当之勇,于《三国演义》第五十二回登场,被赵云刺死。', gaolan:'高览,生卒年不详,一名高奂,本属袁绍部将,后官渡之战淳于琼被曹操击破,与张郃一同投降曹操,被封为偏将军,东莱侯。《三国演义》里,曾与许褚、徐晃大战不分胜负。201年刘备败走荆州时,高览奉命追杀,三合斩刘辟,而后被冲阵而来的赵云刺死。', @@ -516,6 +529,353 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //吕旷吕翔和淳于琼和官渡哔哔机 + spshicai:{ + audio:2, + enable:'phaseUse', + filter:function(event,player){ + return !player.storage.spshicai2||!player.getCards('h').contains(player.storage.spshicai2); + }, + filterCard:true, + prompt:function(){ + var str='弃置一张牌,然后获得'; + if(get.itemtype(_status.pileTop)=='card') str+=get.translation(_status.pileTop); + else str+='牌堆顶的一张牌'; + return str; + }, + check:function(card){ + var player=_status.event.player; + var cardx=_status.pileTop; + if(get.itemtype(cardx)!='card') return 0; + var val=player.getUseValue(cardx,null,true); + if(!val) return 0; + var val2=player.getUseValue(card,null,true); + return (val-val2)/Math.max(0.1,get.value(card)); + }, + content:function(){ + var card=get.cards()[0]; + player.storage.spshicai2=card; + player.gain(card,'draw'); + game.log(player,'获得了牌堆顶的一张牌'); + }, + group:'spshicai_mark', + ai:{ + order:1, + result:{player:1}, + }, + }, + spshicai_mark:{ + trigger:{player:'phaseUseBegin'}, + silent:true, + firstDo:true, + content:function(){ + player.addTempSkill('spshicai2','phaseUseEnd'); + }, + }, + spshicai2:{ + onremove:true, + mark:true, + intro:{ + mark:function(dialog,content,player){ + if(player!=game.me) return get.translation(player)+'观看牌堆中...'; + if(get.itemtype(_status.pileTop)!='card') return '牌堆顶无牌'; + dialog.add([_status.pileTop]); + }, + }, + }, + spfushi:{ + group:['zezhu','chenggong'], + derivation:['zezhu','chenggong'], + locked:true, + }, + zezhu:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + var enemy=0; + var friend=0; + var zhu=0; + for(var i of game.players){ + if(i.isEnemyOf(player)) enemy++; + else friend++; + if(i!=player&&i.isZhu) zhu++; + } + return zhu>0&&enemy0) player.gainPlayerCard(target,'he',true); + else player.draw(); + if(event.targets2.length) event.redo(); + 'step 2' + if(player.countCards('he')>=targets.length){ + player.chooseCard('he',true,'依次选择'+get.cnNumber(targets.length)+'张牌,分别交给'+get.translation(targets),targets.length).set('ai',function(card){ + var target=_status.event.getParent().targets[ui.selected.cards.length]; + var player=_status.event.player; + return get.attitude(player,target)*get.value(card,target); + }); + } + else event.finish(); + 'step 3' + for(var i=0;i1&&event.player.isAlive())) return false; + var enemy=0; + var friend=0; + for(var i of game.players){ + if(i.isEnemyOf(player)) enemy++; + else friend++; + } + return enemy>friend; + }, + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + logTarget:'player', + content:function(){ + trigger.player.draw(); + }, + }, + cangchu:{ + trigger:{ + global:'gameDrawAfter', + player:['damageEnd','enterGame'], + }, + audio:2, + forced:true, + filter:function(event,player){ + if(event.name!='damage') return true; + return event.nature=='fire'&&player.countMark('cangchu')>0; + }, + content:function(){ + if(trigger.name!='damage') player.addMark('cangchu',3); + else{ + player.removeMark('cangchu',Math.min(trigger.num,player.countMark('cangchu'))); + if(!player.hasMark('cangchu')) event.trigger('cangchuAwaken'); + } + }, + marktext:'粮', + intro:{ + name2:'粮', + content:'mark', + }, + ai:{ + threaten:function(player,target){ + return 1+target.countMark('cangchu')/2; + }, + effect:{ + target:function(card,player,target,current){ + if(target.hasMark('cangchu')){ + if(card.name=='sha'){ + if(lib.skill.global.contains('huoshaowuchao')||card.nature=='fire'||player.hasSkill('zhuque_skill')) return 2; + } + if(get.tag(card,'fireDamage')&¤t<0) return 2; + } + } + }, + }, + }, + sushou:{ + trigger:{player:'phaseDiscardBegin'}, + frequent:true, + audio:2, + content:function(){ + 'step 0' + player.draw(1+player.countMark('cangchu')); + 'step 1' + var num=Math.min(player.countCards('h'),game.countPlayer(function(target){ + return target!=player&&target.isFriendOf(player); + })); + if(num){ + player.chooseCardTarget({ + prompt:'是否将任意张手牌交给其他己方角色?', + prompt2:'操作提示:先按顺序选中所有要给出的手牌,然后再按顺序选择等量的目标角色', + selectCard:[1,num], + selectTarget:function(){ + return ui.selected.cards.length; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.isFriendOf(player); + }, + complexSelect:true, + ai1:function(card){ + if(card.name=='shan') return 1; + return Math.random(); + }, + ai2:function(target){ + return 5-Math.max(4,target.countCards('h')); + }, + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + while(result.cards.length){ + var target=result.targets.shift(); + var card=result.cards.shift(); + target.gain(card,player); + player.$giveAuto(card,target); + } + event.next.sort(function(a,b){ + return lib.sort.seat(a.player,b.player); + }); + } + else event.finish(); + 'step 3' + game.delay(); + }, + }, + liangying:{ + trigger:{ + global:'phaseDrawBegin2', + player:'cangchuAwaken', + }, + forced:true, + audio:1, + logTarget:function(event){ + if(event.name=='phaseDraw') return event.player; + return game.filterPlayer(function(current){ + return current.isEnemyOf(player); + }); + }, + filter:function(event,player){ + if(event.name=='cangchu') return true; + return player.hasMark('cangchu')&&!event.numFixed&&event.player.isFriendOf(player); + }, + content:function(){ + 'step 0' + if(trigger.name=='cangchu'){ + player.loseMaxHp(); + var list=game.filterPlayer(function(current){ + return current.isEnemyOf(player); + }); + if(list.length){ + game.asyncDraw(list,2); + } + } + else{ + trigger.num++; + event.finish(); + } + 'step 1' + game.delay(); + }, + }, + liehou:{ + enable:'phaseUse', + usable:1, + audio:2, + filterTarget:function(card,player,target){ + return player.inRange(target)&&target.countCards('h'); + }, + content:function(){ + 'step 0' + target.chooseCard('h',true,'交给'+get.translation(player)+'一张牌'); + 'step 1' + if(result.bool){ + player.gain(result.cards,target,'giveAuto'); + } + else event.finish(); + 'step 2' + if(player.countCards('h')&&game.hasPlayer(function(current){ + return current!=target&&player.inRange(target); + })){ + player.chooseCardTarget({ + position:'h', + filterCard:true, + filterTarget:function(card,player,target){ + return target!=_status.event.getParent().target&&player.inRange(target); + }, + forced:true, + prompt:'将一张手牌交给一名攻击范围内的其他角色', + ai1:function(card){ + var player=_status.event.player; + if(get.name(card)=='du') return 20; + if(game.hasPlayer(function(current){ + return current!=_status.event.getParent().target&&player.inRange(current)&&get.attitude(player,current)>0&¤t.getUseValue(card)>player.getUseValue(card)&¤t.getUseValue(card)>player.getUseValue(card); + })) return 12; + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })){ + if(card.name=='wuxie') return 11; + if(card.name=='shan'&&player.countCards('h','shan')>1) return 9 + } + return 6/Math.max(1,get.value(card)); + }, + ai2:function(target){ + var player=_status.event.player; + var card=ui.selected.cards[0]; + var att=get.attitude(player,target); + if(card.name=='du') return -6*att; + if(att>0){ + if(get.position(card)=='h'&&target.getUseValue(card)>player.getUseValue(card)) return 4*att; + if(get.value(card,target)>get.value(card,player)) return 2*att; + return 1.2*att; + } + return -att*Math.min(4,target.countCards('he'))/6; + }, + }); + } + else event.finish(); + 'step 3' + if(result.bool) result.targets[0].gain(result.cards,player,'giveAuto') + }, + ai:{ + order:6, + result:{ + target:-1, + }, + }, + }, + qigong:{ + trigger:{player:'shaMiss'}, + direct:true, + audio:2, + filter:function(event,player){ + return player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h')); + }, + content:function(){ + "step 0" + player.chooseToUse(get.prompt('qigong'),function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },trigger.target,-1).set('addCount',false).logSkill='qigong'; + }, + group:'qigong_hit', + }, + qigong_hit:{ + trigger:{player:'useCard1'}, + firstDo:true, + silent:true, + filter:function(event,player){ + return event.getParent(2).name=='qigong'; + }, + content:function(){ + trigger.directHit.addArray(game.players); + }, + }, //说出吾名吓汝一跳 xuxie:{ audio:2, @@ -525,7 +885,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.distance(player,current)<=1; }).sortBySeat(); }, - check:function(){return false}, + check:function(event,player){ + if(player.isHealthy()) return false; + var list=game.filterPlayer(function(current){ + return get.distance(player,current)<=1; + }); + var draw=0; + var discard=0; + var num=2/player.getDamagedHp(); + while(list.length){ + var target=list.shift(); + var att=get.attitude(player,target); + if(att>0){ + draw++; + if(target.countDiscardableCards(player,'he')>0) discard--; + } + if(att==0){ + draw--; + if(target.countDiscardableCards(player,'he')>0) discard--; + } + if(att<0){ + draw--; + if(target.countDiscardableCards(player,'he')>0) discard++; + } + } + return draw>=num||discard>=num; + }, content:function(){ 'step 0' player.loseMaxHp(); @@ -539,7 +924,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseControl().set('choiceList',[ '弃置'+get.translation(targets)+'的各一张牌', '令'+get.translation(targets)+'各摸一张牌', - ]); + ]).set('ai',function(){ + var player=_status.event.player; + var list=_status.event.getParent().targets.slice(0); + var draw=0; + var discard=0; + while(list.length){ + var target=list.shift(); + var att=get.attitude(player,target); + if(att>0){ + draw++; + if(target.countDiscardableCards(player,'he')>0) discard--; + } + if(att<0){ + draw--; + if(target.countDiscardableCards(player,'he')>0) discard++; + } + } + if(draw>discard) return 1; + return 0; + }); } 'step 2' event.index=result.index; @@ -931,9 +1335,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mark:true, intro:{content:'本回合内不能使用或打出牌'}, mod:{ - cardEnabled:function(){return false}, - cardRespondable:function(){return false}, - cardSavable:function(){return false}, + cardEnabled2:function (card){ + if(get.position(card)=='h') return false; + }, }, }, gangzhi:{ @@ -1329,7 +1733,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var map=trigger.customArgs; var id=trigger.target.playerid; if(!map[id]) map[id]={}; - map[id].baseDamage=trigger.target.hp; + if(typeof map[id].extraDamage!='number') map[id].extraDamage=0; + map[id].extraDamage+=trigger.target.hp-1; } else if(result.bool===false) player.loseHp(); }, @@ -2250,7 +2655,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.expandSkills(list2); for(var k=0;k=Math.random()){ player.popup('洗具'); } @@ -5040,6 +5461,123 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cardEnabled:function (card){if(card.name=='sha') return false}, }, }, + remeibu:{ + audio:"meibu", + trigger:{ + global:"phaseUseBegin", + }, + filter:function (event,player){ + return event.player!=player&&event.player.isAlive()&&event.player.inRange(player)&&player.countCards('he')>0; + }, + direct:true, + derivation:["rezhixi"], + checkx:function (event,player){ + if(get.attitude(player,event.player)>=0) return false; + var e2=player.getEquip(2); + if(e2){ + if(e2.name=='tengjia') return true; + if(e2.name=='bagua') return true; + } + return event.player.countCards('h')>event.player.hp; + }, + content:function (){ + "step 0" + var check=lib.skill.new_meibu.checkx(trigger,player); + player.chooseToDiscard(get.prompt2('remeibu',trigger.player),'he').set('ai',function(card){ + if(_status.event.check) return 6-get.value(card); + return 0; + }).set('check',check).set('logSkill',['remeibu',trigger.player]); + "step 1" + if(result.bool){ + var target=trigger.player; + var card=result.cards[0]; + player.line(target,'green'); + target.addTempSkill('rezhixi','phaseUseEnd'); + } + }, + ai:{ + expose:0.2, + }, + }, + remumu:{ + audio:"mumu", + trigger:{ + player:"phaseUseBegin", + }, + direct:true, + content:function (){ + 'step 0' + player.chooseTarget(get.prompt('remumu'),'弃置一名角色装备区内的一张牌,或者获得一名角色装备区内的防具牌',function(card,player,target){ + if(target==player) return target.getEquip(2)!=undefined; + return target.countCards('e')>0; + }).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target) + if(target.getEquip(2)&&player.isEmpty(2)){ + return -2*att; + } + return -att; + }); + 'step 1' + if(result.bool&&result.targets&&result.targets.length){ + event.target=result.targets[0]; + player.logSkill('remumu',event.target); + player.line(event.target,'green'); + var e=event.target.getEquip(2); + event.e=e; + if(target==player) event.choice='获得一张防具牌'; + else if(e){ + player.chooseControl('弃置一张装备牌','获得一张防具牌').set('ai',function(){ + if(_status.event.player.getEquip(2)){ + return '弃置一张装备牌'; + } + return '获得一张防具牌'; + }); + } + else{ + event.choice='弃置一张装备牌'; + } + }else event.finish(); + 'step 2' + var choice=event.choice||result.control; + if(choice=='弃置一张装备牌'){ + player.discardPlayerCard(event.target,'e',true); + player.addTempSkill('remumu3'); + } + else{ + if(event.e){ + player.gain(event.e,event.target,'give'); + player.addTempSkill('remumu2') + } + } + }, + }, + remumu2:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num-1; + }, + }, + }, + remumu3:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + }, + }, + rezhixi:{ + trigger:{ + player:"useCard", + }, + forced:true, + filter:function(event,player){ + return (event.card.name=='sha'||get.type(event.card,'trick')=='trick')&&player.countCards('h')>0; + }, + content:function(){ + player.chooseToDiscard('h',true); + }, + }, qingzhong:{ audio:2, }, @@ -6677,6 +7215,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, hengjiang:{ + audio:2, trigger:{player:'damageEnd'}, check:function(event,player){ return get.attitude(player,_status.currentPhase)<0||!_status.currentPhase.needsToDiscard(2); @@ -6684,7 +7223,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ filter:function(event){ return _status.currentPhase&&_status.currentPhase.isIn()&&event.num>0; }, - //logTarget:'source', + logTarget:function(){ + return _status.currentPhase; + }, content:function(){ var source=_status.currentPhase; if(source.hasSkill('hengjiang2')){ @@ -6704,6 +7245,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, hengjiang2:{ mark:true, + charlotte:true, intro:{ content:'手牌上限-#' }, @@ -6738,6 +7280,92 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.asyncDraw(player.storage.hengjiang3); } }, + rehengjiang:{ + audio:'hengjiang', + trigger:{player:'damageEnd'}, + check:function(event,player){ + return get.attitude(player,_status.currentPhase)<0||!_status.currentPhase.needsToDiscard(2); + }, + filter:function(event){ + return _status.currentPhase&&_status.currentPhase.isIn()&&event.num>0; + }, + logTarget:function(){ + return _status.currentPhase; + }, + content:function(){ + "step 0" + event.count=trigger.num; + "step 1" + event.count--; + var source=_status.currentPhase; + if(source.hasSkill('rehengjiang2')){ + source.storage.rehengjiang2++; + source.storage.rehengjiang3.push(player); + source.storage.rehengjiang3.sortBySeat(source); + source.updateMarks(); + } + else{ + source.storage.rehengjiang3=[player]; + source.storage.rehengjiang2=1; + source.addTempSkill('rehengjiang2'); + } + "step 2" + if(event.count){ + player.chooseBool(get.prompt2('rehengjiang',_status.currentPhase)).set('ai',function(){ + return lib.skill.rehengjiang.check(_status.event.getTrigger(),_status.event.player); + }) + } + else event.finish(); + "step 3" + if(result.bool){ + player.logSkill('rehengjiang',_status.currentPhase); + event.goto(1); + } + }, + ai:{ + maixie_defend:true, + } + }, + rehengjiang2:{ + mark:true, + charlotte:true, + intro:{ + content:'手牌上限-#' + }, + mod:{ + maxHandcard:function(player,num){ + return num-player.storage.rehengjiang2; + } + }, + onremove:function(player){ + delete player.storage.rehengjiang2; + delete player.storage.rehengjiang3; + }, + trigger:{player:'phaseDiscardEnd'}, + filter:function(event,player){ + if(event.cards&&event.cards.length) return false; + var players=player.storage.rehengjiang3; + for(var i=0;i1){ nai++; } @@ -11767,15 +12387,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); "step 1" if(result.bool){ - var ng=[]; - var players=game.filterPlayer(); - for(var i=0;itarget.hp + }); })]; }, selectTarget:function(){ return ui.selected.cards.length; }, filterTarget:function(card,player,target){ - return target.isMaxHp(); + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp + }); }, check:function(card){ var player=_status.event.player; - if(game.countPlayer(function(current){ - return current.isMaxHp()&&get.effect(current,'sanyao',player,player)>0; + if(game.countPlayer(function(target){ + return target!=player&&!game.hasPlayer(function(current){ + return current!=player&¤t.hp>target.hp + })&&get.effect(target,'sanyao',player,player)>0; })<=ui.selected.cards.length) return 0; return 7-get.value(card); }, @@ -8759,7 +8766,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.chooseTarget(get.prompt2('rechanhui'),function(card,player,target){ if(player==target) return false; var trigger=_status.event; - return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false; + return player.canUse(trigger.card,target,false)&&trigger.targets.contains(target)==false; }).set('ai',function(target){ var trigger=_status.event.getTrigger(); var player=_status.event.player; @@ -12071,7 +12078,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ chanhui:'谮毁', chanhui_info:'出牌阶段限一次,当你使用【杀】或黑色普通锦囊牌指定唯一目标时,你可令可以成为此牌目标的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标。', rechanhui:'谮毁', - rechanhui_info:'出牌阶段,当你使用【杀】或黑色普通锦囊牌指定唯一目标时,你可令可以成为此牌目标的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标且你本回合内不能再次发动〖谮毁〗。', + rechanhui_info:'出牌阶段,当你使用【杀】或黑色普通锦囊牌指定唯一目标时,你可令可以成为此牌目标(无距离限制)的另一名其他角色选择一项:交给你一张牌并成为此牌的使用者;或成为此牌的额外目标且你本回合内不能再次发动〖谮毁〗。', jiaojin:'骄矜', jiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。', rejiaojin:'骄矜', @@ -12192,7 +12199,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhiman_info:'当你对一名其他角色造成伤害时,你可以防止此伤害,然后获得其装备区或判定区的一张牌。', sanyao_info:'出牌阶段限一次,你可以弃置一张牌并指定一名体力值最多(或之一)的角色,你对其造成1点伤害。', rezhiman_info:'当你对一名其他角色造成伤害时,你可以防止此伤害,然后获得其区域内的一张牌。', - resanyao_info:'出牌阶段限一次,你可以弃置任意张牌并指定等量体力值最多(或之一)的角色。你对这些角色依次造成1点伤害。', + resanyao_info:'出牌阶段限一次,你可以弃置任意张牌并指定等量除你外体力值最多(或之一)的其他角色。你对这些角色依次造成1点伤害。', paiyi_info:'出牌阶段限一次,你可以移去一张“权”并选择一名角色,令其摸两张牌,然后若其手牌数大于你,你对其造成1伤害。', zili_info:'觉醒技,准备阶段开始时,若“权”的数量不小于3,你减1点体力上限,然后选择一项:1、回复1点体力;2、摸两张牌。然后你获得技能“排异”。', quanji_info:'当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', diff --git a/game/asset.js b/game/asset.js index 8d46751ef..25f8653c4 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.100.4', + 'v1.9.100.4.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -575,6 +575,10 @@ window.noname_asset_list=[ 'audio/die/zhengxuan.mp3', 'audio/die/ol_sunjian.mp3', 'audio/die/re_taishici.mp3', + 'audio/die/chunyuqiong.mp3', + 'audio/die/sp_xuyou.mp3', + 'audio/die/xingdaorong.mp3', + 'audio/die/yl_yuanshu.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2550,6 +2554,21 @@ window.noname_asset_list=[ 'audio/skill/zhanshen2.mp3', 'audio/skill/zhongyi1.mp3', 'audio/skill/zhongyi2.mp3', + 'audio/skill/cangchu1.mp3', + 'audio/skill/cangchu2.mp3', + 'audio/skill/chenggong1.mp3', + 'audio/skill/chenggong2.mp3', + 'audio/skill/drlt_weidi1.mp3', + 'audio/skill/drlt_weidi2.mp3', + 'audio/skill/drlt_yongsi1.mp3', + 'audio/skill/drlt_yongsi2.mp3', + 'audio/skill/liangying1.mp3', + 'audio/skill/spshicai1.mp3', + 'audio/skill/spshicai2.mp3', + 'audio/skill/sushou1.mp3', + 'audio/skill/sushou2.mp3', + 'audio/skill/xuxie1.mp3', + 'audio/skill/xuxie2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -3130,6 +3149,10 @@ window.noname_asset_list=[ 'image/character/re_sunluban.jpg', 'image/character/re_taishici.jpg', 'image/character/xushao.jpg', + 'image/character/chunyuqiong.jpg', + 'image/character/lvkuanglvxiang.jpg', + 'image/character/re_sunluyu.jpg', + 'image/character/sp_xuyou.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', @@ -4051,6 +4074,46 @@ window.noname_asset_list=[ 'image/emotion/zhenji_emotion/18.gif', 'image/emotion/zhenji_emotion/19.gif', 'image/emotion/zhenji_emotion/20.gif', + 'image/emotion/xiaosha_emotion/1.gif', + 'image/emotion/xiaosha_emotion/2.gif', + 'image/emotion/xiaosha_emotion/3.gif', + 'image/emotion/xiaosha_emotion/4.gif', + 'image/emotion/xiaosha_emotion/5.gif', + 'image/emotion/xiaosha_emotion/6.gif', + 'image/emotion/xiaosha_emotion/7.gif', + 'image/emotion/xiaosha_emotion/8.gif', + 'image/emotion/xiaosha_emotion/9.gif', + 'image/emotion/xiaosha_emotion/10.gif', + 'image/emotion/xiaosha_emotion/11.gif', + 'image/emotion/xiaosha_emotion/12.gif', + 'image/emotion/xiaosha_emotion/13.gif', + 'image/emotion/xiaosha_emotion/14.gif', + 'image/emotion/xiaosha_emotion/15.gif', + 'image/emotion/xiaosha_emotion/16.gif', + 'image/emotion/xiaosha_emotion/17.gif', + 'image/emotion/xiaosha_emotion/18.gif', + 'image/emotion/xiaosha_emotion/19.gif', + 'image/emotion/xiaosha_emotion/20.gif', + 'image/emotion/xiaotao_emotion/1.gif', + 'image/emotion/xiaotao_emotion/2.gif', + 'image/emotion/xiaotao_emotion/3.gif', + 'image/emotion/xiaotao_emotion/4.gif', + 'image/emotion/xiaotao_emotion/5.gif', + 'image/emotion/xiaotao_emotion/6.gif', + 'image/emotion/xiaotao_emotion/7.gif', + 'image/emotion/xiaotao_emotion/8.gif', + 'image/emotion/xiaotao_emotion/9.gif', + 'image/emotion/xiaotao_emotion/10.gif', + 'image/emotion/xiaotao_emotion/11.gif', + 'image/emotion/xiaotao_emotion/12.gif', + 'image/emotion/xiaotao_emotion/13.gif', + 'image/emotion/xiaotao_emotion/14.gif', + 'image/emotion/xiaotao_emotion/15.gif', + 'image/emotion/xiaotao_emotion/16.gif', + 'image/emotion/xiaotao_emotion/17.gif', + 'image/emotion/xiaotao_emotion/18.gif', + 'image/emotion/xiaotao_emotion/19.gif', + 'image/emotion/xiaotao_emotion/20.gif', 'image/mode/boss/card/chixueqingfeng.png', 'image/mode/boss/card/chiyanzhenhunqin.png', diff --git a/game/game.js b/game/game.js index 730e6187d..cec411268 100644 --- a/game/game.js +++ b/game/game.js @@ -57,6 +57,8 @@ shibing_emotion:15, guojia_emotion:20, zhenji_emotion:20, + xiaosha_emotion:20, + xiaotao_emotion:20, }, animate:{ skill:{}, @@ -5062,6 +5064,7 @@ '2v2':'2v2', '3v3':'3v3', '4v4':'4v4', + 'guandu':'官渡', }, frequent:true }, @@ -5197,6 +5200,7 @@ four:'对抗', three:'统率', two:'欢乐', + guandu:'官渡', jiange:'剑阁', siguo:'四国', standard:'自由' @@ -9789,6 +9793,8 @@ guojia_emotion:'郭嘉表情', zhenji_emotion:'甄姬表情', shibing_emotion:'士兵表情', + xiaosha_emotion:'小杀表情', + xiaotao_emotion:'小桃表情', pause:'暂停', config:'选项', @@ -10097,7 +10103,7 @@ cardsGotoSpecial:function(){ game.getGlobalHistory().cardMove.push(event); for(var i=0;i1){ if(!info.multitarget){ - if(!event.fixedSeat){ + if(!event.fixedSeat&&!sort){ targets.sortBySeat(player); } if(animate) for(var i=0;i1){ - event.sortTarget(true); - } var info=get.info(card,false); + if(num==0&&targets.length>1){ + event.sortTarget(true,true); + } if(targets[num]&&targets[num].isDead()) return; if(targets[num]&&targets[num].isOut()) return; if(targets[num]&&targets[num].removed) return; @@ -19736,6 +19754,7 @@ 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; @@ -20932,7 +20951,7 @@ hasZhuSkill:function(skill,player){ if(!this.hasSkill(skill)) return false; var mode=get.mode(); - if(mode=='identity'||(mode=='versus'&&_status.mode=='four')){ + if(mode=='identity'||(mode=='versus'&&(_status.mode=='four'||_status.mode=='guandu'))){ if(mode!='identity'){ if(player&&this.side!=player.side) return false; } @@ -24953,6 +24972,7 @@ if((player==_status.roundStart||_status.roundSkipped)&&!trigger.skill){ delete _status.roundSkipped; game.roundNumber++; + trigger._roundStart=true; game.updateRoundNumber(); for(var i=0;i0){ @@ -25968,6 +25988,7 @@ } ui.arena.setNumber(state.number); _status.mode=state.mode; + lib.inpile=_state.inpile; var pos=state.players[observe||game.onlineID].position; for(var i in state.players){ var info=state.players[i]; @@ -32066,9 +32087,10 @@ }); }, updateRoundNumber:function(){ - game.broadcastAll(function(num1,num2){ + game.broadcastAll(function(num1,num2,top){ if(ui.cardPileNumber) ui.cardPileNumber.innerHTML=num1+'轮 剩余牌: '+num2; - },game.roundNumber,ui.cardPile.childNodes.length); + _status.pileTop=top; + },game.roundNumber,ui.cardPile.childNodes.length,ui.cardPile.firstChild); }, asyncDraw:function(players,num,drawDeck,bottom){ for(var i=0;i官渡)', + '邢道荣,新孙鲁育', + 'bug修复', ], files:[ diff --git a/image/character.TXT b/image/character.TXT new file mode 100644 index 000000000..b029e8e1d --- /dev/null +++ b/image/character.TXT @@ -0,0 +1,4 @@ +chunyuqiong.jpg +lvkuanglvxiang.jpg +re_sunluyu.jpg +sp_xuyou.jpg diff --git a/image/character/chunyuqiong.jpg b/image/character/chunyuqiong.jpg new file mode 100644 index 000000000..966fd710a Binary files /dev/null and b/image/character/chunyuqiong.jpg differ diff --git a/image/character/lvkuanglvxiang.jpg b/image/character/lvkuanglvxiang.jpg new file mode 100644 index 000000000..ff00e7b05 Binary files /dev/null and b/image/character/lvkuanglvxiang.jpg differ diff --git a/image/character/re_sunluyu.jpg b/image/character/re_sunluyu.jpg new file mode 100644 index 000000000..1e4a84b46 Binary files /dev/null and b/image/character/re_sunluyu.jpg differ diff --git a/image/character/sp_xuyou.jpg b/image/character/sp_xuyou.jpg new file mode 100644 index 000000000..6903f5846 Binary files /dev/null and b/image/character/sp_xuyou.jpg differ diff --git a/image/emotion/xiaosha_emotion/1.gif b/image/emotion/xiaosha_emotion/1.gif new file mode 100644 index 000000000..a41b9b200 Binary files /dev/null and b/image/emotion/xiaosha_emotion/1.gif differ diff --git a/image/emotion/xiaosha_emotion/10.gif b/image/emotion/xiaosha_emotion/10.gif new file mode 100644 index 000000000..fbdc76739 Binary files /dev/null and b/image/emotion/xiaosha_emotion/10.gif differ diff --git a/image/emotion/xiaosha_emotion/11.gif b/image/emotion/xiaosha_emotion/11.gif new file mode 100644 index 000000000..d667f7e10 Binary files /dev/null and b/image/emotion/xiaosha_emotion/11.gif differ diff --git a/image/emotion/xiaosha_emotion/12.gif b/image/emotion/xiaosha_emotion/12.gif new file mode 100644 index 000000000..107f1e0d2 Binary files /dev/null and b/image/emotion/xiaosha_emotion/12.gif differ diff --git a/image/emotion/xiaosha_emotion/13.gif b/image/emotion/xiaosha_emotion/13.gif new file mode 100644 index 000000000..bdc7f9139 Binary files /dev/null and b/image/emotion/xiaosha_emotion/13.gif differ diff --git a/image/emotion/xiaosha_emotion/14.gif b/image/emotion/xiaosha_emotion/14.gif new file mode 100644 index 000000000..96a970f8e Binary files /dev/null and b/image/emotion/xiaosha_emotion/14.gif differ diff --git a/image/emotion/xiaosha_emotion/15.gif b/image/emotion/xiaosha_emotion/15.gif new file mode 100644 index 000000000..f83847762 Binary files /dev/null and b/image/emotion/xiaosha_emotion/15.gif differ diff --git a/image/emotion/xiaosha_emotion/16.gif b/image/emotion/xiaosha_emotion/16.gif new file mode 100644 index 000000000..9e9ba7691 Binary files /dev/null and b/image/emotion/xiaosha_emotion/16.gif differ diff --git a/image/emotion/xiaosha_emotion/17.gif b/image/emotion/xiaosha_emotion/17.gif new file mode 100644 index 000000000..869d24216 Binary files /dev/null and b/image/emotion/xiaosha_emotion/17.gif differ diff --git a/image/emotion/xiaosha_emotion/18.gif b/image/emotion/xiaosha_emotion/18.gif new file mode 100644 index 000000000..c33db0b6f Binary files /dev/null and b/image/emotion/xiaosha_emotion/18.gif differ diff --git a/image/emotion/xiaosha_emotion/19.gif b/image/emotion/xiaosha_emotion/19.gif new file mode 100644 index 000000000..2446c8f2b Binary files /dev/null and b/image/emotion/xiaosha_emotion/19.gif differ diff --git a/image/emotion/xiaosha_emotion/2.gif b/image/emotion/xiaosha_emotion/2.gif new file mode 100644 index 000000000..caa61e4a3 Binary files /dev/null and b/image/emotion/xiaosha_emotion/2.gif differ diff --git a/image/emotion/xiaosha_emotion/20.gif b/image/emotion/xiaosha_emotion/20.gif new file mode 100644 index 000000000..482e18a3a Binary files /dev/null and b/image/emotion/xiaosha_emotion/20.gif differ diff --git a/image/emotion/xiaosha_emotion/3.gif b/image/emotion/xiaosha_emotion/3.gif new file mode 100644 index 000000000..14fbc3126 Binary files /dev/null and b/image/emotion/xiaosha_emotion/3.gif differ diff --git a/image/emotion/xiaosha_emotion/4.gif b/image/emotion/xiaosha_emotion/4.gif new file mode 100644 index 000000000..fc8619e6b Binary files /dev/null and b/image/emotion/xiaosha_emotion/4.gif differ diff --git a/image/emotion/xiaosha_emotion/5.gif b/image/emotion/xiaosha_emotion/5.gif new file mode 100644 index 000000000..721445304 Binary files /dev/null and b/image/emotion/xiaosha_emotion/5.gif differ diff --git a/image/emotion/xiaosha_emotion/6.gif b/image/emotion/xiaosha_emotion/6.gif new file mode 100644 index 000000000..196b422fc Binary files /dev/null and b/image/emotion/xiaosha_emotion/6.gif differ diff --git a/image/emotion/xiaosha_emotion/7.gif b/image/emotion/xiaosha_emotion/7.gif new file mode 100644 index 000000000..cca0e5fb6 Binary files /dev/null and b/image/emotion/xiaosha_emotion/7.gif differ diff --git a/image/emotion/xiaosha_emotion/8.gif b/image/emotion/xiaosha_emotion/8.gif new file mode 100644 index 000000000..2b30e68b7 Binary files /dev/null and b/image/emotion/xiaosha_emotion/8.gif differ diff --git a/image/emotion/xiaosha_emotion/9.gif b/image/emotion/xiaosha_emotion/9.gif new file mode 100644 index 000000000..b449e938b Binary files /dev/null and b/image/emotion/xiaosha_emotion/9.gif differ diff --git a/image/emotion/xiaotao_emotion/1.gif b/image/emotion/xiaotao_emotion/1.gif new file mode 100644 index 000000000..1caaf3f2b Binary files /dev/null and b/image/emotion/xiaotao_emotion/1.gif differ diff --git a/image/emotion/xiaotao_emotion/10.gif b/image/emotion/xiaotao_emotion/10.gif new file mode 100644 index 000000000..82647f878 Binary files /dev/null and b/image/emotion/xiaotao_emotion/10.gif differ diff --git a/image/emotion/xiaotao_emotion/11.gif b/image/emotion/xiaotao_emotion/11.gif new file mode 100644 index 000000000..64fc5e026 Binary files /dev/null and b/image/emotion/xiaotao_emotion/11.gif differ diff --git a/image/emotion/xiaotao_emotion/12.gif b/image/emotion/xiaotao_emotion/12.gif new file mode 100644 index 000000000..3a3c83e05 Binary files /dev/null and b/image/emotion/xiaotao_emotion/12.gif differ diff --git a/image/emotion/xiaotao_emotion/13.gif b/image/emotion/xiaotao_emotion/13.gif new file mode 100644 index 000000000..410ccbf24 Binary files /dev/null and b/image/emotion/xiaotao_emotion/13.gif differ diff --git a/image/emotion/xiaotao_emotion/14.gif b/image/emotion/xiaotao_emotion/14.gif new file mode 100644 index 000000000..afcbf59dc Binary files /dev/null and b/image/emotion/xiaotao_emotion/14.gif differ diff --git a/image/emotion/xiaotao_emotion/15.gif b/image/emotion/xiaotao_emotion/15.gif new file mode 100644 index 000000000..b10a36b6d Binary files /dev/null and b/image/emotion/xiaotao_emotion/15.gif differ diff --git a/image/emotion/xiaotao_emotion/16.gif b/image/emotion/xiaotao_emotion/16.gif new file mode 100644 index 000000000..5aca02060 Binary files /dev/null and b/image/emotion/xiaotao_emotion/16.gif differ diff --git a/image/emotion/xiaotao_emotion/17.gif b/image/emotion/xiaotao_emotion/17.gif new file mode 100644 index 000000000..414e595b7 Binary files /dev/null and b/image/emotion/xiaotao_emotion/17.gif differ diff --git a/image/emotion/xiaotao_emotion/18.gif b/image/emotion/xiaotao_emotion/18.gif new file mode 100644 index 000000000..a6e88faa7 Binary files /dev/null and b/image/emotion/xiaotao_emotion/18.gif differ diff --git a/image/emotion/xiaotao_emotion/19.gif b/image/emotion/xiaotao_emotion/19.gif new file mode 100644 index 000000000..b6c7a2e68 Binary files /dev/null and b/image/emotion/xiaotao_emotion/19.gif differ diff --git a/image/emotion/xiaotao_emotion/2.gif b/image/emotion/xiaotao_emotion/2.gif new file mode 100644 index 000000000..b68ad9dad Binary files /dev/null and b/image/emotion/xiaotao_emotion/2.gif differ diff --git a/image/emotion/xiaotao_emotion/20.gif b/image/emotion/xiaotao_emotion/20.gif new file mode 100644 index 000000000..08c48d597 Binary files /dev/null and b/image/emotion/xiaotao_emotion/20.gif differ diff --git a/image/emotion/xiaotao_emotion/3.gif b/image/emotion/xiaotao_emotion/3.gif new file mode 100644 index 000000000..a6e5aceee Binary files /dev/null and b/image/emotion/xiaotao_emotion/3.gif differ diff --git a/image/emotion/xiaotao_emotion/4.gif b/image/emotion/xiaotao_emotion/4.gif new file mode 100644 index 000000000..8397c9bba Binary files /dev/null and b/image/emotion/xiaotao_emotion/4.gif differ diff --git a/image/emotion/xiaotao_emotion/5.gif b/image/emotion/xiaotao_emotion/5.gif new file mode 100644 index 000000000..3f5de53b5 Binary files /dev/null and b/image/emotion/xiaotao_emotion/5.gif differ diff --git a/image/emotion/xiaotao_emotion/6.gif b/image/emotion/xiaotao_emotion/6.gif new file mode 100644 index 000000000..ba0a166d8 Binary files /dev/null and b/image/emotion/xiaotao_emotion/6.gif differ diff --git a/image/emotion/xiaotao_emotion/7.gif b/image/emotion/xiaotao_emotion/7.gif new file mode 100644 index 000000000..6dbbb749b Binary files /dev/null and b/image/emotion/xiaotao_emotion/7.gif differ diff --git a/image/emotion/xiaotao_emotion/8.gif b/image/emotion/xiaotao_emotion/8.gif new file mode 100644 index 000000000..d42409f5d Binary files /dev/null and b/image/emotion/xiaotao_emotion/8.gif differ diff --git a/image/emotion/xiaotao_emotion/9.gif b/image/emotion/xiaotao_emotion/9.gif new file mode 100644 index 000000000..b9e86a627 Binary files /dev/null and b/image/emotion/xiaotao_emotion/9.gif differ diff --git a/mode/guozhan.js b/mode/guozhan.js index 95833f12e..1897b168a 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -7151,7 +7151,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ game.players[i].identity='unknown'; game.players[i].node.name.show(); game.players[i].node.name2.show(); - game.players[i]._group=lib.character[game.players[i].name1][1]; + game.players[i]._group=lib.character[game.players[i].name2][1]; for(var j=0;j0; + }, + content:function(){ + if(trigger.name=='phaseDraw') trigger.num--; + else player.draw(); + }, + }, + zhanyanliangzhuwenchou:{ + trigger:{player:'phaseBegin'}, + silent:true, + content:function(){ + 'step 0' + player.chooseUseTarget({ + name:'juedou', + isCard:true, + storage:{nowuxie:true} + }, + '选择一名角色,视为对其使用【决斗】','或点【取消】失去1点体力'); + 'step 1' + if(!result.bool) player.loseHp(); + }, + }, + shishengshibai:{ + mod:{ + aiOrder:function(player,card,num){ + if(_status.shishengshibai&&_status.shishengshibai%10==9){ + if(['sha','tao','guohe','shunshou','tunliang','wuzhong','juedou','yuanjun'].contains(card.name)) return num+15; + } + }, + }, + trigger:{ + player:['useCard1','useCardToTargeted'], + }, + silent:true, + filter:function(event,player,name){ + if(name=='useCard1') return true; + if(!event.parent.shishengshibai||event.targets.length!=event.parent.triggeredTargets4.length) return false; + if(!event.targets||!event.targets.length||['delay','equip'].contains(get.type(event.card))) return false; + return true; + }, + content:function(){ + if(event.triggername=='useCard1'){ + if(!_status.shishengshibai) _status.shishengshibai=0; + _status.shishengshibai++; + game.broadcastAll(function(num){ + if(ui.guanduInfo) ui.guanduInfo.innerHTML='当前事件:十胜十败('+num+')'; + },_status.shishengshibai); + if(_status.shishengshibai%10==0) trigger.shishengshibai=true; + } + else{ + trigger.getParent().targets=trigger.getParent().targets.concat(trigger.targets); + trigger.getParent().triggeredTargets4=trigger.getParent().triggeredTargets4.concat(trigger.targets); + } + }, + ai:{ + result:{ + player:function(card,player,target){ + if(_status.shishengshibai&&_status.shishengshibai%10==9&&card.name=='tiesuo') return 'zerotarget'; + }, + }, + }, + }, wenji:{ trigger:{global:'phaseUseBegin'}, filter:function(event,player){ @@ -5216,6 +5553,60 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, card:{ + tunliang:{ + audio:true, + fullskin:true, + type:'trick', + enable:true, + selectTarget:[1,3], + filterTarget:true, + content:function(){ + target.draw(); + }, + ai:{ + basic:{ + order:7.2, + useful:4.5, + value:9.2 + }, + result:{ + target:1, + }, + tag:{ + draw:1 + } + } + }, + yuanjun:{ + fullskin:true, + type:'trick', + selectTarget:[1,2], + enable:true, + filterTarget:function(card,player,target){ + return target!=player&&target.hp