diff --git a/audio/die/mengyou.mp3 b/audio/die/mengyou.mp3 new file mode 100644 index 000000000..7e9278161 Binary files /dev/null and b/audio/die/mengyou.mp3 differ diff --git a/audio/skill/dcmanzhi1.mp3 b/audio/skill/dcmanzhi1.mp3 new file mode 100644 index 000000000..b01a2cd86 Binary files /dev/null and b/audio/skill/dcmanzhi1.mp3 differ diff --git a/audio/skill/dcmanzhi2.mp3 b/audio/skill/dcmanzhi2.mp3 new file mode 100644 index 000000000..8feb07f86 Binary files /dev/null and b/audio/skill/dcmanzhi2.mp3 differ diff --git a/audio/skill/manyi_mengyou1.mp3 b/audio/skill/manyi_mengyou1.mp3 new file mode 100644 index 000000000..22c46d3ab Binary files /dev/null and b/audio/skill/manyi_mengyou1.mp3 differ diff --git a/audio/skill/manyi_mengyou2.mp3 b/audio/skill/manyi_mengyou2.mp3 new file mode 100644 index 000000000..a7fac3deb Binary files /dev/null and b/audio/skill/manyi_mengyou2.mp3 differ diff --git a/character/huicui.js b/character/huicui.js index 489ec6979..1ac39b039 100644 --- a/character/huicui.js +++ b/character/huicui.js @@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'huicui', connect:true, character:{ + dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']], yue_zhoufei:['female','wu',3,['dclingkong','dcxianshu']], dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏','unseen']], yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']], @@ -94,7 +95,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_daihan:['mamidi','dc_jiling','zhangxun','dc_yuejiu','wanglie','leibo','qiaorui','dongwan','yuanyin'], sp_jianghu:['guanning','huzhao','dc_huangchengyan','mengjie'], sp_zongheng:['huaxin','luyusheng','re_xunchen','re_miheng','fengxi','re_dengzhi','dc_yanghu','zongyu'], - sp_taiping:['guanhai','liupi','peiyuanshao','zhangchu','zhangkai'], + sp_taiping:['guanhai','liupi','peiyuanshao','zhangchu','zhangkai','dc_zhangmancheng'], sp_yanhan:['dc_liuba','dc_huangquan','furongfuqian','xianglang','dc_huojun','gaoxiang','dc_wuban'], sp_jishi:['dc_jiben','zhenghun','dc_sunhanhua','liuchongluojun'], sp_raoting:['dc_huanghao','dc_sunziliufang','dc_sunchen'], @@ -103,6 +104,142 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //张曼成 + dclvecheng:{ + audio:2, + enable:'phaseUse', + usable:1, + filterTarget:lib.filter.notMe, + content:function(){ + player.addTempSkill('dclvecheng_xiongluan'); + player.markAuto('dclvecheng_xiongluan',[target]); + var cards=player.getCards('h','sha'); + if(cards.length) player.addGaintag(cards,'dclvecheng_xiongluan'); + }, + ai:{ + threaten:3.1, + order:3.5, + expose:0.2, + result:{ + target:function(player,target){ + if(player.getStorage('dclvecheng_xiongluan').contains(target)) return 0; + if(target.getEquip('bagua')||target.getEquip('rewrite_bagua')) return -0.6; + var hs=player.countCards('h',card=>{ + if(!player.canUse(card,target)) return false; + return get.name(card)=='sha'&&get.effect(target,card,player,player)>0; + }); + var ts=target.hp; + if(hs>=ts&&ts>1) return -2; + return -1; + } + } + }, + subSkill:{ + xiongluan:{ + trigger:{player:'phaseEnd'}, + charlotte:true, + forced:true, + popup:false, + onremove:function(player,skill){ + player.removeGaintag('dclvecheng_xiongluan'); + delete player.storage[skill]; + }, + filter:function(event,player){ + return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn()); + }, + content:function(){ + 'step 0' + event.targets=player.getStorage('dclvecheng_xiongluan').slice(); + event.targets.sortBySeat(); + 'step 1' + if(!event.targets.length){ + event.finish(); + return; + } + var target=event.targets.shift(); + event.target=target; + target.showHandcards(); + var cards=target.getCards('h','sha'); + if(!cards.length) event.redo(); + else event.forced=false; + 'step 2' + var forced=event.forced; + var prompt2=forced?'掠城:选择对'+get.translation(player)+'使用的【杀】':'掠城:是否依次对'+get.translation(player)+'使用所有的【杀】?'; + target.chooseToUse(forced,function(card,player,event){ + if(get.itemtype(card)!='card'||get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },prompt2).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.targetEnabled.apply(this,arguments); + }).set('sourcex',player); + 'step 3' + if(result.bool){ + if(target.countCards('h','sha')){ + event.forced=true; + event.goto(2); + return; + } + } + event.forced=false; + event.goto(1); + }, + intro:{ + content:'对$使用“掠城”【杀】无任何次数限制', + }, + mod:{ + cardUsableTarget:function(card,player,target){ + if(!card.cards||card.cards.length!=1) return; + if(card.name=='sha'&&card.cards[0].hasGaintag('dclvecheng_xiongluan')&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true; + }, + } + } + } + }, + dczhongji:{ + audio:2, + trigger:{player:'useCard'}, + filter:function(event,player){ + if(player.countCards('h')>=player.maxHp) return false; + var suit=get.suit(event.card); + return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit}); + }, + check:function(event,player){ + var num=Math.min(20,player.maxHp-player.countCards('h')); + if(num<=0) return false; + var numx=player.getHistory('useSkill',evt=>{ + return evt.skill=='dczhongji'; + }).length+1; + if(numx>num) return false; + if(_status.currentPhase!=player) return true; + if(player.hasCard(card=>{ + var suit=get.suit(card); + return player.hasValueTarget(card)&&!player.hasCard(cardx=>{ + return cardx!=card&&get.suit(cardx)==suit; + }); + })) return false; + return true; + }, + prompt2:function(event,player){ + var num=Math.min(20,player.maxHp-player.countCards('h')); + var str=num>0?'摸'+get.cnNumber(num)+'张牌,然后':''; + return str+'弃置'+get.cnNumber(1+player.getHistory('useSkill',evt=>{ + return evt.skill=='dczhongji'; + }).length)+'张牌'; + }, + content:function(){ + 'step 0' + var num=Math.min(20,player.maxHp-player.countCards('h')); + if(num>0) player.draw(num); + 'step 1' + var num=player.getHistory('useSkill',evt=>{ + return evt.skill=='dczhongji'; + }).length; + player.chooseToDiscard('螽集:请弃置'+get.cnNumber(num)+'张牌','he',true,num).set('ai',get.unuseful); + }, + ai:{ + threaten:3.2, + } + }, //乐周妃 dclingkong:{ audio:2, @@ -10494,6 +10631,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dclingkong_info:'锁定技。①游戏开始时,你将所有手牌标记为“箜篌”。②你的“箜篌”牌不计入手牌上限。③当你于回合外获得牌后,系统随机将其中的一张牌标记为“箜篌”。', dcxianshu:'贤淑', dcxianshu_info:'出牌阶段,你可以将一张“箜篌”正面向上交给一名其他角色。若此牌为红色,且该角色的体力值不大于你,则其回复1点体力;若此牌为黑色,且该角色的体力值不小于你,则其失去1点体力。此技能结算完成后,你摸X张牌(X为你与其的体力值之差且至多为5)。', + dc_zhangmancheng:'张曼成', + dclvecheng:'掠城', + dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。', + dczhongji:'螽集', + dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。', sp_baigei:'无双上将', sp_caizijiaren:'才子佳人', diff --git a/character/sp2.js b/character/sp2.js index 56ae785e9..290fa775b 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -8,7 +8,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dc_jikang:['male','wei',3,['new_qingxian','dcjuexiang']], dc_jsp_guanyu:['male','wei',4,['new_rewusheng','dcdanji']], dc_mengda:['male','wei',4,['dclibang','dcwujie']], - dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji']], //dc_fuwan:['male','qun',4,['dcmoukui']], guānning:['male','shu',3,['dcxiuwen','dclongsong']], sunhuan:['male','wu',4,['dcniji'],['unseen']], @@ -714,142 +713,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, - //张曼成 - dclvecheng:{ - audio:2, - enable:'phaseUse', - usable:1, - filterTarget:lib.filter.notMe, - content:function(){ - player.addTempSkill('dclvecheng_xiongluan'); - player.markAuto('dclvecheng_xiongluan',[target]); - var cards=player.getCards('h','sha'); - if(cards.length) player.addGaintag(cards,'dclvecheng_xiongluan'); - }, - ai:{ - threaten:3.1, - order:3.5, - expose:0.2, - result:{ - target:function(player,target){ - if(player.getStorage('dclvecheng_xiongluan').contains(target)) return 0; - if(target.getEquip('bagua')||target.getEquip('rewrite_bagua')) return -0.6; - var hs=player.countCards('h',card=>{ - if(!player.canUse(card,target)) return false; - return get.name(card)=='sha'&&get.effect(target,card,player,player)>0; - }); - var ts=target.hp; - if(hs>=ts&&ts>1) return -2; - return -1; - } - } - }, - subSkill:{ - xiongluan:{ - trigger:{player:'phaseEnd'}, - charlotte:true, - forced:true, - popup:false, - onremove:function(player,skill){ - player.removeGaintag('dclvecheng_xiongluan'); - delete player.storage[skill]; - }, - filter:function(event,player){ - return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn()); - }, - content:function(){ - 'step 0' - event.targets=player.getStorage('dclvecheng_xiongluan').slice(); - event.targets.sortBySeat(); - 'step 1' - if(!event.targets.length){ - event.finish(); - return; - } - var target=event.targets.shift(); - event.target=target; - target.showHandcards(); - var cards=target.getCards('h','sha'); - if(!cards.length) event.redo(); - else event.forced=false; - 'step 2' - var forced=event.forced; - var prompt2=forced?'掠城:选择对'+get.translation(player)+'使用的【杀】':'掠城:是否依次对'+get.translation(player)+'使用所有的【杀】?'; - target.chooseToUse(forced,function(card,player,event){ - if(get.itemtype(card)!='card'||get.name(card)!='sha') return false; - return lib.filter.filterCard.apply(this,arguments); - },prompt2).set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ - if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; - return lib.filter.targetEnabled.apply(this,arguments); - }).set('sourcex',player); - 'step 3' - if(result.bool){ - if(target.countCards('h','sha')){ - event.forced=true; - event.goto(2); - return; - } - } - event.forced=false; - event.goto(1); - }, - intro:{ - content:'对$使用“掠城”【杀】无任何次数限制', - }, - mod:{ - cardUsableTarget:function(card,player,target){ - if(!card.cards||card.cards.length!=1) return; - if(card.name=='sha'&&card.cards[0].hasGaintag('dclvecheng_xiongluan')&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true; - }, - } - } - } - }, - dczhongji:{ - audio:2, - trigger:{player:'useCard'}, - filter:function(event,player){ - if(player.countCards('h')>=player.maxHp) return false; - var suit=get.suit(event.card); - return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit}); - }, - check:function(event,player){ - var num=Math.min(20,player.maxHp-player.countCards('h')); - if(num<=0) return false; - var numx=player.getHistory('useSkill',evt=>{ - return evt.skill=='dczhongji'; - }).length+1; - if(numx>num) return false; - if(_status.currentPhase!=player) return true; - if(player.hasCard(card=>{ - var suit=get.suit(card); - return player.hasValueTarget(card)&&!player.hasCard(cardx=>{ - return cardx!=card&&get.suit(cardx)==suit; - }); - })) return false; - return true; - }, - prompt2:function(event,player){ - var num=Math.min(20,player.maxHp-player.countCards('h')); - var str=num>0?'摸'+get.cnNumber(num)+'张牌,然后':''; - return str+'弃置'+get.cnNumber(1+player.getHistory('useSkill',evt=>{ - return evt.skill=='dczhongji'; - }).length)+'张牌'; - }, - content:function(){ - 'step 0' - var num=Math.min(20,player.maxHp-player.countCards('h')); - if(num>0) player.draw(num); - 'step 1' - var num=player.getHistory('useSkill',evt=>{ - return evt.skill=='dczhongji'; - }).length; - player.chooseToDiscard('螽集:请弃置'+get.cnNumber(num)+'张牌','he',true,num).set('ai',get.unuseful); - }, - ai:{ - threaten:3.2, - } - }, //关宁 dcxiuwen:{ audio:2, @@ -10727,11 +10590,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldlongsong_info:'出牌阶段开始时,你可以将一张手牌交给一名其他角色。然后其须选择其所有的发动时机为出牌阶段内的空闲时间点且你至多能于此阶段发动一次的技能,其于此阶段这些技能失效,你获得这些技能。', dclongsong:'龙颂', dclongsong_info:'出牌阶段开始时,你可以将一张红色牌交给一名其他角色。然后其须选择其所有的发动时机包含“出牌阶段”的技能,其于此阶段这些技能失效,你获得这些技能且至多可以发动一次。', - dc_zhangmancheng:'张曼成', - dclvecheng:'掠城', - dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用当前手牌中的【杀】无任何次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。', - dczhongji:'螽集', - dczhongji_info:'当你使用牌时,若此牌无花色或你手牌区里没有与此牌花色相同的手牌,你可以将手牌摸至体力上限并弃置X张牌(X为本回合发动〖螽集〗的次数)。', dc_mengda:'孟达', dclibang:'利傍', dclibang_info:'出牌阶段限一次。你可以弃置一张牌,正面向上获得两名其他角色的各一张牌。然后你判定,若结果与这两张牌的颜色均不同,你交给其中一名角色两张牌或失去1点体力,否则你获得判定牌并视为对其中一名角色使用一张【杀】。',