diff --git a/audio/die/caomao.mp3 b/audio/die/caomao.mp3 new file mode 100644 index 000000000..b62684538 Binary files /dev/null and b/audio/die/caomao.mp3 differ diff --git a/audio/die/dc_gaolan.mp3 b/audio/die/dc_gaolan.mp3 new file mode 100644 index 000000000..64d461209 Binary files /dev/null and b/audio/die/dc_gaolan.mp3 differ diff --git a/audio/die/dc_luotong.mp3 b/audio/die/dc_luotong.mp3 new file mode 100644 index 000000000..052e26825 Binary files /dev/null and b/audio/die/dc_luotong.mp3 differ diff --git a/audio/die/dc_zhuling.mp3 b/audio/die/dc_zhuling.mp3 new file mode 100644 index 000000000..f68cc400c Binary files /dev/null and b/audio/die/dc_zhuling.mp3 differ diff --git a/audio/die/guanning.mp3 b/audio/die/guanning.mp3 new file mode 100644 index 000000000..366f97cf7 Binary files /dev/null and b/audio/die/guanning.mp3 differ diff --git a/audio/die/ol_caiwenji.mp3 b/audio/die/ol_caiwenji.mp3 new file mode 100644 index 000000000..204ea2dba Binary files /dev/null and b/audio/die/ol_caiwenji.mp3 differ diff --git a/audio/die/old_quancong.mp3 b/audio/die/old_quancong.mp3 new file mode 100644 index 000000000..1bbe36ab0 Binary files /dev/null and b/audio/die/old_quancong.mp3 differ diff --git a/audio/die/shen_jiangwei.mp3 b/audio/die/shen_jiangwei.mp3 new file mode 100644 index 000000000..29aec9aec Binary files /dev/null and b/audio/die/shen_jiangwei.mp3 differ diff --git a/audio/die/tengyin.mp3 b/audio/die/tengyin.mp3 new file mode 100644 index 000000000..6f71b2fc6 Binary files /dev/null and b/audio/die/tengyin.mp3 differ diff --git a/audio/die/tw_caozhao.mp3 b/audio/die/tw_caozhao.mp3 new file mode 100644 index 000000000..00f88d8e3 Binary files /dev/null and b/audio/die/tw_caozhao.mp3 differ diff --git a/audio/die/xin_quancong.mp3 b/audio/die/xin_quancong.mp3 new file mode 100644 index 000000000..02f6949c8 Binary files /dev/null and b/audio/die/xin_quancong.mp3 differ diff --git a/audio/die/xuyou.mp3 b/audio/die/xuyou.mp3 new file mode 100644 index 000000000..9a55c39a2 Binary files /dev/null and b/audio/die/xuyou.mp3 differ diff --git a/audio/skill/chenjian1.mp3 b/audio/skill/chenjian1.mp3 new file mode 100644 index 000000000..55fcd7577 Binary files /dev/null and b/audio/skill/chenjian1.mp3 differ diff --git a/audio/skill/chenjian2.mp3 b/audio/skill/chenjian2.mp3 new file mode 100644 index 000000000..e5f3a55a1 Binary files /dev/null and b/audio/skill/chenjian2.mp3 differ diff --git a/audio/skill/dczhanyi1.mp3 b/audio/skill/dczhanyi1.mp3 new file mode 100644 index 000000000..fd5c280f3 Binary files /dev/null and b/audio/skill/dczhanyi1.mp3 differ diff --git a/audio/skill/dczhanyi2.mp3 b/audio/skill/dczhanyi2.mp3 new file mode 100644 index 000000000..03dc891fa Binary files /dev/null and b/audio/skill/dczhanyi2.mp3 differ diff --git a/audio/skill/duanchang_ol_caiwenji1.mp3 b/audio/skill/duanchang_ol_caiwenji1.mp3 new file mode 100644 index 000000000..abbb9c0bf Binary files /dev/null and b/audio/skill/duanchang_ol_caiwenji1.mp3 differ diff --git a/audio/skill/duanchang_ol_caiwenji2.mp3 b/audio/skill/duanchang_ol_caiwenji2.mp3 new file mode 100644 index 000000000..3a28a5c17 Binary files /dev/null and b/audio/skill/duanchang_ol_caiwenji2.mp3 differ diff --git a/audio/skill/dunshi1.mp3 b/audio/skill/dunshi1.mp3 new file mode 100644 index 000000000..040ff99b1 Binary files /dev/null and b/audio/skill/dunshi1.mp3 differ diff --git a/audio/skill/dunshi2.mp3 b/audio/skill/dunshi2.mp3 new file mode 100644 index 000000000..f5dfa7e0b Binary files /dev/null and b/audio/skill/dunshi2.mp3 differ diff --git a/audio/skill/fensi1.mp3 b/audio/skill/fensi1.mp3 new file mode 100644 index 000000000..99bcca6da Binary files /dev/null and b/audio/skill/fensi1.mp3 differ diff --git a/audio/skill/fensi2.mp3 b/audio/skill/fensi2.mp3 new file mode 100644 index 000000000..059f7c32f Binary files /dev/null and b/audio/skill/fensi2.mp3 differ diff --git a/audio/skill/gzjieyue1.mp3 b/audio/skill/gzjieyue1.mp3 new file mode 100644 index 000000000..9fe124774 Binary files /dev/null and b/audio/skill/gzjieyue1.mp3 differ diff --git a/audio/skill/gzjieyue2.mp3 b/audio/skill/gzjieyue2.mp3 new file mode 100644 index 000000000..2c93e5db7 Binary files /dev/null and b/audio/skill/gzjieyue2.mp3 differ diff --git a/audio/skill/jianglue1.mp3 b/audio/skill/jianglue1.mp3 new file mode 100644 index 000000000..9a84d687a Binary files /dev/null and b/audio/skill/jianglue1.mp3 differ diff --git a/audio/skill/jianglue2.mp3 b/audio/skill/jianglue2.mp3 new file mode 100644 index 000000000..948a864f8 Binary files /dev/null and b/audio/skill/jianglue2.mp3 differ diff --git a/audio/skill/jinjian1.mp3 b/audio/skill/jinjian1.mp3 new file mode 100644 index 000000000..fba373bf3 Binary files /dev/null and b/audio/skill/jinjian1.mp3 differ diff --git a/audio/skill/jinjian2.mp3 b/audio/skill/jinjian2.mp3 new file mode 100644 index 000000000..f398453ae Binary files /dev/null and b/audio/skill/jinjian2.mp3 differ diff --git a/audio/skill/jiufa1.mp3 b/audio/skill/jiufa1.mp3 new file mode 100644 index 000000000..a0b91ad59 Binary files /dev/null and b/audio/skill/jiufa1.mp3 differ diff --git a/audio/skill/jiufa2.mp3 b/audio/skill/jiufa2.mp3 new file mode 100644 index 000000000..e2bfe3e7a Binary files /dev/null and b/audio/skill/jiufa2.mp3 differ diff --git a/audio/skill/juetao1.mp3 b/audio/skill/juetao1.mp3 new file mode 100644 index 000000000..ee1daceff Binary files /dev/null and b/audio/skill/juetao1.mp3 differ diff --git a/audio/skill/juetao2.mp3 b/audio/skill/juetao2.mp3 new file mode 100644 index 000000000..c2a69c8b8 Binary files /dev/null and b/audio/skill/juetao2.mp3 differ diff --git a/audio/skill/olbeige1.mp3 b/audio/skill/olbeige1.mp3 new file mode 100644 index 000000000..c1c002b68 Binary files /dev/null and b/audio/skill/olbeige1.mp3 differ diff --git a/audio/skill/olbeige2.mp3 b/audio/skill/olbeige2.mp3 new file mode 100644 index 000000000..5256bc1a0 Binary files /dev/null and b/audio/skill/olbeige2.mp3 differ diff --git a/audio/skill/pingxiang1.mp3 b/audio/skill/pingxiang1.mp3 new file mode 100644 index 000000000..711ad8077 Binary files /dev/null and b/audio/skill/pingxiang1.mp3 differ diff --git a/audio/skill/pingxiang2.mp3 b/audio/skill/pingxiang2.mp3 new file mode 100644 index 000000000..cc789e031 Binary files /dev/null and b/audio/skill/pingxiang2.mp3 differ diff --git a/audio/skill/qianlong1.mp3 b/audio/skill/qianlong1.mp3 new file mode 100644 index 000000000..e0db0db91 Binary files /dev/null and b/audio/skill/qianlong1.mp3 differ diff --git a/audio/skill/qianlong2.mp3 b/audio/skill/qianlong2.mp3 new file mode 100644 index 000000000..58d7d1b2c Binary files /dev/null and b/audio/skill/qianlong2.mp3 differ diff --git a/audio/skill/renzheng1.mp3 b/audio/skill/renzheng1.mp3 new file mode 100644 index 000000000..30c357f50 Binary files /dev/null and b/audio/skill/renzheng1.mp3 differ diff --git a/audio/skill/renzheng2.mp3 b/audio/skill/renzheng2.mp3 new file mode 100644 index 000000000..a69b399ef Binary files /dev/null and b/audio/skill/renzheng2.mp3 differ diff --git a/audio/skill/tianren1.mp3 b/audio/skill/tianren1.mp3 new file mode 100644 index 000000000..23a5b3698 Binary files /dev/null and b/audio/skill/tianren1.mp3 differ diff --git a/audio/skill/tianren2.mp3 b/audio/skill/tianren2.mp3 new file mode 100644 index 000000000..6d88efc8f Binary files /dev/null and b/audio/skill/tianren2.mp3 differ diff --git a/audio/skill/twchongqi1.mp3 b/audio/skill/twchongqi1.mp3 new file mode 100644 index 000000000..7cfa31bf8 Binary files /dev/null and b/audio/skill/twchongqi1.mp3 differ diff --git a/audio/skill/twchongqi2.mp3 b/audio/skill/twchongqi2.mp3 new file mode 100644 index 000000000..35754ea03 Binary files /dev/null and b/audio/skill/twchongqi2.mp3 differ diff --git a/audio/skill/twdianyi1.mp3 b/audio/skill/twdianyi1.mp3 new file mode 100644 index 000000000..ddaeec1b2 Binary files /dev/null and b/audio/skill/twdianyi1.mp3 differ diff --git a/audio/skill/twdianyi2.mp3 b/audio/skill/twdianyi2.mp3 new file mode 100644 index 000000000..9fc0dfd53 Binary files /dev/null and b/audio/skill/twdianyi2.mp3 differ diff --git a/audio/skill/twfeifu1.mp3 b/audio/skill/twfeifu1.mp3 new file mode 100644 index 000000000..decdd1a5a Binary files /dev/null and b/audio/skill/twfeifu1.mp3 differ diff --git a/audio/skill/twfeifu2.mp3 b/audio/skill/twfeifu2.mp3 new file mode 100644 index 000000000..27f439d73 Binary files /dev/null and b/audio/skill/twfeifu2.mp3 differ diff --git a/audio/skill/twfucuan1.mp3 b/audio/skill/twfucuan1.mp3 new file mode 100644 index 000000000..f50490ec6 Binary files /dev/null and b/audio/skill/twfucuan1.mp3 differ diff --git a/audio/skill/twfucuan2.mp3 b/audio/skill/twfucuan2.mp3 new file mode 100644 index 000000000..ab7290314 Binary files /dev/null and b/audio/skill/twfucuan2.mp3 differ diff --git a/audio/skill/twshanghe1.mp3 b/audio/skill/twshanghe1.mp3 new file mode 100644 index 000000000..f030a1a9a Binary files /dev/null and b/audio/skill/twshanghe1.mp3 differ diff --git a/audio/skill/twshanghe2.mp3 b/audio/skill/twshanghe2.mp3 new file mode 100644 index 000000000..e27ff030f Binary files /dev/null and b/audio/skill/twshanghe2.mp3 differ diff --git a/audio/skill/twyingji1.mp3 b/audio/skill/twyingji1.mp3 new file mode 100644 index 000000000..f1336f948 Binary files /dev/null and b/audio/skill/twyingji1.mp3 differ diff --git a/audio/skill/twyingji2.mp3 b/audio/skill/twyingji2.mp3 new file mode 100644 index 000000000..18e2c5427 Binary files /dev/null and b/audio/skill/twyingji2.mp3 differ diff --git a/audio/skill/xinhuangtian2_re_zhangjiao1.mp3 b/audio/skill/xinhuangtian2_re_zhangjiao1.mp3 new file mode 100644 index 000000000..2a1707587 Binary files /dev/null and b/audio/skill/xinhuangtian2_re_zhangjiao1.mp3 differ diff --git a/audio/skill/xinhuangtian2_re_zhangjiao2.mp3 b/audio/skill/xinhuangtian2_re_zhangjiao2.mp3 new file mode 100644 index 000000000..0790f2bac Binary files /dev/null and b/audio/skill/xinhuangtian2_re_zhangjiao2.mp3 differ diff --git a/audio/skill/xinyaoming1.mp3 b/audio/skill/xinyaoming1.mp3 index f22a7d51d..63db87601 100644 Binary files a/audio/skill/xinyaoming1.mp3 and b/audio/skill/xinyaoming1.mp3 differ diff --git a/audio/skill/xinyaoming2.mp3 b/audio/skill/xinyaoming2.mp3 index 6e4850594..e174b6ad5 100644 Binary files a/audio/skill/xinyaoming2.mp3 and b/audio/skill/xinyaoming2.mp3 differ diff --git a/audio/skill/xixiu1.mp3 b/audio/skill/xixiu1.mp3 new file mode 100644 index 000000000..f0fa97c18 Binary files /dev/null and b/audio/skill/xixiu1.mp3 differ diff --git a/audio/skill/xixiu2.mp3 b/audio/skill/xixiu2.mp3 new file mode 100644 index 000000000..ea918f27d Binary files /dev/null and b/audio/skill/xixiu2.mp3 differ diff --git a/audio/skill/xizhen1.mp3 b/audio/skill/xizhen1.mp3 new file mode 100644 index 000000000..815a1a24f Binary files /dev/null and b/audio/skill/xizhen1.mp3 differ diff --git a/audio/skill/xizhen2.mp3 b/audio/skill/xizhen2.mp3 new file mode 100644 index 000000000..77333937a Binary files /dev/null and b/audio/skill/xizhen2.mp3 differ diff --git a/audio/skill/yuzhang1.mp3 b/audio/skill/yuzhang1.mp3 new file mode 100644 index 000000000..8b1ab67c8 Binary files /dev/null and b/audio/skill/yuzhang1.mp3 differ diff --git a/audio/skill/yuzhang2.mp3 b/audio/skill/yuzhang2.mp3 new file mode 100644 index 000000000..dc4a40836 Binary files /dev/null and b/audio/skill/yuzhang2.mp3 differ diff --git a/audio/skill/zhenshan1.mp3 b/audio/skill/zhenshan1.mp3 new file mode 100644 index 000000000..d638fe59c Binary files /dev/null and b/audio/skill/zhenshan1.mp3 differ diff --git a/audio/skill/zhenshan2.mp3 b/audio/skill/zhenshan2.mp3 new file mode 100644 index 000000000..d0c10854c Binary files /dev/null and b/audio/skill/zhenshan2.mp3 differ diff --git a/audio/skill/zhushi1.mp3 b/audio/skill/zhushi1.mp3 new file mode 100644 index 000000000..270242731 Binary files /dev/null and b/audio/skill/zhushi1.mp3 differ diff --git a/audio/skill/zhushi2.mp3 b/audio/skill/zhushi2.mp3 new file mode 100644 index 000000000..ae0637dc6 Binary files /dev/null and b/audio/skill/zhushi2.mp3 differ diff --git a/character/extra.js b/character/extra.js index 1867a7a20..9753fd739 100755 --- a/character/extra.js +++ b/character/extra.js @@ -13,6 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_yin:['shen_liubei','shen_luxun'], extra_lei:['shen_ganning','shen_zhangliao'], extra_key:['key_kagari','key_shiki','db_key_hina'], + extra_decade:['shen_jiangwei'], extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'], extra_mobilezhi:['shen_guojia','shen_xunyu'], extra_mobilexin:['shen_taishici','shen_sunce'], @@ -20,6 +21,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']], key_kagari:['female','shen',3,['kagari_zongsi'],['key']], key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], db_key_hina:['female','key',3,['hina_shenshi','hina_xingzhi'],['doublegroup:key:shen']], @@ -63,6 +65,193 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + jiufa:{ + audio:2, + trigger:{player:'useCardAfter'}, + frequent:true, + filter:function(event,player){ + return event.jiufa_counted&&player.getStorage('jiufa').length>=9; + }, + content:function(){ + 'step 0' + player.unmarkSkill('jiufa'); + event.cards=get.cards(9); + event.cards.sort(function(a,b){ + return get.number(b)-get.number(a); + }) + game.cardsGotoOrdering(event.cards); + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards){ + var str; + if(player==game.me&&!_status.auto){ + str='九伐:选择任意张点数相同的牌'; + } + else{ + str='九伐'; + } + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards); + event.time=get.utc(); + game.addVideo('showCards',player,['涉猎',get.cardsInfo(event.cards)]); + game.addVideo('delay',null,2); + "step 1" + var next=player.chooseButton([1,9],true); + next.set('dialog',event.videoId); + next.set('filterButton',function(button){ + if(!ui.selected.buttons.length) return true; + return get.number(ui.selected.buttons[0].link)==get.number(button.link); + }); + next.set('ai',function(button){ + return get.value(button.link,_status.event.player)*_status.event.getParent().cards.filter(function(i){ + return get.number(i)==get.number(button.link); + }).length; + }); + "step 2" + if(result.bool&&result.links){ + event.cards2=result.links; + } + else{ + event.finish(); + } + var time=1000-(get.utc()-event.time); + if(time>0){ + game.delay(0,time); + } + "step 3" + game.broadcastAll('closeDialog',event.videoId); + var cards2=event.cards2; + player.gain(cards2,'log','gain2'); + }, + marktext:'⑨', + intro:{ + content:'已记录牌名:$', + onunmark:true, + }, + group:'jiufa_count', + subSkill:{ + count:{ + trigger:{player:'useCard1'}, + forced:true, + charlotte:true, + popup:false, + firstDo:true, + filter:function(event,player){ + return !player.getStorage('jiufa').contains(event.card.name); + }, + content:function(){ + trigger.jiufa_counted=true; + player.markAuto('jiufa',[trigger.card.name]); + }, + }, + }, + }, + tianren:{ + audio:2, + trigger:{global:['loseAfter','cardsDiscardAfter']}, + forced:true, + filter:function(event,player){ + if(event.name=='lose'){ + if(event.position!=ui.discardPile) return false; + } + else{ + var evt=event.getParent(); + if(evt.relatedEvent&&evt.relatedEvent.name=='useCard') return false; + } + for(var i of event.cards){ + var owner=false; + if(event.hs&&event.hs.contains(i)) owner=event.player; + var type=get.type(i,null,owner); + if(type=='basic'||type=='trick') return true; + } + return false; + }, + content:function(){ + var num=0; + for(var i of trigger.cards){ + var owner=false; + if(trigger.hs&&trigger.hs.contains(i)) owner=trigger.player; + var type=get.type(i,null,owner); + if(type=='basic'||type=='trick') num++; + } + player.addMark('tianren',num); + }, + group:'tianren_maxHp', + intro:{content:'mark'}, + subSkill:{ + maxHp:{ + trigger:{player:['tianrenAfter','gainMaxHpAfter','loseMaxHpAfter']}, + forced:true, + filter:function(event,player){ + return player.countMark('tianren')>=player.maxHp; + }, + content:function(){ + player.removeMark('tianren',player.maxHp); + player.gainMaxHp(); + player.draw(2); + }, + }, + }, + }, + pingxiang:{ + audio:2, + enable:'phaseUse', + limited:true, + skillAnimation:true, + animationColor:'ice', + filter:function(event,player){ + return player.maxHp>9; + }, + content:function(){ + 'step 0' + player.awakenSkill('pingxiang'); + player.loseMaxHp(9); + event.num=0; + 'step 1' + event.num++; + player.chooseUseTarget({ + name:'sha', + nature:'fire', + isCard:true, + },'请选择火【杀】的目标('+(event.num==9?'⑨':event.num)+'/9)',false); + 'step 2' + if(result.bool&&event.num<9) event.goto(1); + else{ + player.removeSkill('jiufa'); + player.addSkill('pingxiang_effect'); + } + }, + ai:{ + order:function(){ + return get.order({ + name:'sha', + nature:'fire', + isCard:true, + }); + }, + result:{ + player:function(player){ + if(player.hasValueTarget({ + name:'sha', + nature:'fire', + isCard:true, + })) return 1; + return 0; + }, + }, + }, + subSkill:{ + effect:{ + marktext:'襄', + intro:{content:'手牌上限基数改为体力上限'}, + mod:{ + maxHandcardBase:function(player){ + return player.maxHp; + }, + }, + }, + }, + }, hina_shenshi:{ groupSkill:true, trigger:{player:['phaseUseBegin','phaseUseEnd']}, @@ -4917,6 +5106,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。若你本回合内以此法获得的牌数小于2,则你摸一张牌。②拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', pinghe:'冯河', pinghe_info:'锁定技。①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你有牌且你的体力上限大于1,则你防止此伤害,减一点体力上限并将一张手牌交给一名其他角色。然后若你拥有〖英霸〗,则伤害来源获得一个“平定”标记。', + shen_jiangwei:'神姜维', + jiufa:'九伐', + jiufa_info:'①当你声明使用牌时,你记录此牌的牌名。②当你使用牌结算结束后,若你的〖九伐〗记录中包含至少⑨种不同的牌名,则你可以展示牌堆顶的⑨张牌,选择并获得其中任意张点数相同的牌,清除所有的记录,将其余牌置入弃牌堆。', + tianren:'天任', + tianren_info:'锁定技。①当有一张基本牌或普通锦囊牌不因使用而进入弃牌堆后,你获得一枚“天任”标记。②当你获得“天任”标记或体力上限变化后,若你的“天任”数不小于X,则你移去X枚“天任”,加1点体力上限并摸两张牌(X为你的体力上限)。', + pingxiang:'平襄', + pingxiang_info:'限定技。出牌阶段,若你的体力上限大于⑨,则你可减⑨点体力上限,视为使用至多⑨张火【杀】,然后失去〖九伐〗,并将手牌上限基数改为体力上限直到游戏结束。', key_kagari:'篝', kagari_zongsi:'纵丝', @@ -4944,6 +5140,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_mobilezhi:'始计篇·智', extra_mobilexin:'始计篇·信', extra_offline:'神话再临·线下', + extra_decade:'十周年服神将', }, }; }); diff --git a/character/mobile.js b/character/mobile.js index 65b20c9f5..bd786996f 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -16,7 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_mougongtong:['sp_yangwan','liucheng'], 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","re_jiangwei","re_zhurong"], + mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji"], mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"], mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"], mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"], @@ -27,6 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + re_caiwenji:['female','qun',3,['rebeige','duanchang']], sp_jianggan:['male','wei',3,['spdaoshu','spdaizui']], peixiu:['male','qun',3,['xingtu','juezhi']], re_gaoshun:['male','qun',4,['rexianzhen','rejinjiu']], @@ -2739,11 +2740,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, enable:'phaseUse', usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.getEquip(1); - }, - selectTarget:[0,1], + //filterTarget:function(card,player,target){ + // return target!=player&&target.getEquip(1); + //}, + //selectTarget:[0,1], content:function(){ + var card=get.cardPile2(function(card){ + return get.subtype(card)=='equip1'; + }); + if(card) player.gain(card,'gain2'); + else{ + var targets=game.filterPlayer(function(current){ + return current.getEquip(1); + }); + if(targets.length){ + var target=targets.randomGet(); + player.gain(target.getEquip(1),target,'give'); + } + } + }, + content_old:function(){ 'step 0' if(!target){ var card=get.cardPile2(function(card){ @@ -15790,7 +15806,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_bianfuren:['ol_bianfuren','sp_bianfuren'], wangshuang:['wangshuang','sp_wangshuang'], huaman:['huaman','sp_huaman'], - gaolan:['gaolan','sp_gaolan'], + gaolan:['dc_gaolan','gaolan','sp_gaolan'], cuiyan:['sp_cuiyan','cuiyan'], wujing:['tw_wujing','wujing'], }, @@ -16441,7 +16457,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌并防止此伤害。', xin_caozhen:'手杀曹真', discretesidi:'司敌', - discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。', + discretesidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶<a,b>(b对其他角色不可见)。②一名角色a使用不为延时锦囊牌的牌指定b为目标时,若(aRb)∧(此牌目标数为1)为真,则{你从R内移除<a,b>,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,然后若场上没有处于濒死状态的角色,则你对a造成1点伤害。⒉摸两张牌};否则{你清除R内以a为第一元素的二元序偶}。', sp_chendong:'陈武董袭', spyilie:'毅烈', spyilie_info:'出牌阶段开始时,你可选择:①本阶段内使用【杀】的次数上限+1。②本回合内使用【杀】被【闪】抵消时,摸一张牌。③背水:失去1点体力,然后依次执行上述所有选项。', @@ -16492,7 +16508,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yiyong:'异勇', yiyong_info:'当你受到其他角色造成的渠道为【杀】的伤害后,若你的装备区内有武器牌,则你可以获得此【杀】对应的所有实体牌,然后将这些牌当做【杀】对伤害来源使用(无距离限制)。若其装备区内没有武器牌,则此伤害+1。', shanxie:'擅械', - shanxie_info:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', + shanxie_info:'①出牌阶段限一次,你可从牌堆中获得一张武器牌。若牌堆中没有武器牌,则你改为随机获得一名角色装备区内的一张武器牌。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', + shanxie_info_old:'①出牌阶段限一次,你可选择一项:⒈从牌堆中获得一张武器牌。⒉获得一名其他角色装备区内的一张武器牌并使用,然后其将一张手牌当做【杀】对你使用。②当其他角色使用【闪】响应你使用的【杀】时,若此【闪】没有点数或点数不大于你攻击范围的二倍,则你令此【闪】无效。', sunyi:'手杀孙翊', zaoli:'躁厉', zaoli_info:'锁定技。①你不能于回合内使用你手牌中不为本回合获得的牌。②当你使用或打出手牌时,你获得一个“厉”(至多4个)。③回合开始时,若你有“厉”,则你移去所有“厉”并弃置任意张牌,然后摸X+Y张牌。若X大于2,你失去1点体力(X为你移去的标记数,Y为你弃置的牌数)。', @@ -16613,6 +16630,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spdaoshu_info:'每轮限一次。一名敌方角色的出牌阶段开始时,若其有手牌,则你可以令其视为使用一张【酒】。其须声明一个基本牌的牌名,然后你判断其手牌区内是否有该牌名的牌。若你判断正确,则你随机获得其五张手牌,否则你不能响应其使用的牌直到回合结束。', spdaizui:'戴罪', spdaizui_info:'限定技。当你受到伤害值不小于体力值的伤害时,你可防止此伤害并将此伤害渠道对应的所有实体牌置于伤害来源的武将牌上,称为“释”。本回合结束时,其获得所有“释”。', + re_caiwenji:'手杀蔡琰', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/old.js b/character/old.js index 08fd74871..23d188118 100755 --- a/character/old.js +++ b/character/old.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_yijiang2:["old_zhonghui","madai"], old_yijiang3:["liru","old_zhuran","old_fuhuanghou","old_caochong"], old_yijiang4:["old_caozhen","old_chenqun","old_zhuhuan"], - old_yijiang5:["old_caoxiu","old_quancong","old_zhuzhi"], + old_yijiang5:["old_caoxiu","old_zhuzhi"], old_yijiang67:["ol_zhangrang","ol_liuyu"], old_sp:["old_lingju","old_maliang","old_machao","zhangliang","jsp_caoren","ol_guansuo","old_zhangxingcai","old_huangfusong","ol_maliang","old_wangyun"], old_yingbian:['junk_simayi'], @@ -55,7 +55,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_lingtong:['male','wu',4,['oldxuanfeng']], old_caoxiu:['male','wei',4,['taoxi']], old_caozhen:['male','wei',4,['sidi']], - old_quancong:['male','wu',4,['zhenshan']], old_lingju:['female','qun',3,['jieyuan','fenxin_old']], old_maliang:['male','shu',3,['xiemu','naman']], old_chenqun:['male','wei',3,['dingpin','oldfaen']], @@ -492,169 +491,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.2 } }, - zhenshan:{ - trigger:{player:'chooseToRespondBegin'}, - filter:function(event,player){ - if(event.responded) return false; - if(!event.filterCard({name:'shan'},player,event)&&!event.filterCard({name:'sha'},player,event)) return false; - if(player.hasSkill('zhenshan2')) return false; - var nh=player.countCards('h'); - return game.hasPlayer(function(current){ - return current!=player&¤t.countCards('h')0; - })){ - if(card.name=='sha'){ - if(card.nature=='fire') return 2.95; - else if(card.nature=='fire') return 2.92; - else return 2.9; - } - else if(card.name=='tao'||card.name=='shan'){ - return 4; - } - } - return 0; - }, - backup:function(links,player){ - return { - filterCard:function(){return false}, - viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, - selectCard:-1, - popname:true, - log:false, - precontent:function(){ - 'step 0' - player.chooseTarget('选择交换手牌的目标',function(card,player,target){ - return target.countCards('h')0&¤t.countCards('h')0; + }, + check:function(event,player){ + if(event.player.hasSkill('xinleiji')) return get.attitude(player,event.player)>0; + return true; + }, + prompt2:'令其进行判定,然后你可根据判定结果,弃置一张牌并令其执行对应效果。', + content:function(){ + 'step 0' + event.target=trigger.player; + event.source=trigger.source; + trigger.player.judge(); + 'step 1' + event.judgeResult=get.copy(result); + var str='是否弃置一张牌',strt=get.translation(target),strs=get.translation(source),goon=0; + switch(result.suit){ + case 'heart': + if(target.isIn()&&target.isDamaged()){ + str+=(',令'+strt+'回复1点体力'); + goon=get.recoverEffect(target,player,player); + } + break; + case 'diamond': + if(target.isIn()){ + str+=(',令'+strt+'摸两张牌'); + goon=get.effect(target,{name:'wuzhong'},player,player); + } + break; + case 'spade': + if(source&&source.isIn()){ + str+=(',令'+strs+'翻'+(source.isTurnedOver()?'回正':'')+'面'); + goon=get.attitude(player,source)*(source.isTurnedOver()?2:-2); + } + break; + case 'club': + if(source&&source.isIn()){ + str+=(',令'+strs+'弃置两张牌'); + var cards=source.getCards('he').sort(function(a,b){ + return get.value(a,source)-get.value(b,source); + }).slice(0,2); + for(var i of cards) goon+=get.value(i,source); + goon*=(-get.sgn(get.attitude(player,source))); + } + break; + } + str+='?'; + var str2=('若弃置点数为'+get.strNumber(result.number)+'的牌则收回自己弃置的牌'); + if(get.position(result.card,true)=='d'){ + str2+=(';若弃置花色为'+get.translation(result.suit)+'的牌则获得'+get.translation(result.card)); + } + player.chooseToDiscard('he',str,str2).set('goon',goon).set('ai',function(card){ + var goon=_status.event.goon; + var player=_status.event.player; + var result=_status.event.getParent().judgeResult; + var eff=Math.min(7,goon); + if(eff<=0) return 0; + if(get.suit(card,player)==result.suit) eff+=get.value(result.card,player); + if(get.number(card,player)==result.number) return eff; + return eff-get.value(card); + }); + 'step 2' + if(result.bool){ + event.card=result.cards[0]; + switch(event.judgeResult.suit){ + case 'heart': + if(target.isIn()&&target.isDamaged()) target.recover(); + break; + case 'diamond': + if(target.isIn()) target.draw(2); + break; + case 'spade': + if(source&&source.isIn()) source.turnOver(); + player.addExpose(0.1); + break; + case 'club': + if(source&&source.isIn()&&source.countCards('he')>0) source.chooseToDiscard(2,'he',true); + player.addExpose(0.1); + break; + } + } + else event.finish(); + 'step 3' + var gains=[]; + if(get.position(event.judgeResult.card,true)=='d'&&get.suit(card,player)==event.judgeResult.suit) gains.push(event.judgeResult.card); + if(get.position(card,true)=='d'&&get.number(card,player)==event.judgeResult.number) gains.push(card); + if(gains.length) player.gain(gains,'gain2'); + }, + }, //OL界张郃 reqiaobian:{ audio:2, @@ -159,8 +254,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addMark('reqiaobian',2); game.delayx(); }, - mark:true, + marktext:'变', intro:{ + name2:'变', content:function(storage,player){ var str='共有'+(storage||0)+'个标记'; if(player.storage.reqiaobian_jieshu){ @@ -1508,8 +1604,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); if(list.length&&game.hasPlayer((current)=>(current!=player))){ var next=player.chooseButton(['是否将一张锦囊牌交给一名其他角色?',list]).set('ai',function(button){ - return get.value(button.link,'raw'); - }); + if(_status.event.goon) return Math.max(0.1,get.value(button.link,'raw')); + return 0; + }).set('goon',game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain'); + })); if(!result.moved[1].length) next.set('forced',true); } else event.finish(); @@ -1521,7 +1620,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.card=card; player.chooseTarget(lib.filter.notMe,true,'令一名其他角色获得'+get.translation(card)).set('card',card).set('ai',function(target){ var card=_status.event.card,player=_status.event.player; - var eff=get.value(card,target)*get.attitude(player,target); + var eff=Math.max(0.1,get.value(card,target))*get.attitude(player,target); if(target.hasSkill('nogain')) eff/=10; return eff; }); @@ -8464,11 +8563,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function (){ "step 0" - target.chooseCard(true).ai=function(card){ + if(!target.countCards('h')){ + event.finish(); + return; + } + else target.chooseCard(true,'h').set('ai',function(card){ var player=_status.event.player; if((player.hasShan()||player.hp<3)&&get.color(card)=='black') return 0.5; return Math.max(1,20-get.value(card)); - }; + }); "step 1" target.showCards(result.cards); event.card2=result.cards[0]; @@ -11515,7 +11618,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rezaiqi:'再起', rezaiqi_info:'结束阶段开始时,你可以令至多X名角色选择一项:1.摸一张牌,2.令你回复1点体力(X为本回合进入弃牌堆的红色牌数)', ol_jiangwei:'界姜维', - re_caiwenji:'界蔡琰', + ol_caiwenji:'界蔡琰', re_baosanniang:'手杀鲍三娘', retuntian:'屯田', rebeige:'悲歌', @@ -11526,6 +11629,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_zhangzhang:'界张昭张纮', rehunzi:'魂姿', rehunzi_info:'觉醒技,准备阶段,若你的体力值不大于2,你减1点体力上限,并获得技能〖英姿〗和〖英魂〗。', + rezhijian:'直谏', rezhijian_info:'出牌阶段,你可以将手牌中的一张装备牌置于一名其他角色装备区里(不得替换原装备),然后摸一张牌。当你使用装备牌时,你可以摸一张牌。', refangquan:'放权', refangquan_info:'你可跳过你的出牌阶段,若如此做,你本回合的手牌上限为你的体力上限,且回合结束时,你可以弃置一张手牌并令一名其他角色进行一个额外的回合。', @@ -11819,7 +11923,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinbuyi_info:'一名角色进入濒死状态时,你可展示其一张手牌。若此牌不为基本牌,则其弃置此牌并回复1点体力。若其以此法弃置的牌移动前为其的唯一一张手牌,则其摸一张牌。', decadexianzhen:'陷阵', decadexianzhen2:'陷阵', - decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合使用【杀】或普通锦囊牌选择唯一目标后,可以令其也成为此牌的目标,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。', + decadexianzhen_info:'每回合限一次。出牌阶段,你可以和一名其他角色拼点。若你赢:本回合你无视该角色的防具,且对其使用牌没有次数和距离限制,且本回合对其使用牌造成伤害时,此伤害+1(每种牌名每回合限一次);若你没赢:你本回合内不能使用【杀】,且【杀】不计入手牌上限。', decadejinjiu:'禁酒', decadejinjiu_info:'锁定技。你的【酒】的牌名均视为【杀】且点数视为K;你的回合内,其他角色不能使用【酒】。', dc_xushu:'界徐庶', @@ -11832,6 +11936,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_zhanghe:'界张郃', reqiaobian:'巧变', reqiaobian_info:'①游戏开始时,你获得两枚“变”。②判定阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。③摸牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后可以获得至多两名其他角色的各一张手牌。④出牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段,然后你可以移动场上的一张牌。⑤弃牌阶段开始时,你可弃置一张牌或一枚“变”并跳过此阶段。⑥结束阶段,若你的〖巧变⑥〗记录中不包含你的手牌数,则你获得一枚“变”并记录你的手牌数。', + olbeige:'悲歌', + olbeige_info:'当有角色受到渠道为【杀】的伤害后,若你有牌,你可令其进行判定。然后你可弃置一张牌,根据判定结果执行以下的一个选项:♥,其回复1点体力;♦,其摸两张牌;♣,伤害来源弃置两张牌️;♠,伤害来源将武将牌翻面。若你弃置的牌与判定结果:点数相同,则你获得你弃置的牌;花色相同,则你获得判定牌。', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index 6fb53fa36..c8abafffe 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -7301,7 +7301,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunce:['re_sunben','re_sunce','sunce'], zhangzhang:['re_zhangzhang','zhangzhang'], zuoci:['re_zuoci','zuoci'], - caiwenji:['re_caiwenji','caiwenji'], + caiwenji:['ol_caiwenji','re_caiwenji','caiwenji'], xuyou:['sp_xuyou','xuyou'], guanqiujian:['guanqiujian','re_guanqiujian','old_guanqiujian'], chendao:['chendao','ns_chendao'], diff --git a/character/sp.js b/character/sp.js index 3c5d080dd..c71b74d4e 100755 --- a/character/sp.js +++ b/character/sp.js @@ -11238,6 +11238,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool) player.addToExpansion(result.cards,player,'give').gaintag.add('yishe'); }, group:'yishe_recover', + ai:{combo:'bushi'}, subSkill:{ recover:{ audio:'yishe', @@ -11292,7 +11293,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.finish(); 'step 3' if(event.count>0&&player.getExpansions('yishe').length) event.goto(1); - } + }, + ai:{combo:'yishe'}, }, midao:{ audio:2, @@ -11352,6 +11354,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, ai:{ + combo:'yishe', rejudge:true, tag:{ rejudge:0.6 @@ -12827,9 +12830,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, qiangwu3:{ mod:{ - aiOrder:function(player,card,num){ - if(card.name=='sha'&&get.number(card)>player.storage.qiangwu) return num+2; - }, targetInRange:function(card,player){ if(_status.currentPhase==player&&card.name=='sha'&&get.number(card)=_status.event.player.getDamagedHp()) return false; + } + return true; + } + } + return true; + }); + next.set('processAI',function(list){ + var cards=list[0][1].slice(0).sort(function(a,b){ + if(b.name=='sha') return 1; + return get.value(b)-get.value(a); + }); + return [cards,cards.splice(0,_status.event.player.getDamagedHp())]; + }); + 'step 1' + game.broadcastAll('closeDialog',event.videoId); + game.addVideo('cardDialog',null,event.videoId); + var moved=result.moved; + if(moved[0].length>0){ + for(var i of moved[0]){ + i.fix(); + ui.cardPile.appendChild(i); + } + } + if(moved[1].length>0) player.gain(moved[1],'gain2'); + }, + ai:{ + maixie:true, + maixie_hp:true, + effect:{ + target:function(card,player,target){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return; + if(!target.hasFriend()) return; + var num=1; + if(!player.needsToDiscard()&&target.isDamaged()){ + 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]; + } + } + } + } + }, + fensi:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + content:function(){ + 'step 0' + if(!game.hasPlayer(function(current){ + return current!=player&¤t.hp>=player.hp; + })){ + player.damage(); + event.finish(); + return; + } + else{ + player.chooseTarget(true,'忿肆:对一名体力值不小于你的角色造成1点伤害',function(card,player,target){ + return target.hp>=player.hp; + }).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + } + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.line(target,'green'); + target.damage(); + } + else event.finish(); + 'step 2' + if(target.isIn()&&target.canUse('sha',player,false)) target.useCard({name:'sha',isCard:true},player,false,'noai'); + }, + }, + juetao:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + limited:true, + skillAnimation:true, + animationColor:'thunder', + filter:function(event,player){ + return player.hp==1; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('juetao'),lib.filter.notMe).set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('juetao',target); + player.awakenSkill('juetao'); + } + else event.finish(); + 'step 2' + var card=get.bottomCards()[0]; + game.cardsGotoOrdering(card); + player.showCards(card); + player.chooseUseTarget(card,true,false,'nodistance').set('filterTarget',function(card,player,target){ + var evt=_status.event; + if(_status.event.name=='chooseTarget') evt=evt.getParent(); + if(target!=player&&target!=evt.juetao_target) return false; + return lib.filter.targetEnabledx(card,player,target); + }).set('juetao_target',target); + 'step 3' + if(result.bool&&target.isIn()) event.goto(2); + }, + }, + zhushi:{ + audio:2, + usable:1, + trigger:{global:'recoverEnd'}, + direct:true, + filter:function(event,player){ + return player!=event.player&&event.player.group=='wei'&&event.player==_status.currentPhase&& + event.player.isIn()&&player.hasZhuSkill('zhushi',event.player); + }, + content:function(){ + 'step 0' + var str=get.translation(player); + trigger.player.chooseBool('是否响应'+player+'的主公技【助势】?','令'+get.translation(player)+'摸一张牌').set('goon',get.attitude(trigger.player,player)>0).set('ai',()=>_status.event.goon); + 'step 1' + if(result.bool){ + player.logSkill('zhushi'); + trigger.player.line(player,'thunder'); + player.draw(); + } + else player.storage.counttrigger.zhushi--; + }, + }, + //高览 + xizhen:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current!=player&&(player.canUse('sha',current,false)||player.canUse('juedou',current,false)); + }) + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('xizhen'),'视为对一名角色使用【杀】或【决斗】',function(card,player,target){ + return target!=player&&(player.canUse('sha',target,false)||player.canUse('juedou',target,false)); + }).set('ai',function(target){ + var player=_status.event.player; + var eff1=0,eff2=0; + if(player.canUse('sha',target,false)) eff1=get.effect(target,{name:'sha'},player,player); + if(player.canUse('juedou',target,false)) eff2=get.effect(target,{name:'juedou'},player,player); + var effx=Math.max(eff1,eff2); + if(effx<=0) return 0; + if(target.isHealthy()) effx*=3; + if(get.attitude(player,target)>0) effx*=1.6; + return effx; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('xizhen',target); + var list=[]; + if(player.canUse('sha',target,false)) list.push('sha'); + if(player.canUse('juedou',target,false)) list.push('juedou'); + if(list.length==1) event._result={control:list[0]}; + else player.chooseControl(list).set('prompt','视为对'+get.translation(target)+'使用…').set('ai',function(){ + var player=_status.event.player,target=_status.event.getParent().target; + var eff1=get.effect(target,{name:'sha'},player,player),eff2=get.effect(target,{name:'juedou'},player,player); + return eff1>eff2?0:1; + }); + } + else event.finish(); + 'step 2' + player.useCard({name:result.control,isCard:true},target,false); + 'step 3' + if(target.isIn()){ + player.storage.xizhen_effect=target; + player.addTempSkill('xizhen_effect','phaseUseAfter'); + } + }, + subSkill:{ + effect:{ + audio:'xizhen', + charlotte:true, + onremove:true, + trigger:{global:['useCard','respond']}, + logTarget:function(event,player){ + return player.storage.xizhen_effect; + }, + forced:true, + filter:function(event,player){ + return Array.isArray(event.respondTo)&&event.respondTo[0]==player&&player.storage.xizhen_effect&&player.storage.xizhen_effect.isIn(); + }, + content:function(){ + var target=player.storage.xizhen_effect; + if(target.isHealthy()) player.draw(2); + else{ + target.recover(); + player.draw(); + } + }, + mark:'character', + intro:{content:'已指定$为目标'}, + }, + }, + }, + //管宁 + dunshi:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + usable:1, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[['sha','shan','tao','jiu'],0]; + }, + hiddenCard:function(player,name){ + if(player.storage.dunshi&&player.storage.dunshi[0].contains(name)&&!player.getStat('skill').dunshi) return true; + return false; + }, + marktext:'席', + mark:true, + intro:{ + markcount:function(storage){ + return storage[1]; + }, + content:function(storage,player){ + if(!storage) return; + var str='
  • '; + if(!storage[0].length){ + str+='已无可用牌'; + } + else{ + str+='剩余可用牌:'; + str+=get.translation(storage[0]); + } + str+='
  • “席”标记数量:'; + str+=(storage[1]); + return str; + }, + }, + filter:function(event,player){ + if(event.type=='wuxie') return false; + var storage=player.storage.dunshi; + if(!storage||!storage[0].length) return false; + for(var i of storage[0]){ + var card={name:i,isCard:true}; + if(event.filterCard(card,player,event)) return true; + } + return false; + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + var storage=player.storage.dunshi; + for(var i of storage[0]) list.push(['基本','',i]); + return ui.create.dialog('遁世',[list,'vcard'],'hidden'); + }, + filter:function(button,player){ + var evt=_status.event.getParent(); + return evt.filterCard({name:button.link[2],isCard:true},player,evt); + }, + check:function(button){ + var card={name:button.link[2]},player=_status.event.player; + if(_status.event.getParent().type!='phase') return 1; + if(card.name=='jiu') return 0; + if(card.name=='sha'&&player.hasSkill('jiu')) return 0; + return player.getUseValue(card,null,true); + }, + backup:function(links,player){ + return { + audio:'dunshi', + filterCard:function(){return false}, + popname:true, + viewAs:{ + name:links[0][2], + isCard:true, + }, + selectCard:-1, + precontent:function(){ + player.addTempSkill('dunshi_damage'); + player.storage.dunshi_damage=event.result.card.name; + }, + } + }, + prompt:function(links,player){ + return '选择【'+get.translation(links[0][2])+'】的目标'; + } + }, + ai:{ + respondSha:true, + respondShan:true, + skillTagFilter:function(player,tag,arg){ + var storage=player.storage.dunshi; + if(!storage||!storage[0].length) return false; + if(player.getStat('skill').dunshi) return false; + switch(tag){ + case 'respondSha': return (_status.event.type!='phase'||(player==game.me||player.isUnderControl()||player.isOnline()))&&storage[0].contains('sha'); + case 'respondShan': return storage[0].contains('shan'); + case 'save': + if(arg==player&&storage[0].contains('jiu')) return true; + return storage[0].contains('tao'); + } + }, + order:2, + result:{ + player:function(player){ + if(_status.event.type=='dying'){ + return get.attitude(player,_status.event.dying); + } + return 1; + }, + }, + }, + initList:function(){ + var list,skills=[]; + var banned=['xunyi']; + if(get.mode()=='guozhan'){ + list=[]; + for(var i in lib.characterPack.mode_guozhan) list.push(i); + } + else if(_status.connectMode) list=get.charactersOL(); + else{ + list=[]; + for(var i in lib.character){ + if(lib.filter.characterDisabled2(i)||lib.filter.characterDisabled(i)) continue; + list.push(i); + } + } + for(var i of list){ + if(i.indexOf('gz_jun')==0) continue; + for(var j of lib.character[i][3]){ + var skill=lib.skill[j]; + if(!skill||skill.zhuSkill||banned.contains(j)) continue; + if(skill.ai&&(skill.ai.combo||skill.ai.notemp||skill.ai.neg)) continue; + var info=get.translation(j); + for(var ix=0;ix0) return 3; + return 0; + case 1: + return 1; + case 2: + var num=player.storage.dunshi[1]; + for(var i of ui.selected.buttons){ + if(i.link==1) num++; + } + if(num>0&&player.isDamaged()) return 2; + return 0; + } + }); + 'step 1' + if(player.isOnline2()){ + player.send('closeDialog',event.videoId); + } + event.dialog.close(); + event.links=result.links.sort(); + for(var i of event.links){ + game.log(player,'选择了','#g【遁世】','的','#y选项'+get.cnNumber(i+1,true)); + } + if(event.links.contains(0)){ + trigger.cancel(); + if(!_status.dunshi_list) lib.skill.dunshi.initList(); + var list=_status.dunshi_list.filter(function(i){ + return !target.hasSkill(i,null,null,false); + }).randomGets(3); + if(list.length==0) event.goto(3); + else{ + event.videoId=lib.status.videoId++; + var func=function(skills,id){ + var dialog=ui.create.dialog('forcebutton'); + dialog.videoId=id; + dialog.add('令'+get.translation(target)+'获得一个技能'); + for(var i=0;i
    【'+get.translation(skills[i])+'】
    '+lib.translate[skills[i]+'_info']+'
    '); + } + dialog.addText('
    '); + } + if(player.isOnline()) player.send(func,list,event.videoId); + else if(player==game.me) func(list,event.videoId); + player.chooseControl(list).set('ai',function(){ + var controls=_status.event.controls; + if(controls.contains('cslilu')) return 'cslilu'; + return controls[0]; + }); + } + } + else event.goto(3); + 'step 2' + game.broadcastAll('closeDialog',event.videoId); + target.addSkillLog(result.control); + 'step 3' + var storage=player.storage.dunshi; + if(event.links.contains(1)){ + storage[0].remove(event.cardname); + storage[1]++; + player.markSkill('dunshi'); + } + if(event.links.contains(2)){ + player.loseMaxHp(); + if(storage[1]>0) player.draw(storage[1]); + } + }, + }, + }, + }, + //滕胤 + chenjian:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + prompt2:function(event,player){ + return '展示牌堆顶的'+get.cnNumber(3+player.countMark('chenjian'))+'张牌。然后你可依次执行以下两项中的任意项:⒈弃置一张牌,然后令一名角色获得与你弃置牌花色相同的牌。⒉使用其中剩余的一张牌。若你执行了所有选项,则你获得一枚“陈见”,然后重铸所有手牌。'; + }, + content:function(){ + 'step 0' + var cards=get.cards(3+player.countMark('chenjian')); + event.cards=cards; + game.cardsGotoOrdering(cards); + game.log(player,'展示了',event.cards); + event.videoId=lib.status.videoId++; + game.broadcastAll(function(player,id,cards){ + var str=get.translation(player)+'发动了【陈见】'; + var dialog=ui.create.dialog(str,cards); + dialog.videoId=id; + },player,event.videoId,event.cards); + game.addVideo('showCards',player,[get.translation(player)+'发动了【陈见】',get.cardsInfo(event.cards)]); + game.delay(2); + 'step 1' + if(!player.countCards('he')){ + game.broadcastAll('closeDialog',event.videoId); + game.addVideo('cardDialog',null,event.videoId); + event.goto(4); + } + else{ + player.chooseToDiscard('he').set('prompt',false).set('ai',function(card){ + var cards=_status.event.getParent().cards,val=-get.value(card),suit=get.suit(card); + for(var i of cards){ + if(get.suit(i,false)==suit) val+=get.value(i,'raw'); + } + return val; + }); + var func=function(id){ + var dialog=get.idDialog(id); + if(dialog) dialog.content.firstChild.innerHTML='是否弃置一张牌?'; + }; + if(player==game.me) func(event.videoId); + else if(player.isOnline()) player.send(func,event.videoId); + } + 'step 2' + game.broadcastAll('closeDialog',event.videoId); + game.addVideo('cardDialog',null,event.videoId); + if(result.bool){ + event.goon1=true; + var suit=get.suit(result.cards[0],player); + var cards2=event.cards.filter(function(i){ + return get.suit(i,false)==suit; + }); + if(cards2.length){ + event.cards2=cards2; + player.chooseTarget(true,'选择一名角色获得'+get.translation(cards2)).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(att>0){ + return att+Math.max(0,5-target.countCards('h')); + } + return att; + }); + } + else event.goto(4); + } + else event.goto(4); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.gain(event.cards2,'gain2'); + event.cards.removeArray(event.cards2); + } + 'step 4' + var cards2=cards.filter(function(i){ + return player.hasUseTarget(i); + }); + if(cards2.length) player.chooseButton(['是否使用其中的一张牌?',cards2]).set('ai',function(button){ + return player.getUseValue(button.link); + }); + else event.finish(); + 'step 5' + if(result.bool){ + player.chooseUseTarget(true,result.links[0],false); + event.goon2=true; + } + 'step 6' + if(event.goon1&&event.goon2){ + if(player.countMark('chenjian')<2) player.addMark('chenjian',1,false); + var cards=player.getCards('h'); + player.loseToDiscardpile(cards); + player.draw(cards.length); + } + }, + marktext:'见', + intro:{content:'展示牌数量+2'}, + }, + xixiu:{ + mod:{ + canBeDiscarded:function(card,player,target){ + if(player!=target&&get.position(card)=='e'&&target.countCards('e')==1) return false; + }, + }, + audio:2, + trigger:{target:'useCardToTargeted'}, + forced:true, + filter:function(event,player){ + if(player==event.player||!player.countCards('e')) return false; + var suit=get.suit(event.card,false); + if(suit=='none') return false; + return player.hasCard(function(card){ + return get.suit(card,player)==suit; + },'e'); + }, + content:function(){ + player.draw(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(typeof card=='object'&&player!=target){ + var suit=get.suit(card); + if(suit=='none') return; + if(player.hasCard(function(card){ + return get.suit(card,player)==suit; + },'e')) return [1,0.08]; + } + }, + }, + }, + }, + //朱灵 + dczhanyi:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + var list=['basic','trick','equip']; + var list2=[]; + var hs=player.getCards('he'); + for(var card of hs){ + var type=get.type2(card,player); + if(list.contains(type)){ + var bool=lib.filter.cardDiscardable(card,player,'dczhanyi'); + if(bool) list2.add(type); + else{ + list.remove(type); + list2.remove(type); + } + } + } + return list2.length>0; + }, + content:function(){ + 'step 0' + var list=['basic','trick','equip']; + var list2=[]; + var hs=player.getCards('he'); + for(var card of hs){ + var type=get.type2(card,player); + if(list.contains(type)){ + var bool=lib.filter.cardDiscardable(card,player,'dczhanyi'); + if(bool) list2.add(type); + else{ + list.remove(type); + list2.remove(type); + } + } + } + player.chooseControl(list2,'cancel2').set('prompt',get.prompt('dczhanyi')).set('prompt2','弃置一种类型的所有牌').set('ai',function(){ + var player=_status.event.player; + var getval=function(control){ + if(control=='cancel2') return 0; + var hs=player.getCards('h'),eff=0; + var es=player.getCards('e'); + var ss=player.getCards('s'); + var sha=player.getCardUsable({name:'sha'}); + for(var i of hs){ + var type=get.type2(i); + if(type==control){ + eff-=get.value(i,player); + } + else{ + switch(type){ + case 'basic': + if(sha>0&&get.name(card)=='sha'){ + sha--; + var add=3; + if(!player.hasValueTarget(card)&&player.hasValueTarget(card,false)) add+=player.getUseValue(card,false); + eff+=add; + } + break + case 'trick': + if(player.hasValueTarget(card)) eff+=6; + break; + case 'equip': + if(player.hasValueTarget({name:'guohe_copy2'})) eff+=player.getUseValue({name:'guohe_copy2'}); + break; + } + } + } + if(control=='equip'){ + for(var i of es) eff-=get.value(i,player); + } + else{ + for(var i of ss){ + var type=get.type2(i); + if(type==control) continue; + switch(type){ + case 'basic': + if(sha>0&&get.name(card)=='sha'){ + sha--; + var add=3; + if(!player.hasValueTarget(card)&&player.hasValueTarget(card,false)) add+=player.getUseValue(card,false); + eff+=add; + } + break + case 'trick': + if(player.hasValueTarget(card)) eff+=6; + break; + case 'equip': + if(player.hasValueTarget({name:'guohe_copy2'})) eff+=player.getUseValue({name:'guohe_copy2'}); + break; + } + } + } + return eff; + }; + var controls=_status.event.controls.slice(0); + var eff=0,current='cancel2'; + for(var i of controls){ + var effx=getval(i); + if(effx>eff){ + eff=effx; + current=i; + } + } + return current; + }); + 'step 1' + var type=result.control; + if(type!='cancel2'){ + event.type=type; + var cards=player.getCards('h',function(card){ + return get.type2(card,player)==type; + }); + if(cards.length){ + player.logSkill('dczhanyi'); + player.discard(cards); + } + else event.finish(); + } + else event.finish(); + 'step 2' + var list=['basic','trick','equip']; + for(var i of list){ + if(i!=event.type) player.addTempSkill('dczhanyi_'+i); + } + }, + subSkill:{ + basic:{ + charlotte:true, + marktext:'基', + mark:true, + intro:{ + content:'使用基本牌无距离限制,且伤害值和回复值基数+1', + }, + trigger:{source:['damageBegin1','recoverBegin']}, + forced:true, + filter:function(event,player){ + var evt=event.getParent(); + return evt.type=='card'&&get.type(evt.card,false)=='basic'; + }, + logTarget:'player', + content:function(){ + trigger.num++; + }, + mod:{ + targetInRange:function(card){ + if(get.type(card)=='basic') return true; + }, + }, + ai:{ + damageBonus:true, + }, + }, + trick:{ + charlotte:true, + marktext:'锦', + mark:true, + intro:{ + content:'使用锦囊牌时摸一张牌,且锦囊牌不计入本回合的手牌上限', + }, + trigger:{player:'useCard'}, + forced:true, + filter:function(event,player){ + return get.type2(event.card)=='trick'; + }, + content:function(){ + player.draw(); + }, + mod:{ + ignoredHandcard:function(card,player){ + if(get.type2(card,player)=='trick') return true; + }, + cardDiscardable:function(card,player,name){ + if(name=='phaseDiscard'&&get.type2(card,player)=='trick') return false; + } + }, + }, + equip:{ + charlotte:true, + marktext:'装', + mark:true, + intro:{ + content:'使用装备牌时,可弃置一名其他角色的一张牌', + }, + trigger:{player:'useCard'}, + direct:true, + filter:function(event,player){ + return get.type(event.card)=='equip'&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0)); + }, + content:function(){ + 'step 0' + player.chooseTarget('战意:是否弃置一名其他角色的一张牌?',function(card,player,target){ + return target!=player&&target.countDiscardableCards(player,'he')>0; + }).set('ai',function(target){ + var player=_status.event.player; + return get.effect(target,{name:'guohe_copy2'},player,player); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('dczhanyi_equip',target); + player.discardPlayerCard(target,'he',true); + } + }, + } + }, + }, + //骆统 + renzheng:{ + audio:2, + trigger:{global:['damageCancelled','damageZero','damageAfter']}, + forced:true, + filter:function(event,player,name){ + if(name=='damageCancelled') return true; + for(var i of event.change_history){ + if(i<0) return true; + } + return false; + }, + content:function(){ + player.draw(2); + }, + }, + jinjian:{ + audio:2, + trigger:{source:'damageBegin1'}, + logTarget:'player', + filter:function(event,player){ + return !event.jinjian_source2&&!player.hasSkill('jinjian_source2'); + }, + prompt2:'令即将对其造成的伤害+1', + check:function(event,player){ + return get.attitude(player,event.player)<0&&!event.player.hasSkillTag('filterDamage',null,{ + player:player, + card:event.card, + }); + }, + content:function(){ + trigger.jinjian_source=true; + trigger.num++; + player.addTempSkill('jinjian_source2') + }, + group:'jinjian_player', + subSkill:{ + player:{ + audio:'jinjian', + trigger:{player:'damageBegin3'}, + filter:function(event,player){ + return !event.jinjian_player2&&!player.hasSkill('jinjian_player2'); + }, + prompt2:'令即将受到的伤害-1', + content:function(){ + trigger.jinjian_player=true; + trigger.num--; + player.addTempSkill('jinjian_player2') + }, + }, + source2:{ + trigger:{source:'damageBegin1'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return !event.jinjian_source; + }, + content:function(){ + trigger.num--; + trigger.jinjian_source2=true; + player.removeSkill('jinjian_source2'); + }, + marktext:' -1 ', + intro:{ + content:'下次造成的伤害-1', + }, + }, + player2:{ + trigger:{player:'damageBegin3'}, + forced:true, + charlotte:true, + filter:function(event,player){ + return !event.jinjian_player; + }, + content:function(){ + trigger.num++; + trigger.jinjian_player2=true; + player.removeSkill('jinjian_player2'); + }, + marktext:' +1 ', + intro:{ + content:'下次受到的伤害+1', + }, + }, + }, + ai:{ + maixie_defend:true, + threaten:0.9, + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing')) return; + if(target.hujia) return; + if(player._jinjian_tmp) return; + if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return; + if(get.tag(card,'damage')){ + if(target.hasSkill('jinjian_player2')){ + return [1,-2]; + } + else{ + if(get.attitude(player,target)>0){ + return [0,0.2]; + } + if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){ + var sha=player.getCardUsable({name:'sha'}); + player._jinjian_tmp=true; + var num=player.countCards('h',function(card){ + if(card.name=='sha'){ + if(sha==0){ + return false; + } + else{ + sha--; + } + } + return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0; + }); + delete player._jinjian_tmp; + if(player.hasSkillTag('damage')){ + num++; + } + if(num<2){ + return [0,0.8]; + } + } + } + } + } + } + } + }, //吉本 xunli:{ audio:2, @@ -393,8 +1375,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else if(num==num2) target.insertPhase(); else{ player.draw(2); - target.removeMark('yijiao',num); } + target.removeMark('yijiao',num); }, }, }, @@ -8345,6 +9327,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ else event.cards=result.links; 'step 4' game.broadcastAll('closeDialog',event.videoId); + game.addVideo('cardDialog',null,event.videoId); if(!cards.length){ event.finish(); return; @@ -13285,6 +14268,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wufan:'吴范(?-226年),字文则,会稽上虞(今浙江绍兴上虞区)人。三国时期孙吴官员,擅长术数。与刘惇、赵达、严武、曹不兴、皇象、宋寿和郑妪合称“吴中八绝”。吴范以推算天象节气和观察气候闻名于郡中。孙权起于东南,他委身事奉,每推算灾祥多应验,遂显名。孙权委以骑都尉,领太史令。初,孙权为将军时,他曾说江南有王气。及孙权立为吴王,论功行封,欲以为都亭侯,但因不愿将其术要诀告知孙权,为权所怨恨,被除名。黄武中,病死。', mamidi:'马日(mì)磾(dí)(?~194年),字翁叔。扶风茂陵(今陕西省兴平市)人。东汉中后期大臣,经学大师马融之族孙(一作族子)。马日磾年轻时即继承马融学说,以才学入仕。曾任谏议大夫,与蔡邕、卢植等人东观典校官藏的《五经》记传,并参与续写《东观汉记》。后历任射声校尉、太尉、太常等职。初平三年(192年),掌权的李傕任命马日磾为太傅、录尚书事,与太仆赵岐共同出使关东。他到寿春袁术处后,对其多有所求,遭袁术轻鄙,袁术遂夺其符节,来随意征辟将士,并企图强迫马日磾任其军师,马日磾求去不能,忧愤发病,兴平元年(194年),卒于寿春。', licaiwei:'李采薇,生卒年不详,汉末将领庞德之妻,庞会之母。襄樊之战时,庞德任先锋,随于禁率军增援驻守樊城的曹仁。出战前,他将妻子李采薇与年仅六岁的儿子庞会叫来面前,对李采薇说:“吾今为先锋,义当效死疆场。我若死,汝好生看养吾儿。吾儿有异相,长大必当与吾报仇也。”李采薇闻言,与儿子痛哭送别庞德。她知道丈夫已下定决心,若无法胜利归还则必当战死沙场,绝不会投降求生。其后前线果然传来消息:魏军全军覆没,于禁投降,庞德誓死不降被关羽所杀。其子庞会自幼丧父,由母亲抚养长大。成年后,庞会性格勇烈,有先父之风。他多次立下战功,深受魏文帝曹丕的喜爱。后来庞会随钟会、邓艾伐蜀,成都城破之后,尽灭关氏家以报父仇。', + tengyin:'滕胤(?-256年),字承嗣,三国时期吴国重臣,北海郡剧县(今山东省昌乐县)人。滕胤仪表堂堂,少时有节操,后娶公主为妻。孙权称王后,滕胤被封都亭侯。其后历任丹杨太守、吴郡太守、会稽太守。孙亮继位后,出任太常、卫将军。诸葛恪被杀后,群臣推举滕胤为司徒,但遭权臣孙峻党羽所阻挠,滕胤也有意避嫌,最终只晋爵高密侯。孙峻死后,由其堂弟孙綝执政。滕胤的连襟、骠骑将军吕据联系北伐前线诸将推举滕胤为相,希望分割孙綝权力,但并未成功,滕胤被改任大司马,镇守武昌。不久,滕胤与吕据密谋推翻孙綝,因计划泄露而被杀,惨遭灭族。孙綝被杀后,景帝孙休为滕胤平反。', + guanning:'管宁(158年—241年),字幼安。北海郡朱虚县(今山东省安丘、临朐东南)人。汉末三国时期著名隐士。管宁与华歆、邴原并称为“一龙”。汉末天下大乱时,与邴原及王烈等人避于辽。在当地只谈经典而不问世事,做讲解《诗经》《书经》,谈祭礼、整治威仪、陈明礼让等教化工作,人们都很乐于接受他的教导。直到魏文帝黄初四年(公元223年)才返乡,辽东太守公孙恭亲自送别。此后曹魏几代帝王数次征召管宁,他都没有应命。正始二年(公元241年),管宁逝世,年八十四。著有《氏姓论》。', + caomao:'曹髦(241年11月15日-260年6月2日)[1],字彦士,沛国谯县(今安徽省亳州市)人,魏文帝曹丕之孙,东海王曹霖之子,曹魏第四位皇帝(254年11月1日-260年6月2日)。正始二年(241年),生于东海王宫,自幼聪明好学,才慧早成,正始五年(244年),封为高贵乡公,嘉平六年(254年),大将军司马师废除齐王曹芳后,拥立为帝,年号正元,曹髦文才武略,崇拜少康,不满司马氏专权秉政,甘露五年(260年),亲自讨伐司马昭,为太子舍人成济所弑,年仅十九岁,以王礼葬于洛阳西北。曹髦擅长诗文,创制了九言诗,传世文章有《伤魂赋并序》《颜子论》等。爱好儒学,亲赴太学论道,著有《春秋左氏传音》(失传)。精通绘画,一说为中国第一位成为画家的皇帝,唐张彦远《历代名画记》目曹髦为中品。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -13344,6 +14330,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var info=lib.skill.yuqi.getInfo(player); return '每回合限两次。当有角色受到伤害后,若你至其的距离不大于'+info[0]+',则你可以观看牌堆顶的'+info[1]+'张牌。你将其中至多'+info[2]+'张牌交给受伤角色,然后可以获得剩余牌中的至多'+info[3]+'张牌,并将其余牌以原顺序放回牌堆顶。(所有具有颜色的数字至多为5)'; }, + dunshi:function(player){ + var info=player.storage.dunshi; + var str='每回合限一次。你可以视为使用或打出一张'; + var list=['sha','shan','tao','jiu']; + for(var i of list){ + var strx='【'+get.translation(i)+'】'; + if(!info||!info[0].contains(i)) strx=(''+strx+''); + str+=strx; + if(i!='jiu') str+='/'; + } + str+=',然后当前回合角色于本回合内下一次造成伤害时,你选择两项:⒈防止此伤害。系统从技能名中包含“仁/义/礼/智/信”字样的技能中随机选择三个其未拥有的技能,然后你令当前回合角色获得其中一个技能。⒉从〖遁世〗中删除你本次使用或打出的牌并获得一个“赂”。⒊减1点体力上限并摸X张牌(X为你的“赂”数)。'; + return str; + }, }, perfectPair:{ }, @@ -13378,6 +14377,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ miheng:['miheng','re_miheng'], re_hejin:['re_hejin','tw_hejin'], fengfangnv:['re_fengfangnv','fengfangnv'], + luotong:['luotong','dc_luotong'], }, translate:{ lijue:"李傕", @@ -13555,7 +14555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ beizhan:'备战', beizhan2:'备战', beizhan_info:'结束阶段,你可以令一名角色将手牌摸至体力上限(至多为5)。其下个回合开始时,若其手牌数为全场最多,则其此回合内使用的牌不能指定其他角色为目标。', - gaolan:'高览', + gaolan:'OL高览', xiying:'袭营', xiying2:'袭营', xiying_info:'出牌阶段开始时,你可以弃置一张非基本手牌,然后令所有其他角色依次选择一项:弃置一张牌,或本回合内不能使用或打出牌;且你本回合内获得如下效果:结束阶段,若你于本回合的出牌阶段内造成过伤害,则你从牌堆中获得一张伤害性基本牌或普通锦囊牌。', @@ -14065,7 +15065,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhengding_info:'锁定技。当你于回合外使用或打出牌响应其他角色使用的牌时,若这两张牌花色相同,则你加1点体力上限。', licaiwei:'李采薇', yijiao:'异教', - yijiao_info:'出牌阶段限一次,你可以选择一名没有“异”标记的其他角色并声明一个整数X(X∈[1,4]),该角色获得10X个“异”标记。有“异”标记的角色的结束阶段,若其本回合使用牌的点数之和:1.小于“异”标记数,其随机弃置一张手牌;2.等于“异”标记数,该角色本回合结束后进行一个额外的回合;3.大于“异”标记数,你摸两张牌。回合结束时移去“异”标记。', + yijiao_info:'出牌阶段限一次,你可以选择一名没有“异”标记的其他角色并声明一个整数X(X∈[1,4]),该角色获得10X个“异”标记。有“异”标记的角色的结束阶段,其移去“异”标记,且若其本回合使用牌的点数之和:1.小于“异”标记数,其随机弃置一张手牌;2.等于“异”标记数,该角色本回合结束后进行一个额外的回合;3.大于“异”标记数,你摸两张牌。', qibie:'泣别', qibie_info:'一名角色死亡后,若你有手牌且这些手牌均可被弃置,则你可以弃置所有手牌,然后回复1点体力并摸X+1张牌(X为你弃置的牌数)。', dc_jiben:'吉本', @@ -14075,6 +15075,34 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhishi_info:'结束阶段,你可选择一名角色。当该角色于你的下回合开始前{成为【杀】的目标后或进入濒死状态时},你可移去任意张“疠”,然后其摸等量的牌。', lieyi:'烈医', lieyi_info:'出牌阶段限一次。你可以展示所有“疠”并选择一名其他角色,对其使用其中的一张可对其使用的牌(无距离和次数限制)并重复此流程,并将其余的牌置于弃牌堆。然后若其存活且未于此流程中因受到伤害而进入过濒死状态,则你失去1点体力。', + dc_luotong:'骆统', + renzheng:'仁政', + renzheng_info:'锁定技。当有伤害被防止时,或伤害值发生过减少的伤害事件结算结束后,你摸两张牌。', + jinjian:'进谏', + jinjian_info:'①当你造成伤害时,你可令此伤害+1,然后你本回合内下一次造成的伤害-1且不触发〖进谏①〗。②当你受到伤害时,你可令此伤害-1。然后你于本回合内下一次受到的伤害+1且不触发〖进谏②〗。', + dc_zhuling:'朱灵', + dczhanyi:'战意', + dczhanyi_info:'出牌阶段开始时,你可以弃置所有基本牌/锦囊牌/装备牌,然后获得另外两种类型的牌对应的效果直到回合结束:基本牌、你使用基本牌无距离限制,且伤害值和回复值基数+1;锦囊牌、你使用锦囊牌时摸一张牌,且锦囊牌不计入手牌上限;装备牌,当你使用装备牌时,你可弃置一名其他角色的一张牌。', + tengyin:'滕胤', + chenjian:'陈见', + chenjian_info:'准备阶段,你可展示牌堆顶的3+X张牌(X为你“陈见”标记的数量且至多为2)。然后你可依次执行以下两项中的任意项:⒈弃置一张牌,然后令一名角色获得与你弃置牌花色相同的牌。⒉使用其中剩余的一张牌。若你执行了所有选项,则你获得一枚“陈见”,然后重铸所有手牌。', + xixiu:'皙秀', + xixiu_info:'锁定技。①当你成为其他角色使用牌的目标时,若你的装备区内有和此牌花色相同的牌,则你摸一张牌。②若你装备区内的牌数为1,则其他角色不能弃置你装备区内的牌。', + guanning:'管宁', + dunshi:'遁世', + dunshi_info:'每回合限一次。你可以视为使用或打出一张【杀】/【闪】/【桃】/【酒】,然后当前回合角色于本回合内下一次造成伤害时,你选择两项:⒈防止此伤害。系统从技能名中包含“仁/义/礼/智/信”字样的技能中随机选择三个其未拥有的技能,然后你令当前回合角色获得其中一个技能。⒉从〖遁世〗中删除你本次使用或打出的牌并获得一个“席”。⒊减1点体力上限并摸X张牌(X为你的“席”数)。', + dc_gaolan:'高览', + xizhen:'袭阵', + xizhen_info:'出牌阶段开始时,你可选择一名其他角色,视为对其使用【杀】或【决斗】。然后当有角色于本阶段内使用或打出牌响应你时,该角色回复1点体力,你摸一张牌(若其满体力,改为两张)。', + caomao:'曹髦', + qianlong:'潜龙', + qianlong_info:'当你受到伤害后,你可以展示牌堆顶的三张牌并获得其中的至多X张牌(X为你已损失的体力值),然后将剩余的牌置于牌堆底。', + fensi:'忿肆', + fensi_info:'锁定技。准备阶段,你须选择一名体力值不大于你的角色并对其造成1点伤害,然后若你选择的角色不为你自己,则其视为对你使用一张【杀】。', + juetao:'决讨', + juetao_info:'限定技。出牌阶段开始时,若你的体力值为1,则你可以选择一名其他角色。你展示牌堆底的一张牌,若此牌能被你使用,则你使用此牌并重复此流程直到出现不可使用的牌或其死亡(你与其以外的角色不是此牌的合法目标)。', + zhushi:'助势', + zhushi_info:'主公技。每回合限一次,其他魏势力角色于回合内回复体力时,其可令你摸一张牌。', sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", diff --git a/character/tw.js b/character/tw.js index 010561b1c..1f335e24b 100644 --- a/character/tw.js +++ b/character/tw.js @@ -6,12 +6,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ tw:{ tw_mobile:['nashime','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_huojun','tw_caocao','tw_zhangmancheng','tw_caozhao','tw_wangchang'], - tw_mobile2:['tw_beimihu','tw_gexuan','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong','tw_chengpu','tw_guohuai','tw_wujing','tw_wangcan'], + tw_mobile2:['tw_beimihu','tw_gexuan','tw_fuwan','tw_yujin','tw_zhaoxiang','tw_hucheer','tw_hejin','tw_mayunlu','tw_re_caohong','tw_zangba','tw_liuhong','tw_chengpu','tw_guohuai','tw_wujing','tw_wangcan','old_quancong'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + old_quancong:['male','wu',4,['zhenshan']], tw_wujing:['male','wu',4,['twfenghan','twcongji']], tw_wangcan:['male','wei',3,['twdianyi','twyingji','twshanghe']], tw_wangchang:['male','wei',3,['twkaiji','twshepan']], @@ -169,6 +170,141 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //全琮 + zhenshan:{ + audio:2, + enable:['chooseToUse','chooseToRespond'], + filter:function(event,player){ + if(event.type=='wuxie') return false; + var nh=player.countCards('h'); + if(!game.hasPlayer(function(current){ + return current!=player&¤t.countCards('h')0; + })){ + if(card.name=='sha'){ + var eff=player.getUseValue(card); + if(eff>0) return 2.9+eff/10; + return 0; + } + else if(card.name=='tao'||card.name=='shan'){ + return 4; + } + } + return 0; + }, + backup:function(links,player){ + return { + filterCard:function(){return false}, + viewAs:{ + name:links[0][2], + nature:links[0][3], + isCard:true, + }, + selectCard:-1, + precontent:function(){ + 'step 0' + player.chooseTarget('选择一名手牌数小于你的角色交换手牌',function(card,player,target){ + return target!=player&&target.countCards('h')0&¤t.countCards('h')0&&event.player.getExpansions('twchunlao').length>0; + return event.card.name=='sha'&&event.player.countCards('he')>0&&event.player.getExpansions('twchunlao').length>0; }, content:function(){ 'step 0' @@ -903,7 +1039,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool){ target.logSkill('twchunlao',player); if(!target.hasSkill('twchunlao')) game.trySkillAudio('twchunlao',player); - player.gain(result.cards,target,'giveAuto'); + if(player!=target) player.gain(result.cards,target,'giveAuto'); trigger.baseDamage++; } }, @@ -4185,6 +4321,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twfenghan_info:'每回合限一次。当你使用【杀】或伤害类锦囊牌指定第一个目标后,你可令至多X名角色各摸一张牌(X为此牌的目标数)。', twcongji:'从击', twcongji_info:'当你的红色牌于回合外因弃置而进入弃牌堆后,你可令一名其他角色获得这些牌。', + old_quancong:'TW全琮', + zhenshan:'振赡', + zhenshan_info:'当你需要使用或打出一张基本牌时,你可以与一名手牌数少于你的角色交换手牌,视为使用或打出此牌。', tw_mobile:'移动版·海外服', tw_mobile2:'海外服异构', diff --git a/character/yijiang.js b/character/yijiang.js index 360647183..0d42b0726 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -6013,7 +6013,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ button=result.links[0]; } if(button){ - player.loseToDiscardpile('sidi'); + player.loseToDiscardpile(button); trigger.player.addTempSkill('sidi3'); trigger.player.addMark('sidi3',1,false); } diff --git a/character/yingbian.js b/character/yingbian.js index 702e032d5..bd9323a93 100644 --- a/character/yingbian.js +++ b/character/yingbian.js @@ -30,8 +30,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yingbian:{ yingbian_pack1:['jin_simayi','jin_zhangchunhua','ol_lisu','simazhou','cheliji','ol_huaxin'], yingbian_pack2:['jin_simashi','jin_xiahouhui','zhanghuyuechen','shibao','jin_yanghuiyu'], - yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu','jin_jiachong'], - yingbian_pack4:['zhongyan','xinchang'], + yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu'], + yingbian_pack4:['zhongyan','xinchang','jin_jiachong'], yingbian_pack5:['yangyan','yangzhi'], }, }, @@ -41,18 +41,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'phaseUseBegin'}, direct:true, filter:function(event,player){ - return player!=event.player&&event.player.countCards('he')>0&&player.countCards('he')>player.countMark('xiongshu_count'); + return player!=event.player&&event.player.countCards('he')>0&&player.countCards('he')>=player.countMark('xiongshu_count'); }, content:function(){ 'step 0' event.target=trigger.player; - var num=1+player.countMark('xiongshu_count'); - player.chooseToDiscard('he',num,get.prompt('xiongshu',trigger.player),'弃置'+get.cnNumber(num)+'张牌并展示其一张牌').set('goon',get.attitude(player,event.target)<0).set('ai',function(card){ + var num=player.countMark('xiongshu_count'); + if(num>0) player.chooseToDiscard('he',num,get.prompt('xiongshu',trigger.player),'弃置'+get.cnNumber(num)+'张牌并展示其一张牌').set('goon',get.attitude(player,event.target)<0).set('ai',function(card){ if(!_status.event.goon) return 0; return 6-_status.event.player.countMark('xiongshu_count')-get.value(card); }).logSkill=['xiongshu',trigger.player]; + else player.chooseBool(get.prompt('xiongshu',trigger.player),'展示其一张牌').set('goon',get.attitude(player,event.target)<0).set('ai',function(card){ + return _status.event.goon; + }) 'step 1' if(result.bool){ + if(!result.cards.length) player.logSkill('xiongshu',target); player.addTempSkill('xiongshu_count','roundStart'); player.addMark('xiongshu_count',1,false); } @@ -106,10 +110,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ var target=trigger.player; var info=player.storage.xiongshu_effect; + var card=info[0]; if(target.hasHistory('useCard',function(evt){ return evt.card.name==info[1]&&evt.getParent('phaseUse')==trigger; })==info[2]) target.damage(); - else if(target.getCards('he').contains(card)) player.gain(card,target,'give'); + else if(target.getCards('hej').contains(card)) player.gain(card,target,'give'); }, }, }, @@ -395,7 +400,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'loseAfter'}, forced:true, filter:function(event,player){ - return event.type=='discard'&&event.getParent(3).name!='weishu_discard'&&event.getParent('phaseDiscard').player!=player&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0)); + return event.type=='discard'&&event.getParent(3).name!='weishu_discard'&&event.getParent('phaseDiscard').player!=player&&event.cards2.length>0&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0)); }, content:function(){ 'step 0' @@ -3133,7 +3138,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yangyan:'杨艳(238年-274年8月25日),字琼芝,弘农郡华阴县(今陕西省华阴市)人,晋武帝司马炎第一任皇后,曹魏通事郎杨炳之女。自幼父母双亡,为舅舅赵俊所养,跟随继母段氏生活。聪明贤慧,善于书法,天生丽质,娴熟女红,嫁给了世子司马炎。泰始元年(265年),晋武帝即位,建立西晋。泰始二年(266年),杨艳受册为皇后,深得晋武帝宠幸,生下三子三女,包括晋惠帝司马衷。泰始十年(274年),去世,时年三十七,陪葬于峻阳陵,谥号武元皇后。', yangzhi:'杨芷(259年-292年3月6日),字季兰,小字男胤,弘农郡华阴县(今陕西省华阴市)人,晋武帝司马炎第二任皇后,东汉太尉杨震幼子杨奉后裔,东汉末年东莱太守、蓩亭侯杨众曾孙女,西晋太傅杨骏与嫡妻庞氏之女,武元皇后杨艳堂妹。咸宁二年(276年),立为皇后,史称“婉嫕有妇德, 美映椒房”,得宠于晋武帝。生渤海殇王,早薨,之后再无生育。其父杨骏擅权引起皇后贾南风忌恨,贾南风联络汝南王司马亮、楚王司马玮发动政变,杀死杨骏,并唆使大臣上书状告杨芷谋反,让晋惠帝司马衷将其贬为庶人,押到金墉城居住。元康二年(292年),杨芷冻饿而死,谥号武悼皇后。', xinchang:'辛敞(生卒年不详),字泰雍,陇西人氏,是曹魏时代官员。卫尉辛毗之子,辛宪英之弟。', - xuangongzhu:'高陵宣公主(?—?)司马氏,晋宣帝司马懿第二女。司马氏下嫁杜预。其兄弟司马炎登基时,司马氏已经去世。泰始年间(265年—274年)追赠高陵公主。', + xuangongzhu:'高陵宣公主(?—?)司马氏,晋宣帝司马懿第二女。司马氏下嫁杜预。其侄司马炎登基时,司马氏已经去世。泰始年间(265年—274年)追赠高陵公主。', }, characterTitle:{}, perfectPair:{}, @@ -3322,7 +3327,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ weishu_info:'锁定技。①当你于摸牌阶段外不因〖卫戊①〗而摸牌后,你令一名角色摸一张牌。②当你于弃牌阶段外不因〖卫戊②〗而弃置牌后,你弃置一名其他角色的一张牌。', jin_jiachong:'贾充', xiongshu:'凶竖', - xiongshu_info:'其他角色的出牌阶段开始时,你可弃置X张牌(X为你本轮内已发动过此技能的次数+1)并展示其一张牌,然后你预测“其本阶段内是否会使用与展示牌牌名相同的牌”。此阶段结束时,若你的预测正确,则你对其造成1点伤害;否则你获得展示牌。', + xiongshu_info:'其他角色的出牌阶段开始时,你可弃置X张牌(X为你本轮内此前已发动过此技能的次数,为0则不弃)并展示其一张牌,然后你预测“其本阶段内是否会使用与展示牌牌名相同的牌”。此阶段结束时,若你的预测正确,则你对其造成1点伤害;否则你获得展示牌。', jianhui:'奸回', jianhui_info:'锁定技。当你造成伤害后,若受伤角色为A,则你摸一张牌;当你受到伤害后,若伤害来源为A,则A弃置一张牌。(A为除本次伤害外最近一次对你造成过伤害的角色)', diff --git a/game/asset.js b/game/asset.js index 0ec45346f..284fb771d 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.114', + 'v1.9.114.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -889,6 +889,18 @@ window.noname_asset_list=[ 'audio/die/dc_jiben.mp3', 'audio/die/licaiwei.mp3', 'audio/die/tw_wangchang.mp3', + 'audio/die/caomao.mp3', + 'audio/die/dc_gaolan.mp3', + 'audio/die/dc_luotong.mp3', + 'audio/die/dc_zhuling.mp3', + 'audio/die/guanning.mp3', + 'audio/die/ol_caiwenji.mp3', + 'audio/die/old_quancong.mp3', + 'audio/die/shen_jiangwei.mp3', + 'audio/die/tengyin.mp3', + 'audio/die/tw_caozhao.mp3', + 'audio/die/xin_quancong.mp3', + 'audio/die/xuyou.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -4088,6 +4100,62 @@ window.noname_asset_list=[ 'audio/skill/yijiao2.mp3', 'audio/skill/zhishi1.mp3', 'audio/skill/zhishi2.mp3', + 'audio/skill/chenjian1.mp3', + 'audio/skill/chenjian2.mp3', + 'audio/skill/dczhanyi1.mp3', + 'audio/skill/dczhanyi2.mp3', + 'audio/skill/duanchang_ol_caiwenji1.mp3', + 'audio/skill/duanchang_ol_caiwenji2.mp3', + 'audio/skill/dunshi1.mp3', + 'audio/skill/dunshi2.mp3', + 'audio/skill/fensi1.mp3', + 'audio/skill/fensi2.mp3', + 'audio/skill/gzjieyue1.mp3', + 'audio/skill/gzjieyue2.mp3', + 'audio/skill/jianglue1.mp3', + 'audio/skill/jianglue2.mp3', + 'audio/skill/jinjian1.mp3', + 'audio/skill/jinjian2.mp3', + 'audio/skill/jiufa1.mp3', + 'audio/skill/jiufa2.mp3', + 'audio/skill/juetao1.mp3', + 'audio/skill/juetao2.mp3', + 'audio/skill/olbeige1.mp3', + 'audio/skill/olbeige2.mp3', + 'audio/skill/pingxiang1.mp3', + 'audio/skill/pingxiang2.mp3', + 'audio/skill/qianlong1.mp3', + 'audio/skill/qianlong2.mp3', + 'audio/skill/renzheng1.mp3', + 'audio/skill/renzheng2.mp3', + 'audio/skill/tianren1.mp3', + 'audio/skill/tianren2.mp3', + 'audio/skill/twchongqi1.mp3', + 'audio/skill/twchongqi2.mp3', + 'audio/skill/twdianyi1.mp3', + 'audio/skill/twdianyi2.mp3', + 'audio/skill/twfeifu1.mp3', + 'audio/skill/twfeifu2.mp3', + 'audio/skill/twfucuan1.mp3', + 'audio/skill/twfucuan2.mp3', + 'audio/skill/twshanghe1.mp3', + 'audio/skill/twshanghe2.mp3', + 'audio/skill/twyingji1.mp3', + 'audio/skill/twyingji2.mp3', + 'audio/skill/xinhuangtian2_re_zhangjiao1.mp3', + 'audio/skill/xinhuangtian2_re_zhangjiao2.mp3', + 'audio/skill/xinyaoming1.mp3', + 'audio/skill/xinyaoming2.mp3', + 'audio/skill/xixiu1.mp3', + 'audio/skill/xixiu2.mp3', + 'audio/skill/xizhen1.mp3', + 'audio/skill/xizhen2.mp3', + 'audio/skill/yuzhang1.mp3', + 'audio/skill/yuzhang2.mp3', + 'audio/skill/zhenshan1.mp3', + 'audio/skill/zhenshan2.mp3', + 'audio/skill/zhushi1.mp3', + 'audio/skill/zhushi2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -5164,6 +5232,14 @@ window.noname_asset_list=[ 'image/character/tw_wangcan.jpg', 'image/character/tw_wangchang.jpg', 'image/character/tw_wujing.jpg', + 'image/character/caomao.jpg', + 'image/character/dc_gaolan.jpg', + 'image/character/dc_luotong.jpg', + 'image/character/dc_zhuling.jpg', + 'image/character/guanning.jpg', + 'image/character/ol_caiwenji.jpg', + 'image/character/shen_jiangwei.jpg', + 'image/character/tengyin.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 00cd49529..713f8245d 100644 --- a/game/game.js +++ b/game/game.js @@ -7646,6 +7646,7 @@ } } for(var i=0;i1||cards[0].name!=card.name)){ game.log(player,'打出了',card,'(',cards,')'); } @@ -20830,10 +20869,15 @@ if(next.source==undefined&&!nosource) next.source=event.player; if(next.source&&next.source.isDead()) delete next.source; if(next.num==undefined) next.num=1; + next.original_num=next.num; + next.change_history=[]; if(next.nature=='poison') delete next._triggered; next.setContent('damage'); next.filterStop=function(){ if(this.source&&this.source.isDead()) delete this.source; + var num=this.original_num; + for(var i of this.change_history) num+=i; + if(num!=this.num) this.change_history.push(this.num-num); if(this.num<=0){ delete this.filterStop; this.trigger('damageZero'); @@ -36382,6 +36426,7 @@ roundNumber:0, shuffleNumber:0, }; + window['b'+'ann'+'e'+'dE'+'x'+'ten'+'s'+'i'+'o'+'ns']=[]; var ui={ updates:[], thrown:[], diff --git a/game/update.js b/game/update.js index 71ddb4aeb..70b4ce500 100644 --- a/game/update.js +++ b/game/update.js @@ -1,10 +1,10 @@ window.noname_update={ - version:'1.9.114.2', - update:'1.9.114.1', + version:'1.9.114.3', + update:'1.9.114.2', changeLog:[ - 'OL贾充', - '十周年李采薇、吉本', - '海外服吴景、王粲、王昶', + 'OL界蔡文姬', + '十周年神姜维、曹髦、高览、骆统、朱灵、管宁、腾胤', + '振赡全琮解禁', 'bug修复', ], files:[ @@ -22,7 +22,7 @@ window.noname_update={ //'card/yongjian.js', //'card/zhenfa.js', //'card/zhulu.js', - 'character/diy.js', + //'character/diy.js', 'character/extra.js', //'character/hearth.js', //'character/gujian.js', @@ -30,7 +30,7 @@ window.noname_update={ //'character/hearth.js', 'character/mobile.js', //'character/mtg.js', - 'character/offline.js', + //'character/offline.js', //'character/old.js', //'character/ow.js', 'character/rank.js', @@ -38,7 +38,7 @@ window.noname_update={ 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - 'character/standard.js', + //'character/standard.js', 'character/tw.js', //'character/swd.js', //'character/xianjian.js', @@ -56,9 +56,9 @@ window.noname_update={ //'mode/brawl.js', //'mode/chess.js', //'mode/connect.js', - //'mode/doudizhu.js', + 'mode/doudizhu.js', 'mode/guozhan.js', - //'mode/identity.js', + 'mode/identity.js', //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', diff --git a/image/character/caomao.jpg b/image/character/caomao.jpg new file mode 100644 index 000000000..a98f35eef Binary files /dev/null and b/image/character/caomao.jpg differ diff --git a/image/character/dc_gaolan.jpg b/image/character/dc_gaolan.jpg new file mode 100644 index 000000000..9ff8be29d Binary files /dev/null and b/image/character/dc_gaolan.jpg differ diff --git a/image/character/dc_luotong.jpg b/image/character/dc_luotong.jpg new file mode 100644 index 000000000..1f8153480 Binary files /dev/null and b/image/character/dc_luotong.jpg differ diff --git a/image/character/dc_zhuling.jpg b/image/character/dc_zhuling.jpg new file mode 100644 index 000000000..2f18f39ad Binary files /dev/null and b/image/character/dc_zhuling.jpg differ diff --git a/image/character/guanning.jpg b/image/character/guanning.jpg new file mode 100644 index 000000000..e0448043c Binary files /dev/null and b/image/character/guanning.jpg differ diff --git a/image/character/ol_caiwenji.jpg b/image/character/ol_caiwenji.jpg new file mode 100644 index 000000000..77cd09fa1 Binary files /dev/null and b/image/character/ol_caiwenji.jpg differ diff --git a/image/character/shen_jiangwei.jpg b/image/character/shen_jiangwei.jpg new file mode 100644 index 000000000..887fa9e97 Binary files /dev/null and b/image/character/shen_jiangwei.jpg differ diff --git a/image/character/tengyin.jpg b/image/character/tengyin.jpg new file mode 100644 index 000000000..31e3db43b Binary files /dev/null and b/image/character/tengyin.jpg differ diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 5d00f8965..508f8db35 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -1823,7 +1823,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ baiyidujiang:'白衣渡江', baiyidujiang_info:'出牌阶段,对地主使用。你选择一项:①令其将手牌数摸至全场最多。②令其将手牌数弃置至全场最少。', shuiyanqijuny:'水淹七军', - shuiyanqijuny_info:'此牌不对目标角色进行座次排序。出牌阶段,对至多两名角色使用。目标角色受到1点雷属性伤害,然后若其:是第一个目标,其弃置一张牌;不是第一个目标,其摸一张牌。', + shuiyanqijuny_info:'出牌阶段,对至多两名角色使用。目标角色受到1点雷属性伤害,然后若其:是此牌的使用者选择的第一个目标,其弃置一张牌;不是第一个目标,其摸一张牌。', luojingxiashi:'落井下石', luojingxiashi_info:'出牌阶段,对所有其他的已受伤角色使用。目标角色受到1点伤害。', binglinchengxia:'兵临城下', @@ -2757,12 +2757,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ filterTarget:true, type:'trick', selectTarget:[1,2], + targetprompt:['受伤弃牌','受伤摸牌'], contentBefore:function(){ - event.getParent().fixedSeat=true; + var evt=event.getParent(),target=evt.stocktargets[0]; + evt.shuiyanqijun_target=target; }, content:function(){ target.damage('thunder'); - if(num>0) target.draw(); + if(target!=event.getParent().shuiyanqijun_target) target.draw(); else target.chooseToDiscard('he',true); }, ai:{ diff --git a/mode/guozhan.js b/mode/guozhan.js index 7af610f5a..63f835599 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -3954,23 +3954,39 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ return lib.skill.gzxingzhao.getNum()>0; }, content:function(){ - "step 0" - event.cards=get.cards(4); - player.chooseCardButton(event.cards,2,'选择两张牌置于牌堆顶',true).set('ai',ai.get.buttonValue); - "step 1" - if(result.bool){ - var choice=[]; - for(var i=0;i=2) return false; + return true; + }); + next.set('filterOk',function(moved){ + return moved[1].length==2; + }); + next.set('processAI',function(list){ + var cards=list[0][1].slice(0).sort(function(a,b){ + return get.value(b)-get.value(a); + }); + return [cards,cards.splice(2)]; + }) + 'step 1' + var top=result.moved[0]; + var bottom=result.moved[1]; + top.reverse(); + for(var i=0;i