diff --git a/audio/die/ol_dengzhi.mp3 b/audio/die/ol_dengzhi.mp3 new file mode 100644 index 000000000..4d7201c9f Binary files /dev/null and b/audio/die/ol_dengzhi.mp3 differ diff --git a/audio/die/xin_caozhen.mp3 b/audio/die/xin_caozhen.mp3 new file mode 100644 index 000000000..459a19866 Binary files /dev/null and b/audio/die/xin_caozhen.mp3 differ diff --git a/audio/skill/disordersidi1.mp3 b/audio/skill/disordersidi1.mp3 new file mode 100644 index 000000000..ca2093a77 Binary files /dev/null and b/audio/skill/disordersidi1.mp3 differ diff --git a/audio/skill/disordersidi2.mp3 b/audio/skill/disordersidi2.mp3 new file mode 100644 index 000000000..68279144b Binary files /dev/null and b/audio/skill/disordersidi2.mp3 differ diff --git a/audio/skill/olsujian1.mp3 b/audio/skill/olsujian1.mp3 new file mode 100644 index 000000000..05ba9fda1 Binary files /dev/null and b/audio/skill/olsujian1.mp3 differ diff --git a/audio/skill/olsujian2.mp3 b/audio/skill/olsujian2.mp3 new file mode 100644 index 000000000..4609e8847 Binary files /dev/null and b/audio/skill/olsujian2.mp3 differ diff --git a/audio/skill/olxiuhao1.mp3 b/audio/skill/olxiuhao1.mp3 new file mode 100644 index 000000000..9a1d97163 Binary files /dev/null and b/audio/skill/olxiuhao1.mp3 differ diff --git a/audio/skill/olxiuhao2.mp3 b/audio/skill/olxiuhao2.mp3 new file mode 100644 index 000000000..fc16d1e35 Binary files /dev/null and b/audio/skill/olxiuhao2.mp3 differ diff --git a/card/guozhan.js b/card/guozhan.js index 37c7bc040..cbd9e53ce 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -835,6 +835,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:"equip", subtype:"equip2", skills:['huxinjing'], + filterTarget:function(card,player,target){ + if(get.mode()!='guozhan') return true; + return player==target; + }, + selectTarget:function(){ + return get.mode()=='guozhan'?-1:1; + }, + toself:false, ai:{ basic:{ equipValue:6 @@ -1739,6 +1747,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ target:player, card:event.card })) return false; + if(get.mode()!='guozhan'&&event.num>1) return true; return event.num>=player.hp; }, content:function(){ @@ -1747,20 +1756,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ if(e2){ player.discard(e2); } - } - }, - huxinjing2:{ - equipSkill:true, - trigger:{player:['damageEnd','damageZero']}, - //priority:10, - forced:true, - popup:false, - content:function(){ - var card=player.getEquip('huxinjing'); - if(card){ - player.discard(card); - } - player.removeSkill('huxinjing2'); + player.removeSkill('huxinjing'); } }, wuliu_skill:{ @@ -1886,7 +1882,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){ jingfanma_info:'你的进攻距离+1', huxinjing_bg:'镜', huxinjing:'护心镜', - huxinjing_info:'当你受到伤害时,若伤害值大于或等于你的体力值,则你可以将【护心镜】置入弃牌堆,然后防止此伤害。', + huxinjing_info:'此牌可对其他角色使用。当你受到伤害时,若伤害值大于1或大于等于你的体力值,则你可以将【护心镜】置入弃牌堆,然后防止此伤害。', + huxinjing_info_guozhan:'当你受到伤害时,若伤害值大于或等于你的体力值,则你可以将【护心镜】置入弃牌堆,然后防止此伤害。', gz_haolingtianxia:'号令天下', gz_haolingtianxia_info:'出牌阶段,对一名体力值不为全场最少的角色使用。所有其他角色依次选择一项:①弃置一张牌(魏势力角色无需弃牌),视为对目标角色使用一张【杀】;②弃置目标角色的一张牌(魏势力角色改为获得其一张牌)。', gz_kefuzhongyuan:'克复中原', diff --git a/card/standard.js b/card/standard.js index 22ac0d326..153c0def0 100644 --- a/card/standard.js +++ b/card/standard.js @@ -115,6 +115,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ event.yingbian_addTarget=true; } }, + yingbian_tags:['hit','damage','add'], filterTarget:function(card,player,target){return player!=target}, content:function(){ "step 0" @@ -340,6 +341,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ } return str; }, + yingbian_tags:['gain','draw'], yingbian:function(event){ var bool=false; if(get.cardtag(event.card,'yingbian_damage')){ @@ -829,6 +831,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ cardcolor:'red', reverseOrder:true, yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标', + yingbian_tags:['remove'], yingbian:function(event){ event.yingbian_removeTarget=true; }, @@ -868,6 +871,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ enable:true, selectTarget:-1, yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标', + yingbian_tags:['remove'], yingbian:function(event){ event.yingbian_removeTarget=true; }, @@ -944,6 +948,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ selectTarget:-1, reverseOrder:true, yingbian_prompt:'当你使用此牌选择目标后,你可为此牌减少一个目标', + yingbian_tags:['remove'], yingbian:function(event){ event.yingbian_removeTarget=true; }, @@ -1061,6 +1066,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ type:'trick', enable:true, yingbian_prompt:'你令此牌不可被响应', + yingbian_tags:['hit'], yingbian:function(event){ event.directHit.addArray(game.players); }, @@ -1362,6 +1368,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return target.countDiscardableCards(player,get.is.single()?'he':'hej'); }, yingbian_prompt:'当你使用此牌选择目标后,你可为此牌增加一个目标', + yingbian_tags:['add'], yingbian:function(event){ event.yingbian_addTarget=true; }, @@ -1596,12 +1603,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ expose:0.2 }, notarget:true, + yingbian_tags:['gain','draw'], yingbian_prompt:function(card){ if(!get.cardtag(card,'yingbian_gain')) return '当你声明使用此牌时,你摸一张牌'; return '当此牌生效后,你获得此牌响应的目标牌'; }, yingbian:function(event){ - if(!get.cardtag(event.card,'yingbian_gain')) event.player.draw(); + if(!get.cardtag(event.card,'yingbian_gain')||get.cardtag(event.card,'yingbian_draw')) event.player.draw(); }, contentBefore:function(){ 'step 0' diff --git a/card/yingbian.js b/card/yingbian.js index 93b0bfa64..d9386bcb7 100644 --- a/card/yingbian.js +++ b/card/yingbian.js @@ -16,6 +16,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ filterTarget:function(card,player,target){ return target!=player&&target.countCards('hej')>0; }, + yingbian_tags:['all','hit','add'], yingbian_prompt:function(card){ var str=''; if(get.cardtag(card,'yingbian_all')){ @@ -174,6 +175,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ return target!=player&&target.countCards('h')>0; }, yingbian_prompt:'当你使用此牌选择目标后,你可为此牌增加一个目标', + yingbian_tags:['add'], yingbian:function(event){ event.yingbian_addTarget=true; }, @@ -385,13 +387,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){ equipSkill:true, audio:true, filter:function(event,player){ - return event.card.name=='sha'&&(!event.target.isLinked()||event.target.countCards('h')); + return event.card.name=='sha'&&!event.target.isLinked();//||event.target.countCards('h')); }, logTarget:'target', content:function(){ var target=trigger.target; if(!target.isLinked()) target.link(); - else player.viewHandcards(target); + //else player.viewHandcards(target); }, }, heiguangkai_skill:{ @@ -803,7 +805,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ wuxinghelingshan_info:'当你声明使用不为神属性的属性【杀】时,你可将此【杀】的属性改为不为神属性的其他属性。', wutiesuolian:'乌铁锁链', wutiesuolian_skill:'乌铁锁链', - wutiesuolian_info:'锁定技,当你使用【杀】指定目标后,若其:已横置,你观看其手牌。未横置,其横置。', + wutiesuolian_info:'锁定技,当你使用【杀】指定目标后,若其未横置,则其横置。', heiguangkai:'黑光铠', heiguangkai_skill:'黑光铠', heiguangkai_info:'锁定技,当你成为【杀】或黑色普通锦囊牌的目标后,若此牌的目标数大于1,则你令此牌对你无效。', @@ -866,7 +868,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ ['spade',11,'wuxie'], ['spade',11,'shunshou'], ['spade',11,'tiesuo'], - ['spade',12,'zhujinqiyuan',null,['yingbian_zhuzhan','yingbian_hit']], + ['spade',12,'zhujinqiyuan',null,['yingbian_fujia','yingbian_hit']], ['spade',12,'tiesuo'], ['spade',12,'zhangba'], ['spade',13,'wuxie',null,['yingbian_kongchao','yingbian_draw']], diff --git a/character/extra.js b/character/extra.js index c1f19ad50..6cea803d1 100755 --- a/character/extra.js +++ b/character/extra.js @@ -12,7 +12,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_shan:['shen_zhaoyun','shen_simayi'], extra_yin:['shen_liubei','shen_luxun'], extra_lei:['shen_ganning','shen_zhangliao'], - extra_key:['key_kagari','key_shiki','key_hina'], + extra_key:['key_kagari','key_shiki','db_key_hina'], extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'], extra_mobilezhi:['shen_guojia','shen_xunyu'], extra_mobilexin:['shen_taishici'], @@ -22,7 +22,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ character:{ key_kagari:['female','shen',3,['kagari_zongsi'],['key']], key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], - key_hina:['female','shen',3,['hina_shenxian','hina_mashu','hina_tieji'],['key','hiddenSkill']], + db_key_hina:['female','key',3,['hina_shenshi','hina_xingzhi'],['doublegroup:key:shen']], shen_xunyu:['male','shen',3,['tianzuo','lingce','dinghan'],['wei']], shen_taishici:['male','shen',4,['dulie','tspowei','dangmo'],['wu']], @@ -52,9 +52,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ shen_zhouyu:'字公瑾,庐江舒县人。东汉末年名将。有姿貌、精音律,江东有“曲有误,周郎顾”之语。周瑜少与孙策交好,后孙策遇刺身亡,孙权继任。周瑜将兵赴丧,以中护军的身份与长史张昭共掌众事,建安十三年(208年),周瑜率东吴军与刘备军联合,在赤壁击败曹操。此战也奠定了三分天下的基础。', shen_zhugeliang:'字孔明、号卧龙,汉族,琅琊阳都人,三国时期蜀汉丞相、杰出的政治家、军事家、发明家、文学家。在世时被封为武乡侯,死后追谥忠武侯,后来东晋政权推崇诸葛亮军事才能,特追封他为武兴王。诸葛亮为匡扶蜀汉政权,呕心沥血、鞠躬尽瘁、死而后已。其代表作有《前出师表》、《后出师表》、《诫子书》等。曾发明木牛流马等,并改造连弩,可一弩十矢俱发。于234年在宝鸡五丈原逝世。', }, - characterTitle:{ - //shen_ganning:"体力上限:6", - }, characterReplace:{ shen_zhangliao:['shen_zhangliao','ol_zhangliao'], shen_zhaoyun:['shen_zhaoyun','boss_zhaoyun'], @@ -65,164 +62,234 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ - hina_shenxian:{ - hiddenSkill:true, - trigger:{player:'showCharacterAfter'}, + hina_shenshi:{ + groupSkill:true, + trigger:{player:['phaseUseBegin','phaseUseEnd']}, + frequent:true, + filter:function(event,player){ + return player.group=='shen'; + }, + content:function(){ + 'step 0' + player.draw(2).gaintag=['hina_shenshi']; + player.addSkill('hina_shenshi_yingbian'); + 'step 1' + var cards=player.getCards('h',function(card){ + return card.hasGaintag('hina_shenshi'); + }); + if(!cards.length) event.finish(); + else if(cards.length==1) event._result={bool:true,cards:cards}; + else player.chooseCard('h',true,'将一张“神视”牌置于牌堆顶',function(card){ + return card.hasGaintag('hina_shenshi'); + }); + 'step 2' + if(result.bool){ + game.log(player,'将一张牌置于了牌堆顶'); + player.lose(result.cards,ui.cardPile,'insert'); + player.$throw(1,1000); + } + else event.finish(); + 'step 3' + game.delayx(); + }, + onremove:function(){ + player.removeGaintag('hina_shenshi'); + }, + group:'hina_shenshi_yingbian', + }, + hina_shenshi_yingbian:{ + trigger:{player:'useCard1'}, forced:true, filter:function(event,player){ - return event.toShow.contains('key_hina'); + return event.cards.length==1&&!event.card.yingbian&&player.hasHistory('lose',function(evt){ + if(evt.getParent()!=event) return false; + for(var i in evt.gaintag_map){ + if(evt.gaintag_map[i].contains('hina_shenshi')) return true; + } + return false; + })&&Array.isArray(get.info(event.card).yingbian_tags); }, content:function(){ - player.equip(game.createCard('hina_shenji','diamond',13)); - }, - }, - hina_mashu:{ - mod:{ - globalFrom:function(from,to,distance){ - return distance-1; + if(!trigger.card.yingbian){ + trigger.card.yingbian=true; + var info=get.info(trigger.card); + trigger.card.cardtags=info.yingbian_tags.map(function(i){ + return 'yingbian_'+i; + }); + if(info&&info.yingbian) info.yingbian(trigger); + player.addTempSkill('yingbian_changeTarget'); } }, }, - hina_tieji:{ - shaRelated:true, - trigger:{player:'useCardToPlayered'}, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, + hina_xingzhi:{ + groupSkill:true, + trigger:{player:'useCard1'}, + usable:1, filter:function(event,player){ - return event.card.name=='sha'; - }, - logTarget:'target', - content:function(){ - "step 0" - player.judge(function(){return 0}); - if(!trigger.target.hasSkill('fengyin')){ - trigger.target.addTempSkill('fengyin'); - } - "step 1" - var suit=result.suit; - if(result.suit=='spade'){ - var id=trigger.target.playerid; - var map=trigger.customArgs; - if(!map[id]) map[id]={}; - if(!map[id].extraDamage) map[id].extraDamage=0; - map[id].extraDamage++; - } - var target=trigger.target; - var num=target.countCards('h','shan'); - target.chooseToDiscard('请弃置一张'+get.translation(suit)+'牌,否则不能使用闪抵消此杀','he',function(card){ - return get.suit(card)==_status.event.suit; - }).set('ai',function(card){ - var num=_status.event.num; - if(num==0) return 0; - if(card.name=='shan') return num>1?2:0; - return 8-get.value(card); - }).set('num',num).set('suit',suit); - "step 2" - if(!result.bool){ - trigger.directHit.add(trigger.target); - } - }, - ai:{ - ignoreSkill:true, - skillTagFilter:function(player,tag,arg){ - if(!arg||arg.isLink||!arg.card||arg.card.name!='sha') return false; - if(!arg.target||get.attitude(player,arg.target)>=0) return false; - if(!arg.skill||!lib.skill[arg.skill]||lib.skill[arg.skill].charlotte||get.is.locked(arg.skill)||!arg.target.getSkills(true,false).contains(arg.skill)) return false; - }, - }, - }, - hina_guixin:{ - trigger:{ - player:"phaseZhunbeiBegin", - }, - filter:function(event,player){ - return player.hasSkill('hina_shenxian'); + return player.group=='key'&&!event.card.yingbian&&Array.isArray(get.info(event.card).yingbian_tags); }, content:function(){ - "step 0" - var targets=game.filterPlayer(); - targets.remove(player); - targets.sort(lib.sort.seat); - event.targets=targets; - "step 1" - event.num=0; - player.line(targets,'green'); - player.chooseControl('手牌区','装备区','判定区').set('ai',function(){ - if(game.hasPlayer(function(current){ - return current.countCards('j')&¤t!=player&&get.attitude(player,current)>0; - })) return 2; - return Math.floor(Math.random()*3); - }).set('prompt','请选择优先获得的区域'); - "step 2" - event.range={ - 手牌区:['h','e','j'], - 装备区:['e','h','j'], - 判定区:['j','h','e'], - }[result.control||'手牌区']; - "step 3" - if(num来吧,羽依里。用你的手,让我变成那只真正的鬼吧!', - key_hina:'佐藤雏', - hina_shenxian:'神现', - hina_shenxian_info:'隐匿技,锁定技,当你明置此武将牌时,你将一张【神机】置入装备区。', - hina_mashu:'马术', - hina_mashu_info:'锁定技,你计算于其他角色的距离时始终-1。', - hina_tieji:'铁骑', - hina_tieji_info:'当你使用【杀】指定目标后,你可进行判定。你令目标角色的所有非锁定技失效直到回合结束。除非其弃置一张与判定结果花色相同的牌,则其不能响应此【杀】。若判定结果为♠,则此【杀】对其的伤害+1。', - hina_tieji_append:'她成为神明的那一天,世界走向毁灭。', - - hina_shenji:'神机', - hina_shenji_info:'若你拥有技能〖神现〗,则你可以于准备阶段发动〖归心〗,并可于结束阶段发动〖神愤〗。', - hina_guixin:'归心', - hina_shenfen:'神愤', + db_key_hina:'佐藤雏', + hina_shenshi:'神视', + hina_shenshi_yingbian:'神视', + hina_shenshi_info:'神势力技。出牌阶段开始时/结束时,你可摸两张牌,然后将其中一张牌置于牌堆顶。你以此法获得的牌视为拥有全部应变效果,且可以无条件发动。', + hina_xingzhi:'幸凪', + hina_xingzhi_info:'键势力技。每回合限一次,你可以通过“助战”触发一张牌的全部助战效果,且响应助战的角色摸两张牌。', extra_feng:'神话再临·风', extra_huo:'神话再临·火', diff --git a/character/mobile.js b/character/mobile.js index d72c0904a..cca635a2f 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -575,7 +575,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{player:'useCardAfter'}, direct:true, filter:function(event,player){ - return get.type(event.card,false)!='delay'&&event.targets.length==1&&game.hasPlayer(function(current){ + return get.type(event.card,false)!='delay'&&game.hasPlayer(function(current){ return player!=current&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(current)); }); }, @@ -609,7 +609,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, intro:{ content:function(storage,player){ - if((player==game.me||player.iscardUnderControl())&&!game.observe){ + if((player==game.me||player.isUnderControl())&&!game.observe){ var str='R={ '; for(var i=0;i'); @@ -618,7 +618,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ str+=' }' return str; } - return get.translation(storage); + return '已指定'+get.translation(storage)+'为目标'; }, }, onremove:function(player){ @@ -641,6 +641,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, exec:{ + audio:'disordersidi', trigger:{global:'useCardToPlayered'}, forced:true, locked:false, @@ -808,7 +809,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, fail:{ - trigger:{player:'compareAfter'}, + trigger:{player:'chooseToCompareAfter'}, forced:true, filter:function(event,player){ return event.getParent().name=='rechuhai'&&event.num1<13&&!event.result.bool; @@ -12534,7 +12535,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ relihuo_damage:'疠火', relihuo_baigei:'疠火', relihuo_info:'当你使用普【杀】时,你可以将此杀改为火属性。若如此做,当你因执行此【杀】的效果而对横置角色造成伤害时,此伤害+1;当你使用的火【杀】结算完成后,你失去X点体力(X为你因此【杀】造成的伤害总点数的一半且向下取整)', - dengzhi:'邓芝', + dengzhi:'手杀邓芝', jimeng:'急盟', jimeng_info:'出牌阶段开始时,你可以获得一名其他角色的一张牌,然后交给该角色X张牌(X为你当前体力值)。', shuaiyan:'率言', @@ -12926,7 +12927,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。', xin_caozhen:'手杀曹真', disordersidi:'司敌', - disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用的不为延时锦囊牌的牌结算结束后,你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时,若aRb成立,则你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,并对a造成1点伤害。⒉摸两张牌。', + disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用的不为延时锦囊牌的牌结算结束后,你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时,若aRb成立,则你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,并对a造成1点伤害。⒉摸两张牌。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 40e0ca67f..d4c00ed0d 100644 --- a/character/rank.js +++ b/character/rank.js @@ -33,7 +33,7 @@ window.noname_character_rank={ 'key_yuri', 'key_yui', 'key_lucia', - 'key_hina', + 'db_key_hina', 'sp_key_kanade', 'key_shizuru', 'key_sakuya', @@ -895,6 +895,7 @@ window.noname_character_rank={ 'duosidawang', 're_jiaxu', 'xin_caozhen', + 'ol_dengzhi', ], bm:[ 'diy_xizhenxihong', @@ -1234,7 +1235,7 @@ window.noname_character_rank={ 'key_noda', 'key_shiina', 'key_shiroha', - 'key_hina', + 'db_key_hina', 'key_sakuya', 'key_yuuki', 'key_kyouko', diff --git a/character/refresh.js b/character/refresh.js index ce73dda09..7458868c1 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -326,11 +326,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mod:{ cardEnabled:function(card,player){ var source=_status.currentPhase; - if(card.name=='tao'&&source&&source!=player&&source.hasSkill('rewansha')) return false; + if(card.name=='tao'&&source&&source!=player&&source.hasSkill('rewansha')&&!player.isDying()) return false; }, cardSavable:function(card,player){ var source=_status.currentPhase; - if(card.name=='tao'&&source&&source!=player&&source.hasSkill('rewansha')) return false; + if(card.name=='tao'&&source&&source!=player&&source.hasSkill('rewansha')&&!player.isDying()) return false; }, }, }, diff --git a/character/sp.js b/character/sp.js index ddd8f1903..e8d218b58 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","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","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","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu','huangzu','huangchengyan','gaogan','duxi'], + sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","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","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu','huangzu','huangchengyan','gaogan','duxi','ol_dengzhi'], sp_tongque:["liuxie","lingju","fuwan","sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","sp_mifangfushiren","bianfuren"], @@ -16,6 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, character:{ + ol_dengzhi:['male','shu',3,['olxiuhao','olsujian']], bianfuren:['female','wei',3,['fuwei','yuejian']], duxi:['male','wei',3,['quxi','bixiong']], gaogan:['male','qun',4,['juguan']], @@ -392,6 +393,191 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //邓芝 + olxiuhao:{ + audio:2, + trigger:{ + player:'damageBegin4', + source:'damageBegin2', + }, + usable:1, + filter:function(event,player){ + return event.source&&event.source.isIn()&&event.source!=event.player; + }, + logTarget:function(event,player){ + return player==event.player?event.source:event.player; + }, + check:function(event,player){ + _status.olxiuhao_judging=true; + var bool=false; + if(player==event.source){ + if(get.attitude(player,event.player)>0) bool=true; + if(get.damageEffect(event.player,player,player,event.nature)<=0) bool=true; + } + else{ + if(get.attitude(player,event.source)>0) bool=true; + if(get.damageEffect(player,event.source,player,event.nature)<0){ + if(event.source.hasSkillTag('nogain')) bool=true; + if(event.num>=player.hp+player.countCards('hs',{name:['tao','jiu']})&&(!player.hasFriend()||player==get.zhu(player))) return true; + return false; + } + } + delete _status.olxiuhao_judging; + return bool; + }, + content:function(){ + trigger.cancel(); + trigger.source.draw(2); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(target,player)>0&&(!player.storage.counttrigger||!player.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; + }, + player:function(card,player,target){ + if(!_status.olxiuhao_judging&&get.tag(card,'damage')&&get.attitude(player,target)>0&&(!player.storage.counttrigger||!player.storage.counttrigger.olxiuhao)) return [0,0.5,0,0.5]; + }, + }, + }, + }, + olsujian:{ + trigger:{player:'phaseDiscardBefore'}, + forced:true, + content:function(){ + 'step 0' + trigger.cancel(); + var cards=lib.skill.olsujian.update(player); + if(!cards.length) event.finish(); + else{ + event.cards=cards; + var str=get.translation(cards); + player.chooseControl().set('choiceList',[ + '将'+str+'分配给任意名其他角色', + '弃置'+str+'并弃置一名其他角色至多等量的牌', + ]).set('ai',function(){ + var cards=_status.event.getParent().cards,player=_status.event.player; + if(!game.hasPlayer(function(current){ + return get.attitude + })) return 1; + if(game.hasPlayer(function(current){ + var att=get.attitude(player,current); + return att!=0&¤t.countDiscardableCards(player,'he',function(i){ + if(att>0) return get.value(i,current)>=4; + return get.value(i,current)<=0; + })>=cards.length&&get.effect(current,{name:'guohe_copy2'},player,player)>0; + })) return 1; + return 0; + }); + } + 'step 1' + if(result.index==1){ + cards=event.cards.filter(function(i){ + return lib.filter.cardDiscardable(i,player,'olsujian'); + }); + if(cards.length){ + event.num=cards.length; + player.discard(cards); + } + else event.finish(); + } + else event.goto(4); + 'step 2' + if(game.hasPlayer(function(current){ + return current!=player&¤t.countDiscardableCards(player,'he')>0; + })){ + player.chooseTarget(true,'弃置一名其他角色的至多'+get.cnNumber(num)+'张牌',function(card,player,current){ + return current!=player&¤t.countDiscardableCards(player,'he')>0; + }).set('ai',function(current){ + var att=get.attitude(player,current); + if(current.countDiscardableCards(player,'he',function(i){ + if(att>0) return get.value(i,current)>=4; + return get.value(i,current)<=0; + })>=num) return 4*get.effect(current,{name:'guohe_copy2'},player,player); + return get.effect(current,{name:'guohe_copy2'},player,player); + }); + } + else event.finish(); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + player.discardPlayerCard(target,true,[1,num]); + } + event.finish(); + 'step 4' + if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true}); + event.given_map={}; + 'step 5' + player.chooseCardTarget({ + filterCard:function(card){ + return card.hasGaintag('olsujian'); + }, + filterTarget:lib.filter.notMe, + selectCard:[1,cards.length], + forced:true, + prompt:'请选择要分配的卡牌和目标', + ai1:function(card){ + if(!ui.selected.cards.length) return 1; + return 0; + }, + ai2:function(target){ + var player=_status.event.player,card=ui.selected.cards[0]; + var val=target.getUseValue(card); + if(val>0) return val*get.attitude(player,target)*2; + return get.value(card,target)*get.attitude(player,target); + }, + }); + 'step 6' + if(result.bool){ + var res=result.cards,target=result.targets[0].playerid; + player.removeGaintag('olsujian',res); + player.addGaintag(res,'olsujian_given'); + cards.removeArray(res); + if(!event.given_map[target]) event.given_map[target]=[]; + event.given_map[target].addArray(res); + if(cards.length) event.goto(5); + } + else event.finish(); + 'step 7' + if(_status.connectMode){ + game.broadcastAll(function(){delete _status.noclearcountdown}); + game.stopCountChoose(); + } + for(var i in event.given_map){ + var source=(_status.connectMode?lib.playerOL:game.playerMap)[i]; + player.line(source,'green'); + source.gain(event.given_map[i],player,'giveAuto'); + } + event.next.sort(function(a,b){ + return lib.sort.seat(a.player,b.player); + }); + }, + update:function(player){ + player.removeGaintag('olsujian'); + var hs=player.getCards('h'); + player.getHistory('gain',function(evt){ + hs.removeArray(evt.cards); + }); + if(hs.length) player.addGaintag(hs,'olsujian'); + return hs; + }, + group:'olsujian_sync', + subSkill:{ + sync:{ + trigger:{player:['phaseBeginStart','gainBegin']}, + forced:true, + popup:false, + firstDo:true, + filter:function(event,player){ + if(event.name=='gain') return (player==_status.currentPhase)&&(event.getParent('olsujian').player!=player); + return true; + }, + content:function(){ + lib.skill.olsujian.update(player); + }, + }, + }, + }, //卞夫人 fuwei:{ audio:'wanwei', @@ -14805,6 +14991,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ huaxin:['ol_huaxin','huaxin','sp_huaxin'], xujing:['xujing','sp_xujing'], zhaoxiang:['zhaoxiang','tw_zhaoxiang'], + dengzhi:['ol_dengzhi','dengzhi'], }, translate:{ "xinfu_lingren":"凌人", @@ -15629,6 +15816,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ fuwei_info:'每回合限一次。当你的牌被其他角色弃置或获得后,你可从牌堆中获得一张与此牌名称相同的牌(若没有则改为摸一张牌)。', yuejian:'约俭', yuejian_info:'每回合限两次。当其他角色对你使用的牌A结算结束后,你可展示所有手牌。若牌A有花色且你的手牌中没有同花色的牌,则你获得牌A对应的所有实体牌。', + ol_dengzhi:'邓芝', + olxiuhao:'修好', + olxiuhao_info:'每回合限一次。当你受到其他角色造成的伤害时,或对其他角色造成伤害时,你可防止此伤害,然后令伤害来源摸两张牌。', + olsujian:'素俭', + olsujian_given:'已分配', + olsujian_info:'锁定技。弃牌阶段开始前,你跳过此阶段。然后你选择一项:①将所有不为本回合获得的手牌分配给其他角色。②弃置这些手牌,然后弃置一名其他角色等量的牌。', sp_default:"常规", sp_tongque:"铜雀台", diff --git a/game/asset.js b/game/asset.js index 67d105047..31986da76 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.9.3', + 'v1.9.110.9.3.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -790,6 +790,8 @@ window.noname_asset_list=[ 'audio/die/qiaozhou.mp3', 'audio/die/shen_xunyu.mp3', 'audio/die/xin_sunluban.mp3', + 'audio/die/ol_dengai.mp3', + 'audio/die/xin_caozhen.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3556,6 +3558,12 @@ window.noname_asset_list=[ 'audio/skill/yuanqing2.mp3', 'audio/skill/zhiming1.mp3', 'audio/skill/zhiming2.mp3', + 'audio/skill/disordersidi1.mp3', + 'audio/skill/disordersidi2.mp3', + 'audio/skill/olsujian1.mp3', + 'audio/skill/olsujian2.mp3', + 'audio/skill/olxiuhao1.mp3', + 'audio/skill/olxiuhao2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3668,7 +3676,6 @@ window.noname_asset_list=[ 'image/card/yuanjun.png', 'image/card/kamome_suitcase.png', 'image/card/miki_hydrogladiator.png', - 'image/card/hina_shenji.png', 'image/card/miki_binoculars.png', 'image/card/zhaoshu.png', 'image/card/tiaojiyanmei.png', @@ -4321,7 +4328,7 @@ window.noname_asset_list=[ 'image/character/wangrong.jpg', 'image/character/zhujun.jpg', 'image/character/hanfu.jpg', - 'image/character/key_hina.jpg', + 'image/character/db_key_hina.jpg', 'image/character/re_quyi.jpg', 'image/character/hucheer.jpg', 'image/character/xin_hansui.jpg', @@ -4501,6 +4508,7 @@ window.noname_asset_list=[ 'image/character/shen_xunyu.jpg', 'image/character/xin_caozhen.jpg', 'image/character/xin_sunluban.jpg', + 'image/character/ol_dengzhi.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index 5fcdb07f2..94c13bc93 100644 --- a/game/game.js +++ b/game/game.js @@ -16478,12 +16478,12 @@ } },this,cards,tag); }, - removeGaintag:function(tag){ + removeGaintag:function(tag,cards){ game.addVideo('removeGaintag',this,tag); game.broadcastAll(function(player,tag){ - var cards=player.getCards('h'); + cards=cards||player.getCards('h'); for(var i of cards) i.removeGaintag(tag); - },this,tag); + },this,tag,cards); }, canSave:function(target){ var player=this; @@ -51530,6 +51530,7 @@ if(item.cardid&&(get.itemtype(item)=='card'||!item.cards||!item.cards.length||item.name==item.cards[0].name)&&_status.cardtag&&_status.cardtag[tag]&&_status.cardtag[tag].contains(item.cardid)){ return true; } + if(item.cardtags&&item.cardtags.contains(tag)) return true; return false; }, tag:function(item,tag,item2){ diff --git a/game/update.js b/game/update.js index 8f74e2fe1..870a1bc59 100644 --- a/game/update.js +++ b/game/update.js @@ -1,15 +1,15 @@ window.noname_update={ - version:'1.9.110.9.3', - update:'1.9.110.9.2.3', + version:'1.9.110.9.3.1', + update:'1.9.110.9.3', changeLog:[ - '神荀彧、文鸯、手杀孙鲁班、手杀曹真', - '国战双势力修正', + '佐藤雏技能修改', + 'OL邓芝,新应变牌堆', 'bug修复', ], files:[ //'card/extra.js', //'card/gujian.js', - //'card/guozhan.js', + 'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', @@ -17,10 +17,10 @@ window.noname_update={ 'card/standard.js', //'card/swd.js', //'card/yunchou.js', - //'card/yingbian.js', + 'card/yingbian.js', //'card/zhenfa.js', //'card/zhulu.js', - 'character/diy.js', + //'character/diy.js', 'character/extra.js', //'character/hearth.js', //'character/gujian.js', @@ -33,30 +33,30 @@ window.noname_update={ //'character/ow.js', 'character/rank.js', 'character/refresh.js', - 'character/shenhua.js', + //'character/shenhua.js', 'character/sp.js', - 'character/sp2.js', - 'character/tw.js', - 'character/standard.js', + //'character/sp2.js', + //'character/tw.js', + //'character/standard.js', //'character/swd.js', //'character/xianjian.js', - 'character/xinghuoliaoyuan.js', + //'character/xinghuoliaoyuan.js', //'character/yingbian.js', - 'character/yijiang.js', + //'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', //'layout/default/layout.css', //'layout/newlayout/global.css', //'layout/default/menu.css', //'layout/nova/layout.css', - 'layout/mobile/equip.css', + //'layout/mobile/equip.css', //'mode/boss.js', //'mode/brawl.js', //'mode/chess.js', //'mode/connect.js', //'mode/doudizhu.js', - 'mode/guozhan.js', - 'mode/identity.js', + //'mode/guozhan.js', + //'mode/identity.js', //'mode/single.js', //'mode/stone.js', //'mode/tafang.js', diff --git a/image/character/db_key_hina.jpg b/image/character/db_key_hina.jpg new file mode 100644 index 000000000..4ca7a2fe2 Binary files /dev/null and b/image/character/db_key_hina.jpg differ diff --git a/image/character/ol_dengzhi.jpg b/image/character/ol_dengzhi.jpg new file mode 100644 index 000000000..4de26b6fc Binary files /dev/null and b/image/character/ol_dengzhi.jpg differ