diff --git a/audio/die/gz_gongsunyuan.mp3 b/audio/die/gz_gongsunyuan.mp3 new file mode 100644 index 000000000..bce58a307 Binary files /dev/null and b/audio/die/gz_gongsunyuan.mp3 differ diff --git a/audio/die/gz_huangzu.mp3 b/audio/die/gz_huangzu.mp3 new file mode 100644 index 000000000..cce0ed282 Binary files /dev/null and b/audio/die/gz_huangzu.mp3 differ diff --git a/audio/die/gz_liuba.mp3 b/audio/die/gz_liuba.mp3 new file mode 100644 index 000000000..ac7594a2b Binary files /dev/null and b/audio/die/gz_liuba.mp3 differ diff --git a/audio/die/gz_simazhao.mp3 b/audio/die/gz_simazhao.mp3 new file mode 100644 index 000000000..8ab98b84d Binary files /dev/null and b/audio/die/gz_simazhao.mp3 differ diff --git a/audio/die/gz_sunchen.mp3 b/audio/die/gz_sunchen.mp3 new file mode 100644 index 000000000..6b930ade0 Binary files /dev/null and b/audio/die/gz_sunchen.mp3 differ diff --git a/audio/die/gz_zhugeke.mp3 b/audio/die/gz_zhugeke.mp3 new file mode 100644 index 000000000..1b6849aa2 Binary files /dev/null and b/audio/die/gz_zhugeke.mp3 differ diff --git a/audio/die/re_nanhualaoxian.mp3 b/audio/die/re_nanhualaoxian.mp3 new file mode 100644 index 000000000..67023b124 Binary files /dev/null and b/audio/die/re_nanhualaoxian.mp3 differ diff --git a/audio/die/shen_sunce.mp3 b/audio/die/shen_sunce.mp3 new file mode 100644 index 000000000..1185fd030 Binary files /dev/null and b/audio/die/shen_sunce.mp3 differ diff --git a/audio/die/yuanhuan.mp3 b/audio/die/yuanhuan.mp3 new file mode 100644 index 000000000..eb7f5c58f Binary files /dev/null and b/audio/die/yuanhuan.mp3 differ diff --git a/audio/skill/aocai_gz_zhugeke1.mp3 b/audio/skill/aocai_gz_zhugeke1.mp3 new file mode 100644 index 000000000..f356b4924 Binary files /dev/null and b/audio/skill/aocai_gz_zhugeke1.mp3 differ diff --git a/audio/skill/aocai_gz_zhugeke2.mp3 b/audio/skill/aocai_gz_zhugeke2.mp3 new file mode 100644 index 000000000..4aaa90acc Binary files /dev/null and b/audio/skill/aocai_gz_zhugeke2.mp3 differ diff --git a/audio/skill/fengjie1.mp3 b/audio/skill/fengjie1.mp3 new file mode 100644 index 000000000..9947c253a Binary files /dev/null and b/audio/skill/fengjie1.mp3 differ diff --git a/audio/skill/fengjie2.mp3 b/audio/skill/fengjie2.mp3 new file mode 100644 index 000000000..cb632c0cc Binary files /dev/null and b/audio/skill/fengjie2.mp3 differ diff --git a/audio/skill/gongxiu1.mp3 b/audio/skill/gongxiu1.mp3 new file mode 100644 index 000000000..b0edae462 Binary files /dev/null and b/audio/skill/gongxiu1.mp3 differ diff --git a/audio/skill/gongxiu2.mp3 b/audio/skill/gongxiu2.mp3 new file mode 100644 index 000000000..640bf567e Binary files /dev/null and b/audio/skill/gongxiu2.mp3 differ diff --git a/audio/skill/gzduwu1.mp3 b/audio/skill/gzduwu1.mp3 new file mode 100644 index 000000000..fbc7f19ff Binary files /dev/null and b/audio/skill/gzduwu1.mp3 differ diff --git a/audio/skill/gzduwu2.mp3 b/audio/skill/gzduwu2.mp3 new file mode 100644 index 000000000..074f79b38 Binary files /dev/null and b/audio/skill/gzduwu2.mp3 differ diff --git a/audio/skill/gzfankui1.mp3 b/audio/skill/gzfankui1.mp3 new file mode 100644 index 000000000..476421546 Binary files /dev/null and b/audio/skill/gzfankui1.mp3 differ diff --git a/audio/skill/gzfankui2.mp3 b/audio/skill/gzfankui2.mp3 new file mode 100644 index 000000000..8c126e4ed Binary files /dev/null and b/audio/skill/gzfankui2.mp3 differ diff --git a/audio/skill/gzhuaiyi1.mp3 b/audio/skill/gzhuaiyi1.mp3 new file mode 100644 index 000000000..308f1e791 Binary files /dev/null and b/audio/skill/gzhuaiyi1.mp3 differ diff --git a/audio/skill/gzhuaiyi2.mp3 b/audio/skill/gzhuaiyi2.mp3 new file mode 100644 index 000000000..52897c045 Binary files /dev/null and b/audio/skill/gzhuaiyi2.mp3 differ diff --git a/audio/skill/gzshilu1.mp3 b/audio/skill/gzshilu1.mp3 new file mode 100644 index 000000000..646932280 Binary files /dev/null and b/audio/skill/gzshilu1.mp3 differ diff --git a/audio/skill/gzshilu2.mp3 b/audio/skill/gzshilu2.mp3 new file mode 100644 index 000000000..f71b8dc95 Binary files /dev/null and b/audio/skill/gzshilu2.mp3 differ diff --git a/audio/skill/gzsuzhi1.mp3 b/audio/skill/gzsuzhi1.mp3 new file mode 100644 index 000000000..39def9fb8 Binary files /dev/null and b/audio/skill/gzsuzhi1.mp3 differ diff --git a/audio/skill/gzsuzhi2.mp3 b/audio/skill/gzsuzhi2.mp3 new file mode 100644 index 000000000..b5a5ec9e2 Binary files /dev/null and b/audio/skill/gzsuzhi2.mp3 differ diff --git a/audio/skill/gzxiongnve1.mp3 b/audio/skill/gzxiongnve1.mp3 new file mode 100644 index 000000000..1b9fc0792 Binary files /dev/null and b/audio/skill/gzxiongnve1.mp3 differ diff --git a/audio/skill/gzxiongnve2.mp3 b/audio/skill/gzxiongnve2.mp3 new file mode 100644 index 000000000..9ff3c76c3 Binary files /dev/null and b/audio/skill/gzxiongnve2.mp3 differ diff --git a/audio/skill/gzxishe1.mp3 b/audio/skill/gzxishe1.mp3 new file mode 100644 index 000000000..1c87a7f30 Binary files /dev/null and b/audio/skill/gzxishe1.mp3 differ diff --git a/audio/skill/gzxishe2.mp3 b/audio/skill/gzxishe2.mp3 new file mode 100644 index 000000000..34d490d0b Binary files /dev/null and b/audio/skill/gzxishe2.mp3 differ diff --git a/audio/skill/gzzhaoxin1.mp3 b/audio/skill/gzzhaoxin1.mp3 new file mode 100644 index 000000000..9ac942b80 Binary files /dev/null and b/audio/skill/gzzhaoxin1.mp3 differ diff --git a/audio/skill/gzzhaoxin2.mp3 b/audio/skill/gzzhaoxin2.mp3 new file mode 100644 index 000000000..1462482fb Binary files /dev/null and b/audio/skill/gzzhaoxin2.mp3 differ diff --git a/audio/skill/gzzisui1.mp3 b/audio/skill/gzzisui1.mp3 new file mode 100644 index 000000000..d7c8a30fd Binary files /dev/null and b/audio/skill/gzzisui1.mp3 differ diff --git a/audio/skill/gzzisui2.mp3 b/audio/skill/gzzisui2.mp3 new file mode 100644 index 000000000..0efb610f8 Binary files /dev/null and b/audio/skill/gzzisui2.mp3 differ diff --git a/audio/skill/jinghe1.mp3 b/audio/skill/jinghe1.mp3 new file mode 100644 index 000000000..56ddd568c Binary files /dev/null and b/audio/skill/jinghe1.mp3 differ diff --git a/audio/skill/jinghe2.mp3 b/audio/skill/jinghe2.mp3 new file mode 100644 index 000000000..51bf18186 Binary files /dev/null and b/audio/skill/jinghe2.mp3 differ diff --git a/audio/skill/jueyong1.mp3 b/audio/skill/jueyong1.mp3 new file mode 100644 index 000000000..9a4fbbf93 Binary files /dev/null and b/audio/skill/jueyong1.mp3 differ diff --git a/audio/skill/jueyong2.mp3 b/audio/skill/jueyong2.mp3 new file mode 100644 index 000000000..290f32929 Binary files /dev/null and b/audio/skill/jueyong2.mp3 differ diff --git a/audio/skill/pinghe1.mp3 b/audio/skill/pinghe1.mp3 new file mode 100644 index 000000000..bedb559a6 Binary files /dev/null and b/audio/skill/pinghe1.mp3 differ diff --git a/audio/skill/pinghe2.mp3 b/audio/skill/pinghe2.mp3 new file mode 100644 index 000000000..72338df47 Binary files /dev/null and b/audio/skill/pinghe2.mp3 differ diff --git a/audio/skill/poxiang1.mp3 b/audio/skill/poxiang1.mp3 new file mode 100644 index 000000000..7c2aa01ac Binary files /dev/null and b/audio/skill/poxiang1.mp3 differ diff --git a/audio/skill/poxiang2.mp3 b/audio/skill/poxiang2.mp3 new file mode 100644 index 000000000..4ea2f3498 Binary files /dev/null and b/audio/skill/poxiang2.mp3 differ diff --git a/audio/skill/qingjue1.mp3 b/audio/skill/qingjue1.mp3 new file mode 100644 index 000000000..9737a4486 Binary files /dev/null and b/audio/skill/qingjue1.mp3 differ diff --git a/audio/skill/qingjue2.mp3 b/audio/skill/qingjue2.mp3 new file mode 100644 index 000000000..5cab6a02c Binary files /dev/null and b/audio/skill/qingjue2.mp3 differ diff --git a/audio/skill/qingyin1.mp3 b/audio/skill/qingyin1.mp3 new file mode 100644 index 000000000..d2a4f2d5c Binary files /dev/null and b/audio/skill/qingyin1.mp3 differ diff --git a/audio/skill/qingyin2.mp3 b/audio/skill/qingyin2.mp3 new file mode 100644 index 000000000..d3be0e5bb Binary files /dev/null and b/audio/skill/qingyin2.mp3 differ diff --git a/audio/skill/scfuhai1.mp3 b/audio/skill/scfuhai1.mp3 new file mode 100644 index 000000000..2eef94e14 Binary files /dev/null and b/audio/skill/scfuhai1.mp3 differ diff --git a/audio/skill/scfuhai2.mp3 b/audio/skill/scfuhai2.mp3 new file mode 100644 index 000000000..16e4f3aaa Binary files /dev/null and b/audio/skill/scfuhai2.mp3 differ diff --git a/audio/skill/tongduo1.mp3 b/audio/skill/tongduo1.mp3 new file mode 100644 index 000000000..fcc33e4e0 Binary files /dev/null and b/audio/skill/tongduo1.mp3 differ diff --git a/audio/skill/tongduo2.mp3 b/audio/skill/tongduo2.mp3 new file mode 100644 index 000000000..aec506e65 Binary files /dev/null and b/audio/skill/tongduo2.mp3 differ diff --git a/audio/skill/yingba1.mp3 b/audio/skill/yingba1.mp3 new file mode 100644 index 000000000..c423ab06d Binary files /dev/null and b/audio/skill/yingba1.mp3 differ diff --git a/audio/skill/yingba2.mp3 b/audio/skill/yingba2.mp3 new file mode 100644 index 000000000..d7c396358 Binary files /dev/null and b/audio/skill/yingba2.mp3 differ diff --git a/card/guozhan.js b/card/guozhan.js index cbd9e53ce..46c2b6ded 100644 --- a/card/guozhan.js +++ b/card/guozhan.js @@ -631,7 +631,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){ }, mode:['guozhan','boss'], filterTarget:function(card,player,target){ - if(get.mode()=='guozhan') return target!=player&&target.identity!='unknown'&&(target.identity!=player.identity||target.identity=='ye'); + if(get.mode()=='guozhan') return target!=player&&target.identity!='unknown'&&!target.isFriendOf(player); return true; }, selectTarget:function(){ diff --git a/character/diy.js b/character/diy.js index 504bad4cb..36b501ff9 100755 --- a/character/diy.js +++ b/character/diy.js @@ -3670,11 +3670,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player.draw(event.count); 'step 1' event.count--; - player.chooseTarget(true,lib.skill.ryoichi_baoyi.filterTarget,'请选择【爆衣】的目标').set('ai',function(target){ - return -get.attitude(_status.event.player,target); - }); + if(game.hasPlayer(function(target){ + return lib.skill.ryoichi_baoyi.filterTarget(null,player,target); + })){ + player.chooseTarget(true,lib.skill.ryoichi_baoyi.filterTarget,'请选择【爆衣】的目标').set('ai',function(target){ + return -get.attitude(_status.event.player,target); + }); + } + else event.finish(); 'step 2' - if(result.bool){ + if(result.bool&&result.targets&&result.targets.length){ var target=result.targets[0]; player.line(target,'green'); if(target.sex=='female') target.loseHp(); diff --git a/character/extra.js b/character/extra.js index 6cea803d1..2c206fe55 100755 --- a/character/extra.js +++ b/character/extra.js @@ -15,7 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ extra_key:['key_kagari','key_shiki','db_key_hina'], extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'], extra_mobilezhi:['shen_guojia','shen_xunyu'], - extra_mobilexin:['shen_taishici'], + extra_mobilexin:['shen_taishici','shen_sunce'], extra_offline:['shen_diaochan','boss_zhaoyun'], }, }, @@ -24,6 +24,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']], db_key_hina:['female','key',3,['hina_shenshi','hina_xingzhi'],['doublegroup:key:shen']], + shen_sunce:['male','shen','1/6',['yingba','scfuhai','pinghe'],['wu']], shen_xunyu:['male','shen',3,['tianzuo','lingce','dinghan'],['wei']], shen_taishici:['male','shen',4,['dulie','tspowei','dangmo'],['wu']], shen_guojia:['male','shen',3,['reshuishi','stianyi','resghuishi'],['wei']], @@ -292,6 +293,148 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } }, }, + yingba:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:(event,player)=>(game.hasPlayer((current)=>(current!=player&¤t.maxHp>1))), + filterTarget:(card,player,target)=>(target!=player&&target.maxHp>1), + content:function(){ + 'step 0' + target.loseMaxHp(); + 'step 1' + if(target.isIn()) target.addMark('yingba_mark',1); + player.loseMaxHp(); + }, + locked:false, + mod:{ + cardUsableTarget:function(card,player,target){ + if(target.hasMark('yingba_mark')) return true; + }, + }, + ai:{ + combo:'scfuhai', + threaten:3, + order:2, + result:{ + target:function(player,target){ + if(target.isHealthy()) return -2; + return -1; + }, + }, + }, + subSkill:{ + mark:{ + marktext:'定', + intro:{ + name:'平定', + content:'mark', + onunmark:true, + }, + }, + }, + }, + scfuhai:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + forced:true, + filter:function(event,player){ + return event.target&&event.target.hasMark('yingba_mark'); + }, + logTarget:'target', + content:function(){ + trigger.directHit.add(trigger.target); + }, + group:['scfuhai_die','scfuhai_usea'], + ai:{ + directHit_ai:true, + skillTagFilter:function(player,tag,arg){ + return arg&&arg.target&&arg.target.hasMark('yingba_mark') + }, + }, + subSkill:{ + usea:{ + trigger:{player:'useCardAfter'}, + forced:true, + filter:function(event,player){ + return lib.skill.scfuhai_usea.logTarget(event,player).length>0; + }, + logTarget:function(event,player){ + return event.targets.filter(function(i){ + return i.hasMark('yingba_mark'); + }); + }, + content:function(){ + var num=0; + for(var i of trigger.targets){ + var numx=i.countMark('yingba_mark'); + if(numx){ + num+=numx; + i.removeMark('yingba_mark',numx); + } + } + if(num) player.gainMaxHp(num); + }, + }, + die:{ + trigger:{global:'die'}, + forced:true, + filter:function(event,player){ + return event.player.countMark('yingba_mark')>0; + }, + content:function(){ + player.gainMaxHp(trigger.player.countMark('yingba_mark')); + player.draw(trigger.player.countMark('yingba_mark')); + }, + }, + }, + }, + pinghe:{ + audio:2, + mod:{ + maxHandcardBase:function(player){ + return player.getDamagedHp(); + }, + }, + locked:false, + trigger:{player:'damageBegin2'}, + direct:true, + filter:function(event,player){ + return event.source&&event.source!=player&&event.num0&&!current.hasSkillTag('nogain'); + })) return 0; + return 1/Math.max(0.1,get.value(card)); + }, + ai2:function(target){ + var player=_status.event.player,att=get.attitude(player,target); + if(target.hasSkillTag('nogain')) att/=9; + return 4+att; + }, + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.logSkill('pinghe',target); + target.gain(result.cards,player,'giveAuto'); + trigger.cancel(); + player.loseMaxHp(trigger.num); + if(player.hasSkill('yingba')){ + trigger.source.addMark('yingba_mark',trigger.num); + } + } + }, + }, tianzuo:{ audio:2, trigger:{ @@ -382,7 +525,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var rand=Math.random(); if(e1(_status.event.choice)); 'step 1' var map=trigger.getParent().customArgs,id=target.playerid; if(!map[id]) map[id]={}; @@ -397,7 +540,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{global:'useCard'}, forced:true, filter:function(event,player){ - return event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name); + return event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name)||player.getStorage('dinghan').contains(event.card.name); }, content:function(){player.draw()}, }, @@ -406,18 +549,60 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{target:'useCardToTarget'}, forced:true, filter:function(event,player){ - return get.tag(event.card,'damage')>0&&!player.getStorage('dinghan_clear').contains(event.card.name); + return get.type2(event.card)=='trick'&&!player.getStorage('dinghan').contains(event.card.name); }, content:function(){ - player.markAuto('dinghan_clear',[trigger.card.name]); - player.addTempSkill('dinghan_clear','roundStart'); + player.markAuto('dinghan',[trigger.card.name]); trigger.targets.remove(player); trigger.getParent().triggeredTargets2.remove(player); trigger.untrigger(); }, + onremove:true, + intro:{content:'已记录牌名:$'}, + group:'dinghan_add', subSkill:{ - clear:{onremove:true}, - } + add:{ + trigger:{player:'phaseBegin'}, + direct:true, + content:function(){ + 'step 0' + var dialog=[get.prompt('dinghan')];list1=player.getStorage('dinghan'),list2=lib.inpile.filter(function(i){ + return get.type2(i,false)=='trick'&&!list1.contains(i); + }); + if(list1.length){ + dialog.push('
已记录
'); + dialog.push([list1,'vcard']); + } + if(list2.length){ + dialog.push('
未记录
'); + dialog.push([list2,'vcard']); + } + player.chooseButton(dialog).set('ai',function(button){ + var player=_status.event.player,name=button.link[2]; + if(player.getStorage('dinghan').contains(name)){ + return -get.effect(player,{name:name},player,player); + } + else{ + return get.effect(player,{name:name},player,player)*(1+player.countCards('hs',name)); + } + }); + 'step 1' + if(result.bool){ + player.logSkill('dinghan'); + var name=result.links[0][2]; + if(player.getStorage('dinghan').contains(name)){ + player.unmarkAuto('dinghan',[name]); + game.log(player,'从定汉记录中移除了','#y'+get.translation(name)); + } + else{ + player.markAuto('dinghan',[name]); + game.log(player,'向定汉记录中添加了','#y'+get.translation(name)); + } + game.delayx(); + } + }, + }, + }, }, dulie:{ audio:2, @@ -468,7 +653,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ 'step 0' player.judge(function(result){ - if(get.color(result)=='red') return 2; + if(get.suit(result)=='heart') return 2; return -1; }).judge2=function(result){ return result.bool; @@ -2929,18 +3114,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ audio:2, content:function(){ "step 0" - player.chooseTarget('选择角色获得大雾标记', - [1,Math.min(game.countPlayer(),player.storage.qixing.length)]).ai=function(target){ + player.chooseTarget(get.prompt('dawu'),'选择角色获得大雾标记', + [1,Math.min(game.countPlayer(),player.storage.qixing.length)]).set('ai',function(target){ if(target.isMin()) return 0; if(target.hasSkill('biantian2')) return 0; var att=get.attitude(player,target); if(att>=4){ - if(target.hp==1&&target.maxHp>2) return att; - if(target.hp==2&&target.maxHp>3&&target.countCards('he')==0) return att*0.7; + if(_status.event.allUse) return att; + if(target.hp==1) return att; + if(target.hp==2&&target.countCards('he')<=2) return att*0.7; return 0; } return -1; - } + }).set('allUse',player.storage.qixing.length>=game.countPlayer(function(current){ + return get.attitude(player,current)>4; + })*2); "step 1" if(result.bool){ var length=result.targets.length; @@ -2949,6 +3137,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } player.logSkill('dawu',result.targets,'thunder'); player.chooseCardButton('弃置'+get.cnNumber(length)+'枚星',length,player.storage.qixing,true); + player.addSkill('dawu3'); } else{ event.finish(); @@ -2960,10 +3149,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(player.storage.qixing.length==0){ player.unmarkSkill('qixing'); } + player.$throw(result.links,1000); + game.delayx(); game.addVideo('storage',player,['qixing',get.cardsInfo(player.storage.qixing),'cards']); game.cardsDiscard(result.links); }, - group:'dawu3' }, dawu2:{ trigger:{player:'damageBegin4'}, @@ -2987,23 +3177,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, intro:{ - content:'已获得大雾标记' + markcount:()=>1, + content:'共有1个标记' } }, dawu3:{ - trigger:{player:['phaseZhunbeiBegin','dieBegin']}, + trigger:{player:['phaseBegin','dieBegin']}, silent:true, + charlotte:true, content:function(){ for(var i=0;i1, + content:'共有1个标记' }, forced:true, content:function(){ @@ -4652,7 +4847,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sghuishi_info:'限定技,出牌阶段,你可以选择一名其他角色:若其有未发动过的觉醒技,则你令其发动这些觉醒技时无视原有条件;否则其摸四张牌。然后你减2点体力上限。', shen_taishici:'神太史慈', dulie:'笃烈', - dulie_info:'锁定技。①游戏开始时,你令所有其他角色获得“围”。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红色,则取消此目标。', + dulie_info:'锁定技。①游戏开始时,你令所有其他角色获得“围”。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红桃,则取消此目标。', tspowei:'破围', tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。', shenzhu:'神著', @@ -4669,9 +4864,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ tianzuo:'天佐', tianzuo_info:'①游戏开始时,你将8张【奇正相生】加入牌堆。②当一名角色成为【奇正相生】的目标后,你可观看其手牌,然后可以更改其标记。', lingce:'灵策', - lingce_info:'锁定技。当有【奇正相生】或智囊被使用时,你摸一张牌。', + lingce_info:'锁定技。当有【奇正相生】或智囊或〖定汉①〗记录过的锦囊牌被使用时,你摸一张牌。', dinghan:'定汉', - dinghan_info:'锁定技,每种牌名每轮限一次。当你成为伤害类卡牌的目标时,取消之。', + dinghan_info:'①当你成为未记录过的锦囊牌的目标时,你记录此牌名并取消之。②准备阶段,你可在〖定汉①〗的记录中添加或减少一种锦囊牌的牌名。', + shen_sunce:'神孙策', + yingba:'英霸', + yingba_info:'①出牌阶段限一次,你可令一名体力上限大于1的其他角色减少1点体力上限并获得“平定”标记,然后你减少1点体力上限。②你对拥有“平定”标记的角色使用牌没有次数限制。', + scfuhai:'覆海', + scfuhai_info:'锁定技。①当你使用牌指定目标后,若目标角色有“平定”标记,则其不可响应此牌。②当你使用牌结算结束后,你移除所有目标角色的“平定”标记并增加等量的体力上限。③拥有“平定”标记的角色死亡时,你增加X点体力上限并摸X张牌。(X为其拥有的“平定”标记数)。', + pinghe:'冯河', + pinghe_info:'①你的手牌上限基数等于你已损失的体力值。②当你受到其他角色造成的伤害时,若你的手牌数大于X,则你可以防止此伤害,减少X点体力值上限并将X张手牌交给一名其他角色(X为伤害值)。然后若你拥有〖英霸〗,则伤害来源获得X个“平定”标记。', key_kagari:'篝', kagari_zongsi:'纵丝', diff --git a/character/mobile.js b/character/mobile.js index b72b7c78a..e1ab675b5 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6,12 +6,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ mobile:{ - mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou"], + mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian"], mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"], mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"], mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'], mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'], - mobile_shijiyong:['db_wenyang'], + mobile_shijiyong:['db_wenyang','sp_chendong','yuanhuan','sp_zongyu'], mobile_sunben:["re_sunben"], mobile_standard:["xin_xiahoudun","xin_zhangfei"], mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong"], @@ -24,16 +24,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, character:{ + fuqian:['male','shu',4,['jueyong','poxiang']], + sp_zongyu:['male','shu',3,['zhibian','yuyan']], + yuanhuan:['male','wei',3,['qingjue','fengjie']], + sp_chendong:['male','wu',4,['spyilie','spfenming']], xin_caozhen:['male','wei',4,['disordersidi']], xin_sunluban:['female','wu',3,['xinzenhui','xinjiaojin']], qiaozhou:['male','shu',3,['zhiming','xingbu']], - db_wenyang:['male','wei',4,['dbquedi','dbzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']], + db_wenyang:['male','wei',4,['dbquedi','dbxinzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']], xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']], re_zhonghui:['male','wei',4,['requanji','zili']], xin_caifuren:['female','qun',3,['xinqieting','xianzhou']], sp_yanghu:['male','qun',3,['mingfa','rongbei']], qiaogong:['male','wu',3,['yizhu','luanchou']], - liuzhang:['male','qun',3,['xiusheng','yinlang','huaibi'],['zhu']], + liuzhang:['male','qun',3,['jutu','yaohu','rehuaibi'],['zhu']], sp_zhangwen:['male','wu',3,['gebo','spsongshu']], zhangzhongjing:['male','qun',3,['jishi','liaoyi','binglun']], xin_zhoucang:['male','shu',4,['mobilezhongyong']], @@ -136,6 +140,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']], }, characterIntro:{ + yuanhuan:'袁涣,字曜卿,陈郡扶乐(今河南省周口市太康县)人。东汉末年官员,出身陈郡袁氏,为东汉司徒袁滂之子。袁涣早年曾任郡功曹,后被公府征辟,相继被举为高第、秀才。汉末战乱时,袁涣流寓江淮一带,初为袁术所用,后投吕布。建安三年(198年),曹操率兵剿灭了吕布,袁涣又转投曹操,拜沛南部都尉,后又任谏议大夫、郎中令等职,在任上尽心尽责,以敢谏直言称名。袁涣恕思而后行,外表温柔而内心能断,处危难则勇气极大。汉末三国时期,唯有程昱、曹仁、袁涣三人被评价为勇冠贲育。', + sunchen:'孙綝(chēn)(231年-259年1月18日),字子通,吴郡富春(今浙江杭州市富阳区)人。三国时期吴国宗室、权臣,昭义中郎将孙静曾孙、定武中郎将孙暠之孙、安民都尉孙绰的儿子。门荫入仕,初任偏将军。太平元年(256年),升任侍中、武卫将军、都督中外诸军事。掌权以后,诛杀大司马滕胤、骠骑将军吕据等重臣,升任大将军,册封永宁县侯。嗜好杀戮,与皇帝孙亮的矛盾激化,最终废黜孙亮,拥立琅琊王孙休即位,累迁丞相、荆州牧。永安元年十二月(259年1月),在左将军张布的协助下,遭到皇帝孙休捕杀,时年二十八岁,削除宗籍,改姓故氏。', qiaozhou:'谯周(201年-270年),字允南,巴西郡西充国县(今四川西充县槐树镇)人。三国时期蜀汉大臣、学者、儒学家、史学家。幼年丧父,少读典籍,精研六经,颇晓天文,成为蜀地大儒之一,门下有陈寿、罗宪等学生。诸葛亮担任益州牧时,授劝学从事。诸葛亮死后,不顾朝令,前往奔丧。后主刘禅册立太子时,授太子仆,迁太子家令、光禄大夫。反对姜维北伐,著《仇国论》,力陈北伐之失。炎兴元年(263年),邓艾攻打成都时期,力劝刘禅投降,“有全国之功”,投降魏国后,受封阳城亭侯,迁骑都尉。泰始六年(270年),授散骑常侍,同年去世,时年七十岁。', gongsunkang:'公孙康(生卒年不详),辽东襄平(今辽宁辽阳)人。东汉末年辽东地区割据军阀,辽东太守公孙度长子(一作庶子)、车骑将军公孙恭之兄。公孙康在其父死后继任辽东太守。建安十二年(207年),擒斩图谋不轨的袁尚、袁熙兄弟,将其首级献予曹操,被拜为左将军,封襄平侯。建安十四年(209年),公孙康大破高句丽,陷其国都,并讨伐韩濊,设置带方郡。死后因二子年幼,由公孙恭继任。曹丕称帝后,被追赠为大司马。', qiaogong:'桥公,亦作“乔公”,名字不详,是中国汉末三国时期的长者,江东二乔的父亲,三国时期庐江郡皖县(今安徽潜山)人,中国长篇古典名著《三国演义》中称之为“乔国老”。', @@ -570,6 +576,631 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + //新刘璋 + jutu:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.yaohu&&game.hasPlayer(function(current){ + return current.group==player.storage.yaohu; + }); + }, + content:function(){ + 'step 0' + if(player.storage.jutu&&player.storage.jutu.length>0){ + player.gain(player.storage.jutu,'gain2'); + delete player.storage.jutu; + player.unmarkSkill('jutu'); + } + 'step 1' + event.num=game.countPlayer(function(current){ + return current.group==player.storage.yaohu; + }); + player.draw(event.num+1); + if(!event.num) event.finish(); + 'step 2' + var he=player.getCards('he'); + if(!he.length) event.finish(); + else if(he.length0) return 1.5; + if(current.inRange(player)) return 0.5; + return -0.3; + }); + } + list.sort(function(a,b){ + return getn(b)-getn(a); + }); + return list[0]; + }()); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('yaohu',game.filterPlayer(function(current){ + return current.group==result.control; + })); + game.log(player,'选择了','#y'+get.translation(result.control+2)) + player.storage.yaohu=result.control; + player.markSkill('yaohu'); + } + }, + ai:{combo:'jutu'}, + intro:{content:'已选择了$势力'}, + group:'yaohu_gain', + subSkill:{ + round:{}, + gain:{ + audio:'yaohu', + trigger:{global:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return event.player.group==player.storage.yaohu&&event.player.isIn()&&player.getStorage('jutu').length>0; + }, + logTarget:'player', + content:function(){ + 'step 0' + var target=trigger.player; + event.target=target; + target.chooseBool('是否响应'+get.translation(player)+'的【邀虎】?','获得其武将牌上的一张“生”').set('goon',function(){ + if(get.attitude(target,player)>0) return true; + if(player.hasSha()&&!game.hasPlayer(function(current){ + return player.inRange(current)&&get.effect(current,{name:'sha'},player,player)<=0; + })) return true; + if(!player.hasCard(function(card){ + if(!get.tag(card,'damage')) return false; + var eff1=player.getUseValue(card); + _status._yaohu_ai_judging=true; + var eff2=player.getUseValue(card); + delete _status._yaohu_ai_judging; + if(eff1>0&&eff2<=0) return true; + return false; + }),'h') return true; + return false; + }()).set('ai',function(){return _status.event.goon}); + 'step 1' + if(result.bool){ + player.logSkill('yaohu',target); + target.chooseButton(['选择获得一张“生”',player.storage.jutu],true).set('ai',function(button){ + return get.value(button.link,player); + }); + } + else event.finish(); + 'step 2' + if(result.bool){ + player.unmarkAuto('jutu',result.links); + target.gain(result.links,'gain2'); + } + 'step 3' + if(game.hasPlayer(function(current){ + return current.inRangeOf(target); + })){ + player.chooseTarget(true,'选择'+get.translation(target)+'使用【杀】的目标',function(card,player,target){ + return _status.event.source.inRange(target); + }).set('source',target).set('ai',function(target){ + var evt=_status.event; + return get.effect(target,{name:'sha'},evt.source,evt.player); + }); + } + else event.finish(); + 'step 4' + var target2=result.targets[0]; + player.line(target2,'green'); + target.chooseToUse(function(card,player,event){ + if(get.name(card)!='sha') return false; + return lib.filter.filterCard.apply(this,arguments); + },'对'+get.translation(target2)+'使用一张杀,否则本回合对'+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',target2).set('addCount',false); + 'step 5' + if(!result.bool){ + target.markAuto('yaohu_give',[player]); + target.addTempSkill('yaohu_give','phaseUseEnd'); + } + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(_status._yaohu_ai_judging&&typeof card=='object'&&card.name.indexOf('damage')==-1&&get.tag(card,'damage')) return 'zerotarget'; + }, + }, + }, + }, + give:{ + trigger:{player:'useCardToPlayer'}, + forced:true, + onremove:true, + charlotte:true, + filter:function(event,player){ + return player.getStorage('yaohu_give').contains(event.target)&&get.tag(event.card,'damage')>0; + }, + logTarget:'target', + content:function(){ + 'step 0' + if(player.countCards('he')<2) event._result={bool:false}; + else player.chooseCard('he',2,'交给'+get.translation(trigger.target)+'两张牌,否则令'+get.translation(trigger.card)+'对其无效'); + 'step 1' + if(result.bool){ + trigger.target.gain(result.cards,player,'giveAuto'); + } + else{ + trigger.targets.remove(trigger.target); + trigger.getParent().triggeredTargets1.remove(trigger.target); + trigger.untrigger(); + } + }, + ai:{ + effect:{ + player:function(card,player,target){ + if(typeof card=='object'&&card.name.indexOf('damage')==-1&&get.tag(card,'damage')&&player.getStorage('yaohu_give').contains(target)) return 'zerotarget'; + }, + }, + }, + }, + }, + }, + rehuaibi:{ + audio:'huaibi', + zhuSkill:true, + mod:{ + maxHandcard:function(player,num){ + if(player.storage.yaohu&&player.hasZhuSkill('rehuaibi')) return num+game.countPlayer(function(current){ + return current.group==player.storage.yaohu; + }); + }, + }, + ai:{combo:'yaohu'}, + }, + //傅佥 + jueyong:{ + audio:2, + trigger:{target:'useCardToTarget'}, + forced:true, + filter:function(event,player){ + return event.card.name!='jiu'&&event.card.name!='tao'&& + event.targets.length==1&&event.card.isCard&&event.cards.length==1&&event.getParent(2).name!='jueyong_timeout'&& + get.position(event.cards[0],true)=='o'&&event.card.name==event.cards[0].name; + }, + content:function(){ + trigger.targets.remove(player); + trigger.getParent().triggeredTargets2.remove(player); + trigger.untrigger(); + var card=trigger.cards[0]; + game.cardsGotoSpecial(card); + player.$gain2(card,false); + game.log(player,'将',card,'作为“绝”置于了武将牌上'); + if(!player.storage.jueyong) player.storage.jueyong=[[],[]]; + player.storage.jueyong[0].push(card); + player.storage.jueyong[1].push(trigger.player); + player.markSkill('jueyong'); + game.delayx(); + }, + intro:{ + markcount:function(storage){ + return storage[0].length; + }, + mark:function(dialog,storage,player){ + dialog.addAuto(storage[0]); + dialog.addText(get.translation(storage[1])); + }, + onunmark:function(storage,player){ + if(storage[0]&&storage[0].length){ + player.$throw(storage[0],1000); + game.cardsDiscard(storage[0]); + game.log(storage[0],'进入了弃牌堆'); + } + delete player.storage.jueyong; + }, + }, + ai:{ + reverseEquip:true, + effect:{ + target:function(card,player,target,current){ + if(get.type(card)=='equip'&&!get.tag(card,'gifts')&&target.storage.jueyong&&target.storage.jueyong[1].length){ + var result1=get.equipResult(player,target,card.name),subtype=get.subtype(card); + for(var i of target.storage.jueyong[0]){ + if(get.subtype(i,false)==subtype&&get.equipResult(target,target,i.name)>=result1) return 'zerotarget'; + } + } + }, + }, + }, + group:'jueyong_timeout', + subSkill:{ + timeout:{ + audio:'jueyong', + trigger:{player:'phaseJieshuBegin'}, + forced:true, + filter:function(event,player){ + return player.storage.jueyong&&player.storage.jueyong[0].length>=Math.max(1,player.getDamagedHp()); + }, + content:function(){ + var list=player.storage.jueyong,card=list[0].shift(),source=list[1].shift(); + if(source&&source.isIn()&&source.canUse(card,player,false)) source.useCard(card,player,false); + else game.cardsDiscard(card); + if(list[0].length) event.redo(); + else player.unmarkSkill('jueyong'); + }, + }, + }, + }, + poxiang:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:(event,player)=>player.countCards('he')>0, + filterCard:true, + filterTarget:lib.filter.notMe, + position:'he', + discard:false, + lose:false, + delay:false, + check:function(card){ + var player=_status.event.player; + if(!player.storage.jueyong||player.storage.jueyong[0].length0; + }).length)) return -1; + return 20-get.value(card); + }, + content:function(){ + 'step 0' + target.gain(cards,player,'giveAuto'); + player.draw(3); + 'step 1' + player.unmarkSkill('jueyong'); + player.loseHp(); + 'step 2' + player.skip('phaseDiscard'); + game.delayx(); + }, + ai:{ + order:12, + result:{ + player:4, + target:1, + }, + }, + }, + //宗预 + zhibian:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return game.hasPlayer((current)=>(current!=player&&player.canCompare(current))); + }, + content:function(){ + 'step 0' + player.chooseTarget(get.prompt('zhibian'),'与一名其他角色进行拼点',function(card,player,target){ + return target!=player&&player.canCompare(target); + }).set('ai',function(target){ + if(!_status.event.goon) return false; + var att=get.attitude(player,target); + if(att<0&&target.countCards('e',function(card){ + return player.canEquip(card)&&get.effect(player,card,target,player)>0; + })) return -att/Math.sqrt(target.countCards('h')); + if(!player.isDamaged()) return false; + if(att<=0) return (1-att)/Math.sqrt(target.countCards('h')); + return Math.sqrt(2/att*Math.sqrt(target.countCards('h'))); + }).set('goon',function(){ + if(!player.hasCard(function(card){ + return (card.number>=14-player.hp&&get.value(card)<=5); + })) return false; + return true; + }()); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + event.target=target; + player.logSkill('zhibian',target); + player.chooseToCompare(target); + } + else event.finish(); + 'step 2' + if(result.bool){ + var list=[],list2=[ + '将'+get.translation(target)+'装备区/判定区中的一张牌移动到你的区域内', + '回复1点体力', + '背水!跳过摸牌阶段,并依次执行上述所有选项', + ]; + if(target.hasCard(function(card){ + return player.canEquip(card); + },'e')||target.hasCard(function(card){ + return player.canAddJudge(card); + },'j')){ + list.push('选项一'); + } + if(player.isDamaged()){ + list.push('选项二'); + } + if(list.contains('选项一')) list.push('背水!') + list.push('cancel2'); + player.chooseControl(list).set('choiceList',list2).set('ai',function(target){ + if(player.isDamaged()&&(player.hp<=2||!target.countCards('e',function(card){ + return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp(); + }))) return 1; + return 0; + }); + } + else{ + player.loseHp(); + event.finish(); + } + 'step 3' + if(result.control!='cancel2'){ + event.control=result.control; + if(result.control=='选项一'||result.control=='背水!'){ + player.choosePlayerCard(target,'ej',true).set('ai',get.buttonValue); + } + else event.goto(5); + } + else event.finish(); + 'step 4' + if(result.bool){ + var card=result.cards[0]; + target.$give(card,player,false); + game.delayx(); + if(get.position(card)=='e') player.equip(card); + else player.addJudge(card); + } + 'step 5' + if(event.control=='选项二'||event.control=='背水!'){ + player.recover(); + } + if(event.control=='背水!') player.skip('phaseDraw'); + }, + }, + yuyan:{ + audio:2, + trigger:{target:'useCardToTarget'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return event.card.name=='sha'&&event.card.isCard&&typeof get.number(event.card)=='number'&&player.hp=13||!trigger.player.hasCard(function(card){ + if(_status.connectMode&&get.position(card)=='h') return true; + return get.number(card)>num; + },'he')) event._result={bool:false}; + else trigger.player.chooseCard('h',function(card){ + return get.number(card)>_status.event.number; + },'交给'+get.translation(player)+'一张点数大于'+get.cnNumber(num)+'的牌,或令'+get.translation(trigger.card)+'对其无效').set('number',num).set('',function(card){ + if(card.name=='shan'||card.name=='tao'||card.name=='jiu') return false; + return 6-get.value(card); + }); + 'step 1' + if(result.bool){ + player.gain(result.cards,trigger.player,'giveAuto'); + } + else{ + trigger.targets.remove(player); + trigger.getParent().triggeredTargets2.remove(player); + trigger.untrigger(); + } + }, + ai:{ + effect:{ + target:function(card,player,target,current){ + if(card.name=='sha'&&player.hp>target.hp&&get.attitude(player,target)<0){ + var num=get.number(card); + if(typeof num!='number') return false; + var bs=player.getCards('h',function(cardx){ + return (get.number(cardx)>num&&!['','',''].contains(cardx.name)); + }); + if(bs.length<2) return 0; + if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return; + if(bs.length<=2){ + for(var i=0;ievent.target.hp&&event.targets.length==1&&event.player.countCards('h')>0&&!event.target.isDying()&& + !event.player.hasSkillTag('noCompareTarget')&&!player.hasSkillTag('noCompareSource')); + }, + check:function(event,player){ + var target=event.target,source=event.source; + var eff1=get.effect(target,event.card,source,player); + if(eff1>=0) return false; + var eff2=get.effect(player,event.card,source,player); + if(eff2>=0) return true; + if(eff2>eff1/3) return player.hasCard(function(card){ + return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3; + }); + if(eff2>eff1/2) return player.hasCard(function(card){ + return card.number>10&&get.value(card)<=5; + }); + return player.hasCard(function(card){ + return card.number>11&&get.value(card)<=5; + }); + }, + content:function(){ + 'step 0' + player.draw(); + 'step 1' + if(player.canCompare(trigger.player)) player.chooseToCompare(trigger.player); + else event.finish(); + 'step 2' + trigger.targets.remove(trigger.target); + trigger.getParent().triggeredTargets1.remove(trigger.target); + trigger.untrigger(); + if(!result.bool) trigger.targets.push(player); + }, + }, + fengjie:{ + audio:2, + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return game.hasPlayer((current)=>(current!=player)); + }, + content:function(){ + 'step 0' + player.chooseTarget('请选择【奉节】的目标','选择一名其他角色并获得如下效果直到你下回合开始:一名角色的结束阶段开始时,你将手牌摸至(至多摸至四张)或弃置至与其体力值相等。',lib.filter.notMe,true).set('ai',function(target){ + return (target.hp-player.countCards('h'))/get.threaten(target); + }); + 'step 1' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + game.log(player,'选择了',target); + player.storage.fengjie2=target; + player.addTempSkill('fengjie2',{player:'phaseBegin'}); + game.delayx(); + } + }, + }, + fengjie2:{ + audio:'fengjie', + trigger:{global:'phaseJieshuBegin'}, + forced:true, + charlotte:true, + onremove:true, + filter:function(event,player){ + if(!player.storage.fengjie2||!player.storage.fengjie2.isIn()) return false; + var num1=player.countCards('h'),num2=player.storage.fengjie2.hp; + return num1>num2||num1player.storage.fengjie2, + content:function(){ + var num1=player.countCards('h'),num2=player.storage.fengjie2.hp; + if(num1>num2) player.chooseToDiscard('h',true,num1-num2); + else player.drawTo(Math.min(4,num2)); + }, + }, + //陈武董袭 + spyilie:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + content:function(){ + 'step 0' + player.chooseControl('选项一','选项二','背水!','cancel2').set('choiceList',[ + '本阶段内使用【杀】的次数上限+1', + '本回合内使用【杀】被【闪】抵消时摸一张牌', + '背水!失去1点体力并依次执行上述所有选项', + ]).set('ai',function(){ + if(player.countCards('hs',function(card){ + return get.name(card)=='sha'&&player.hasValueTarget(card); + })>player.getCardUsable({name:'sha '})) return 0; + return 1; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('spyilie'); + game.log(player,'选择了【毅烈】的','#g'+result.control); + if(result.index%2==0) player.addTempSkill('spyilie_add','phaseUseEnd'); + if(result.index>0) player.addTempSkill('spyilie_miss'); + if(result.index==2) player.loseHp(); + } + }, + subSkill:{ + add:{ + charlotte:true, + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + }, + }, + miss:{ + charlotte:true, + audio:'spyilie', + trigger:{player:'shaMiss'}, + forced:true, + content:function(){ + player.draw(); + }, + }, + }, + }, + spfenming:{ + audio:2, + enable:'phaseUse', + usable:1, + filter:(event,player)=>game.hasPlayer((current)=>lib.skill.spfenming.filterTarget(null,player,current)), + filterTarget:function(card,player,target){ + if(target.hp>player.hp) return false; + return !target.isLinked()||target.hasCard(function(card){ + return lib.filter.canBeGained(card,player,target); + },target==player?'e':'he'); + }, + content:function(){ + if(!target.isLinked()) target.link(); + else player.gainPlayerCard(target,target==player?'e':'he',true); + }, + ai:{ + order:7, + result:{ + player:function(player,target){ + if(!target.isLinked()) return get.effect(target,{name:'tiesuo'},player,player); + return get.effect(target,{name:'shunshou_copy2'},player,player); + }, + }, + }, + }, //曹真 disordersidi:{ trigger:{player:'useCardAfter'}, @@ -823,26 +1454,64 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, zhangming:{ audio:2, - mod:{ - ignoredHandcard:function(card,player){ - if(get.suit(card)=='club'){ - return true; - } - }, - cardDiscardable:function(card,player,name){ - if(name=='phaseDiscard'&&get.suit(card)=='club') return false; - } - }, trigger:{player:'useCard'}, forced:true, filter:function(event,player){ - return get.suit(event.card)=='club'&&get.type(event.card)=='trick'; + return get.suit(event.card)=='club'; }, content:function(){ trigger.directHit.addArray(game.filterPlayer(function(current){ return current!=player; })); }, + group:'zhangming_damage', + subSkill:{ + damage:{ + audio:'zhangming', + trigger:{source:'damageEnd'}, + forced:true, + usable:1, + filter:function(event,player){ + return player!=event.player; + }, + logTarget:'player', + content:function(){ + var list=[],cards=[],target=trigger.player,hs=target.getCards('h'); + if(hs.length>0){ + var card=hs.randomGet(); + list.push(get.type2(card,target)); + player.showCards(card,get.translation(player)+'对'+get.translation(target)+'发动了【彰名】'); + } + for(var i=0;i(player.getStat('skill').dbxinzhuifeng||0); + }, + selectCard:-1, + filterCard:()=>false, + log:false, + prompt:function(){ + return '失去'+get.cnNumber((_status.event.player.getStat('skill').dbxinzhuifeng||0)+1)+'点体力并视为使用【决斗】'; + }, + precontent:function(){ + player.logSkill('dbxinzhuifeng',event.result.targets); + var stat=player.getStat('skill'); + player.loseHp((stat.dbxinzhuifeng||0)+1); + }, + }, dbzhuifeng:{ audio:2, groupSkill:true, @@ -1184,6 +1873,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(card)=='equip'; },'hes')&&(event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'jiu',isCard:true},player,event)); }, + locked:false, + mod:{ + targetInRange:function(card){ + if(card.storage&&card.storage.dbchongjian) return true; + }, + }, chooseButton:{ dialog:function(){ return ui.create.dialog('冲坚',[['sha','jiu'],'vcard']); @@ -1208,15 +1903,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){ } return (5-get.value(card))>0; })>1)) return player.getUseValue({name:'jiu'})*4; - return player.getUseValue({name:button.link[2]}); + return player.getUseValue({name:button.link[2]},false); }, backup:function(links,player){ return { audio:'dbchongjian', - viewAs:{name:links[0][2],isCard:true}, + viewAs:{ + name:links[0][2], + isCard:true, + storage:{dbchongjian:true}, + }, filterCard:{type:'equip'}, position:'hes', popname:true, + precontent:function(){ + player.addTempSkill('dbchongjian_effect'); + }, check:function(card){ var player=_status.event.player; if(get.position(card)=='e'){ @@ -1258,6 +1960,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, result:{player:1}, }, + subSkill:{ + effect:{ + charlotte:true, + mod:{ + targetInRange:function(card){ + if(card.storage&&card.storage.dbchongjian) return true; + }, + }, + trigger:{source:'damageSource'}, + forced:true, + logTarget:'player', + filter:function(event,player){ + return event.parent.skill=='dbchongjian_backup'&&event.card.name=='sha'&&event.getParent().name=='sha'&&event.player.countGainableCards(player,'e')>0; + }, + content:function(){ + player.gainPlayerCard(trigger.player,'e',true,trigger.num); + }, + }, + }, }, dbchoujue:{ audio:2, @@ -12731,7 +13452,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rezuici:'罪辞', rezuici_backup:'罪辞', rezuici_info:'出牌阶段,或当你处于濒死状态时,你可以废除一个有牌的装备栏并回复2点体力,然后可以移动“辅弼”标记。', - nanhualaoxian:'南华老仙', + nanhualaoxian:'手杀南华老仙', yufeng:'御风', yufeng2:'御风', yufeng_info:'出牌阶段限一次,你可以表演“御风飞行”。若表演失败,则你摸X张牌。若表演成功,则你可以选择至多X名其他角色获得“御风”效果,然后摸X-Y张牌(准备阶段开始时,你进行判定。若结果为:红色,你跳过摸牌阶段;黑色,你跳过出牌阶段和弃牌阶段。X为你的得分。Y为你选择的角色数)。', @@ -12831,7 +13552,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mjshengxi_info:'结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊或【调剂盐梅】。', mjkuanji:'宽济', mjkuanji_info:'每回合限一次。当你因弃置而失去牌后,你可令一名其他角色获得其中的一张牌,然后你摸一张牌。', - tiaojiyanmei:'调剂盐梅', tiaojiyanmei_info:'出牌阶段,对两名手牌数不均相同的其他角色使用。若目标角色于此牌使用准备工作结束时的手牌数大于此时所有目标的平均手牌数,其弃置一张牌。若小于则其摸一张牌。此牌使用结束后,若所有目标角色的手牌数均相等,则你可令一名角色获得所有因执行此牌效果而弃置的牌。', binglinchengxiax:'兵临城下', @@ -12912,9 +13632,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dbzhuifeng:'椎锋', dbzhuifeng_backup:'椎锋', dbzhuifeng_info:'魏势力技。当你需要使用【杀】或【决斗】时,你可以失去1点体力,然后视为使用此牌。', + dbxinzhuifeng:'椎锋', + dbxinzhuifeng_info:'魏势力技。若你的体力值大于X,则你可以失去X+1点体力并视为使用一张【决斗】(X为你本回合内发动过〖椎锋〗的次数)。', dbchongjian:'冲坚', dbchongjian_backup:'冲坚', - dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】或【酒】使用。', + dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】(无距离限制)或【酒】使用。当你以此法使用【杀】造成伤害后,你获得目标角色装备区内的X张牌(X为伤害值)。', dbchoujue:'仇决', dbchoujue_info:'锁定技。当你杀死其他角色后,你加1点体力上限并摸两张牌,然后本回合发动【却敌】的次数上限+1。', qiaozhou:'谯周', @@ -12929,7 +13651,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rechuhai:'除害', rechuhai_info:'使命技。①出牌阶段限一次,你可以摸一张牌,然后和一名其他角色拼点。若你赢,则你观看其手牌,并从牌堆/弃牌堆中获得其手牌中包含的类型的牌各一张,且当你于此阶段内对其造成伤害后,你将牌堆/弃牌堆中的一张装备牌置于你的一个空置装备栏内。②当你因发动〖除害①〗而展示拼点牌时,你令此牌的点数+X(X=(4-你装备区的牌数))。③使命:当有装备牌进入你的装备区后,若你的装备区内有至少三张牌,则你将体力值回复至上限,失去〖乡害〗并获得〖彰名〗。④失败:当你因发动〖除害①〗发起的拼点没赢时,若你的最终点数不大于Q点,则你触发使命失败分支。', zhangming:'彰名', - zhangming_info:'锁定技。你的♣牌不计入手牌上限。当你使用♣普通锦囊牌时,你令所有其他角色不能响应此牌。', + zhangming_info:'锁定技。①你使用的♣牌不能被其他角色响应。②每回合限一次,当你对其他角色造成伤害后,你随机展示其一张手牌,然后你从牌堆或弃牌堆中获得与其展示牌类型不同类型的牌各一张(若其没有手牌,则你改为从牌堆或弃牌堆中获得所有类型牌各一张),且以此法获得的牌不计入本回合的手牌上限。', xin_sunluban:'手杀孙鲁班', xinzenhui:'谮毁', xinzenhui_info:'出牌阶段限一次。当你使用【杀】或黑色普通锦囊牌指定目标时,你可选择另一名能成为此牌目标的其他角色并选择一项:①令其也成为此牌的目标。②获得其一张牌,然后将此牌的使用者改为该角色。', @@ -12938,6 +13660,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ xin_caozhen:'手杀曹真', disordersidi:'司敌', disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后,你可选择一名R内不存在以a为第一序偶的二元序偶的其他角色a,并选择一名角色b,在关系R内建立二元序偶(b对其他角色不可见)。②一名角色a使用的不为延时锦囊牌的牌结算结束后,你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时,若aRb成立,则你从R内移除,且:若b为你,你摸一张牌;若b不为你,你可选择:⒈取消此牌的目标,并对a造成1点伤害。⒉摸两张牌。', + sp_chendong:'陈武董袭', + spyilie:'毅烈', + spyilie_info:'出牌阶段开始时,你可选择:①本阶段内使用【杀】的次数上限+1。②本回合内使用【杀】被【闪】抵消时,摸一张牌。③背水:失去1点体力,然后依次执行上述所有选项。', + spfenming:'奋命', + spfenming_info:'出牌阶段限一次,你可以选择一名体力值不大于你的角色。若其:未横置,其横置;已横置,你获得其一张牌。', + yuanhuan:'袁涣', + qingjue:'请决', + qingjue_info:'每轮限一次。当有其他角色A使用牌指定另一名体力值小于A且不处于濒死状态的其他角色B为目标时,你可以摸一张牌,然后与A拼点。若你赢,你取消此目标。若你没赢,你将此牌的目标改为自己。', + fengjie:'奉节', + fengjie2:'奉节', + fengjie_info:'锁定技,准备阶段开始时,你选择一名其他角色并获得如下效果直到你下回合开始:一名角色的结束阶段开始时,你将手牌摸至(至多摸至四张)或弃置至与其体力值相等。', + sp_zongyu:'手杀宗预', + zhibian:'直辩', + zhibian_info:'准备阶段,你可以和一名其他角色拼点。若你赢,你可选择:①将其装备区/判定区内的一张牌移动到你的对应区域。②回复1点体力。③背水:跳过下个摸牌阶段,然后依次执行上述所有选项;若你没赢,你失去1点体力。', + yuyan:'御严', + yuyan_info:'锁定技。当你成为非转换的【杀】的目标时,若使用者的体力值大于你且此【杀】有点数,则你令使用者选择一项:①交给你一张点数大于此【杀】的牌。②取消此目标。', + fuqian:'傅佥', + jueyong:'绝勇', + jueyong_info:'锁定技。①当你不因〖绝勇〗成为唯一牌的目标时,若此牌不为转化牌且对应的实体牌牌数为1且不为【桃】或【酒】,则你将此牌置于你的武将牌上,称为“勇”,且取消此牌的目标。②结束阶段开始时,若你的“绝”数不小于你已损失的体力值,则你令所有“绝”的原使用者依次对你使用所有“绝”,将无法使用的“绝”置入弃牌堆。', + poxiang:'破降', + poxiang_info:'出牌阶段限一次。你可以将一张牌交给一名其他角色。你摸三张牌,移去所有“绝”并失去1点体力,跳过本回合的弃牌阶段。', + jutu:'据土', + jutu_info:'锁定技,准备阶段,你获得所有你武将牌上的“生”,然后摸X+1张牌,然后将X张牌置于你的武将牌上,称为“生”(X为你因〖邀虎〗选择势力的角色数量)。', + yaohu:'邀虎', + yaohu_info:'每轮限一次,你的回合开始时,你须选择场上一个势力。该势力角色的出牌阶段开始时,其可以获得你的一张“生”,然后其须选择一项:①对你指定的一名其攻击范围内的其他角色使用一张【杀】;②直到本阶段结束时,其使用伤害类牌指定你为目标时,须交给你两张牌,否则取消之。', + rehuaibi:'怀璧', + rehuaibi_info:'主公技,锁定技,你的手牌上限+X(X为你因〖邀虎〗选择势力的角色数量)。', mobile_standard:'手杀异构·标准包', mobile_shenhua:'手杀异构·神话再临', diff --git a/character/rank.js b/character/rank.js index 165bd1ff9..37915dedc 100644 --- a/character/rank.js +++ b/character/rank.js @@ -95,6 +95,7 @@ window.noname_character_rank={ 'guansuo', 'yuantanyuanshang', 'dongyun', + 'shen_xunyu', 'shen_guojia', 'key_kamome', 'key_yukine', @@ -254,8 +255,9 @@ window.noname_character_rank={ 'panshu', 'caochun', 'xin_caifuren', - 'shen_xunyu', 'ol_wangrong', + 're_nanhualaoxian', + 'fuqian', 'key_misuzu', 'key_sunohara', 'key_umi', @@ -706,6 +708,8 @@ window.noname_character_rank={ 'zhangzhongjing', 'db_wenyang', 'dufuren', + 'yuanhuan', + 'zhouyi', ], b:[ 'diy_feishi', @@ -901,6 +905,8 @@ window.noname_character_rank={ 'ol_dengzhi', 'sundeng', 'duji', + 'sp_chendong', + 'sp_zongyu', ], bm:[ 'diy_xizhenxihong', @@ -1201,6 +1207,8 @@ window.noname_character_rank={ 'yanghuiyu', 'nanhualaoxian', 'panshu', + 're_nanhualaoxian', + 'shen_sunce', 'key_yuri', 'key_yuzuru', 'sp_key_kanade', @@ -1747,6 +1755,9 @@ window.noname_character_rank={ 'xin_sunluban', 'ol_wangrong', 'dufuren', + 'yuanhuan', + 'zhouyi', + 'fuqian', ], junk:[ 'sunshao', diff --git a/character/refresh.js b/character/refresh.js index de2f0092b..5a1004652 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -1624,6 +1624,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gzpaiyi:{ audio:2, enable:'phaseUse', + usable:1, filter:function(event,player){ return player.getStorage('gzquanji').length>0&&!player.hasSkill('gzquanji2'); }, @@ -10409,7 +10410,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ gzquanji_info:'当你受到伤害后或当你使用牌指定唯一目标并对其造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。', gzpaiyi:'排异', gzpaiyi_backup:'排异', - gzpaiyi_info:'出牌阶段,你可以将移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量且至多为7),若其手牌数不小于你,则你对其造成1点伤害且本技能于此回合内失效。', + gzpaiyi_info:'出牌阶段限一次,你可以将移去一张“权”,然后选择一名角色并令其摸X张牌(X为“权”的数量且至多为7),若其手牌数不小于你,则你对其造成1点伤害且本技能于此回合内失效。', ol_zhurong:'界祝融', changbiao:'长标', changbiao_info:'出牌阶段限一次,你可以将任意张手牌当做【杀】使用(无距离限制)。若你因此【杀】对目标角色造成过伤害,则你于出牌阶段结束时摸X张牌(X为此【杀】对应的实体牌数量)。', @@ -10427,7 +10428,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ redingpin:'定品', redingpin_info:'出牌阶段,你可以弃置一张本回合未使用过/弃置过的类型的牌并选择一名角色。其进行判定,若结果为:黑色,其摸X张牌(X为其体力值且至多为3)且本回合内不能再成为〖定品〗的目标;红桃,你令此次弃置的牌不计入〖定品〗弃置牌合法性的检测;方片,你将武将牌翻面。', refaen:'法恩', - refaen_info:'一名角色翻面或横置后,你可令其摸一张牌。', + refaen_info:'一名角色翻至正面或横置后,你可令其摸一张牌。', reshizhi:'矢志', reshizhi_info:'锁定技,若你的体力值为1,则你的【闪】视为【杀】,且当你使用对应的实体牌为一张【闪】的非转化普通杀造成伤害后,你回复1点体力。', re_guotufengji:'界郭图逢纪', diff --git a/character/sp.js b/character/sp.js index 26a302b0c..80c29491f 100755 --- a/character/sp.js +++ b/character/sp.js @@ -9,7 +9,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_tongque:["liuxie","lingju","fuwan","sp_fuwan","sp_fuhuanghou","sp_jiben"], sp_zhongdan:["cuiyan","huangfusong"], sp_guozhan:["zangba","shamoke","ganfuren","yuejin","hetaihou","dingfeng","panfeng","jianggan","sp_mifangfushiren","bianfuren"], - sp_guozhan2:["mateng","tianfeng","chendong","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zoushi","zongyu"], + sp_guozhan2:["mateng","tianfeng","sp_dongzhuo","jiangfei","jiangqing","liqueguosi","lvfan","cuimao","jiling","zhangren","zongyu"], //sp_single:["niujin"], sp_others:["hanba","caiyang"], }, @@ -119,7 +119,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mateng:['male','qun',4,['xiongyi','mashu']], tianfeng:['male','qun',3,['sijian','suishi']], yuejin:['male','wei',4,['xiaoguo']], - chendong:['male','wu',4,['duanxie','fenming']], sp_dongzhuo:['male','qun',5,['hengzheng']], jiangfei:['male','shu',3,['reshengxi','shoucheng']], jiangqing:['male','wu',4,['shangyi','zniaoxiang']], @@ -281,7 +280,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lingcao:['lingtong'], lingju:['diaochan','lvbu'], jiangqing:['zhoutai'], - dingfeng:['xusheng'], + dingfeng:['xusheng','zhugeke'], caohong:['caoren'], daxiaoqiao:['zhouyu','sunce'], cuiyan:['caocao'], @@ -4157,6 +4156,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var num=0; for(var i=0;i0) max+=((player.storage.refuhan||player.storage.twfuhan)?0.3:-0.3); return max; } + if(!player) player=_status.event.player; return (player.storage.refuhan||player.storage.twfuhan)?4:1; }, }, @@ -11813,16 +11814,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:function(){ "step 0" var nono=(Math.abs(get.attitude(player,trigger.player))<3); - if(player==trigger.player||get.damageEffect(trigger.player,player,player)<=0){ + if(player==trigger.player||get.damageEffect(trigger.player,player,player)<=0||!trigger.player.hasUseTarget({name:'jiu'},null,true)){ nono=true } else if(trigger.player.hp>2){ nono=true; } - else if(trigger.player.hp>1&&player.countCards('h')<3){ - nono=true; - } - else if(trigger.player.canUse('sha',player)&&!player.countCards('h','shan')&&trigger.player.countCards('h')>=3){ + else if(trigger.player.hp>1&&player.countCards('h')<3&&(trigger.player.canUse('sha',player)&&!player.countCards('h','shan')&&trigger.player.countCards('h')>=3)){ nono=true; } var next=player.chooseToDiscard(get.prompt2('zhendu',trigger.player)); @@ -12749,6 +12747,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, aocai:{ audio:2, + audioname:['gz_zhugeke'], enable:['chooseToUse','chooseToRespond'], hiddenCard:function(player,name){ if(player!=_status.currentPhase&&get.type(name)=='basic'&&lib.inpile.contains(name)) return true; @@ -15117,6 +15116,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ zhaoxiang:['zhaoxiang','tw_zhaoxiang'], dengzhi:['ol_dengzhi','dengzhi'], wangrong:['wangrong','ol_wangrong'], + zongyu:['sp_zongyu','zongyu'], }, translate:{ "xinfu_lingren":"凌人", @@ -15319,7 +15319,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ daoshu_info:'出牌阶段,你可以选择一个花色并获得一名其他角色的一张手牌。若此牌花色与你选择的相同,则你对其造成1点伤害。否则你须交给其一张与此牌花色不同的手牌(没有则展示手牌),且本阶段内不能再发动〖盗书〗', xinshanjia:"缮甲", - "xinshanjia_info":"出牌阶段开始时,你可以摸三张牌,然后弃置3-X张牌(X为你本局游戏内失去过的装备牌的数目且至多为3)。若你没有以此法弃置基本牌或锦囊牌,则你可以视为使用了一张不计入出牌阶段使用次数的【杀】。", + xinshanjia_info:"出牌阶段开始时,你可以摸三张牌,然后弃置3-X张牌(X为你本局游戏内不因使用而失去过的装备牌的数目且至多为3)。若你没有以此法弃置基本牌或锦囊牌,则你可以视为使用了一张无距离限制且不计入出牌阶段使用次数的【杀】。", "new_meibu":"魅步", "new_meibu_info":"其他角色的出牌阶段开始时,若你在其攻击范围内,你可以弃置一张牌,令该角色于本回合内获得技能〖止息〗。若你以此法弃置的牌不是【杀】或黑色锦囊牌,则本回合其与你的距离视为1。", "new_mumu":"穆穆", diff --git a/character/sp2.js b/character/sp2.js index 7a95b30c1..483de1907 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ name:'sp2', connect:true, character:{ + re_nanhualaoxian:['male','qun',4,['gongxiu','jinghe']], + zhouyi:['female','wu',3,['zhukou','mengqing']], lvlingqi:['female','qun',4,['guowu','zhuangrong']], dufuren:['female','wei',3,['yise','shunshi']], zhanghu:['male','wei',4,['cuijian','tongyuan']], @@ -104,10 +106,545 @@ game.import('character',function(lib,game,ui,get,ai,_status){ sp_fadong:['ol_dingyuan','wangrong','re_quyi','hanfu'], sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'], sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin'], - sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu','dufuren'], + sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','liangxing','re_niujin','re_dongzhao','re_dongcheng','yangwan','heyan','re_panshu','zhanghu','dufuren','zhouyi','re_nanhualaoxian','lvlingqi'], } }, skill:{ + //南华老仙 + jinghe:{ + enable:'phaseUse', + filter:function(event,player){ + return !player.hasSkill('jinghe_clear'); + }, + selectCard:function(){ + if(ui.selected.targets.length) return [ui.selected.targets.length,4]; + return [1,4]; + }, + selectTarget:function(){ + return ui.selected.cards.length; + }, + filterTarget:true, + filterCard:function(card){ + if(ui.selected.cards.length){ + var name=get.name(card); + for(var i of ui.selected.cards){ + if(get.name(i)==name) return false; + } + } + return true; + }, + check:function(card){ + var player=_status.event.player; + if(game.countPlayer(function(current){ + return get.attitude(player,current)>0; + })>ui.selected.cards.length) return get.position(card)=='e'?2:1; + return 0; + }, + position:'he', + complexCard:true, + discard:false, + lose:false, + delay:false, + multitarget:true, + multiline:true, + content:function(){ + 'step 0' + player.showCards(cards,get.translation(player)+'发动了【经合】'); + event.skills=lib.skill.jinghe.derivation.randomGets(targets.length); + player.addTempSkill('jinghe_clear',{player:'phaseBegin'}); + event.targets.sortBySeat(); + 'step 1' + event.target=targets[targets.length-event.skills.length]; + event.target.chooseControl(event.skills).set('choiceList',event.skills.map(function(i){ + return '
【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,player)+'
'; + })).set('displayIndex',false).set('prompt','选择获得一个技能'); + 'step 2' + var skill=result.control; + event.skills.remove(skill); + target.addAdditionalSkill('jinghe_'+player.playerid,skill); + target.popup(skill); + game.log(target,'获得了技能','#g【'+get.translation(skill)+'】'); + if(event.skills.length) event.goto(1); + if(target!=game.me&&!target.isOnline2()) game.delayx(); + }, + ai:{ + threaten:3, + order:10, + result:{ + target:1, + }, + }, + derivation:['releiji','rebiyue','new_retuxi','mingce','zhiyan','nhyinbing','nhhuoqi','nhguizhu','nhxianshou','nhlundao','nhguanyue','nhyanzheng'], + subSkill:{ + clear:{ + onremove:function(player){ + game.countPlayer(function(current){ + current.removeAdditionalSkill('jinghe_'+player.playerid); + }); + }, + }, + }, + }, + gongxiu:{ + trigger:{player:'phaseJieshuBegin'}, + direct:true, + filter:function(event,player){ + return player.hasSkill('jinghe_clear'); + }, + content:function(){ + 'step 0' + event.list1=[]; + event.list2=[]; + event.addIndex=0; + var choices=[]; + game.countPlayer(function(current){ + if(current.additionalSkills['jinghe_'+player.playerid]) event.list1.push(current); + else event.list2.push(current); + }); + event.list1.sortBySeat(); + if(event.list1.length) choices.push('令'+get.translation(event.list1)+(event.list1.length>1?'各':'')+'摸一张牌'); + else event.addIndex++; + event.list2.sortBySeat(); + if(event.list2.length) choices.push('令'+get.translation(event.list2)+(event.list2.length>1?'各':'')+'弃置一张手牌'); + player.chooseControl('cancel2').set('choiceList',choices).set('prompt',get.prompt('gongxiu')).set('',function(){ + var evt=_status.event.getParent(); + if(evt.list2.filter(function(current){ + return get.attitude(player,current)<=0&&!current.hasSkillTag('noh'); + }).length-evt.list1.length>1) return 1-evt.addIndex; + return 0; + }); + 'step 1' + if(result.control!='cancel2'){ + if(result.index+event.addIndex==0){ + player.logSkill('gongxiu',event.list1); + game.asyncDraw(event.list1); + } + else{ + player.logSkill('gongxiu',event.list2); + for(var i of event.list2) i.chooseToDiscard('h',true); + event.finish(); + } + } + else event.finish(); + 'step 2' + game.delayx(); + }, + }, + nhyinbing:{ + trigger:{source:'damageBefore'}, + forced:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'; + }, + content:function(){ + trigger.cancel(); + trigger.player.loseHp(trigger.num); + }, + group:'nhyinbing_draw', + subSkill:{ + draw:{ + trigger:{global:'loseHpAfter'}, + forced:true, + filter:function(event,player){ + return player!=event.player; + }, + content:function(){ + player.draw(); + }, + }, + }, + }, + nhhuoqi:{ + enable:'phaseUse', + usable:1, + filter:function(event,player){ + return player.countCards('he')>0; + }, + position:'he', + filterCard:true, + filterTarget:function(card,player,target){ + return target.isMinHp(); + }, + check:function(card){ + return 7-get.value(card); + }, + content:function(){ + target.recover(); + target.draw(); + }, + ai:{ + order:1, + tag:{ + draw:1, + recover:1, + }, + result:{ + target:function(player,target){ + if(target.isDamaged()) return 3; + if(ui.selected.cards.length) return 0; + return 1; + }, + }, + }, + }, + nhguizhu:{ + trigger:{global:'dying'}, + usable:1, + logTarget:'player', + check:function(event,player){ + return get.attitude(player,event.player)>0; + }, + content:function(){ + trigger.player.draw(2); + }, + }, + nhxianshou:{ + enable:'phaseUse', + usable:1, + filterTarget:true, + content:function(){ + target.draw(target.isHealthy()?2:1); + }, + ai:{ + order:1, + tag:{ + draw:1, + }, + result:{ + target:function(player,target){ + return target.isHealthy()?2:0.5; + }, + }, + }, + }, + nhlundao:{ + trigger:{player:'damageEnd'}, + filter:function(event,player){ + return event.source&&player!=event.source&&player.countCards('h')!=event.source.countCards('h'); + }, + logTarget:'source', + check:function(event,player){ + return (player.countCards('h')0; + }, + content:function(){ + if(player.countCards('h')>trigger.source.countCards('h')) player.draw(); + else player.discardPlayerCard(trigger.source,'he',true); + }, + }, + nhguanyue:{ + trigger:{player:'phaseJieshuBegin'}, + frequent:true, + content:function(){ + 'step 0' + var cards=get.cards(2); + player.chooseButton(['观月:选择获得一张牌',cards.slice(0)],true).set('ai',function(button){ + return get.value(button.link,_status.event.player); + }); + while(cards.length){ + ui.cardPile.insertBefore(cards.pop(),ui.cardPile.firstChild); + } + 'step 1' + if(result.bool){ + player.gain(result.links,'gain2'); + } + 'step 2' + game.updateRoundNumber(); + }, + }, + nhyanzheng:{ + trigger:{player:'phaseZhunbeiBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('h')>0; + }, + content:function(){ + 'step 0' + player.chooseCard('h',get.prompt('nhyanzheng2')).set('goon',function(){ + var num=player.countCards('h')-1; + return game.countPlayer(function(current){ + return get.damageEffect(current,player,player)>0; + })>=Math.min(3,num) + }()).set('ai',function(card){ + if(_status.event.goon) return Math.max(1,get.value(card)); + return 0; + }); + 'step 1' + if(result.bool){ + player.logSkill('nhyanzheng'); + var cards=player.getCards('h',function(card){ + return card!=result.cards[0]&&lib.filter.cardDiscardable(card,player,'nhyanzheng'); + }); + if(cards.length){ + player.discard(cards); + event.num=cards.length; + } + else event.finish(); + } + else event.finish(); + 'step 2' + num=Math.min(num,game.countPlayer()); + player.chooseTarget([1,num],true,'对'+(num>1?'至多':'')+get.cnNumber(num)+'名角色造成1点伤害').set('ai',function(target){ + var player=_status.event.player; + return get.damageEffect(target,player,player); + }); + 'step 3' + if(result.bool){ + var targets=result.targets.sortBySeat(); + player.line(targets,'green'); + for(var i of targets) i.damage(); + } + }, + }, + //周夷 + zhukou:{ + audio:2, + trigger:{source:'damageSource'}, + filter:function(event,player){ + if(!player.getHistory('useCard').length) return false; + var evt=event.getParent('phaseUse'); + if(!evt||!evt.player) return false; + return player.getHistory('sourceDamage',function(evtx){ + return evtx.getParent('phaseUse')==evt; + }).indexOf(event)==0; + }, + frequent:true, + content:function(){ + player.draw(player.getHistory('useCard').length); + }, + group:'zhukou_all', + subSkill:{ + all:{ + audio:'zhukou', + trigger:{player:'phaseJieshuBegin'}, + filter:function(event,player){ + return game.hasPlayer((current)=>(current!=player)&&!player.getHistory('sourceDamage').length); + }, + prompt:'是否发动【逐寇】?', + prompt2:'对所有其他角色各造成1点伤害', + logTarget:(event,player)=>(game.filterPlayer((current)=>(current!=player))), + check:function(event,player){ + return game.countPlayer(function(current){ + if(current==player) return false; + var num=get.damageEffect(current,player,player); + if(num<0&¤t.hp>2) num/=3; + return num+0.01; + })>0; + }, + content:function(){ + var list=game.filterPlayer((current)=>(current!=player)).sortBySeat(); + for(var i of list) i.damage(); + }, + }, + }, + }, + mengqing:{ + trigger:{player:'phaseZhunbeiBegin'}, + forced:true, + filter:function(event,player){ + return game.hasPlayer((current)=>(current!=player))&&!game.hasPlayer((current)=>(current!=player&¤t.isHealthy())); + }, + juexingji:true, + skillAnimation:true, + animationColor:'wood', + content:function(){ + player.awakenSkill('mengqing'); + player.gainMaxHp(3); + player.recover(3); + player.removeSkill('zhukou'); + player.addSkill('yuyun'); + }, + }, + yuyun:{ + trigger:{player:'phaseUseBegin'}, + forced:true, + filter:function(event,player){ + return player.hp>0||player.maxHp>1; + }, + content:function(){ + 'step 0' + if(player.maxHp<=1) event._result={control:'失去体力',index:0}; + else if(player.hp<1) event._result={control:'减体力上限',index:1}; + else player.chooseControl('失去体力','减体力上限').set('prompt','玉陨:失去1点体力或减1点体力上限').set('ai',function(){ + var player=_status.event.player; + if(player.hp<2||player.getDamagedHp()>2) return 1; + return 0; + }); + 'step 1' + if(result.index==1) player.loseMaxHp(); + else player.loseHp(); + 'step 2' + event.videoId=lib.status.videoId++; + var func=function(player,id){ + var list=[ + '选项一:摸两张牌', + '选项二:本回合使用黑色【杀】无距离和次数限制', + '选项三:本回合手牌上限视为无限', + '选项四:弃置一名其他角色的一张手牌和一张装备区的牌', + '选项五:令一名手牌最少的角色将手牌数摸至体力上限(至多摸至五张)', + ]; + var choiceList=ui.create.dialog('玉陨:请选择一'+(player.getDamagedHp()>1?'至两':'')+'项'); + choiceList.videoId=id; + for(var i=0;inum2) num2=val; + }); + if(current.countCards('h')>0&&!current.hasSkillTag('noh')) num2++; + if(num2>num) num=num2; + } + }); + return num/4; + break; + case 4: + var num=0; + game.countPlayer(function(current){ + if(current!=player&&get.attitude(player,current)>0&¤t.isMinHandcard()){ + var num2=Math.min(5,current.maxHp)-current.countCards('h'); + if(num2>num) num=num2; + } + }); + return num*0.8; + break; + } + }); + if(player.getDamagedHp()>1) next.set('selectButton',[1,2]); + 'step 3' + if(player.isOnline2()){ + player.send('closeDialog',event.videoId); + } + event.dialog.close(); + result.links.sort(); + for(var i of result.links) game.log(player,'选择了','#g【玉陨】','的','#y选项'+get.cnNumber(1+i,true)) + event.links=result.links; + if(result.links.contains(0)) player.draw(2); + if(result.links.contains(1)) player.addTempSkill('yuyun_sha'); + if(result.links.contains(2)) player.addTempSkill('yuyun_114514'); + if(!result.links.contains(3)){ + if(result.links.contains(4)) event.goto(6); + else event.finish(); + } + 'step 4' + if(game.hasPlayer(function(current){ + return current!=player&¤t.hasCard((card)=>lib.filter.canBeDiscarded(card,current,player),'he'); + })){ + player.chooseTarget(true,'弃置一名其他角色手牌区和装备区内的各一张牌',function(card,player,current){ + return current!=player&¤t.hasCard((card)=>lib.filter.canBeDiscarded(card,current,player),'he'); + }).set('ai',function(current){ + var num2=0,player=_status.event.player; + if(get.attitude(player,current)>=0) return 0; + current.countDiscardableCards(player,'e',function(card){ + var val=get.value(card,current); + if(val>num2) num2=val; + }); + if(current.countCards('h')>0&&!current.hasSkillTag('noh')) num2++; + }); + } + else if(event.links.contains(4)) event.goto(6); + else event.finish(); + 'step 5' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + var num=0; + if(target.hasCard((card)=>lib.filter.canBeDiscarded(card,target,player),'h')) num++; + if(target.hasCard((card)=>lib.filter.canBeDiscarded(card,target,player),'e')) num++; + if(num){ + player.discardPlayerCard(target,num,'he',true).set('filterButton',function(button){ + for(var i=0;i2){ + return Math.min(5,target.maxHp)-target.countCards('h'); + } + return att/3; + }); + } + else event.finish(); + 'step 7' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + target.drawTo(Math.min(5,target.maxHp)); + } + }, + subSkill:{ + '114514':{ + mod:{ + maxHandcardFinal:function(player,num){ + return 114514; + }, + }, + charlotte:true, + }, + sha:{ + mod:{ + cardUsable:function(card){ + if(card.name=='sha'&&get.color(card)=='black') return Infinity; + }, + targetInRange:function(card){ + if(card.name=='sha'&&get.color(card)=='black') return true; + }, + }, + charlotte:true, + }, + }, + }, //樊稠 xinxingluan:{ audio:'xinfu_xingluan', @@ -1908,7 +2445,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, content:function(){ 'step 0' - player.chooseTarget('请选择【节烈】的目标','其于回合外摸牌后,你摸等量的牌;其进入濒死状态时,你可令其回复体力至1点;其死亡后,你弃置所有牌并失去1点体力',lib.filter.notMe,true).set('ai',function(target){ + player.chooseTarget('请选择【抗歌】的目标','其于回合外摸牌后,你摸等量的牌;其进入濒死状态时,你可令其回复体力至1点;其死亡后,你弃置所有牌并失去1点体力',lib.filter.notMe,true).set('ai',function(target){ return get.attitude(_status.event.player,target)>0; }); 'step 1' @@ -10031,6 +10568,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ caoanmin:'曹安民(?-197年),沛国谯县(今安徽亳州)人,字安民。东汉时期人物,曹德之子,曹操之侄,曹昂的堂兄弟,曹丕的堂兄,死于宛城之战。按曹丕《典论》记载的“亡兄孝廉子脩、从兄安民遇害。”等情况来看,安民应该是曹操侄子错不了,曹丕是他们属于兄弟关系肯定不会弄错。另外从典论的记载来看安民是和子脩并提的,子脩是曹昂的字,安民则肯定也是字不是名,至于三国志中记载则应取自曹丕之《典论》但陈寿又不知曹安民其名,故写为“长子昂、弟子安民”。', dufuren:'杜夫人(生卒年不详),东汉末年至三国时人。有异色,原为吕布将秦宜禄之妻,生子秦朗。后为曹操纳为妾,又生曹林、曹衮、金乡公主。', lvlingqi:'吕玲绮,虚拟人物,源于日本光荣株式会社(现光荣特库摩公司)旗下游戏《真·三国无双》系列,初次登场于《真三国无双7:猛将传》。吕布的女儿,寂寥而威风凛凛的战姬,发挥着不亚于父亲的武艺,非常勇敢地身先士卒立于前线。虽然有着能够直面困难的坚强意志,却由于过去的经历而有着非常害怕孤独的一面。', + zhouyi:'周夷,游卡桌游旗下产品《三国杀》自行杜撰的人物。设定为周瑜的妹妹,和周瑜一同征战。', }, characterTitle:{ wulan:'#b对决限定武将', @@ -10109,6 +10647,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ dongbai:['re_dongbai','dongbai'], gexuan:['gexuan','tw_gexuan'], panshu:['panshu','re_panshu'], + nanhualaoxian:['re_nanhualaoxian','nanhualaoxian'], }, translate:{ lijue:"李傕", @@ -10556,10 +11095,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){ liangjue:'粮绝', liangjue_info:'锁定技,当有黑色牌进入或者离开你的判定区或装备区后,若你的体力值大于1,你失去1点体力,然后摸两张牌。', tangji:'唐姬', - jielie:'节烈', + jielie:'抗歌', jielie_info:'你的第一个回合开始时,选择一名其他角色,该角色每次于其回合外获得牌后,你摸等量的牌(每回合至多摸三张);其进入濒死状态时,你可令其回复体力至1点(每轮限一次)。该角色死亡时,你弃置所有牌并失去1点体力。', - kangge:'抗歌', - kangge_info:'当你受到除自己和“节烈”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“节烈”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。', + kangge:'节烈', + kangge_info:'当你受到除自己和“抗歌”角色以外的角色造成的伤害时,你可以防止此伤害并选择一种花色,然后你失去X点体力,令“抗歌”角色从弃牌堆中随机获得X张此花色的牌(X为伤害值)。', yangwan:'杨婉', youyan:'诱言', youyan_info:'出牌阶段/弃牌阶段各限一次,当你的牌因弃置进入弃牌堆后,你可以从牌堆中获得本次弃牌中没有的花色的牌各一张。', @@ -10642,7 +11181,33 @@ game.import('character',function(lib,game,ui,get,ai,_status){ rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。', xinxingluan:'兴乱', xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后,你可选择一项:①观看牌堆中的两张点数为6的牌并获得其中一张(没有则改为摸一张牌);②令一名其他角色弃置一张点数为6的牌或交给你一张牌;③获得场上的一张点数为6的牌。', - + zhouyi:'周夷', + zhukou:'逐寇', + zhukou_info:'当你于一名角色的出牌阶段第一次造成伤害后,你可以摸X张牌(X为本回合你已使用的牌数)。你的结束阶段,若你本回合没有造成伤害,你可以对所有其他角色造成1点伤害。', + mengqing:'氓情', + mengqing_info:'觉醒技,准备阶段。若其他角色均已受伤,你加3点体力上限并回复3点体力,失去〖逐寇〗,获得〖玉殒〗。', + yuyun:'玉殒', + yuyun_info:'锁定技,出牌阶段开始时,你失去1点体力或体力上限(不能减至1以下),然后选择一项(若你已损失体力值大于1,则多选一项):①摸两张牌;②本回合使用黑色【杀】无距离和次数限制;③本回合的手牌上限视为无限;④弃置一名其他角色一张手牌和一张装备区中的牌;⑤令手牌最少的一名角色将手牌摸至体力上限(最多摸至5)。', + re_nanhualaoxian:'南华老仙', + gongxiu:'共修', + gongxiu_info:'结束阶段,若你本回合内发动过〖经合〗,则你选择一项:①令所有本回合内成为过〖经合〗目标的角色各摸一张牌;②令所有本回合内未成为过〖经合〗目标的角色各弃置一张手牌。', + jinghe:'经合', + jinghe_info:'出牌阶段限一次,你可以展示四张牌名各不相同的牌并选择等量的角色。系统从“写满技能的天书”中随机选择等量的技能,然后这些角色依次选择获得其中的一个。', + nhyinbing:'阴兵', + nhyinbing_info:'锁定技,你使用的【杀】造成伤害改为失去体力。其他角色失去体力后,你摸一张牌。', + nhhuoqi:'活气', + nhhuoqi_info:'出牌阶段限一次,你可以弃置一张牌,然后令体力值最少的一名角色回复1点体力并摸一张牌。', + nhguizhu:'鬼助', + nhguizhu_info:'一名角色进入濒死状态时,你可以摸两张牌(每回合限一次)。', + nhxianshou:'仙授', + nhxianshou_info:'出牌阶段限一次,你可以选择一名角色令其摸一张牌。若其未受伤,则多摸一张。', + nhlundao:'论道', + nhlundao_info:'当你受到伤害后,若伤害来源比你手牌多,你可以弃置其一张牌;若伤害来源比你手牌少,你摸一张牌。', + nhguanyue:'观月', + nhguanyue_info:'结束阶段,你可以观看牌堆顶两张牌,然后获得其中—张,另一张放回牌堆顶。', + nhyanzheng:'言政', + nhyanzheng_info:'准备阶段,若你的手牌数大于1,你可以保留一张手牌并弃置其余的牌,然后选择至多等于弃牌数量的角色,对这些角色各造成1点伤害。', + sp_whlw:"文和乱武", sp_zlzy:"逐鹿中原", sp_longzhou:"同舟共济", diff --git a/character/tw.js b/character/tw.js index e2b57814d..6753fe14d 100644 --- a/character/tw.js +++ b/character/tw.js @@ -5,12 +5,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){ connect:true, characterSort:{ tw:{ - tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu'], + tw_mobile:['tw_beimihu','nashime','tw_gexuan','tw_dongzhao','jiachong','duosidawang','wuban','yuejiu','tw_fuwan'], tw_yijiang:['tw_caoang','tw_caohong','tw_zumao','tw_dingfeng','tw_maliang','tw_xiahouba'], tw_english:['kaisa'], }, }, character:{ + tw_fuwan:['male','qun',4,['twmoukui']], tw_zhaoxiang:['female','shu',4,['refanghun','twfuhan','twqueshi']], yuejiu:['male','qun',4,['cuijin']], wuban:['male','shu',4,['jintao']], @@ -147,6 +148,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, skill:{ + twmoukui:{ + trigger:{player:'useCardToPlayered'}, + direct:true, + filter:function(event,player){ + return event.card&&event.card.name=='sha'; + }, + content:function(){ + 'step 0' + var list=['选项一']; + if(trigger.target.countDiscardableCards(player,'he')>0) list.push('选项二'); + list.push('背水!'); + list.push('cancel2'); + player.chooseControl(list).set('choiceList',[ + '摸一张牌', + '弃置'+get.translation(trigger.target)+'的一张牌', + '背水!依次执行以上两项。然后若此【杀】未令其进入濒死状态,则其弃置你的一张牌。', + ]).set('prompt',get.prompt('twmoukui',trigger.target)); + 'step 1' + if(result.control!='cancel2'){ + var target=trigger.target; + player.logSkill('twmoukui',target); + if(result.control=='选项一'||result.control=='背水!') player.draw(); + if(result.control=='选项二'||result.control=='背水!') player.discardPlayerCard(target,true,'he'); + if(result.control=='背水!'){ + player.addTempSkill('twmoukui_effect'); + var evt=trigger.getParent(); + if(!evt.twmoukui_effect) evt.twmoukui_effect=[]; + evt.twmoukui_effect.add(target); + } + } + }, + subSkill:{ + effect:{ + trigger:{player:'useCardAfter'}, + charlotte:true, + forced:true, + filter:function(event,player){ + return event.twmoukui_effect&&event.twmoukui_effect.filter(function(current){ + return current.isIn()&&!current.hasHistory('damage',function(evt){ + return evt._dyinged&&evt.card==event.card; + }); + }).length>0; + }, + content:function(){ + var list=trigger.twmoukui_effect.filter(function(current){ + return current.isIn()&&!current.hasHistory('damage',function(evt){ + return evt._dyinged&&evt.card==event.card; + }); + }).sortBySeat(); + for(var i of list){ + i.discardPlayerCard(player,true,'he').boolline=true; + } + }, + }, + }, + }, twfuhan:{ audio:'fuhan', trigger:{player:'phaseZhunbeiBegin'}, @@ -1583,6 +1640,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ twqueshi_info:'游戏开始时,你将【梅影枪】置于你的装备区。', meiyingqiang:'梅影枪', meiyingqiang_info:'当你于其他角色的回合内第一次失去牌时,你可以使用一张【杀】。', + tw_fuwan:'TW伏完', + twmoukui:'谋溃', + twmoukui_info:'当你使用【杀】指定目标后,你可以选择一项:①摸一张牌;②弃置该角色的一张牌;③背水:若此【杀】未因造成伤害而令该角色进入过濒死状态,则该角色弃置你的一张牌。', tw_mobile:'移动版', tw_yijiang:'一将成名TW', tw_english:'英文版', diff --git a/game/asset.js b/game/asset.js index b5522c909..dea1540dd 100644 --- a/game/asset.js +++ b/game/asset.js @@ -1,5 +1,5 @@ window.noname_asset_list=[ - 'v1.9.110.9.3.5', + 'v1.9.110.9.4', 'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_online.mp3', 'audio/background/aozhan_rewrite.mp3', @@ -801,6 +801,15 @@ window.noname_asset_list=[ 'audio/die/dufuren.mp3', 'audio/die/lvlingqi.mp3', 'audio/die/ol_wangrong.mp3', + 'audio/die/gz_gongsunyuan.mp3', + 'audio/die/gz_huangzu.mp3', + 'audio/die/gz_liuba.mp3', + 'audio/die/gz_simazhao.mp3', + 'audio/die/gz_sunchen.mp3', + 'audio/die/gz_zhugeke.mp3', + 'audio/die/re_nanhualaoxian.mp3', + 'audio/die/shen_sunce.mp3', + 'audio/die/yuanhuan.mp3', 'audio/skill/decadezishou1.mp3', 'audio/skill/decadezishou2.mp3', @@ -3611,6 +3620,48 @@ window.noname_asset_list=[ 'audio/skill/yise2.mp3', 'audio/skill/zhuangrong1.mp3', 'audio/skill/zhuangrong2.mp3', + 'audio/skill/aocai_gz_zhugeke1.mp3', + 'audio/skill/aocai_gz_zhugeke2.mp3', + 'audio/skill/fengjie1.mp3', + 'audio/skill/fengjie2.mp3', + 'audio/skill/gongxiu1.mp3', + 'audio/skill/gongxiu2.mp3', + 'audio/skill/gzduwu1.mp3', + 'audio/skill/gzduwu2.mp3', + 'audio/skill/gzfankui1.mp3', + 'audio/skill/gzfankui2.mp3', + 'audio/skill/gzhuaiyi1.mp3', + 'audio/skill/gzhuaiyi2.mp3', + 'audio/skill/gzshilu1.mp3', + 'audio/skill/gzshilu2.mp3', + 'audio/skill/gzsuzhi1.mp3', + 'audio/skill/gzsuzhi2.mp3', + 'audio/skill/gzxiongnve1.mp3', + 'audio/skill/gzxiongnve2.mp3', + 'audio/skill/gzxishe1.mp3', + 'audio/skill/gzxishe2.mp3', + 'audio/skill/gzzhaoxin1.mp3', + 'audio/skill/gzzhaoxin2.mp3', + 'audio/skill/gzzisui1.mp3', + 'audio/skill/gzzisui2.mp3', + 'audio/skill/jinghe1.mp3', + 'audio/skill/jinghe2.mp3', + 'audio/skill/jueyong1.mp3', + 'audio/skill/jueyong2.mp3', + 'audio/skill/pinghe1.mp3', + 'audio/skill/pinghe2.mp3', + 'audio/skill/poxiang1.mp3', + 'audio/skill/poxiang2.mp3', + 'audio/skill/qingjue1.mp3', + 'audio/skill/qingjue2.mp3', + 'audio/skill/qingyin1.mp3', + 'audio/skill/qingyin2.mp3', + 'audio/skill/scfuhai1.mp3', + 'audio/skill/scfuhai2.mp3', + 'audio/skill/tongduo1.mp3', + 'audio/skill/tongduo2.mp3', + 'audio/skill/yingba1.mp3', + 'audio/skill/yingba2.mp3', 'audio/voice/male/0.mp3', 'audio/voice/male/1.mp3', @@ -4559,6 +4610,20 @@ window.noname_asset_list=[ 'image/character/dufuren.jpg', 'image/character/lvlingqi.jpg', 'image/character/ol_wangrong.jpg', + 'image/character/fuqian.jpg', + 'image/character/gz_gongsunyuan.jpg', + 'image/character/gz_huangzu.jpg', + 'image/character/gz_liuba.jpg', + 'image/character/gz_simazhao.jpg', + 'image/character/gz_zhugeke.jpg', + 'image/character/re_nanhualaoxian.jpg', + 'image/character/shen_sunce.jpg', + 'image/character/sp_chendong.jpg', + 'image/character/sp_zongyu.jpg', + 'image/character/sunchen.jpg', + 'image/character/tw_fuwan.jpg', + 'image/character/yuanhuan.jpg', + 'image/character/zhouyi.jpg', 'image/character/baiwuchang.jpg', 'image/character/baosanniang.jpg', diff --git a/game/game.js b/game/game.js index e3e00e282..161a62a43 100644 --- a/game/game.js +++ b/game/game.js @@ -13527,8 +13527,8 @@ event.dialog.forcebutton=true; event.dialog.open(); for(var i=0;i选项'+ - get.cnNumber(i+1,true)+':'+event.choiceList[i]+''); + event.dialog.add(''); } } else if(event.prompt){ @@ -15676,6 +15676,7 @@ "step 6" if(player.hp<=0&&player.isAlive()){ game.delayx(); + event._dyinged=true; player.dying(event); } if(source&&lib.config.border_style=='auto'){ @@ -15760,6 +15761,7 @@ "step 1" if(player.hp<=0){ game.delayx(); + event._dyinged=true; player.dying(event); } }, @@ -21012,6 +21014,7 @@ else if(typeof info.intro.onunmark=='function'){ info.intro.onunmark(this.storage[name],this); } + else delete this.storage[name]; } } return this; diff --git a/game/update.js b/game/update.js index 9564bdfa0..ab6e86f56 100644 --- a/game/update.js +++ b/game/update.js @@ -1,15 +1,15 @@ window.noname_update={ - version:'1.9.110.9.3.5', - update:'1.9.110.9.3.4', + version:'1.9.110.9.4', + update:'1.9.110.9.3.5', changeLog:[ - '杜夫人、吕玲绮、OL王荣', - '司马伷,樊稠技能修改', + '周夷、南华老仙、神孙策、傅佥、陈武董袭、宗预、袁涣、国战孙綝、海外服伏完', + '武将技能同步修改', 'bug修复', ], files:[ //'card/extra.js', //'card/gujian.js', - //'card/guozhan.js', + 'card/guozhan.js', //'card/gwent.js', //'card/huanlekapai.js', //'card/mtg.js', @@ -21,7 +21,7 @@ window.noname_update={ //'card/zhenfa.js', //'card/zhulu.js', 'character/diy.js', - //'character/extra.js', + 'character/extra.js', //'character/hearth.js', //'character/gujian.js', //'character/gwent.js', @@ -33,16 +33,16 @@ window.noname_update={ //'character/ow.js', 'character/rank.js', 'character/refresh.js', - 'character/shenhua.js', + //'character/shenhua.js', 'character/sp.js', 'character/sp2.js', - //'character/tw.js', - 'character/standard.js', + 'character/tw.js', + //'character/standard.js', //'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', @@ -51,10 +51,10 @@ window.noname_update={ //'layout/nova/layout.css', //'layout/mobile/equip.css', //'mode/boss.js', - 'mode/brawl.js', + //'mode/brawl.js', //'mode/chess.js', //'mode/connect.js', - //'mode/doudizhu.js', + 'mode/doudizhu.js', 'mode/guozhan.js', //'mode/identity.js', //'mode/single.js', diff --git a/image/character/fuqian.jpg b/image/character/fuqian.jpg new file mode 100644 index 000000000..8518e35f8 Binary files /dev/null and b/image/character/fuqian.jpg differ diff --git a/image/character/gz_gongsunyuan.jpg b/image/character/gz_gongsunyuan.jpg new file mode 100644 index 000000000..e818f688a Binary files /dev/null and b/image/character/gz_gongsunyuan.jpg differ diff --git a/image/character/gz_huangzu.jpg b/image/character/gz_huangzu.jpg new file mode 100644 index 000000000..7077d66c2 Binary files /dev/null and b/image/character/gz_huangzu.jpg differ diff --git a/image/character/gz_liuba.jpg b/image/character/gz_liuba.jpg new file mode 100644 index 000000000..5fe330c1c Binary files /dev/null and b/image/character/gz_liuba.jpg differ diff --git a/image/character/gz_simazhao.jpg b/image/character/gz_simazhao.jpg new file mode 100644 index 000000000..45aad090f Binary files /dev/null and b/image/character/gz_simazhao.jpg differ diff --git a/image/character/gz_zhugeke.jpg b/image/character/gz_zhugeke.jpg new file mode 100644 index 000000000..fce0fbd50 Binary files /dev/null and b/image/character/gz_zhugeke.jpg differ diff --git a/image/character/re_nanhualaoxian.jpg b/image/character/re_nanhualaoxian.jpg new file mode 100644 index 000000000..8da2d0bbd Binary files /dev/null and b/image/character/re_nanhualaoxian.jpg differ diff --git a/image/character/shen_sunce.jpg b/image/character/shen_sunce.jpg new file mode 100644 index 000000000..afbe0dc95 Binary files /dev/null and b/image/character/shen_sunce.jpg differ diff --git a/image/character/sp_chendong.jpg b/image/character/sp_chendong.jpg new file mode 100644 index 000000000..559f553f8 Binary files /dev/null and b/image/character/sp_chendong.jpg differ diff --git a/image/character/sp_zongyu.jpg b/image/character/sp_zongyu.jpg new file mode 100644 index 000000000..6a24f972e Binary files /dev/null and b/image/character/sp_zongyu.jpg differ diff --git a/image/character/sunchen.jpg b/image/character/sunchen.jpg new file mode 100644 index 000000000..7841a996d Binary files /dev/null and b/image/character/sunchen.jpg differ diff --git a/image/character/tw_fuwan.jpg b/image/character/tw_fuwan.jpg new file mode 100644 index 000000000..1a9fa0480 Binary files /dev/null and b/image/character/tw_fuwan.jpg differ diff --git a/image/character/yuanhuan.jpg b/image/character/yuanhuan.jpg new file mode 100644 index 000000000..2ca23e6c4 Binary files /dev/null and b/image/character/yuanhuan.jpg differ diff --git a/image/character/zhouyi.jpg b/image/character/zhouyi.jpg new file mode 100644 index 000000000..bd95d75fe Binary files /dev/null and b/image/character/zhouyi.jpg differ diff --git a/mode/doudizhu.js b/mode/doudizhu.js index 9c4408881..efa7e9e91 100644 --- a/mode/doudizhu.js +++ b/mode/doudizhu.js @@ -2039,6 +2039,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ content:function(){ trigger.cancel(); player.removeMark('binglin_shaxue',1,false); + trigger.source.removeMark('binglin_shaxue',1,false); }, intro:{content:'剩余次数:#'}, ai:{ @@ -2052,6 +2053,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ toushiche_skill:{ trigger:{player:'phaseJieshuBegin'}, forced:true, + equipSkill:true, filter:function(event,player){ return lib.skill.toushiche_skill.logTarget(null,player).length>0; }, diff --git a/mode/guozhan.js b/mode/guozhan.js index 1a1816bce..9c93630a3 100644 --- a/mode/guozhan.js +++ b/mode/guozhan.js @@ -315,6 +315,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_zhangxiu','gz_liqueguosi','gz_huatuo', 'gz_zhanghuyuechen','gz_re_xushu','gz_mifangfushiren', 'gz_huangzu','gz_weiguan','gz_miheng', + 'gz_wenqin', ], '4':[ 'gz_dianwei','gz_dengai','gz_xunyu', @@ -323,7 +324,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ 'gz_zhangjiao','gz_pangde','gz_liuqi', 'gz_jin_zhangchunhua','gz_zongyu','gz_shixie', 'gz_jin_yanghuiyu','gz_tangzi','gz_yanbaihu', - 'gz_wujing','gz_zhugeke','gz_wenqin', + 'gz_wujing','gz_zhugeke','gz_sunchen', ], '3':[ 'gz_xiahoudun','gz_yuejin','gz_caoren', @@ -358,7 +359,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan'], guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_zhuling'], guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'], - guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan'], + guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan','gz_sunchen'], guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi'], guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu"], } @@ -381,8 +382,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_shibing2key:['female','key',0,[],['unseen']], gz_zhonghui:['male','ye',4,['gzquanji','gzpaiyi'],['gzskin']], - gz_simazhao:['male','ye',3,['gzzhaoxin','gzsuzhi']], - gz_gongsunyuan:['male','ye',4,['gzhuaiyi','gzzisui']], + gz_simazhao:['male','ye',3,['gzzhaoxin','gzsuzhi'],['gzskin']], + gz_gongsunyuan:['male','ye',4,['gzhuaiyi','gzzisui'],['gzskin']], + gz_sunchen:['male','ye',4,['gzshilu','gzxiongnve']], gz_tangzi:['male','wu',4,['gzxingzhao'],['doublegroup:wu:wei','gzskin']], gz_mengda:['male','wei',4,['qiuan','liangfan'],['doublegroup:wei:shu']], gz_liuqi:['male','qun',3,['gzwenji','gztunjiang'],['doublegroup:qun:shu','gzskin']], @@ -396,11 +398,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun','gzskin']], gz_xiahouba:['male','shu',4,['gzbaolie'],['doublegroup:shu:wei','gzskin']], gz_panjun:['male','wu',3,['gzcongcha','xinfu_gongqing'],['doublegroup:wu:shu','gzskin']], - gz_huangzu:['male','qun',4,['gzwangong']], - gz_zhugeke:['male','wu',3,['aocai','gzduwu']], + gz_huangzu:['male','qun',4,['gzxishe'],['gzskin']], + gz_zhugeke:['male','wu',3,['aocai','gzduwu'],['gzskin']], gz_wenqin:['male','wei',4,['gzjinfa'],['doublegroup:wei:wu','gzskin']], gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun','gzskin']], - gz_liuba:['male','shu',3,['chouduo','guiyin']], + gz_liuba:['male','shu',3,['tongduo','qingyin'],['gzskin']], gz_pengyang:['male','shu',3,['daming','xiaoni'],['doublegroup:shu:qun','gzskin']], gz_zhuling:['male','wei',4,['gzjuejue','gzfangyuan'],['gzskin']], @@ -524,7 +526,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gz_jin_zhangchunhua:['female','jin',3,['huishi','qingleng']], gz_jin_simayi:['male','jin',3,['smyyingshi','xiongzhi','xinquanbian']], gz_jin_wangyuanji:['female','jin',3,['yanxi']], - gz_jin_simazhao:['male','jin',3,['choufa','zhaoran']], + gz_jin_simazhao:['male','jin',3,['xinchoufa','zhaoran']], gz_jin_xiahouhui:['female','jin',3,['jyishi','shiduo']], gz_jin_simashi:['male','jin',3,['yimie','tairan']], gz_duyu:['male','jin',4,['sanchen']], @@ -539,6 +541,252 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ } }, skill:{ + //孙綝 + gzshilu:{ + audio:2, + preHidden:true, + trigger:{global:'dieAfter'}, + prompt2:function(event,player){ + return '将其的所有武将牌'+(player==event.source?'及武将牌库里的两张随机武将牌':'')+'置于武将牌上作为“戮”'; + }, + logTarget:'player', + content:function(){ + var list=[],target=trigger.player; + if(target.name1&&target.name1.indexOf('gz_shibing')!=0&&_status.characterlist.contains(target.name1)) list.push(target.name1); + if(target.name2&&target.name2.indexOf('gz_shibing')!=0&&_status.characterlist.contains(target.name1)) list.push(target.name2); + _status.characterlist.removeArray(list); + if(player==trigger.source) list.addArray(_status.characterlist.randomRemove(2)); + if(list.length){ + player.markAuto('gzshilu',list); + game.log(player,'将','#g'+get.translation(list),'置于武将牌上作为','#y“戮”'); + game.broadcastAll(function(player,list){ + var cards=[]; + for(var i=0;i0&&player.countCards('he')>0; + }, + direct:true, + content:function(){ + 'step 0' + var num=Math.min(player.getStorage('gzshilu').length,player.countCards('he')); + player.chooseToDiscard('he',get.prompt('gzshilu'),'弃置至多'+get.cnNumber(num)+'张牌并摸等量的牌',[1,num]).logSkill='gzshilu'; + 'step 1' + if(result.bool&&result.cards&&result.cards.length) player.draw(result.cards.length); + }, + }, + }, + }, + gzxiongnve:{ + audio:2, + trigger:{player:'phaseUseBegin'}, + direct:true, + filter:function(event,player){ + return player.getStorage('gzshilu').length>0; + }, + content:function(){ + 'step 0' + player.chooseButton([get.prompt('gzxiongnve'),[player.storage.gzshilu,'character']]).set('ai',function(button){ + if(!_status.event.goon) return 0; + var name=button.link,group=get.is.double(name,true); + if(!group) group=[lib.character[name][1]]; + for(var i of group){ + if(game.hasPlayer(function(current){ + return player.inRange(current)&¤t.identity==i; + })) return 1+Math.random(); + } + return 0; + }).set('goon',player.countCards('hs',function(card){ + return get.tag(card,'damage')&&player.hasValueTarget(card); + })>1); + 'step 1' + if(result.bool){ + player.logSkill('gzxiongnve'); + lib.skill.gzxiongnve.throwCharacter(player,result.links); + game.delayx(); + var group=get.is.double(result.links[0],true); + if(!group) group=[lib.character[result.links[0]][1]]; + event.group=group; + var str=get.translation(group); + player.chooseControl().set('prompt','选择获得一项效果').set('choiceList',[ + '本回合对'+str+'势力的角色造成的伤害+1', + '本回合对'+str+'势力的角色造成伤害后,获得对方的一张牌', + '本回合对'+str+'势力的角色使用牌没有次数限制', + ]).set('ai',function(){ + var player=_status.event.player; + if(player.countCards('hs',function(card){ + return get.name(card)=='sha'&&player.hasValueTarget(card); + })>player.getCardUsable('sha')) return 0; + return get.rand(1,2); + }); + } + else event.finish(); + 'step 2' + var skill='gzxiongnve_effect'+result.index; + player.markAuto(skill,event.group); + player.addTempSkill(skill); + game.log(player,'本回合对'+get.translation(event.group)+'势力的角色','#g'+lib.skill[skill].promptx) + }, + group:'gzxiongnve_end', + throwCharacter:function(player,list){ + player.unmarkAuto('gzshilu',list); + _status.characterlist.addArray(list); + game.log(player,'从','#y“戮”','中移去了','#g'+get.translation(list)); + game.broadcastAll(function(player,list){ + var cards=[]; + for(var i=0;i0; + }, + logTarget:'player', + content:function(){ + player.gainPlayerCard(trigger.player,true,'he'); + } + }, + effect2:{ + promptx:'使用牌没有次数限制', + charlotte:true, + onremove:true, + intro:{ + content:'对$势力的角色使用牌没有次数限制', + }, + mod:{ + cardUsableTarget:function(card,player,target){ + if(player.getStorage('gzxiongnve_effect2').contains(target.identity)) return true; + }, + }, + }, + effect3:{ + charlotte:true, + audio:'gzxiongnve', + mark:true, + intro:{ + content:'受到的伤害-1', + }, + trigger:{player:'damageBegin1'}, + forced:true, + content:function(){ + trigger.num--; + }, + ai:{ + effect:{ + target:function(card,player,target){ + if(player.hasSkillTag('jueqing',false,target)) return; + var num=get.tag(card,'damage'); + if(num){ + if(num>1) return 0.5; + return 0; + } + } + } + }, + }, + end:{ + trigger:{player:'phaseUseEnd'}, + direct:true, + filter:function(event,player){ + return player.getStorage('gzshilu').length>1; + }, + content:function(){ + 'step 0' + player.chooseButton(['是否移去两张“戮”获得减伤?',[player.storage.gzshilu,'character']],2).set('ai',function(button){ + var name=button.link,group=get.is.double(name,true); + if(!group) group=[lib.character[name][1]]; + for(var i of group){ + if(game.hasPlayer(function(current){ + return current.identity==i; + })) return 0; + } + return 1; + }); + 'step 1' + if(result.bool){ + player.logSkill('gzxiongnve'); + lib.skill.gzxiongnve.throwCharacter(player,result.links); + player.addTempSkill('gzxiongnve_effect3',{player:'phaseBegin'}); + game.delayx(); + } + }, + }, + }, + }, //邓芝 gzjianliang:{ audio:2, @@ -885,7 +1133,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(num>0) player.draw(num); 'step 4' if(trigger.player.isIn()){ - var target=trigger.player,tao=player.canUse('tao',target),sha=game.filterPlayer(function(current){ + var target=trigger.player,tao=(lib.filter.cardEnabled({name:'tao',isCard:true},player)&&lib.filter.targetEnabled2({name:'tao',isCard:true},player,target)),sha=game.filterPlayer(function(current){ return current!=target&¤t!=player&&target.canUse({name:'sha',nature:'thunder',isCard:true},current,false); }); if(sha.length){ @@ -1006,13 +1254,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, //刘巴 - chouduo:{ + tongduo:{ audio:2, trigger:{global:'phaseJieshuBegin'}, direct:true, preHidden:true, filter:function(event,player){ - if(player!=event.player&&!player.hasSkill('chouduo')||!event.player.isFriendOf(player)) return false; + if(player!=event.player&&!player.hasSkill('tongduo')||!event.player.isFriendOf(player)) return false; return event.player.getHistory('lose',function(evt){ return evt.type=='discard'&&evt.cards2.length>0&&evt.getParent('phaseDiscard').player==event.player; }).length>0; @@ -1025,16 +1273,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }); num=Math.min(3,num); event.num=num; - var next=trigger.player.chooseBool('是否发动【筹度】摸'+get.cnNumber(num)+'张牌?'); - if(player==trigger.player) next.setHiddenSkill('chouduo'); + var next=trigger.player.chooseBool('是否发动【统度】摸'+get.cnNumber(num)+'张牌?'); + if(player==trigger.player) next.setHiddenSkill('tongduo'); 'step 1' if(result.bool){ - player.logSkill('chouduo',trigger.player); + player.logSkill('tongduo',trigger.player); trigger.player.draw(num); } }, }, - guiyin:{ + qingyin:{ audio:2, enable:'phaseUse', limited:true, @@ -1073,7 +1321,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ animationColor:'orange', content:function(){ 'step 0' - player.awakenSkill('guiyin'); + player.awakenSkill('qingyin'); event.num=0; 'step 1' if(targets[num].isDamaged()){ @@ -1082,8 +1330,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ event.num++; if(event.numtrigger.player.hp?'不可响应的':'')+'【杀】对其使用',function(card,player){ + player.chooseCard('e',get.prompt('gzxishe',trigger.player),'将装备区内的一张牌当做'+(player.hp>trigger.player.hp?'不可响应的':'')+'【杀】对其使用',function(card,player){ return player.canUse({ name:'sha', cards:[card], @@ -1477,7 +1725,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }).setHiddenSkill(event.name); 'step 1' if(result.bool){ - var next=player.useCard({name:'sha'},result.cards,'gzwangong',trigger.player,false); + var next=player.useCard({name:'sha'},result.cards,'gzxishe',trigger.player,false); if(player.hp>trigger.player.hp) next.oncard=function(){ _status.event.directHit.add(trigger.player); } @@ -1487,12 +1735,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ if(trigger.player.isDead()){ player.mayChangeVice(null,'hidden'); } - else if(lib.skill.gzwangong.filter(trigger,player)) event.goto(0); + else if(lib.skill.gzxishe.filter(trigger,player)) event.goto(0); }, ai:{ directHit_ai:true, skillTagFilter:function(player,tag,arg){ - if(_status.event.getParent().name=='gzwangong'&&arg.card&&arg.card.name=='sha'&& + if(_status.event.getParent().name=='gzxishe'&&arg.card&&arg.card.name=='sha'&& arg.target&&arg.target==_status.event.target&&player.hp>arg.target.hp) return true; return false; }, @@ -1500,7 +1748,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, //公孙渊 gzhuaiyi:{ - audio:'rehuaiyi', + audio:2, enable:'phaseUse', usable:1, delay:false, @@ -1581,6 +1829,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ intro:{content:'cards',onunmark:'throw'}, }, gzzisui:{ + audio:2, trigger:{player:'phaseDrawBegin2'}, forced:true, filter:function(event,player){ @@ -1592,6 +1841,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ group:'gzzisui_die', subSkill:{ die:{ + audio:'gzzisui', trigger:{player:'phaseJieshuBegin'}, forced:true, filter:function(event,player){ @@ -1696,7 +1946,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, //司马昭 gzzhaoxin:{ - audio:'zhaoran', + audio:2, trigger:{player:'damageEnd'}, filter:function(event,player){ return player.countCards('h')>0; @@ -1725,7 +1975,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzsuzhi:{ - audio:'choufa', + audio:2, derivation:'gzfankui', mod:{ targetInRange:function(card,player,target){ @@ -1744,7 +1994,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ preHidden:['gzsuzhi_damage','gzsuzhi_draw','gzsuzhi_gain'], subSkill:{ damage:{ - audio:'choufa', + audio:'gzsuzhi', trigger:{source:'damageBegin1'}, forced:true, filter:function(event,player){ @@ -1758,7 +2008,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, draw:{ - audio:'choufa', + audio:'gzsuzhi', trigger:{player:'useCard'}, forced:true, filter:function(event,player){ @@ -1771,7 +2021,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gain:{ - audio:'choufa', + audio:'gzsuzhi', trigger:{global:'loseAfter'}, forced:true, filter:function(event,player){ @@ -1802,7 +2052,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, }, gzfankui:{ - audio:'tuishi', + audio:2, inherit:'fankui', }, //夏侯霸 @@ -2531,6 +2781,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ }, gzshejian:{ audio:2, + preHidden:true, trigger:{target:'useCardToTargeted'}, filter:function(event,player){ if(player==event.player||event.targets.length!=1) return false; @@ -3941,6 +4192,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ maxHandcard:function(player,num){return num+player.storage.zhuwei_eff} }, mark:true, + charlotte:true, intro:{ content:function(storage){if(storage) return '使用【杀】的次数上限+'+storage+',手牌上限+'+storage} } @@ -6088,7 +6340,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ "step 1" if(result.bool){ player.logSkill('gzfangzhu',result.targets); - event.target=result.targets[0] + event.target=result.targets[0]; event.target.chooseToDiscard('he').set('ai',function(card){ var player=_status.event.player; if(player.isTurnedOver()) return -1; @@ -10447,6 +10699,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ fengxi:'冯熙', liuba:'刘巴', pengyang:'彭羕', + sunchen:'孙綝', + gzshilu:'嗜戮', + gzshilu_info:'①一名角色死亡时,你可以将其所有武将牌置于你的武将牌上,称为“戮”,若杀死其的角色是你,则你从剩余的武将牌堆随机额外获得两张“戮”。②准备阶段,你可以弃置至多X张牌,然后摸等量的牌(X为“戮”数)。', + gzxiongnve:'凶虐', + gzxiongnve_info:'①出牌阶段开始时,你可以将一张“戮”置入武将牌堆并选择一项:1. 本回合对“戮”对应的势力的角色造成的伤害+1;2. 本回合对“戮”对应的势力的角色造成伤害时,你获得其一张牌;3. 本回合对“戮”对应的势力的角色使用牌无次数限制。②出牌阶段结束时,你可以将两张“戮”置入武将牌堆并获得以下效果直到你的下个回合开始前:当你受到其他角色造成的伤害时,此伤害-1。', gzjianliang:'简亮', gzjianliang_info:'摸牌阶段开始时,若你的手牌数为全场最少,则你可以令所有与你势力相同的角色各摸一张牌。', gzweimeng:'危盟', @@ -10461,10 +10718,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ daming_info:'一名己方角色A的出牌阶段开始时,你可弃置一张锦囊牌,横置一名角色并摸X张牌(X为拥有横置角色的势力数)。然后你选择一项:①视为对A使用一张【桃】;②令A视为对由你选择的另一名角色使用一张雷【杀】。', xiaoni:'嚣逆', xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。', - chouduo:'筹度', - chouduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ', - guiyin:'归隐', - guiyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。', + tongduo:'统度', + tongduo_info:'己方角色的结束阶段开始时,其可以摸X张牌(X为其本回合弃牌阶段弃置的牌数且至多为3)。 ', + qingyin:'清隐', + qingyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。', gzlianpian:'联翩', gzlianpian_info:'①结束阶段开始时,若你于此回合内弃置过所有角色的牌数之和大于你的体力值,你可令一名与你势力相同的角色将手牌补至X张(X为其体力上限)。②其他角色的结束阶段开始时,若其于此回合内弃置过所有角色的牌数之和大于你的体力值,其可选择:1.弃置你的一张牌;2.令你回复1点体力。', yusui:'玉碎', @@ -10477,8 +10734,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){ gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌,若你以此法获得了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。', gzduwu:'黩武', gzduwu_info:'限定技,出牌阶段,你可以选择一个“军令”。你令攻击范围内所有的非己方角色选择是否执行。若有角色选择否,则你对其造成1点伤害且你摸一张牌。若有角色于此技能结算过程中进入濒死状态且存活,则你失去1点体力。', - gzwangong:'挽弓', - gzwangong_info:'其他角色的准备阶段开始时,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。', + gzxishe:'袭射', + gzxishe_info:'其他角色的准备阶段开始时,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。', gzcongcha:'聪察', gzcongcha2:'聪察', gzcongcha_info:'①准备阶段开始时,你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后,若其:与你势力相同,则你与其各摸两张牌;与你势力不同,则其失去1点体力。②摸牌阶段开始时,若场上所有角色均有明置的武将牌,则你可以令额定摸牌数+2。',