diff --git a/audio/die/gaolan.mp3 b/audio/die/gaolan.mp3 new file mode 100644 index 000000000..cf9489e28 Binary files /dev/null and b/audio/die/gaolan.mp3 differ diff --git a/audio/die/sp_shenpei.mp3 b/audio/die/sp_shenpei.mp3 new file mode 100644 index 000000000..978f94c97 Binary files /dev/null and b/audio/die/sp_shenpei.mp3 differ diff --git a/audio/die/sp_zhanghe.mp3 b/audio/die/sp_zhanghe.mp3 new file mode 100644 index 000000000..1c6ef2936 Binary files /dev/null and b/audio/die/sp_zhanghe.mp3 differ diff --git a/audio/die/xunchen.mp3 b/audio/die/xunchen.mp3 new file mode 100644 index 000000000..7acd6eca7 Binary files /dev/null and b/audio/die/xunchen.mp3 differ diff --git a/audio/skill/beizhan1.mp3 b/audio/skill/beizhan1.mp3 new file mode 100644 index 000000000..cb237bf9e Binary files /dev/null and b/audio/skill/beizhan1.mp3 differ diff --git a/audio/skill/beizhan2.mp3 b/audio/skill/beizhan2.mp3 new file mode 100644 index 000000000..c241552bd Binary files /dev/null and b/audio/skill/beizhan2.mp3 differ diff --git a/audio/skill/fenglve1.mp3 b/audio/skill/fenglve1.mp3 new file mode 100644 index 000000000..92d7fe3cd Binary files /dev/null and b/audio/skill/fenglve1.mp3 differ diff --git a/audio/skill/fenglve2.mp3 b/audio/skill/fenglve2.mp3 new file mode 100644 index 000000000..a6075d820 Binary files /dev/null and b/audio/skill/fenglve2.mp3 differ diff --git a/audio/skill/gangzhi1.mp3 b/audio/skill/gangzhi1.mp3 new file mode 100644 index 000000000..064f71bf2 Binary files /dev/null and b/audio/skill/gangzhi1.mp3 differ diff --git a/audio/skill/gangzhi2.mp3 b/audio/skill/gangzhi2.mp3 new file mode 100644 index 000000000..c6de2f8cd Binary files /dev/null and b/audio/skill/gangzhi2.mp3 differ diff --git a/audio/skill/mouzhi1.mp3 b/audio/skill/mouzhi1.mp3 new file mode 100644 index 000000000..ba22d98bf Binary files /dev/null and b/audio/skill/mouzhi1.mp3 differ diff --git a/audio/skill/mouzhi2.mp3 b/audio/skill/mouzhi2.mp3 new file mode 100644 index 000000000..352ee0459 Binary files /dev/null and b/audio/skill/mouzhi2.mp3 differ diff --git a/audio/skill/xiying1.mp3 b/audio/skill/xiying1.mp3 new file mode 100644 index 000000000..249d57f69 Binary files /dev/null and b/audio/skill/xiying1.mp3 differ diff --git a/audio/skill/xiying2.mp3 b/audio/skill/xiying2.mp3 new file mode 100644 index 000000000..7733d51f7 Binary files /dev/null and b/audio/skill/xiying2.mp3 differ diff --git a/audio/skill/yuanlve1.mp3 b/audio/skill/yuanlve1.mp3 new file mode 100644 index 000000000..d05a0a2c5 Binary files /dev/null and b/audio/skill/yuanlve1.mp3 differ diff --git a/audio/skill/yuanlve2.mp3 b/audio/skill/yuanlve2.mp3 new file mode 100644 index 000000000..d05beb784 Binary files /dev/null and b/audio/skill/yuanlve2.mp3 differ diff --git a/character/diy.js b/character/diy.js index 54cd977ec..a0ba1aa81 100755 --- a/character/diy.js +++ b/character/diy.js @@ -25,6 +25,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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']], + key_saya:['female','key',3,['saya_shouji','saya_powei']], + key_harukakanata:['female','key',3,['haruka_shuangche']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_hanlong:['male','wei',4,['siji','ciqiu']], diy_feishi:['male','shu',3,['shuaiyan','moshou']], @@ -101,7 +103,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","key_yoshino","key_yui","key_tsumugi"], + 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","key_saya","key_harukakanata"], }, }, characterIntro:{ @@ -116,6 +118,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', }, characterTitle:{ + key_saya:'#bLittle Busters!', + key_harukakanata:'#bLittle Busters!', key_tsumugi:'#bSummer Pockets', key_yui:'#rAngel Beats!', key_yoshino:'#bRewrite', @@ -168,6 +172,233 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuji:['zuoci'] }, skill:{ + saya_powei:{ + trigger:{player:'phaseAfter'}, + direct:true, + locked:true, + limited:true, + unique:true, + skillAnimation:true, + animationColor:'metal', + filter:function(event,player){ + return event.type!='saya_powei'&&game.hasPlayer(function(current){ + return current.hp>player.hp; + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('saya_powei'),function(card,saya,kyousuke){ + return kyousuke.hp>saya.hp; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('saya_powei',target); + player.awakenSkill('saya_powei'); + game.delay(3); + var next=game.createEvent('saya_powei_loop',false,trigger); + next.playertrue=player; + next.playerfalse=target; + next.setContent(lib.skill.saya_powei.content2); + } + }, + content2:function(){ + 'step 0' + event.count=0; + event.stat=true; + event.current=event['player'+event.stat]; + game.countPlayer2(function(current){ + if(current!=event.playertrue&¤t!=event.playerfalse) current.addSkill('saya_nodis'); + }); + event.playertrue.addSkill('saya_judge'); + 'step 1' + event.count++; + event.current.phase().set('type','saya_powei'); + 'step 2' + if(event.count==9||event.playertrue.isDead()||event.playerfalse.isDead()){ + game.countPlayer2(function(current){ + current.removeSkill('saya_nodis'); + current.removeSkill('saya_judge'); + }); + } + else{ + event.stat=!event.stat; + event.current=event['player'+event.stat]; + event.goto(1); + } + } + }, + saya_nodis:{ + group:'undist', + mark:true, + intro:{content:'不计入距离和座次的计算'}, + }, + saya_judge:{ + trigger:{player:'phaseBegin'}, + forced:true, + popup:false, + filter:function(event,player){ + return event.type=='saya_powei'&&player==event.getParent().playertrue; + }, + content:function(){ + 'step 0' + player.judge(function(card){ + return get.color(card)=='red'?5:0; + }); + 'step 1' + if(result.bool){ + player.line(trigger.getParent().playerfalse); + trigger.getParent().playerfalse.damage(); + } + }, + }, + saya_shouji:{ + trigger:{player:'useCardAfter'}, + filter:function(event,player){ + return !player.getStat('skill').saya_shouji&&event.cards.filterInD().length>0; + }, + direct:true, + content:function(){ + 'step 0' + var goon=function(){ + var num=0; + var cards=trigger.cards.filterInD(); + for(var i=0;inum; + })==0; + }(); + player.chooseTarget(get.prompt2('saya_shouji'),lib.filter.notMe).set('ai',function(target){ + if(!_status.event.goon) return 0; + var player=_status.event.player; + var cards=_status.event.getTrigger().cards.filterInD(); + var att=get.attitude(player,target); + var num=0; + for(var i=0;i0&&!player.hasSkill('haruka_kanata'); + }, + chooseButton:{ + dialog:function(event,player){ + var list=[]; + for(var i=0;i0) return 0; + if(button.link[2]=='wugu') return 0; + var effect=player.getUseValue(button.link[2]); + if(effect>0) return effect; + return 0; + }, + backup:function(links,player){ + return { + filterCard:true, + audio:'haruka_shuangche', + selectCard:-1, + filterCard:function(){return false}, + popname:true, + check:function(card){ + return 6-get.value(card); + }, + position:'he', + viewAs:{name:links[0][2],nature:links[0][3],isCard:true}, + } + }, + prompt:function(links,player){ + return '请选择'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'的目标'; + } + }, + ai:{ + order:4, + result:{ + player:function(player){ + var cards=player.getCards('he').sort(function(a,b){ + return get.value(a)-get.value(b); + }); + var num=(player.getStat('skill').haruka_shuangche||0); + if(cards.length>num){ + var val=0; + for(var i=0;i0) return 0; if(att==0) return 0.1; var eff=0; var hs=player.getCards('h'); @@ -1174,6 +1406,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, yuri_xingdong:{ + group:'yuri_xingdong_gain', subSkill:{ mark:{ mark:true, @@ -1182,9 +1415,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:'跳过下个回合的判定阶段和摸牌阶段', }, }, + gain:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + content:function(){ + 'step 0' + var card=get.cardPile(function(card){ + return card.name=='sha'||get.type(card)=='trick'; + }); + if(card) player.gain(card,'gain2','log'); + 'step 1' + game.updateRoundNumber(); + }, + }, }, enable:'phaseUse', usable:1, + locked:true, filter:function(event,player){ return player.countCards('h',lib.skill.yuri_xingdong.filterCard); }, @@ -6159,6 +6406,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_yoshino:'吉野晴彦', key_yui:'ユイ', key_tsumugi:'紬文德斯', + key_saya:'朱鹭户沙耶', + key_harukakanata:'三枝二木', lucia_duqu:'毒躯', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。
②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -6168,7 +6417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_huanjie:'幻界', key_huanjie_info:'锁定技,当你进行判定或摸牌时,你改为从牌堆的另一端获取相应的牌。', yuri_xingdong:'行动', - yuri_xingdong_info:'出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。', + yuri_xingdong_info:'锁定技,出牌阶段开始时,你获得一张【杀】或普通锦囊牌。出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。', yuri_wangxi:'忘隙', yuri_wangxi_info:'主公技,限定技,当有角色因你发动的【行动】而死亡后,若其身份不为【明忠】,则其可以将身份改为忠臣并重新加入游戏,然后将势力改为与你相同,将体力值回复至2点并摸一张牌。', haruko_haofang:'豪放', @@ -6230,6 +6479,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tsumugi_huilang2:'回廊', tsumugi_huilang_info:'回合结束时,不可以将任意张牌扣置于武将牌下(均称为「隐」)。回合开始时,你获得所有「隐」,然后可令等量的角色各摸一张牌。', //〖回廊〗涉及的所有卡牌移动的结算不会触发〖良姻〗 + haruka_shuangche:'双掣', + kanata_shuangche:'双掣', + haruka_shuangche_backup:'双掣', + haruka_shuangche_info:'出牌阶段,你可以将一张牌当做任意基本牌或锦囊牌使用。此牌结算完成后,你选择一项:1.弃置X张牌。2.失去1点体力且本回合内不能再发动〖双掣〗。', + saya_shouji:'授计', + saya_shouji_info:'每回合限一次,当你使用的牌结算完成后,你可以将此牌对应的所有实体牌交给一名其他角色。其可以使用这些牌中的一张,若如此做,你摸一张牌。', + saya_powei:'破围', + saya_powei_info:'限定技,回合结束后,你可以选择一名体力值大于你的其他角色。你与其交替进行额外回合,直到你与其中的一名角色死亡或进行到九个回合。你于回合开始时进行判定,若结果为红色,则你对其造成1点伤害。此过程中其他角色不计入距离和座次计算。', + saya_judge:'破围', + saya_nodis:'破围', + //〖破围〗不会因为〖铁骑〗无效 ns_zhangwei:'张葳', nsqiyue:'骑钺', diff --git a/character/extra.js b/character/extra.js index ac9399b9a..e04689c48 100755 --- a/character/extra.js +++ b/character/extra.js @@ -847,10 +847,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wushen:{ mod:{ cardname:function(card,player,name){ - if(get.position(card)=='h'&&get.suit(card)=='heart') return 'sha'; + if(get.suit(card)=='heart') return 'sha'; }, cardnature:function(card,player){ - if(get.position(card)=='h'&&get.suit(card)=='heart') return false; + if(get.suit(card)=='heart') return false; }, targetInRange:function(card){ if(get.suit(card)=='heart') return true; diff --git a/character/mobile.js b/character/mobile.js index 8f08d6d07..ca3945ad8 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -2004,7 +2004,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ player.loseHp(); - switch(get.type(cards[0],'trick')){ + switch(get.type(cards[0],'trick',cards[0].original=='h'?player:false)){ case 'basic':player.addTempSkill('xinzhanyi_basic');break; case 'equip':player.addTempSkill('xinzhanyi_equip');break; case 'trick':player.addTempSkill('xinzhanyi_trick');player.draw(3);break; diff --git a/character/refresh.js b/character/refresh.js index 6c0df032a..8b453b20c 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -370,7 +370,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 0" player.chooseToCompare(target); "step 1" - if(result.player&&(result.player.name=='sha'||player.hasSkill('rejinjiu')&&result.player.name=='jiu')) player.addTempSkill('rexianzhen4'); + if(result.player&&get.name(result.player.name,player)=='sha') player.addTempSkill('rexianzhen4'); if(result.bool){ player.storage[event.name]=target; player.addTempSkill(event.name+2); @@ -2634,7 +2634,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var cards=result.cards; var type=[]; for(var i=0;i0){ event.cards.push(result.card); - if(lib.config.autoskilllist.contains('reluoshen')){ - player.chooseBool('是否再次发动【洛神】?'); - } - else{ - event._result={bool:true}; - } + player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','reluoshen'); } else{ for(var i=0;i0; + }, + content:function(){ + 'step 0' + var list=game.filterPlayer(function(current){ + return current!=player; + }); + list.sortBySeat(); + event.targets=list; + player.chooseToDiscard(get.prompt2('xiying'),'he').set('logSkill',['xiying',list]).set('ai',function(card){ + return _status.event.val-get.value(card) + }).set('val',function(){ + return 4*Math.sqrt(game.countPlayer(function(current){ + return get.attitude(player,current)<0&¤t.countCards('he')>0; + })); + }()); + 'step 1' + if(!result.bool) event.finish(); + 'step 2' + var target=targets.shift(); + event.target=target; + if(target.isAlive()) target.chooseToDiscard('he','弃置一张牌,或本回合内不能使用或打出手牌').set('ai',function(card){ + var player=_status.event.player; + var source=_status.event.getTrigger().player; + if(get.attitude(source,player)>0) return -1; + if(_status.event.getRand()>0.5) return 5-get.value(card); + return -1; + }); + 'step 3' + if(target.isAlive()&&!result.bool) target.addTempSkill('xiying2'); + if(targets.length) event.goto(2); + }, + }, + xiying2:{ + mark:true, + intro:{content:'本回合内不能使用或打出牌'}, + mod:{ + cardEnabled:function(){return false}, + cardRespondable:function(){return false}, + cardSavable:function(){return false}, + }, + }, + gangzhi:{ + audio:2, + trigger:{player:'damageBefore'}, + forced:true, + content:function(){ + trigger.cancel(); + player.loseHp(trigger.num); + }, + }, + beizhan:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + audio:2, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('beizhan')).set('ai',function(target){ + var player=_status.event.player; + var att=get.attitude(player,target); + var hs=target.countCards('h'); + var ht=target.maxHp; + if(hs>=ht&&target.isMaxHandcard()) return -att*hs; + if(hsht; + })) return att*2*(ht-hs); + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('beizhan',target); + target.drawTo(Math.min(5,target.maxHp)) + target.addSkill('beizhan2'); + } + }, + }, + beizhan2:{ + trigger:{player:'phaseBegin'}, + silent:true, + firstDo:true, + content:function(){ + player.removeSkill('beizhan2'); + if(player.isMaxHandcard()) player.addTempSkill('zishou2'); + }, + mark:true, + intro:{content:'回合开始时,若手牌数为全场最多,则回合内不能使用牌指定其他角色为目标'}, + }, + fenglve:{ + audio:2, + trigger:{ + player:"phaseUseBegin", + }, + direct:true, + content:function (){ + 'step 0' + var goon=player.hasCard(function(card){ + if(get.position(card)!="h") return false; + var val=get.value(card); + if(val<0) return true; + if(val<=5){ + return card.number>=12; + } + if(val<=6){ + return card.number>=13; + } + return false; + }); + player.chooseTarget(get.prompt2('fenglve'),function(card,player,target){ + return player.canCompare(target); + }).set('ai',function(target){ + if(!_status.event.goon) return 0; + return -get.attitude(player,target)*(1+target.countCards('e'))/(1+target.countCards('j')); + }).set('goon',goon); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('fenglve',target); + player.chooseToCompare(target); + } + else{ + event.finish(); + } + 'step 2' + if(result.bool){ + var num=0; + if(target.countCards('h')) num++; + if(target.countCards('e')) num++; + if(target.countCards('j')) num++; + if(num){ + event.gainner=player; + event.giver=target; + target.choosePlayerCard(target,num,'hej',true).set('filterButton',function(button){ + for(var i=0;i0; + }, + filter:function(event,player){ + return event.getParent().name=='fenglve'&&get.position(event.card1,true)=='o'; + }, + prompt:function(event){ + return '是否令'+get.translation(event.target)+'获得'+get.translation(event.card1)+'?' + }, + logTarget:'target', + content:function(){ + trigger.target.gain(trigger.card1,'gain2','log'); + }, + }, + mouzhi:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('h')>0 + }, + filterCard:true, + filterTarget:function(card,player,target){ + //if(target.storage.mouzhi2&&target.storage.mouzhi2.contains(player)) return false; + return target!=player; + }, + delay:0, + lose:false, + discard:false, + check:function(card){ + if(card.name=='du') return 20; + var player=_status.event.player; + var useval=player.getUseValue(card); + var maxval=0; + game.countPlayer(function(current){ + if(current!=player&&!current.hasSkillTag('nogain')&&get.attitude(player,current)>0){ + var temp=current.getUseValue(card); + if(temp>maxval) maxval=temp; + } + }); + if(maxval>0&&get.tag(card,'damage')) return 15; + if(maxval>useval) return 10; + if(player.needsToDiscard()) return 1/Math.max(0.1,get.value(card)); + return -1; + }, + content:function(){ + target.gain(cards,player,'giveAuto'); + target.addTempSkill('mouzhi2',{player:'phaseEnd'}); + target.storage.mouzhi2.add(player); + target.storage.mouzhi2.sortBySeat(target); + target.markSkill('mouzhi2'); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(ui.selected.cards.length){ + var card=ui.selected.cards[0]; + if(card.name=='du') return target.hasSkill('lucia_duqu')?1:-1; + var t=target.getUseValue(card); + var p=player.getUseValue(card); + if(t>p) return 2; + if(t>0) return 1.5 + if(player.needsToDiscard()) return 1; + return 0; + } + return 0; + }, + }, + }, + }, + mouzhi2:{ + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + onremove:true, + trigger:{source:'damageSource'}, + forced:true, + intro:{ + content:'出牌阶段内第一次对一名其他角色造成伤害时,$摸一张牌', + }, + filter:function(event,player){ + var evt2=event.getParent('phaseUse'); + if(!evt2||evt2.player!=player) return false; + var history=event.player.getHistory('damage',function(evt){ + return evt.source==player&&evt.getParent('phaseUse')==evt2; + }); + return history[0]==event; + }, + content:function(){ + 'step 0' + game.asyncDraw(player.storage.mouzhi2); + 'step 1' + game.delay(); + }, + }, + yuanlve:{ + enable:'phaseUse', + usable:1, + audio:2, + filter:function(event,player){ + return player.countCards('h',function(card){ + return get.type(card)!='equip'; + }) + }, + filterCard:function(card){ + return get.type(card)!='equip'; + }, + filterTarget:lib.filter.notMe, + delay:false, + discard:false, + lose:false, + check:function(card){ + if(card.name=='du') return 20; + var player=_status.event.player; + var useval=player.getUseValue(card); + var maxval=0; + game.countPlayer(function(current){ + if(current!=player&&!current.hasSkillTag('nogain')&&get.attitude(player,current)>0){ + var temp=current.getUseValue(card); + if(temp>maxval) maxval=temp; + } + }); + if(maxval>useval) return 15; + if(maxval>0) return 10; + if(player.needsToDiscard()) return 1/Math.max(0.1,get.value(card)); + return -1; + }, + content:function(){ + 'step 0' + target.gain(cards,player,'giveAuto'); + 'step 1' + target.chooseUseTarget(cards[0]); + 'step 2' + if(result.bool) player.draw(); + }, + ai:{ + order:10, + result:{ + target:function(player,target){ + if(ui.selected.cards.length){ + var card=ui.selected.cards[0]; + if(card.name=='du') return target.hasSkill('lucia_duqu')?1:-1; + var t=target.getUseValue(card); + var p=player.getUseValue(card); + if(t>p) return 2; + if(t>0) return 1.5 + if(player.needsToDiscard()) return 1; + return 0; + } + return 0; + }, + }, + }, + }, //孙邵 bizheng:{ trigger:{player:'phaseDrawEnd'}, @@ -697,9 +1022,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(get.position(card)=='e') return lib.filter.cardDiscardable.apply(this,arguments); return true; }); - next.set('logSkill',['spmingjian',trigger.player]); + //next.set('logSkill',['spmingjian',trigger.player]); 'step 1' if(result.bool){ + player.logSkill('spmingjian',trigger.player); var card=result.cards[0]; event.card=card; if(get.position(card)=='e') event._result={index:0}; @@ -2489,22 +2815,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinlvli:{ audio:'lvli', trigger:{player:'damageEnd',source:'damageSource'}, - filter:function(event,player){ + filter:function(event,player,name){ + var stat=player.getStat().skill; + if(!stat.xinlvli) stat.xinlvli=0; + if(name=='damageEnd'&&!player.storage.beishui) return false; + if(stat.xinlvli>1) return false; + if(stat.xinlvli>0&&(player!=_status.currentPhase||!player.storage.choujue)) return false; if(player.hp==player.countCards('h')) return false; if(player.hp1) return false; - if(player.storage.lvli>0&&(player!=_status.currentPhase||!player.storage.choujue)) return false; return true; }, content:function(){ - 'step 0' - player.storage.lvli++; + var stat=player.getStat().skill; + stat.xinlvli++; var num=player.hp-player.countCards('h'); if(num>0) player.draw(num); else player.recover(-num); }, - group:'lvli3', + //group:'lvli3', }, lvli:{ audio:2, @@ -3949,7 +4277,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var bool=true; if(result.cards){ for(var i=0;i0){ event.cards.push(result.card); - if(lib.config.autoskilllist.contains('luoshen')){ - player.chooseBool('是否再次发动【洛神】?'); - } - else{ - event._result={bool:true}; - } + player.chooseBool('是否再次发动【洛神】?').set('frequentSkill','luoshen'); } else{ for(var i=0;icurrent.hp; }); }, direct:true, - content:function (){ + content:function(){ 'step 0' player.chooseTarget(get.prompt2('zhenjun'),function(card,player,target){ return target.countCards('h')>target.hp; @@ -1451,7 +1451,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.num=0; event.num2=result.cards.length; for(var i=0;i0; }).set('ai',function(target){ @@ -9462,7 +9463,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(event.type!='discard') return false; if(event.player==player) return false; for(var i=0;i0){ + if(target.getHistory('damage').length>0){ return [1,-2]; } else{ diff --git a/game/asset.js b/game/asset.js index 2330c00c3..e22a340db 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.98.6', + 'v1.9.98.7', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -554,6 +554,10 @@ window.noname_asset_list=[ 'audio/die/chendeng.mp3', 'audio/die/yangbiao.mp3', 'audio/die/ol_pangtong.mp3', + 'audio/die/gaolan.mp3', + 'audio/die/sp_shenpei.mp3', + 'audio/die/sp_zhanghe.mp3', + 'audio/die/xunchen.mp3', 'audio/skill/anguo1.mp3', 'audio/skill/anguo2.mp3', @@ -2426,7 +2430,18 @@ window.noname_asset_list=[ 'audio/skill/tsumugi_mugyu4.mp3', 'audio/skill/tsumugi_mugyu5.mp3', 'audio/skill/xinlianhuan_ol_pangtong1.mp3', - 'audio/skill/xinlianhuan_ol_pangtong2.mp3', + 'audio/skill/xinlianhuan_ol_pangtong2.mp3','audio/skill/beizhan1.mp3', + 'audio/skill/beizhan2.mp3', + 'audio/skill/fenglve1.mp3', + 'audio/skill/fenglve2.mp3', + 'audio/skill/gangzhi1.mp3', + 'audio/skill/gangzhi2.mp3', + 'audio/skill/mouzhi1.mp3', + 'audio/skill/mouzhi2.mp3', + 'audio/skill/xiying1.mp3', + 'audio/skill/xiying2.mp3', + 'audio/skill/yuanlve1.mp3', + 'audio/skill/yuanlve2.mp3', 'font/huangcao.ttf', 'font/shousha.ttf', @@ -2938,7 +2953,12 @@ window.noname_asset_list=[ 'image/character/ol_pangtong.jpg', 'image/character/key_yui.jpg', 'image/character/key_tsumugi.jpg', - 'image/character/key_yoshino.jpg', + 'image/character/key_yoshino.jpg','image/character/gaolan.jpg', + 'image/character/key_harukakanata.jpg', + 'image/character/key_saya.jpg', + 'image/character/sp_shenpei.jpg', + 'image/character/sp_zhanghe.jpg', + 'image/character/xunchen.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index c1d494787..8ef05ab3b 100644 --- a/game/game.js +++ b/game/game.js @@ -11203,7 +11203,7 @@ }); player.phaseDiscard() if(!player.noPhaseDelay) game.delayx(); - delete player.using; + //delete player.using; delete player._noSkill; "step 5" player.phaseJieshu(); @@ -11310,7 +11310,7 @@ delete ui.tempnowuxie; } }); - delete player.using; + //delete player.using; }, phaseDiscard:function(){ "step 0" @@ -13483,7 +13483,7 @@ } } if(directDiscard.length) game.cardsGotoOrdering(directDiscard); - player.using=cards; + //player.using=cards; var cardaudio=true; if(event.skill){ if(lib.skill[event.skill].audio){ @@ -13888,7 +13888,7 @@ if(event._result){ event.result=event._result; } - delete player.using; + //delete player.using; if(document.getElementsByClassName('thrown').length){ if(event.delayx!==false) game.delayx(); } @@ -24183,6 +24183,7 @@ var outrange=info.outrange; if(range==undefined&&outrange==undefined) return true; + if(player.hasSkill('undist')||target.hasSkill('undist')) return false; for(var i in range){ if(i=='attack'){ if(player.inRange(target)) return true; @@ -32195,6 +32196,7 @@ if(card.ai.basic.equipValue==undefined) card.ai.basic.equipValue=1; } if(card.ai.basic.value==undefined) card.ai.basic.value=function(card,player,index,method){ + if(player.isDisabled(get.subtype(card))) return 0.1; var value=0; var info=get.info(card); var current=player.getEquip(info.subtype); @@ -45527,8 +45529,8 @@ event.result.skill=event.skill; event.result.card=get.copy(get.info(event.skill).viewAs); if(event.result.cards.length==1&&event.result.card){ - event.result.card.suit=event.result.cards[0].suit; - event.result.card.number=event.result.cards[0].number; + event.result.card.suit=get.suit(event.result.cards[0]); + event.result.card.number=get.number(event.result.cards[0]); } if(event.skillDialog&&get.objtype(event.skillDialog)=='div'){ event.skillDialog.close(); @@ -48272,16 +48274,16 @@ if(Object.prototype.toString.call(obj) === '[object HTMLTableCellElement]') return 'td'; if(Object.prototype.toString.call(obj) === '[object HTMLBodyElement]') return 'td'; }, - type:function(obj,method){ + type:function(obj,method,player){ if(typeof obj=='string') obj={name:obj}; if(typeof obj!='object') return; - var name=get.name(obj); + var name=get.name(obj,player); if(!lib.card[name]) return; if(method=='trick'&&lib.card[name].type=='delay') return 'trick'; return lib.card[name].type; }, - type2:function(card){ - return get.type(card,'trick'); + type2:function(card,player){ + return get.type(card,'trick',player); }, subtype:function(obj){ if(typeof obj=='string') obj={name:obj}; @@ -48290,22 +48292,22 @@ return lib.card[obj.name].subtype; }, equiptype:function(card){ - var subtype=get.subtype(card); + var subtype=get.subtype(card,player); if(subtype.indexOf('equip')==0) return parseInt(subtype[5]); return 0; }, - name:function(card,mod){ - if(mod!==false&&!['e','j'].contains(get.position(card))){ - var owner=get.owner(card); + name:function(card,player){ + if(get.itemtype(player)=='player'||(player!==false&&get.position(card)=='h')){ + var owner=player||get.owner(card); if(owner){ return game.checkMod(card,owner,card.name,'cardname',owner); } } return card.name; }, - suit:function(card){ + suit:function(card,player){ if(get.itemtype(card)=='cards'){ - if(card.length==1) return get.suit(card[0]); + if(card.length==1) return get.suit(card[0],player); return 'none'; //var suit=get.suit(card[0]) //for(var i=1;i1;} - return true; + if(name=='damageBegin4'){return event.num&&event.num>1;} + return game.hasPlayer(function(target){ + return player!=target&&get.distance(player,target)<=1; + }); }, content:function(){ var name=event.triggername; @@ -2647,7 +2649,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } else{ game.countPlayer(function(target){ - if(player!=target&&get.distance(target,player)<=1){ + if(player!=target&&get.distance(player,target)<=1){ target.damage(1,player,'fire'); } }); @@ -9326,7 +9328,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ //地藏王: "boss_dizangwang":"地藏王", "boss_bufo":"不佛", - "boss_bufo_info":"锁定技,你的回合开始时,你对所有至你距离为1的其他角色造成1点火焰伤害;你受到大于等于2的伤害时,令此伤害-1。", + "boss_bufo_info":"锁定技,你的回合开始时,你对所有距离为1的其他角色造成1点火焰伤害;你受到大于等于2的伤害时,令此伤害-1。", "boss_wuliang":"无量", "boss_wuliang_info":"锁定技,你登场时额外摸3张牌;结束阶段开始时,你摸两张牌;你的回合开始时,若你当前体力小于3,则回复至3。", "boss_dayuan":"大愿",