diff --git a/card/extra.js b/card/extra.js index 5b1df0eb7..778863865 100644 --- a/card/extra.js +++ b/card/extra.js @@ -408,12 +408,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){ subtype:'equip2', loseDelay:false, onLose:function(){ - if(player.isDamaged()) player.logSkill('baiyin_skill'); var next=game.createEvent('baiyin_recover'); event.next.remove(next); - event.getParent().after.push(next); + var evt=event.getParent(); + if(evt.getlx===false) evt=evt.getParent(); + evt.after.push(next); next.player=player; next.setContent(function(){ + if(player.isDamaged()) player.logSkill('baiyin_skill'); player.recover(); }); }, diff --git a/card/guozhan.js b/card/guozhan.js index 81f0d01ea..1525d35a2 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -129,11 +129,22 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } }, filterLose:function(card,player){ - if(player.hasSkillTag('unequip2')) return false; - return true; + if(player.hasSkillTag('unequip2')) return false; + return true; }, + loseDelay:false, onLose:function(){ + var next=game.createEvent('taipingyaoshu'); + event.next.remove(next); + var evt=event.getParent(); + if(evt.getlx===false) evt=evt.getParent(); + evt.after.push(next); + next.player=player; + next.setContent(lib.card.taipingyaoshu.onLosex); + }, + onLosex:function(){ 'step 0' + player.logSkill('taipingyaoshu'); player.draw(2); 'step 1' if(player.hp>1) player.loseHp(); diff --git a/card/standard.js b/card/standard.js index cce6bc389..60e814597 100644 --- a/card/standard.js +++ b/card/standard.js @@ -1663,7 +1663,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ onremove:true, trigger:{ player:['damage','damageCancelled','damageZero'], - target:['shaMiss','useCardToExcluded'], + target:['shaMiss','useCardToExcluded','shaEnd'], + global:['useCardEnd'], }, charlotte:true, filter:function(event,player){ diff --git a/card/zhulu.js b/card/zhulu.js index 0b2e58d87..f11ed0050 100644 --- a/card/zhulu.js +++ b/card/zhulu.js @@ -319,11 +319,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:lib.filter.notMe, selectTarget:1, toself:false, - onEquip:function(){ - var cards=player.getCards('e',function(cardz){ - return cardz!=card; - }); - if(cards.length) player.discard(cards); + loseThrow:true, + customSwap:function(){ + return true; }, ai:{ order:9, @@ -467,9 +465,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(player.sex!='male') return; var next=game.createEvent('nvzhuang_lose'); event.next.remove(next); - event.getParent().after.push(next); + var evt=event.getParent(); + if(evt.getlx===false) evt=evt.getParent(); + evt.after.push(next); next.player=player; - next.card=card; next.setContent(function(){ if(player.countCards('he')){ player.popup('nvzhuang'); diff --git a/character/diy.js b/character/diy.js index fcd564070..7178d5bf9 100755 --- a/character/diy.js +++ b/character/diy.js @@ -444,6 +444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return ['equip','delay'].contains(get.type(card,false)); }, filterTarget:function(card,player,target){ + if(player==target) return false; var card=ui.selected.cards[0]; if(get.type(card,false)=='delay') return target.canAddJudge({name:card.name}); return target.isEmpty(get.subtype(card,false)); @@ -948,10 +949,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, misuzu_zhongxing:{ - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, direct:true, filter:function(event,player){ - return event.js&&event.js.length>0&&!player.hasSkill('misuzu_zhongxing_haruko'); + var evt=event.getl(player); + return evt&&evt.js&&evt.js.length>0&&!player.hasSkill('misuzu_zhongxing_haruko'); }, content:function(){ 'step 0' @@ -979,16 +985,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, kamome_yangfan:{ trigger:{ - global:'gameDrawAfter', - player:['enterGame','loseAfter'], + player:['loseAfter','enterGame'], + source:'gainAfter', + global:['equipAfter','addJudgeAfter','gameDrawAfter'], }, forced:true, filter:function(event,player){ - if(event.name!='lose') return true; - return event.es&&event.es.length; + if(typeof event.getl!='function') return true; + var evt=event.getl(player); + return evt&&evt.player==player&&evt.es&&evt.es.length; }, content:function(){ - if(trigger.name=='lose') player.draw(2*trigger.es.length); + if(trigger.getl) player.draw(2*trigger.getl(player).es.length); else player.equip(game.createCard2('kamome_suitcase','spade',1)); }, ai:{ @@ -1469,6 +1477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); 'step 1' if(result.control=='cancel2'){event.finish();return;} + player.logSkill('shiorimiyuki_tingxian'); var num=1+result.index; player.draw(num); 'step 2' diff --git a/character/extra.js b/character/extra.js index 0bbab8eb1..7f64d79db 100755 --- a/character/extra.js +++ b/character/extra.js @@ -20,6 +20,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], //key_hina:['female','shen',3,[],['key']], + //shen_diaochan:['female','shen',3,[],['qun']], shen_guanyu:['male','shen',5,['new_wuhun','wushen'],['shu']], shen_zhaoyun:['male','shen',2,['xinjuejing','relonghun'],['shu']], shen_zhugeliang:['male','shen',3,['qixing','kuangfeng','dawu'],['shu']], @@ -3422,6 +3423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ qixian_info:'锁定技,你的手牌上限视为7。', caopi_xingdong:'行动', caopi_xingdong_info:'出牌阶段限一次,你可以将一张【杀】或普通锦囊牌交给一名其他角色,然后该角色选择一项:对除你以外的角色使用此牌并在此牌结算完成后和你各摸一张牌;或跳过下回合的判定阶段和摸牌阶段。', + //shen_diaochan:'神貂蝉', key_kagari:'篝', kagari_zongsi:'纵丝', @@ -3429,7 +3431,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_shiki:'神山识', shiki_omusubi:'御结', shiki_omusubi_info:'一轮游戏开始时,你可以减1点体力上限,然后将一名其他角色武将牌上的技能加入到你的武将牌上。', - //key_hina:'雏', + shiki_omusubi_append:'来吧,羽依里。用你的手,让我变成那只真正的鬼吧!', + //key_hina:'佐藤雏', extra_feng:'神话再临·风', extra_huo:'神话再临·火', diff --git a/character/mobile.js b/character/mobile.js index b21d94cec..697163420 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -12,7 +12,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_standard:["xin_xiahoudun"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian"], mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu"], - mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","old_liuzan"], + mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan"], mobile_trashbin:['old_jiakui'], }, }, @@ -47,7 +47,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ old_bulianshi:['female','wu',3,['anxu','zhuiyi']], miheng:['male','qun',3,['kuangcai','shejian']], taoqian:['male','qun',3,['zhaohuo','yixiang','yirang']], - old_liuzan:['male','wu',4,['fenyin']],lingcao:['male','wu',4,['dujin']], + liuzan:['male','wu',4,['fenyin']],lingcao:['male','wu',4,['dujin']], sunru:['female','wu',3,['yingjian','shixin']], lifeng:['male','shu',3,['tunchu','shuliang']], zhuling:['male','wei',4,['xinzhanyi']], @@ -178,12 +178,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, loseDelay:false, onLose:function(){ - player.logSkill('rw_baiyin_skill'); - var next=game.createEvent('rw_baiyin_recover'); + var next=game.createEvent('rewrite_baiyin_recover'); event.next.remove(next); - event.getParent().after.push(next); + var evt=event.getParent(); + if(evt.getlx===false) evt=evt.getParent(); + evt.after.push(next); next.player=player; next.setContent(function(){ + player.logSkill('rw_baiyin_skill'); player.draw(2); player.recover(); }); @@ -5594,7 +5596,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, translate:{ - old_liuzan:'手杀留赞', + liuzan:'手杀留赞', re_sp_zhugeliang:"手杀卧龙", ly_piliche:'霹雳车', ly_piliche_info:'当你对其他角色造成伤害后,若造成伤害的牌不为延时锦囊牌,你可以弃置其装备区里的防具牌与+1坐骑牌;当你失去此装备时,销毁之。', diff --git a/character/refresh.js b/character/refresh.js index cbaf3a633..c573bd38e 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -1107,7 +1107,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rexuanfeng:{ audio:'xuanfeng', audioname:['boss_lvbu3','re_heqi','re_lingtong'], - trigger:{player:['loseAfter','phaseDiscardEnd']}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, direct:true, filter:function(event,player){ if(!game.hasPlayer(function(current){ @@ -1120,7 +1124,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); return cards.length>1; } - else return event.es&&event.es.length>0; + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0; }, content:function(){ 'step 0' @@ -5727,16 +5732,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, relianying:{ audio:2, - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, direct:true, filter:function(event,player){ if(player.countCards('h')) return false; - return event.hs&&event.hs.length; + var evt=event.getl(player); + return evt&&evt.hs&&evt.hs.length; }, content:function(){ "step 0" - var num=trigger.hs.length; - player.chooseTarget('选择发动连营的目标',[1,num]).ai=function(target){ + var num=trigger.getl(player).hs.length; + player.chooseTarget(get.prompt('relianying'),'令至多'+get.cnNumber(num)+'名角色各摸一张牌',[1,num]).ai=function(target){ var player=_status.event.player; if(player==target) return get.attitude(player,target)+10; return get.attitude(player,target); diff --git a/character/shenhua.js b/character/shenhua.js index ff659ea8e..fa4161dcb 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -3148,11 +3148,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tuntian:{ audio:2, audioname:['gz_dengai'], - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, frequent:true, filter:function(event,player){ if(player==_status.currentPhase) return false; - return event.cards2&&event.cards2.length>0; + var evt=event.getl(player); + return evt&&evt.cards2&&evt.cards2.length>0; }, content:function(){ 'step 0' @@ -4912,9 +4917,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, weimu:{ - trigger:{global:'useCard'}, + trigger:{global:'useCard1'}, audio:2, forced:true, + firstDo:true, filter:function (event,player,card){ if(get.color(event.card)!='black') return false; return event.card.name=='nanman'&&player!=event.player||event.card.name=='wanjian'&&player!=event.player||event.card.name=='taoyuan'&&player.hp1; - return event.cards2&&event.cards2.length>1; + if(event.name=='gain'&&event.player==player) return event.cards&&event.cards.length>1; + var evt=event.getl(player); + return evt&&evt.cards2&&evt.cards2.length>1; }, content:function(){ 'step 0' @@ -11314,19 +11321,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audioname:['liushan'] }, shoucheng:{ - trigger:{global:'loseAfter'}, + trigger:{ + global:['equipAfter','addJudgeAfter','loseAfter','gainAfter'], + }, audio:2, - check:function(event,player){ - return get.attitude(player,event.player)>0; - }, + direct:true, filter:function(event,player){ - if(event.player==player||event.player.isDead()||event.player.countCards('h')) return false; - if(_status.currentPhase==event.player) return false; - return event.hs&&event.hs.length>0; + return game.hasPlayer(function(current){ + if(current==_status.currentPhase) return false; + var evt=event.getl(current); + return evt&&evt.hs&&evt.hs.length&¤t.countCards('h')==0; + }); }, - logTarget:'player', content:function(){ - trigger.player.draw(); + "step 0" + event.list=game.filterPlayer(function(current){ + if(current==_status.currentPhase) return false; + var evt=trigger.getl(current); + return evt&&evt.hs&&evt.hs.length; + }).sortBySeat(_status.currentPhase); + "step 1" + var target=event.list.shift(); + event.target=target; + if(target.isAlive()&&target.countCards('h')==0){ + player.chooseBool(get.prompt2('shoucheng',target)).set('ai',function(){ + return get.attitude(_status.event.player,_status.event.getParent().target)>0; + }); + } + else event.goto(3); + "step 2" + if(result.bool){ + player.logSkill(event.name,target); + target.draw(); + } + "step 3" + if(event.list.length) event.goto(1); }, ai:{ threaten:1.3, diff --git a/character/sp2.js b/character/sp2.js index c14e080bd..06c26eca0 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -11,7 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caobuxing:['male','wu',3,['moying','juanhui'],[]], //sp_zhangliao:['male','qun',4,['mubing','diaoling']], re_sunluyu:['female','wu',3,['remeibu','remumu']], - liuzan:['male','wu',4,['refenyin','liji']], + re_liuzan:['male','wu',4,['refenyin','liji']], wenyang:['male','wei',5,['xinlvli','choujue']], wangshuang:['male','wei',8,['spzhuilie']], huaman:['female','shu',3,['hmmanyi','mansi','souying','zhanyuan']], @@ -61,7 +61,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_shengun:["puyuan","guanlu","gexuan","xushao"], sp_baigei:['re_panfeng','xingdaorong','caoxing'], sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou"], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','liuzan','re_sunluyu','caobuxing','ol_xinxianying','ol_yujin','re_maliang'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','re_sunluyu','caobuxing','ol_xinxianying','ol_yujin','re_maliang'], } }, skill:{ @@ -231,14 +231,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, moying:{ audio:2, - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, direct:true, filter:function(event,player){ - return player!=_status.currentPhase&&event.getParent().name!='useCard'&&event.cards2&&event.cards2.length==1&&!player.hasSkill('moying2')&&['equip','trick'].contains(get.type2(event.cards2[0],event.hs.contains(event.cards2[0])?player:false)); + if(player==_status.currentPhase||event.getParent().name=='useCard') return false; + var evt=event.getl(player); + return evt&&evt.cards2&&evt.cards2.length==1&& + ['equip','trick'].contains(get.type2(evt.cards2[0],(evt.type=='discard'&&evt.hs.contains(evt.cards2[0]))?player:false))&& + !player.hasSkill('moying2'); }, content:function(){ "step 0" - var number=trigger.cards2[0].number; + var number=trigger.getl(player).cards2[0].number; var numbers=[number-2,number-1,number,number+1,number+2].filter(function(number){ return number>=1&&number<=13; }); @@ -2594,8 +2602,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:"biaozhao", filter:function (event,player){ if(!player.storage.biaozhao) return false; - var evt=event.getParent(); - if(evt&&(evt.name=='useCard'||evt.name=='respond'||evt.name=='biaozhao2')) return false; var suit=get.suit(player.storage.biaozhao[0]); var num=get.number(player.storage.biaozhao[0]); for(var i=0;i0; + var evt=event.getl(player); + return evt&&evt.player==player&&evt.hs&&evt.hs.length>0; }, content:function(){ player.draw(); @@ -2090,14 +2095,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xiaoji:{ audio:2, audioname:['sp_sunshangxiang','re_sunshangxiang'], - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, frequent:true, filter:function(event,player){ - return event.es&&event.es.length>0; + var evt=event.getl(player); + return evt&&evt.player==player&&evt.es&&evt.es.length>0; }, content:function(){ "step 0" - event.count=trigger.es.length; + event.count=trigger.getl(player).es.length; "step 1" event.count--; player.draw(2); diff --git a/character/tw.js b/character/tw.js index f483cc45a..28852b685 100644 --- a/character/tw.js +++ b/character/tw.js @@ -52,11 +52,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.chooseToUse({ prompt:'请使用得到的一张牌,或者受到来自'+get.translation(player)+'的一点伤害', filterCard:function(card,player,event){ - var cards=_status.event.cards; - if(!cards||get.itemtype(card)!='card'||!cards.contains(card)) return false; + if(get.itemtype(card)!='card'||!cards.contains(card)) return false; return lib.filter.filterCard(card,player,event); }, - cards:event.cards, }); 'step 2' if(result.bool){ @@ -521,10 +519,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - var list=[]; - game.countPlayer(function(current){ - if(current.group!=player.group&¤t.group!='shen') list.add(current.group); - }); + var list=lib.group.filter(function(group){ + return group!=player.group&&game.hasPlayer(function(current){ + return current.group==group; + }); + }) if(!event.renshe) list.push('cancel2'); player.chooseControl(list).set('prompt',event.renshe?'请选择一个势力':get.prompt('chijie')).set('prompt2',event.renshe?'':'将自己的势力变更为场上存在的一个势力').set('',function(){ return list.randomGet(); diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index d09c02aa9..f0babf26b 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -215,28 +215,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){ result:{ target:function (player,target){ var raweffect=function(player,target){ - if(player.countCards('h','sha')){ - return get.effect(target,{name:'sha'},player,target); - } - else{ - var att=get.attitude(player,target); - var nh=target.countCards('h'); - if(att>0){ - if(target.getEquip('baiyin')&&target.isDamaged()&& - get.recoverEffect(target,player,player)>0){ - if(target.hp==1&&!target.hujia) return 1.6; - if(target.hp==2) return 0.01; - return 0; - } - } - var es=target.getCards('e'); - var noe=(es.length==0||target.hasSkillTag('noe')); - var noe2=(es.length==1&&es[0].name=='baiyin'&&target.isDamaged()); - var noh=(nh==0||target.hasSkillTag('noh')); - if(noh&&(noe||noe2)) return 0; - if(att<=0&&!target.countCards('he')) return 1.5; - return -1.5; - } + if(player.countCards('h','sha')){ + return get.effect(target,{name:'sha'},player,target); + } + else{ + var att=get.attitude(player,target); + var nh=target.countCards('h'); + if(att>0){ + if(target.getEquip('baiyin')&&target.isDamaged()&& + get.recoverEffect(target,player,player)>0){ + if(target.hp==1&&!target.hujia) return 1.6; + if(target.hp==2) return 0.01; + return 0; + } + } + var es=target.getCards('e'); + var noe=(es.length==0||target.hasSkillTag('noe')); + var noe2=(es.length==1&&es[0].name=='baiyin'&&target.isDamaged()); + var noh=(nh==0||target.hasSkillTag('noh')); + if(noh&&(noe||noe2)) return 0; + if(att<=0&&!target.countCards('he')) return 1.5; + return -1.5; + } } var num=game.countPlayer(function(current){ return current!=player&¤t.hp==target.hp&&(raweffect(player,current)*get.attitude(player,current))>0 @@ -421,33 +421,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - "qinguo_use":{ - audio:2, - trigger:{ - player:"equipEnd", - }, - filter:function (event,player){ - if(!event.swapped&&player.countCards('e')==player.hp&&player.isDamaged()){ - return true; - }; - return false; - }, - frequent:true, - content:function (){ - player.recover(); - }, - ai:{ - reverseEquip:true, - effect:{ - target:function (card,player,target,current){ - if(get.type(card)=='equip'&&player==target&&player==_status.currentPhase) return [1,3]; - }, - }, - }, - }, "xinfu_qinguo":{ - group:["qinguo_use","qinguo_lose"], + group:"xinfu_qinguo_recover", audio:2, + subfrequent:['recover'], trigger:{ player:"useCardEnd", }, @@ -455,23 +432,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(event.card)=='equip'; }, direct:true, - content:function (){ + content:function(){ player.chooseUseTarget({name:'sha'},get.prompt('xinfu_qinguo'),'视为使用一张【杀】',false).logSkill='qinguo_use'; }, - }, - "qinguo_lose":{ - audio:2, - trigger:{ - player:"loseAfter", - }, - filter:function (event,player){ - if(event.getParent().name=='equip') return false; - if(player.hp!=player.countCards('e')||!player.isDamaged()) return false; - return event.es&&event.es.length>0; - }, - frequent:true, - content:function (){ - player.recover(); + subSkill:{ + recover:{ + audio:'xinfu_qinguo', + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, + prompt:'是否发动【勤国】回复1点体力?', + filter:function (event,player){ + if(player.isHealthy()||player.countCards('e')!=player.hp) return false; + var evt=event.getl(player); + if(event.name=='equip') return !evt||evt.cards.length!=1; + return evt&&evt.es.length; + }, + frequent:true, + content:function(){ + player.recover(); + }, + }, }, }, "xinfu_jijun":{ @@ -930,13 +913,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sub:true, mod:{ ignoredHandcard:function (card,player){ - if(get.suit(card)=='heart'){ - return true; - } - }, + if(get.suit(card)=='heart'){ + return true; + } + }, cardDiscardable:function (card,player,name){ - if(name=='phaseDiscard'&&get.suit(card)=='heart') return false; - }, + if(name=='phaseDiscard'&&get.suit(card)=='heart') return false; + }, }, }, }, @@ -1174,17 +1157,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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); + 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){ @@ -1227,17 +1210,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 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=num) return; + num=num2; + } + if(card.number0) return 0; - var damaged=player.maxHp-player.hp-1; - var ts=player.countCards('h',function(cardx){ - return cardx!=card&&cardx.name=='tao'; - }); - if(ts>0&&ts>damaged) return 0; + if(player.countCards('h',function(cardx){ + return cardx!=card&&cardx.name=='shan'; + })>0) return 0; + var damaged=player.maxHp-player.hp-1; + var ts=player.countCards('h',function(cardx){ + return cardx!=card&&cardx.name=='tao'; + }); + if(ts>0&&ts>damaged) return 0; } if(card.name=='shan') return 15; if(card.name=='tao') return 10; diff --git a/character/yijiang.js b/character/yijiang.js index 92e7c1419..d4180ba88 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -239,13 +239,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, reshangshi:{ audio:'shangshi', - trigger:{player:['loseAfter','changeHp']}, + trigger:{ + player:['loseAfter','changeHp','gainMaxHpAfter','loseMaxHpAfter'], + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, frequent:true, prompt:function(event,player){ return '是否发动【伤逝】将手牌摸至'+get.cnNumber(player.getDamagedHp())+'张?' }, prompt2:false, filter:function(event,player){ + if(event.getl&&!event.getl(player)) return false; return player.countCards('h')1; } - else return event.es&&event.es.length>0; + else{ + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0; + } }, content:function(){ "step 0" diff --git a/game/asset.js b/game/asset.js index d08c6780c..418fbe79f 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.105.2', + 'v1.9.105.3', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -3292,7 +3292,7 @@ window.noname_asset_list=[ 'image/character/key_doruji.jpg', 'image/character/key_riki.jpg', 'image/character/key_yuiko.jpg', - 'image/character/old_liuzan.jpg', + 'image/character/re_liuzan.jpg', 'image/character/re_caozhang.jpg', 'image/character/re_chengpu.jpg', 'image/character/re_guohuai.jpg', diff --git a/game/game.js b/game/game.js index d511849e4..aa02597aa 100644 --- a/game/game.js +++ b/game/game.js @@ -11974,12 +11974,12 @@ event.result.num2[event.iwhile]=event.num2; var str; if(event.num1>event.num2){ - str=get.translation(player.name)+'拼点成功'; + str=get.translation(player)+'拼点成功'; player.popup('胜'); target.popup('负'); } else{ - str=get.translation(player.name)+'拼点失败'; + str=get.translation(player)+'拼点失败'; if(event.num1==event.num2){ player.popup('平'); target.popup('平'); @@ -12139,13 +12139,13 @@ if(event.num1>event.num2){ event.result.bool=true; event.result.winner=player; - str=get.translation(player.name)+'拼点成功'; + str=get.translation(player)+'拼点成功'; player.popup('胜'); target.popup('负'); } else{ event.result.bool=false; - str=get.translation(player.name)+'拼点失败'; + str=get.translation(player)+'拼点失败'; if(event.num1==event.num2){ event.result.tie=true; player.popup('平'); @@ -14447,7 +14447,7 @@ if(cards){ var owner=event.source||get.owner(cards[0]); if(owner){ - var next=owner.lose(cards,ui.special).set('type','gain').set('forceDie',true); + var next=owner.lose(cards,ui.special).set('type','gain').set('forceDie',true).set('getlx',false); if(event.animate=='give'||event.visible==true) next.visible=true; event.relatedLose=next; } @@ -15226,7 +15226,7 @@ equip:function(){ "step 0" var owner=get.owner(card) - if(owner) owner.lose(card,ui.special,'visible').set('type','equip'); + if(owner) owner.lose(card,ui.special,'visible').set('type','equip').set('getlx',false); "step 1" if(event.cancelled){ event.finish(); @@ -15257,9 +15257,16 @@ } player.equiping=true; "step 3" - var current=player.getCards('e',{subtype:get.subtype(card)}); + var info=get.info(card,false); + var current=player.getCards('e',function(card){ + if(info.customSwap) return info.customSwap(card); + return get.subtype(card,false)==info.subtype; + }); if(current.length){ - player.lose(current,false,'visible'); + player.lose(current,false,'visible').set('type','equip').set('getlx',false); + if(info.loseThrow){ + player.$throw(current); + } event.swapped=true; event.redo(); } @@ -15310,7 +15317,7 @@ if(cards){ var owner=get.owner(cards[0]); if(owner){ - owner.lose(cards,'visible'); + event.relatedLose=owner.lose(cards,'visible').set('getlx',false); } } "step 1" @@ -18728,6 +18735,27 @@ } } next.setContent('gain'); + next.getl=function(player){ + var that=this; + var map={ + player:player, + hs:[], + es:[], + js:[], + cards:[], + cards2:[], + }; + player.getHistory('lose',function(evt){ + if(evt.parent==that){ + map.hs.addArray(evt.hs); + map.es.addArray(evt.es); + map.js.addArray(evt.js); + map.cards.addArray(evt.cards); + map.cards2.addArray(evt.cards2); + } + }); + if(map.cards.length>0) return map; + }; return next; }, give:function(cards,target,visible){ @@ -18774,6 +18802,9 @@ next.cards=next.cards.slice(0); } next.setContent('lose'); + next.getl=function(player){ + if(this.getlx!==false&&this.player==player) return this; + }; return next; }, damage:function(){ @@ -19130,6 +19161,28 @@ } next.setContent(lib.element.content.equip); if(get.is.object(next.card)&&next.card.cards) next.card=next.card.cards[0]; + next.cards=[next.card]; + next.getl=function(player){ + var that=this; + var map={ + player:player, + hs:[], + es:[], + js:[], + cards:[], + cards2:[], + }; + player.getHistory('lose',function(evt){ + if(evt.parent==that){ + map.hs.addArray(evt.hs); + map.es.addArray(evt.es); + map.js.addArray(evt.js); + map.cards.addArray(evt.cards); + map.cards2.addArray(evt.cards2); + } + }); + if(map.cards.length>0) return map; + }; return next; }, addJudge:function(card,cards){ @@ -19140,6 +19193,27 @@ if(get.itemtype(next.cards)=='card') next.cards=[next.cards]; next.player=this; next.setContent('addJudge'); + next.getl=function(player){ + var that=this; + var map={ + player:player, + hs:[], + es:[], + js:[], + cards:[], + cards2:[], + }; + player.getHistory('lose',function(evt){ + if(evt.parent==that){ + map.hs.addArray(evt.hs); + map.es.addArray(evt.es); + map.js.addArray(evt.js); + map.cards.addArray(evt.cards); + map.cards2.addArray(evt.cards2); + } + }); + if(map.cards.length>0) return map; + }; return next; }, canAddJudge:function(card){ diff --git a/game/update.js b/game/update.js index 6c5143127..20b84e750 100644 --- a/game/update.js +++ b/game/update.js @@ -1,50 +1,51 @@ window.noname_update={ - version:'1.9.105.2', - update:'1.9.105.1', + version:'1.9.105.3', + update:'1.9.105.2', changeLog:[ - '庆祝《成神之日》开播!联机服务器全新升级!', + '新留赞插画', + 'getl机制', 'bug修复', ], files:[ - //'card/extra.js', + 'card/extra.js', //'card/huanlekapai.js', //'card/sp.js', - //'card/standard.js', + 'card/standard.js', //'card/swd.js', //'card/mtg.js', //'card/gujian.js', - //'card/guozhan.js', + 'card/guozhan.js', //'card/gwent.js', //'card/yunchou.js', //'card/zhenfa.js', - //'card/zhulu.js', - //'character/diy.js', - //'character/extra.js', + 'card/zhulu.js', + 'character/diy.js', + 'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', //'character/hearth.js', - //'character/mobile.js', + 'character/mobile.js', //'character/mtg.js', //'character/old.js', - //'character/refresh.js', - //'character/shenhua.js', + 'character/refresh.js', + 'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/tw.js', - //'character/standard.js', + 'character/tw.js', + 'character/standard.js', //'character/swd.js', //'character/xianjian.js', - //'character/xinghuoliaoyuan.js', - ///'character/yijiang.js', + 'character/xinghuoliaoyuan.js', + 'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', //'layout/default/layout.css', //'layout/nova/layout.css', //'mode/identity.js', //'mode/doudizhu.js', - //'mode/guozhan.js', + 'mode/guozhan.js', //'mode/chess.js', //'mode/tafang.js', //'mode/single.js', @@ -53,8 +54,8 @@ window.noname_update={ //'mode/versus.js', //'mode/boss.js', 'game/game.js', - 'game/keyWords.js', - 'game/server.js', + //'game/keyWords.js', + //'game/server.js', //'game/NoSleep.js', //'game/config.js', //'game/package.js', diff --git a/image/character/re_liuzan.jpg b/image/character/re_liuzan.jpg new file mode 100644 index 000000000..83ced03f4 Binary files /dev/null and b/image/character/re_liuzan.jpg differ diff --git a/mode/guozhan.js b/mode/guozhan.js index d0cb7568f..eac2abc6c 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -829,28 +829,26 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, xindiaodu:{ audio:"diaodu", - global:"xindiaodu_use", - subfrequent:['use'], + group:'xindiaodu_use', subSkill:{ use:{ trigger:{ player:"useCard", }, - popup:false, - frequent:true, - prompt:'是否发动【调度】摸一张牌?', filter:function (event,player){ - return get.type(event.card)=='equip'&&game.hasPlayer(function(current){ - return current.hasSkill('xindiaodu')&¤t.isFriendOf(player); - }); + return get.type(event.card)=='equip'&&event.player.isAlive()&& + event.player.isFriendOf(player)&&(player==event.player||player.hasSkill('xindiaodu')); }, - content:function (){ - var logger=game.findPlayer(function(current){ - return current.isFriendOf(player)&¤t.hasSkill('xindiaodu'); - }); - logger.line(player,'green'); - logger.logSkill('xindiaodu'); - player.draw('nodelay'); + direct:true, + content:function(){ + 'step 0' + var next=trigger.player.chooseBool('是否发动【调度】摸一张牌?'); + if(player.hasSkill('xindiaodu')) next.set('frequentSkill','xindiaodu'); + 'step 1' + if(result.bool){ + player.logSkill('xindiaodu',trigger.player); + trigger.player.draw('nodelay'); + } }, ai:{ reverseEquip:true, @@ -900,7 +898,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } else event.finish(); 'step 2' - if(result.bool){ + if(result.bool&&player.getCards('h').contains(result.cards[0])){ event.card=result.cards[0]; player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){ return current!=player&¤t!=_status.event.target1&¤t.isFriendOf(player); @@ -4090,10 +4088,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, xuanlve:{ - trigger:{player:'loseAfter'}, + trigger:{ + player:'loseAfter', + source:'gainAfter', + global:['equipAfter','addJudgeAfter'], + }, direct:true, filter:function(event,player){ - return event.es&&event.es.length>0; + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0; }, content:function(){ 'step 0' @@ -5495,13 +5498,35 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ inherit:'shoucheng', audio:'shoucheng', filter:function(event,player){ - if(event.player.isDead()||event.player.countCards('h')) return false; - if(!event.player.isFriendOf(player)) return false; - if(_status.currentPhase==event.player) return false; - for(var i=0;i0; + }); } - return false; + else event.goto(3); + "step 2" + if(result.bool){ + player.logSkill(event.name,target); + target.draw(); + } + "step 3" + if(event.list.length) event.goto(1); }, }, yicheng:{