diff --git a/audio/die/caosong.mp3 b/audio/die/caosong.mp3 new file mode 100644 index 000000000..74eb8914d Binary files /dev/null and b/audio/die/caosong.mp3 differ diff --git a/audio/die/re_taoqian.mp3 b/audio/die/re_taoqian.mp3 new file mode 100644 index 000000000..47fb87ca8 Binary files /dev/null and b/audio/die/re_taoqian.mp3 differ diff --git a/audio/die/re_zhangchunhua.mp3 b/audio/die/re_zhangchunhua.mp3 new file mode 100644 index 000000000..35af062a9 Binary files /dev/null and b/audio/die/re_zhangchunhua.mp3 differ diff --git a/audio/die/xin_handang.mp3 b/audio/die/xin_handang.mp3 new file mode 100644 index 000000000..5b699d503 Binary files /dev/null and b/audio/die/xin_handang.mp3 differ diff --git a/audio/die/zhaozhong.mp3 b/audio/die/zhaozhong.mp3 new file mode 100644 index 000000000..569c9f52b Binary files /dev/null and b/audio/die/zhaozhong.mp3 differ diff --git a/audio/skill/cslilu1.mp3 b/audio/skill/cslilu1.mp3 new file mode 100644 index 000000000..6b2d624c0 Binary files /dev/null and b/audio/skill/cslilu1.mp3 differ diff --git a/audio/skill/cslilu2.mp3 b/audio/skill/cslilu2.mp3 new file mode 100644 index 000000000..754c0812e Binary files /dev/null and b/audio/skill/cslilu2.mp3 differ diff --git a/audio/skill/csyizheng1.mp3 b/audio/skill/csyizheng1.mp3 new file mode 100644 index 000000000..ce9f00178 Binary files /dev/null and b/audio/skill/csyizheng1.mp3 differ diff --git a/audio/skill/csyizheng2.mp3 b/audio/skill/csyizheng2.mp3 new file mode 100644 index 000000000..e92af3b9e Binary files /dev/null and b/audio/skill/csyizheng2.mp3 differ diff --git a/audio/skill/huangkong1.mp3 b/audio/skill/huangkong1.mp3 new file mode 100644 index 000000000..95e646156 Binary files /dev/null and b/audio/skill/huangkong1.mp3 differ diff --git a/audio/skill/huangkong2.mp3 b/audio/skill/huangkong2.mp3 new file mode 100644 index 000000000..88f99e376 Binary files /dev/null and b/audio/skill/huangkong2.mp3 differ diff --git a/audio/skill/rejueqing1.mp3 b/audio/skill/rejueqing1.mp3 new file mode 100644 index 000000000..6d5f70063 Binary files /dev/null and b/audio/skill/rejueqing1.mp3 differ diff --git a/audio/skill/rejueqing2.mp3 b/audio/skill/rejueqing2.mp3 new file mode 100644 index 000000000..8e7017ea6 Binary files /dev/null and b/audio/skill/rejueqing2.mp3 differ diff --git a/audio/skill/reshangshi1.mp3 b/audio/skill/reshangshi1.mp3 new file mode 100644 index 000000000..8344b034b Binary files /dev/null and b/audio/skill/reshangshi1.mp3 differ diff --git a/audio/skill/reshangshi2.mp3 b/audio/skill/reshangshi2.mp3 new file mode 100644 index 000000000..97493fc84 Binary files /dev/null and b/audio/skill/reshangshi2.mp3 differ diff --git a/audio/skill/xingongji1.mp3 b/audio/skill/xingongji1.mp3 new file mode 100644 index 000000000..58a8a6f9b Binary files /dev/null and b/audio/skill/xingongji1.mp3 differ diff --git a/audio/skill/xingongji2.mp3 b/audio/skill/xingongji2.mp3 new file mode 100644 index 000000000..adf067988 Binary files /dev/null and b/audio/skill/xingongji2.mp3 differ diff --git a/audio/skill/xinjiefan1.mp3 b/audio/skill/xinjiefan1.mp3 new file mode 100644 index 000000000..d70000c3a Binary files /dev/null and b/audio/skill/xinjiefan1.mp3 differ diff --git a/audio/skill/xinjiefan2.mp3 b/audio/skill/xinjiefan2.mp3 new file mode 100644 index 000000000..a1b6f32c5 Binary files /dev/null and b/audio/skill/xinjiefan2.mp3 differ diff --git a/audio/skill/yangzhong1.mp3 b/audio/skill/yangzhong1.mp3 new file mode 100644 index 000000000..56ef7e6d0 Binary files /dev/null and b/audio/skill/yangzhong1.mp3 differ diff --git a/audio/skill/yangzhong2.mp3 b/audio/skill/yangzhong2.mp3 new file mode 100644 index 000000000..b518bb713 Binary files /dev/null and b/audio/skill/yangzhong2.mp3 differ diff --git a/audio/skill/yirang_re_taoqian1.mp3 b/audio/skill/yirang_re_taoqian1.mp3 new file mode 100644 index 000000000..affd0feca Binary files /dev/null and b/audio/skill/yirang_re_taoqian1.mp3 differ diff --git a/audio/skill/yirang_re_taoqian2.mp3 b/audio/skill/yirang_re_taoqian2.mp3 new file mode 100644 index 000000000..1ddce906b Binary files /dev/null and b/audio/skill/yirang_re_taoqian2.mp3 differ diff --git a/audio/skill/yixiang_re_taoqian1.mp3 b/audio/skill/yixiang_re_taoqian1.mp3 new file mode 100644 index 000000000..e3cc4fab1 Binary files /dev/null and b/audio/skill/yixiang_re_taoqian1.mp3 differ diff --git a/audio/skill/yixiang_re_taoqian2.mp3 b/audio/skill/yixiang_re_taoqian2.mp3 new file mode 100644 index 000000000..7b46d9b20 Binary files /dev/null and b/audio/skill/yixiang_re_taoqian2.mp3 differ diff --git a/audio/skill/zhaohuo_re_taoqian1.mp3 b/audio/skill/zhaohuo_re_taoqian1.mp3 new file mode 100644 index 000000000..5a78da0f0 Binary files /dev/null and b/audio/skill/zhaohuo_re_taoqian1.mp3 differ diff --git a/audio/skill/zhaohuo_re_taoqian2.mp3 b/audio/skill/zhaohuo_re_taoqian2.mp3 new file mode 100644 index 000000000..5f607e309 Binary files /dev/null and b/audio/skill/zhaohuo_re_taoqian2.mp3 differ diff --git a/character/diy.js b/character/diy.js index 4e1f74e54..1c781dc24 100755 --- a/character/diy.js +++ b/character/diy.js @@ -2502,25 +2502,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){ abyusa_jueqing:{ trigger:{source:'damageBegin2'}, skillAnimation:true, - animationColor:'water', + animationColor:'metal', filter:function(event,player){ return player!=event.player&&!player.hasSkill('abyusa_jueqing_1st'); }, prompt2:function(event,player){ - var num=get.cnNumber(2*event.num); - return '防止即将令其造成的伤害,改为令其失去'+num+'点体力并对自己造成'+num+'点伤害'; + return '令即将对其造成的伤害+'+event.num+',并令自己失去'+get.cnNumber(event.num)+'点体力'; }, check:function(event,player){ - return player.hp>event.num*2&&event.player.hp>event.num&&event.player.hp<=2*event.num&&get.attitude(player,event.player)<0; + return player.hp>event.num&&event.player.hp>event.num&&!event.player.hasSkillTag('filterDamage',null,{ + player:player, + card:event.card, + })&&get.attitude(player,event.player)<0; }, logTarget:'player', content:function(){ - 'step 0' - trigger.cancel(); - trigger.player.loseHp(2*trigger.num); - player.damage(2*trigger.num); - 'step 1' - player.addSkill('abyusa_jueqing_1st'); + player.loseHp(trigger.num); + trigger.num*=2; + var next=game.createEvent('abyusa_jueqing_add',false); + event.next.remove(next); + trigger.after.push(next); + next.player=player; + next.setContent(function(){ + player.addSkill('abyusa_jueqing_1st'); + }); }, derivation:'abyusa_jueqing_rewrite', }, @@ -12825,7 +12830,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, abyusa_jueqing:function(player){ if(player.hasSkill('abyusa_jueqing_1st')) return '锁定技,你即将造成的伤害均视为失去体力。'; - return '当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你令其失去2X点体力,修改〖绝情〗并对自己造成2X点伤害。'; + return '当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。'; }, tomoya_shangxian:function(player){ if(player.storage.tomoya_shangxian) return '锁定技,你计算与其他角色的距离时始终从顺时针方向计算。出牌阶段开始时,你可摸一张牌,并改变此方向。'; @@ -13224,7 +13229,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ akiko_dongcha_info_identity:'锁定技,其他角色的手牌对你可见。游戏开始时,你令其他角色的身份牌对你可见。', akiko_dongcha_info:'锁定技,其他角色的手牌对你可见。', abyusa_jueqing:'绝情', - abyusa_jueqing_info:'当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你令其失去2X点体力,修改〖绝情〗并对自己造成2X点伤害。', + abyusa_jueqing_info:'当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。', abyusa_jueqing_1st:'绝情', abyusa_jueqing_rewrite:'绝情·改', abyusa_jueqing_rewrite_info:'锁定技,你即将造成的伤害均视为失去体力。', diff --git a/character/mobile.js b/character/mobile.js index 17d3910e1..30377ef4d 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -12,11 +12,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai"], - mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou"], + mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan","xin_zhuran","re_lingtong","re_liubiao","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_handang"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"], }, }, character:{ + re_handang:['male','wu',4,['regongji','jiefan']], sp_wangcan:['male','wei',3,['spqiai','spshanxi']], sp_chenzhen:['male','shu',3,['shameng']], sp_sunshao:['male','wu',3,['fubi','zuici']], @@ -4401,6 +4402,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.markSkill('rebiaozhao'); } }, + ai:{notemp:true}, }, "rebiaozhao2":{ trigger:{ @@ -6127,6 +6129,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zhaohuo:{ audio:2, + audioname:['re_taoqian'], trigger:{global:'dying'}, forced:true, //priority:12, @@ -6143,6 +6146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yixiang:{ audio:2, + audioname:['re_taoqian'], trigger:{target:'useCardToTargeted'}, frequent:true, filter:function(event,player){ @@ -6181,6 +6185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, yirang:{ audio:2, + audioname:['re_taoqian'], trigger:{player:'phaseUseBegin'}, direct:true, filter:function(event,player){ @@ -7699,6 +7704,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jianzhan_info:'出牌阶段限一次,你可选择一名其他角色A和其攻击范围内的另一名手牌数小于其的角色B。A选择一项:①视为对B使用一张【杀】。②令你摸一张牌。', duoji:'夺冀', duoji_info:'限定技,出牌阶段,你可弃置两张手牌并选择一名装备区有牌的其他角色。你获得其装备区里的所有牌。', + re_handang:'手杀韩当', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 8f0c5ad60..ea3b1c3e5 100644 --- a/character/rank.js +++ b/character/rank.js @@ -457,6 +457,7 @@ window.noname_character_rank={ 'ns_luyusheng', 'sp_chenzhen', 'sp_wangcan', + 'caosong', ], bp:[ 'chess_diaochan', @@ -653,6 +654,7 @@ window.noname_character_rank={ 'ol_lisu', 'jin_simazhao', 'jin_zhangchunhua', + 'xin_handang', ], b:[ 'diy_feishi', @@ -701,7 +703,7 @@ window.noname_character_rank={ 'yanjun', 're_jsp_pangtong', 'handang', - 'zhangchunhua', + 're_zhangchunhua', 'xunyou', 'yufan', 'chengong', @@ -1008,6 +1010,7 @@ window.noname_character_rank={ 'hanba', 'ns_fanchou', 'sp_sunshao', + 'zhangchunhua', ], d:[ 'lvmeng', @@ -1288,6 +1291,8 @@ window.noname_character_rank={ 'zhangling', 'ns_luyusheng', 'fanyufeng', + 're_taoqian', + 'caosong', 'key_haruko', 'key_akiko', 'key_sunohara', @@ -1587,6 +1592,8 @@ window.noname_character_rank={ 'lisu', 'ol_lisu', 'zhaozhong', + 're_zhangchunhua', + 'xin_handang', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index 064c63ab6..57346c197 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -9,8 +9,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"], refresh_lin:['re_zhurong','re_menghuo','ol_sunjian','re_caopi','re_xuhuang','ol_dongzhuo'], refresh_shan:['re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'], - refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong'], - refresh_yijiang2:['old_madai','wangyi','guanzhang','re_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], + refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'], + refresh_yijiang2:['old_madai','wangyi','guanzhang','xin_handang','re_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'], refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','re_yufan','re_liru','re_manchong','re_fuhuanghou'], refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen'], refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan'], @@ -18,6 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ + re_zhangchunhua:['female','wei',3,['rejueqing','reshangshi']], re_gongsunyuan:['male','qun',4,['rehuaiyi']], re_caozhen:['male','wei',4,['residi']], re_fuhuanghou:['female','qun',3,['rezhuikong','reqiuyuan']], @@ -42,7 +43,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_masu:['male','shu',3,['resanyao','rezhiman']], re_sunluban:['female','wu',3,['rechanhui','rejiaojin']], re_zhonghui:['male','wei',4,['requanji','zili']], - re_handang:['male','wu',4,['regongji','jiefan']], + xin_handang:['male','wu',4,['xingongji','xinjiefan']], yujin_yujin:['male','wei',4,['rejieyue']], re_caozhang:['male','wei',4,['new_jiangchi']], re_chengpu:['male','wu',4,['decadelihuo','decadechunlao']], @@ -127,8 +128,171 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, perfectPair:{ sunben:['zhouyu','taishici','daqiao'], + re_xushu:['zhaoyun','sp_zhugeliang'], }, skill:{ + xingongji:{ + enable:'phaseUse', + usable:1, + audio:2, + position:'he', + filterCard:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + check:function(card){ + var base=0,player=_status.event.player,suit=get.suit(card,player),added=false,added2=false,added3; + if(get.type(card)=='equip'&&game.hasPlayer(function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + if(target.countCards('he',function(card){ + return get.value(card)>5; + })) return -att; + })) base+=6; + var hs=player.getCards('h'); + var muniu=player.getEquip('muniu'); + if(muniu&&card!=muniu&&muniu.cards) hs=hs.concat(muniu.cards); + for(var i of hs){ + if(i!=card&&get.name(i)=='sha'){ + if(get.suit(i,player)==suit){ + if(player.hasValueTarget(i,false)){ + added3=true; + base+=5.5; + } + } + else{ + if(player.hasValueTarget(i,false)) added2=true; + if(!added&&!player.hasValueTarget(i,null,true)&&player.hasValueTarget(i,false,true)){ + base+=4; + added=true; + } + } + } + } + if(added3&&!added2) base-=4.5; + return base-get.value(card); + }, + content:function(){ + "step 0" + if(!player.storage.xingongji2) player.storage.xingongji2=[]; + player.storage.xingongji2.add(get.suit(cards[0],player)); + player.addTempSkill('xingongji2'); + "step 1" + if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){ + player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){ + return player!=target&&target.countCards('he')>0; + }).set('ai',function(target){ + var att=get.attitude(player,target); + if(att>=0) return 0; + if(target.countCards('he',function(card){ + return get.value(card)>5; + })) return -att; + return -att*0.8; + }); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + player.line(result.targets,'green'); + player.discardPlayerCard(result.targets[0],'he',true); + } + }, + ai:{ + order:4.5, + result:{ + player:1 + } + } + }, + xingongji2:{ + charlotte:true, + onremove:true, + mod:{ + attackFrom:function(){ + return -Infinity; + }, + cardUsable:function(card,player){ + if(card.name=='sha'&&player.storage.xingongji2.contains(get.suit(card))) return Infinity; + }, + aiOrder:function(player,card,num){ + if(get.name(card)=='sha'&&!player.storage.xingongji2.contains(get.suit(card))) return num+1; + }, + }, + mark:true, + intro:{ + content:'使用$花色的杀无次数限制', + }, + }, + xinjiefan:{ + skillAnimation:true, + animationColor:'wood', + audio:2, + unique:true, + limited:true, + enable:'phaseUse', + filterTarget:true, + content:function(){ + "step 0" + player.awakenSkill('xinjiefan'); + event.players=game.filterPlayer(function(current){ + return current!=target&¤t.inRange(target); + }); + event.players.sortBySeat(); + "step 1" + if(event.players.length){ + event.current=event.players.shift(); + event.current.animate('target'); + player.line(event.current,'green'); + if(event.current.countCards('he')&&target.isAlive()){ + event.current.chooseToDiscard({subtype:'equip1'},'he','弃置一张武器牌或让'+ + get.translation(target)+'摸一张牌').set('ai',function(card){ + if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card); + return -1; + }).set('target',target); + event.tempbool=false; + } + else{ + event.tempbool=true; + } + } + else{ + if(game.roundNumber<=1) player.addTempSkill('xinjiefan2'); + event.finish(); + } + "step 2" + if(event.tempbool||result.bool==false){ + target.draw(); + } + event.goto(1); + }, + ai:{ + order:5, + result:{ + target:function(player,target){ + if(player.hp>2&&game.roundNumber>1){ + if(game.phaseNumber1; + return player.isLinked()&&event.num>1&&!event.decadechunlaox; }, content:function(){ player.link(); @@ -8731,7 +8906,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ olyajiao:'涯角', olyajiao_info:'当你于回合外因使用或打出而失去手牌后,你可以展示牌堆顶的一张牌。若这两张牌的类别相同,你可以将展示的牌交给一名角色;若类别不同,你可弃置攻击范围内包含你的角色区域里的一张牌。', re_zhonghui:'界钟会', - re_handang:'界韩当', requanji:'权计', requanji_info:'出牌阶段结束时,若你的手牌数大于体力值,或当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', regongji:'弓骑', @@ -8839,6 +9013,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ residi2:'司敌', residi3:'司敌', residi_info:'结束阶段,你可以将一张非基本牌置于武将牌上,称为“司”。其他角色的出牌阶段开始时,你可以移去一张“司”。若如此做,其本阶段内不能使用或打出与“司”颜色相同的牌。此阶段结束时,若其于此阶段内未使用过:【杀】,你视为对其使用一张【杀】。锦囊牌,你摸两张牌。', + gz_re_xushu:'徐庶', + re_zhangchunhua:'界张春华', + xin_handang:'界韩当', + xingongji:'弓骑', + xingongji2:'弓骑', + xingongji_info:'出牌阶段限一次,你可以弃置一张牌,然后你的攻击范围视为无限且使用与此牌花色相同的【杀】无次数限制直到回合结束。若你以此法弃置的牌为装备牌,则你可以弃置一名其他角色的一张牌。', + xinjiefan:'解烦', + xinjiefan_info:'限定技,出牌阶段,你可以选择一名角色,令攻击范围内含有该角色的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。然后若游戏轮数为1,则你于此回合结束时恢复此技能。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/sp.js b/character/sp.js index c0fbc037a..5bc697061 100755 --- a/character/sp.js +++ b/character/sp.js @@ -7725,7 +7725,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //priority:15, audio:'shefu', filter:function(event,player){ - if(_status.currentPhase==player) return false; + if(_status.currentPhase==player||event.player==player) return false; return player.storage.shefu2&&player.storage.shefu2.contains(event.card.name)&&event.player.getHistory('lose',function(evt){ return evt.getParent()==event&&evt.hs&&evt.hs.length==event.cards.length; }).length; @@ -16175,11 +16175,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jici:'激词', jici_info:'当你因发动〖鼓舌〗而扣置的拼点牌亮出后,若点数小于X,你可令点数+X;若点数等于X,你可令你本回合发动〖鼓舌〗的次数上限+1。(X为你“饶舌”标记的数量)', shefu:'设伏', + shefu2:'设伏', shefu_bg:'伏', shefu_info:'结束阶段开始时,你可以将一张牌移出游戏,称为「伏兵」。并为「伏兵」记录一个基本牌或锦囊牌的名称(须与其他「伏兵」记录的名称均不同)。你的回合外,当有其他角色使用与你记录的「伏兵」牌名相同的手牌时,你可以取消此牌的所有目标,然后移去该「伏兵」。若此时处于使用者的回合内,则你令使用者当前的所有非Charlotte技失效直至回合结束。', benyu:'贲育', benyu2:'贲育', - benyu_info:'当你受到伤害后,若你的手牌数不大于伤害来源的手牌数,你可以将手牌摸至与伤害来源手牌数相同(至多摸至5张);否则你可以弃置大于伤害来源手牌数的手牌,然后对其造成1点伤害。', + benyu_info:'当你受到伤害后,你可选择:①将手牌摸至与伤害来源手牌数相同(至多摸至5张);②弃置大于伤害来源手牌数的牌,然后对其造成1点伤害。', zhidao:'雉盗', zhidao_info:'锁定技,当你于你的回合内第一次对区域里有牌的其他角色造成伤害后,你获得其手牌、装备区和判定区里的各一张牌,然后直到回合结束,其他角色不能被选择为你使用牌的目标。', jili:'寄篱', diff --git a/character/sp2.js b/character/sp2.js index f2b91197b..7930f173e 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + caosong:['male','wei',3,['cslilu','csyizheng']], + re_taoqian:['male','qun',3,['zhaohuo','reyixiang','yirang']], zhaozhong:['male','qun',6,['yangzhong','huangkong']], fanyufeng:['female','qun',3,['bazhan','jiaoying']], ol_lisu:['male','qun',3,['qiaoyan','xianzhu']], @@ -101,6 +103,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], sp_huangjin:['liuhong','zhujun','re_hejin','re_hansui','liubian'], sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], + sp_xuzhou:['re_taoqian','caosong'], sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_yujin','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','zhaozhong'], sp_mini:["mini_sunquan","mini_zuoci","mini_jiangwei","mini_diaochan","mini_zhangchunhua"], sp_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], @@ -109,8 +112,178 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //陶谦和曹嵩 + cslilu:{ + audio:2, + trigger:{player:'phaseDrawBegin1'}, + filter:function(event,player){ + return !event.numFixed; + }, + check:function(event,player){ + return Math.min(player.maxHp,5)-player.countCards('h')>3||game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + }); + }, + content:function(){ + 'step 0' + trigger.changeToZero(); + 'step 1' + player.drawTo(Math.min(player.maxHp,5)); + 'step 2' + if(player.countCards('h')>0){ + var str='将至少一张手牌交给一名其他角色'; + var num=player.countMark('cslilu'); + if(num0) str+=('。若给出的牌数大于'+get.cnNumber(num)+'张,则你'); + else str+=',并'; + str+='加1点体力上限并回复1点体力' + } + player.chooseCardTarget({ + prompt:str, + filterCard:true, + filterTarget:lib.filter.notMe, + selectCard:[1,Infinity], + forced:true, + ai1:function(card){ + if(ui.selected.cards.length<_status.event.goon){ + if(get.tag(card,'damage')&&game.hasPlayer(function(current){ + current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain')&&!current.hasJudge('lebu')&¤t.hasValueTarget(card); + })) return 1; + return 1/Math.max(0.1,get.value(card)); + } + return 0; + }, + ai2:function(target){ + return Math.sqrt(5-Math.max(4,target.countCards('h')))*get.attitude(_status.event.player,target); + }, + goon:function(){ + if(!game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain')&&!current.hasJudge('lebu'); + })) return 1; + if(numnum){ + player.gainMaxHp(); + player.recover(); + } + player.storage.cslilu=result.cards.length; + player.markSkill('cslilu'); + } + }, + }, + csyizheng:{ + audio:2, + trigger:{player:'phaseJieshuBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('csyizheng'),lib.filter.notMe).set('ai',function(target){ + if(target.isTurnedOver()||target.hasJudge('lebu')) return 0; + return get.attitude(_status.event.player,target)*Math.max(0,target.countCards('h')-2); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('csyizheng',target); + player.storage.csyizheng2=target; + player.addTempSkill('csyizheng2',{player:'phaseBegin'}); + } + }, + }, + csyizheng2:{ + audio:'csyizheng', + trigger:{ + global:['recoverBegin','damageBegin1'], + }, + forced:true, + charlotte:true, + logTarget:function(event){ + return event.name=='damage'?event.source:event.player; + }, + filter:function(event,player){ + var target=lib.skill.csyizheng2.logTarget(event); + if(target!=player.storage.csyizheng2) return false; + return player.maxHp>target.maxHp; + }, + content:function(){ + player.loseMaxHp(); + trigger.num++; + }, + mark:'character', + intro:{ + content:'$造成伤害或回复体力时,若你的体力上限大于其,则你减1点体力上限,然后此伤害/回复量+1', + }, + }, + reyixiang:{ + audio:'yixiang', + audioname:['re_taoqian'], + trigger:{player:'damageBegin1'}, + forced:true, + filter:function(event,player){ + var evt=event.getParent(2); + if(evt.name!='useCard'||evt.card!=event.card) return false; + var source=evt.player; + var phsu=evt.getParent('phaseUse'); + if(!source||source==player||source!=phsu.player) return false; + return source.getHistory('useCard',function(evt2){ + return evt2.getParent('phaseUse')==phsu; + })[0]==evt; + }, + content:function(){ + trigger.num--; + }, + group:'reyixiang_card', + subSkill:{ + card:{ + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + if(get.color(event.card)!='black') return false; + var evt=event.getParent(); + var source=evt.player; + var phsu=evt.getParent('phaseUse'); + if(!source||source==player||source!=phsu.player) return false; + return source.getHistory('useCard',function(evt2){ + return evt2.getParent('phaseUse')==phsu; + }).indexOf(evt)==1; + }, + content:function(){ + trigger.excluded.add(player); + }, + }, + }, + ai:{ + effect:{ + target:function(card,player,target,current,isLink){ + if(isLink||!player.isPhaseUsing()) return; + var num; + var evt=_status.event.getParent('useCard'),evt2=_status.event.getParent('phaseUse'); + if(evt.card==card){ + num=player.getHistory('useCard',function(evt){ + return evt.getParent('phaseUse')==evt2; + }).indexOf(evt); + } + else num=player.getHistory('useCard',function(evt){ + return evt.getParent('phaseUse')==evt2; + }).length; + if(num<0||num>1) return; + if(num==0&&get.tag(card,'damage')) return 'zerotarget'; + if(num==1&&get.color(card)=='black') return 'zeroplayertarget'; + }, + }, + }, + }, //赵忠 yangzhong:{ + audio:2, trigger:{ source:'damageSource', player:'damageEnd', @@ -134,6 +307,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, huangkong:{ + audio:2, trigger:{target:'useCardToTargeted'}, forced:true, filter:function(event,player){ @@ -1182,7 +1356,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ silent:true, firstDo:true, filter:function(event,player){ - return player.isPhaseUsing()&&lib.skill.quanbian.hasHand(event); + return player.isPhaseUsing()&&lib.skill.quanbian.hasHand(event)&&get.type(event.card)!='equip'; }, content:function(){ var stat=player.getStat('skill'); @@ -1192,7 +1366,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mod:{ cardEnabled2:function(card,player){ var stat=player.getStat('skill'); - if(stat.quanbian&&stat.quanbian>=player.maxHp&&get.position(card)=='h') return false; + if(stat.quanbian&&stat.quanbian>=player.maxHp&&get.position(card)=='h'&&get.type(card,player)!='equip') return false; }, }, }, @@ -1814,8 +1988,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ threaten:1.7, result:{ target:function(player,target){ - if(target.hasSkillTag('nogain')) return -0.1; - return 1; + if(target.hasSkillTag('nogain')) return 0.1; + return Math.sqrt(target.countCards('he')); }, }, }, @@ -9225,6 +9399,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoanmin:'曹安民(?-197年),沛国谯县(今安徽亳州)人,字安民。东汉时期人物,曹德之子,曹操之侄,曹昂的堂兄弟,曹丕的堂兄,死于宛城之战。按曹丕《典论》记载的“亡兄孝廉子脩、从兄安民遇害。”等情况来看,安民应该是曹操侄子错不了,曹丕是他们属于兄弟关系肯定不会弄错。另外从典论的记载来看安民是和子脩并提的,子脩是曹昂的字,安民则肯定也是字不是名,至于三国志中记载则应取自曹丕之《典论》但陈寿又不知曹安民其名,故写为“长子昂、弟子安民”。', fanyufeng:'樊夫人,东汉末年人物,昔桂阳太守赵范寡嫂。赵云随刘备平定江南四郡后,刘备以赵云为桂阳太守。赵范居心叵测,要将自己的嫂嫂樊氏嫁给赵云,但遭到赵云的拒绝。后来,赵范逃走,樊氏也下落不明。2001年,应日本日中青少年文化中心成立50周年之邀,北京京剧院赴日进行40场巡回演出,这次访日的剧目都不同程度地进行了加工改编,以符合日本观众的需求。《取桂阳》是根据老本重新排演的,叶金援饰赵云,王怡饰樊玉凤。剧中的樊玉凤成为文武双全的巾帼英雄,被赵云收降,后来在《龙凤呈祥》中也参与堵截东吴的追兵。', zhaozhong:'赵忠(?—189年),安平人,东汉末年宦官,赵延之兄。桓帝、灵帝时,历为小黄门、中常侍、大长秋、车骑将军等职,封都乡侯。在职时以搜刮暴敛、骄纵贪婪见称,灵帝极为宠信,常谓“赵常侍是我母”。中平六年(189年),何进谋诛宦官,事泄,他和其余几个常侍设计伏杀何进,袁绍、袁术等人闻何进被杀,入宫杀尽宦官,后捕杀赵忠。', + caosong:'曹嵩(?—194年),字巨高,沛郡谯县(今安徽省亳州市)人。东汉大臣,大长秋曹腾的养子,曹操之父亲。门荫入仕,历任司隶校尉、鸿胪卿、大司农,位列九卿,位高权重。中平四年(187年),靠着贿赂中官,出任太尉,位列三公。中平五年(188年),受累于黄巾之乱,坐罪免官。兴平元年(194年),投奔兖州牧曹操,遇害于徐州。延康元年(220年),追尊魏国太王。曹魏建立后,追尊皇帝,谥号为太。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -9293,6 +9468,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //jin_simashi:['jin_simashi','simashi'], //jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'], chunyuqiong:['chunyuqiong','re_chunyuqiong'], + taoqian:['taoqian','re_taoqian'], }, translate:{ lijue:"李傕", @@ -9771,7 +9947,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gz_jin_simashi:'司马师', gz_jin_xiahouhui:'夏侯徽', xinquanbian:'权变', - xinquanbian_info:'出牌阶段,每当你首次使用/打出一种花色的手牌时,你可以从牌堆顶的X张牌中获得一张与此牌花色不同的牌,并将其余牌以任意顺序置于牌堆顶。出牌阶段,你至多可使用X张手牌。(X为你的体力上限)', + xinquanbian_info:'出牌阶段,每当你首次使用/打出一种花色的手牌时,你可以从牌堆顶的X张牌中获得一张与此牌花色不同的牌,并将其余牌以任意顺序置于牌堆顶。出牌阶段,你至多可使用X张非装备手牌。(X为你的体力上限)', guozhao:'郭照', pianchong:'偏宠', pianchong2:'偏宠', @@ -9821,6 +9997,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangzhong_info:'当你造成或受到伤害后,若受伤角色和伤害来源均存活,则伤害来源可弃置两张牌,然后令受伤角色失去1点体力。', huangkong:'惶恐', huangkong_info:'锁定技,当你于回合外成为【杀】或伤害类锦囊牌的唯一目标后,若你没有手牌,则你摸两张牌。', + re_taoqian:'陶谦', + reyixiang:'义襄', + reyixiang_info:'锁定技,其他角色于其出牌阶段内使用的第一张牌对你的伤害-1;其使用的第二张牌若为黑色,则对你无效。', + caosong:'曹嵩', + cslilu:'礼赂', + cslilu_info:'摸牌阶段,你可以放弃摸牌,改为将手牌摸至X张,然后将至少一张手牌交给一名其他角色。若你以此法给出的牌数大于你上次以此法给出的牌数,则你加1点体力上限并回复1点体力。', + csyizheng:'翊正', + csyizheng2:'翊正', + csyizheng_info:'结束阶段开始时,你可以选择一名其他角色。你的下回合开始前,当该角色造成伤害或回复体力时,若其体力上限小于你,则你减1点体力上限,且令此伤害值/回复值+1。', sp_yingbian:'文德武备', sp_whlw:"文和乱武", @@ -9833,6 +10018,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_guandu:'官渡之战', sp_huangjin:'黄巾之乱', sp_fadong:'诸侯伐董', + sp_xuzhou:'徐州风云', sp_decade:'其他新服武将', sp_mini:'欢乐三国杀', sp_luanwu:'文和乱武·线下', diff --git a/character/yijiang.js b/character/yijiang.js index c412545c3..c5be5930a 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -21,7 +21,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_wangyi:['female','wei',3,['oldzhenlie','oldmiji']], caozhang:['male','wei',4,['jiangchi']], guohuai:['male','wei',4,['rejingce']], - zhangchunhua:['female','wei',3,['rejueqing','reshangshi']], + zhangchunhua:['female','wei',3,['jueqing','shangshi']], caozhi:['male','wei',3,['luoying','jiushi']], caochong:['male','wei',3,['chengxiang','renxin']], xunyou:['male','wei',3,['qice','zhiyu']], @@ -243,7 +243,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, rejueqing:{ - audio:'jueqing', + audio:2, trigger:{source:'damageBegin2'}, skillAnimation:true, animationColor:'water', @@ -252,19 +252,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, prompt2:function(event,player){ var num=get.cnNumber(2*event.num); - return '防止即将令其造成的伤害,改为令其失去'+num+'点体力并对自己造成'+num+'点伤害'; + return '令即将对其造成的伤害翻倍至'+num+',并令自己失去'+get.cnNumber(event.num)+'点体力'; }, check:function(event,player){ - return player.hp>event.num*2&&event.player.hp>event.num&&event.player.hp<=2*event.num&&get.attitude(player,event.player)<0; + return player.hp>event.num&&event.player.hp>event.num&&!event.player.hasSkillTag('filterDamage',null,{ + player:player, + card:event.card, + })&&get.attitude(player,event.player)<0; }, logTarget:'player', content:function(){ - 'step 0' - trigger.cancel(); - trigger.player.loseHp(2*trigger.num); - player.damage(2*trigger.num); - 'step 1' - player.addSkill('rejueqing_1st'); + player.loseHp(trigger.num); + trigger.num*=2; + var next=game.createEvent('rejueqing_add',false); + event.next.remove(next); + trigger.after.push(next); + next.player=player; + next.setContent(function(){ + player.addSkill('rejueqing_1st'); + }); }, derivation:'rejueqing_rewrite', }, @@ -286,7 +292,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, reshangshi:{ - audio:'shangshi', + audio:2, trigger:{ player:['loseAfter','changeHp','gainMaxHpAfter','loseMaxHpAfter'], global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter'], @@ -12030,7 +12036,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dynamicTranslate:{ rejueqing:function(player){ if(player.hasSkill('rejueqing_1st')) return '锁定技,你即将造成的伤害均视为失去体力。'; - return '当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你令其失去2X点体力,修改〖绝情〗并对自己造成2X点伤害。'; + return '当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。'; }, reyanzhu:function(player){ if(!player.storage.reyanzhu) return '出牌阶段限一次,你可以令一名其他角色选择一项:将装备区里的所有牌交给你并令你修改〖宴诛〗和〖兴学〗,或弃置一张牌并令下一次受到的伤害+1直到其下回合开始。'; @@ -12052,7 +12058,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterReplace:{ caozhi:['re_caozhi','caozhi'], - zhangchunhua:['zhangchunhua','mini_zhangchunhua'], + zhangchunhua:['re_zhangchunhua','zhangchunhua','mini_zhangchunhua'], yujin:['yujin_yujin','re_yujin','ol_yujin','xin_yujin','yujin'], xushu:['re_xushu','xin_xushu','xushu'], fazheng:['re_fazheng','xin_fazheng','fazheng'], @@ -12068,7 +12074,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ madai:['old_madai','madai'], liaohua:['xin_liaohua','re_liaohua','liaohua'], bulianshi:['re_bulianshi','bulianshi','old_bulianshi'], - handang:['re_handang','handang'], + handang:['xin_handang','re_handang','handang'], chengpu:['re_chengpu','chengpu','xin_chengpu'], liubiao:['re_liubiao','xin_liubiao','liubiao'], manchong:['re_manchong','manchong'], @@ -12656,7 +12662,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_fuhun:'父魂', old_fuhun_info:'摸牌阶段开始时,你可以放弃摸牌,改为从牌堆顶亮出两张牌并获得之,若亮出的牌颜色不同,你获得技能“武圣”、“咆哮”,直到回合结束。', rejueqing:'绝情', - rejueqing_info:'当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你令其失去2X点体力,修改〖绝情〗并对自己造成2X点伤害。', + rejueqing_info:'当你对其他角色造成伤害时,你可以令此伤害值+X。若如此做,你失去X点体力,并于此伤害结算完成后修改〖绝情〗(X为伤害值)。', rejueqing_1st:'绝情', rejueqing_rewrite:'绝情·改', rejueqing_rewrite_info:'锁定技,你即将造成的伤害均视为失去体力。', diff --git a/game/asset.js b/game/asset.js index d7302233d..4d4daf16c 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.109.3.3', + 'v1.9.109.3.4', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -691,6 +691,11 @@ window.noname_asset_list=[ 'audio/die/sp_xunchen.mp3', 'audio/die/fanyufeng.mp3', 'audio/die/ol_lisu.mp3', + 'audio/die/caosong.mp3', + 'audio/die/re_taoqian.mp3', + 'audio/die/re_zhangchunhua.mp3', + 'audio/die/xin_handang.mp3', + 'audio/die/zhaozhong.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3035,6 +3040,28 @@ window.noname_asset_list=[ 'audio/skill/qiaoyan2.mp3', 'audio/skill/xianzhu1.mp3', 'audio/skill/xianzhu2.mp3', + 'audio/skill/cslilu1.mp3', + 'audio/skill/cslilu2.mp3', + 'audio/skill/csyizheng1.mp3', + 'audio/skill/csyizheng2.mp3', + 'audio/skill/huangkong1.mp3', + 'audio/skill/huangkong2.mp3', + 'audio/skill/rejueqing1.mp3', + 'audio/skill/rejueqing2.mp3', + 'audio/skill/reshangshi1.mp3', + 'audio/skill/reshangshi2.mp3', + 'audio/skill/xingongji1.mp3', + 'audio/skill/xingongji2.mp3', + 'audio/skill/xinjiefan1.mp3', + 'audio/skill/xinjiefan2.mp3', + 'audio/skill/yangzhong1.mp3', + 'audio/skill/yangzhong2.mp3', + 'audio/skill/yirang_re_taoqian1.mp3', + 'audio/skill/yirang_re_taoqian2.mp3', + 'audio/skill/yixiang_re_taoqian1.mp3', + 'audio/skill/yixiang_re_taoqian2.mp3', + 'audio/skill/zhaohuo_re_taoqian1.mp3', + 'audio/skill/zhaohuo_re_taoqian2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3826,6 +3853,10 @@ window.noname_asset_list=[ 'image/character/fanyufeng.jpg', 'image/character/ol_lisu.jpg', 'image/character/zhaozhong.jpg', + 'image/character/caosong.jpg', + 'image/character/re_taoqian.jpg', + 'image/character/re_zhangchunhua.jpg', + 'image/character/xin_handang.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index cc006fa33..3d66d9701 100644 --- a/game/game.js +++ b/game/game.js @@ -26246,17 +26246,15 @@ prompt:'将要重铸的牌置入弃牌堆并摸一张牌', filter:function(event,player){ return player.hasCard(function(card){ - var info=get.info(card); - if(typeof info.chongzhu=='function'){ - return info.chongzhu(event,player); - } - return info.chongzhu; + return lib.skill._chongzhu.filterCard(card,player); }); }, - filterCard:function(card){ + filterCard:function(card,player){ + var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player); + if(mod!='unchanged') return mod; var info=get.info(card); if(typeof info.chongzhu=='function'){ - return info.chongzhu(event,_status.event.player); + return info.chongzhu(event,player); } return info.chongzhu; }, diff --git a/game/update.js b/game/update.js index 96afc3f2d..d9e79d4e4 100644 --- a/game/update.js +++ b/game/update.js @@ -1,10 +1,10 @@ window.noname_update={ - version:'1.9.109.3.3', - update:'1.9.109.3.2', + version:'1.9.109.3.4', + update:'1.9.109.3.3', changeLog:[ - '赵忠', - '新丁奉', - '同名武将替换体系拆分', + '界韩当、界张春华', + '曹嵩、陶谦', + '国战徐庶', 'bug修复', ], files:[ @@ -21,23 +21,23 @@ window.noname_update={ //'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - //'character/diy.js', - 'character/extra.js', + 'character/diy.js', + //'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', //'character/old.js', //'character/ow.js', 'character/rank.js', - //'character/refresh.js', - 'character/shenhua.js', + 'character/refresh.js', + //'character/shenhua.js', 'character/sp.js', 'character/sp2.js', //'character/tw.js', - 'character/standard.js', + //'character/standard.js', //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', @@ -48,7 +48,7 @@ window.noname_update={ //'layout/default/menu.css', //'layout/nova/layout.css', //'mode/boss.js', - 'mode/brawl.js', + //'mode/brawl.js', //'mode/chess.js', //'mode/doudizhu.js', 'mode/guozhan.js', diff --git a/image/character/caosong.jpg b/image/character/caosong.jpg new file mode 100644 index 000000000..5e86b4c60 Binary files /dev/null and b/image/character/caosong.jpg differ diff --git a/image/character/re_taoqian.jpg b/image/character/re_taoqian.jpg new file mode 100644 index 000000000..137d471db Binary files /dev/null and b/image/character/re_taoqian.jpg differ diff --git a/image/character/re_zhangchunhua.jpg b/image/character/re_zhangchunhua.jpg new file mode 100644 index 000000000..c2d530993 Binary files /dev/null and b/image/character/re_zhangchunhua.jpg differ diff --git a/image/character/xin_handang.jpg b/image/character/xin_handang.jpg new file mode 100644 index 000000000..84c5858df Binary files /dev/null and b/image/character/xin_handang.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index 38ee67c23..f5d02af6b 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -278,7 +278,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_caocao','gz_guojia','gz_xiahoudun', 'gz_xunyu','gz_caopi','gz_liubei', 'gz_fazheng','gz_dongzhuo','gz_yuji', - 'gz_liqueguosi','gz_huanggai', + 'gz_liqueguosi','gz_huanggai','gz_re_xushu', ], }, guozhanRank:{ @@ -307,7 +307,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_liushan','gz_pangtong','gz_zhaoyun', 'gz_re_lusu','gz_sunquan','gz_ganning', 'gz_zhangxiu','gz_liqueguosi','gz_huatuo', - 'gz_zhanghuyuechen', + 'gz_zhanghuyuechen','gz_re_xushu', ], '4':[ 'gz_dianwei','gz_dengai','gz_xunyu', @@ -347,7 +347,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_quan:["gz_cuimao","gz_yujin","gz_wangping","gz_fazheng","gz_wuguotai","gz_lukang","gz_yuanshu","gz_zhangxiu"], guozhan_jun:["gz_jun_caocao","gz_jun_sunquan","gz_jun_liubei","gz_jun_zhangjiao"], guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen'], - guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie'], + guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_re_xushu'], guozhan_zongheng:['gz_huaxin','gz_luyusheng'], guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan"], } @@ -371,6 +371,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_mifangfushiren:['male','wu',4,['mffengshi'],['doublegroup:wu:shu']], gz_shixie:['male','qun',3,['gzbiluan','gzlixia'],['doublegroup:qun:wu']], gz_zhanglu:['male','qun',3,['gzbushi','gzmidao'],['doublegroup:qun:wei']], + gz_re_xushu:['male','shu',4,['zhuhai','gzpozhen','gzjiancai']], gz_caocao:['male','wei',4,['jianxiong']], gz_simayi:['male','wei',3,['fankui','guicai']], @@ -495,6 +496,108 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + gzpozhen:{ + trigger:{global:'phaseBegin'}, + limited:true, + filter:function(event,player){ + return player!=event.player; + }, + logTarget:'player', + skillAnimation:true, + animationColor:'orange', + check:function(event,player){ + var target=event.player; + if(get.attitude(player,target)>=-3) return false; + if(event.player.hasJudge('lebu')&&!game.hasPlayer(function(current){ + return get.attitude(current,target)>0&¤t.hasWuxie(); + })) return false; + var num=Math.min(target.getCardUsable('sha'),target.countCards('h',function(card){ + return get.name(card,target)=='sha'&&target.hasValueTarget(card); + }))+target.countCards('h',function(card){ + return get.name(card,target)!='sha'&&target.hasValueTarget(card); + }); + return num>=Math.max(2,target.hp); + }, + content:function(){ + 'step 0' + player.awakenSkill('gzpozhen'); + var target=trigger.player; + target.addTempSkill('gzpozhen2'); + var list=game.filterPlayer(function(current){ + return current!=target&&(current.inline(target)|| + (current==target.getNext().getNext()&¤t.siege(target.getNext())||current==target.getPrevious().getPrevious()&¤t.siege(target.getPrevious()))); + }); + if(list.length){ + list.add(target); + list.sortBySeat(target); + event.targets=list; + } + else event.finish(); + 'step 1' + var target=targets.shift(); + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,'he',true).boolline=true; + if(targets.length) event.redo(); + }, + }, + gzpozhen2:{ + mod:{ + cardEnabled2:function(card){ + if(get.position(card)=='h') return false; + }, + cardChongzhuable:function(card){ + if(get.position(card)=='h') return false; + }, + }, + }, + gzjiancai:{ + viceSkill:true, + trigger:{global:'damageBegin4'}, + init:function(player,skill){ + if(player.checkViceSkill(skill)&&!player.viceChanged) player.removeMaxHp(); + }, + filter:function(event,player){ + return event.player.isFriendOf(player)&&event.num>=event.player.hp; + }, + check:function(event,player){ + if(get.attitude(player,event.player)<3) return false; + if(event.num>=1||player.storage.gzpozhen) return true; + if(player.countCards('h',function(card){ + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,event.player,'unchanged','cardSavable',player); + if(mod!='unchanged') return mod; + var savable=get.info(card).savable; + if(typeof savable=='function') savable=savable(card,player,event.player); + return savable; + })>=1+event.num-event.player.hp) return false; + return true; + }, + logTarget:'player', + skillAnimation:true, + animationColor:'orange', + content:function(){ + trigger.cancel(); + player.changeVice(); + }, + group:'gzjiancai_add', + subfrequent:['add'], + subSkill:{ + add:{ + trigger:{global:'changeViceBegin'}, + logTarget:'player', + frequent:true, + prompt:function(event,player){ + return get.translation(event.player)+'即将变更副将,是否发动【荐才】,令其此次变更副将时增加两张可选武将牌?'; + }, + filter:function(event,player){ + return event.player.isFriendOf(player); + }, + content:function(){ + trigger.num+=2; + }, + }, + }, + }, gzxingzhao:{ audio:'xinfu_xingzhao', getNum:function(){ @@ -1099,7 +1202,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, chooseButton:{ select:2, - dialog:function (event,player){ + dialog:function(event,player){ var dialog=ui.create.dialog('役鬼','hidden'); dialog.add([player.storage.yigui.character,'character']); var list=lib.inpile; @@ -1149,7 +1252,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } return 1+Math.random(); }, - filter:function (button,player){ + filter:function(button,player){ var evt=_status.event.getParent('chooseToUse'); if(!ui.selected.buttons.length){ if(typeof button.link!='string') return false; @@ -1329,14 +1432,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, yigui_shan:{ enable:"chooseToUse", - filter:function (event,player){ + filter:function(event,player){ if(event.type!='respondShan') return false; var storage=player.storage.yigui; if(!storage||!storage.character.length||storage.used.contains('shan')) return false; return event.filterCard({name:'shan'},player,event); }, chooseButton:{ - dialog:function (event,player){ + dialog:function(event,player){ var dialog=ui.create.dialog('役鬼','hidden'); dialog.add([player.storage.yigui.character,'character']); return dialog; @@ -1391,14 +1494,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, yigui_wuxie:{ enable:"chooseToUse", - filter:function (event,player){ + filter:function(event,player){ if(event.type!='wuxie') return false; var storage=player.storage.yigui; if(!storage||!storage.character.length||storage.used.contains('wuxie')) return false; return event.filterCard({name:'wuxie'},player,event); }, chooseButton:{ - dialog:function (event,player){ + dialog:function(event,player){ var dialog=ui.create.dialog('役鬼','hidden'); dialog.add([player.storage.yigui.character,'character']); return dialog; @@ -1480,7 +1583,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ global:"useCard", }, - filter:function (event,player){ + filter:function(event,player){ return get.type(event.card)=='equip'&&event.player.isAlive()&& event.player.isFriendOf(player)&&(player==event.player||player.hasSkill('xindiaodu'))&&!event.player.hasSkill('xindiaodu_temp'); }, @@ -1501,13 +1604,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseUseBegin", }, - filter:function (event,player){ + filter:function(event,player){ return game.hasPlayer(function(current){ return current.isFriendOf(player)&¤t.countGainableCards(player,'e')>0; }); }, direct:true, - content:function (){ + content:function(){ 'step 0' player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){ return current.isFriendOf(player)&¤t.countGainableCards(player,'e')>0; @@ -2201,10 +2304,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ eff1:{ sub:true, mod:{ - targetInRange:function (card,player,target){ + targetInRange:function(card,player,target){ if(target==player.storage.gzzhengbi_eff1) return true; }, - cardUsableTarget:function (card,player,target){ + cardUsableTarget:function(card,player,target){ if(target==player.storage.gzzhengbi_eff1&&target.isUnseen()){ return true; } @@ -2296,7 +2399,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, ai:{ effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(get.tag(card,'recover')) return 'zeroplayertarget'; }, }, @@ -2549,11 +2652,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"useCard", }, //priority:1, - filter:function (event,player){ + filter:function(event,player){ return event.skill=='fz_new_longdan_shan'&&event.getParent(2).name=='sha'; }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】令一名其他角色回复1点体力?",function(card,player,target){ return target!=_status.event.source&&target!=player&&target.isDamaged(); @@ -2562,7 +2665,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).set('source',trigger.getParent(2).player); "step 1" if(result.bool&&result.targets&&result.targets.length){ - player.line(result.targets[0],'green'); + player.logSkill('fz_new_longdan',result.targets[0]); result.targets[0].recover(); } }, @@ -2574,10 +2677,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"shaMiss", }, direct:true, - filter:function (event,player){ + filter:function(event,player){ return event.skill=='fz_new_longdan_sha'; }, - content:function (){ + content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】对一名其他角色造成1点伤害?",function(card,player,target){ return target!=_status.event.target&&target!=player; @@ -2586,7 +2689,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).set('target',trigger.target); "step 1" if(result.bool&&result.targets&&result.targets.length){ - player.line(result.targets[0],'green'); + player.logSkill('fz_new_longdan',result.targets[0]); result.targets[0].damage(); } }, @@ -2597,11 +2700,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, audio:"fz_new_longdan", forced:true, + locked:false, filter:function(event,player){ if(!get.zhu(player,'shouyue')) return false; return event.skill=='fz_new_longdan_sha'||event.skill=='fz_new_longdan_shan'; }, - content:function (){ + content:function(){ player.draw(); //player.storage.fanghun2++; }, @@ -2616,22 +2720,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ viewAs:{ name:"sha", }, - viewAsFilter:function (player){ + viewAsFilter:function(player){ if(!player.countCards('h','shan')) return false; }, prompt:"将一张闪当杀使用或打出", - check:function (){return 1}, + check:function(){return 1}, ai:{ effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(get.tag(card,'respondSha')&¤t<0) return 0.6 }, }, respondSha:true, - skillTagFilter:function (player){ + skillTagFilter:function(player){ if(!player.countCards('h','shan')) return false; }, - order:function (){ + order:function(){ return get.order({name:'sha'})+0.1; }, }, @@ -2647,17 +2751,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ name:"shan", }, prompt:"将一张杀当闪使用或打出", - check:function (){return 1}, - viewAsFilter:function (player){ + check:function(){return 1}, + viewAsFilter:function(player){ if(!player.countCards('h','sha')) return false; }, ai:{ respondShan:true, - skillTagFilter:function (player){ + skillTagFilter:function(player){ if(!player.countCards('h','sha')) return false; }, effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(get.tag(card,'respondShan')&¤t<0) return 0.6 }, }, @@ -2720,7 +2824,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseJieshuBegin", }, - content:function (){ + content:function(){ 'step 0' event.num=game.countGroup(); player.draw(event.num); @@ -2744,7 +2848,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, ai:{ effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(card.name=='guiyoujie') return [0,1]; }, }, @@ -2757,7 +2861,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, mod:{ - targetInRange:function (card,player,target){ + targetInRange:function(card,player,target){ if(card.name=='bingliang'){ return true; } @@ -2765,11 +2869,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, audio:"duanliang1", enable:"chooseToUse", - filterCard:function (card){ + filterCard:function(card){ if(get.type(card)!='basic'&&get.type(card)!='equip') return false; return get.color(card)=='black'; }, - filter:function (event,player){ + filter:function(event,player){ if(player.hasSkill('new_duanliang_off')) return false; return player.countCards('he',{type:['basic','equip'],color:'black'}) }, @@ -2777,11 +2881,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ viewAs:{ name:"bingliang", }, - onuse:function (result,player){ + onuse:function(result,player){ if(get.distance(player,result.targets[0])>2) player.addTempSkill('new_duanliang_off'); }, prompt:"将一黑色的基本牌或装备牌当兵粮寸断使用", - check:function (card){return 6-get.value(card)}, + check:function(card){return 6-get.value(card)}, ai:{ order:9, basic:{ @@ -2790,7 +2894,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ value:4, }, result:{ - target:function (player,target){ + target:function(player,target){ if(target.hasJudge('caomu')) return 0; return -1.5/Math.sqrt(target.countCards('h')+1); }, @@ -2806,7 +2910,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"recoverAfter", }, direct:true, - content:function (){ + content:function(){ 'step 0' event.num=trigger.num||1; "step 1" @@ -2836,12 +2940,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ viewAs:{ name:"wanjian", }, - filterCard:function (card,player){ + filterCard:function(card,player){ if(!player.storage.new_luanji) return true; return !player.storage.new_luanji.contains(get.suit(card)); }, selectCard:2, - check:function (card){ + check:function(card){ var player=_status.event.player; var targets=game.filterPlayer(function(current){ return player.canUse('wanjian',current); @@ -2871,10 +2975,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"phaseAfter", }, silent:true, - filter:function (event,player){ + filter:function(event,player){ return player.storage.new_luanji?true:false; }, - content:function (){ + content:function(){ delete player.storage.new_luanji; }, sub:true, @@ -2886,10 +2990,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"useCard", }, silent:true, - filter:function (event){ + filter:function(event){ return event.skill=='new_luanji'; }, - content:function (){ + content:function(){ if(!player.storage.new_luanji){ player.storage.new_luanji=[]; } @@ -2906,11 +3010,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ global:"respond", }, silent:true, - filter:function (event){ + filter:function(event){ if(event.player.isUnseen()) return false; return event.getParent(2).skill=='new_luanji'&&event.player.sameIdentityAs(_status.currentPhase); }, - content:function (){ + content:function(){ trigger.player.draw(); }, sub:true, @@ -2922,7 +3026,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "new_qingcheng":{ audio:'qingcheng', enable:"phaseUse", - filter:function (event,player){ + filter:function(event,player){ return player.countCards('he',{color:'black'})&&game.hasPlayer(function(current){ return current!=player&&!current.isUnseen(2); }); @@ -2931,13 +3035,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ color:"black", }, position:"he", - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ return !target.isUnseen(2); }, - check:function (card){ + check:function(card){ return 6-get.value(card,_status.event.player); }, - content:function (){ + content:function(){ 'step 0' event.target=target; event.done=false; @@ -2991,7 +3095,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ai:{ order:8, result:{ - target:function (player,target){ + target:function(player,target){ if(target.hp<=0) return -5; if(player.getStat().skill.qingcheng) return 0; if(!target.hasSkillTag('maixie')) return 0; @@ -3008,7 +3112,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, "new_kongcheng":{ - init:function (player){ + init:function(player){ if(player.storage.new_kongcheng==undefined) player.storage.new_kongcheng=[]; }, fixedGain:function(){ @@ -3074,10 +3178,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"gainBegin", }, - filter:function (event,player){ + filter:function(event,player){ return event.source&&event.source!=player&&player!=_status.currentPhase&&!event.bySelf&&player.countCards('h')==0; }, - content:function (){ + content:function(){ trigger.setContent(lib.skill.new_kongcheng.fixedGain); }, sub:true, @@ -3087,10 +3191,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseDrawBegin1", }, - filter:function (event,player){ + filter:function(event,player){ return player.storage.new_kongcheng.length>0; }, - content:function (){ + content:function(){ player.gain(player.storage.new_kongcheng,'draw','fromStorage'); player.storage.new_kongcheng=[]; game.addVideo('storage',player,['new_kongcheng',get.cardsInfo(player.storage.new_kongcheng),'cards']); @@ -3105,18 +3209,18 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ target:"useCardToTarget", }, forced:true, - check:function (event,player){ + check:function(event,player){ return get.effect(event.target,event.card,event.player,player)<0; }, - filter:function (event,player){ + filter:function(event,player){ return player.countCards('h')==0&&(event.card.name=='sha'||event.card.name=='juedou'); }, - content:function (){ + content:function(){ trigger.getParent().targets.remove(player); }, ai:{ effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(target.countCards('h')==0&&(card.name=='sha'||card.name=='juedou')) return 'zeroplayertarget'; }, }, @@ -3130,7 +3234,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ storage.length=0; } }, - mark:function (dialog,content,player){ + mark:function(dialog,content,player){ if(content&&content.length){ if(player==game.me||player.isUnderControl()){ dialog.addAuto(content); @@ -3140,7 +3244,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } } }, - content:function (content,player){ + content:function(content,player){ if(content&&content.length){ if(player==game.me||player.isUnderControl()){ return get.translation(content); @@ -3156,7 +3260,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseDiscardBegin", }, - filter:function (event,player){ + filter:function(event,player){ var list=[]; player.getHistory('useCard',function(evt){ if(evt.isPhaseUsing(player)){ @@ -3166,13 +3270,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); return list.length<=1; }, - content:function (){ + content:function(){ player.addTempSkill('keji_add','phaseAfter'); }, }, "keji_add":{ mod:{ - maxHandcard:function (player,num){ + maxHandcard:function(player,num){ return num+4; }, }, @@ -3183,7 +3287,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, //priority:2, audio:"botu", - filter:function (event,player){ + filter:function(event,player){ var history=player.getHistory('useCard'); var suits=[]; var types=[]; @@ -3197,7 +3301,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ check:function(event,player){ return player.canMoveCard(true); }, - content:function (){ + content:function(){ player.moveCard(); }, }, @@ -3211,11 +3315,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"useCard", }, //priority:1, - filter:function (event,player){ + filter:function(event,player){ return event.skill=='new_longdan_shan'&&event.getParent(2).name=='sha'; }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】令一名其他角色回复1点体力?",function(card,player,target){ return target!=_status.event.source&&target!=player&&target.isDamaged(); @@ -3224,7 +3328,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).set('source',trigger.getParent(2).player); "step 1" if(result.bool&&result.targets&&result.targets.length){ - player.line(result.targets[0],'green'); + player.logSkill('new_longdan',result.targets[0]); result.targets[0].recover(); } }, @@ -3236,10 +3340,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"shaMiss", }, direct:true, - filter:function (event,player){ + filter:function(event,player){ return event.skill=='new_longdan_sha'; }, - content:function (){ + content:function(){ "step 0" player.chooseTarget("是否发动【龙胆】对一名其他角色造成1点伤害?",function(card,player,target){ return target!=_status.event.target&&target!=player; @@ -3248,7 +3352,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).set('target',trigger.target); "step 1" if(result.bool&&result.targets&&result.targets.length){ - player.line(result.targets[0],'green'); + player.logSkill('new_longdan',result.targets[0]); result.targets[0].damage(); } }, @@ -3259,11 +3363,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, audio:"longdan_sha", forced:true, - filter:function (event,player){ + locked:false, + filter:function(event,player){ if(!get.zhu(player,'shouyue')) return false; return event.skill=='new_longdan_sha'||event.skill=='new_longdan_shan'; }, - content:function (){ + content:function(){ player.draw(); //player.storage.fanghun2++; }, @@ -3278,22 +3383,22 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ viewAs:{ name:"sha", }, - viewAsFilter:function (player){ + viewAsFilter:function(player){ if(!player.countCards('h','shan')) return false; }, prompt:"将一张闪当杀使用或打出", - check:function (){return 1}, + check:function(){return 1}, ai:{ effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(get.tag(card,'respondSha')&¤t<0) return 0.6 }, }, respondSha:true, - skillTagFilter:function (player){ + skillTagFilter:function(player){ if(!player.countCards('h','shan')) return false; }, - order:function (){ + order:function(){ return get.order({name:'sha'})+0.1; }, }, @@ -3309,17 +3414,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ name:"shan", }, prompt:"将一张杀当闪使用或打出", - check:function (){return 1}, - viewAsFilter:function (player){ + check:function(){return 1}, + viewAsFilter:function(player){ if(!player.countCards('h','sha')) return false; }, ai:{ respondShan:true, - skillTagFilter:function (player){ + skillTagFilter:function(player){ if(!player.countCards('h','sha')) return false; }, effect:{ - target:function (card,player,target,current){ + target:function(card,player,target,current){ if(get.tag(card,'respondShan')&¤t<0) return 0.6 }, }, @@ -3333,7 +3438,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"useCard", }, - filter:function (event,player){ + filter:function(event,player){ if(_status.currentPhase!=player) return false; if(event.card.name!='sha') return false; var history=player.getHistory('useCard',function(evt){ @@ -3342,17 +3447,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return history&&history.indexOf(event)==1; }, forced:true, - content:function (){ + content:function(){ player.draw(); }, mod:{ - cardUsable:function (card,player,num){ + cardUsable:function(card,player,num){ if(card.name=='sha') return Infinity; }, }, ai:{ unequip:true, - skillTagFilter:function (player,tag,arg){ + skillTagFilter:function(player,tag,arg){ if(!get.zhu(player,'shouyue')) return false; if(arg&&arg.name=='sha') return true; return false; @@ -3364,11 +3469,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ enable:"phaseUse", usable:1, filterCard:true, - check:function (card){ + check:function(card){ return 8-get.value(card); }, position:"he", - content:function (){ + content:function(){ player.loseHp(); player.draw(3); player.addTempSkill('kurou_effect','phaseAfter'); @@ -3376,7 +3481,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ ai:{ order:8, result:{ - player:function (player){ + player:function(player){ if(player.hp<=2) return player.countCards('h')==0?1:0; if(player.countCards('h',{name:'sha',color:'red'})) return 1; return player.countCards('h')<=player.hp?1:0; @@ -3386,7 +3491,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, "kurou_effect":{ mod:{ - cardUsable:function (card,player,num){ + cardUsable:function(card,player,num){ if(card.name=='sha') return num+1; }, }, @@ -3395,20 +3500,20 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ audio:"chulao", enable:"phaseUse", usable:1, - filterTarget:function (card,player,target){ + filterTarget:function(card,player,target){ if(player==target) return false; for(var i=0;i0; }, - filter:function (event,player){ + filter:function(event,player){ return player.countCards('he')>0; }, filterCard:true, position:"he", selectTarget:[1,3], - check:function (card){ + check:function(card){ if(get.suit(card)=='spade') return 8-get.value(card); return 5-get.value(card); }, @@ -3417,7 +3522,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ evt.draw=[]; if(get.suit(cards[0])=='spade') evt.draw.push(player); }, - content:function (){ + content:function(){ "step 0" player.discardPlayerCard(target,'he',true); "step 1" @@ -3447,7 +3552,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ audio:"hunzi", derivation:["baka_yingzi","baka_yinghun"], viceSkill:true, - init:function (player){ + init:function(player){ if(player.checkViceSkill('baka_hunshang')&&!player.viceChanged){ player.removeMaxHp(); } @@ -3455,23 +3560,23 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseZhunbeiBegin", }, - filter:function (event,player){ + filter:function(event,player){ return player.hp<=1; }, forced:true, //priority:3, - content:function (){ + content:function(){ player.addTempSkill('baka_yingzi','phaseAfter'); player.addTempSkill('baka_yinghun','phaseAfter'); }, ai:{ - threaten:function (player,target){ + threaten:function(player,target){ if(target.hp==1) return 2; return 0.5; }, maixie:true, effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(!target.hasFriend()) return; if(get.tag(card,'damage')==1&&target.hp==2&&!target.isTurnedOver()&& _status.currentPhase!=target&&get.distance(_status.currentPhase,target,'absolute')<=3) return [0.5,1]; @@ -3481,7 +3586,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, "baka_yinghun":{ inherit:"gzyinghun", - filter:function (event,player){ + filter:function(event,player){ return player.isDamaged(); }, audio:'yinghun_sunce', @@ -3489,7 +3594,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"phaseZhunbeiBegin", }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget(get.prompt2('gzyinghun'),function(card,player,target){ return player!=target; @@ -3537,7 +3642,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, ai:{ - threaten:function (player,target){ + threaten:function(player,target){ if(target.hp==target.maxHp) return 0.5; if(target.hp==1) return 2; if(target.hp==2) return 1.5; @@ -3545,7 +3650,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, maixie:true, effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(target.maxHp<=3) return; if(get.tag(card,'damage')){ if(target.hp==target.maxHp) return [0,1]; @@ -3557,7 +3662,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, "baka_yingzi":{ mod:{ - maxHandcardBase:function (player,num){ + maxHandcardBase:function(player,num){ return player.maxHp; }, }, @@ -3567,7 +3672,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, frequent:true, filter:function(event){return !event.numFixed}, - content:function (){ + content:function(){ trigger.num++; }, ai:{ @@ -3580,10 +3685,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"damageEnd", }, frequent:true, - filter:function (event){ + filter:function(event){ return (event.num>0) }, - content:function (){ + content:function(){ "step 0" event.cards=game.cardsGotoOrdering(get.cards(2)).cards; "step 1" @@ -3630,7 +3735,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ maixie:true, "maixie_hp":true, effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(!target.hasFriend()) return; @@ -3657,7 +3762,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"damageEnd", }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget(get.prompt('new_jieming'),'令一名角色将手牌补至X张(X为其体力上限且至多为5)',function(card,player,target){ return target.countCards('h')1){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; var max=0; @@ -3709,7 +3814,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player:"damageEnd", }, direct:true, - content:function (){ + content:function(){ "step 0" player.chooseTarget(get.prompt2('new_fangzhu'),function(card,player,target){ return player!=target @@ -3752,7 +3857,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ maixie:true, "maixie_hp":true, effect:{ - target:function (card,player,target){ + target:function(card,player,target){ if(get.tag(card,'damage')){ if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; if(target.hp<=1) return; @@ -3778,7 +3883,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, "fengyin_main":{ - init:function (player,skill){ + init:function(player,skill){ var skills=lib.character[player.name1][3]; for(var i=0;i0; }, - init:function (player){ + init:function(player){ if(!player.storage.hmkguishu) player.storage.hmkguishu=0; }, chooseButton:{ - dialog:function (event,player){ + dialog:function(event,player){ var list=['yuanjiao','zhibi']; for(var i=0;i1; }, - content:function (){ + content:function(){ var target=player.getNext(); player.viewCharacter(target,1); }, @@ -4066,7 +4171,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, forced:true, priority:22, - filter:function (event,player){ + filter:function(event,player){ if(get.mode()!='guozhan') return false; if(_status.connectMode&&!lib.configOL.aozhan) return false; else if(!_status.connectMode&&!get.config('aozhan')) return false; @@ -4079,7 +4184,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } return true; }, - content:function (){ + content:function(){ var color=get.groupnature(player.group,"raw"); if(player.isUnseen()) color='fire'; player.$fullscreenpop('鏖战模式',color); @@ -4118,7 +4223,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "_xianqu_skill":{ ruleSkill:true, enable:"phaseUse", - filter:function (event,player){ + filter:function(event,player){ return player.hasMark('_xianqu_skill'); }, usable:1, @@ -4126,7 +4231,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ intro:{ content:"◇出牌阶段,你可以弃置此标记,然后将手牌摸至四张并观看一名其他角色的一张武将牌。", }, - content:function (){ + content:function(){ "step 0" player.removeMark('_xianqu_skill',1); var num=4-player.countCards('h'); @@ -4275,14 +4380,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ player.removeMark('yinyang_skill',1); }, ai:{ - order:function (item,player){ + order:function(item,player){ if(player.countCards('h')player.getHandcardLimit()) return 0; return 1; }, @@ -4294,18 +4399,18 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseDiscardBegin", }, - filter:function (event,player){ + filter:function(event,player){ return player.hasMark('yinyang_skill')&&player.needsToDiscard(); }, prompt:"是否弃置一枚【阴阳鱼】标记,使本回合的手牌上限+2?", - content:function (){ + content:function(){ player.addTempSkill('yinyang_add','phaseAfter'); player.removeMark('yinyang_skill',1); }, }, "yinyang_add":{ mod:{ - maxHandcard:function (player,num){ + maxHandcard:function(player,num){ return num+2; }, }, @@ -7979,6 +8084,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ junling6_bg:'令', junling6_info:'若被执行,执行者选择一张手牌和一张装备区内牌(若有),然后弃置其余的牌。', + gzpozhen:'破阵', + gzpozhen_info:'限定技,其他角色的回合开始时,你可以令其本回合不可使用、打出或重铸手牌;若其处于队列或围攻关系中,你可依次弃置此队列或参与围攻关系的其他角色的一张牌。', + gzjiancai:'荐才', + gzjiancai_info:'副将技,此武将牌上单独的阴阳鱼个数-1。与你势力相同的角色即将受到伤害而进入濒死状态时,你可以防止此伤害,若如此做,你须变更副将;与你势力相同的角色变更副将时,你可令其额外获得两张备选武将牌。', + gz_tangzi:'唐咨', gz_mengda:'孟达', gz_liuqi:'刘琦', @@ -8842,12 +8952,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, changeVice:function(){ 'step 0' + if(!event.num) event.num=3; var group=lib.character[player.name1][1]; _status.characterlist.randomSort(); event.tochange=[] for(var i=0;i<_status.characterlist.length;i++){ if(lib.character[_status.characterlist[i]][1]==group&&!get.is.double(_status.characterlist[i])) event.tochange.push(_status.characterlist[i]); - if(event.tochange.length==3) break; + if(event.tochange.length==event.num) break; } if(!event.tochange.length) event.finish(); else{ @@ -9176,7 +9287,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ changeVice:function(){ var next=game.createEvent('changeVice'); next.player=this; - next.setContent((!_status.connectMode&&get.config('changeViceType')=='online')?'changeViceOnline':'changeVice'); + next.setContent('changeVice'); + next.num=(!_status.connectMode&&get.config('changeViceType')=='online')?1:3; return next; }, hasMainCharacter:function(){ @@ -9501,6 +9613,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhanReverse:function(name1,name2){ if(get.is.double(name2)) return false; if(['gz_xunyou','gz_lvfan','gz_liubei'].contains(name2)) return true; + if(name1=='gz_re_xushu') return true; if(name2=='gz_dengai') return lib.character[name1][2]%2==1; if(['gz_sunce','gz_jiangwei'].contains(name1)) return name2=='gz_zhoutai'||lib.character[name2][2]%2==1; return false;