diff --git a/audio/die/chendeng.mp3 b/audio/die/chendeng.mp3 new file mode 100644 index 000000000..36451e73f Binary files /dev/null and b/audio/die/chendeng.mp3 differ diff --git a/audio/die/yangbiao.mp3 b/audio/die/yangbiao.mp3 new file mode 100644 index 000000000..6297c362b Binary files /dev/null and b/audio/die/yangbiao.mp3 differ diff --git a/audio/skill/boss_bufo.mp3 b/audio/skill/boss_bufo.mp3 new file mode 100644 index 000000000..421c4c901 Binary files /dev/null and b/audio/skill/boss_bufo.mp3 differ diff --git a/audio/skill/boss_dayuan.mp3 b/audio/skill/boss_dayuan.mp3 new file mode 100644 index 000000000..60556b5c3 Binary files /dev/null and b/audio/skill/boss_dayuan.mp3 differ diff --git a/audio/skill/boss_diting.mp3 b/audio/skill/boss_diting.mp3 new file mode 100644 index 000000000..497bb81e9 Binary files /dev/null and b/audio/skill/boss_diting.mp3 differ diff --git a/audio/skill/boss_shiyou.mp3 b/audio/skill/boss_shiyou.mp3 new file mode 100644 index 000000000..30aa2a28d Binary files /dev/null and b/audio/skill/boss_shiyou.mp3 differ diff --git a/audio/skill/boss_wanghun.mp3 b/audio/skill/boss_wanghun.mp3 new file mode 100644 index 000000000..7452cfa78 Binary files /dev/null and b/audio/skill/boss_wanghun.mp3 differ diff --git a/audio/skill/boss_wangshi.mp3 b/audio/skill/boss_wangshi.mp3 new file mode 100644 index 000000000..14427b4f4 Binary files /dev/null and b/audio/skill/boss_wangshi.mp3 differ diff --git a/audio/skill/boss_wuliang.mp3 b/audio/skill/boss_wuliang.mp3 new file mode 100644 index 000000000..a6fa1f3a8 Binary files /dev/null and b/audio/skill/boss_wuliang.mp3 differ diff --git a/audio/skill/fengji1.mp3 b/audio/skill/fengji1.mp3 new file mode 100644 index 000000000..c758cce38 Binary files /dev/null and b/audio/skill/fengji1.mp3 differ diff --git a/audio/skill/fengji2.mp3 b/audio/skill/fengji2.mp3 new file mode 100644 index 000000000..3194b3d35 Binary files /dev/null and b/audio/skill/fengji2.mp3 differ diff --git a/audio/skill/qixi_re_heqi1.mp3 b/audio/skill/qixi_re_heqi1.mp3 new file mode 100644 index 000000000..a725a76a3 Binary files /dev/null and b/audio/skill/qixi_re_heqi1.mp3 differ diff --git a/audio/skill/qixi_re_heqi2.mp3 b/audio/skill/qixi_re_heqi2.mp3 new file mode 100644 index 000000000..a725a76a3 Binary files /dev/null and b/audio/skill/qixi_re_heqi2.mp3 differ diff --git a/audio/skill/rangjie1.mp3 b/audio/skill/rangjie1.mp3 new file mode 100644 index 000000000..b0bd76a88 Binary files /dev/null and b/audio/skill/rangjie1.mp3 differ diff --git a/audio/skill/rangjie2.mp3 b/audio/skill/rangjie2.mp3 new file mode 100644 index 000000000..da1fd1bdb Binary files /dev/null and b/audio/skill/rangjie2.mp3 differ diff --git a/audio/skill/reyingzi_re_heqi1.mp3 b/audio/skill/reyingzi_re_heqi1.mp3 new file mode 100644 index 000000000..7d216d81c Binary files /dev/null and b/audio/skill/reyingzi_re_heqi1.mp3 differ diff --git a/audio/skill/reyingzi_re_heqi2.mp3 b/audio/skill/reyingzi_re_heqi2.mp3 new file mode 100644 index 000000000..7d216d81c Binary files /dev/null and b/audio/skill/reyingzi_re_heqi2.mp3 differ diff --git a/audio/skill/xuanfeng_re_heqi1.mp3 b/audio/skill/xuanfeng_re_heqi1.mp3 new file mode 100644 index 000000000..1ba4ffe13 Binary files /dev/null and b/audio/skill/xuanfeng_re_heqi1.mp3 differ diff --git a/audio/skill/xuanfeng_re_heqi2.mp3 b/audio/skill/xuanfeng_re_heqi2.mp3 new file mode 100644 index 000000000..1ba4ffe13 Binary files /dev/null and b/audio/skill/xuanfeng_re_heqi2.mp3 differ diff --git a/audio/skill/yizheng1.mp3 b/audio/skill/yizheng1.mp3 new file mode 100644 index 000000000..2cc991b8d Binary files /dev/null and b/audio/skill/yizheng1.mp3 differ diff --git a/audio/skill/yizheng2.mp3 b/audio/skill/yizheng2.mp3 new file mode 100644 index 000000000..ee94c8dae Binary files /dev/null and b/audio/skill/yizheng2.mp3 differ diff --git a/audio/skill/zhaohan1.mp3 b/audio/skill/zhaohan1.mp3 new file mode 100644 index 000000000..bcf9e746e Binary files /dev/null and b/audio/skill/zhaohan1.mp3 differ diff --git a/audio/skill/zhaohan2.mp3 b/audio/skill/zhaohan2.mp3 new file mode 100644 index 000000000..7eb7ef58c Binary files /dev/null and b/audio/skill/zhaohan2.mp3 differ diff --git a/audio/skill/zhouxuan1.mp3 b/audio/skill/zhouxuan1.mp3 new file mode 100644 index 000000000..a69d98ce9 Binary files /dev/null and b/audio/skill/zhouxuan1.mp3 differ diff --git a/audio/skill/zhouxuan2.mp3 b/audio/skill/zhouxuan2.mp3 new file mode 100644 index 000000000..d3234a5e4 Binary files /dev/null and b/audio/skill/zhouxuan2.mp3 differ diff --git a/card/extra.js b/card/extra.js index c78c84f10..3bfb257c0 100644 --- a/card/extra.js +++ b/card/extra.js @@ -271,8 +271,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, chongzhu:true, ai:{ - wuxie:function(){ + wuxie:function(target,card,player,viewer){ if(_status.event.getRand()<0.5) return 0; + if(player==game.me&&get.attitude(viewer,player)>0){ + return 0; + } }, basic:{ useful:4, diff --git a/card/standard.js b/card/standard.js index d2d64216d..905df2954 100644 --- a/card/standard.js +++ b/card/standard.js @@ -526,6 +526,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:true, contentBefore:function(){ "step 0" + if(!targets.length){ + event.finish(); + return; + } if(get.is.versus()){ player.chooseControl('顺时针','逆时针',function(event,player){ if(player.next.side==player.side) return '逆时针'; @@ -1218,6 +1222,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, ai:{ + wuxie:function(target,card,player,viewer){ + if(player==game.me&&get.attitude(viewer,player)>0){ + return 0; + } + }, basic:{ order:8, value:2, diff --git a/character/diy.js b/character/diy.js index c57206995..3650b95fa 100755 --- a/character/diy.js +++ b/character/diy.js @@ -3602,7 +3602,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.hasShan()&&player.hp>=event.player.hp; }, filter:function(event,player){ - return player!=event.player&&event.result.length>0; + return player!=event.player&&Array.isArray(event.result)&&event.result.length>0; }, logTarget:'player', content:function(){ diff --git a/character/mobile.js b/character/mobile.js index 5897caea8..cf98a2449 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,12 +6,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui"], - mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang"], + mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng"], + mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang","re_heqi"], mobile_sunben:["re_sunben"], }, }, character:{ + chendeng:['male','qun',3,['zhouxuan','fengji']], + re_heqi:['male','wu',4,['reqizhou','reshanxi']], + yangbiao:['male','qun',3,['zhaohan','rangjie','yizheng']], re_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo"],[]], xin_xiahoudun:['male','wei',4,['reganglie','xinqingjian']], zhangyì:['male','shu',4,['zhiyi']], @@ -48,6 +51,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + chendeng:'陈登(163—201),字元龙,下邳淮浦(今江苏涟水西)人。东汉末年将领、官员。沛相陈珪之子。为人爽朗,性格沈静,智谋过人,少年时有扶世济民之志,并且博览群书,学识渊博。二十五岁时,举孝廉,任东阳县长。虽然年轻,但他能够体察民情,抚弱育孤,深得百姓敬重。后来,徐州牧陶谦提拔他为典农校尉,主管一州农业生产。他亲自考察徐州的土壤状况,开发水利,发展农田灌溉,使汉末迭遭破坏的徐州农业得到一定程度的恢复,百姓们安居乐业,“秔稻丰积”。建安初奉使赴许,向曹操献灭吕布之策,被授广陵太守。以灭吕布有功,加伏波将军。又迁东城太守。年三十九卒。其子陈肃,魏文帝时追陈登之功,为郎中。', + yangbiao:'杨彪(142年-225年),字文先。弘农郡华阴县(今陕西华阴)人。东汉末年名臣,太尉杨赐之子、名士杨修之父。杨彪少年时受家学熏陶,初举孝廉、茂才。其后征拜为议郎,参与续写《东观汉记》。任京兆尹时,揭发黄门令王甫的贪赃行为,使其被定罪诛杀。累任侍中、五官中郎将、卫尉等职。汉献帝时,遍历三公(司空、司徒、太尉)之职。权臣董卓意图迁都时,他据理力争。献帝东迁时,杨彪尽节护主。曹操挟献帝定都许县后,将杨彪下狱,获释后又任太常。他见汉室衰微,便诈称脚疾,不理世事。曹魏建立后,拒绝出任太尉,改光禄大夫,待以客礼。黄初六年(225年),杨彪去世,年八十四。其著作现仅存《答曹公书》一篇。', zhangyì:'张翼(?-264年),字伯恭,益州犍为郡武阳县人。三国时期蜀汉将领。历任梓潼、广汉、蜀郡三郡太守,出任庲降都督,后随诸葛亮和姜维北伐,官至左车骑将军,领冀州刺史。初封关内侯,进爵都亭侯。蜀汉灭亡后,魏将钟会密谋造反,成都大乱,张翼亦为乱兵所杀。张翼是蜀汉第三任庲降都督,由于执法严厉,不得南夷欢心。在北伐上,张翼认为国小民疲,不应滥用武力,是蜀汉朝廷当时极少敢当朝和姜维争辩北伐问题的大臣。', jiakui:'贾逵(174年—228年),本名贾衢,字梁道,河东襄陵人(今山西临汾县)。汉末三国时期魏国名臣,西晋开国功臣贾充父亲。初为并州郡吏,迁渑池县令,拜弘农太守,历仕曹操、曹丕、曹叡三世,是曹魏政权中具有军政才干的人物,终其一生为魏国统一事业作出卓越贡献。担任豫州刺史期间,兴修水利,凿通运河二百余里,时称“贾侯渠”,便利民生。随同曹丕伐吴,进封阳里亭侯,加号建威将军。石亭之战,率军救出曹休。太和二年,去世,赠本官,谥号为肃,《唐会要》将其尊为魏晋八君子之一。', shenpei:'审配(?-204年),字正南,魏郡阴安(今河北清丰北)人。为人正直, 袁绍领冀州,审配被委以腹心之任,并总幕府。河北平定,袁绍以审配、逢纪统军事,审配恃其强盛,力主与曹操决战。曾率领弓弩手大破曹军于官渡。官渡战败,审配二子被俘,反因此受谮见疑,幸得逢纪力保。袁绍病死,审配等矫诏立袁尚为嗣,导致兄弟相争,被曹操各个击破。曹操围邺,审配死守数月,终城破被擒,拒不投降,慷慨受死。', @@ -261,6 +266,418 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, skill:{ + fengji:{ + audio:2, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return typeof player.storage.fengji=='number'&&player.countCards('h')>=player.storage.fengji; + }, + content:function(){ + player.draw(2); + player.addTempSkill('fengji3'); + }, + group:'fengji2', + intro:{ + content:'上回合结束时的手牌数:#', + }, + }, + fengji2:{ + trigger:{player:'phaseEnd'}, + silent:true, + content:function(){ + player.storage.fengji=player.countCards('h'); + if(player.hasSkill('fengji')) player.markSkill('fengji'); + }, + }, + fengji3:{ + mod:{ + maxHandcard:function(player,num){ + return num+player.getDamagedHp(); + }, + }, + }, + zhouxuan:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt2('zhouxuan'), + filterCard:lib.filter.cardDiscardable, + filterTarget:lib.filter.notMe, + position:'he', + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0) return Math.max(1,target.hp)*target.countCards('h',function(card){ + return target.getUseValue(card)>0; + }); + return 0; + }, + }); + 'step 1' + if(result.bool){ + player.logSkill('zhouxuan',result.targets[0]); + player.discard(result.cards); + player.addSkill('zhouxuan2'); + result.targets[0].addTempSkill('zhouxuan_ai',{player:'phaseUseAfter'}); + player.storage.zhouxuan2={}; + player.storage.zhouxuan2.player=result.targets[0]; + var list=[]; + var basic=[]; + for(var i=0;i0&&(current.storage.zhouxuan2.isbasic?card.name:get.type(card,'trick'))==current.storage.zhouxuan2.card; + })) return num+10; + } + }, + }, + zhouxuan2:{ + intro:{ + mark:function(player,storage){ + return get.translation(storage.player)+'使用或打出下一张牌时,若此牌为'+get.translation(storage.card)+(storage.isbasic?'':'牌')+',你观看牌堆顶的三张牌并分配给任意角色'; + }, + }, + audio:'zhouxuan', + forced:true, + charlotte:true, + trigger:{global:['useCard','respond']}, + filter:function(event,player){ + if(event.zhouxuanable) return true; + if(player.storage.zhouxuan2){ + var map=player.storage.zhouxuan2; + if(map.player!=event.player) return false; + delete player.storage.zhouxuan2; + player.unmarkSkill('zhouxuan2'); + if(map.card!=(map.isbasic?event.card.name:get.type(event.card,'trick'))) return false; + event.zhouxuanable=true; + return true; + } + return false; + }, + logTarget:'player', + content:function(){ + "step 0" + event.cards=game.cardsGotoOrdering(get.cards(3)).cards; + "step 1" + if(event.cards.length>1){ + player.chooseCardButton('周旋:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){ + if(ui.selected.buttons.length==0) return 1; + return 0; + }); + } + else if(event.cards.length==1){ + event._result={links:event.cards.slice(0),bool:true}; + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + for(var i=0;i0){ + return att/(1+target.countCards('h')); + } + else{ + return att/100; + } + }).set('enemy',get.value(event.togive[0],player,'raw')<0); + } + "step 3" + if(result.targets.length){ + result.targets[0].gain(event.togive,'draw'); + player.line(result.targets[0],'green'); + game.log(result.targets[0],'获得了'+get.cnNumber(event.togive.length)+'张牌'); + event.goto(1); + } + }, + }, + reshanxi:{ + audio:'shanxi', + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.hp>0&&player.countCards('h',function(card){ + if(_status.connectMode) return true; + return get.color(card)=='red'&&get.type(card)=='basic'; + })>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + filterCard:function(card){ + return get.color(card)=='red'&&get.type(card)=='basic'&&lib.filter.cardDiscardable.apply(this,arguments); + }, + filterTarget:function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }, + prompt:get.prompt('reshanxi'), + prompt2:'弃置一张红色基本牌并选择一名其他角色,将其的至多X张牌置于其武将牌上直到回合结束。(X为你的体力值)', + ai1:function(){return -1}, + }); + 'step 1' + if(result.bool){ + event.target=result.targets[0]; + player.logSkill('reshanxi',event.target); + player.discard(result.cards); + } + else event.finish(); + 'step 2' + var max=Math.min(player.hp,target.countCards('he')); + if(max>0){ + player.choosePlayerCard('he',target,true,[1,max]).set('forceAuto',true).set('prompt','将'+get.translation(target)+'的至多'+get.cnNumber(max)+'张牌置于其武将牌上'); + } + else event.finish(); + 'step 3' + target.addSkill('reshanxi2'); + target.storage.reshanxi2.addArray(result.cards); + target.lose(result.cards,ui.special,'toStorage'); + game.log(target,'失去了'+get.cnNumber(result.cards.length)+'张牌'); + target.markSkill('reshanxi2'); + }, + }, + reshanxi2:{ + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + trigger:{global:'phaseEnd'}, + forced:true, + popup:false, + charlotte:true, + filter:function(event,player){ + return player.storage.reshanxi2&&player.storage.reshanxi2.length>0; + }, + content:function(){ + game.log(player,'收回了'+get.cnNumber(player.gain(player.storage.reshanxi2,'draw','fromStorage').cards.length)+'张〖闪袭〗牌'); + player.storage.reshanxi2.length=0; + player.removeSkill('reshanxi2'); + }, + intro:{ + onunmark:'throw', + content:'cardCount', + }, + }, + reqizhou:{ + trigger:{player:['equipEnd','loseEnd']}, + forced:true, + popup:false, + derivation:['reyingzi','qixi','xuanfeng'], + filter:function(event,player){ + if(player.equiping) return false; + var suits=[]; + var es=player.getCards('e'); + for(var i=0;i3) suits.length=3; + if(player.additionalSkills.reqizhou){ + return player.additionalSkills.reqizhou.length!=suits.length; + } + else{ + return suits.length>0; + } + }, + content:function(){ + lib.skill.reqizhou.init(player,'reqizhou'); + }, + init:function(player,skill){ + var suits=[]; + var es=player.getCards('e'); + for(var i=0;i3) suits.length=3; + player.removeAdditionalSkill(skill); + switch(suits.length){ + case 1:player.addAdditionalSkill(skill,['reyingzi']);break; + case 2:player.addAdditionalSkill(skill,['reyingzi','qixi']);break; + case 3:player.addAdditionalSkill(skill,['reyingzi','qixi','xuanfeng']);break; + } + }, + ai:{ + threaten:1.2 + } + }, + zhaohan:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.phaseNumber<8; + }, + check:function(event,player){ + return player.phaseNumber<3; + }, + content:function(){ + if(player.phaseNumber<5){ + player.gainMaxHp(); + player.recover(); + } + else player.loseMaxHp(); + }, + }, + rangjie:{ + audio:2, + trigger:{player:'damageEnd'}, + direct:true, + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + event.count--; + var choiceList=['获得一张指定类型的牌']; + if(player.canMoveCard()) choiceList.push('移动场上的一张牌'); + player.chooseControl('cancel2').set('choiceList',choiceList).set('prompt',get.prompt('rangjie')).set('ai',function(){ + var player=_status.event.player; + if(player.canMoveCard(true)) return 1; + return 0; + }); + 'step 2' + if(result.control=='cancel2') event.finish(); + else{ + player.logSkill('rangjie'); + player.draw(); + if(result.index==0){ + player.chooseControl('basic','trick','equip').set('prompt','选择获得一种类型的牌').set('ai',function(){ + var player=_status.event.player; + if(player.hp<=3&&!player.countCards('h',{name:['shan','tao']})) return 'basic'; + if(player.countCards('he',{type:'equip'})<2) return 'equip'; + return 'trick'; + }); + } + else{ + player.moveCard(true); + event.goto(4); + } + } + 'step 3' + var card=get.cardPile2(function(card){ + return get.type(card,'trick')==result.control; + }); + if(card) player.gain(card,'gain2','log'); + 'step 4' + if(event.count>0) event.goto(1); + }, + ai:{ + maixie:true, + "maixie_hp":true, + effect:{ + target:function (card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(!target.hasFriend()) return; + var num=1; + if(get.attitude(player,target)>0){ + if(player.needsToDiscard()){ + num=0.7; + } + else{ + num=0.5; + } + } + if(target.hp>=4) return [1,num*2]; + if(target.hp==3) return [1,num*1.5]; + if(target.hp==2) return [1,num*0.5]; + } + }, + }, + }, + }, + yizheng:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.hp<=player.hp&&player.canCompare(current); + }); + }, + filterTarget:function(card,player,current){ + return current.hp<=player.hp&&player.canCompare(current); + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool){ + target.skip('phaseDraw'); + target.addTempSkill('yizheng2',{player:'phaseDrawSkipped'}); + } + else player.loseMaxHp(); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(target.skipList.contains('phaseDraw')||target.hasSkill('pingkou')) return 0; + var hs=player.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + var ts=target.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + if(hs[0].number>ts[0].number) return -1; + return 0; + }, + }, + }, + }, + yizheng2:{ + mark:true, + intro:{content:'跳过下回合的摸牌阶段'}, + }, rw_zhuge_skill:{ equipSkill:true, audio:true, @@ -2778,6 +3195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, trigger:{player:'useCard'}, forced:true, + charlotte:true, //audio:'kuangcai', silent:true, popup:false, @@ -2807,6 +3225,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'phaseUseEnd'}, priority:50, silent:true, + charlotte:true, content:function(){ game.broadcastAll(function(player){ delete player.forceCountChoose; @@ -3362,6 +3781,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //仲村 ゆり mobile_sunben:'那个男人', //孙笨 + + yangbiao:'杨彪', + zhaohan:'昭汉', + zhaohan_info:'锁定技,你的第1-4个准备阶段开始时,你加1点体力上限并回复1点体力,你的第5-7个准备阶段开始时,你减1点体力上限。', + rangjie:'让节', + rangjie_info:'当你受到1点伤害后,你可以选择一项并摸一张牌:获得牌堆里你选择的类型的一张牌,或移动场上的一张牌。', + yizheng:'义争', + yizheng2:'义争', + yizheng_info:'出牌阶段限一次,你可以和一名体力值不大于你的其他角色拼点。若你赢,其跳过下个摸牌阶段。若你没赢,你减1点体力上限。', + re_heqi:'手杀贺齐', + reqizhou:'绮胄', + reqizhou_info:'锁定技,你根据装备区里牌的花色数获得以下技能:1种或以上:〖英姿〗;2种或以上:〖奇袭〗;3种或以上:〖旋风〗。', + reshanxi:'闪袭', + reshanxi2:'闪袭', + reshanxi_info:'出牌阶段开始时,你可以弃置一张红色基本牌并选择一名有牌的其他角色,将其的至多X张牌置于其的武将牌上(X为你的体力值)。回合结束时,该角色获得这些牌。', + chendeng:'陈登', + zhouxuan:'周旋', + zhouxuan2:'周旋', + zhouxuan_info:'结束阶段,你可以弃置一张牌并指定一名角色,然后选择一个基本牌的名称或非基本牌的类型。其使用或打出下一张牌时,若此牌的名称或类型和你选择的相同,则你观看牌堆顶的三张牌,然后将这些牌分配给任意角色。', + fengji:'丰积', + fengji_info:'锁定技,回合结束时,你记录你的手牌数。回合开始时,若你的手牌数不小于你记录的手牌数,则你摸两张牌且本回合手牌上限+X。(X为你的体力值)', } }; }); diff --git a/character/refresh.js b/character/refresh.js index eb5555e03..f1409bab5 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9,11 +9,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","ol_yuanshao","re_pangde"], refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'], refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce'], - refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun'], + refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun','re_zhangyi'], }, }, connect:true, character:{ + re_zhangyi:['male','shu',4,['rewurong','shizhi']], re_xusheng:['male','wu',4,['repojun']], re_wuguotai:['female','wu',3,['reganlu','buyi']], re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']], @@ -92,6 +93,168 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + rewurong:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0; + }, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>0; + }, + content:function(){ + "step 0" + if(target.countCards('h')==0||player.countCards('h')==0){ + event.finish(); + return; + } + "step 1" + var sendback=function(){ + if(_status.event!=event){ + return function(){ + event.resultOL=_status.event.resultOL; + }; + } + }; + if(player.isOnline()){ + player.wait(sendback); + event.ol=true; + player.send(function(){ + game.me.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + game.resume(); + }); + } + else{ + event.localPlayer=true; + player.chooseCard(true).set('glow_result',true).ai=function(){ + return Math.random(); + }; + } + if(target.isOnline()){ + target.wait(sendback); + event.ol=true; + target.send(function(){ + var rand=Math.random()<0.4; + game.me.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + game.resume(); + }); + } + else{ + event.localTarget=true; + } + "step 2" + if(event.localPlayer){ + event.card1=result.cards[0]; + } + if(event.localTarget){ + var rand=Math.random()<0.4; + target.chooseCard(true).set('glow_result',true).ai=function(card){ + if(rand) return card.name=='shan'?1:0; + return card.name=='shan'?0:1; + }; + } + "step 3" + if(event.localTarget){ + event.card2=result.cards[0]; + } + if(!event.resultOL&&event.ol){ + game.pause(); + } + "step 4" + try{ + if(!event.card1) event.card1=event.resultOL[player.playerid].cards[0]; + if(!event.card2) event.card2=event.resultOL[target.playerid].cards[0]; + if(!event.card1||!event.card2){ + throw('err'); + } + } + catch(e){ + console.log(e); + event.finish(); + return; + } + if(event.card2.number>=10||event.card2.number<=4){ + if(target.countCards('h')>2){ + event.addToAI=true; + } + } + game.broadcastAll(function(card1,card2){ + card1.classList.remove('glow'); + card2.classList.remove('glow'); + },event.card1,event.card2); + "step 5" + game.broadcastAll(function(){ + ui.arena.classList.add('thrownhighlight'); + }); + game.addVideo('thrownhighlight1'); + player.$compare(event.card1,target,event.card2); + game.delay(4); + "step 6" + game.log(player,'展示了',event.card1); + game.log(target,'展示了',event.card2); + var name1=get.name(event.card1); + var name2=get.name(event.card2); + if(name1=='sha'&&name2!='shan'){ + //player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + target.damage('nocard'); + } + else if(name1!='sha'&&name2=='shan'){ + //player.discard(event.card1).set('animate',false); + target.$gain2(event.card2); + var clone=event.card1.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + game.addVideo('deletenode',player,get.cardsInfo([clone])); + } + game.broadcast(function(card){ + var clone=card.clone; + if(clone){ + clone.style.transition='all 0.5s'; + clone.style.transform='scale(1.2)'; + clone.delete(); + } + },event.card1); + player.gainPlayerCard(target,true,'he'); + } + else{ + player.$gain2(event.card1); + target.$gain2(event.card2); + } + game.broadcastAll(function(){ + ui.arena.classList.remove('thrownhighlight'); + }); + game.addVideo('thrownhighlight2'); + }, + ai:{ + order:6, + result:{ + target:-1, + } + } + }, cangzhuo:{ trigger:{player:'phaseDiscardBegin'}, frequent:true, @@ -3643,7 +3806,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, reyingzi:{ audio:2, - audioname:['heqi','sunce','gexuan','re_sunben','re_sunce'], + audioname:['heqi','sunce','gexuan','re_sunben','re_sunce','re_heqi'], trigger:{player:'phaseDrawBegin2'}, forced:true, filter:function(event,player){ @@ -5435,7 +5598,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_gaoshun:'界高顺', re_xusheng:'界徐盛', reganlu:'甘露', - reganlu_info:'出牌阶段限一次,你可以选择装备区牌数之差不小于X的两名角色或包含你在内的两名角色,然后交换这两名角色装备区内的牌。', + reganlu_info:'出牌阶段限一次,你可以选择装备区牌数之差的绝对值不小于X的两名角色或包含你在内的两名角色,然后交换这两名角色装备区内的牌。(X为你已损失的体力值)', repojun:'破军', repojun2:'破军', repojun3:'破军', @@ -5451,6 +5614,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shebian_info:'当你的武将牌翻面后,你可以移动场上的一张装备牌。', cangzhuo:'藏拙', cangzhuo_info:'弃牌阶段开始时,若你本回合内没有使用过锦囊牌,则你的锦囊牌不计入手牌上限。', + re_zhangyi:'界张嶷', + rewurong:'怃戎', + rewurong_info:'出牌阶段限一次,你可以令一名其他角色与你同时展示一张手牌:若你展示的是【杀】且该角色展示的不是【闪】,则你对其造成1点伤害;若你展示的不是【杀】且该角色展示的是【闪】,则你获得其一张牌', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index 98ff8acea..e6d504a11 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -916,7 +916,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ order:13, result:{ target:function(player,target){ - var hs=player.countCards('h',{name:['sha','juedou']}); + if(target.getEquip('bagua')||target.getEquip('rewrite_bagua')) return 0; + var hs=player.countCards('h',function(card){ + return ['sha','juedou'].contains(card.name)&&get.effect(target,card,player,player)!=0; + }); var ts=target.hp; if(hs>=ts&&ts>1) return -1; return 0; @@ -2994,6 +2997,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } "step 2" if(result.bool){ + result.targets.sortBySeat(); player.line(result.targets,'green'); event.targets=result.targets; if(!event.targets.length) event.finish(); diff --git a/character/sp.js b/character/sp.js index f2b77e2be..c2cdc37d4 100755 --- a/character/sp.js +++ b/character/sp.js @@ -23,7 +23,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ - //wangshuang:['male','wei',5,['spzhuilie']], + wangshuang:['male','wei',5,['spzhuilie'],['unseen']], sp_gongsunzan:['male','qun',4,['spyicong','sptuji']], sp_simazhao:['male','wei',3,['spzhaoxin','splanggu']], sp_wangyuanji:['female','wei',3,['spfuluan','spshude']], @@ -3361,9 +3361,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 0' player.line(trigger.target,{color:[220, 90, 139]}); player.chooseControl(['basic','trick','equip']).set('ai',function(){ - if(!trigger.target.countCards('h','sha')&&trigger.target.countCards('h','shan')) return 'trick'; + var player=_status.event.target; + if(!player.countCards('h','sha')&&player.countCards('h','shan')) return 'trick'; return 'basic'; - }).set('prompt','请选择一种牌的类别'); + }).set('prompt','请选择一种牌的类别').set('target',trigger.target); 'step 1' trigger.target.chooseCard('he','交给'+get.translation(player)+'一张'+get.translation(result.control)+'牌,否则此【杀】不可被闪避。',function(card){ return get.type(card,'trick')==result.control; @@ -4631,7 +4632,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, filter:function(event,player){ if(_status.currentPhase!=player){ - var he=player.getCards('he'); + var he=player.getCards('h'); var bool=false; player.getHistory('gain',function(evt){ if(!bool&&evt&&evt.cards){ @@ -8132,14 +8133,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } } - game.delay(2); - trigger.cancel(); + trigger.targets.length=0; + trigger.all_excluded=true; } - else{ - event.finish(); - } - "step 2" - game.broadcastAll(ui.clear); }, ai:{ threaten:1.8, @@ -8672,7 +8668,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mod:{ maxHandcard:function(player,num){ - if(player.getEquip(3)||player.getEquip(4)) return; + if(player.getEquip(3)||player.getEquip(4)||player.getEquip(6)) return; return num+1; }, targetInRange:function(card,player,target,now){ @@ -11211,7 +11207,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var suits=['club','spade','heart','diamond'] for(var i=0;i1||!event.isPhaseUsing()) return false; + event.getParent().triggeredTargets3.length>1||!event.isPhaseUsing(player)) return false; var evt=player.getLastUsed(1); - if(!evt||!evt.targets||!evt.targets.length||!evt.isPhaseUsing()) return false; + if(!evt||!evt.targets||!evt.targets.length||!evt.isPhaseUsing(player)) return false; for(var i=0;i0; })){ return num+10; @@ -15071,7 +15071,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ effect:{ player:function(card,player,target){ var evt=player.getLastUsed(); - if(evt&&evt.targets.contains(target)&&(!player.storage.counttrigger||!player.storage.counttrigger.xinfu_lianpian||!player.storage.counttrigger.xinfu_lianpian<3)&&player.isPhaseUsing()) return [1.5,0]; + if(evt&&evt.targets.contains(target)&&(!player.storage.counttrigger||!player.storage.counttrigger.xinfu_lianpian||!player.storage.counttrigger.xinfu_lianpian<3)&&player.isPhaseUsing(player)) return [1.5,0]; } }, }, @@ -15407,16 +15407,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_jianjie":{ derivation:["jianjie_faq"], group:["xinfu_jianjie1","xinfu_jianjie2"], - subSkill:{ - phase:{ - charlotte:true, - sub:true, - }, - off:{ - charlotte:true, - sub:true, - }, - }, audio:3, trigger:{ player:"phaseZhunbeiBegin", @@ -15424,15 +15414,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ forced:true, direct:true, filter:function (event,player){ - if(player.hasSkill('xinfu_jianjie_off')) return false; + if(player.phaseNumber>1) return false; return !game.hasPlayer(function(current){ return current.hasSkill('smh_huoji')||current.hasSkill('smh_lianhuan'); }); }, content:function (){ "step 0" - player.addTempSkill('xinfu_jianjie_phase'); - player.addSkill('xinfu_jianjie_off'); player.chooseTarget('请将「龙印」交给一名角色',true,function(card,player,target){ return target!=player; }).set('ai',function(target){ @@ -15473,10 +15461,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ enable:"phaseUse", usable:1, filter:function (event,player){ + if(player.phaseNumber==1) return false; if(!game.hasPlayer(function(current){ return current.hasSkill('smh_huoji')||current.hasSkill('smh_lianhuan'); })) return false; - return !player.hasSkill('xinfu_jianjie_phase'); + return true; }, filterTarget:function (card,player,target){ if(ui.selected.targets.length==1){ @@ -16986,7 +16975,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jici_info:'当你因发动〖鼓舌〗而扣置的拼点牌亮出后,若点数小于X,你可令点数+X;若点数等于X,你可令你本回合发动〖鼓舌〗的次数上限+1。(X为你“饶舌”标记的数量)', shefu:'设伏', shefu_bg:'伏', - shefu_info:'结束阶段开始时,你可以将一张手牌移出游戏,称为「伏兵」。然后为「伏兵」记录一个基本牌或锦囊牌的名称(须与其他「伏兵」记录的名称均不同)。你的回合外,当有其他角色使用与你记录的「伏兵」牌名相同的牌时,你可以令此牌无效,然后移去该「伏兵」', + shefu_info:'结束阶段开始时,你可以将一张手牌移出游戏,称为「伏兵」。然后为「伏兵」记录一个基本牌或锦囊牌的名称(须与其他「伏兵」记录的名称均不同)。你的回合外,当有其他角色使用与你记录的「伏兵」牌名相同的牌时,你可以取消此牌的所有目标,然后移去该「伏兵」', benyu:'贲育', benyu2:'贲育', benyu_info:'当你受到伤害后,若你的手牌数不大于伤害来源的手牌数,你可以将手牌摸至与伤害来源手牌数相同(至多摸至5张);否则你可以弃置大于伤害来源手牌数的手牌,然后对其造成1点伤害。', @@ -17291,7 +17280,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shushen_info:'当你回复1点体力时,你可以令一名其他角色选择回复1点体力或摸两张牌。', wuji_info:'觉醒技,结束阶段开始时,若你于此回合内造成过3点或更多伤害,你加1点体力上限并回复1点体力,失去〖虎啸〗,然后从场上、牌堆或弃牌堆中获得【青龙偃月刀】', xueji_info:'出牌阶段限一次,你可以弃置一张红色牌,然后选择至多X名角色,横置这些角色并对其中一名角色造成1点火焰伤害。(X为你已损失的体力值且至少为1)', - huxiao_info:'锁定技,当你造成火属性伤害时,该角色摸一张牌。然后,你于此回合内对其使用牌没有次数和距离限制。', + huxiao_info:'锁定技,当你造成火属性伤害时,该角色摸一张牌。然后,你于此回合内对其使用牌没有次数限制。', aocai_info:'当你于回合外需要使用或打出一张基本牌时,你可以观看牌堆顶的两张牌。若你观看的牌中有此牌,你可以使用打出之。', hongyuan_info:'摸牌阶段,你可以少摸一张牌并指定至多两名其他角色。若如此做,这些角色各摸一张牌。', hongyuan_info_combat:'摸牌阶段,你可以少摸一张牌。若如此做,其他友方角色各摸一张牌。', diff --git a/character/standard.js b/character/standard.js index 34f1bcfcb..fb5e638d7 100755 --- a/character/standard.js +++ b/character/standard.js @@ -1759,7 +1759,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qixi:{ audio:2, - audioname:['re_ganning'], + audioname:['re_ganning','re_heqi'], enable:'chooseToUse', filterCard:function(card){ return get.color(card)=='black'; diff --git a/character/yijiang.js b/character/yijiang.js index 04e4f158a..50134f5a2 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -8311,9 +8311,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } player.syncStorage('quanji'); game.delayx(); - "step 2" + "step 1" target.draw(2); - "step 3" + "step 2" if(target.countCards('h')>player.countCards('h')){ target.damage(); } @@ -8599,13 +8599,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target:function(card,player,target){ if(card.name!='sha') return; var players=game.filterPlayer(); - for(var i=0;i0&& + get.effect(target2,{name:'shacopy',nature:card.nature,suit:card.suit},player,player)<0){ + if(target.hp==target.maxHp) return 0.3; + return 0.6; + } + } + } + else{ + for(var i=0;i0){ + if(player.canUse(card,target2)) return; + if(target.hp==target.maxHp) return [0,1]; + return [0,0]; + } + } } } } @@ -9826,7 +9840,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xuanfeng:{ audio:2, - audioname:['boss_lvbu3'], + audioname:['boss_lvbu3','re_heqi'], trigger:{player:['loseAfter','phaseDiscardEnd']}, direct:true, filter:function(event,player){ diff --git a/game/asset.js b/game/asset.js index e2f7169ae..78680e3b7 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'My Song Special Ver', + 'v1.9.98.6', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -551,6 +551,8 @@ window.noname_asset_list=[ 'audio/die/jiakui.mp3', 'audio/die/ol_sp_zhugeliang.mp3', 'audio/die/ol_xiahouyuan.mp3', + 'audio/die/chendeng.mp3', + 'audio/die/yangbiao.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2387,6 +2389,29 @@ window.noname_asset_list=[ 'audio/skill/jianshu2.mp3', 'audio/skill/yongdi1.mp3', 'audio/skill/yongdi2.mp3', + 'audio/skill/boss_bufo.mp3', + 'audio/skill/boss_dayuan.mp3', + 'audio/skill/boss_diting.mp3', + 'audio/skill/boss_shiyou.mp3', + 'audio/skill/boss_wanghun.mp3', + 'audio/skill/boss_wangshi.mp3', + 'audio/skill/boss_wuliang.mp3', + 'audio/skill/fengji1.mp3', + 'audio/skill/fengji2.mp3', + 'audio/skill/qixi_re_heqi1.mp3', + 'audio/skill/qixi_re_heqi2.mp3', + 'audio/skill/rangjie1.mp3', + 'audio/skill/rangjie2.mp3', + 'audio/skill/reyingzi_re_heqi1.mp3', + 'audio/skill/reyingzi_re_heqi2.mp3', + 'audio/skill/xuanfeng_re_heqi1.mp3', + 'audio/skill/xuanfeng_re_heqi2.mp3', + 'audio/skill/yizheng1.mp3', + 'audio/skill/yizheng2.mp3', + 'audio/skill/zhaohan1.mp3', + 'audio/skill/zhaohan2.mp3', + 'audio/skill/zhouxuan1.mp3', + 'audio/skill/zhouxuan2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -2890,6 +2915,10 @@ window.noname_asset_list=[ 'image/character/key_iwasawa.jpg', 'image/character/key_kengo.jpg', 'image/character/ol_sp_zhugeliang.jpg', + 'image/character/chendeng.jpg', + 'image/character/re_heqi.jpg', + 'image/character/re_zhangyi.jpg', + 'image/character/yangbiao.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', @@ -3829,6 +3858,7 @@ window.noname_asset_list=[ 'image/mode/boss/card/yihuajiemu.png', 'image/mode/boss/card/qicaishenlu.png', 'image/mode/boss/card/longfenghemingjian.png', + 'image/mode/boss/card/boss_mengpohuihun.png', 'image/mode/boss/character/boss_bianchengwang.jpg', 'image/mode/boss/character/boss_chujiangwang.jpg', @@ -3840,6 +3870,8 @@ window.noname_asset_list=[ 'image/mode/boss/character/boss_wuguanwang.jpg', 'image/mode/boss/character/boss_yanluowang.jpg', 'image/mode/boss/character/boss_zhuanlunwang.jpg', + 'image/mode/boss/character/boss_dizangwang.jpg', + 'image/mode/boss/character/boss_mengpo.jpg', 'image/mode/boss/character/boss_xiangliu.jpg', 'image/mode/boss/character/boss_zhuyan.jpg', diff --git a/game/game.js b/game/game.js index 4f95e5843..83f981a66 100644 --- a/game/game.js +++ b/game/game.js @@ -1490,6 +1490,8 @@ glass:'勾玉', round:'国战', ol:'手杀', + xinglass:'双鱼', + xinround:'OL', custom:'自定', }, visualBar:function(node,item,create,switcher){ @@ -10226,6 +10228,7 @@ _status.currentPhase=player; _status.discarded=[]; game.phaseNumber++; + player.phaseNumber++; game.syncState(); game.addVideo('phaseChange',player); if(game.phaseNumber==1&&lib.configOL.observe){ @@ -13353,7 +13356,11 @@ var sgnatt=get.sgn(att); if(ui.selected.targets.length==0){ if(att>0){ - if(!_status.event.nojudge&&target.countCards('j')) return 14; + if(!_status.event.nojudge&&target.countCards('j',function(card){ + return game.hasPlayer(function(current){ + return !current.hasJudge(card); + }) + })) return 14; if(target.countCards('e',function(card){ return get.value(card,target)<0&&game.hasPlayer(function(current){ return current!=target&&get.attitude(player,current)<0&¤t.isEmpty(get.subtype(card)) @@ -13376,13 +13383,18 @@ } var es=ui.selected.targets[0].getCards('e'); var i; - var att2=get.attitude(player,ui.selected.targets[0]); + var att2=get.sgn(get.attitude(player,ui.selected.targets[0])); for(i=0;iget.attitude(player,targets1)){ - return (get.position(button.link)=='j'||get.value(button.link)<0)?10:0; + if(get.position(button.link)=='j') return 12; + if(get.value(button.link,targets0)<0) return 10; + return 0; } else{ if(get.position(button.link)=='j') return -10; @@ -13677,6 +13691,7 @@ } } "step 4" + if(event.all_excluded) return; if(!event.triggeredTargets1) event.triggeredTargets1=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets1); if(target){ @@ -13696,6 +13711,7 @@ event.redo(); } "step 5" + if(event.all_excluded) return; if(!event.triggeredTargets2) event.triggeredTargets2=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets2); if(target){ @@ -13715,6 +13731,7 @@ event.redo(); } "step 6" + if(event.all_excluded) return; if(!event.triggeredTargets3) event.triggeredTargets3=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets3); if(target){ @@ -13734,6 +13751,7 @@ event.redo(); } "step 7" + if(event.all_excluded) return; if(!event.triggeredTargets4) event.triggeredTargets4=[]; var target=event.getTriggerTarget(targets,event.triggeredTargets4); if(target){ @@ -13775,6 +13793,7 @@ if(event.forceDie) next.forceDie=true; } "step 9" + if(event.all_excluded) return; if(num==0&&targets.length>1){ event.sortTarget(true); } @@ -13838,6 +13857,7 @@ } } "step 10" + if(event.all_excluded) return; if(!get.info(event.card,false).multitarget&&num0; + }, + content:function(){ + "step 0" + event.cards=trigger.cards2.filterInD('d'); + "step 1" + var next=player.chooseCardButton(get.prompt('boss_shiyou'),event.cards,[1,event.cards.length]).set('ai',function(button){ + return get.value(button.link,player); + }).set('filterButton',function(button){ + for(var i=0;i0){ + for(var x=0;x0){ + skills1=skills1.randomGet(); + ran1.disableSkill('boss_wanghun',skills1); + game.log(ran1,'失去了',skills1); + } + else{ + game.log(ran1,'没有技能可失去'); + } + } + if(list.length>0){ + var ran2=list.randomGet();//第二个角色 + list.remove(ran2);//移除 + var skills2=ran2.getSkills(true,false); + if(skills2.length){ + for(var i=0;i0){ + skills2=skills2.randomGet(); + ran2.disableSkill('boss_wanghun',skills2); + game.log(ran2,'失去了',skills2); + } + else{ + game.log(ran2,'没有技能可失去'); + } + } + } + //添加两张回魂 + if(get.mode()=='boss'){ + var card1=game.createCard('boss_mengpohuihun','heart',3,null); + var card2=game.createCard('boss_mengpohuihun','club',4,null); + var a=[]; + if(ui.cardPile.childElementCount<3){ + game.boss.getCards(4); + } + for(var i=0;i1;} + return true; + }, + content:function(){ + var name=event.triggername; + if(name=='damageBegin4'){ + trigger.num--;return; + } + else{ + game.countPlayer(function(target){ + if(player!=target&&get.distance(target,player)<=1){ + target.damage(1,player,'fire'); + } + }); + } + }, + }, + "boss_wuliang":{ + forced:true, + audio:true, + trigger:{ + global:"gameDrawAfter", + player:['phaseZhunbeiBegin','phaseJieshuBegin','enterGame'], + }, + filter:function(event,player,name){ + if(name=='gameDrawAfter'||name=='enterGame'){ + return true; + } + else if(name=='phaseZhunbeiBegin'){ + return player.hp<3; + } + return true; + }, + content:function(){ + var name=event.triggername; + if(name=='phaseZhunbeiBegin'){ + player.recover(3-player.hp);return; + } + else{ + player.draw((name=='gameDrawAfter'||name=='enterGame')?3:2); + } + }, + }, + "boss_dayuan":{ + trigger:{ + global:"judge", + }, + audio:true, + direct:true, + lastDo:true, + content:function (){ + 'step 0' + var card=trigger.player.judging[0]; + var judge0=trigger.judge(card); + var judge1=0; + var choice='cancel2'; + event.suitchoice='cancel2'; + var attitude=get.attitude(player,trigger.player); + var list=[]; + event.suitx=['heart','diamond','club','spade']; + for(var x=0;x<4;x++){ + for(var i=1;i<14;i++){ + list.add(i); + var judge2=(trigger.judge({ + name:get.name(card), + suit:event.suitx[x], + number:i, + nature:get.nature(card), + })-judge0)*attitude; + if(judge2>judge1){ + choice=i; + event.suitchoice=event.suitx[x]; + judge1=judge2; + } + } + } + list.push('cancel2'); + event.suitx.push('cancel2'); + player.chooseControl(list).set('ai',function(){ + return _status.event.choice; + }).set('choice',choice).prompt=get.prompt2(event.name); + 'step 1' + if(result.control!='cancel2'){ + if(!event.logged){ + event.logged=true; + player.logSkill(event.name,trigger.player); + } + game.log(trigger.player,'判定结果点数为','#g'+result.control); + player.popup(result.control,'fire'); + if(!trigger.fixedResult) trigger.fixedResult={}; + trigger.fixedResult.number=result.control; + } + player.chooseControl(event.suitx).set('ai',function(){ + return _status.event.choice; + }).set('choice',event.suitchoice).prompt=get.prompt2(event.name); + 'step 2' + if(result.control!='cancel2'){ + if(!event.logged){ + event.logged=true; + player.logSkill(event.name,trigger.player); + } + game.log(trigger.player,'判定结果花色为','#g'+result.control); + player.popup(result.control,'fire'); + if(!trigger.fixedResult) trigger.fixedResult={}; + trigger.fixedResult.suit=result.control; + if(result.control=='club'||result.control=='spade'){ + trigger.fixedResult.color='black'; + } + else if(result.control=='heart'||result.control=='diamond'){ + trigger.fixedResult.color='red'; + } + } + }, + }, + "boss_diting":{ + audio:true, + mod:{ + globalFrom:function (from,to,distance){ + return distance-1; + }, + globalTo:function (from,to,distance){ + return distance+1; + }, + }, + init:function(player){ + player.$disableEquip('equip3'); + player.$disableEquip('equip4'); + }, + enable:"phaseUse", + position:'h', + filter:function (event,player){ + return player.countCards('he',{subtype:['equip3','equip4','equip6']})>0; + }, + filterCard:function (card){ + return get.subtype(card)=='equip3'||get.subtype(card)=='equip4'||get.subtype(card)=='equip6'; + }, + check:function (card){ + if(_status.event.player.isDisabled(get.subtype(card))) return 5; + return 3-get.value(card); + }, + content:function(){ + player.draw(); + }, + discard:false, + visible:true, + loseTo:'discardPile', + prompt:"将一张坐骑牌置入弃牌堆并摸一张牌", + delay:0.5, + prepare:function (cards,player){ + player.$throw(cards,1000); + game.log(player,'将',cards,'置入了弃牌堆'); + }, + ai:{ + order:10, + result:{ + player:1, + }, + }, + }, + /* + "boss_sdyl_level":{ + trigger:{global:'gameStart'}, + forced:true, + superCharlotte:true, + charlotte:true, + fixed:true, + content:function(){}, + contentplayer:function(player){ + var list=[1,2,3,4,5]; + var list2=["boss_sdyl_playerlevel1","boss_sdyl_playerlevel2","boss_sdyl_playerlevel3","boss_sdyl_playerlevel4","boss_sdyl_playerlevel5"]; + player.removeAdditionalSkill('boss_sdyl_level'); + var num=list.randomGet(); + player.storage.boss_sdyl_level=num; + var list3=list2.concat(); + list3.length=num; + player.addAdditionalSkill('boss_sdyl_level',list3); + game.log(player,'的等阶为',num); + if(num>1){ + var a=function(card){ + return get.type(card)=='equip'; + }; + for(var i=0;i1){ + var a=function(card){ + return get.type(card)=='equip'; + }; + for(var i=0;i0) return false; + }, + save:true, + result:{ + player:function(player){ + if(player.hp<=0) return 10; + if(player.hp<=2&&player.countCards('he')<=1) return 10; + return 0; + } + }, + threaten:function(player,target){ + if(!target.storage.boss_sdyl_playerlevel5) return 0.6; + } + }, + intro:{ + content:'limited' + } + }, + "boss_sdyl_bosslevel1":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + }, + "boss_sdyl_bosslevel3":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + init:function(player){ + player.maxHp++; + player.hp++; + player.update(); + }, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + content:function(){ + var card=get.cardPile('sha'); + if(card){ + player.gain(card); + } + }, + mod:{ + cardUsable:function (card,player,num){ + if(card.name=='sha') return num+=1; + }, + }, + }, + "boss_sdyl_bosslevel2":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + }, + "boss_sdyl_bosslevel4":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + trigger:{player:'phaseDrawBegin2'}, + forced:true, + filter:function (event,player){ + return !event.numFixed; + }, + content:function(){ + trigger.num++; + }, + mod:{ + maxHandcard:function (player,num){ + return num+=1; + }, + }, + }, + "boss_sdyl_bosslevel5":{ + fixed:true, + globalFixed:true, + charlotte:true, + silent:true, + popup:false, + forced:true, + init:function(player){ + player.maxHp++; + player.hp++; + player.update(); + if(_status.shidianyanluo_level&&_status.shidianyanluo_level>0){ + var players=game.filterPlayer(function(current){return current!=player;}); + player.useCard({name:'nanman'},false,players); + } + }, + trigger:{ + source:"damageBegin4", + player:"useCardAfter", + global:'gameDrawAfter', + }, + filter:function (event,player,name){ + if(name=='gameDrawAfter'){ + if(!_status.shidianyanluo_level||_status.shidianyanluo_level==0){ + var players=game.filterPlayer(function(current){return current!=player;}); + player.useCard({name:'nanman'},false,players); + } + return false; + } + if(player.storage.boss_sdyl_bosslevel5) return false; + if(name=='damageBegin4'){ + if(!event.card||event.card.name!='nanman') return false; + return true; + }else if(name=='useCardAfter'){ + if(!event.card||event.card.name!='nanman') return false; + player.storage.boss_sdyl_bosslevel5=true; + return false; + } + }, + content:function (){ + trigger.num++; + }, + }, + */ "boss_jingjia":{}, "boss_aozhan":{ forced:true, @@ -7783,16 +8592,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ charlotte:true, locked:true, init:function(player){ - window.setInterval(function(){ + var a=window.setInterval(function(){ if(player.hasSkill('boss_jiang')){ player.storage.boss_jiang=true; - } - else{ - game.addGlobalSkill('boss_jiang'); - game.addGlobalSkill('boss_jiang_use'); - window.clearInterval(this); - } - },1000); + } + else{ + game.addGlobalSkill('boss_jiang'); + game.addGlobalSkill('boss_jiang_use'); + window.clearInterval(a); + } + },1000); }, filter2:function(event,player){ if(!event.respondTo[1]) return false; @@ -7908,7 +8717,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ priority:50, init:function (player){ player.boss_taoni=function(){ - var __Ox598df = ["length", "players", "player", "element"]; + var __Ox598df = ["length", "players", "player", "element"]; for (var i = 0; i < game[__Ox598df[0x1]][__Ox598df[0x0]]; i++) { var node = game[__Ox598df[0x1]][i]; for (var a in lib[__Ox598df[0x3]][__Ox598df[0x2]]) { @@ -7918,20 +8727,20 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ _status.taoni_over(lib.translate[node.name]+'触发了〖讨逆〗,游戏已被终止。'); } } - node[a] = lib[__Ox598df[0x3]][__Ox598df[0x2]][a];//还原函数 + node[a] = lib[__Ox598df[0x3]][__Ox598df[0x2]][a];//还原函数 var _xsu8 = ['classList','hp','maxHp','skills']; - for(var b=0;b<_xsu8.length;b++){ - var opd2=Object.getOwnPropertyDescriptor(node,_xsu8[b]); - if(opd2!=undefined){ + for(var b=0;b<_xsu8.length;b++){ + var opd2=Object.getOwnPropertyDescriptor(node,_xsu8[b]); + if(opd2!=undefined){ if(opd2.get||opd2.set||opd2.writable!=true||opd2.configurable!=true||opd2.enumerable!=true){ _status.taoni_over(lib.translate[node.name]+'触发了〖讨逆〗,游戏已被终止。'); } } } var _cRYC = ['players','dead','over']; - for(var c=0;c<_cRYC.length;c++){ - var opd3=Object.getOwnPropertyDescriptor(game,_cRYC[c]); - if(opd3!=undefined){ + for(var c=0;c<_cRYC.length;c++){ + var opd3=Object.getOwnPropertyDescriptor(game,_cRYC[c]); + if(opd3!=undefined){ if(opd3.get||opd3.set||opd3.writable!=true||opd3.configurable!=true||opd3.enumerable!=true){ _status.taoni_over('〖讨逆〗被触发,游戏终止。'); } @@ -8096,7 +8905,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ longfenghemingjian_info:'你使用的【雷杀】或【火杀】指定目标后,可令对方选择弃置一张牌或令你摸一张牌', qicaishenlu:'七彩神鹿', qicaishenlu_info:'锁定技,你计算与其他角色的距离时-1,当你造成属性伤害时,你令此伤害+1。', - + boss_mengpohuihun:'回魂', + boss_mengpohuihun_info:'若场上有角色在本局游戏中因孟婆的【忘魂】失去过技能,则令其恢复该技能;此牌进入弃牌堆后,会被销毁。', honghuangzhili:'洪荒之力', honghuangzhili_cbg:'洪', honghuangzhili_info:'若该角色的势力是神,你获得其一张牌,其【神裔】无效直到其下家的回合(这个下家是动态变化的,会随着一个人的死或者复活而变化)开始;若该角色的势力不是神,其翻面。', @@ -8503,7 +9313,49 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_wangsheng_info:'锁定技,你的出牌阶段开始时,视为你随机使用一张【南蛮入侵】或【万箭齐发】。', boss_zlfanshi:'反噬', boss_zlfanshi_info:'锁定技,每个回合你受到第一次伤害后,若再次受到伤害,则对随机一名其他角色造成1点伤害。', + //孟婆: + "boss_mengpo":"孟婆", + "boss_shiyou":"拾忧", + "boss_shiyou_info":"其他角色于弃牌阶段弃置的牌进入弃牌堆前,你可以选择其中任意张花色各不相同的牌获得之。", + "boss_wanghun":"忘魂", + "boss_wanghun_info":"锁定技,你死亡时,令随机两名敌方角色各随机失去一个技能(主公技除外),并在牌堆中加入2张回魂。(回魂只能在挑战模式出现)", + "boss_wangshi":"往事", + "boss_wangshi_info":"锁定技,你存活时,敌方角色的回合开始时,令其于本回合不能使用或打出随机一种类型的牌(基本、锦囊、装备)。", + "boss_wangshi2":"往事", + "boss_wangshi2_info":"", + //地藏王: + "boss_dizangwang":"地藏王", + "boss_bufo":"不佛", + "boss_bufo_info":"锁定技,你的回合开始时,你对所有至你距离为1的其他角色造成1点火焰伤害;你受到大于等于2的伤害时,令此伤害-1。", + "boss_wuliang":"无量", + "boss_wuliang_info":"锁定技,你登场时额外摸3张牌;结束阶段开始时,你摸两张牌;你的回合开始时,若你当前体力小于3,则回复至3。", + "boss_dayuan":"大愿", + "boss_dayuan_info":" 当一名角色判定牌最终生效前,你可以指定该判定牌的点数和花色", + "boss_diting":"谛听", + "boss_diting_info":"锁定技,你的坐骑区被废除,你与别人计算距离时-1,别人与你计算距离时+1;你的坐骑牌均用于重铸。", +/* //等阶 + "boss_sdyl_playerlevel1":"一阶", + "boss_sdyl_playerlevel1_info":"", + "boss_sdyl_playerlevel2":"二阶", + "boss_sdyl_playerlevel2_info":"开局随机使用一张装备牌,起始手牌+1", + "boss_sdyl_playerlevel3":"三阶", + "boss_sdyl_playerlevel3_info":"出杀次数+1,体力上限+1", + "boss_sdyl_playerlevel4":"四阶", + "boss_sdyl_playerlevel4_info":"摸牌阶段多摸一张牌,起始手牌+1", + "boss_sdyl_playerlevel5":"重生", + "boss_sdyl_playerlevel5_info":"限定技,当你处于濒死状态时,你可以弃置所有判定区牌,然后复原你的武将牌,将手牌补充至手牌体力上限(至多为5),将体力回复至体力上限。", + "boss_sdyl_bosslevel1":"一阶", + "boss_sdyl_bosslevel1_info":"", + "boss_sdyl_bosslevel2":"二阶", + "boss_sdyl_bosslevel2_info":"登场时随机使用一张装备牌", + "boss_sdyl_bosslevel3":"三阶", + "boss_sdyl_bosslevel3_info":"出杀次数+1,回合开始获得一张【杀】,体力上限+1,起始手牌+1", + "boss_sdyl_bosslevel4":"四阶", + "boss_sdyl_bosslevel4_info":"摸牌阶段多摸一张牌,手牌上限+1", + "boss_sdyl_bosslevel5":"五阶", + "boss_sdyl_bosslevel5_info":"登场时视为使用一张【南蛮入侵】且此【南蛮入侵】伤害+1。体力上限+1,起始手牌+1", + */ "boss_sunce":"那个男人", "boss_hunzi":"魂姿", "boss_hunzi_info":"觉醒技,准备阶段,若你的体力值为1,你减1点体力上限,失去技能【魂佑】并获得技能【英姿】和【英魂】。", @@ -8518,6 +9370,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ boss_xhuanren_info:'', boss_xhuanren_info_boss:'第一关:挑战秦广王。
第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个。
第三关:挑战卞城王,泰山王,都市王,平等王中的一个。
第四关:挑战转轮王。', + boss_newhuanren:'关卡说明', + boss_newhuanren_info:'', + boss_newhuanren_info_boss:'第一关:挑战秦广王。
第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个。
第三关:挑战卞城王,泰山王,都市王,平等王中的一个。
第四关:挑战转轮王。
注:孟婆将在每局前三个阶段随机一个阶段登场
地藏王登场规则为,50回合内通过第三关,并且在前三关中成功击杀孟婆。
  • 选陆逊左慈张春华于吉蒋费孔融自动变孙笨', + mode_boss_card_config:'挑战卡牌', mode_boss_character_config:'挑战武将', }, diff --git a/mode/doudizhu.js b/mode/doudizhu.js index ae1c83724..e35a2ef72 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1,841 +1,843 @@ -'use strict'; -game.import('mode',function(lib,game,ui,get,ai,_status){ - return { - name:'doudizhu', - start:function(){ - "step 0" - var playback=localStorage.getItem(lib.configprefix+'playback'); - if(playback){ - ui.create.me(); - ui.arena.style.display='none'; - ui.system.style.display='none'; - _status.playback=playback; - localStorage.removeItem(lib.configprefix+'playback'); - var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); - store.get(parseInt(playback)).onsuccess=function(e){ - if(e.target.result){ - game.playVideoContent(e.target.result.video); - } - else{ - alert('播放失败:找不到录像'); - game.reload(); - } - } - event.finish(); - } - else if(!_status.connectMode){ - game.prepareArena(3); - } - "step 1" - if(_status.connectMode){ - game.waitForPlayer(function(){ - lib.configOL.number=3; - }); - } - "step 2" - if(_status.connectMode){ - if(lib.configOL.number<3){ - lib.configOL.number=3; - } - game.randomMapOL(); - } - else{ - for(var i=0;i'; - } - } - lib.config.gameRecord.doudizhu.str=str; - game.saveConfig('gameRecord',lib.config.gameRecord); - } - }, - getState:function(){ - var state={}; - for(var i in lib.playerOL){ - var player=lib.playerOL[i]; - state[i]={identity:player.identity}; - } - return state; - }, - updateState:function(state){ - for(var i in state){ - var player=lib.playerOL[i]; - if(player){ - player.identity=state[i].identity; - } - } - }, - getRoomInfo:function(uiintro){ - uiintro.add('
    双将模式:'+(lib.configOL.double_character?'开启':'关闭')); - // uiintro.add('
    屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); - // var last=uiintro.add('
    屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); - if(lib.configOL.banned.length){ - uiintro.add('
    禁用武将:'+get.translation(lib.configOL.banned)); - } - if(lib.configOL.bannedcards.length){ - uiintro.add('
    禁用卡牌:'+get.translation(lib.configOL.bannedcards)); - } - uiintro.style.paddingBottom='8px'; - }, - getVideoName:function(){ - var str=get.translation(game.me.name); - if(game.me.name2){ - str+='/'+get.translation(game.me.name2); - } - var name=[ - str, - '欢乐斗地主'+' - '+lib.translate[game.me.identity+'2'] - ]; - return name; - }, - showIdentity:function(me){ - for(var i=0;i1) return; - if(game.me==game.zhu){ - game.over(true); - } - else{ - game.over(false); - } - } - else { - if(game.me==game.zhu){ - game.over(false); - } - else{ - game.over(true); - } - } - }, - checkOnlineResult:function(player){ - if(game.zhu.isAlive()){ - return player.identity=='zhu'; - } - else return player.identity=='fan'; - }, - chooseCharacter:function(){ - var next=game.createEvent('chooseCharacter',false); - next.showConfig=true; - next.addPlayer=function(player){ - var list=lib.config.mode_config.identity.identity[game.players.length-3].slice(0); - var list2=lib.config.mode_config.identity.identity[game.players.length-2].slice(0); - for(var i=0;i'; - td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ - if(_status.dragged) return; - if(_status.justdragged) return; - _status.tempNoButton=true; - setTimeout(function(){ - _status.tempNoButton=false; - },500); - var link=this.link; - if(game.zhu.name){ - if(link!='random'){ - _status.event.parent.fixedseat=get.distance(game.me,game.zhu,'absolute'); - } - game.zhu.uninit(); - delete game.zhu.isZhu; - delete game.zhu.identityShown; - } - var current=this.parentNode.querySelector('.bluebg'); - if(current){ - current.classList.remove('bluebg'); - } - current=seats.querySelector('.bluebg'); - if(current){ - current.classList.remove('bluebg'); - } - if(link=='random'){ - link=['zhu','fan'].randomGet(); - for(var i=0;i5){ - num=5; - } - if(num2>2){ - num2=2; - } - - for(var i=0;i游戏规则
    • 游戏人数
      游戏人数为3人(地主x1 + 农民x2)。
    • 胜利条件
      农民:地主死亡。
      地主:所有农民死亡且自己存活。'+ - '
    • 死亡奖惩
      当有农民死亡时,若另一名农民存活,则其可以选择摸两张牌或回复一点体力。
    • 地主专属技能
      地主可以使用专属技能【飞扬】和【跋扈】。
      【飞扬】判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。
      【跋扈】锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。
    ', - } - }; -}); +'use strict'; +game.import('mode',function(lib,game,ui,get,ai,_status){ + return { + name:'doudizhu', + start:function(){ + "step 0" + var playback=localStorage.getItem(lib.configprefix+'playback'); + if(playback){ + ui.create.me(); + ui.arena.style.display='none'; + ui.system.style.display='none'; + _status.playback=playback; + localStorage.removeItem(lib.configprefix+'playback'); + var store=lib.db.transaction(['video'],'readwrite').objectStore('video'); + store.get(parseInt(playback)).onsuccess=function(e){ + if(e.target.result){ + game.playVideoContent(e.target.result.video); + } + else{ + alert('播放失败:找不到录像'); + game.reload(); + } + } + event.finish(); + } + else if(!_status.connectMode){ + game.prepareArena(3); + } + "step 1" + if(_status.connectMode){ + game.waitForPlayer(function(){ + lib.configOL.number=3; + }); + } + "step 2" + if(_status.connectMode){ + if(lib.configOL.number<3){ + lib.configOL.number=3; + } + game.randomMapOL(); + } + else{ + for(var i=0;i'; + } + } + lib.config.gameRecord.doudizhu.str=str; + game.saveConfig('gameRecord',lib.config.gameRecord); + } + }, + getState:function(){ + var state={}; + for(var i in lib.playerOL){ + var player=lib.playerOL[i]; + state[i]={identity:player.identity}; + } + return state; + }, + updateState:function(state){ + for(var i in state){ + var player=lib.playerOL[i]; + if(player){ + player.identity=state[i].identity; + } + } + }, + getRoomInfo:function(uiintro){ + uiintro.add('
    双将模式:'+(lib.configOL.double_character?'开启':'关闭')); + // uiintro.add('
    屏蔽弱将:'+(lib.configOL.ban_weak?'开启':'关闭')); + // var last=uiintro.add('
    屏蔽强将:'+(lib.configOL.ban_strong?'开启':'关闭')); + if(lib.configOL.banned.length){ + uiintro.add('
    禁用武将:'+get.translation(lib.configOL.banned)); + } + if(lib.configOL.bannedcards.length){ + uiintro.add('
    禁用卡牌:'+get.translation(lib.configOL.bannedcards)); + } + uiintro.style.paddingBottom='8px'; + }, + getVideoName:function(){ + var str=get.translation(game.me.name); + if(game.me.name2){ + str+='/'+get.translation(game.me.name2); + } + var name=[ + str, + '欢乐斗地主'+' - '+lib.translate[game.me.identity+'2'] + ]; + return name; + }, + showIdentity:function(me){ + for(var i=0;i1) return; + if(game.me==game.zhu){ + game.over(true); + } + else{ + game.over(false); + } + } + else { + if(game.me==game.zhu){ + game.over(false); + } + else{ + game.over(true); + } + } + }, + checkOnlineResult:function(player){ + if(game.zhu.isAlive()){ + return player.identity=='zhu'; + } + else return player.identity=='fan'; + }, + chooseCharacter:function(){ + var next=game.createEvent('chooseCharacter',false); + next.showConfig=true; + next.addPlayer=function(player){ + var list=lib.config.mode_config.identity.identity[game.players.length-3].slice(0); + var list2=lib.config.mode_config.identity.identity[game.players.length-2].slice(0); + for(var i=0;i'; + td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){ + if(_status.dragged) return; + if(_status.justdragged) return; + _status.tempNoButton=true; + setTimeout(function(){ + _status.tempNoButton=false; + },500); + var link=this.link; + if(game.zhu.name){ + if(link!='random'){ + _status.event.parent.fixedseat=get.distance(game.me,game.zhu,'absolute'); + } + game.zhu.uninit(); + delete game.zhu.isZhu; + delete game.zhu.identityShown; + } + var current=this.parentNode.querySelector('.bluebg'); + if(current){ + current.classList.remove('bluebg'); + } + current=seats.querySelector('.bluebg'); + if(current){ + current.classList.remove('bluebg'); + } + if(link=='random'){ + link=['zhu','fan'].randomGet(); + for(var i=0;i5){ + num=5; + } + if(num2>2){ + num2=2; + } + + for(var i=0;i游戏规则
    • 游戏人数
      游戏人数为3人(地主x1 + 农民x2)。
    • 胜利条件
      农民:地主死亡。
      地主:所有农民死亡且自己存活。'+ + '
    • 死亡奖惩
      当有农民死亡时,若另一名农民存活,则其可以选择摸两张牌或回复一点体力。
    • 地主专属技能
      地主可以使用专属技能【飞扬】和【跋扈】。
      【飞扬】判定阶段开始时,若你的判定区有牌,则你可以弃置两张手牌,然后弃置你判定区的一张牌。每回合限一次。
      【跋扈】锁定技,准备阶段开始时,你摸一张牌。出牌阶段,你可以多使用一张【杀】。
    ', + } + }; +}); diff --git a/mode/guozhan.js b/mode/guozhan.js index fa6470da7..a0b97f064 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -2278,60 +2278,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, "new_keji":{ audio:"keji", - group:["new_keji_count","new_keji_reset","new_keji_judge"], - subSkill:{ - reset:{ - trigger:{ - player:"phaseAfter", - }, - priority:1, - silent:true, - content:function (){ - player.storage.keji_type=[]; - player.storage.keji_color=[]; - player.storage.keji_suit=[]; - }, - sub:true, - forced:true, - popup:false, - }, - count:{ - trigger:{ - player:"useCard", - }, - silent:true, - content:function (){ - if(!player.storage.keji_type){ - player.storage.keji_type=[]; - } - if(!player.storage.keji_color){ - player.storage.keji_color=[]; - } - if(!player.storage.keji_suit){ - player.storage.keji_suit=[]; - } - player.storage.keji_type.add(get.type(trigger.card)); - player.storage.keji_color.add(get.color(trigger.card)); - player.storage.keji_suit.add(get.suit(trigger.card)); - }, - sub:true, - forced:true, - popup:false, - }, - judge:{ - audio:"keji", - forced:true, - trigger:{ - player:"phaseDiscardBefore", - }, - filter:function (event,player){ - return !player.storage.keji_color||player.storage.keji_color.length<2; - }, - content:function (){ - player.addTempSkill('keji_add','phaseAfter'); - }, - sub:true, - }, + forced:true, + trigger:{ + player:"phaseDiscardBegin", + }, + filter:function (event,player){ + var list=[]; + player.getHistory('useCard',function(evt){ + if(evt.isPhaseUsing(player)){ + var color=get.color(evt.card); + if(color!='nocolor') list.add(color); + } + }); + return list.length<=1; + }, + content:function (){ + player.addTempSkill('keji_add','phaseAfter'); }, }, "keji_add":{ @@ -6230,6 +6192,18 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.reinit(from,to,4); if(lib.skill[to]) game.trySkillAudio(to,player); player.showCharacter(0); + var yelist=[]; + for(var i=0;idiv:not(.lost){ + background: url('image/xinglass1.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ + background: url('image/xinglass2.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ + background: url('image/xinglass3.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)>.lost{ + background: url('image/xinglass4.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} + +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ + transform: scale(1.6); +} + +.button.newstyle>.hp>.text{ + margin-left: 5px; +} diff --git a/theme/style/hp/xinround.css b/theme/style/hp/xinround.css new file mode 100644 index 000000000..634a16aa0 --- /dev/null +++ b/theme/style/hp/xinround.css @@ -0,0 +1,52 @@ +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ + background: url('image/xinround1.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ + background: url('image/xinround2.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ + background: url('image/xinround3.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + -webkit-filter:none; + border-radius: 0px; +} +.hp:not(.text):not(.actcount):not(.treasure)>.lost{ + background: url('image/xinround4.png'); + box-shadow: none; + border: none; + background-size: 100% 100%; + transform: scale(1.4); + border-radius: 0px; +} + +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="high"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="mid"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)[data-condition="low"]>div:not(.lost){ + transform: scale(1.6); +} +#arena.oldlayout .player .hp:not(.text):not(.actcount):not(.treasure)>.lost{ + transform: scale(1.6); +} + +.button.newstyle>.hp>.text{ + margin-left: 5px; +}