diff --git a/audio/die/caizhenji.mp3 b/audio/die/caizhenji.mp3 new file mode 100644 index 000000000..66fee6e2f Binary files /dev/null and b/audio/die/caizhenji.mp3 differ diff --git a/audio/die/duxi.mp3 b/audio/die/duxi.mp3 new file mode 100644 index 000000000..57e52593d Binary files /dev/null and b/audio/die/duxi.mp3 differ diff --git a/audio/die/gaogan.mp3 b/audio/die/gaogan.mp3 new file mode 100644 index 000000000..b010213ec Binary files /dev/null and b/audio/die/gaogan.mp3 differ diff --git a/audio/die/shen_taishici.mp3 b/audio/die/shen_taishici.mp3 new file mode 100644 index 000000000..ba59c1427 Binary files /dev/null and b/audio/die/shen_taishici.mp3 differ diff --git a/audio/die/sp_huaxin.mp3 b/audio/die/sp_huaxin.mp3 new file mode 100644 index 000000000..1e9a27f13 Binary files /dev/null and b/audio/die/sp_huaxin.mp3 differ diff --git a/audio/die/sp_xujing.mp3 b/audio/die/sp_xujing.mp3 new file mode 100644 index 000000000..df05aaeb7 Binary files /dev/null and b/audio/die/sp_xujing.mp3 differ diff --git a/audio/die/xiangchong.mp3 b/audio/die/xiangchong.mp3 new file mode 100644 index 000000000..b89ac9663 Binary files /dev/null and b/audio/die/xiangchong.mp3 differ diff --git a/audio/die/xinzhongyong.mp3 b/audio/die/xinzhongyong.mp3 new file mode 100644 index 000000000..4cbba4ebd Binary files /dev/null and b/audio/die/xinzhongyong.mp3 differ diff --git a/audio/skill/bixiong1.mp3 b/audio/skill/bixiong1.mp3 new file mode 100644 index 000000000..82a7029b5 Binary files /dev/null and b/audio/skill/bixiong1.mp3 differ diff --git a/audio/skill/bixiong2.mp3 b/audio/skill/bixiong2.mp3 new file mode 100644 index 000000000..16094d62b Binary files /dev/null and b/audio/skill/bixiong2.mp3 differ diff --git a/audio/skill/boming1.mp3 b/audio/skill/boming1.mp3 new file mode 100644 index 000000000..5d6301fa4 Binary files /dev/null and b/audio/skill/boming1.mp3 differ diff --git a/audio/skill/boming2.mp3 b/audio/skill/boming2.mp3 new file mode 100644 index 000000000..932cfcc7f Binary files /dev/null and b/audio/skill/boming2.mp3 differ diff --git a/audio/skill/buqi1.mp3 b/audio/skill/buqi1.mp3 new file mode 100644 index 000000000..2c233df53 Binary files /dev/null and b/audio/skill/buqi1.mp3 differ diff --git a/audio/skill/buqi2.mp3 b/audio/skill/buqi2.mp3 new file mode 100644 index 000000000..de74df4f7 Binary files /dev/null and b/audio/skill/buqi2.mp3 differ diff --git a/audio/skill/dangmo1.mp3 b/audio/skill/dangmo1.mp3 new file mode 100644 index 000000000..3f1ecb8e4 Binary files /dev/null and b/audio/skill/dangmo1.mp3 differ diff --git a/audio/skill/dangmo2.mp3 b/audio/skill/dangmo2.mp3 new file mode 100644 index 000000000..eb8f791d2 Binary files /dev/null and b/audio/skill/dangmo2.mp3 differ diff --git a/audio/skill/debao1.mp3 b/audio/skill/debao1.mp3 new file mode 100644 index 000000000..0ad1d3791 Binary files /dev/null and b/audio/skill/debao1.mp3 differ diff --git a/audio/skill/debao2.mp3 b/audio/skill/debao2.mp3 new file mode 100644 index 000000000..e7fd954de Binary files /dev/null and b/audio/skill/debao2.mp3 differ diff --git a/audio/skill/dulie1.mp3 b/audio/skill/dulie1.mp3 new file mode 100644 index 000000000..a7e0678b3 Binary files /dev/null and b/audio/skill/dulie1.mp3 differ diff --git a/audio/skill/dulie2.mp3 b/audio/skill/dulie2.mp3 new file mode 100644 index 000000000..a8bc6b11a Binary files /dev/null and b/audio/skill/dulie2.mp3 differ diff --git a/audio/skill/ejian1.mp3 b/audio/skill/ejian1.mp3 new file mode 100644 index 000000000..dac07ceb6 Binary files /dev/null and b/audio/skill/ejian1.mp3 differ diff --git a/audio/skill/ejian2.mp3 b/audio/skill/ejian2.mp3 new file mode 100644 index 000000000..c85a47e51 Binary files /dev/null and b/audio/skill/ejian2.mp3 differ diff --git a/audio/skill/guying1.mp3 b/audio/skill/guying1.mp3 new file mode 100644 index 000000000..8cda476b3 Binary files /dev/null and b/audio/skill/guying1.mp3 differ diff --git a/audio/skill/guying2.mp3 b/audio/skill/guying2.mp3 new file mode 100644 index 000000000..4cb4aba5e Binary files /dev/null and b/audio/skill/guying2.mp3 differ diff --git a/audio/skill/hxrenshi1.mp3 b/audio/skill/hxrenshi1.mp3 new file mode 100644 index 000000000..b688e8b10 Binary files /dev/null and b/audio/skill/hxrenshi1.mp3 differ diff --git a/audio/skill/hxrenshi2.mp3 b/audio/skill/hxrenshi2.mp3 new file mode 100644 index 000000000..63df84139 Binary files /dev/null and b/audio/skill/hxrenshi2.mp3 differ diff --git a/audio/skill/jihun1.mp3 b/audio/skill/jihun1.mp3 new file mode 100644 index 000000000..95e1c2368 Binary files /dev/null and b/audio/skill/jihun1.mp3 differ diff --git a/audio/skill/jihun2.mp3 b/audio/skill/jihun2.mp3 new file mode 100644 index 000000000..f57b89256 Binary files /dev/null and b/audio/skill/jihun2.mp3 differ diff --git a/audio/skill/juguan1.mp3 b/audio/skill/juguan1.mp3 new file mode 100644 index 000000000..825ab0011 Binary files /dev/null and b/audio/skill/juguan1.mp3 differ diff --git a/audio/skill/juguan2.mp3 b/audio/skill/juguan2.mp3 new file mode 100644 index 000000000..563fd141c Binary files /dev/null and b/audio/skill/juguan2.mp3 differ diff --git a/audio/skill/mjchenshi1.mp3 b/audio/skill/mjchenshi1.mp3 new file mode 100644 index 000000000..c7ba59c8c Binary files /dev/null and b/audio/skill/mjchenshi1.mp3 differ diff --git a/audio/skill/mjchenshi2.mp3 b/audio/skill/mjchenshi2.mp3 new file mode 100644 index 000000000..ddca815e6 Binary files /dev/null and b/audio/skill/mjchenshi2.mp3 differ diff --git a/audio/skill/mjdingyi1.mp3 b/audio/skill/mjdingyi1.mp3 new file mode 100644 index 000000000..3fa7341c9 Binary files /dev/null and b/audio/skill/mjdingyi1.mp3 differ diff --git a/audio/skill/mjdingyi2.mp3 b/audio/skill/mjdingyi2.mp3 new file mode 100644 index 000000000..a86a62b8d Binary files /dev/null and b/audio/skill/mjdingyi2.mp3 differ diff --git a/audio/skill/mjmouzhi1.mp3 b/audio/skill/mjmouzhi1.mp3 new file mode 100644 index 000000000..245a85095 Binary files /dev/null and b/audio/skill/mjmouzhi1.mp3 differ diff --git a/audio/skill/mjmouzhi2.mp3 b/audio/skill/mjmouzhi2.mp3 new file mode 100644 index 000000000..2a3c91d0f Binary files /dev/null and b/audio/skill/mjmouzhi2.mp3 differ diff --git a/audio/skill/mjweipo1.mp3 b/audio/skill/mjweipo1.mp3 new file mode 100644 index 000000000..46661a5f7 Binary files /dev/null and b/audio/skill/mjweipo1.mp3 differ diff --git a/audio/skill/mjweipo2.mp3 b/audio/skill/mjweipo2.mp3 new file mode 100644 index 000000000..6e3887bf1 Binary files /dev/null and b/audio/skill/mjweipo2.mp3 differ diff --git a/audio/skill/mobilezhongyong1.mp3 b/audio/skill/mobilezhongyong1.mp3 new file mode 100644 index 000000000..4cb7e2864 Binary files /dev/null and b/audio/skill/mobilezhongyong1.mp3 differ diff --git a/audio/skill/mobilezhongyong2.mp3 b/audio/skill/mobilezhongyong2.mp3 new file mode 100644 index 000000000..ab0887157 Binary files /dev/null and b/audio/skill/mobilezhongyong2.mp3 differ diff --git a/audio/skill/muzhen1.mp3 b/audio/skill/muzhen1.mp3 new file mode 100644 index 000000000..a2610d7ac Binary files /dev/null and b/audio/skill/muzhen1.mp3 differ diff --git a/audio/skill/muzhen2.mp3 b/audio/skill/muzhen2.mp3 new file mode 100644 index 000000000..6d970836a Binary files /dev/null and b/audio/skill/muzhen2.mp3 differ diff --git a/audio/skill/quxi1.mp3 b/audio/skill/quxi1.mp3 new file mode 100644 index 000000000..b05097224 Binary files /dev/null and b/audio/skill/quxi1.mp3 differ diff --git a/audio/skill/quxi2.mp3 b/audio/skill/quxi2.mp3 new file mode 100644 index 000000000..02361ba43 Binary files /dev/null and b/audio/skill/quxi2.mp3 differ diff --git a/audio/skill/shenzhu1.mp3 b/audio/skill/shenzhu1.mp3 new file mode 100644 index 000000000..fd0fcd6b2 Binary files /dev/null and b/audio/skill/shenzhu1.mp3 differ diff --git a/audio/skill/shenzhu2.mp3 b/audio/skill/shenzhu2.mp3 new file mode 100644 index 000000000..dc06930ce Binary files /dev/null and b/audio/skill/shenzhu2.mp3 differ diff --git a/audio/skill/sheyi1.mp3 b/audio/skill/sheyi1.mp3 new file mode 100644 index 000000000..782c1a6ab Binary files /dev/null and b/audio/skill/sheyi1.mp3 differ diff --git a/audio/skill/sheyi2.mp3 b/audio/skill/sheyi2.mp3 new file mode 100644 index 000000000..280513d2a Binary files /dev/null and b/audio/skill/sheyi2.mp3 differ diff --git a/audio/skill/tianyin1.mp3 b/audio/skill/tianyin1.mp3 new file mode 100644 index 000000000..e92379cee Binary files /dev/null and b/audio/skill/tianyin1.mp3 differ diff --git a/audio/skill/tianyin2.mp3 b/audio/skill/tianyin2.mp3 new file mode 100644 index 000000000..9aeeaa437 Binary files /dev/null and b/audio/skill/tianyin2.mp3 differ diff --git a/audio/skill/tspowei1.mp3 b/audio/skill/tspowei1.mp3 new file mode 100644 index 000000000..c2752a79c Binary files /dev/null and b/audio/skill/tspowei1.mp3 differ diff --git a/audio/skill/tspowei2.mp3 b/audio/skill/tspowei2.mp3 new file mode 100644 index 000000000..01b9022ef Binary files /dev/null and b/audio/skill/tspowei2.mp3 differ diff --git a/audio/skill/yigui1.mp3 b/audio/skill/yigui1.mp3 new file mode 100644 index 000000000..3fe322981 Binary files /dev/null and b/audio/skill/yigui1.mp3 differ diff --git a/audio/skill/yigui2.mp3 b/audio/skill/yigui2.mp3 new file mode 100644 index 000000000..9e719cbe2 Binary files /dev/null and b/audio/skill/yigui2.mp3 differ diff --git a/character/extra.js b/character/extra.js index e8af6d25d..7ed9f0fc8 100755 --- a/character/extra.js +++ b/character/extra.js @@ -331,7 +331,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ achieve:{ - audio:'tspowei', + audio:'tspowei1', trigger:{player:'useCardAfter'}, forced:true, skillAnimation:true, @@ -348,7 +348,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, fail:{ - audio:'tspowei', + audio:'tspowei2', trigger:{player:'dying'}, forced:true, content:function(){ @@ -363,6 +363,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, }, + tspowei1:{audio:true}, + tspowei2:{audio:true}, shenzhu:{ audio:2, mod:{ diff --git a/character/mobile.js b/character/mobile.js index 4a458628c..dd8c5cdf8 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -49,7 +49,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_chenzhen:['male','shu',3,['shameng']], sp_sunshao:['male','wu',3,['mjdingyi','mjzuici','mjfubi']], sp_xunchen:['male','qun',3,['mjweipo','mjchenshi','mjmouzhi']], - re_dengai:['male','wei',4,['mjweipo','mjchenshi','mjmouzhi']], + re_dengai:['male','wei',4,['retuntian','zaoxian']], xin_fuhuanghou:['female','qun',3,['xinzhuikong','xinqiuyuan']], xin_panzhangmazhong:['male','wu',4,['xinduodao','xinanjian']], xin_guohuai:['male','wei',4,['mobilejingce']], @@ -552,6 +552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, skill:{ mjweipo:{ + audio:2, enable:'phaseUse', usable:1, filter:function(event,player){ @@ -590,6 +591,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mjweipo_effect:{ + audio:'mjweipo', enable:'chooseToUse', hiddenCard:function(player,name){ return name==player.storage.mjweipo_effect&&player.countCards('h','sha')>0; @@ -825,7 +827,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mjkuanji:{ - audio:2, + audio:'fyjianyu', usable:1, trigger:{player:'loseAfter'}, direct:true, @@ -863,6 +865,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mjdingyi:{ + audio:2, trigger:{ global:'gameDrawAfter', player:'enterGame', @@ -965,6 +968,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mjzuici:{ + audio:'zuici', trigger:{player:'damageEnd'}, filter:function(event,player){ if(!event.source||!event.source.isIn()) return false; @@ -998,6 +1002,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, mjfubi:{ + audio:'fubi', enable:'phaseUse', filter:function(event,player){ if(player.hasSkill('mjfubi_round')) return false; @@ -1349,6 +1354,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ intro:{content:'已对$发动过此技能'}, }, hxrenshi:{ + audio:2, enable:'phaseUse', filter:function(event,player){ return player.countCards('h')>0&&(!player.storage.hxrenshi2||game.hasPlayer(function(current){ @@ -1391,6 +1397,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ onremove:true, }, debao:{ + audio:2, trigger:{global:'gainAfter'}, forced:true, filter:function(event,player){ @@ -1426,6 +1433,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, buqi:{ + audio:2, trigger:{global:'dying'}, forced:true, filter:function(event,player){ @@ -4230,6 +4238,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ target.gain(card,player,'giveAuto'); } }, + mod:{ + inRangeOf:function(from,to){ + if(from.hasMark('taomie')) return true; + }, + }, intro:{ content:'mark', }, @@ -10646,7 +10659,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ taomie2:'讨灭', taomie3:'讨灭', taomie4:'讨灭', - taomie_info:'当你受到伤害后或当你造成伤害后,你可以令伤害来源或受伤角色获得“讨灭”标记(如场上已有标记则转换给该角色);当你对有“讨灭”标记的角色造成伤害时,选择一项:1. 此伤害+1;2. 你获得其区域内的一张牌并可将之交给另一名角色;3. 依次执行前两项并于伤害结算后弃置其“讨灭”标记。', + taomie_info:'当你受到伤害后或当你造成伤害后,你可以令伤害来源或受伤角色获得“讨灭”标记(如场上已有标记则转移给该角色);你视为在有“讨灭”标记的角色的攻击范围内,且当你对该角色造成伤害时,选择一项:1. 此伤害+1;2. 你获得其区域内的一张牌并可将之交给另一名角色;3. 依次执行前两项并于伤害结算后弃置其“讨灭”标记。', xin_guohuai:'手杀郭淮', mobilejingce:'精策', mobilejingce_info:'结束阶段,若此回合因使用或打出而置入弃牌堆的牌的数量不小于你的体力值,则你可以摸两张牌。', diff --git a/character/offline.js b/character/offline.js new file mode 100644 index 000000000..8ae48f65c --- /dev/null +++ b/character/offline.js @@ -0,0 +1,2455 @@ +'use strict'; +game.import('character',function(lib,game,ui,get,ai,_status){ + return { + name:'offline', + connect:true, + characterSort:{ + offline:{ + offline_star:["sp_xiahoushi","jsp_zhaoyun","huangjinleishi","sp_pangtong","sp_daqiao","sp_ganning","sp_xiahoudun","sp_lvmeng","sp_zhangfei","sp_liubei"], + offline_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], + offline_luanwu:["ns_lijue","ns_zhangji","ns_fanchou"], + offline_yongjian:["ns_chendao","yj_caoang"], + offline_s:["ns_jiaxu","ns_caoanmin","jsp_liubei"], + }, + }, + character:{ + sp_liubei:['male','shu',4,['zhaolie','shichou'],['zhu']], + sp_zhangfei:['male','shu',4,['jie','dahe']], + sp_lvmeng:['male','wu',3,['tanhu','mouduan']], + sp_xiahoudun:['male','wei',4,['fenyong','xuehen'],['die_audio']], + sp_ganning:['male','qun',4,['yinling','junwei']], + sp_daqiao:['female','wu',3,['yanxiao','anxian']], + sp_pangtong:['male','qun',3,['xinmanjuan','zuixiang']], + huangjinleishi:['female','qun',3,['fulu','fuji']], + jsp_zhaoyun:['male','qun',3,['chixin','reyicong','suiren']], + sp_xiahoushi:["female","shu",3,["xinfu_yanyu","xinfu_xiaode"]], + sp_gongsunzan:['male','qun',4,['spyicong','sptuji']], + sp_simazhao:['male','wei',3,['spzhaoxin','splanggu']], + sp_wangyuanji:['female','wei',3,['spfuluan','spshude']], + sp_xinxianying:['female','wei',3,['spmingjian','spyinzhi']], + sp_liuxie:['male','qun',3,['sphuangen','sphantong']], + ns_lijue:['male','qun','4/6',['nsfeixiong','nscesuan']], + ns_zhangji:['male','qun',4,['nslulve']], + ns_fanchou:['male','qun',4,['nsyangwu']], + ns_jiaxu:['male','qun',3,['nsyice','luanwu']], + ns_chendao:['male','shu',4,['nsjianglie']], + yj_caoang:['male','wei',4,['yjxuepin']], + ns_caoanmin:['male','wei',4,['nskuishe']], + jsp_liubei:['male','qun',4,['jsprende']], + }, + characterIntro:{ + huangjinleishi:"黄巾军中负责施法的女祭司二人组。", + }, + perfectPair:{}, + card:{ + yanxiao_card:{ + type:'delay', + judge:function(card){ + return 0; + }, + effect:function(){}, + ai:{ + basic:{ + order:1, + useful:1, + value:8, + }, + result:{ + target:1 + }, + } + }, + }, + skill:{ + //群刘备 + jsprende:{ + audio:'rerende', + enable:'phaseUse', + filterCard:true, + selectCard:[1,Infinity], + discard:false, + lose:false, + delay:false, + filterTarget:function(card,player,target){ + return player!=target; + }, + onremove:true, + check:function(card){ + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0; + if(!ui.selected.cards.length&&card.name=='du') return 20; + var player=get.owner(card); + if(ui.selected.cards.length>=Math.max(2,player.countCards('h')-player.hp)) return 0; + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + var players=game.filterPlayer(); + for(var i=0;i=3&& + get.attitude(players[i],player)>=3){ + return 11-get.value(card); + } + } + if(player.countCards('h')>player.hp) return 10-get.value(card); + if(player.countCards('h')>2) return 6-get.value(card); + return -1; + } + return 10-get.value(card); + }, + content:function(){ + 'step 0' + var evt=_status.event.getParent('phaseUse'); + if(evt&&evt.name=='phaseUse'&&!evt.jsprende){ + var next=game.createEvent('jsprende_clear'); + _status.event.next.remove(next); + evt.after.push(next); + evt.jsprende=true; + next.player=player; + next.setContent(function(){ + delete player.storage.jsprende; + }); + } + target.gain(cards,player,'giveAuto'); + if(typeof player.storage.jsprende!='number'){ + player.storage.jsprende=0; + } + if(player.storage.jsprende>=0){ + player.storage.jsprende+=cards.length; + if(player.storage.jsprende>=2){ + var list=[]; + if(lib.filter.cardUsable({name:'sha'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('sha',current); + })){ + list.push(['基本','','sha']); + list.push(['基本','','sha','fire']); + list.push(['基本','','sha','thunder']); + list.push(['基本','','sha','ice']); + } + if(lib.filter.cardUsable({name:'tao'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('tao',current); + })){ + list.push(['基本','','tao']); + } + if(lib.filter.cardUsable({name:'jiu'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ + return player.canUse('jiu',current); + })){ + list.push(['基本','','jiu']); + } + if(list.length){ + player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){ + var player=_status.event.player; + var card={name:button.link[2],nature:button.link[3]}; + if(card.name=='tao'){ + if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){ + return 5; + } + return 1; + } + if(card.name=='sha'){ + if(game.hasPlayer(function(current){ + return player.canUse(card,current)&&get.effect(current,card,player,player)>0 + })){ + if(card.nature=='fire') return 2.95; + if(card.nature=='thunder'||card.nature=='ice') return 2.92; + return 2.9; + } + return 0; + } + if(card.name=='jiu'){ + return 0.5; + } + return 0; + }); + } + else{ + event.finish(); + } + player.storage.jsprende=-1; + } + else{ + event.finish(); + } + } + else{ + event.finish(); + } + 'step 1' + if(result&&result.bool&&result.links[0]){ + var card={name:result.links[0][2],nature:result.links[0][3]}; + player.chooseUseTarget(card,true); + } + }, + ai:{ + fireAttack:true, + order:function(skill,player){ + if(player.hp1){ + return 10; + } + return 4; + }, + result:{ + target:function(player,target){ + if(target.hasSkillTag('nogain')) return 0; + if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ + if(target.hasSkillTag('nodu')) return 0; + return -10; + } + if(target.hasJudge('lebu')) return 0; + var nh=target.countCards('h'); + var np=player.countCards('h'); + if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ + if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0; + } + return Math.max(1,5-nh); + } + }, + effect:{ + target:function(card,player,target){ + if(player==target&&get.type(card)=='equip'){ + if(player.countCards('e',{subtype:get.subtype(card)})){ + if(game.hasPlayer(function(current){ + return current!=player&&get.attitude(player,current)>0; + })){ + return 0; + } + } + } + } + }, + threaten:0.8 + } + }, + //曹安民 + nskuishe:{ + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.choosePlayerCard(target,'he',true).set('ai',get.buttonValue); + 'step 1' + if(result.bool){ + var card=result.cards[0]; + event.card=card; + player.chooseTarget('将'+get.translation(target)+'的'+(get.position(card)=='h'&&!player.hasSkillTag('viewHandcard',null,target,true)?'手牌':get.translation(card))+'交给一名角色',true,function(target){ + return target!=_status.event.getParent().target; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(_status.event.du){ + if(target.hasSkillTag('nodu')) return 0; + return -att; + } + if(target.hasSkillTag('nogain')) return 0.1; + if(att>0){ + return att+Math.max(0,5-target.countCards('h')); + } + return att; + }).set('du',event.card.name=='du'); + } + else event.finish(); + 'step 2' + if(result.bool){ + var target2=result.targets[0]; + target.line(target2,'green'); + target2.gain(target,card,'giveAuto','bySelf'); + } + else event.finish(); + 'step 3' + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'是否对'+get.translation(player)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ + if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; + return lib.filter.filterTarget.apply(this,arguments); + }).set('sourcex',player); + }, + ai:{ + order:6, + expose:0.2, + result:{ + target:-1.5, + player:function(player,target){ + if(!target.canUse('sha',player)) return 0; + if(target.countCards('h')==1) return 0.1; + if(player.hasShan()) return -0.5; + if(player.hp<=1) return -2; + if(player.hp<=2) return -1; + return 0; + } + }, + }, + }, + //文和乱武 + nsyangwu:{ + enable:'phaseUse', + usable:1, + filterCard:{suit:'heart'}, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('h')>player.countCards('h'); + }, + filter:function(event,player){ + var info=lib.skill.nsyangwu; + return player.countCards('h',info.filterCard)&&game.hasPlayer(function(target){ + return info.filterTarget(null,player,target); + }); + }, + check:function(card){ + var num=0; + var player=_status.event.player; + game.countPlayer(function(current){ + if(current!=player&&get.attitude(player,current)<0) num=Math.max(num,current.countCards('h')-player.countCards('h')); + }); + return Math.ceil((num+1)/2)*2+4-get.value(card); + }, + content:function(){ + var num=Math.ceil((target.countCards('h')-player.countCards('h'))/2); + if(num) player.gainPlayerCard(target,true,'h',num,'visible'); + }, + ai:{ + order:4, + result:{ + target:function(player,target){ + return player.countCards('h')-target.countCards('h'); + }, + }, + }, + }, + nslulve:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return game.hasPlayer(function(current){ + return current.countCards('e')>0&¤t.countCards('e')<=player.countCards('he'); + }); + }, + filterCard:function(){ + if(ui.selected.targets.length) return false; + return true; + }, + position:'he', + selectCard:[1,Infinity], + complexSelect:true, + complexCard:true, + filterTarget:function(card,player,target){ + return target!=player&&target.countCards('e')>0&&ui.selected.cards.length==target.countCards('e'); + }, + check:function(card){ + var player=_status.event.player; + if(game.hasPlayer(function(current){ + return current!=player&¤t.countCards('e')>0&&ui.selected.cards.length==current.countCards('e')&&get.damageEffect(current,player,player)>0; + })) return 0; + switch(ui.selected.cards.length){ + case 0:return 8-get.value(card); + case 1:return 6-get.value(card); + case 2:return 3-get.value(card); + default:return 0; + } + }, + content:function(){ + target.damage('nocard'); + }, + ai:{ + damage:true, + order:2, + result:{ + target:function(player,target){ + return get.damageEffect(target,player); + } + }, + expose:0.3 + } + }, + nsfeixiong:{ + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0&&game.hasPlayer(function(current){ + return current!=player&&player.canCompare(current); + }); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('nsfeixiong'),function(card,player,target){ + return player!=target&&player.canCompare(target); + }).set('ai',function(target){ + var player=_status.event.player; + var hs=player.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + var ts=target.getCards('h').sort(function(a,b){ + return b.number-a.number; + }); + if(!hs.length||!ts.length) return 0; + if(hs[0].number>ts[0].number) return get.damageEffect(target,player,player); + return 0; + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('nsfeixiong',target); + player.chooseToCompare(target); + } + else event.finish(); + 'step 2' + if(!result.tie){ + var targets=[player,target]; + if(result.bool) targets.reverse(); + targets[0].damage(targets[1]); + } + }, + }, + nscesuan:{ + trigger:{player:'damageBegin3'}, + forced:true, + content:function(){ + 'step 0' + trigger.cancel(); + event.lose=player.loseMaxHp(); + 'step 1' + if(event.lose&&event.lose.loseHp) player.draw(); + }, + ai:{ + filterDamage:true, + skillTagFilter:function(player,tag,arg){ + if(arg&&arg.player){ + if(arg.player.hasSkillTag('jueqing',false,player)) return false; + } + }, + }, + }, + //S贾诩 + nsyice:{ + trigger:{ + player:'loseAfter', + global:'cardsDiscardAfter', + }, + filter:function(event,player){ + if(event.name=='lose'){ + if(event.type!='discard') return false; + } + else{ + var evt=event.getParent(); + if(evt.name!='orderingDiscard'||!evt.relatedEvent||evt.relatedEvent.player!=player||!['useCard','respond'].contains(evt.relatedEvent.name)) return false; + } + return (event.cards2||event.cards).filterInD('d').length>0; + }, + forced:true, + content:function(){ + 'step 0' + var evt=trigger.getParent().relatedEvent; + if((trigger.name=='discard'&&!trigger.delay)||evt&&evt.name=='respond') game.delayx(); + 'step 1' + var cards=(trigger.cards2||trigger.cards).filterInD('d'); + player.$gain2(cards); + if(cards.length==1) event._result={bool:true,links:cards}; + else{ + var dialog=['遗策:选择要放置的卡牌','
(从左到右为从旧到新,后选择的后置入)
',cards]; + var cards2=player.getStorage('nsyice'); + if(cards2.length){ + dialog.push('
原有“策”
'); + dialog.push(cards2); + } + player.chooseButton(dialog,true,cards.length).set('filterButton',function(button){ + return _status.event.cards.contains(button.link); + }).set('cards',cards); + } + 'step 2' + game.cardsGotoSpecial(result.links); + player.markAuto('nsyice',result.links); + game.delayx(); + 'step 3' + var storage=player.storage.nsyice; + var bool=false; + for(var i=0;ii;j--){ + if(get.number(storage[i])==get.number(storage[j])){ + bool=true; + break; + } + } + if(bool) break; + } + if(bool){ + event.cards=storage.slice(0); + event.cards=storage.splice(i,j-i+1); + player.unmarkAuto('nsyice',event.cards); + } + else event.finish(); + 'step 4' + var cardsx=[]; + cardsx.push(cards.shift()); + cardsx.push(cards.pop()); + if(cards.length) player.gain(cards,'gain2'); + event.cards=cardsx; + 'step 5' + player.chooseButton(['将一张牌置于牌堆顶,将另一张牌置于牌堆底',cards],true); + 'step 6' + ui.cardPile.insertBefore(result.links[0].fix(),ui.cardPile.firstChild); + cards.remove(result.links[0]); + ui.cardPile.appendChild(cards[0].fix()); + game.updateRoundNumber(); + if(_status.dying.length) event.finish(); + 'step 7' + player.chooseTarget('对一名角色造成1点伤害',true).set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 8' + if(result.bool){ + var target=result.targets[0]; + player.line(target); + target.damage('nocard'); + } + }, + marktext:'策', + intro:{content:'cards'}, + }, + //用间篇 + yjxuepin:{ + enable:'phaseUse', + usable:1, + filterTarget:function(event,player,target){ + return player.inRange(target)&&target.countDiscardableCards(player,'he')>0; + }, + content:function(){ + 'step 0' + player.loseHp(); + 'step 1' + if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,2,'he',true); + else event.finish(); + 'step 2' + if(result.bool&&result.cards.length==2&&get.type2(result.cards[0],result.cards[0].original=='h'?target:false)==get.type2(result.cards[1],result.cards[1].original=='h'?target:false)) player.recover(); + }, + ai:{ + order:4, + result:{ + player:function(player,target){ + if(player.hp==1) return -8; + if(target.countCards('e')>1) return 0; + if(player.hp>2||target.countCards('h')>1) return -0.5; + return -2; + }, + target:function(player,target){ + if(target.countDiscardableCards(player,'he')<2) return 0; + return -2; + }, + }, + }, + }, + nsjianglie:{ + trigger:{player:'useCardToPlayered'}, + filter:function(event,player){ + return event.card.name=='sha'&&event.target.countCards('h')>0; + }, + check:function(event,player){ + return get.attitude(player,event.target)<0; + }, + logTarget:'target', + content:function(){ + 'step 0' + trigger.target.showHandcards(); + 'step 1' + var cards=trigger.target.getCards('h'); + var list=[]; + for(var i=0;i=get.value(player.getCards('h',{color:'black'}))) return 'black'; + return 'red'; + }); + } + 'step 2' + trigger.target.discard(trigger.target.getCards('h',{color:result.control})); + }, + }, + //桌游志贴纸 + spyinzhi:{ + trigger:{player:'damageEnd'}, + frequent:true, + content:function(){ + 'step 0' + event.count=trigger.num; + 'step 1' + event.count--; + var cards=game.cardsGotoOrdering(get.cards(2)).cards; + player.showCards(cards); + event.count2=0; + for(var i=0;i0){ + player.chooseTarget('令一名角色获得'+get.translation(trigger.source)+'的一张手牌',function(card,player,target){ + var source=_status.event.source; + return target!=source&&source.countGainableCards(target,'h')>0; + }).set('source',trigger.source); + } + else event.goto(4); + 'step 3' + if(result.bool){ + var target=result.targets[0]; + player.line([trigger.source,target],'green'); + target.gainPlayerCard(trigger.source,'h',true); + if(event.count2) event.goto(2) + } + 'step 4' + if(cards.length) player.gain(cards,'gain2','log'); + 'step 5' + if(event.count>0){ + player.chooseBool(get.prompt2('spyinzhi')).set('frequentSkill','spyinzhi'); + } + else event.finish(); + 'step 6' + if(result.bool){ + player.logSkill('spyinzhi'); + event.goto(1); + }; + }, + }, + spmingjian:{ + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + var next=player.chooseCard(get.prompt2('spmingjian',trigger.player),'he'); + next.set('ai',function(card){ + var target=_status.event.getTrigger().player; + var player=_status.event.player; + if(get.attitude(player,target)>0&&target.countCards('j')>0) return 5-get.value(card); + return -1; + }); + next.set('filterCard',function(card,player){ + if(get.position(card)=='e') return lib.filter.cardDiscardable.apply(this,arguments); + return true; + }); + //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}; + else if(!lib.filter.cardDiscardable(card,player,event)) event._result={index:1}; + else{ + var name=get.translation(trigger.player); + player.chooseControl().set('choiceList',[ + '令'+name+'跳过本回合的判定阶段', + '令'+name+'于本回合的判定中不触发「判定结果生效前」的时机', + ]).set('ai',function(){return 0}); + } + } + else event.finish(); + 'step 2' + if(result.index==0){ + player.discard(card); + trigger.player.skip('phaseJudge'); + } + else{ + player.lose(card,ui.special,'toStorage'); + trigger.player.addSkill('spmingjian_charlotte'); + trigger.player.storage.spmingjian_charlotte.add(card); + trigger.player.markSkill('spmingjian_charlotte'); + } + }, + ai:{ + expose:0.25, + }, + }, + spmingjian_charlotte:{ + trigger:{player:['judgeBefore','phaseAfter']}, + forced:true, + firstDo:true, + silent:true, + popup:false, + charlotte:true, + content:function(){ + if(trigger.name=='phase') player.removeSkill(event.name); + else trigger.noJudgeTrigger=true; + }, + init:function(player,skill){ + if(!player.storage[skill]) player.storage[skill]=[]; + }, + marktext:'鉴', + intro:{ + name:'明鉴', + content:'cards', + onunmark:'throw', + }, + }, + spshude:{ + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + filter:function(event,player){ + return player.countCards('h')2; + return get.suit(card)==get.suit(ui.selected.cards[0]); + }, + content:function(){ + target.turnOver(); + player.addTempSkill('spfuluan2'); + }, + ai:{ + order:1, + result:{ + target:function(player,target){ + if(target.isTurnedOver()) return 2; + return -1; + }, + }, + }, + }, + spfuluan2:{ + mod:{ + cardEnabled:function(card){ + if(card.name=='sha') return false; + }, + }, + }, + spzhaoxin:{ + trigger:{player:'phaseDrawEnd'}, + check:function(event,player){ + return player.getUseValue({name:'sha',isCard:true})>0; + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.showHandcards(); + 'step 1' + player.chooseUseTarget('sha',false); + }, + }, + splanggu:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return get.itemtype(event.source)=='player'; + }, + logTarget:'source', + content:function(){ + 'step 0' + player.judge(); + 'step 1' + if(trigger.source.countCards('h')>0){ + var next=player.discardPlayerCard(trigger.source,'h',[1,Infinity]); + next.set('suit',result.suit); + next.set('filterButton',function(button){ + return get.suit(button.link)==_status.event.suit; + }); + next.set('visible',true); + } + }, + group:'splanggu_rewrite', + }, + splanggu_rewrite:{ + trigger:{player:'judge'}, + filter:function (event,player){ + return player.countCards('hs')>0&&event.getParent().name=='splanggu'; + }, + direct:true, + content:function (){ + "step 0" + player.chooseCard('狼顾的判定结果为'+ + get.translation(trigger.player.judging[0])+',是否打出一张手牌进行代替?','hs',function(card){ + var player=_status.event.player; + var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); + if(mod2!='unchanged') return mod2; + var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); + if(mod!='unchanged') return mod; + return true; + }).set('ai',function(card){ + return -1; + }); + "step 1" + if(result.bool){ + player.respond(result.cards,'highlight','splanggu','noOrdering'); + } + else{ + event.finish(); + } + "step 2" + if(result.bool){ + if(trigger.player.judging[0].clone){ + trigger.player.judging[0].clone.classList.remove('thrownhighlight'); + game.broadcast(function(card){ + if(card.clone){ + card.clone.classList.remove('thrownhighlight'); + } + },trigger.player.judging[0]); + game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); + } + game.cardsDiscard(trigger.player.judging[0]); + trigger.player.judging[0]=result.cards[0]; + trigger.orderingCards.addArray(result.cards); + game.log(trigger.player,'的判定牌改为',result.cards[0]); + game.delay(2); + } + }, + }, + sphantong:{ + trigger:{player:'loseEnd'}, + frequent:true, + filter:function(event,player){ + return event.type=='discard'&&event.getParent(3).name=='phaseDiscard'&&event.cards.filterInD('d').length>0; + }, + content:function(){ + if(!player.storage.sphantong) player.storage.sphantong=[]; + var cards=trigger.cards.filterInD('d'); + player.storage.sphantong.addArray(cards); + player.$gain2(cards); + game.log(player,'将',cards,'置于武将牌上'); + player.markSkill('sphantong'); + }, + group:['sphantong_gain'], + derivation:['hujia','jijiang','jiuyuan','xueyi'], + marktext:'诏', + intro:{ + content:'cards', + onunmark:'throw', + }, + }, + sphantong_gain:{ + trigger:{global:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.storage.sphantong&&player.storage.sphantong.length>0; + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('sphantong'),player.storage.sphantong],function(button){return -1}); + 'step 1' + if(result.bool){ + player.logSkill('sphantong'); + var card=result.links[0]; + player.$throw(card); + game.log(player,'将',card,'置入了弃牌堆'); + player.storage.sphantong.remove(card); + player[player.storage.sphantong.length>0?'markSkill':'unmarkSkill']('sphantong'); + game.cardsDiscard(card); + var list=['hujia','jijiang','jiuyuan','xueyi']; + for(var i=0;i0) player.chooseControl(list).set('prompt','选择获得以下技能中的一个'); + else event.finish(); + } + else event.finish(); + 'step 2' + var skill=result.control; + player.addTempSkill(skill); + if(!player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong=[]; + player.storage.zhuSkill_sphantong.add(skill); + player.popup(skill,'wood'); + game.log(player,'获得了技能','#g【'+get.translation(skill)+'】'); + var next=game.createEvent('sphantong_clear',false); + event.next.remove(next); + trigger.after.push(next); + next.player=player; + next.skill=skill; + next.setContent(function(){ + if(player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong.remove(event.skill); + }) + }, + }, + sphuangen:{ + trigger:{global:'useCardToPlayered'}, + filter:function(event,player){ + if(!event.isFirstTarget) return false; + if(get.type(event.card)!='trick') return false; + if(get.info(event.card).multitarget) return false; + if(event.targets.length<2) return false; + return player.hp>0; + }, + direct:true, + content:function(){ + "step 0" + player.chooseTarget(get.prompt('sphuangen'), + [1,Math.min(player.hp,trigger.targets.length)],function(card,player,target){ + return _status.event.targets.contains(target); + }).set('ai',function(target){ + return -get.effect(target,trigger.card,trigger.player,_status.event.player); + }).set('targets',trigger.targets); + "step 1" + if(result.bool){ + player.logSkill('sphuangen',result.targets); + trigger.excluded.addArray(result.targets); + player.draw(); + } + }, + }, + spyicong:{ + trigger:{player:'phaseDiscardEnd'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCard('he',[1,player.countCards('he')],get.prompt2('spyicong')).set('ai',function(card){ + if(card.name=='du') return 10; + if(ui.selected.cards.length) return -1; + return 4-get.value(card); + }); + 'step 1' + if(result.bool){ + player.logSkill('spyicong'); + if(!player.storage.spyicong) player.storage.spyicong=[]; + player.storage.spyicong.addArray(result.cards); + player.$giveAuto(result.cards.length,player,false); + game.log(player,'扣置了'+get.cnNumber(player.lose(result.cards,'toStorage',ui.special).cards.length)+'张【扈】'); + player.markSkill('spyicong'); + } + }, + mod:{ + globalTo:function(from,to,num){ + if(to.storage.spyicong&&to.storage.spyicong.length) return num+to.storage.spyicong.length; + }, + }, + marktext:'扈', + intro:{ + name:'义从', + content:'cardCount', + onunmark:'throw', + }, + }, + sptuji:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.spyicong&&player.storage.spyicong.length>0; + }, + content:function(){ + var num=player.storage.spyicong.length; + player.addMark('sptuji2',num,false); + player.addTempSkill('sptuji2'); + player.unmarkSkill('spyicong'); + if(num<=1) player.draw(); + }, + }, + sptuji2:{ + onremove:true, + charlotte:true, + mod:{ + globalFrom:function(from,to,num){ + return num-from.countMark('sptuji2'); + }, + }, + marktext:'突', + intro:{ + name:'突骑', + content:'至其他角色的距离-#', + }, + }, + xinfu_yanyu:{ + trigger:{ + global:"phaseUseBegin", + }, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + var next=player.chooseToDiscard(get.prompt('xinfu_yanyu'),get.translation('xinfu_yanyu_info'),'he').set('logSkill','xinfu_yanyu'); + if(player==trigger.player){ + next.set('goon',function(){ + var map={ + basic:0, + trick:0.1, + }; + var hs=trigger.player.getCards('h'); + var sha=false; + var jiu=false; + for(var i=0;i=3) return false; + //var evt=event.getParent(); + //if(evt&&(evt.name=='useCard'||evt.name=='respond')) return false; + var type=player.storage.xinfu_yanyu; + var cards=event.cards; + for(var i=0;i=3) event.finish(); + else player.chooseCardButton(event.cards,'【燕语】:是否将其中的一张牌交给一名角色?').ai=function(card){ + if(card.name=='du') return 10; + return get.value(card); + }; + 'step 2' + if(result.bool){ + player.storage.xinfu_yanyu2++; + if(!event.logged){ + player.logSkill('xinfu_yanyu'); + player.addExpose(0.25); + event.logged=true; + } + event.togain=result.links[0]; + event.cards.remove(event.togain); + player.chooseTarget(true,'请选择要获得'+get.translation(event.togain)+'的角色').set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + var card=_status.event.card; + var val=get.value(card); + if(player.storage.xinfu_yanyu2<3&&target==_status.currentPhase&&target.hasValueTarget(card,null,true)) att=att*5; + else if(target==player&&!player.hasJudge('lebu')&&get.type(card)=='trick') att=att*3; + if(target.hasSkillTag('nogain')) att/=10; + return att*val; + }).set('card',event.togain); + } + else event.finish(); + 'step 3' + var target=result.targets[0]; + player.line(target,'green'); + target.gain(event.togain,'gain2'); + if(event.cards.length) event.goto(1); + }, + }, + "xinfu_xiaode":{ + subSkill:{ + remove:{ + unique:true, + charlotte:true, + trigger:{ + player:"phaseAfter", + }, + forced:true, + popup:false, + content:function(){ + player.removeAdditionalSkill('xinfu_xiaode'); + player.removeSkill('xinfu_xiaode_remove'); + }, + }, + }, + trigger:{ + global:"dieAfter", + }, + direct:true, + filter:function (skill,event){ + return !event.hasSkill('xinfu_xiaode_remove'); + }, + content:function (){ + 'step 0' + var list=[]; + var listm=[]; + var listv=[]; + if(trigger.player.name1!=undefined) listm=lib.character[trigger.player.name1][3]; + else listm=lib.character[trigger.player.name][3]; + if(trigger.player.name2!=undefined) listv=lib.character[trigger.player.name2][3]; + listm=listm.concat(listv); + var func=function(skill){ + var info=get.info(skill); + if(info.charlotte||info.zhuSkill||(info.unique&&!info.limited)||info.juexingji||info.dutySkill||info.hiddenSkill) return false; + return true; + }; + for(var i=0;imaxval){ + maxval=tempval; + } + } + maxval+=cards.length-1; + var next=player.chooseToDiscard('he',{suit:suits}); + next.set('ai',function(card){ + return _status.event.maxval-get.value(card); + }); + next.set('maxval',maxval); + next.set('dialog',[get.prompt(event.name),'hidden',cards]) + next.logSkill=event.name; + event.cards=cards; + } + "step 2" + if(result.bool){ + player.gain(event.cards,'gain2','log'); + } + }, + ai:{ + threaten:1.3 + } + }, + zuixiang:{ + skillAnimation:true, + animationColor:'gray', + audio:true, + unique:true, + limited:true, + trigger:{player:'phaseZhunbeiBegin'}, + content:function(){ + 'step 0' + player.awakenSkill('zuixiang'); + event.cards=player.showCards(get.cards(3)).cards; + player.markAuto('zuixiang2',event.cards); + game.cardsGotoSpecial(event.cards); + 'step 1' + if(lib.skill.zuixiang.filterSame(cards)){ + player.gain(cards,'gain2').type='xinmanjuan'; + delete player.storage.zuixiang2; + player.unmarkSkill('zuixiang2'); + } + else{ + trigger._zuixiang=true; + player.addSkill('zuixiang2'); + } + }, + filterSame:function(c){ + for(var i=0;i0; + }, + discard:false, + lose:false, + delay:false, + prepare:'give', + content:function(){ + 'step 0' + game.addGlobalSkill('yanxiao_global'); + target.addJudge({name:'yanxiao_card'},cards); + 'step 1' + game.delay(); + }, + ai:{ + order:8, + result:{ + target:function(player,target){ + if(target.countCards('j',function(card){ + return get.effect(target,{ + name:card.viewAs||card.name, + cards:[card], + },target,target)<0; + })) return 1; + return 0; + } + } + } + }, + yanxiao_global:{ + trigger:{player:'phaseJudgeBegin'}, + forced:true, + filter:function(event,player){ + return player.countCards('j')>0&&player.hasJudge('yanxiao_card'); + }, + content:function(){ + player.gain(player.getCards('j'),'gain2'); + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(get.type(card)=='delay'&&target.hasJudge('yanxiao_card')) return [0,0,0,0.1]; + } + } + } + }, + anxian:{ + audio:2, + group:['anxian_source','anxian_target'], + subSkill:{ + source:{ + audio:"anxian", + trigger:{source:'damageBegin2'}, + filter:function(event,player){ + return event.card&&event.card.name=='sha'; + }, + check:function(event,player){ + if(get.damageEffect(event.player,player,player)<=0) return true; + return false; + }, + content:function(){ + 'step 0' + if(trigger.player.countCards('h')){ + trigger.player.chooseToDiscard(true); + } + 'step 1' + player.draw(); + trigger.cancel(); + } + }, + target:{ + audio:"anxian", + trigger:{target:'useCardToTargeted'}, + direct:true, + filter:function(event,player){ + return event.card.name=='sha'&&player.countCards('h'); + }, + content:function(){ + "step 0" + var next=player.chooseToDiscard(get.prompt2('anxian')); + next.set('ai',function(card){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + if(get.attitude(player,trigger.player)>0){ + return 9-get.value(card); + } + if(player.countCards('h',{name:'shan'})) return -1; + return 7-get.value(card); + }); + next.logSkill='anxian'; + "step 1" + if(result.bool){ + trigger.player.draw(); + trigger.getParent().excluded.push(player); + } + }, + } + } + }, + junwei:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.storage.yinling&&player.storage.yinling.length>=3; + }, + content:function(){ + 'step 0' + if(player.storage.yinling.length>3){ + player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){ + return 1; + }); + } + else{ + player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true).set('choice',true); + event.cards=player.storage.yinling.slice(0); + } + 'step 1' + if(result.bool){ + player.logSkill('junwei'); + var cards=event.cards||result.links; + for(var i=0;i1) return 1; + if(_status.event.player.hp>=3) return 0; + return 1; + }).set('nshan',nshan); + } + } + else{ + event.finish(); + } + 'step 3' + if(!event.directfalse&&result.bool) game.delay(); + ui.clear(); + 'step 4' + if(!event.directfalse&&result.bool){ + event.cards=result.cards; + event.target.$throw(result.cards); + player.chooseTarget('将'+get.translation(event.cards)+'交给一名角色',true,function(card,player,target){ + return target!=_status.event.getParent().target; + }).set('ai',function(target){ + return get.attitude(_status.event.player,target)/(target.countCards('h','shan')+1); + }); + } + else{ + event.target.loseHp(); + delete event.cards; + } + 'step 5' + if(event.cards){ + player.line(result.targets,'green'); + result.targets[0].gain(event.cards,'gain2'); + game.log(player,'将',event.cards,'交给',result.targets[0]); + event.finish(); + } + else{ + if(event.target.countCards('e')){ + player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target); + } + else{ + event.finish(); + } + } + 'step 6' + if(result.bool){ + var card=result.links[0]; + if(event.target.storage.junwei2){ + event.target.storage.junwei2.push(card); + event.target.markSkill('junwei2'); + } + else{ + event.target.storage.junwei2=[card]; + } + event.target.lose(card,ui.special,'toStorage'); + event.target.addSkill('junwei2'); + event.target.syncStorage('junwei2'); + } + } + }, + junwei2:{ + mark:true, + intro:{ + content:'cards', + onunmark:function(storage,player){ + if(storage&&storage.length){ + player.$throw(storage,1000); + game.cardsDiscard(storage); + game.log(storage,'被置入了弃牌堆'); + storage.length=0; + } + }, + }, + trigger:{player:'phaseJieshuBegin'}, + forced:true, + content:function(){ + 'step 0' + if(player.storage.junwei2.length){ + var card=player.storage.junwei2.shift(); + player.equip(card); + event.redo(); + } + 'step 1' + player.removeSkill('junwei2'); + delete player.storage.junwei2; + } + }, + yinling:{ + enable:'phaseUse', + filterCard:{color:'black'}, + position:'he', + intro:{ + content:'cards', + onunmark:'throw' + }, + filter:function(event,player){ + return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4; + }, + filterTarget:function(card,player,target){ + return target.countCards('he')>0&&target!=player; + }, + init:function(player){ + player.storage.yinling=[]; + }, + check:function(card){ + return 6-get.value(card); + }, + content:function(){ + 'step 0' + player.choosePlayerCard('hej',target,true); + 'step 1' + if(result.bool&&result.links&&result.links.length){ + target.$give(result.links,player,false); + target.lose(result.links,ui.special,'toStorage'); + player.storage.yinling.push(result.links[0]); + player.markSkill('yinling'); + player.syncStorage('yinling'); + } + }, + ai:{ + order:10.1, + expose:0.1, + result:{ + target:function(player,target){ + if(target.hasSkill('tuntian')) return 0; + var es=target.getCards('e'); + var nh=target.countCards('h'); + var noe=(es.length==0||target.hasSkillTag('noe')); + var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp=0){ + return -1.5; + } + return 2; + } + return -1.5; + }, + }, + } + }, + fenyong:{ + audio:2, + trigger:{player:'damageEnd'}, + content:function(){ + player.addTempSkill('fenyong2'); + } + }, + fenyong2:{ + audio:'fenyong', + mark:true, + intro:{ + content:'防止你受到的所有伤害' + }, + trigger:{player:'damageBegin3'}, + forced:true, + content:function(){ + trigger.cancel(); + }, + ai:{ + maixie:true, + maixie_hp:true, + nofire:true, + nothunder:true, + nodamage:true, + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')) return [0,0]; + } + }, + } + }, + xuehen:{ + audio:2, + trigger:{global:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return player.hasSkill('fenyong2')&&event.player.isAlive(); + }, + content:function(){ + 'step 0' + player.removeSkill('fenyong2'); + player.chooseControl('弃牌','出杀',function(){ + var player=_status.event.player; + var trigger=_status.event.getTrigger(); + if(get.attitude(player,trigger.player)<0){ + var he=trigger.player.countCards('he'); + if(he<2) return '出杀'; + if(player.maxHp-player.hp>=2&&he<=3){ + return '弃牌'; + } + if(player.maxHp-player.hp>=3&&he<=5){ + return '弃牌'; + } + if(player.maxHp-player.hp>3){ + return '弃牌'; + } + return '出杀'; + } + return '出杀'; + }).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀'); + 'step 1' + if(result.control=='弃牌'){ + player.line(trigger.player,'green'); + if(player.hp2; + }, + direct:true, + content:function(){ + 'step 0' + player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){ + return -1; + } + 'step 1' + if(result.bool&&player.countCards('h')>2){ + game.broadcastAll(function(player){ + if(!player._mouduan_mark) return; + player._mouduan_mark.name='武'; + player._mouduan_mark.skill='武'; + player._mouduan_mark.firstChild.innerHTML='武'; + player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】'; + },player); + player.addAdditionalSkill('mouduan',['jiang','qianxun']); + } + } + }, + tanhu:{ + audio:1, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target); + 'step 1' + if(result.bool){ + target.addTempSkill('tanhu2'); + } + }, + ai:{ + result:{ + target:function(player,target){ + var hs=player.getCards('h'); + if(hs.length<3) return 0; + var bool=false; + for(var i=0;i=9&&get.value(hs[i])<7){ + bool=true; + break; + } + } + if(!bool) return 0; + return -1; + } + }, + order:9, + }, + group:'tanhu3' + }, + tanhu2:{ + mark:true, + intro:{ + content:'已成为探虎目标' + } + }, + tanhu3:{ + mod:{ + globalFrom:function(from,to){ + if(to.hasSkill('tanhu2')) return -Infinity; + }, + wuxieRespondable:function(card,player,target){ + if(target&&target.hasSkill('tanhu2')) return false; + } + } + }, + jie:{ + audio:1, + trigger:{source:'damageBegin1'}, + filter:function(event){ + return event.card&&event.card.name=='sha'&&get.color(event.card)=='red'&&event.notLink(); + }, + forced:true, + content:function(){ + trigger.num++; + } + }, + dahe:{ + audio:1, + enable:'phaseUse', + usable:1, + filterTarget:function(card,player,target){ + return player.canCompare(target); + }, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseToCompare(target).set('preserve','win'); + 'step 1' + if(result.bool&&result.target){ + event.type=true; + event.card=result.target; + player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){ + return target.hp<=player.hp; + }).set('ai',function(target){ + var att=get.attitude(_status.event.player,target); + if(_status.event.du) return -att; + return att; + }).set('du',event.card.name=='du'); + target.addTempSkill('dahe2'); + } + else{ + event.type=false; + if(player.countCards('h')){ + player.showHandcards(); + player.chooseToDiscard('h',true); + } + } + 'step 2' + if(event.type){ + if(result.bool){ + player.line(result.targets,'green'); + result.targets[0].gain(event.card,'gain2'); + } + } + }, + ai:{ + result:{ + target:function(player,target){ + var hs=player.getCards('h'); + if(hs.length<3) return 0; + var bool=false; + for(var i=0;i=9&&get.value(hs[i])<7){ + bool=true; + break; + } + } + if(!bool) return 0; + if(player.canUse('sha',target)&&(player.countCards('h','sha'))){ + return -2; + } + return -0.5; + } + }, + order:9, + } + }, + dahe2:{ + mark:true, + intro:{ + content:'非红桃闪无效' + }, + mod:{ + cardRespondable:function(card,player){ + if(card.name=='shan'&&get.suit(card)!='heart') return false; + }, + cardEnabled:function(card,player){ + if(card.name=='shan'&&get.suit(card)!='heart') return false; + }, + } + }, + shichou:{ + //audio:1, + skillAnimation:true, + animationColor:'orange', + unique:true, + limited:true, + mark:false, + trigger:{player:'phaseZhunbeiBegin'}, + zhuSkill:true, + direct:true, + filter:function(event,player){ + if(!player.hasZhuSkill('shichou'))return false; + if(player.countCards('he')<2) return false; + return game.hasPlayer(function(current){ + return current!=player&¤t.group=='shu'; + }); + }, + init:function(player){ + if(player.hasZhuSkill('shichou')){ + player.markSkill('shichou'); + player.storage.shichou=false; + } + }, + content:function(){ + "step 0" + player.chooseCardTarget({ + prompt:get.prompt2('shichou'), + selectCard:2, + filterTarget:function(card,player,target){ + return target.group=='shu'&&target!=player; + }, + filterCard:true, + position:'he', + ai1:function(card){ + return 7-get.value(card); + }, + ai2:function(target){ + var player=_status.event.player; + if(player.hasUnknown()) return 0; + var att=get.attitude(player,target); + if(att<=0){ + if(target.hp==1) return (10-att)/2; + return 10-att; + } + else{ + if(target.hp==1) return 0; + return (10-att)/4; + } + }, + }); + "step 1" + if(!result.bool) return; + var target=result.targets[0]; + var cards=result.cards; + player.storage.shichou=true; + player.logSkill('shichou',target); + player.awakenSkill('shichou'); + target.gain(cards,player,'giveAuto'); + player.storage.shichou_target=target; + player.addSkill('shichou2'); + target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态'); + }, + intro:{ + content:'limited' + }, + }, + shichou2:{ + group:'shichou3', + trigger:{player:'damageBegin3'}, + forced:true, + popup:false, + content:function(){ + trigger.player=player.storage.shichou_target; + trigger.shichou4=true; + trigger.player.addSkill('shichou4'); + player.logSkill('shichou2',player.storage.shichou_target); + game.delay(0.5); + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(get.tag(card,'damage')){ + if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; + if(get.attitude(player,target)>0) return [0,0]; + var eff=get.damageEffect(target.storage.shichou_target,player,target); + if(eff>0){ + return [0,1]; + } + else if(eff<0){ + return [0,-2]; + } + else{ + return [0,0]; + } + } + } + } + } + }, + shichou3:{ + trigger:{global:['dying','dieBegin']}, + forced:true, + popup:false, + //priority:10, + filter:function(event,player){ + return event.player==player.storage.shichou_target; + }, + content:function(){ + trigger.player.unmarkSkill('shichou'); + delete player.storage.shichou_target; + player.removeSkill('shichou2'); + } + }, + shichou4:{ + trigger:{player:['damageAfter','damageCancelled']}, + forced:true, + popup:false, + audio:false, + content:function(){ + if(!trigger.shichou4) return; + if(event.triggername=='damageAfter'&&trigger.num){ + player.draw(trigger.num); + } + player.removeSkill('shichou4'); + } + }, + zhaolie:{ + trigger:{player:'phaseDrawBegin2'}, + direct:true, + filter:function(event,player){ + return !event.numFixed; + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt2('zhaolie'),function(card,player,target){ + return target!=player&&player.inRange(target); + }).set('ai',function(target){ + var player=_status.event.player; + if(get.attitude(player,target)>0) return 0; + return get.damageEffect(target,player,player); + }); + 'step 1' + if(result.bool){ + trigger.num--; + player.storage.zhaolie=result.targets[0]; + player.logSkill('zhaolie',result.targets); + player.addTempSkill('zhaolie2','phaseDrawAfter'); + } + } + }, + zhaolie2:{ + trigger:{player:'phaseDrawEnd'}, + forced:true, + popup:false, + content:function(){ + 'step 0' + event.cards=get.cards(3); + player.showCards(event.cards); + 'step 1' + event.basic=[]; + event.nonbasic=[]; + event.todis=[]; + for(var i=0;i1?0:7-get.value(card); + case 2:return 8-get.value(card); + case 3:return 10-get.value(card); + default:return 0; + } + }).set('num',num); + } + 'step 2' + var num=event.nonbasic.length; + var undone=false; + if(num==0){ + if(event.basic.length){ + result.targets[0].gain(event.basic,'gain2','log'); + } + } + else{ + if(result.bool){ + if(event.basic.length){ + player.gain(event.basic,'gain2','log'); + } + } + else{ + player.storage.zhaolie.damage(num); + if(event.basic.length){ + undone=true; + } + } + } + if(!undone){ + delete player.storage.zhaolie; + event.finish(); + } + 'step 3' + if(player.storage.zhaolie.isAlive()){ + player.storage.zhaolie.gain(event.basic,'gain2','log'); + } + else{ + game.cardsDiscard(event.basic); + } + delete player.storage.zhaolie; + } + }, + fulu:{ + trigger:{player:'useCard1'}, + filter:function(event,player){ + if(event.card.name=='sha'&&!event.card.nature) return true; + }, + audio:true, + check:function(event,player){ + var eff=0; + for(var i=0;i=0; + }, + content:function(){ + trigger.card.nature='thunder'; + if(get.itemtype(trigger.card)=='card'){ + var next=game.createEvent('fulu_clear'); + next.card=trigger.card; + event.next.remove(next); + trigger.after.push(next); + next.setContent(function(){ + delete card.nature; + }); + } + } + }, + fuji:{ + trigger:{global:'damageBegin1'}, + filter:function(event){ + return event.source&&event.nature=='thunder'; + }, + check:function(event,player){ + return get.attitude(player,event.source)>0&&get.attitude(player,event.player)<0; + }, + prompt:function(event){ + return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji'); + }, + logTarget:'source', + content:function(){ + trigger.source.judge().callback=lib.skill.fuji.callback; + }, + callback:function(){ + var evt=event.getParent(2); + if(event.judgeResult.color=='black'){ + //game.cardsDiscard(card); + evt._trigger.num++; + } + else{ + evt._trigger.source.gain(card,'gain2'); + } + }, + }, + }, + characterReplace:{}, + translate:{ + sp_gongsunzan:'SP公孙瓒', + sp_simazhao:'SP司马昭', + sp_wangyuanji:'SP王元姬', + sp_xinxianying:'SP辛宪英', + sp_liuxie:'SP刘协', + spyicong_info:'弃牌阶段结束时,你可以将任意张牌置于你的武将牌上,称为「扈」。每有一张「扈」,其他角色与你计算距离时便+1。', + spyicong:'义从', + sptuji:'突骑', + sptuji_info:'准备开始时,你将所有「扈」置于弃牌堆,然后你本回合内计算与其他角色的距离时-X。若X不大于1,你摸一张牌。(X为以此法进入弃牌堆的「扈」的数量)', + sphuangen:'皇恩', + sphuangen_info:'一名角色使用锦囊牌指定目标时,若此牌的目标数大于1,则你可以令此牌对其中的至多X个目标无效,然后摸一张牌。(X为你的体力值)', + sphantong:'汉统', + sphantong_gain:'汉统', + sphantong_info:'当你的牌因弃牌阶段的游戏规则要求而进入弃牌堆后,你可以将这些牌置于你的武将牌上,称为「诏」。一名角色的回合开始时,你可以弃置一张「诏」并获得〖护驾〗/〖激将〗/〖救援〗/〖血裔〗中的一个技能直至当前回合结束。', + spzhaoxin:'昭心', + spzhaoxin_info:'摸牌阶段结束时,你可以展示所有手牌,然后视为使用一张【杀】。', + splanggu:'狼顾', + splanggu_rewrite:'狼顾', + splanggu_info:'当你受到有来源的伤害后,你可以进行判定(此判定结果生效前,你可以打出一张手牌替换判定牌)。然后你可以观看伤害来源的手牌并弃置其中的任意张与判定结果花色相同的牌。', + spfuluan:'扶乱', + spfuluan_info:'出牌阶段限一次,你可以弃置三张花色相同的牌并选择攻击范围内的一名角色。若如此做,该角色翻面且你不能使用【杀】直到回合结束', + spshude:'淑德', + spshude_info:'结束阶段开始时,你可以将手牌补至体力上限。', + spmingjian:'明鉴', + spmingjian_info:'一名角色的回合开始时,你可以选择一项:①弃置一张牌,然后其跳过本回合的判定阶段。②将一张手牌置于其武将牌上,然后其本回合内进行判定时不触发「判定结果生效前」的时机,且其回合结束时将此牌置入弃牌堆。', + spyinzhi:'隐智', + spyinzhi_info:'当你受到1点伤害后,你可以展示牌堆顶的两张牌。若其中有黑桃牌,则你可以进行至多X次「令一名角色获得伤害来源的一张手牌」的步骤。然后获得其余的牌。(X为其中黑桃牌的数量)', + yj_caoang:'SP曹昂', + yjxuepin:'血拼', + yjxuepin_info:'出牌阶段限一次,你可以选择攻击范围内的一名角色并失去1点体力。你弃置其两张牌。若这两张牌类型相同,你回复1点体力。', + ns_chendao:'SP陈到', + nsjianglie:'将烈', + nsjianglie_info:'当你使用【杀】指定目标后,你可以令其展示所有手牌,然后弃置其中一种颜色的牌。', + ns_jiaxu:'☆贾诩', + nsyice:'遗策', + nsyice_info:'锁定技,当你使用/打出/弃置的牌进入弃牌堆后,你将这些牌以任意顺序置于你的武将牌上,称为“策”。若这些“策”中有点数相同的牌,则你获得这两张牌中的所有牌,将这两张牌置于牌堆两端。若场上没有处于濒死状态的角色,则你对一名角色造成1点伤害。', + ns_lijue:'SP李傕', + ns_zhangji:'SP张济', + nsfeixiong:'飞熊', + nsfeixiong_info:'出牌阶段开始时,你可以和一名其他角色拼点。赢的角色对没赢的角色造成1点伤害。', + nscesuan:'策算', + nscesuan_info:'锁定技,当你受到伤害时,你防止此伤害并失去一点体力上限。若你因以此法失去体力上限导致体力值减少,则你摸一张牌。', + nslulve:'掳掠', + nslulve_info:'出牌阶段限一次,你可以弃置X张牌并选择一名装备区内有牌的其他角色,然后对其造成1点伤害(X为其装备区内的牌数)。', + ns_fanchou:'SP樊稠', + nsyangwu:'扬武', + nsyangwu_info:'出牌阶段限一次,你可以弃置一张♥手牌并选择一名手牌数大于你的其他角色。你观看其手牌并获得其中的X张牌(X为其与你手牌数之差的一半且向上取整)。', + jsp_liubei:'群刘备', + jsp_liubei_ab:'刘备', + jsprende:'仁德', + jsprende_info:'出牌阶段,你可以将至少一张手牌交给其他角色;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌', + ns_caoanmin:'曹安民', + nskuishe:'窥舍', + nskuishe_info:'出牌阶段限一次,你可以选择一名其他角色A的一张牌,并将此牌交给不为A的一名角色。然后A可以对你使用一张【杀】。', + sp_xiahoushi:"SP夏侯氏", + xinfu_yanyu:"燕语", + xinfu_yanyu_info:"一名角色的出牌阶段开始时,你可以弃置一张牌。若如此做,则该出牌阶段内,当有与你弃置的牌类别相同的其他牌进入弃牌堆时,你可令任意一名角色获得此牌。每阶段以此法获得的牌不能超过三张。", + xinfu_yanyu2:"燕语", + xinfu_xiaode:"孝德", + xinfu_xiaode_info:"其他角色死亡后,你可以声明该角色武将牌上的一个技能(主公技、觉醒技、隐匿技、使命技除外)。若如此做,你获得此技能且不能再发动〖孝德〗直到你的回合结束。", + jsp_zhaoyun:'☆SP赵云', + chixin:'赤心', + chixin1:'赤心', + chixin2:'赤心', + chixin_info:'你可以将♦牌当作【杀】或【闪】使用或打出。出牌阶段,你对在你攻击范围内且本回合内未成为过你使用的【杀】的目标的角色使用的【杀】没有次数限制。', + suiren:'随仁', + suiren_info:'限定技,准备阶段开始时,你可以失去技能〖义从〗,然后加1点体力上限并回复1点体力,然后令一名角色摸三张牌。', + huangjinleishi:'黄巾雷使', + fulu:'符箓', + fulu_info:'当你声明使用普通【杀】时,你可以将此【杀】改为雷【杀】。', + fuji:'助祭', + fuji_info:'当一名角色造成雷属性伤害时,你可以令其进行判定,若结果为黑色,此伤害+1;若结果为红色,该角色获得判定牌。', + sp_pangtong:'SP庞统', + manjuan:'漫卷', + manjuan_info:'其他角色的牌因弃置而进入弃牌堆后,你可以弃置一张花色与之不同的牌,然后获得此牌。', + xinmanjuan:'漫卷', + xinmanjuan_info:'锁定技,当你不因【漫卷】或【醉乡】而获得牌时,你将此牌置入弃牌堆。然后若此时处于你的回合内,则你可以从弃牌堆中选择获得一张与此牌点数相同的其他牌。', + zuixiang:'醉乡', + zuixiang2:'醉乡', + zuixiang_info:'限定技,准备阶段开始时,你可以展示牌堆顶的3张牌并置于你的武将牌上。你不能使用或打出与该些牌同类的牌,所有同类牌对你无效。之后的每个准备阶段,你须重复展示一次,直到这些牌中任意两张点数相同。然后,你获得这些牌。', + sp_daqiao:'☆SP大乔', + yanxiao:'言笑', + yanxiao_info:'出牌阶段,你可以将一张♦牌置于一名角色的判定区内。判定区内有〖言笑〗牌的角色下个判定阶段开始时,其获得判定区里的所有牌。', + anxian:'安娴', + anxian_info:'当你使用【杀】对目标角色造成伤害时,你可以防止此伤害,令其弃置一张手牌,然后你摸一张牌;当你成为【杀】的目标后,你可以弃置一张手牌,令此【杀】对你无效,然后此【杀】的使用者摸一张牌。', + sp_ganning:'☆SP甘宁', + yinling:'银铃', + yinling_bg:'锦', + yinling_info:'出牌阶段,若你的“锦”小于四张,你可以弃置一张黑色牌并指定一名其他角色。若如此做,你将其的一张牌置于你的武将牌上,称为“锦”。', + junwei:'军威', + junwei2:'军威', + junwei_info:'结束阶段开始时,你可以移去三张“锦”。若如此做,你须指定一名角色并令其选择一项:1.展示一张【闪】,然后你将此【闪】交给一名其他角色。2.该角色失去1点体力,然后你将其装备区内的一张牌移出游戏。该角色的回合结束后,将以此法移出游戏的装备牌移回原处。', + sp_xiahoudun:'☆SP夏侯惇', + fenyong:'愤勇', + fenyong2:'愤勇', + fenyong2_bg:'勇', + fenyong_info:'每当你受到一次伤害后,你可以获得一枚「愤勇」标记;当你拥有「愤勇」标记时,防止你受到的所有伤害。', + xuehen:'雪恨', + xuehen_info:'每个角色的结束阶段开始时,若你有愤勇标记,你弃置之,然后选择一项:1.弃置当前回合角色X张牌(X为你已损失的体力值);2.视为对一名任意角色使用一张【杀】。', + sp_lvmeng:'☆SP吕蒙', + tanhu:'探虎', + tanhu2:'探虎', + tanhu3:'探虎', + tanhu_info:'出牌阶段限一次,你可以与一名其他角色拼点。若你赢,你获得以下效果直到回合结束:你与该角色的距离为1,你对该角色使用的普通锦囊牌不能被【无懈可击】响应。', + mouduan:'谋断', + mouduan_info:'游戏开始时,你获得标记“武”并获得技能〖激昂〗和〖谦逊〗。当你失去手牌后,若手牌数不大于2,你须将你的标记变为“文”,将这两项技能改为〖英姿〗和〖克己〗。一名角色的回合开始前,你可弃一张牌将标记翻回。', + sp_zhangfei:'☆SP张飞', + jie:'嫉恶', + jie_info:'锁定技,当你使用红色【杀】造成伤害时,此伤害+1。', + dahe:'大喝', + dahe2:'大喝', + dahe2_bg:'喝', + dahe_info:'出牌阶段限一次,你可以与一名其他角色拼点。若你赢,该角色不能使用或打出不为♥花色的【闪】直到回合结束,且你可将该角色拼点的牌交给场上一名体力不多于你的角色。若你没赢,你须展示手牌并弃置其中的一张。', + sp_liubei:'☆SP刘备', + zhaolie:'昭烈', + zhaolie_info:'摸牌阶段摸牌时,你可以少摸一张牌并指定攻击范围内的一名角色。你展示牌堆顶的三张牌,将其中的非基本牌和【桃】置于弃牌堆,然后该角色选择一项:1.你对其造成X点伤害,然后其获得这些基本牌;2.其弃置X张牌,然后你获得这些基本牌。(X为其中非基本牌的数量)', + shichou:'誓仇', + shichou2:'誓仇', + shichou_info:'主公技,限定技,准备阶段,你可指定一名蜀势力角色并交给其两张牌。本局游戏中,当你受到伤害时,改为该角色受到等量的伤害并摸等量的牌,直至该角色第一次进入濒死状态。', + + offline_star:'桌游志·SP', + offline_sticker:'桌游志·贴纸', + offline_luanwu:'文和乱武', + offline_yongjian:'用间篇', + offline_s:'线下S系列', + }, + }; +}); diff --git a/character/rank.js b/character/rank.js index 501377232..3088f0960 100644 --- a/character/rank.js +++ b/character/rank.js @@ -693,6 +693,7 @@ window.noname_character_rank={ 'tangji', 'gaogan', 'sp_xunchen', + 'duxi', ], b:[ 'diy_feishi', @@ -1706,6 +1707,7 @@ window.noname_character_rank={ 'tangji', 'gaogan', 'caizhenji', + 'duxi', ], junk:[ 'sunshao', diff --git a/character/sp.js b/character/sp.js index ee00ff68d..bfd6c4f78 100755 --- a/character/sp.js +++ b/character/sp.js @@ -5,11 +5,9 @@ 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'], + 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_tongque:["liuxie","lingju","fuwan","sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], - sp_star:["sp_xiahoushi","jsp_zhaoyun","huangjinleishi","sp_pangtong","sp_daqiao","sp_ganning","sp_xiahoudun","sp_lvmeng","sp_zhangfei","sp_liubei"], - sp_sticker:['sp_gongsunzan','sp_simazhao','sp_wangyuanji','sp_xinxianying','sp_liuxie'], sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","luyusheng","sp_mifangfushiren","huaxin"], sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","zongyu"], //sp_single:["niujin"], @@ -18,6 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, characterFilter:{}, character:{ + duxi:['male','wei',3,['quxi','bixiong']], gaogan:['male','qun',4,['juguan']], sp_mifangfushiren:['male','shu',4,['mffengshi']], huangchengyan:['male','qun',3,['guanxu','yashi']], @@ -38,11 +37,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caiyang:['male','qun',1,['yinka','zhuixi'],['forbidai','unseen']], panfeng:['male','qun',4,['kuangfu']], sunshao:['male','wu',3,['bizheng','yidian']], - sp_gongsunzan:['male','qun',4,['spyicong','sptuji']], - sp_simazhao:['male','wei',3,['spzhaoxin','splanggu']], - sp_wangyuanji:['female','wei',3,['spfuluan','spshude']], - sp_xinxianying:['female','wei',3,['spmingjian','spyinzhi']], - sp_liuxie:['male','qun',3,['sphuangen','sphantong']], huangfusong:['male','qun',4,['xinfenyue']], yuantanyuanshang:['male','qun',4,['neifa']], @@ -55,9 +49,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ simahui:["male","qun",3,["xinfu_jianjie","xinfu_chenghao","xinfu_yinshi"],[]], baosanniang:["female","shu",4,["olwuniang","olxushen"],[]], - sp_xiahoushi:["female","shu",3,["xinfu_yanyu","xinfu_xiaode"],[]], - - yangxiu:['male','wei',3,['jilei','danlao']], chenlin:['male','wei',3,['bifa','songci']], caohong:['male','wei',4,['yuanhu']], @@ -65,7 +56,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuanshu:['male','qun',4,['yongsi','weidi']], sp_diaochan:['female','qun',3,['lihun','rebiyue']], sp_zhaoyun:['male','qun',3,['ollongdan','chongzhen']], - jsp_zhaoyun:['male','qun',3,['chixin','reyicong','suiren']], liuxie:['male','qun',3,['tianming','mizhao']], zhugejin:['male','wu',3,['hongyuan','huanshi','mingzhe']], zhugeke:['male','wu',3,['aocai','duwu']], @@ -77,9 +67,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoang:['male','wei',4,['kaikang']], sp_caoren:['male','wei',4,['weikui','lizhan']], zhangbao:['male','qun',3,['rezhoufu','reyingbing']], - huangjinleishi:['female','qun',3,['fulu','fuji']], maliang:['male','shu',3,['zishu','xinyingyuan']], - sp_pangtong:['male','qun',3,['xinmanjuan','zuixiang']], zhugedan:['male','wei',4,['gongao','juyi']], sp_jiangwei:['male','wei',4,['kunfen','fengliang']], sp_machao:['male','qun',4,['zhuiji','ol_shichou']], @@ -94,7 +82,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lingju:['female','qun',3,['jieyuan','fenxin']], cuiyan:['male','wei',3,['yawang','xunzhi']], - sp_zhangfei:['male','shu',4,['jie','dahe']], jsp_guanyu:['male','wei',4,['new_rewusheng','danji']], jsp_huangyueying:['female','qun',3,['jiqiao','linglong']], sunluyu:['female','wu',3,['new_meibu','new_mumu']], @@ -102,10 +89,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zumao:['male','wu',4,['yinbing','juedi']], wenpin:['male','wei',4,['zhenwei']], daxiaoqiao:['female','wu',3,['new_xingwu','new_luoyan']], - sp_daqiao:['female','wu',3,['yanxiao','anxian']], - sp_ganning:['male','qun',4,['yinling','junwei']], - sp_xiahoudun:['male','wei',4,['fenyong','xuehen'],['die_audio']], - sp_lvmeng:['male','wu',3,['tanhu','mouduan']], guansuo:['male','shu',4,['xinzhengnan','xiefang']], tadun:['male','qun',4,['reluanzhan']], @@ -120,7 +103,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mizhu:['male','shu',3,['ziyuan','jugu']], buzhi:['male','wu',3,['hongde','dingpan']], - sp_liubei:['male','shu',4,['zhaolie','shichou'],['zhu']], caochun:['male','wei',4,['xinshanjia']], dongbai:['female','qun',3,['lianzhu','xiehui']], @@ -164,6 +146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ //kaisa:["male","western",4,["zhengfu"]], }, characterIntro:{ + duxi:'杜袭(生卒年不详),字子绪,颍川郡定陵县(今河南省襄城县)人。三国时期魏国重臣,东汉末年颍川“四大名士”之一,济阴太守杜根的孙子。建安初年,投奔司空曹操,历任西鄂县令、议郎、丞相军咨祭酒、魏王侍中、丞相长史、驸马都尉。魏文帝时期,出任督军粮御史、尚书,累封武平亭侯。魏明帝时期,担任大将军曹真和司马懿的军师,抵御蜀国进攻,拜太中大夫,受封平阳乡侯。卒于任上,获赠少府,谥号为定。', gaogan:'高干(?~206年),字元才,陈留郡圉县(今河南杞县圉镇)人。东汉末年并州割据将领,蜀郡太守高躬之子、大将军袁绍外甥。出身陈留高氏,才志弘邈,文武秀出。早年联合荀谌游说韩馥让出冀州牧。袁绍平定河北后,以为并州牧。官渡之战时,在西线配合作战。因曹操早有准备,没有实质进展。袁绍死后,袁谭、袁尚与曹操大战于黎阳郡时,联合郭援攻打平阳郡,为马腾为首关中将领所败,郭援为庞德所斩。袁尚败走中山郡后,出降于曹操,仍为并州刺史。建安十年,兴兵反曹,固守壶关,成功抵挡乐进进攻。得知曹操亲征后,留下别将守城,亲往匈奴呼厨泉求救,没有成功。引兵攻略河东郡,屡为钟繇、张既所败。建安十一年,投奔荆州刘表。途经上洛时,为上洛都尉捕斩之。', huangchengyan:'黄承彦,生卒年不详,汉末三国时期沔阳名士,诸葛亮岳父,黄月英之父。南郡大士蔡讽的女婿,与襄阳名士上层社会圈子:庞统(凤雏)、庞德公、司马徽、徐庶等人交好。《襄阳记》:黄承彦者,高爽开列,为沔阳名士,谓诸葛孔明曰:“闻君择妇,身有丑女,黄头黑色,而才堪配。”孔明许,即载送之。时人以为笑乐,乡里为之谚曰:“莫作孔明择妇,正得阿承丑女。”', panshu:'潘淑(?-252年),会稽句章(今浙江省宁波市)人,是吴大帝孙权的皇后,吴少帝孙亮的母亲。和孙权是中国历代帝后中年龄差距较大的一对。潘淑少时与姐姐俱没入织室,容媚有宠,拜为夫人,生有一子孙亮。赤乌十三年(250年),孙权立孙亮为皇太子,翌年(251年)立潘淑为皇后。神凤元年(252年)暴崩,合葬蒋陵。世称潘淑为江东绝色,有神女之称。', @@ -191,7 +174,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hansui:'韩遂(?-215年),字文约。凉州金城郡人。东汉末年军阀、将领,汉末群雄之一。原名韩约,后改名遂。韩遂最初闻名于西州,被羌胡叛军劫持并推举为首领,以诛宦官为名举兵造反,聚众十万,先后败皇甫嵩、张温、董卓、孙坚等名将,使得天下骚动。后受朝廷招安,拥兵割据一方长达三十余年。韩遂曾与马腾结为异姓兄弟,后二人关系破裂。袁绍、曹操相争之际,马腾、韩遂被钟繇说服,依附于曹操。马腾入京后,留其子马超统领部队。马超推举韩遂为都督起兵反叛曹操,为曹操所败,韩遂逃奔凉州,后又为夏侯渊所败,病死(一说被杀),享年七十余岁。', niujin:'牛金(生卒年不详),初为曹仁部曲将,周瑜军数万人来攻,前锋数千人始至,曹仁登城望,乃募得三百人,遣牛金迎战。但对方兵力较多,牛金遂被围困。曹仁亲自杀入阵中救出牛金。司马懿使牛金轻骑饵诱蜀军,刚交战诸葛亮就退兵,追至祁山。蜀将马岱入寇,司马懿遣将军牛金击退,斩千余级。公孙渊反,司马懿帅牛金、胡遵等步骑四万发自洛阳,后平定辽东。牛金官至后将军。', jianggan:"蒋干,字子翼,汉末三国时期的人物,九江(治今安徽寿县)人。历史上的蒋干是当时的名士、辩论家。而罗贯中在历史小说《三国演义》中则将蒋干刻画成了被周瑜所愚弄的小丑形象。", - huangjinleishi:"黄巾军中负责施法的女祭司二人组。", caoying:"曹婴是在电影《三国志之见龙卸甲》中登场的虚拟人物,由李美琪饰演。曹婴是曹操的孙女,弓马娴熟,文武双全,深得曹操的用兵之道及心术。于凤鸣山一战中担任魏军大都督阻止诸葛亮北伐并因罗平安的告密而全歼关兴、张苞、赵云率领的蜀军部队。", simahui:"司马徽(约145—208年),字德操,颍川阳翟(今河南禹州)人。东汉末年名士,精通道学、奇门、兵法、经学。有“水镜先生”之称。 司马徽为人清雅,学识广博,有知人之明,并向刘备推荐了诸葛亮、庞统等人,受到世人的敬重。", @@ -315,23 +297,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ simazhao:['wangyuanji'], }, card:{ - yanxiao_card:{ - type:'delay', - judge:function(card){ - return 0; - }, - effect:function(){}, - ai:{ - basic:{ - order:1, - useful:1, - value:8, - }, - result:{ - target:1 - }, - } - }, wy_meirenji:{ fullskin:true, vanish:true, @@ -432,6 +397,163 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //杜袭 + quxi:{ + audio:2, + trigger:{player:'phaseUseEnd'}, + direct:true, + limited:true, + skillAnimation:true, + animationColor:'water', + filter:function(event,player){ + if(player.isTurnedOver()) return false; + var list=game.filterPlayer((target)=>target!=player&&!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose')); + if(list.length<2) return false; + var nf=list[0].countCards('h'); + for(var i=1;ihs&&!current.hasMark('quxi_gain')&&!current.hasMark('quxi_lose'); + })) return get.attitude(player,target)/(Math.sqrt(1+target.countCards('h'))); + return 0; + } + return -get.attitude(_status.event.player,target); + }); + 'step 1' + if(result.bool){ + player.logSkill('quxi',result.targets); + player.awakenSkill('quxi'); + player.skip('phaseDiscard'); + if(result.targets[0].countCards('h')>result.targets[1].countCards('h')) result.targets.reverse(); + event.gainner=result.targets[0]; + event.giver=result.targets[1]; + player.turnOver(); + } + else event.finish(); + 'step 2' + event.gainner.gainPlayerCard(event.giver,true,'he'); + 'step 3' + player.addSkill('quxi_effect'); + event.gainner.addMark('quxi_gain',1); + event.giver.addMark('quxi_lose',1); + }, + subSkill:{ + effect:{ + global:'quxi_gainlose', + trigger:{global:['roundStart','die']}, + charlotte:true, + direct:true, + filter:function(event,player){ + if(event.name=='die') return event.player.countMark('quxi_gain')>0||event.player.countMark('quxi_lose')>0; + return game.hasPlayer(function(target){ + return target!=player&&(target.countMark('quxi_gain')>0||target.countMark('quxi_lose')>0) + }); + }, + content:function(){ + 'step 0' + if(trigger.name=='die'){ + var gain=trigger.player.countMark('quxi_gain'),lose=trigger.player.countMark('quxi_lose'); + player.chooseTarget('是否令一名角色获得'+get.translation(trigger.player)+'的“'+(gain&&lose?'丰”和“歉':(gain?'丰':'歉'))+'”标记?',function(card,player,target){ + return target!=player&&!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'); + }).set('goon',gain-lose).set('ai',function(target){ + var evt=_status.event; + return evt.goon*get.attitude(evt.player,target); + }); + } + else player.chooseTarget(2,'是否转移“丰”或“歉”标记?',function(card,player,target){ + if(player==target) return false; + if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose')); + return target.countMark('quxi_gain')>0||target.countMark('quxi_lose')>0; + }).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){ + var player=_status.event.player; + if(!ui.selected.targets.length){ + return -get.attitude(player,target)*(target.countMark('quxi_gain')-target.countMark('quxi_lose')); + } + var targetx=ui.selected.targets[0]; + return get.attitude(player,target)*(targetx.countMark('quxi_gain')-targetx.countMark('quxi_lose')); + }); + 'step 1' + if(result.bool){ + var targets=result.targets; + if(targets.length<2) targets.unshift(trigger.player); + player.logSkill('quxi_effect',targets,false); + player.line2(targets); + var gain=targets[0].countMark('quxi_gain'),lose=targets[0].countMark('quxi_lose'); + if(gain){ + targets[0].removeMark('quxi_gain',gain); + targets[1].addMark('quxi_gain',gain); + } + if(lose){ + targets[0].removeMark('quxi_lose',lose); + targets[1].addMark('quxi_lose',lose); + } + game.delayx(); + } + }, + }, + gainlose:{ + trigger:{player:'phaseDrawBegin'}, + forced:true, + filter:function(event,player){ + if(event.numFixed) return false; + return player.countMark('quxi_gain')-player.countMark('quxi_lose')!=0; + }, + content:function(){ + trigger.num+=(player.countMark('quxi_gain')-player.countMark('quxi_lose')); + }, + }, + gain:{ + marktext:'丰', + intro:{ + name:'驱徙(丰)', + name2:'丰', + content:'mark', + }, + }, + lose:{ + marktext:'歉', + intro:{ + name:'驱徙(歉)', + name2:'歉', + content:'mark', + }, + }, + }, + }, + bixiong:{ + trigger:{player:'loseAfter'}, + forced:true, + filter:function(event,player){ + return event.type=='discard'&&event.getParent('phaseDiscard').player==player&&event.hs&&event.hs.length>0; + }, + content:function(){ + var cards=[]; + for(var i of trigger.hs) cards.add(get.suit(i,player)); + player.addTempSkill('bixiong2',{player:'phaseBegin'}); + player.markAuto('bixiong2',cards); + }, + }, + bixiong2:{ + onremove:true, + mod:{ + targetEnabled:function(card,player,target){ + if(target.getStorage('bixiong2').contains(get.suit(card))) return false; + }, + }, + intro:{content:'不能成为$牌的目标'}, + }, //高干 juguan:{ audio:2, @@ -485,7 +607,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, subSkill:{ effect:{ - trigger:{source:'damage'}, + trigger:{global:'damage'}, forced:true, charlotte:true, firstDo:true, @@ -493,7 +615,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ popup:false, filter:function(event,player){ var evt=event.getParent('useCard'); - return event.card&&evt&&event.card==evt.card&&evt.skill=='juguan_backup'; + return event.card&&evt&&event.card==evt.card&&evt.skill=='juguan_backup'&&evt.player==player; }, content:function(){ player.addSkill('juguan_draw'); @@ -582,7 +704,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.addSkill('olzhennan'); player.recover(1-player.hp); 'step 1' - if(player.isDying()||game.hasPlayer(function(current){ + if(!player.isDying()&&!game.hasPlayer(function(current){ return current.name1=='guansuo'||current.name2=='guansuo'; })){ player.chooseTarget(function(card,player,current){ @@ -2835,411 +2957,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ expose:0.25, }, }, - //桌游志贴纸 - spyinzhi:{ - trigger:{player:'damageEnd'}, - frequent:true, - content:function(){ - 'step 0' - event.count=trigger.num; - 'step 1' - event.count--; - var cards=game.cardsGotoOrdering(get.cards(2)).cards; - player.showCards(cards); - event.count2=0; - for(var i=0;i0){ - player.chooseTarget('令一名角色获得'+get.translation(trigger.source)+'的一张手牌',function(card,player,target){ - var source=_status.event.source; - return target!=source&&source.countGainableCards(target,'h')>0; - }).set('source',trigger.source); - } - else event.goto(4); - 'step 3' - if(result.bool){ - var target=result.targets[0]; - player.line([trigger.source,target],'green'); - target.gainPlayerCard(trigger.source,'h',true); - if(event.count2) event.goto(2) - } - 'step 4' - if(cards.length) player.gain(cards,'gain2','log'); - 'step 5' - if(event.count>0){ - player.chooseBool(get.prompt2('spyinzhi')).set('frequentSkill','spyinzhi'); - } - else event.finish(); - 'step 6' - if(result.bool){ - player.logSkill('spyinzhi'); - event.goto(1); - }; - }, - }, - spmingjian:{ - trigger:{global:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - var next=player.chooseCard(get.prompt2('spmingjian',trigger.player),'he'); - next.set('ai',function(card){ - var target=_status.event.getTrigger().player; - var player=_status.event.player; - if(get.attitude(player,target)>0&&target.countCards('j')>0) return 5-get.value(card); - return -1; - }); - next.set('filterCard',function(card,player){ - if(get.position(card)=='e') return lib.filter.cardDiscardable.apply(this,arguments); - return true; - }); - //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}; - else if(!lib.filter.cardDiscardable(card,player,event)) event._result={index:1}; - else{ - var name=get.translation(trigger.player); - player.chooseControl().set('choiceList',[ - '令'+name+'跳过本回合的判定阶段', - '令'+name+'于本回合的判定中不触发「判定结果生效前」的时机', - ]).set('ai',function(){return 0}); - } - } - else event.finish(); - 'step 2' - if(result.index==0){ - player.discard(card); - trigger.player.skip('phaseJudge'); - } - else{ - player.lose(card,ui.special,'toStorage'); - trigger.player.addSkill('spmingjian_charlotte'); - trigger.player.storage.spmingjian_charlotte.add(card); - trigger.player.markSkill('spmingjian_charlotte'); - } - }, - ai:{ - expose:0.25, - }, - }, - spmingjian_charlotte:{ - trigger:{player:['judgeBefore','phaseAfter']}, - forced:true, - firstDo:true, - silent:true, - popup:false, - charlotte:true, - content:function(){ - if(trigger.name=='phase') player.removeSkill(event.name); - else trigger.noJudgeTrigger=true; - }, - init:function(player,skill){ - if(!player.storage[skill]) player.storage[skill]=[]; - }, - marktext:'鉴', - intro:{ - name:'明鉴', - content:'cards', - onunmark:'throw', - }, - }, - spshude:{ - trigger:{player:'phaseJieshuBegin'}, - frequent:true, - filter:function(event,player){ - return player.countCards('h')2; - return get.suit(card)==get.suit(ui.selected.cards[0]); - }, - content:function(){ - target.turnOver(); - player.addTempSkill('spfuluan2'); - }, - ai:{ - order:1, - result:{ - target:function(player,target){ - if(target.isTurnedOver()) return 2; - return -1; - }, - }, - }, - }, - spfuluan2:{ - mod:{ - cardEnabled:function(card){ - if(card.name=='sha') return false; - }, - }, - }, - spzhaoxin:{ - trigger:{player:'phaseDrawEnd'}, - check:function(event,player){ - return player.getUseValue({name:'sha',isCard:true})>0; - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.showHandcards(); - 'step 1' - player.chooseUseTarget('sha',false); - }, - }, - splanggu:{ - trigger:{player:'damageEnd'}, - filter:function(event,player){ - return get.itemtype(event.source)=='player'; - }, - logTarget:'source', - content:function(){ - 'step 0' - player.judge(); - 'step 1' - if(trigger.source.countCards('h')>0){ - var next=player.discardPlayerCard(trigger.source,'h',[1,Infinity]); - next.set('suit',result.suit); - next.set('filterButton',function(button){ - return get.suit(button.link)==_status.event.suit; - }); - next.set('visible',true); - } - }, - group:'splanggu_rewrite', - }, - splanggu_rewrite:{ - trigger:{player:'judge'}, - filter:function (event,player){ - return player.countCards('hs')>0&&event.getParent().name=='splanggu'; - }, - direct:true, - content:function (){ - "step 0" - player.chooseCard('狼顾的判定结果为'+ - get.translation(trigger.player.judging[0])+',是否打出一张手牌进行代替?','hs',function(card){ - var player=_status.event.player; - var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); - if(mod2!='unchanged') return mod2; - var mod=game.checkMod(card,player,'unchanged','cardRespondable',player); - if(mod!='unchanged') return mod; - return true; - }).set('ai',function(card){ - return -1; - }); - "step 1" - if(result.bool){ - player.respond(result.cards,'highlight','splanggu','noOrdering'); - } - else{ - event.finish(); - } - "step 2" - if(result.bool){ - if(trigger.player.judging[0].clone){ - trigger.player.judging[0].clone.classList.remove('thrownhighlight'); - game.broadcast(function(card){ - if(card.clone){ - card.clone.classList.remove('thrownhighlight'); - } - },trigger.player.judging[0]); - game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); - } - game.cardsDiscard(trigger.player.judging[0]); - trigger.player.judging[0]=result.cards[0]; - trigger.orderingCards.addArray(result.cards); - game.log(trigger.player,'的判定牌改为',result.cards[0]); - game.delay(2); - } - }, - }, - sphantong:{ - trigger:{player:'loseEnd'}, - frequent:true, - filter:function(event,player){ - return event.type=='discard'&&event.getParent(3).name=='phaseDiscard'&&event.cards.filterInD('d').length>0; - }, - content:function(){ - if(!player.storage.sphantong) player.storage.sphantong=[]; - var cards=trigger.cards.filterInD('d'); - player.storage.sphantong.addArray(cards); - player.$gain2(cards); - game.log(player,'将',cards,'置于武将牌上'); - player.markSkill('sphantong'); - }, - group:['sphantong_gain'], - derivation:['hujia','jijiang','jiuyuan','xueyi'], - marktext:'诏', - intro:{ - content:'cards', - onunmark:'throw', - }, - }, - sphantong_gain:{ - trigger:{global:'phaseBegin'}, - direct:true, - filter:function(event,player){ - return player.storage.sphantong&&player.storage.sphantong.length>0; - }, - content:function(){ - 'step 0' - player.chooseButton([get.prompt('sphantong'),player.storage.sphantong],function(button){return -1}); - 'step 1' - if(result.bool){ - player.logSkill('sphantong'); - var card=result.links[0]; - player.$throw(card); - game.log(player,'将',card,'置入了弃牌堆'); - player.storage.sphantong.remove(card); - player[player.storage.sphantong.length>0?'markSkill':'unmarkSkill']('sphantong'); - game.cardsDiscard(card); - var list=['hujia','jijiang','jiuyuan','xueyi']; - for(var i=0;i0) player.chooseControl(list).set('prompt','选择获得以下技能中的一个'); - else event.finish(); - } - else event.finish(); - 'step 2' - var skill=result.control; - player.addTempSkill(skill); - if(!player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong=[]; - player.storage.zhuSkill_sphantong.add(skill); - player.popup(skill,'wood'); - game.log(player,'获得了技能','#g【'+get.translation(skill)+'】'); - var next=game.createEvent('sphantong_clear',false); - event.next.remove(next); - trigger.after.push(next); - next.player=player; - next.skill=skill; - next.setContent(function(){ - if(player.storage.zhuSkill_sphantong) player.storage.zhuSkill_sphantong.remove(event.skill); - }) - }, - }, - sphuangen:{ - trigger:{global:'useCardToPlayered'}, - filter:function(event,player){ - if(!event.isFirstTarget) return false; - if(get.type(event.card)!='trick') return false; - if(get.info(event.card).multitarget) return false; - if(event.targets.length<2) return false; - return player.hp>0; - }, - direct:true, - content:function(){ - "step 0" - player.chooseTarget(get.prompt('sphuangen'), - [1,Math.min(player.hp,trigger.targets.length)],function(card,player,target){ - return _status.event.targets.contains(target); - }).set('ai',function(target){ - return -get.effect(target,trigger.card,trigger.player,_status.event.player); - }).set('targets',trigger.targets); - "step 1" - if(result.bool){ - player.logSkill('sphuangen',result.targets); - trigger.excluded.addArray(result.targets); - player.draw(); - } - }, - }, - spyicong:{ - trigger:{player:'phaseDiscardEnd'}, - direct:true, - filter:function(event,player){ - return player.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.chooseCard('he',[1,player.countCards('he')],get.prompt2('spyicong')).set('ai',function(card){ - if(card.name=='du') return 10; - if(ui.selected.cards.length) return -1; - return 4-get.value(card); - }); - 'step 1' - if(result.bool){ - player.logSkill('spyicong'); - if(!player.storage.spyicong) player.storage.spyicong=[]; - player.storage.spyicong.addArray(result.cards); - player.$giveAuto(result.cards.length,player,false); - game.log(player,'扣置了'+get.cnNumber(player.lose(result.cards,'toStorage',ui.special).cards.length)+'张【扈】'); - player.markSkill('spyicong'); - } - }, - mod:{ - globalTo:function(from,to,num){ - if(to.storage.spyicong&&to.storage.spyicong.length) return num+to.storage.spyicong.length; - }, - }, - marktext:'扈', - intro:{ - name:'义从', - content:'cardCount', - onunmark:'throw', - }, - }, - sptuji:{ - trigger:{player:'phaseZhunbeiBegin'}, - forced:true, - filter:function(event,player){ - return player.storage.spyicong&&player.storage.spyicong.length>0; - }, - content:function(){ - var num=player.storage.spyicong.length; - player.addMark('sptuji2',num,false); - player.addTempSkill('sptuji2'); - player.unmarkSkill('spyicong'); - if(num<=1) player.draw(); - }, - }, - sptuji2:{ - onremove:true, - charlotte:true, - mod:{ - globalFrom:function(from,to,num){ - return num-from.countMark('sptuji2'); - }, - }, - marktext:'突', - intro:{ - name:'突骑', - content:'至其他角色的距离-#', - }, - }, //二袁 neifa:{ audio:2, @@ -7681,243 +7398,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - shichou:{ - //audio:1, - skillAnimation:true, - animationColor:'orange', - unique:true, - limited:true, - mark:false, - trigger:{player:'phaseZhunbeiBegin'}, - zhuSkill:true, - direct:true, - filter:function(event,player){ - if(!player.hasZhuSkill('shichou'))return false; - if(player.countCards('he')<2) return false; - return game.hasPlayer(function(current){ - return current!=player&¤t.group=='shu'; - }); - }, - init:function(player){ - if(player.hasZhuSkill('shichou')){ - player.markSkill('shichou'); - player.storage.shichou=false; - } - }, - content:function(){ - "step 0" - player.chooseCardTarget({ - prompt:get.prompt2('shichou'), - selectCard:2, - filterTarget:function(card,player,target){ - return target.group=='shu'&&target!=player; - }, - filterCard:true, - position:'he', - ai1:function(card){ - return 7-get.value(card); - }, - ai2:function(target){ - var player=_status.event.player; - if(player.hasUnknown()) return 0; - var att=get.attitude(player,target); - if(att<=0){ - if(target.hp==1) return (10-att)/2; - return 10-att; - } - else{ - if(target.hp==1) return 0; - return (10-att)/4; - } - }, - }); - "step 1" - if(!result.bool) return; - var target=result.targets[0]; - var cards=result.cards; - player.storage.shichou=true; - player.logSkill('shichou',target); - player.awakenSkill('shichou'); - target.gain(cards,player,'giveAuto'); - player.storage.shichou_target=target; - player.addSkill('shichou2'); - target.markSkillCharacter('shichou',player,'誓仇','代替'+get.translation(player)+'承受伤害直到首次进入濒死状态'); - }, - intro:{ - content:'limited' - }, - }, - shichou2:{ - group:'shichou3', - trigger:{player:'damageBegin3'}, - forced:true, - popup:false, - content:function(){ - trigger.player=player.storage.shichou_target; - trigger.shichou4=true; - trigger.player.addSkill('shichou4'); - player.logSkill('shichou2',player.storage.shichou_target); - game.delay(0.5); - }, - ai:{ - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')){ - if(player.hasSkillTag('jueqing',false,target)) return [1,-2]; - if(get.attitude(player,target)>0) return [0,0]; - var eff=get.damageEffect(target.storage.shichou_target,player,target); - if(eff>0){ - return [0,1]; - } - else if(eff<0){ - return [0,-2]; - } - else{ - return [0,0]; - } - } - } - } - } - }, - shichou3:{ - trigger:{global:['dying','dieBegin']}, - forced:true, - popup:false, - //priority:10, - filter:function(event,player){ - return event.player==player.storage.shichou_target; - }, - content:function(){ - trigger.player.unmarkSkill('shichou'); - delete player.storage.shichou_target; - player.removeSkill('shichou2'); - } - }, - shichou4:{ - trigger:{player:['damageAfter','damageCancelled']}, - forced:true, - popup:false, - audio:false, - content:function(){ - if(!trigger.shichou4) return; - if(event.triggername=='damageAfter'&&trigger.num){ - player.draw(trigger.num); - } - player.removeSkill('shichou4'); - } - }, - zhaolie:{ - trigger:{player:'phaseDrawBegin2'}, - direct:true, - filter:function(event,player){ - return !event.numFixed; - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('zhaolie'),function(card,player,target){ - return target!=player&&player.inRange(target); - }).set('ai',function(target){ - var player=_status.event.player; - if(get.attitude(player,target)>0) return 0; - return get.damageEffect(target,player,player); - }); - 'step 1' - if(result.bool){ - trigger.num--; - player.storage.zhaolie=result.targets[0]; - player.logSkill('zhaolie',result.targets); - player.addTempSkill('zhaolie2','phaseDrawAfter'); - } - } - }, - zhaolie2:{ - trigger:{player:'phaseDrawEnd'}, - forced:true, - popup:false, - content:function(){ - 'step 0' - event.cards=get.cards(3); - player.showCards(event.cards); - 'step 1' - event.basic=[]; - event.nonbasic=[]; - event.todis=[]; - for(var i=0;i1?0:7-get.value(card); - case 2:return 8-get.value(card); - case 3:return 10-get.value(card); - default:return 0; - } - }).set('num',num); - } - 'step 2' - var num=event.nonbasic.length; - var undone=false; - if(num==0){ - if(event.basic.length){ - result.targets[0].gain(event.basic,'gain2','log'); - } - } - else{ - if(result.bool){ - if(event.basic.length){ - player.gain(event.basic,'gain2','log'); - } - } - else{ - player.storage.zhaolie.damage(num); - if(event.basic.length){ - undone=true; - } - } - } - if(!undone){ - delete player.storage.zhaolie; - event.finish(); - } - 'step 3' - if(player.storage.zhaolie.isAlive()){ - player.storage.zhaolie.gain(event.basic,'gain2','log'); - } - else{ - game.cardsDiscard(event.basic); - } - delete player.storage.zhaolie; - } - }, dingpan:{ enable:'phaseUse', filter:function(event,player){ @@ -9183,122 +8663,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, ai:{combo:'qizhi'}, }, - mouduan:{ - audio:1, - init2:function(player){ - game.broadcastAll(function(player){ - player._mouduan_mark=player.mark('武',{ - content:'拥有技能【激昂】、【谦逊】' - }); - },player); - player.addAdditionalSkill('mouduan',['jiang','qianxun']); - }, - onremove:function(player){ - game.broadcastAll(function(player){ - if(player._mouduan_mark){ - player._mouduan_mark.delete(); - delete player._mouduan_mark; - } - },player); - player.removeAdditionalSkill('mouduan'); - }, - trigger:{player:'loseEnd'}, - forced:true, - filter:function(event,player){ - return player._mouduan_mark&&player._mouduan_mark.name=='武'&&player.countCards('h')<=2; - }, - content:function(){ - game.broadcastAll(function(player){ - if(!player._mouduan_mark) return; - player._mouduan_mark.name='文'; - player._mouduan_mark.skill='文'; - player._mouduan_mark.firstChild.innerHTML='文'; - player._mouduan_mark.info.content='拥有技能【英姿】、【克己】'; - },player); - player.addAdditionalSkill('mouduan',['yingzi','keji']); - }, - group:'mouduan2' - }, - mouduan2:{ - audio:1, - trigger:{global:'phaseZhunbeiBegin'}, - //priority:5, - filter:function(event,player){ - return player._mouduan_mark&&player._mouduan_mark.name=='文'&&player.countCards('h')>2; - }, - direct:true, - content:function(){ - 'step 0' - player.chooseToDiscard('he','谋断:是否弃置一张牌将标记变为“武”?').ai=function(){ - return -1; - } - 'step 1' - if(result.bool&&player.countCards('h')>2){ - game.broadcastAll(function(player){ - if(!player._mouduan_mark) return; - player._mouduan_mark.name='武'; - player._mouduan_mark.skill='武'; - player._mouduan_mark.firstChild.innerHTML='武'; - player._mouduan_mark.info.content='拥有技能【激昂】、【谦逊】'; - },player); - player.addAdditionalSkill('mouduan',['jiang','qianxun']); - } - } - }, - tanhu:{ - audio:1, - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return player.canCompare(target); - }, - filter:function(event,player){ - return player.countCards('h')>0; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target); - 'step 1' - if(result.bool){ - target.addTempSkill('tanhu2'); - } - }, - ai:{ - result:{ - target:function(player,target){ - var hs=player.getCards('h'); - if(hs.length<3) return 0; - var bool=false; - for(var i=0;i=9&&get.value(hs[i])<7){ - bool=true; - break; - } - } - if(!bool) return 0; - return -1; - } - }, - order:9, - }, - group:'tanhu3' - }, - tanhu2:{ - mark:true, - intro:{ - content:'已成为探虎目标' - } - }, - tanhu3:{ - mod:{ - globalFrom:function(from,to){ - if(to.hasSkill('tanhu2')) return -Infinity; - }, - wuxieRespondable:function(card,player,target){ - if(target&&target.hasSkill('tanhu2')) return false; - } - } - }, jiaozi:{ audio:2, trigger:{player:'damageBegin3',source:'damageBegin1'}, @@ -9399,78 +8763,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, - fenyong:{ - audio:2, - trigger:{player:'damageEnd'}, - content:function(){ - player.addTempSkill('fenyong2'); - } - }, - fenyong2:{ - audio:'fenyong', - mark:true, - intro:{ - content:'防止你受到的所有伤害' - }, - trigger:{player:'damageBegin3'}, - forced:true, - content:function(){ - trigger.cancel(); - }, - ai:{ - maixie:true, - maixie_hp:true, - nofire:true, - nothunder:true, - nodamage:true, - effect:{ - target:function(card,player,target,current){ - if(get.tag(card,'damage')) return [0,0]; - } - }, - } - }, - xuehen:{ - audio:2, - trigger:{global:'phaseJieshuBegin'}, - forced:true, - filter:function(event,player){ - return player.hasSkill('fenyong2')&&event.player.isAlive(); - }, - content:function(){ - 'step 0' - player.removeSkill('fenyong2'); - player.chooseControl('弃牌','出杀',function(){ - var player=_status.event.player; - var trigger=_status.event.getTrigger(); - if(get.attitude(player,trigger.player)<0){ - var he=trigger.player.countCards('he'); - if(he<2) return '出杀'; - if(player.maxHp-player.hp>=2&&he<=3){ - return '弃牌'; - } - if(player.maxHp-player.hp>=3&&he<=5){ - return '弃牌'; - } - if(player.maxHp-player.hp>3){ - return '弃牌'; - } - return '出杀'; - } - return '出杀'; - }).set('prompt','弃置'+get.translation(trigger.player)+get.cnNumber(player.maxHp-player.hp)+'张牌,或对任意一名角色使用一张杀'); - 'step 1' - if(result.control=='弃牌'){ - player.line(trigger.player,'green'); - if(player.hp0; - }, - content:function(){ - 'step 0' - player.chooseToCompare(target).set('preserve','win'); - 'step 1' - if(result.bool&&result.target){ - event.type=true; - event.card=result.target; - player.chooseTarget('将'+get.translation(result.target)+'交给一名角色',function(card,player,target){ - return target.hp<=player.hp; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(_status.event.du) return -att; - return att; - }).set('du',event.card.name=='du'); - target.addTempSkill('dahe2'); - } - else{ - event.type=false; - if(player.countCards('h')){ - player.showHandcards(); - player.chooseToDiscard('h',true); - } - } - 'step 2' - if(event.type){ - if(result.bool){ - player.line(result.targets,'green'); - result.targets[0].gain(event.card,'gain2'); - } - } - }, - ai:{ - result:{ - target:function(player,target){ - var hs=player.getCards('h'); - if(hs.length<3) return 0; - var bool=false; - for(var i=0;i=9&&get.value(hs[i])<7){ - bool=true; - break; - } - } - if(!bool) return 0; - if(player.canUse('sha',target)&&(player.countCards('h','sha'))){ - return -2; - } - return -0.5; - } - }, - order:9, - } - }, - dahe2:{ - mark:true, - intro:{ - content:'非红桃闪无效' - }, - mod:{ - cardRespondable:function(card,player){ - if(card.name=='shan'&&get.suit(card)!='heart') return false; - }, - cardEnabled:function(card,player){ - if(card.name=='shan'&&get.suit(card)!='heart') return false; - }, - } - }, xunzhi:{ audio:2, trigger:{player:'phaseZhunbeiBegin'}, @@ -9752,317 +8956,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - junwei:{ - trigger:{player:'phaseJieshuBegin'}, - direct:true, - filter:function(event,player){ - return player.storage.yinling&&player.storage.yinling.length>=3; - }, - content:function(){ - 'step 0' - if(player.storage.yinling.length>3){ - player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){ - return 1; - }); - } - else{ - player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true).set('choice',true); - event.cards=player.storage.yinling.slice(0); - } - 'step 1' - if(result.bool){ - player.logSkill('junwei'); - var cards=event.cards||result.links; - for(var i=0;i1) return 1; - if(_status.event.player.hp>=3) return 0; - return 1; - }).set('nshan',nshan); - } - } - else{ - event.finish(); - } - 'step 3' - if(!event.directfalse&&result.bool) game.delay(); - ui.clear(); - 'step 4' - if(!event.directfalse&&result.bool){ - event.cards=result.cards; - event.target.$throw(result.cards); - player.chooseTarget('将'+get.translation(event.cards)+'交给一名角色',true,function(card,player,target){ - return target!=_status.event.getParent().target; - }).set('ai',function(target){ - return get.attitude(_status.event.player,target)/(target.countCards('h','shan')+1); - }); - } - else{ - event.target.loseHp(); - delete event.cards; - } - 'step 5' - if(event.cards){ - player.line(result.targets,'green'); - result.targets[0].gain(event.cards,'gain2'); - game.log(player,'将',event.cards,'交给',result.targets[0]); - event.finish(); - } - else{ - if(event.target.countCards('e')){ - player.choosePlayerCard('e','将'+get.translation(event.target)+'的一张装备牌移出游戏',true,event.target); - } - else{ - event.finish(); - } - } - 'step 6' - if(result.bool){ - var card=result.links[0]; - if(event.target.storage.junwei2){ - event.target.storage.junwei2.push(card); - event.target.markSkill('junwei2'); - } - else{ - event.target.storage.junwei2=[card]; - } - event.target.lose(card,ui.special,'toStorage'); - event.target.addSkill('junwei2'); - event.target.syncStorage('junwei2'); - } - } - }, - junwei2:{ - mark:true, - intro:{ - content:'cards', - onunmark:function(storage,player){ - if(storage&&storage.length){ - player.$throw(storage,1000); - game.cardsDiscard(storage); - game.log(storage,'被置入了弃牌堆'); - storage.length=0; - } - }, - }, - trigger:{player:'phaseJieshuBegin'}, - forced:true, - content:function(){ - 'step 0' - if(player.storage.junwei2.length){ - var card=player.storage.junwei2.shift(); - player.equip(card); - event.redo(); - } - 'step 1' - player.removeSkill('junwei2'); - delete player.storage.junwei2; - } - }, - yinling:{ - enable:'phaseUse', - filterCard:{color:'black'}, - position:'he', - intro:{ - content:'cards', - onunmark:'throw' - }, - filter:function(event,player){ - return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4; - }, - filterTarget:function(card,player,target){ - return target.countCards('he')>0&&target!=player; - }, - init:function(player){ - player.storage.yinling=[]; - }, - check:function(card){ - return 6-get.value(card); - }, - content:function(){ - 'step 0' - player.choosePlayerCard('hej',target,true); - 'step 1' - if(result.bool&&result.links&&result.links.length){ - target.$give(result.links,player,false); - target.lose(result.links,ui.special,'toStorage'); - player.storage.yinling.push(result.links[0]); - player.markSkill('yinling'); - player.syncStorage('yinling'); - } - }, - ai:{ - order:10.1, - expose:0.1, - result:{ - target:function(player,target){ - if(target.hasSkill('tuntian')) return 0; - var es=target.getCards('e'); - var nh=target.countCards('h'); - var noe=(es.length==0||target.hasSkillTag('noe')); - var noe2=(es.length==1&&es[0].name=='baiyin'&&target.hp=0){ - return -1.5; - } - return 2; - } - return -1.5; - }, - }, - } - }, - yanxiao:{ - audio:2, - enable:'phaseUse', - filterCard:{suit:'diamond'}, - filterTarget:true, - check:function(card){ - return 7-get.value(card); - }, - position:'he', - filter:function(event,player){ - return player.countCards('he',{suit:'diamond'})>0; - }, - discard:false, - lose:false, - delay:false, - prepare:'give', - content:function(){ - 'step 0' - game.addGlobalSkill('yanxiao_global'); - target.addJudge({name:'yanxiao_card'},cards); - 'step 1' - game.delay(); - }, - ai:{ - order:8, - result:{ - target:function(player,target){ - if(target.countCards('j',function(card){ - return get.effect(target,{ - name:card.viewAs||card.name, - cards:[card], - },target,target)<0; - })) return 1; - return 0; - } - } - } - }, - yanxiao_global:{ - trigger:{player:'phaseJudgeBegin'}, - forced:true, - filter:function(event,player){ - return player.countCards('j')>0&&player.hasJudge('yanxiao_card'); - }, - content:function(){ - player.gain(player.getCards('j'),'gain2'); - }, - ai:{ - effect:{ - target:function(card,player,target){ - if(get.type(card)=='delay'&&target.hasJudge('yanxiao_card')) return [0,0,0,0.1]; - } - } - } - }, - anxian:{ - audio:2, - group:['anxian_source','anxian_target'], - subSkill:{ - source:{ - audio:"anxian", - trigger:{source:'damageBegin2'}, - filter:function(event,player){ - return event.card&&event.card.name=='sha'; - }, - check:function(event,player){ - if(get.damageEffect(event.player,player,player)<=0) return true; - return false; - }, - content:function(){ - 'step 0' - if(trigger.player.countCards('h')){ - trigger.player.chooseToDiscard(true); - } - 'step 1' - player.draw(); - trigger.cancel(); - } - }, - target:{ - audio:"anxian", - trigger:{target:'useCardToTargeted'}, - direct:true, - filter:function(event,player){ - return event.card.name=='sha'&&player.countCards('h'); - }, - content:function(){ - "step 0" - var next=player.chooseToDiscard(get.prompt2('anxian')); - next.set('ai',function(card){ - var player=_status.event.player; - var trigger=_status.event.getTrigger(); - if(get.attitude(player,trigger.player)>0){ - return 9-get.value(card); - } - if(player.countCards('h',{name:'shan'})) return -1; - return 7-get.value(card); - }); - next.logSkill='anxian'; - "step 1" - if(result.bool){ - trigger.player.draw(); - trigger.getParent().excluded.push(player); - } - }, - } - } - }, luoyan_tianxiang:{ inherit:'tianxiang', filter:function(event,player){ @@ -11633,62 +10526,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ game.addVideo('storage',player,['rebiluan2',player.storage.rebiluan2]); } }, - fuji:{ - trigger:{global:'damageBegin1'}, - filter:function(event){ - return event.source&&event.nature=='thunder'; - }, - check:function(event,player){ - return get.attitude(player,event.source)>0&&get.attitude(player,event.player)<0; - }, - prompt:function(event){ - return get.translation(event.source)+'即将对'+get.translation(event.player)+'造成伤害,'+get.prompt('fuji'); - }, - logTarget:'source', - content:function(){ - trigger.source.judge().callback=lib.skill.fuji.callback; - }, - callback:function(){ - var evt=event.getParent(2); - if(event.judgeResult.color=='black'){ - //game.cardsDiscard(card); - evt._trigger.num++; - } - else{ - evt._trigger.source.gain(card,'gain2'); - } - }, - }, - fulu:{ - trigger:{player:'useCard1'}, - filter:function(event,player){ - if(event.card.name=='sha'&&!event.card.nature) return true; - }, - audio:true, - check:function(event,player){ - var eff=0; - for(var i=0;i=0; - }, - content:function(){ - trigger.card.nature='thunder'; - if(get.itemtype(trigger.card)=='card'){ - var next=game.createEvent('fulu_clear'); - next.card=trigger.card; - event.next.remove(next); - trigger.after.push(next); - next.setContent(function(){ - delete card.nature; - }); - } - } - }, guiming:{ unique:true, zhuSkill:true, @@ -12081,204 +10918,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } } }, - xinmanjuan:{ - audio:'manjuan', - forced:true, - priority:15, - trigger:{player:'gainAfter'}, - filter:function(event,player){ - return event.type!='xinmanjuan'; - }, - content:function(){ - "step 0" - player.lose(trigger.cards,ui.discardPile,'visible'); - player.$throw(trigger.cards,1000); - game.log(player,'将',trigger.cards,'置入了弃牌堆') - "step 1" - event.cards=trigger.cards.slice(0); - if(_status.currentPhase!=player) event.finish(); - "step 2" - event.card=event.cards.shift(); - event.togain=[]; - var number=get.number(event.card); - for(var i=0;imaxval){ - maxval=tempval; - } - } - maxval+=cards.length-1; - var next=player.chooseToDiscard('he',{suit:suits}); - next.set('ai',function(card){ - return _status.event.maxval-get.value(card); - }); - next.set('maxval',maxval); - next.set('dialog',[get.prompt(event.name),'hidden',cards]) - next.logSkill=event.name; - event.cards=cards; - } - "step 2" - if(result.bool){ - player.gain(event.cards,'gain2','log'); - } - }, - ai:{ - threaten:1.3 - } - }, - zuixiang:{ - skillAnimation:true, - animationColor:'gray', - audio:true, - unique:true, - limited:true, - trigger:{player:'phaseZhunbeiBegin'}, - content:function(){ - 'step 0' - player.awakenSkill('zuixiang'); - event.cards=player.showCards(get.cards(3)).cards; - player.markAuto('zuixiang2',event.cards); - game.cardsGotoSpecial(event.cards); - 'step 1' - if(lib.skill.zuixiang.filterSame(cards)){ - player.gain(cards,'gain2').type='xinmanjuan'; - delete player.storage.zuixiang2; - player.unmarkSkill('zuixiang2'); - } - else{ - trigger._zuixiang=true; - player.addSkill('zuixiang2'); - } - }, - filterSame:function(c){ - for(var i=0;i0; - }, - content:function(){ - 'step 0' - var next=player.chooseToDiscard(get.prompt('xinfu_yanyu'),get.translation('xinfu_yanyu_info'),'he').set('logSkill','xinfu_yanyu'); - if(player==trigger.player){ - next.set('goon',function(){ - var map={ - basic:0, - trick:0.1, - }; - var hs=trigger.player.getCards('h'); - var sha=false; - var jiu=false; - for(var i=0;i=3) return false; - //var evt=event.getParent(); - //if(evt&&(evt.name=='useCard'||evt.name=='respond')) return false; - var type=player.storage.xinfu_yanyu; - var cards=event.cards; - for(var i=0;i=3) event.finish(); - else player.chooseCardButton(event.cards,'【燕语】:是否将其中的一张牌交给一名角色?').ai=function(card){ - if(card.name=='du') return 10; - return get.value(card); - }; - 'step 2' - if(result.bool){ - player.storage.xinfu_yanyu2++; - if(!event.logged){ - player.logSkill('xinfu_yanyu'); - player.addExpose(0.25); - event.logged=true; - } - event.togain=result.links[0]; - event.cards.remove(event.togain); - player.chooseTarget(true,'请选择要获得'+get.translation(event.togain)+'的角色').set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - var card=_status.event.card; - var val=get.value(card); - if(player.storage.xinfu_yanyu2<3&&target==_status.currentPhase&&target.hasValueTarget(card,null,true)) att=att*5; - else if(target==player&&!player.hasJudge('lebu')&&get.type(card)=='trick') att=att*3; - if(target.hasSkillTag('nogain')) att/=10; - return att*val; - }).set('card',event.togain); - } - else event.finish(); - 'step 3' - var target=result.targets[0]; - player.line(target,'green'); - target.gain(event.togain,'gain2'); - if(event.cards.length) event.goto(1); - }, - }, - "xinfu_xiaode":{ - subSkill:{ - remove:{ - unique:true, - charlotte:true, - trigger:{ - player:"phaseAfter", - }, - forced:true, - popup:false, - content:function(){ - player.removeAdditionalSkill('xinfu_xiaode'); - player.removeSkill('xinfu_xiaode_remove'); - }, - }, - }, - trigger:{ - global:"dieAfter", - }, - direct:true, - filter:function (skill,event){ - return !event.hasSkill('xinfu_xiaode_remove'); - }, - content:function (){ - 'step 0' - var list=[]; - var listm=[]; - var listv=[]; - if(trigger.player.name1!=undefined) listm=lib.character[trigger.player.name1][3]; - else listm=lib.character[trigger.player.name][3]; - if(trigger.player.name2!=undefined) listv=lib.character[trigger.player.name2][3]; - listm=listm.concat(listv); - var func=function(skill){ - var info=get.info(skill); - if(info.charlotte||info.zhuSkill||(info.unique&&!info.limited)||info.juexingji||info.dutySkill||info.hiddenSkill) return false; - return true; - }; - for(var i=0;i=Math.max(2,player.countCards('h')-player.hp)) return 0; - if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ - var players=game.filterPlayer(); - for(var i=0;i=3&& - get.attitude(players[i],player)>=3){ - return 11-get.value(card); - } - } - if(player.countCards('h')>player.hp) return 10-get.value(card); - if(player.countCards('h')>2) return 6-get.value(card); - return -1; - } - return 10-get.value(card); - }, - content:function(){ - 'step 0' - var evt=_status.event.getParent('phaseUse'); - if(evt&&evt.name=='phaseUse'&&!evt.jsprende){ - var next=game.createEvent('jsprende_clear'); - _status.event.next.remove(next); - evt.after.push(next); - evt.jsprende=true; - next.player=player; - next.setContent(function(){ - delete player.storage.jsprende; - }); - } - target.gain(cards,player,'giveAuto'); - if(typeof player.storage.jsprende!='number'){ - player.storage.jsprende=0; - } - if(player.storage.jsprende>=0){ - player.storage.jsprende+=cards.length; - if(player.storage.jsprende>=2){ - var list=[]; - if(lib.filter.cardUsable({name:'sha'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ - return player.canUse('sha',current); - })){ - list.push(['基本','','sha']); - list.push(['基本','','sha','fire']); - list.push(['基本','','sha','thunder']); - list.push(['基本','','sha','ice']); - } - if(lib.filter.cardUsable({name:'tao'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ - return player.canUse('tao',current); - })){ - list.push(['基本','','tao']); - } - if(lib.filter.cardUsable({name:'jiu'},player,event.getParent('chooseToUse'))&&game.hasPlayer(function(current){ - return player.canUse('jiu',current); - })){ - list.push(['基本','','jiu']); - } - if(list.length){ - player.chooseButton(['是否视为使用一张基本牌?',[list,'vcard']]).set('ai',function(button){ - var player=_status.event.player; - var card={name:button.link[2],nature:button.link[3]}; - if(card.name=='tao'){ - if(player.hp==1||(player.hp==2&&!player.hasShan())||player.needsToDiscard()){ - return 5; - } - return 1; - } - if(card.name=='sha'){ - if(game.hasPlayer(function(current){ - return player.canUse(card,current)&&get.effect(current,card,player,player)>0 - })){ - if(card.nature=='fire') return 2.95; - if(card.nature=='thunder'||card.nature=='ice') return 2.92; - return 2.9; - } - return 0; - } - if(card.name=='jiu'){ - return 0.5; - } - return 0; - }); - } - else{ - event.finish(); - } - player.storage.jsprende=-1; - } - else{ - event.finish(); - } - } - else{ - event.finish(); - } - 'step 1' - if(result&&result.bool&&result.links[0]){ - var card={name:result.links[0][2],nature:result.links[0][3]}; - player.chooseUseTarget(card,true); - } - }, - ai:{ - fireAttack:true, - order:function(skill,player){ - if(player.hp1){ - return 10; - } - return 4; - }, - result:{ - target:function(player,target){ - if(target.hasSkillTag('nogain')) return 0; - if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){ - if(target.hasSkillTag('nodu')) return 0; - return -10; - } - if(target.hasJudge('lebu')) return 0; - var nh=target.countCards('h'); - var np=player.countCards('h'); - if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){ - if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0; - } - return Math.max(1,5-nh); - } - }, - effect:{ - target:function(card,player,target){ - if(player==target&&get.type(card)=='equip'){ - if(player.countCards('e',{subtype:get.subtype(card)})){ - if(game.hasPlayer(function(current){ - return current!=player&&get.attitude(player,current)>0; - })){ - return 0; - } - } - } - } - }, - threaten:0.8 - } - }, //狼灭 langmie:{ trigger:{global:'phaseUseEnd'}, @@ -1902,67 +1733,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.loseHp(); }, }, - nskuishe:{ - enable:'phaseUse', - usable:1, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('he')>0; - }, - content:function(){ - 'step 0' - player.choosePlayerCard(target,'he',true).set('ai',get.buttonValue); - 'step 1' - if(result.bool){ - var card=result.cards[0]; - event.card=card; - player.chooseTarget('将'+get.translation(target)+'的'+(get.position(card)=='h'&&!player.hasSkillTag('viewHandcard',null,target,true)?'手牌':get.translation(card))+'交给一名角色',true,function(target){ - return target!=_status.event.getParent().target; - }).set('ai',function(target){ - var att=get.attitude(_status.event.player,target); - if(_status.event.du){ - if(target.hasSkillTag('nodu')) return 0; - return -att; - } - if(target.hasSkillTag('nogain')) return 0.1; - if(att>0){ - return att+Math.max(0,5-target.countCards('h')); - } - return att; - }).set('du',event.card.name=='du'); - } - else event.finish(); - 'step 2' - if(result.bool){ - var target2=result.targets[0]; - target.line(target2,'green'); - target2.gain(target,card,'giveAuto','bySelf'); - } - else event.finish(); - 'step 3' - target.chooseToUse(function(card,player,event){ - if(get.name(card)!='sha') return false; - return lib.filter.filterCard.apply(this,arguments); - },'是否对'+get.translation(player)+'使用一张杀?').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){ - if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false; - return lib.filter.filterTarget.apply(this,arguments); - }).set('sourcex',player); - }, - ai:{ - order:6, - expose:0.2, - result:{ - target:-1.5, - player:function(player,target){ - if(!target.canUse('sha',player)) return 0; - if(target.countCards('h')==1) return 0.1; - if(player.hasShan()) return -0.5; - if(player.hp<=1) return -2; - if(player.hp<=2) return -1; - return 0; - } - }, - }, - }, pianchong:{ audio:2, trigger:{player:'phaseDrawBegin1'}, @@ -2869,292 +2639,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(result.bool) player.drawTo(4); }, }, - nsyangwu:{ - enable:'phaseUse', - usable:1, - filterCard:{suit:'heart'}, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('h')>player.countCards('h'); - }, - filter:function(event,player){ - var info=lib.skill.nsyangwu; - return player.countCards('h',info.filterCard)&&game.hasPlayer(function(target){ - return info.filterTarget(null,player,target); - }); - }, - check:function(card){ - var num=0; - var player=_status.event.player; - game.countPlayer(function(current){ - if(current!=player&&get.attitude(player,current)<0) num=Math.max(num,current.countCards('h')-player.countCards('h')); - }); - return Math.ceil((num+1)/2)*2+4-get.value(card); - }, - content:function(){ - var num=Math.ceil((target.countCards('h')-player.countCards('h'))/2); - if(num) player.gainPlayerCard(target,true,'h',num,'visible'); - }, - ai:{ - order:4, - result:{ - target:function(player,target){ - return player.countCards('h')-target.countCards('h'); - }, - }, - }, - }, - nslulve:{ - enable:'phaseUse', - usable:1, - filter:function(event,player){ - return game.hasPlayer(function(current){ - return current.countCards('e')>0&¤t.countCards('e')<=player.countCards('he'); - }); - }, - filterCard:function(){ - if(ui.selected.targets.length) return false; - return true; - }, - position:'he', - selectCard:[1,Infinity], - complexSelect:true, - complexCard:true, - filterTarget:function(card,player,target){ - return target!=player&&target.countCards('e')>0&&ui.selected.cards.length==target.countCards('e'); - }, - check:function(card){ - var player=_status.event.player; - if(game.hasPlayer(function(current){ - return current!=player&¤t.countCards('e')>0&&ui.selected.cards.length==current.countCards('e')&&get.damageEffect(current,player,player)>0; - })) return 0; - switch(ui.selected.cards.length){ - case 0:return 8-get.value(card); - case 1:return 6-get.value(card); - case 2:return 3-get.value(card); - default:return 0; - } - }, - content:function(){ - target.damage('nocard'); - }, - ai:{ - damage:true, - order:2, - result:{ - target:function(player,target){ - return get.damageEffect(target,player); - } - }, - expose:0.3 - } - }, - nsfeixiong:{ - trigger:{player:'phaseUseBegin'}, - direct:true, - filter:function(event,player){ - return player.countCards('h')>0&&game.hasPlayer(function(current){ - return current!=player&&player.canCompare(current); - }); - }, - content:function(){ - 'step 0' - player.chooseTarget(get.prompt2('nsfeixiong'),function(card,player,target){ - return player!=target&&player.canCompare(target); - }).set('ai',function(target){ - var player=_status.event.player; - var hs=player.getCards('h').sort(function(a,b){ - return b.number-a.number; - }); - var ts=target.getCards('h').sort(function(a,b){ - return b.number-a.number; - }); - if(!hs.length||!ts.length) return 0; - if(hs[0].number>ts[0].number) return get.damageEffect(target,player,player); - return 0; - }); - 'step 1' - if(result.bool){ - var target=result.targets[0]; - event.target=target; - player.logSkill('nsfeixiong',target); - player.chooseToCompare(target); - } - else event.finish(); - 'step 2' - if(!result.tie){ - var targets=[player,target]; - if(result.bool) targets.reverse(); - targets[0].damage(targets[1]); - } - }, - }, - nscesuan:{ - trigger:{player:'damageBegin3'}, - forced:true, - content:function(){ - 'step 0' - trigger.cancel(); - event.lose=player.loseMaxHp(); - 'step 1' - if(event.lose&&event.lose.loseHp) player.draw(); - }, - ai:{ - filterDamage:true, - skillTagFilter:function(player,tag,arg){ - if(arg&&arg.player){ - if(arg.player.hasSkillTag('jueqing',false,player)) return false; - } - }, - }, - }, - nsyice:{ - trigger:{ - player:'loseAfter', - global:'cardsDiscardAfter', - }, - filter:function(event,player){ - if(event.name=='lose'){ - if(event.type!='discard') return false; - } - else{ - var evt=event.getParent(); - if(evt.name!='orderingDiscard'||!evt.relatedEvent||evt.relatedEvent.player!=player||!['useCard','respond'].contains(evt.relatedEvent.name)) return false; - } - return (event.cards2||event.cards).filterInD('d').length>0; - }, - forced:true, - content:function(){ - 'step 0' - var evt=trigger.getParent().relatedEvent; - if((trigger.name=='discard'&&!trigger.delay)||evt&&evt.name=='respond') game.delayx(); - 'step 1' - var cards=(trigger.cards2||trigger.cards).filterInD('d'); - player.$gain2(cards); - if(cards.length==1) event._result={bool:true,links:cards}; - else{ - var dialog=['遗策:选择要放置的卡牌','
(从左到右为从旧到新,后选择的后置入)
',cards]; - var cards2=player.getStorage('nsyice'); - if(cards2.length){ - dialog.push('
原有“策”
'); - dialog.push(cards2); - } - player.chooseButton(dialog,true,cards.length).set('filterButton',function(button){ - return _status.event.cards.contains(button.link); - }).set('cards',cards); - } - 'step 2' - game.cardsGotoSpecial(result.links); - player.markAuto('nsyice',result.links); - game.delayx(); - 'step 3' - var storage=player.storage.nsyice; - var bool=false; - for(var i=0;ii;j--){ - if(get.number(storage[i])==get.number(storage[j])){ - bool=true; - break; - } - } - if(bool) break; - } - if(bool){ - event.cards=storage.slice(0); - event.cards=storage.splice(i,j-i+1); - player.unmarkAuto('nsyice',event.cards); - } - else event.finish(); - 'step 4' - var cardsx=[]; - cardsx.push(cards.shift()); - cardsx.push(cards.pop()); - if(cards.length) player.gain(cards,'gain2'); - event.cards=cardsx; - 'step 5' - player.chooseButton(['将一张牌置于牌堆顶,将另一张牌置于牌堆底',cards],true); - 'step 6' - ui.cardPile.insertBefore(result.links[0].fix(),ui.cardPile.firstChild); - cards.remove(result.links[0]); - ui.cardPile.appendChild(cards[0].fix()); - game.updateRoundNumber(); - if(_status.dying.length) event.finish(); - 'step 7' - player.chooseTarget('对一名角色造成1点伤害',true).set('ai',function(target){ - var player=_status.event.player; - return get.damageEffect(target,player,player); - }); - 'step 8' - if(result.bool){ - var target=result.targets[0]; - player.line(target); - target.damage('nocard'); - } - }, - marktext:'策', - intro:{content:'cards'}, - }, - yjxuepin:{ - enable:'phaseUse', - usable:1, - filterTarget:function(event,player,target){ - return player.inRange(target)&&target.countDiscardableCards(player,'he')>0; - }, - content:function(){ - 'step 0' - player.loseHp(); - 'step 1' - if(target.countDiscardableCards(player,'he')>0) player.discardPlayerCard(target,2,'he',true); - else event.finish(); - 'step 2' - if(result.bool&&result.cards.length==2&&get.type2(result.cards[0],result.cards[0].original=='h'?target:false)==get.type2(result.cards[1],result.cards[1].original=='h'?target:false)) player.recover(); - }, - ai:{ - order:4, - result:{ - player:function(player,target){ - if(player.hp==1) return -8; - if(target.countCards('e')>1) return 0; - if(player.hp>2||target.countCards('h')>1) return -0.5; - return -2; - }, - target:function(player,target){ - if(target.countDiscardableCards(player,'he')<2) return 0; - return -2; - }, - }, - }, - }, - nsjianglie:{ - trigger:{player:'useCardToPlayered'}, - filter:function(event,player){ - return event.card.name=='sha'&&event.target.countCards('h')>0; - }, - check:function(event,player){ - return get.attitude(player,event.target)<0; - }, - logTarget:'target', - content:function(){ - 'step 0' - trigger.target.showHandcards(); - 'step 1' - var cards=trigger.target.getCards('h'); - var list=[]; - for(var i=0;i=get.value(player.getCards('h',{color:'black'}))) return 'black'; - return 'red'; - }); - } - 'step 2' - trigger.target.discard(trigger.target.getCards('h',{color:result.control})); - }, - }, minsi:{ audio:2, enable:'phaseUse', @@ -9180,7 +8664,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ wangrong:'汉灵怀皇后王荣(?~181年),赵国邯郸(今河北邯郸市)人。五官中郎将王苞孙女,汉灵帝刘宏妃子,汉献帝刘协生母。初以良家子选入掖庭,封为美人,服侍汉灵帝。光和四年(181年),生下陈留王刘协,惨遭灵思皇后毒杀。王荣死后,汉灵帝曾作《追德赋》、《令仪颂》。永汉元年(189年),其子刘协即位,是为汉献帝,追谥灵怀皇后,葬于文昭陵。', hanfu:'韩馥(?—191年),字文节,颍川郡(今河南禹州)人。东汉末年的诸侯,冀州牧。韩馥担任过东汉的御史中丞,之后被董卓举荐为冀州牧;在各诸侯起兵讨伐董卓时,韩馥也是其中之一的参与者。韩馥与袁绍也曾经有意立刘虞为皇帝。当时冀州民殷人盛,兵粮优足,于是袁绍便用计夺取冀州,韩馥被迫投靠张邈;之后张邈与袁绍的使者见面,韩馥以为是要来杀害自己的,于是在厕所中以刻书用的小刀自杀。', guozhao:'郭照,电视剧《军师联盟》中的女主角之一,由唐艺昕饰演。原型为文德皇后郭氏(字女王),魏国皇后,张春华的义妹,深爱曹丕,替甄宓抚育曹叡,因甄宓之死被曹叡记恨,曹丕死后,成为皇太后,被曹叡逼上死路。自尽身亡。', - caoanmin:'曹安民(?-197年),沛国谯县(今安徽亳州)人,字安民。东汉时期人物,曹德之子,曹操之侄,曹昂的堂兄弟,曹丕的堂兄,死于宛城之战。按曹丕《典论》记载的“亡兄孝廉子脩、从兄安民遇害。”等情况来看,安民应该是曹操侄子错不了,曹丕是他们属于兄弟关系肯定不会弄错。另外从典论的记载来看安民是和子脩并提的,子脩是曹昂的字,安民则肯定也是字不是名,至于三国志中记载则应取自曹丕之《典论》但陈寿又不知曹安民其名,故写为“长子昂、弟子安民”。', fanyufeng:'樊夫人,东汉末年人物,昔桂阳太守赵范寡嫂。赵云随刘备平定江南四郡后,刘备以赵云为桂阳太守。赵范居心叵测,要将自己的嫂嫂樊氏嫁给赵云,但遭到赵云的拒绝。后来,赵范逃走,樊氏也下落不明。2001年,应日本日中青少年文化中心成立50周年之邀,北京京剧院赴日进行40场巡回演出,这次访日的剧目都不同程度地进行了加工改编,以符合日本观众的需求。《取桂阳》是根据老本重新排演的,叶金援饰赵云,王怡饰樊玉凤。剧中的樊玉凤成为文武双全的巾帼英雄,被赵云收降,后来在《龙凤呈祥》中也参与堵截东吴的追兵。', zhaozhong:'赵忠(?—189年),安平人,东汉末年宦官,赵延之兄。桓帝、灵帝时,历为小黄门、中常侍、大长秋、车骑将军等职,封都乡侯。在职时以搜刮暴敛、骄纵贪婪见称,灵帝极为宠信,常谓“赵常侍是我母”。中平六年(189年),何进谋诛宦官,事泄,他和其余几个常侍设计伏杀何进,袁绍、袁术等人闻何进被杀,入宫杀尽宦官,后捕杀赵忠。', caosong:'曹嵩(?—194年),字巨高,沛郡谯县(今安徽省亳州市)人。东汉大臣,大长秋曹腾的养子,曹操之父亲。门荫入仕,历任司隶校尉、鸿胪卿、大司农,位列九卿,位高权重。中平四年(187年),靠着贿赂中官,出任太尉,位列三公。中平五年(188年),受累于黄巾之乱,坐罪免官。兴平元年(194年),投奔兖州牧曹操,遇害于徐州。延康元年(220年),追尊魏国太王。曹魏建立后,追尊皇帝,谥号为太。', @@ -9587,26 +9070,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ jijing_info:'当你受到伤害后,你可以进行一次判定,然后若你弃置任意张点数之和与判定结果点数相同的牌,你回复1点体力。', zhuide:'追德', zhuide_info:'当你死亡时,你可令一名其他角色从牌堆中获得四张名称各不相同的基本牌。', - yj_caoang:'SP曹昂', - yjxuepin:'血拼', - yjxuepin_info:'出牌阶段限一次,你可以选择攻击范围内的一名角色并失去1点体力。你弃置其两张牌。若这两张牌类型相同,你回复1点体力。', - ns_chendao:'SP陈到', - nsjianglie:'将烈', - nsjianglie_info:'当你使用【杀】指定目标后,你可以令其展示所有手牌,然后弃置其中一种颜色的牌。', - ns_jiaxu:'☆贾诩', - nsyice:'遗策', - nsyice_info:'锁定技,当你使用/打出/弃置的牌进入弃牌堆后,你将这些牌以任意顺序置于你的武将牌上,称为“策”。若这些“策”中有点数相同的牌,则你获得这两张牌中的所有牌,将这两张牌置于牌堆两端。若场上没有处于濒死状态的角色,则你对一名角色造成1点伤害。', - ns_lijue:'SP李傕', - ns_zhangji:'SP张济', - nsfeixiong:'飞熊', - nsfeixiong_info:'出牌阶段开始时,你可以和一名其他角色拼点。赢的角色对没赢的角色造成1点伤害。', - nscesuan:'策算', - nscesuan_info:'锁定技,当你受到伤害时,你防止此伤害并失去一点体力上限。若你因以此法失去体力上限导致体力值减少,则你摸一张牌。', - nslulve:'掳掠', - nslulve_info:'出牌阶段限一次,你可以弃置X张牌并选择一名装备区内有牌的其他角色,然后对其造成1点伤害(X为其装备区内的牌数)。', - ns_fanchou:'SP樊稠', - nsyangwu:'扬武', - nsyangwu_info:'出牌阶段限一次,你可以弃置一张♥手牌并选择一名手牌数大于你的其他角色。你观看其手牌并获得其中的X张牌(X为其与你手牌数之差的一半且向上取整)。', mini_sunquan:'SP孙权', minizhiheng:'制衡', minizhiheng_info:'出牌阶段结束时,你可以弃置任意张手牌。若如此做,你将手牌摸至四张。', @@ -9665,9 +9128,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zunwei:'尊位', zunwei_backup:'尊位', zunwei_info:"出牌阶段限一次,你可选择本局游戏内未选择过的一项:①若你已受伤,则你可以选择一名体力值大于你的其他角色,你将体力值回复至X(X为你的体力上限与其体力值中的较小值)②选择一名手牌数大于你的其他角色,你将手牌数摸至与其相同(至多摸五张)③选择一名装备区内牌数大于你的其他角色。你令X=1。若你装备区内的('equip'+X)栏为空,则你使用牌堆中的一张副类别为('equip'+X),且能对自己使用的装备牌。你令X+1。若X不大于5,且你装备区内的牌数仍小于目标角色,则你重复此流程。", - ns_caoanmin:'曹安民', - nskuishe:'窥舍', - nskuishe_info:'出牌阶段限一次,你可以选择一名其他角色A的一张牌,并将此牌交给不为A的一名角色。然后A可以对你使用一张【杀】。', re_chunyuqiong:'淳于琼', recangchu:'仓储', recangchu2:'仓储', @@ -9740,10 +9200,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ langmie:'狼灭', langmie_damage:'狼灭', langmie_info:'其他角色的出牌阶段结束时,若其本阶段内使用过的牌中有类型相同的牌,则你可以摸一张牌;其他角色的结束阶段开始时,若其本回合内造成的伤害大于1,则你可以弃置一张牌并对其造成1点伤害。', - jsp_liubei:'群刘备', - jsp_liubei_ab:'刘备', - jsprende:'仁德', - jsprende_info:'出牌阶段,你可以将至少一张手牌交给其他角色;若你于此阶段内给出的牌首次达到两张,你可以视为使用一张基本牌', zhangheng:'张横', dangzai:'挡灾', dangzai_info:'出牌阶段开始时,你可将一名其他角色判定区内的一张牌移动至你的判定区内。', @@ -9784,9 +9240,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_xuzhou:'徐州风云', sp_decade:'其他新服武将', sp_mini:'欢乐三国杀', - sp_luanwu:'文和乱武·线下', - sp_yongjian:'用间篇', - sp_s:'线下S系列', }, }; }); diff --git a/game/asset.js b/game/asset.js index ad27e5fe4..d4ff7026d 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.8.4', + 'v1.9.110.8.4.1', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -750,6 +750,14 @@ window.noname_asset_list=[ 'audio/die/ol_jiangwei.mp3', 'audio/die/ol_zhurong.mp3', 'audio/die/zhongyan.mp3', + 'audio/die/caizhenji.mp3', + 'audio/die/duxi.mp3', + 'audio/die/gaogan.mp3', + 'audio/die/shen_taishici.mp3', + 'audio/die/sp_huaxin.mp3', + 'audio/die/sp_xujing.mp3', + 'audio/die/xiangchong.mp3', + 'audio/die/xinzhongyong.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3322,6 +3330,52 @@ window.noname_asset_list=[ 'audio/skill/yashi2.mp3', 'audio/skill/yifa1.mp3', 'audio/skill/yifa2.mp3', + 'audio/skill/bixiong1.mp3', + 'audio/skill/bixiong2.mp3', + 'audio/skill/boming1.mp3', + 'audio/skill/boming2.mp3', + 'audio/skill/buqi1.mp3', + 'audio/skill/buqi2.mp3', + 'audio/skill/dangmo1.mp3', + 'audio/skill/dangmo2.mp3', + 'audio/skill/debao1.mp3', + 'audio/skill/debao2.mp3', + 'audio/skill/dulie1.mp3', + 'audio/skill/dulie2.mp3', + 'audio/skill/ejian1.mp3', + 'audio/skill/ejian2.mp3', + 'audio/skill/guying1.mp3', + 'audio/skill/guying2.mp3', + 'audio/skill/hxrenshi1.mp3', + 'audio/skill/hxrenshi2.mp3', + 'audio/skill/jihun1.mp3', + 'audio/skill/jihun2.mp3', + 'audio/skill/juguan1.mp3', + 'audio/skill/juguan2.mp3', + 'audio/skill/mjchenshi1.mp3', + 'audio/skill/mjchenshi2.mp3', + 'audio/skill/mjdingyi1.mp3', + 'audio/skill/mjdingyi2.mp3', + 'audio/skill/mjmouzhi1.mp3', + 'audio/skill/mjmouzhi2.mp3', + 'audio/skill/mjweipo1.mp3', + 'audio/skill/mjweipo2.mp3', + 'audio/skill/mobilezhongyong1.mp3', + 'audio/skill/mobilezhongyong2.mp3', + 'audio/skill/muzhen1.mp3', + 'audio/skill/muzhen2.mp3', + 'audio/skill/quxi1.mp3', + 'audio/skill/quxi2.mp3', + 'audio/skill/shenzhu1.mp3', + 'audio/skill/shenzhu2.mp3', + 'audio/skill/sheyi1.mp3', + 'audio/skill/sheyi2.mp3', + 'audio/skill/tianyin1.mp3', + 'audio/skill/tianyin2.mp3', + 'audio/skill/tspowei1.mp3', + 'audio/skill/tspowei2.mp3', + 'audio/skill/yigui1.mp3', + 'audio/skill/yigui2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -3437,6 +3491,8 @@ window.noname_asset_list=[ 'image/card/hina_shenji.png', 'image/card/miki_binoculars.png', 'image/card/zhaoshu.png', + 'image/card/tiaojiyanmei.png', + 'image/card/binglinchengxiax.png', 'image/card/bagua.png', 'image/card/baihupifeng.png', @@ -4210,6 +4266,7 @@ window.noname_asset_list=[ 'image/character/sp_xujing.jpg', 'image/character/xiangchong.jpg', 'image/character/xin_zhoucang.jpg', + 'image/character/duxi.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/config.js b/game/config.js index e76a84b63..c9f019328 100644 --- a/game/config.js +++ b/game/config.js @@ -21,7 +21,7 @@ window.config={ zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'], connect_zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'], all:{ - sgscharacters:['standard','shenhua','xinghuoliaoyuan','refresh','yijiang','sp','sp2','extra','old','mobile','tw','yingbian'], + sgscharacters:['standard','shenhua','xinghuoliaoyuan','refresh','yijiang','sp','sp2','extra','old','mobile','tw','yingbian','offline'], sgscards:['standard','extra','sp','guozhan','zhulu','yingbian'], sgsmodes:['identity','guozhan','versus','doudizhu','single','brawl','connect'], stockmode:['identity','guozhan','versus','boss','doudizhu','single','chess','stone','connect','brawl','tafang'], diff --git a/game/package.js b/game/package.js index 49361f706..df62222f2 100644 --- a/game/package.js +++ b/game/package.js @@ -10,6 +10,7 @@ window.noname_package={ sp2:'系列专属', extra:'神将', mobile:'移动版', + offline:'线下武将', old:'怀旧', diy:'DIY', tw:'外服武将', diff --git a/game/source.js b/game/source.js index 1892f949e..895be245a 100644 --- a/game/source.js +++ b/game/source.js @@ -20,6 +20,7 @@ window.noname_source_list=[ 'character/hearth.js', 'character/mobile.js', 'character/mtg.js', + 'character/offline.js', 'character/old.js', 'character/ow.js', 'character/rank.js', diff --git a/game/update.js b/game/update.js index f8962793a..75279876e 100644 --- a/game/update.js +++ b/game/update.js @@ -1,6 +1,6 @@ window.noname_update={ - version:'1.9.110.8.4', - update:'1.9.110.8.3.3', + version:'1.9.110.8.4.1', + update:'1.9.110.8.4', changeLog:[ '神太史慈、蔡贞姬、手杀华歆、向宠、手杀许靖、手杀周仓', '手杀费祎、手杀荀谌、手杀孙邵', @@ -28,11 +28,12 @@ window.noname_update={ //'character/hearth.js', 'character/mobile.js', //'character/mtg.js', + 'character/offline.js', //'character/old.js', //'character/ow.js', 'character/rank.js', - 'character/refresh.js', - 'character/shenhua.js', + //'character/refresh.js', + //'character/shenhua.js', 'character/sp.js', 'character/sp2.js', //'character/tw.js', @@ -40,12 +41,12 @@ window.noname_update={ //'character/swd.js', //'character/xianjian.js', //'character/xinghuoliaoyuan.js', - 'character/yingbian.js', - 'character/yijiang.js', + //'character/yingbian.js', + //'character/yijiang.js', //'character/yxs.js', //'extension/boss/extension.js', - 'layout/default/layout.css', - 'layout/newlayout/global.css', + //'layout/default/layout.css', + //'layout/newlayout/global.css', //'layout/default/menu.css', //'layout/nova/layout.css', //'mode/boss.js', @@ -58,13 +59,13 @@ window.noname_update={ //'mode/stone.js', //'mode/tafang.js', //'mode/versus.js', - 'game/game.js', + //'game/game.js', //'game/keyWords.js', //'game/NoSleep.js', 'game/config.js', - //'game/package.js', + 'game/package.js', //'game/asset.js', - //'game/source.js', + 'game/source.js', //'theme/style/hp/xinglass.css', //'theme/style/hp/xinround.css', //'theme/style/hp/image/xinglass1.png', diff --git a/image/card/binglinchengxiax.png b/image/card/binglinchengxiax.png new file mode 100644 index 000000000..d1feeee94 Binary files /dev/null and b/image/card/binglinchengxiax.png differ diff --git a/image/card/tiaojiyanmei.png b/image/card/tiaojiyanmei.png new file mode 100644 index 000000000..f53112a31 Binary files /dev/null and b/image/card/tiaojiyanmei.png differ diff --git a/image/character/duxi.jpg b/image/character/duxi.jpg new file mode 100644 index 000000000..8b4faa5fd Binary files /dev/null and b/image/character/duxi.jpg differ