diff --git a/audio/die/ol_pangtong.mp3 b/audio/die/ol_pangtong.mp3 new file mode 100644 index 000000000..c78cc6327 Binary files /dev/null and b/audio/die/ol_pangtong.mp3 differ diff --git a/audio/skill/bazhen_ol_pangtong1.mp3 b/audio/skill/bazhen_ol_pangtong1.mp3 new file mode 100644 index 000000000..7d9b6539b Binary files /dev/null and b/audio/skill/bazhen_ol_pangtong1.mp3 differ diff --git a/audio/skill/bazhen_ol_pangtong2.mp3 b/audio/skill/bazhen_ol_pangtong2.mp3 new file mode 100644 index 000000000..315cccc51 Binary files /dev/null and b/audio/skill/bazhen_ol_pangtong2.mp3 differ diff --git a/audio/skill/olniepan1.mp3 b/audio/skill/olniepan1.mp3 new file mode 100644 index 000000000..d26ddc7a3 Binary files /dev/null and b/audio/skill/olniepan1.mp3 differ diff --git a/audio/skill/olniepan2.mp3 b/audio/skill/olniepan2.mp3 new file mode 100644 index 000000000..fad09d75c Binary files /dev/null and b/audio/skill/olniepan2.mp3 differ diff --git a/audio/skill/rehuoji_ol_pangtong1.mp3 b/audio/skill/rehuoji_ol_pangtong1.mp3 new file mode 100644 index 000000000..982bf8c53 Binary files /dev/null and b/audio/skill/rehuoji_ol_pangtong1.mp3 differ diff --git a/audio/skill/rehuoji_ol_pangtong2.mp3 b/audio/skill/rehuoji_ol_pangtong2.mp3 new file mode 100644 index 000000000..7a18e929c Binary files /dev/null and b/audio/skill/rehuoji_ol_pangtong2.mp3 differ diff --git a/audio/skill/rekanpo_ol_pangtong1.mp3 b/audio/skill/rekanpo_ol_pangtong1.mp3 new file mode 100644 index 000000000..efcdcaa27 Binary files /dev/null and b/audio/skill/rekanpo_ol_pangtong1.mp3 differ diff --git a/audio/skill/rekanpo_ol_pangtong2.mp3 b/audio/skill/rekanpo_ol_pangtong2.mp3 new file mode 100644 index 000000000..465d5d36d Binary files /dev/null and b/audio/skill/rekanpo_ol_pangtong2.mp3 differ diff --git a/audio/skill/tsumugi_mugyu1.mp3 b/audio/skill/tsumugi_mugyu1.mp3 new file mode 100644 index 000000000..fee66d3a4 Binary files /dev/null and b/audio/skill/tsumugi_mugyu1.mp3 differ diff --git a/audio/skill/tsumugi_mugyu2.mp3 b/audio/skill/tsumugi_mugyu2.mp3 new file mode 100644 index 000000000..39d1993cf Binary files /dev/null and b/audio/skill/tsumugi_mugyu2.mp3 differ diff --git a/audio/skill/tsumugi_mugyu3.mp3 b/audio/skill/tsumugi_mugyu3.mp3 new file mode 100644 index 000000000..e6d044521 Binary files /dev/null and b/audio/skill/tsumugi_mugyu3.mp3 differ diff --git a/audio/skill/tsumugi_mugyu4.mp3 b/audio/skill/tsumugi_mugyu4.mp3 new file mode 100644 index 000000000..e48dc7b68 Binary files /dev/null and b/audio/skill/tsumugi_mugyu4.mp3 differ diff --git a/audio/skill/tsumugi_mugyu5.mp3 b/audio/skill/tsumugi_mugyu5.mp3 new file mode 100644 index 000000000..970a8b745 Binary files /dev/null and b/audio/skill/tsumugi_mugyu5.mp3 differ diff --git a/audio/skill/xinlianhuan_ol_pangtong1.mp3 b/audio/skill/xinlianhuan_ol_pangtong1.mp3 new file mode 100644 index 000000000..96b84ea91 Binary files /dev/null and b/audio/skill/xinlianhuan_ol_pangtong1.mp3 differ diff --git a/audio/skill/xinlianhuan_ol_pangtong2.mp3 b/audio/skill/xinlianhuan_ol_pangtong2.mp3 new file mode 100644 index 000000000..4e4f38698 Binary files /dev/null and b/audio/skill/xinlianhuan_ol_pangtong2.mp3 differ diff --git a/card/extra.js b/card/extra.js index 3bfb257c0..e2364f5cd 100644 --- a/card/extra.js +++ b/card/extra.js @@ -652,26 +652,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return true; }, check:function(button){ - if(button.link.name=='du') return 2; + if(button.link.name=='du') return 10; var player=_status.event.player; - if(button.link.name=='xingjiegoutong'&&player.countCards('h')>1) return -2; - if(get.select(get.info(button.link).selectTarget)[1]==-1){ - if(get.type(button.link)=='delay') return -1; - if(get.type(button.link)=='equip'){ - var current=player.getCards('e',{subtype:get.subtype(button.link)})[0]; - if(current&&get.equipValue(current)>=get.equipValue(button.link)) return -1; - return 1; - } - if(get.tag(button.link,'multitarget')) return -1; - if(button.link.name=='huoshaolianying') return -1; - } - if(button.link.name=='jiu'){ - if(get.effect(player,{name:'jiu'},player)>0){ - return 1; - } - return -1; - } - return 1; + if(player.getUseValue(button.link)>0) return get.order(button.link); + return -1; }, backup:function(links,player){ return { @@ -691,7 +675,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, }, ai:{ - order:4, + order:function(item,player){ + var event=_status.event; + if(event.type!='phase') return 4; + if(!player) return -1; + var muniu=player.getEquip('muniu'); + if(!muniu||!muniu.cards) return -1; + var order=0; + for(var i=0;i0){ + var order2=get.order(muniu.cards[i]); + if(order2>order) order=order2 + } + } + return order+0.1; + }, result:{ player:function(player){ if(_status.event.dying) return get.attitude(player,_status.event.dying); diff --git a/character/diy.js b/character/diy.js index 3650b95fa..54cd977ec 100755 --- a/character/diy.js +++ b/character/diy.js @@ -22,6 +22,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_masato:['male','key','4/8',['masato_baoquan']], key_iwasawa:['female','key',3,['iwasawa_yinhang','iwasawa_mysong']], key_kengo:['male','key',4,['kengo_weishang','kengo_guidui']], + key_yoshino:['male','key',4,['yoshino_jueyi']], + key_yui:['female','key',3,['yui_jiang','yui_lieyin','yui_takaramono']], + key_tsumugi:['female','key',3,['tsumugi_mugyu','tsumugi_huilang']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['shuaiyan','moshou']], @@ -98,7 +101,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy:{ diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_zhangwei"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], - diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi"], }, }, characterIntro:{ @@ -113,6 +116,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', }, characterTitle:{ + key_tsumugi:'#bSummer Pockets', + key_yui:'#rAngel Beats!', + key_yoshino:'#bRewrite', key_kengo:'#bLittle Busters!', key_iwasawa:'#rAngel Beats!', key_masato:'#bLittle Busters!', @@ -162,6 +168,248 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuji:['zuoci'] }, skill:{ + tsumugi_mugyu:{ + audio:5, + trigger:{target:'useCardToTargeted'}, + frequent:true, + filter:function(event,player){ + return player.countCards('h')0; + }, + content:function(){ + 'step 0' + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('tsumugi_huilang')).set('ai',function(card){ + if(get.position(card)!='h') return -1; + if(!['shan','wuxie','caochuan'].contains(get.name(card))) return 9; + return 5-get.value(card); + }); + 'step 1' + if(result.bool){ + var cards=result.cards; + player.logSkill('tsumugi_huilang'); + player.addSkill('tsumugi_huilang2'); + player.storage.tsumugi_huilang2.addArray(cards); + player.lose(cards,ui.special); + player.markSkill('tsumugi_huilang2'); + } + }, + }, + tsumugi_huilang2:{ + charlotte:true, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + marktext:'隐', + intro:{content:'cardCount'}, + trigger:{player:'phaseBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.tsumugi_huilang2.length>0; + }, + content:function(){ + 'step 0' + var cards=player.storage.tsumugi_huilang2; + event.num=cards.length; + player.gain(cards,'draw'); + game.log(player,'获得了'+get.cnNumber(cards.length)+'张牌'); + cards.length=0; + player.unmarkSkill('tsumugi_huilang2'); + 'step 1' + player.chooseTarget([1,num],'是否令至多'+get.cnNumber(num)+'名角色各摸一张牌?').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 2' + if(result.bool){ + var targets=result.targets; + player.line(targets,lib.skill.tsumugi_huilang.line); + targets.sortBySeat(); + game.asyncDraw(targets); + } + else event.finish(); + 'step 3' + game.delay(); + }, + }, + yui_jiang:{ + shaRelated:true, + audio:2, + audioname:['sp_lvmeng','re_sunben','re_sunce'], + trigger:{ + player:'useCardToPlayered', + target:'useCardToTargeted', + }, + filter:function(event,player){ + if(!(event.card.name=='juedou'||(event.card.name=='sha'&&get.color(event.card)=='red'))) return false; + return player==event.target||event.getParent().triggeredTargets3.length==1; + }, + frequent:true, + content:function(){ + player.draw(); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,0.6]; + }, + player:function(card,player,target){ + if(card.name=='sha'&&get.color(card)=='red') return [1,1]; + } + } + } + }, + yui_lieyin:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + locked:true, + content:function(){ + 'step 0' + var list=[]; + if(player._ichiban_no_takaramono) list.push('cancel2'); + player.chooseControl.apply(player,list).set('choiceList',[ + '令此阶段内的所有红色牌视为【杀】', + '令此阶段内的所有【杀】视为【决斗】' + ]).set('prompt',player._ichiban_no_takaramono?get.prompt('yui_lieyin'):'烈音:请选择一项').set('ai',function(){ + var player=_status.event.player; + var shas=player.countCards('h','sha') + if(shas>0){ + if(game.hasPlayer(function(current){ + return get.attitude(player,current)<0&&player.canUse('juedou',current)&&!current.hasSha()&&get.effect(current,{name:'juedou'},player,player)>0; + })) return 1; + if(player._ichiban_no_takaramono) return 'cancel2'; + } + if(player.countCards('h',function(card){ + return get.color(card)=='red'&&card.name!='sha'&&player.hasValueTarget(card); + })==0) return 0; + if(player._ichiban_no_takaramono) return 'cancel2'; + return 1; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('yui_lieyin'); + player.addTempSkill('yui_lieyin'+result.index,'phaseUseEnd') + } + }, + }, + yui_lieyin0:{ + mod:{ + cardname:function(card){ + if(get.color(card)=='red') return 'sha'; + }, + }, + }, + yui_lieyin1:{ + mod:{ + cardname:function(card){ + if(card.name=='sha') return 'juedou'; + }, + }, + }, + yui_takaramono:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + unique:true, + juexingji:true, + skillAnimation:true, + animationColor:'key', + filter:function(event,player){ + var num=0; + if(player.hp<=1) num++; + if(game.dead.length>0) num++; + if(num!=1) return num>1; + var draw=0; + player.getAllHistory('gain',function(evt){ + if(evt.getParent(2).name=='yui_jiang') draw+=evt.cards.length; + }); + return draw>=3; + }, + content:function(){ + player.awakenSkill('yui_takaramono'); + player.addSkill('yui_yinhang'); + player._ichiban_no_takaramono=true; + player.gainMaxHp(); + player.recover(); + }, + derivation:'yui_yinhang', + }, + yui_yinhang:{ + trigger:{player:'changeHp'}, + locked:true, + direct:true, + line:{color:[253, 153, 182]}, + content:function(){ + 'step 0' + event.count=Math.abs(trigger.num); + 'step 1' + event.count--; + player.chooseTarget([1,2],get.prompt('yui_yinhang'),'令至多两名角色各摸一张牌').set('ai',function(target){ + return get.attitude(_status.event.player,target); + }); + 'step 2' + if(result.bool){ + var targets=result.targets; + targets.sortBySeat(); + player.logSkill('yui_yinhang',targets,lib.skill.yui_yinhang.line); + game.asyncDraw(targets); + } + else event.finish(); + 'step 3' + game.delay(); + if(event.count>0) event.goto(1); + }, + }, + yoshino_jueyi:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseTarget(lib.filter.notMe,get.prompt2('yoshino_jueyi')).set('ai',function(){ + var player=_status.event.player; + var att=get.attitude(player,target); + if(att<0) return 0; + if(att==0) return 0.1; + var eff=0; + var hs=player.getCards('h'); + for(var i=0;i0) eff+=eff2; + } + } + return -att/(1+eff); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('yoshino_jueyi',target); + player.draw(); + } + else event.finish(); + 'step 2' + player.chooseToPSS(target); + 'step 3' + if(result.tie) event.goto(2); + else if(result.bool) target.damage(); + else target.addTempSkill('yoshino_fail','phaseUseEnd'); + }, + }, + yoshino_fail:{ + mod:{ + targetEnabled:function(card,player,target){ + if(player==_status.currentPhase) return false; + }, + }, + }, kengo_weishang:{ locked:false, mod:{ @@ -507,6 +755,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); } "step 3" + event.index=result.index; if(result.index==1){ var magic=get.cardPile2(function(card){ return get.type(card,'trick')==event.type; @@ -516,13 +765,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger.player.storage.yukine_magic.add(magic.name); trigger.player.gain(magic,'draw'); } - event.finish(); + else event.finish(); } else player.chooseCard('he',true,'选择要交给'+get.translation(trigger.player)+'的牌').set('ai',function(card){ return -get.value(card,_status.event.getTrigger().player); }); "step 4" - if(result.bool) player.give(result.cards,trigger.player,'giveAuto'); + if(event.index==1) game.updateRoundNumber(); + else if(result.bool) player.give(result.cards,trigger.player,'giveAuto'); }, }, yukine_magic:{ @@ -5906,6 +6156,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_masato:'井之原真人', key_iwasawa:'岩泽雅美', key_kengo:'宫泽谦吾', + key_yoshino:'吉野晴彦', + key_yui:'ユイ', + key_tsumugi:'紬文德斯', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -5919,7 +6172,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuri_wangxi:'忘隙', yuri_wangxi_info:'主公技,限定技,当有角色因你发动的【行动】而死亡后,若其身份不为【明忠】,则其可以将身份改为忠臣并重新加入游戏,然后将势力改为与你相同,将体力值回复至2点并摸一张牌。', haruko_haofang:'豪放', - haruko_haofang_info:'锁定技,你不能使用非转化的延时锦囊牌。你可以将一张延时锦囊牌当做【无中生有】使用。', + haruko_haofang_info:'锁定技,你的延时锦囊牌视为【无中生有】。', haruko_zhuishi:'追逝', haruko_zhuishi_info:'一名角色的判定阶段开始时,若其判定区内有牌,则你可以失去1点体力,然后获得其判定区内的所有牌。', kagari_zongsi:'纵丝', @@ -5937,6 +6190,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成1点伤害,然后对所有其他角色依次造成1点伤害。当有角色因此法进入濒死状态时,你加1点体力上限并回复1点体力,然后失去此技能并终止此技能的所有后续结算。', yukine_wenzhou:'问咒', yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。', + //如果对自己发动【问咒】,则自己可以响应这些牌。但其他角色发动【问咒】时,该角色自己并不能响应 yusa_yanyi:'演艺', yusa_yanyi_info:'出牌阶段限一次,你可以指定至多X名与你距离不大于你的体力值的角色。这些角色选择一项:①令你摸一张牌。②回复1点体力,然后交给你一张牌。(X为你的攻击范围且至少为1)', misa_yehuo:'业火', @@ -5959,6 +6213,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ kengo_weishang_info:'出牌阶段限一次,你可以废除一个装备栏并摸两张牌。若你的武器栏已废除,则你使用【杀】的次数上限+1,且当你使用【杀】指定目标后,目标角色弃置一张牌;若你的防具栏已废除,则你可以将一张牌当做【闪】使用或打出;若你的攻击/防御坐骑栏已废除,则你至其他角色的距离-1/其他角色至你的距离-1。', kengo_guidui:'归队', kengo_guidui_info:'锁定技,准备阶段,若你有已废除的装备栏,则你恢复这些装备栏,且本回合内发动【伪伤】时不能废除这些装备栏。', + yoshino_jueyi:'决义', + yoshino_jueyi_info:'出牌阶段开始时,你可以选择一名其他角色。你摸一张牌并与其猜拳(平局则重来)。若你赢,你对其造成1点伤害。若你没赢,你本阶段内使用牌时不能指定其为目标。', + yui_jiang:'激昂', + yui_jiang_info:'每当你使用(指定目标后)或被使用(成为目标后)一张【决斗】或红色的【杀】时,你可以摸一张牌。', + yui_lieyin:'烈音', + yui_lieyin_info:'锁定技,出牌阶段开始时,你选择一项:①本阶段内的红色牌均视为【杀】;②本阶段内的【杀】均视为【决斗】。', + yui_takaramono:'珍宝', + yui_takaramono_info:'觉醒技,准备阶段,若你满足以下条件中的至少两个:①体力值不大于1;②场上有已死亡的角色;③已因〖激昂〗累计获得过至少三张牌;则你获得技能〖引吭〗,将〖烈音〗描述中的「你选择」改为「你可选择」,然后加1点体力上限并回复1点体力。', + //ユイ/孙笨双将组合时,孙笨的【激昂】不计入【珍宝】的次数统计 + yui_yinhang:'引吭', + yui_yinhang_info:'锁定技,当你的体力值变化1点时,你可以令至多两名角色摸一张牌。', + tsumugi_mugyu:'姆啾', + tsumugi_mugyu_info:'当你成为牌的目标后,若你的手牌数小于体力上限,则你可以摸一张牌。', + tsumugi_huilang:'回廊', + tsumugi_huilang2:'回廊', + tsumugi_huilang_info:'回合结束时,不可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', + //〖回廊〗涉及的所有卡牌移动的结算不会触发〖良姻〗 ns_zhangwei:'张葳', nsqiyue:'骑钺', diff --git a/character/hearth.js b/character/hearth.js index a8ee3acf4..64f95c8dd 100644 --- a/character/hearth.js +++ b/character/hearth.js @@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ character:{ hs_jaina:['female','wei',3,['huopu','aoshu','bingjia']], hs_lrexxar:['male','shu',4,['yushou']], - hs_wuther:['male','qun',4,['fengxian','jieming']], + hs_wuther:['male','qun',4,['fengxian','rejieming']], hs_jgarrosh:['male','shu',4,['zhanhou','qiangxi']], hs_malfurion:['male','wu',4,['jihuo']], hs_guldan:['male','wei',3,['moxie','fuhua','hongxi']], diff --git a/character/mobile.js b/character/mobile.js index cf98a2449..8f08d6d07 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -7,11 +7,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ characterSort:{ mobile:{ mobile_default:["miheng","taoqian","liuzan","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng"], - mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang","re_heqi"], + mobile_others:["re_jikang","old_bulianshi","old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","xin_yuanshao","re_liushan","xin_xiahoudun","re_sp_zhugeliang","re_heqi","re_guanqiujian","re_pangtong"], mobile_sunben:["re_sunben"], }, }, character:{ + re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]], + re_guanqiujian:['male','wei',4,['rezhengrong','rehongju']], chendeng:['male','qun',3,['zhouxuan','fengji']], re_heqi:['male','wu',4,['reqizhou','reshanxi']], yangbiao:['male','qun',3,['zhaohan','rangjie','yizheng']], @@ -266,6 +268,193 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, skill:{ + rezhengrong:{ + trigger:{player:'useCardAfter'}, + direct:true, + audio:'drlt_zhenrong', + filter:function(event,player){ + if(!event.targets) return false; + if(!event.isPhaseUsing(player)) return false; + var bool=false; + for(var i=0;i0; + }).set('ai',function(target){ + return (1-get.attitude(_status.event.player,target))/target.countCards('he'); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=result.targets[0]; + player.logSkill('rezhengrong',target); + var card=target.getCards('he').randomGet(); + game.log(player,'选择了',card); + target.$give(card,player,false); + target.lose(card,ui.special,'toStorage'); + if(!player.storage.rezhengrong) player.storage.rezhengrong=[]; + player.storage.rezhengrong.push(card); + player.markSkill('rezhengrong'); + game.delayx(); + } + }, + marktext:'荣', + intro:{ + content:'cards', + onunmark:'throw', + }, + }, + rehongju:{ + trigger:{player:'phaseZhunbeiBegin'}, + audio:'drlt_hongju', + forced:true, + unique:true, + juexingji:true, + skillAnimation:true, + animationColor:'thunder', + derivation:'reqingce', + filter:function(event,player){ + return player.storage.rezhengrong&&player.storage.rezhengrong.length>=3&&game.dead.length>0; + }, + content:function(){ + 'step 0' + player.awakenSkill('rehongju'); + player.draw(player.storage.rezhengrong.length); + 'step 1' + if(player.countCards('h')==0) event.goto(3); + else{ + var dialog=['请选择要交换的手牌和「荣」,或点「取消」','
「征荣」牌
',player.storage.rezhengrong,'
手牌区
',player.getCards('h')]; + var next=player.chooseButton(dialog); + next.set('filterButton',function(button){ + var ss=_status.event.player.storage.rezhengrong; + var hs=_status.event.player.getCards('h'); + var sn=0; + var hn=0; + var ub=ui.selected.buttons; + for(var i=0;i=hs.length&&ss.contains(button.link)||hn>=ss.length&&hs.contains(button.link)); + }); + next.set('selectButton',function(){ + if(ui.selected.buttons.length==0) return 2; + var ss=_status.event.player.storage.rezhengrong; + var hs=_status.event.player.getCards('h'); + var sn=0; + var hn=0; + var ub=ui.selected.buttons; + for(var i=0;i0; + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('请选择要移去的「荣」',player.storage.rezhengrong,'hidden'); + }, + backup:function(links,player){ + return { + card:links[0], + filterCard:function(){return false}, + selectCard:-1, + filterTarget:function(card,player,target){ + return target.countDiscardableCards(player,'ej')>0; + }, + delay:false, + audio:'drlt_qingce', + content:lib.skill.reqingce.contentx, + ai:{ + result:{ + target:function(player,target){ + var att=get.attitude(player,target); + if(att>0&&(target.countCards('j')>0||target.countCards('e',function(card){ + return get.value(card,target)<0; + }))) return 2; + if(att<0&&target.countCards('e')>0&&!target.hasSkillTag('noe')) return -1; + return 0; + }, + }, + }, + } + }, + prompt:function(links,player){ + return '弃置一名角色装备区或判定区内的一张牌'; + }, + }, + contentx:function(){ + 'step 0' + var card=lib.skill.reqingce_backup.card; + player.$throw(card); + game.cardsDiscard(card); + player.storage.rezhengrong.remove(card); + player[player.storage.rezhengrong.length>0?'markSkill':'unmarkSkill']('rezhengrong'); + 'step 1' + if(target.countDiscardableCards(player,'ej')>0){ + player.discardPlayerCard('ej',true,target); + } + }, + ai:{ + order:8, + result:{ + player:function(player){ + if(game.hasPlayer(function(current){ + var att=get.attitude(player,current); + if((att>0&¤t.countCards('j')>0)||(att<0&¤t.countCards('e')>0)) return true; + return false; + })) return 1; + return 0; + }, + }, + }, + }, fengji:{ audio:2, trigger:{player:'phaseBegin'}, @@ -668,6 +857,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var ts=target.getCards('h').sort(function(a,b){ return b.number-a.number; }); + if(!hs.length||!ts.length) return 0; if(hs[0].number>ts[0].number) return -1; return 0; }, @@ -3801,7 +3991,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhouxuan2:'周旋', zhouxuan_info:'结束阶段,你可以弃置一张牌并指定一名角色,然后选择一个基本牌的名称或非基本牌的类型。其使用或打出下一张牌时,若此牌的名称或类型和你选择的相同,则你观看牌堆顶的三张牌,然后将这些牌分配给任意角色。', fengji:'丰积', - fengji_info:'锁定技,回合结束时,你记录你的手牌数。回合开始时,若你的手牌数不小于你记录的手牌数,则你摸两张牌且本回合手牌上限+X。(X为你的体力值)', + fengji_info:'锁定技,回合结束时,你记录你的手牌数。回合开始时,若你的手牌数不小于你记录的手牌数,则你摸两张牌且本回合手牌上限+X。(X为你已损失的体力值)', + re_guanqiujian:'手杀毌丘俭', + rezhengrong:'征荣', + rehongju:'鸿举', + reqingce:'清侧', + reqingce_backup:'清侧', + rezhengrong_info:'当你于出牌阶段使用的指定了其他角色为目标的牌结算完成后,若此牌是你本局游戏内于出牌阶段使用的指定了其他角色为目标的第偶数张牌,则你可以将一名其他角色角色的随机一张牌置于你的武将牌上,称为「荣」。', + rehongju_info:'觉醒技,准备阶段,若你武将牌上「荣」的数量不小于3且有角色死亡,则你摸等同于「荣」数量的牌。然后可以用任意数量的手牌交换等量的「荣」。你减1点体力上限并获得技能〖清侧〗。', + reqingce_info:'出牌阶段,你可以将一张「荣」置入弃牌堆,然后弃置场上的一张牌。', + re_pangtong:"手杀庞统", } }; }); diff --git a/character/old.js b/character/old.js index d3b8734e2..16e93522a 100755 --- a/character/old.js +++ b/character/old.js @@ -750,20 +750,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, - shiyong:{ - audio:2, - trigger:{player:'damageEnd'}, - forced:true, - check:function(){ - return false; - }, - filter:function(event,player){ - return event.card&&event.card.name=='sha'&&(get.color(event.card)=='red'||event.getParent(2).jiu==true); - }, - content:function(){ - player.loseMaxHp(); - } - }, oldqianxi:{ trigger:{source:'damageBegin2'}, check:function(event,player){ @@ -922,8 +908,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ oldzhenlie_info:'在你的判定牌生效前,你可以亮出牌堆顶的一张牌代替之', oldmiji:'秘计', oldmiji_info:'准备/结束阶段开始时,若你已受伤,你可以判定,若判定结果为黑色,你观看牌堆顶的X张牌(X为你已损失的体力值),然后将这些牌交给一名角色', - shiyong:'恃勇', - shiyong_info:'锁定技,当你受到一次红色【杀】或【酒】【杀】造成的伤害后,须减1点体力上限', oldqianxi:'潜袭', oldqianxi_info:'当你使用【杀】对距离为1的目标角色造成伤害时,你可以进行一次判定,若判定结果不为红桃,你防止此伤害,令其减1点体力上限', oldxuanfeng:'旋风', diff --git a/character/refresh.js b/character/refresh.js index f1409bab5..6c0df032a 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ refresh:{ refresh_standard:["re_caocao","re_simayi","re_guojia","re_lidian","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_xushu","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_gongsunzan","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong"], refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','re_weiyan','re_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'], - refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","re_pangtong","ol_yuanshao","re_pangde"], + refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","re_pangde"], refresh_lin:['re_zhurong','re_menghuo','re_dongzhuo','re_sunjian','re_caopi','re_xuhuang'], refresh_shan:['re_dengai','re_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce'], refresh_yijiang:['re_xusheng','re_wuguotai','re_gaoshun','re_zhangyi'], @@ -14,6 +14,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, connect:true, character:{ + ol_pangtong:['male','shu',3,['xinlianhuan','olniepan'],[]], re_zhangyi:['male','shu',4,['rewurong','shizhi']], re_xusheng:['male','wu',4,['repojun']], re_wuguotai:['female','wu',3,['reganlu','buyi']], @@ -64,7 +65,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_xunyu:["male","wei",3,["quhu","rejieming"],[]], re_dianwei:["male","wei",4,["reqiangxi"],[]], re_yanwen:["male","qun",4,["reshuangxiong"],[]], - re_pangtong:['male','shu',3,['xinlianhuan','niepan'],[]], ol_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']], re_zhurong:['female','shu',4,['juxiang','relieren']], re_menghuo:['male','shu',4,['huoshou','rezaiqi']], @@ -93,6 +93,70 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sunben:['zhouyu','taishici','daqiao'], }, skill:{ + olniepan:{ + audio:2, + unique:true, + enable:'chooseToUse', + mark:true, + skillAnimation:true, + animationStr:'涅盘', + limited:true, + animationColor:'orange', + init:function(player){ + player.storage.olniepan=false; + }, + filter:function(event,player){ + if(player.storage.olniepan) return false; + if(event.type=='dying'){ + if(player!=event.dying) return false; + return true; + } + return false; + }, + content:function(){ + 'step 0' + player.awakenSkill('olniepan'); + player.storage.olniepan=true; + player.discard(player.getCards('hej')); + 'step 1' + player.link(false); + 'step 2' + player.turnOver(false); + 'step 3' + player.draw(3); + 'step 4' + if(player.hp<3){ + player.recover(3-player.hp); + } + 'step 5' + player.chooseControl('bazhen','rehuoji','rekanpo').set('prompt','选择获得一个技能').ai=function(){ + return ['rehuoji','bazhen'].randomGet(); + }; + 'step 6' + player.addSkillLog(result.control); + }, + ai:{ + order:1, + skillTagFilter:function(player){ + if(player.storage.olniepan) return false; + if(player.hp>0) return false; + }, + save:true, + result:{ + player:function(player){ + if(player.hp<=0) return 10; + if(player.hp<=2&&player.countCards('he')<=1) return 10; + return 0; + } + }, + threaten:function(player,target){ + if(!target.storage.olniepan) return 0.6; + } + }, + intro:{ + content:'limited' + } + }, rewurong:{ enable:'phaseUse', usable:1, @@ -1786,7 +1850,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rehuoji:{ position:"he", audio:2, - audioname:['ol_sp_zhugeliang'], + audioname:['ol_sp_zhugeliang','ol_pangtong'], enable:"chooseToUse", filterCard:function (card){ return get.color(card)=='red'; @@ -1806,60 +1870,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return 4-get.value(card) }, - ai:{ - basic:{ - order:4, - value:[3,1], - useful:1, - }, - wuxie:function (target,card,player,current,state){ - if(get.attitude(current,player)>=0&&state>0) return false; - }, - result:{ - player:function (player){ - var nh=player.countCards('h'); - if(nh<=player.hp&&nh<=4&&_status.event.name=='chooseToUse'){ - if(typeof _status.event.filterCard=='function'&& - _status.event.filterCard({name:'huogong'})){ - return -10; - } - if(_status.event.skill){ - var viewAs=get.info(_status.event.skill).viewAs; - if(viewAs=='huogong') return -10; - if(viewAs&&viewAs.name=='huogong') return -10; - } - } - return 0; - }, - target:function (player,target){ - if(target.hasSkill('huogong2')||target.countCards('h')==0) return 0; - if(player.countCards('h')<=1) return 0; - if(target==player){ - if(typeof _status.event.filterCard=='function'&& - _status.event.filterCard({name:'huogong'})){ - return -1.5; - } - if(_status.event.skill){ - var viewAs=get.info(_status.event.skill).viewAs; - if(viewAs=='huogong') return -1.5; - if(viewAs&&viewAs.name=='huogong') return -1.5; - } - return 0; - } - return -1.5; - }, - }, - tag:{ - damage:1, - fireDamage:1, - natureDamage:1, - norepeat:1, - }, - }, }, rekanpo:{ audio:2, - audioname:['ol_sp_zhugeliang'], + audioname:['ol_sp_zhugeliang','ol_pangtong'], position:"he", enable:"chooseToUse", filterCard:function (card){ @@ -1873,17 +1887,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, prompt:"将一张黑色手牌当无懈可击使用", check:function (card){return 8-get.value(card)}, - threaten:1.2, - ai:{ - basic:{ - useful:[6,4], - value:[6,4], - }, - result:{ - player:1, - }, - expose:0.2, - }, }, rejieming:{ audio:2, @@ -5115,7 +5118,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var player=_status.event.player; if(player.isTurnedOver()||_status.event.getTrigger().player.getDamagedHp()>2) return -1; return (player.hp*player.hp)-get.value(card); - }).set('prompt','弃置'+get.cnNumber(player.getDamagedHp())+'张手牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+get.cnNumber(player.getDamagedHp())+'张牌。'); + }).set('prompt','弃置'+get.cnNumber(player.getDamagedHp())+'张牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+get.cnNumber(player.getDamagedHp())+'张牌。'); } else event.finish(); "step 2" @@ -5371,7 +5374,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "re_xunyu":"界荀彧", "re_dianwei":"界典韦", "re_yanwen":"界颜良文丑", - re_pangtong:"界庞统", xin_yuanshao:"手杀袁绍", re_zhangjiao:'界张角', re_sunce:'界孙策', @@ -5617,6 +5619,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_zhangyi:'界张嶷', rewurong:'怃戎', rewurong_info:'出牌阶段限一次,你可以令一名其他角色与你同时展示一张手牌:若你展示的是【杀】且该角色展示的不是【闪】,则你对其造成1点伤害;若你展示的不是【杀】且该角色展示的是【闪】,则你获得其一张牌', + ol_pangtong:'界庞统', + olniepan:'涅槃', + olniepan_info:'限定技,当你处于濒死状态时,你可以弃置你区域内的所有牌并复原你的武将牌,然后摸三张牌并将体力回复至3点。然后你选择获得以下技能中的一个:〖八阵〗/〖火计〗/〖看破〗', refresh_standard:'界限突破·标', refresh_feng:'界限突破·风', diff --git a/character/shenhua.js b/character/shenhua.js index e6d504a11..35a17d5e0 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -294,7 +294,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, prompt:function(links,player){ - return '选择弃置一手张牌,获得'+get.translation(links[0])+'并弃置一名角色装备区或判定区内的一张牌'; + return '选择弃置一张手牌,获得'+get.translation(links[0])+'并弃置一名角色装备区或判定区内的一张牌'; }, }, contentx:function(){ @@ -2418,15 +2418,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, xinlianhuan:{ audio:2, + audioname:['ol_pangtong'], group:['lianhuan3','lianhuan5','lianhuan4'], }, lianhuan5:{ inherit:'lianhuan2', + audioname:['ol_pangtong'], audio:['xinlianhuan',2], }, lianhuan3:{ audio:['xinlianhuan',1], - audioname:['xinlianhuan'], + audioname:['ol_pangtong'], enable:'chooseToUse', filter:function(event,player){ return player.countCards('h',{suit:'club'})>0; @@ -2438,10 +2440,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, lianhuan4:{ mod:{ - selectTarget:function(card,player,range){ - if(card.name=='tiesuo'&&player.hasSkill('xinlianhuan')&&range[1]<3&&range[1]!=-1) range[1]=3; - }, - }, + selectTarget:function(card,player,range){ + if(card.name=='tiesuo'&&range[1]!=-1) range[1]++; + }, + }, }, reluanji:{ audio:2, @@ -4888,7 +4890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, bazhen:{ audio:2, - audioname:['re_sp_zhugeliang','ol_sp_zhugeliang'], + audioname:['re_sp_zhugeliang','ol_sp_zhugeliang','ol_pangtong'], equipSkill:true, noHidden:true, inherit:'bagua_skill', @@ -7355,7 +7357,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ luanji:'乱击', xueyi:'血裔', mengjin:'猛进', - xinlianhuan_info:' 你可以将一张♣手牌当【铁索连环】使用或重铸。你使用的【铁索连环】可以指定至多3个目标。', + xinlianhuan_info:' 你可以将一张♣手牌当【铁索连环】使用或重铸。你使用【铁索连环】选择目标的上限数+1。', huoji_info:'出牌阶段,你可以将你的任意一张红色手牌当作【火攻】使用。', bazhen_info:'锁定技,若你的防具栏内没有牌且没有被废除,则你视为装备着【八卦阵】。', kanpo_info:'你可以将你的任意一张黑色手牌当做【无懈可击】使用。', diff --git a/character/sp.js b/character/sp.js index c2cdc37d4..2d9d50b13 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5,7 +5,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ sp:{ - sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","liuxie","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","fuwan","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","lingju","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","wenyang","xujing","yuantanyuanshang","wangshuang"], + sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","liuxie","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","fuwan","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","lingju","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","wenyang","xujing","yuantanyuanshang","wangshuang","sunshao"], sp_guansuo:['guansuo','baosanniang','huaman'], sp_whlw:["xurong","lijue","zhangji","fanchou","guosi"], sp_zlzy:["zhangqiying","lvkai","zhanggong","weiwenzhugezhi","beimihu"], @@ -23,6 +23,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + sunshao:['male','wu',3,['bizheng','yidian'],['unseen']], wangshuang:['male','wei',5,['spzhuilie'],['unseen']], sp_gongsunzan:['male','qun',4,['spyicong','sptuji']], sp_simazhao:['male','wei',3,['spzhaoxin','splanggu']], @@ -180,6 +181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + sunshao:'孙邵(163年-225年),字长绪,青州北海国人(今山东潍坊市昌乐县西)。原为北海相孔融的功曹,被孔融称赞为可任朝廷要职的人才,后随刘繇到达江东,继而辅佐孙权。孙权称吴王后,孙邵成为吴国首任丞相,数年后病逝。由于孙邵和当时吴国史官的关系并不是很好,因此在史书中并没有详细的记载。', wangshuang:'王双(?-228年),三国时期曹魏将领。蜀汉建兴六年(228年)冬,诸葛亮出散关,攻陈仓,后粮尽而退。王双率领骑兵追击蜀军,但在与蜀军的交战中被击败,王双也被蜀军所斩。在《三国演义》中,王双字子全,是陇西郡狄道县(今甘肃临洮县)人,有万夫不当之勇。在诸葛亮北伐期间,被魏延所斩。', yuantanyuanshang:'袁谭、袁尚分别是袁绍的长子和第三子。袁绍坐拥青州、冀州、幽州、并州,本是北方最强诸侯,却于官渡大败,惭恨而终。虽然袁绍生前偏爱小儿子袁尚,却并未在继承人上有明确表态,这也导致本应以嫡长子身份继承的袁谭因郭图、审配伪立遗令未能如愿。曹操击败袁绍后,进而渡过黄河追击袁家残余势力,袁谭告急,但袁尚仅给他少量兵力。曹操得郭嘉之计退兵坐观其变,恰使两人此前的种种矛盾彻底爆发,袁谭不敌便引狼入室,派辛毗作为使者向曹操求援,让袁尚不得不北逃投奔乌桓。但袁谭也在之后背叛曹操兵败被杀。没多久,乌桓也被平定,袁熙、袁尚二人投奔公孙康后被斩首送还曹操。', huaman:'花鬘,古典戏曲《龙凤巾》(一名《化外奇缘》)中的人物,身份为三国时期南蛮王孟获与祝融夫人的女儿,关索的夫人之一。在关于关三小姐·关银屏的民间传说中,其名字为“花中秀”,与关索其他几位夫人鲍三娘、王桃、王悦都被关索之姐关银屏编入自己的女兵营中。花鬘在《三国志》,《三国演义》均未有提及,只是戏曲中的虚构人物。其形象并非一般君主家中闺秀,而是与其母祝融相似,是一个可以披甲上阵,善于刀枪作战的女武将。戏曲中在诸葛亮平定南蛮时,花鬘曾与关索作战,失败被俘,两人互生爱意,南蛮王孟获降服后二人成婚。近些年,花鬘接连在各类三国题材的游戏中登场,更广被人知晓。', @@ -503,6 +505,80 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //孙邵 + bizheng:{ + trigger:{player:'phaseDrawEnd'}, + direct:true, + audio:2, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('bizheng'),lib.filter.notMe).set('ai',function(target){ + var player=_status.event.player; + if(player.countCards('h')>player.hp) return 0; + var att=get.attitude(player,target); + if(att<=0||target.hasSkillTag('nogain')) return false; + if(target.hp-target.countCards('h')>=2) return att; + return att/2; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('bizheng',target); + target.draw(2); + } + else event.finish(); + 'step 2' + if(player.countCards('h')>player.hp) player.chooseToDiscard(2,'he',true); + 'step 3' + if(target.countCards('h')>target.hp) target.chooseToDiscard(2,'he',true); + }, + }, + yidian:{ + trigger:{player:'useCard2'}, + filter:function(event,player){ + var info=get.info(event.card); + if(info.allowMultiple==false) return false; + if(event.targets&&!info.multitarget){ + for(var i=0;i0; + return /*(get.mode()!='guozhan'||event.player!=player)&&*/player.countCards('h')>0; }, direct:true, content:function(){ @@ -12208,19 +12284,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return player.getStat('kill')>0; }, content:function(){ - if(get.mode()=='guozhan'){ - player.draw(3); - } - else{ + //if(get.mode()=='guozhan'){ + // player.draw(3); + //} + //else{ player.draw(3*player.getStat('kill')); - } + //} }, subSkill:{ draw:{ trigger:{global:'dieAfter'}, frequent:true, filter:function(event,player){ - return get.mode()!='guozhan'&&player!=event.source; + return /*get.mode()!='guozhan'&&*/player!=event.source; }, content:function(){player.draw()}, }, @@ -16926,7 +17002,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fanghun:'芳魂', fanghun_info:'当你使用【杀】造成伤害或受到【杀】的伤害后,你获得X个“梅影”标记(X为伤害点数);你可以移去1个“梅影”标记来发动〖龙胆〗并摸一张牌。', fuhan:'扶汉', - fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记并摸等量的牌,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至多为游戏开始时的角色数),然后回复1点体力。', + fuhan_info:'限定技,回合开始时,你可以移去所有“梅影”标记并摸等量的牌,随机观看五名未登场的蜀势力角色,将武将牌替换为其中一名角色,并将体力上限数调整为本局游戏中移去“梅影”标记的数量(至少为2,至多为8),然后回复1点体力。', yjixi:'觊玺', yjixi_info:'觉醒技,结束阶段,若你连续三回合没有因〖庸肆〗而失去过体力,则你增加1点体力上限并回复1点体力,然后选择一项:获得技能〖妄尊〗;摸两张牌并获得当前主公的主公技。', xinyongsi:'庸肆', @@ -17002,9 +17078,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mouduan:'谋断', mouduan_info:'游戏开始时,你获得标记“武”并获得技能〖激昂〗和〖谦逊〗。当你失去手牌后,若手牌数不大于2,你须将你的标记变为“文”,将这两项技能改为〖英姿〗和〖克己〗。一名角色的回合开始前,你可弃一张牌将标记翻回。', jiqiao:'机巧', - jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶三倍数量的牌并获得其中的锦囊牌。', + jiqiao_info:'出牌阶段开始时,你可以弃置任意张装备牌,然后亮出牌堆顶两倍数量的牌并获得其中的非装备牌。', linglong:'玲珑', - linglong_info:'锁定技,若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1;若你的装备区没有宝物牌,则你视为拥有技能〖奇才〗。', + linglong_info:'锁定技,若你的装备区没有武器牌,则你使用【杀】的次数上限+1;若你的装备区没有防具牌,视为你装备着【八卦阵】;若你的装备区没有坐骑牌,你的手牌上限+1;若你的装备区没有宝物牌,则你视为拥有技能〖奇才〗。', fenyong:'愤勇', fenyong2:'愤勇', fenyong2_bg:'勇', @@ -17256,9 +17332,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shenxian_info:'每名角色的回合限一次,你的回合外,当有其他角色因弃置而失去基本牌时,你可以摸一张牌。', oldshenxian_info:'你的回合外,每当有其他角色因弃置而失去基本牌时,你可以摸一张牌。', qiluan_info:'一名角色的回合结束时,你可以摸3X张牌(X为你本回合内杀死过的角色数)。一名其他角色死亡后,若其不是你杀死的,则你可以摸一张牌。', - qiluan_info_guozhan:'一名角色的回合结束时,若你于回合内杀死过角色,则你可以摸三张牌。', + //qiluan_info_guozhan:'一名角色的回合结束时,若你于回合内杀死过角色,则你可以摸三张牌。', zhendu_info:'一名角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用了一张【酒】。若该角色不是你,你对其造成一点伤害。', - zhendu_info_guozhan:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用了一张【酒】。若如此做,你对其造成一点伤害。', + //zhendu_info_guozhan:'其他角色的出牌阶段开始时,你可以弃置一张手牌,视为该角色使用了一张【酒】。若如此做,你对其造成一点伤害。', shangyi_info:'出牌阶段限一次,你可以观看一名其他角色的手牌,然后弃置其中的一张黑色牌。', zniaoxiang_info:'锁定技,当你使用【杀】指定目标后,你令目标角色响应此【杀】所需要使用的【闪】的数目+1。', shoucheng_info:'当一名其他角色于其回合外失去手牌时,若其没有手牌,则你可令该角色摸一张牌。', @@ -17330,6 +17406,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ spzhuilie:'追猎', spzhuilie2:'追猎', spzhuilie_info:'锁定技,你使用【杀】无距离限制;当你使用【杀】指定目标后,若其不在你的攻击范围内,此【杀】不计入使用次数限制且你判定。若判定结果为:装备牌,此【杀】的伤害基数改为X(X为其体力值);锦囊牌,你失去1点体力。', + sunshao:'孙邵', + bizheng:'弼政', + bizheng_info:'摸牌阶段结束时,你可以令一名其他角色摸两张牌。然后,若你的手牌数大于体力值,你弃置两张牌。若其的手牌数大于体力值,其弃置两张牌。', + yidian:'佚典', + yidian_info:'当你使用牌选择目标时,若弃牌堆中没有与此牌名称相同的牌,则你可以为此牌增加一个目标(无距离限制)。', sp_default:"常规", sp_whlw:"文和乱武", diff --git a/character/standard.js b/character/standard.js index fb5e638d7..a2cc3105e 100755 --- a/character/standard.js +++ b/character/standard.js @@ -1913,11 +1913,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ position:'he', filterCard:lib.filter.cardDiscardable, filterTarget:function(card,player,target){ - var trigger=_status.event.getTrigger(); - if(trigger.targets.contains(target)) return false; - if(player.inRange(target)&& - target!=trigger.player){ - if(player.canUse(trigger.card,target)) return true; + var trigger=_status.event; + if(player.inRange(target)&&target!=trigger.source){ + if(lib.filter.targetEnabled(trigger.card,trigger.source,target)) return true; } return false; }, @@ -1941,6 +1939,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, prompt:get.prompt('liuli'), prompt2:'弃置一张牌,将此【杀】转移给攻击范围内的一名其他角色', + source:trigger.player, + card:trigger.card, }); "step 1" if(result.bool){ @@ -1948,6 +1948,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.logSkill(event.name,target); player.discard(result.cards); var evt=trigger.getParent(); + evt.triggeredTargets2.remove(player); evt.targets.remove(player); evt.targets.push(target); } diff --git a/character/tw.js b/character/tw.js index e345bd151..f9a307c61 100644 --- a/character/tw.js +++ b/character/tw.js @@ -262,7 +262,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, twxiaolian:{ audio:2, - trigger:{global:'useCardToPlayer'}, + trigger:{global:'useCardToTarget'}, logTarget:'target', filter:function(event,player){ return event.card&&event.card.name=='sha'&&event.player!=player&& @@ -274,6 +274,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.getParent().twxiaolian=trigger.targets[0]; trigger.targets.length=0; + trigger.getParent().triggeredTargets2.length=0; trigger.targets.push(player); }, group:'twxiaolian_damage', @@ -337,6 +338,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' trigger.targets.length=0; + trigger.getParent().triggeredTargets1.length=0; trigger.targets.push(player); var next=game.createEvent('twtijin_discard',null,trigger.getParent(2)); next.player=player; diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 39ad818de..e59295220 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -1177,6 +1177,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, audio:"xinfu_guanchao", forced:true, + mod:{ + aiOrder:function(player,card,num){ + if(typeof card.number!='number') return; + var history=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(); + }); + if(history.length==0) return num+10*(14-card.number); + var num=get.number(history[0].card); + if(!num) return; + for(var i=1;inum) return num+10*(14-card.number); + }, + }, filter:function (event,player){ var history=player.getHistory('useCard',function(evt){ return evt.isPhaseUsing(); @@ -1213,6 +1230,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, audio:"xinfu_guanchao", forced:true, + mod:{ + aiOrder:function(player,card,num){ + if(typeof card.number!='number') return; + var history=player.getHistory('useCard',function(evt){ + return evt.isPhaseUsing(); + }); + if(history.length==0) return num+10*card.number; + var num=get.number(history[0].card); + if(!num) return; + for(var i=1;i=num) return; + num=num2; + } + if(card.number=2) return false; + if(player.getStat().skill.zhanjue_draw&&player.getStat().skill.zhanjue_draw>=2) return false; var hs=player.getCards('h'); if(!hs.length) return false; for(var i=0;i0){ + if(current==player){ + stat.zhanjue_draw++; + } + return true; + } + return false; }); - if(typeof player.storage.zhanjue!='number'){ - player.storage.zhanjue=0; + if(list.length){ + list.sortBySeat(); + game.asyncDraw(list); } - player.storage.zhanjue+=num; - game.asyncDraw(list,function(current){ - return current==player?num:1; - }); + "step 1" + game.delay(); } }, zhanjue5:{}, @@ -6578,8 +6606,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, huomo_count2:{ - trigger:{player:['useCard']}, + trigger:{player:['useCard1']}, silent:true, + firstDo:true, filter:function(event){ return get.type(event.card)=='basic'; }, @@ -6641,6 +6670,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, backup:function(links,player){ return { + check:function(card){ + return 1/Math.max(0.1,get.value(card)); + }, filterCard:function(card){ return get.type(card)!='basic'&&get.color(card)=='black'; }, @@ -6657,7 +6689,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.log(player,'将',card,'置于牌堆顶'); event.result.card={name:event.result.card.name,nature:event.result.card.nature}; event.result.cards=[]; - player.lose(card,ui.special); + player.lose(card,ui.special,'visible'); 'step 1' game.delay(); 'step 2' @@ -8547,6 +8579,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.gain(result.cards,event.target,'give'); if(get.name(result.cards[0])!='shan'){ trigger.getParent().targets.push(event.target); + trigger.getParent().triggeredTargets2.push(event.target); game.log(event.target,'成为了额外目标'); } game.delay(); @@ -8590,6 +8623,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } else{ trigger.getParent().targets.push(event.target); + trigger.getParent().triggeredTargets2.push(event.target); game.log(event.target,'成为了额外目标'); } }, @@ -10666,23 +10700,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'damageEnd'}, forced:true, audio:2, + check:function(event,player){ + return player.getHistory('damage',function(evt){ + return evt!=event + }).length==0; + }, content:function(){ - if(player.hasSkill('shibei_damaged')){ + if(player.getHistory('damage',function(evt){ + return evt!=trigger + }).length>0){ player.loseHp(); } else{ player.recover(); } }, - group:'shibei_mark', subSkill:{ - mark:{ - trigger:{player:'damageAfter'}, - silent:true, - content:function(){ - player.addTempSkill('shibei_damaged'); - } - }, damaged:{}, ai:{} }, @@ -10697,7 +10730,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(target.hasSkill('shibei_ai')) return; if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return; if(get.tag(card,'damage')){ - if(target.hasSkill('shibei_damaged')){ + if(target.getHistory('damage',function(evt){ + return evt!=trigger + }).length>0){ return [1,-2]; } else{ @@ -11529,6 +11564,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhichi_info:'锁定技,当你于回合外受到伤害后,所有【杀】或普通锦囊牌对你无效直到回合结束。', zhichi2_info:'智迟已发动', pojun_info:'当你使用【杀】造成伤害后,你可以令受到该伤害的角色摸X张牌(X为该角色当前的体力值且最多为5),然后该角色将其武将牌翻面。', + shiyong:'恃勇', + shiyong_info:'锁定技,当你受到一次红色【杀】或【酒】【杀】造成的伤害后,须减1点体力上限', yijiang_2011:'一将成名2011', yijiang_2012:'一将成名2012', diff --git a/game/asset.js b/game/asset.js index 78680e3b7..2330c00c3 100644 --- a/game/asset.js +++ b/game/asset.js @@ -553,6 +553,7 @@ window.noname_asset_list=[ 'audio/die/ol_xiahouyuan.mp3', 'audio/die/chendeng.mp3', 'audio/die/yangbiao.mp3', + 'audio/die/ol_pangtong.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2411,7 +2412,21 @@ window.noname_asset_list=[ 'audio/skill/zhaohan1.mp3', 'audio/skill/zhaohan2.mp3', 'audio/skill/zhouxuan1.mp3', - 'audio/skill/zhouxuan2.mp3', + 'audio/skill/zhouxuan2.mp3', 'audio/skill/bazhen_ol_pangtong1.mp3', + 'audio/skill/bazhen_ol_pangtong2.mp3', + 'audio/skill/olniepan1.mp3', + 'audio/skill/olniepan2.mp3', + 'audio/skill/rehuoji_ol_pangtong1.mp3', + 'audio/skill/rehuoji_ol_pangtong2.mp3', + 'audio/skill/rekanpo_ol_pangtong1.mp3', + 'audio/skill/rekanpo_ol_pangtong2.mp3', + 'audio/skill/tsumugi_mugyu1.mp3', + 'audio/skill/tsumugi_mugyu2.mp3', + 'audio/skill/tsumugi_mugyu3.mp3', + 'audio/skill/tsumugi_mugyu4.mp3', + 'audio/skill/tsumugi_mugyu5.mp3', + 'audio/skill/xinlianhuan_ol_pangtong1.mp3', + 'audio/skill/xinlianhuan_ol_pangtong2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -2919,6 +2934,11 @@ window.noname_asset_list=[ 'image/character/re_heqi.jpg', 'image/character/re_zhangyi.jpg', 'image/character/yangbiao.jpg', + 'image/character/re_guanqiujian.jpg', + 'image/character/ol_pangtong.jpg', + 'image/character/key_yui.jpg', + 'image/character/key_tsumugi.jpg', + 'image/character/key_yoshino.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 83f981a66..c1d494787 100644 --- a/game/game.js +++ b/game/game.js @@ -6660,6 +6660,13 @@ return this.childNodes[row].childNodes[col]; } }; + Array.prototype.numOf=function(item){ + var num=0; + for(var i=0;i0&&player.hujia&&!player.hasSkillTag('nohujia')){ if(num>=player.hujia){ event.hujia=player.hujia; @@ -14668,6 +14680,7 @@ } event.num=num; "step 5" + if(event.source&&event.source.isDead()) delete event.source; if(lib.config.background_audio){ game.playAudio('effect','damage'+(num>1?'2':'')); } @@ -14728,6 +14741,7 @@ } } "step 6" + if(event.source&&event.source.isDead()) delete event.source; if(player.hp<=0&&player.isAlive()){ game.delayx(); player.dying(event); @@ -14773,6 +14787,7 @@ } } "step 7" + if(event.source&&event.source.isDead()) delete event.source; if(!event.notrigger) event.trigger('damageSource'); }, recover:function(){ @@ -18642,6 +18657,7 @@ if(next.card==undefined&&!nocard) next.card=event.card; if(next.cards==undefined&&!nocard) next.cards=event.cards; 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; if(next.nature=='poison') delete next._triggered; next.setContent('damage'); @@ -20297,6 +20313,25 @@ return history; } }, + getAllHistory:function(key,filter){ + var list=[]; + var all=this.actionHistory; + for(var j=0;j
对'+get.translation(event.players)+'中的一名角色造成一点伤害
',function(card,player,target){ - return target.isFriendOf(trigger.source)&&target.hp>=player.hp + return target.isFriendOf(_status.event.getTrigger().source)&&target.hp>=player.hp&&!game.hasPlayer(function(current){ + return current.isFriendOf(target)&¤t.hp>target.hp; + }) },true).set('ai',function(target){return get.damageEffect(target,player,player)}); else event.finish(); } @@ -2864,7 +2990,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ var player=_status.event.player; if(player.isTurnedOver()) return -1; return (player.hp*player.hp)-Math.max(1,get.value(card)); - }).set('prompt','弃置一张手牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+(player.getDamagedHp())+'张牌。'); + }).set('prompt','弃置一张牌并失去一点体力;或选择不弃置,将武将牌翻面并摸'+(player.getDamagedHp())+'张牌。'); } else event.finish(); "step 2" @@ -7137,11 +7263,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ xindiaodu:"调度", "xindiaodu_info":"当与你势力相同的角色使用装备牌时,其可以摸一张牌;出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。", yigui:"役鬼", - "yigui_info":"当首次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以展示一张“魂”并将其置入剩余武将牌堆,视为使用了一张本回合内未以此法使用过的基本牌或普通锦囊牌(此牌目标须为与此“魂”势力相同或未确定势力的角色)。 ", + "yigui_info":"当你首次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以展示一张“魂”并将其置入剩余武将牌堆,视为使用了一张本回合内未以此法使用过的基本牌或普通锦囊牌。(若此牌需指定目标,则目标须为未确定势力的角色或野心家或与此“魂”势力相同的角色)", "yigui_init":"役鬼", "yigui_init_info":"", "yigui_refrain":"役鬼", "yigui_refrain_info":"", + yigui_shan:'役鬼', + yigui_wuxie:'役鬼', jihun:"汲魂", jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌当做“魂”扣置于游戏外。", diff --git a/mode/identity.js b/mode/identity.js index 9e902f0e5..1cedaa2fb 100644 --- a/mode/identity.js +++ b/mode/identity.js @@ -1079,13 +1079,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ list.remove('shen'); if(list.length) player.group=function(){ if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){ - if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','old_liushan','old_yuanshao'].contains(game.zhu.name)) return game.zhu.group; + if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan'].contains(game.zhu.name)) return game.zhu.group; if(game.zhu.name=='sunhao'&&player.identity=='zhong') return 'wu'; if(game.zhu.name=='yl_yuanshu'){ if(player.identity=='zhong') list.remove('qun'); else return 'qun'; } - if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce'].contains(game.zhu.name)){ + if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu'].contains(game.zhu.name)){ if(player.identity!='zhong') list.remove(game.zhu.group); else return game.zhu.group; }