diff --git a/audio/die/sp_zhangliao.mp3 b/audio/die/sp_zhangliao.mp3 new file mode 100644 index 000000000..d4e57b2f8 Binary files /dev/null and b/audio/die/sp_zhangliao.mp3 differ diff --git a/audio/skill/diaoling1.mp3 b/audio/skill/diaoling1.mp3 new file mode 100644 index 000000000..56dbf5038 Binary files /dev/null and b/audio/skill/diaoling1.mp3 differ diff --git a/audio/skill/diaoling2.mp3 b/audio/skill/diaoling2.mp3 new file mode 100644 index 000000000..105f56138 Binary files /dev/null and b/audio/skill/diaoling2.mp3 differ diff --git a/audio/skill/mubing1.mp3 b/audio/skill/mubing1.mp3 new file mode 100644 index 000000000..be4987a44 Binary files /dev/null and b/audio/skill/mubing1.mp3 differ diff --git a/audio/skill/mubing2.mp3 b/audio/skill/mubing2.mp3 new file mode 100644 index 000000000..999ea486d Binary files /dev/null and b/audio/skill/mubing2.mp3 differ diff --git a/audio/skill/ziqu1.mp3 b/audio/skill/ziqu1.mp3 new file mode 100644 index 000000000..97baf8626 Binary files /dev/null and b/audio/skill/ziqu1.mp3 differ diff --git a/audio/skill/ziqu2.mp3 b/audio/skill/ziqu2.mp3 new file mode 100644 index 000000000..ba6d88638 Binary files /dev/null and b/audio/skill/ziqu2.mp3 differ diff --git a/character/diy.js b/character/diy.js index afed43841..a9b22f745 100755 --- a/character/diy.js +++ b/character/diy.js @@ -59,6 +59,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_abyusa:['female','key',3,['abyusa_jueqing','abyusa_dunying']], key_godan:['male','key',6,['godan_yuanyi','godan_feiqu','godan_xiaoyuan']], key_yuu:['male','key',3,['yuu_lveduo']], + key_ryoichi:['male','key',4,['ryoichi_baoyi','ryoichi_tuipi']], + key_kotori:['female','key',3,['kotori_yumo','kotori_huazhan']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], @@ -132,6 +134,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ // ns_lisu:['male','qun',3,[]], // ns_sunhao:['male','qun',3,[]], ns_xinnanhua:['male','qun',3,['ns_xiandao','ns_xiuzheng','ns_chuanshu'],[]], + + old_jiakui:['male','wei',4,['tongqu','xinwanlan']], + ol_guohuai:['male','wei',3,['rejingce']], }, characterFilter:{ key_yuu:function(mode){ @@ -157,8 +162,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua"], diy_fakenews:["diy_wenyang","ns_zhangwei"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], - diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu"], + diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan","key_yuu","key_ryoichi","key_kotori"], diy_yongjian:["ns_chendao","yj_caoang"], + diy_trashbin:['old_jiakui','ol_guohuai'], }, }, characterIntro:{ @@ -173,6 +179,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', }, characterTitle:{ + key_kotori:'#bRewrite', + key_ryoichi:'#bSummer Pockets', key_yuu:'#bCharlotte', key_godan:'#rAngel Beats!', key_abyusa:'#rAngel Beats!', @@ -327,6 +335,353 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_lucia:['key_shizuru'], }, skill:{ + kotori_yumo:{ + trigger:{ + global:'gameDrawAfter', + player:'enterGame', + }, + forced:true, + charlotte:true, + content:function(){ + var list=['wei','shu','wu','qun']; + for(var i of list){ + if(!player.hasMark('kotori_yumo_'+i)){ + player.addMark('kotori_yumo_'+i,1,false); + game.log(player,'获得了一个',lib.translate['kotori_yumo_'+i].replace(/魔物/g,'【魔物】')); + } + } + }, + group:['kotori_yumo_damage','kotori_yumo_gain'], + }, + kotori_yumo_damage:{ + trigger:{global:'damageEnd'}, + forced:true, + filter:function(event,player){ + var name='kotori_yumo_'+event.player.group; + return lib.skill[name]&&!player.hasMark(name); + }, + popup:false, + content:function(){ + game.log(player,'对',trigger.player,'发动了','#g【驭魔】'); + var group=trigger.player.group; + player.popup('驭魔',get.groupnature(group)); + player.addMark('kotori_yumo_'+group,1,false); + game.log(player,'获得了一个',lib.translate['kotori_yumo_'+group].replace(/魔物/g,'【魔物】')); + }, + }, + kotori_yumo_gain:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + var list=['wei','shu','wu','qun','key']; + for(var i in list){ + if(player.hasMark('kotori_yumo_'+list[i])) return true; + } + return false; + }, + content:function(){ + 'step 0' + var list=['wei','shu','wu','qun','key']; + var list2=[]; + for(var i of list){ + if(player.hasMark('kotori_yumo_'+i)) list2.push('kotori_skill_'+i); + } + list2.push('cancel2'); + player.chooseControl(list2).set('prompt','###是否发动【驭魔】?###弃置对应的标记并获得下列技能中的一个,或点取消,不获得技能').set('choice',function(){ + if(list2.contains('kotori_skill_shu')&&player.countCards('h',function(card){ + return get.name(card,player)=='sha'&&player.getUseValue(card)>0; + })>1) return 'kotori_skill_shu'; + if(list2.contains('kotori_skill_key')&&player.hp>1) return 'kotori_skill_key'; + if(list2.contains('kotori_skill_qun')&&player.isDamaged()&&player.needsToDiscard()>1) return 'kotori_skill_qun'; + return 'cancel2'; + }()).set('ai',function(){ + return _status.event.choice; + }); + 'step 1' + if(result.control!='cancel2'){ + player.logSkill('kotori_yumo'); + var name='kotori_yumo_'+result.control.slice(13); + player.removeMark(name,1,false);game.log(player,'移去了一个',lib.translate[name].replace(/魔物/g,'【魔物】')); + player.addTempSkill(result.control); + game.log(player,'获得了技能',lib.translate[name].replace(/魔物/g,'【'+get.translation(result.control)+'】')); + } + }, + }, + kotori_skill_wei:{ + trigger:{player:'phaseBegin'}, + direct:true, + filter:function(event,player){ + return player.countCards('he')>0; + }, + content:function(){ + 'step 0' + player.chooseCardTarget({ + prompt:get.prompt2(event.name), + filterCard:lib.filter.cardDiscardable, + filterTarget:function(card,player,target){ + return player!=target; + }, + position:'he', + ai1:function(card){ + return 6-get.value(card); + }, + ai2:function(target){ + return 1/(1+target.countCards('he'))*-get.attitude(_status.event.player,target); + }, + }); + 'step 1' + if(result.bool){ + player.logSkill(event.name,result.targets); + player.discard(result.cards); + result.targets[0].chooseToDiscard('弃置一张牌,或令'+get.translation(player)+'摸一张牌','he').ai=lib.skill.zhiheng.check; + } + else event.finish(); + 'step 2' + if(!result.bool) player.draw(); + }, + }, + kotori_skill_shu:{ + mod:{ + cardUsable:function(card,player,num){ + if(card.name=='sha') return num+1; + }, + }, + trigger:{player:'phaseUseEnd'}, + forced:true, + filter:function(event,player){ + return player.getHistory('useCard',function(evt){ + return evt.card&&evt.card.name=='sha'&&evt.getParent('phaseUse')==event; + }).length>1; + }, + content:function(){player.draw()}, + }, + kotori_skill_wu:{ + trigger:{player:'phaseEnd'}, + forced:true, + filter:function(event,player){ + return player.countCards('h')!=player.hp; + }, + content:function(){player.draw()}, + }, + kotori_skill_qun:{ + trigger:{player:'phaseDiscardBegin'}, + forced:true, + filter:function(event,player){ + return (player.isDamaged()||player.countCards('h')-player.hp>1); + }, + content:function(){ + var num=0; + if(player.isDamaged()) num++; + if(player.countCards('h')-player.hp>1) num++; + player.addMark('kotori_qunxin_temp',num,false); + player.addTempSkill('kotori_qunxin_temp','phaseDiscardEnd'); + }, + }, + kotori_skill_key:{ + enable:'phaseUse', + usable:1, + content:function(){ + "step 0" + player.draw(); + "step 1" + player.changeHujia(1); + "step 2" + var evt=event.getParent('phase'); + if(evt&&evt.after){ + var next=player.loseHp(); + event.next.remove(next); + evt.after.push(next); + } + }, + ai:{ + order:10, + result:{ + player:function(player){ + return player.hp-1; + }, + }, + }, + }, + kotori_qunxin_temp:{ + onremove:true, + mod:{ + maxHandcard:function(player,num){ + return num+player.countMark('kotori_qunxin_temp'); + }, + }, + }, + kotori_yumo_wei:{ + marktext:'', + intro:{name:'魔物',content:'mark'}, + }, + kotori_yumo_shu:{ + marktext:'', + intro:{name:'魔物',content:'mark'}, + }, + kotori_yumo_wu:{ + marktext:'', + intro:{name:'魔物',content:'mark'}, + }, + kotori_yumo_qun:{ + marktext:'', + intro:{name:'魔物',content:'mark'}, + }, + kotori_yumo_key:{ + marktext:'', + intro:{name:'魔物',content:'mark'}, + }, + kotori_huazhan:{ + charlotte:true, + enable:'chooseToUse', + filter:function(event,player){ + var bool=false; + var list=['wei','shu','wu','qun','key']; + for(var i of list){ + if(player.hasMark('kotori_yumo_'+i)&&!player.getStorage('kotori_huazhan2').contains('kotori_yumo_'+i)){ + bool=true;break; + } + } + return bool&&event.filterCard({name:'kaihua',isCard:true},player,event); + }, + chooseButton:{ + dialog:function(event,player){ + return ui.create.dialog('###花绽###'+lib.translate.kotori_huazhan_info); + }, + chooseControl:function(event,player){ + var list=['wei','shu','wu','qun','key']; + var list2=[]; + for(var i of list){ + if(player.hasMark('kotori_yumo_'+i)&&!player.getStorage('kotori_huazhan2').contains('kotori_yumo_'+i)) list2.push('kotori_yumo_'+i); + } + list2.push('cancel2'); + return list2; + }, + check:function(){ + var player=_status.event.player; + var list=['wei','shu','wu','qun','key']; + var list2=[]; + for(var i of list){ + if(player.hasMark('kotori_yumo_'+i)&&!player.getStorage('kotori_huazhan2').contains('kotori_yumo_'+i)) list2.push('kotori_yumo_'+i); + } + if(list2.contains('kotori_yumo_wei')) return 'kotori_yumo_wei'; + if(list2.contains('kotori_yumo_wu')) return 'kotori_yumo_wu'; + if(list2.contains('kotori_yumo_qun')) return 'kotori_yumo_qun'; + if(list2.contains('kotori_yumo_key')) return 'kotori_yumo_key'; + if(list2.contains('kotori_yumo_shu')&&game.hasPlayer(function(current){ + return current.group=='shu'; + })) return 'kotori_yumo_shu'; + return 'cancel2'; + }, + backup:function(result,player){ + return { + markname:result.control, + viewAs:{name:'kaihua',isCard:true}, + filterCard:function(){return false}, + selectCard:-1, + precontent:function(){ + delete event.result.skill; + var name=lib.skill.kotori_huazhan_backup.markname; + if(!player.storage.kotori_huazhan2) player.storage.kotori_huazhan2=[]; + player.storage.kotori_huazhan2.push(name); + player.addTempSkill('kotori_huazhan2'); + player.popup('花绽',get.groupnature(name.slice(12))); + game.log(player,'发动了技能',lib.translate[name].replace(/魔物/g,'【花绽】')); + player.removeMark(name,1,false); + ;game.log(player,'移去了一个',lib.translate[name].replace(/魔物/g,'【魔物】')); + }, + } + } + }, + ai:{ + order:function(item,player){ + return get.order({name:'kaihua'})-0.05; + }, + result:{ + player:function(player){ + if(player.countCards('he',function(card){ + if(get.type(card)=='equip') return 8-get.value(card); + return 6-get.value(card); + })<2) return -0.5; + return player.getUseValue({name:'kaihua'}); + }, + }, + }, + }, + kotori_huazhan2:{onremove:true}, + ryoichi_baoyi:{ + trigger:{ + player:'loseAfter', + global:['gainAfter','equipAfter','addJudgeAfter'], + }, + filterTarget:function(card,player,target){ + return target!=player&&(target.sex=='female'||target.sex=='male'&&target.countCards('hej')>0); + }, + filter:function(event,player){ + var evt=event.getl(player); + return evt&&evt.es&&evt.es.length>0&&game.hasPlayer(function(target){ + return lib.skill.ryoichi_baoyi.filterTarget; + }); + }, + forced:true, + content:function(){ + 'step 0' + event.count=trigger.getl(player).es.length; + 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); + }); + 'step 2' + if(result.bool){ + var target=result.targets[0]; + player.line(target,'green'); + if(target.sex=='female') target.loseHp(); + else player.discardPlayerCard(target,2,'hej',true); + } + else event.finish(); + 'step 3' + if(event.count&&game.hasPlayer(function(target){ + return lib.skill.ryoichi_baoyi.filterTarget; + })) event.goto(1); + }, + }, + ryoichi_tuipi:{ + mod:{ + targetEnabled:function(card){ + if(card.name=='shunshou'||card.name=='guohe') return false; + }, + }, + trigger:{player:'phaseDiscardBegin'}, + forced:true, + content:function(){ + trigger.setContent(lib.skill.ryoichi_tuipi.phaseDiscardContent); + }, + phaseDiscardContent:function(){ + "step 0" + var num=0; + var hs=player.getCards('he'); + num+=hs.length; + for(var i=0;i②当你因【毒】失去体力时,你改为回复等量的体力。
③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_zhenren:'振刃', @@ -10551,7 +10909,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ key_weishang_shan:'伪伤', kengo_weishang_info:'出牌阶段限一次,你可以废除一个装备栏并摸两张牌。若你的武器栏已废除,则你使用【杀】的次数上限+1,且当你使用【杀】指定目标后,目标角色弃置一张牌;若你的防具栏已废除,则你可以将一张牌当做【闪】使用或打出;若你的攻击/防御坐骑栏已废除,则你至其他角色的距离-1/其他角色至你的距离-1。', kengo_guidui:'归队', - kengo_guidui_info:'锁定技,准备阶段,若你有已废除的装备栏,则你恢复这些装备栏,且本回合内发动【伪伤】时不能废除这些装备栏。', + kengo_guidui_info:'锁定技,准备阶段,若你有已废除的装备栏,则你恢复这些装备栏,且本局游戏内发动【伪伤】时不能废除这些装备栏。', yoshino_jueyi:'决义', yoshino_jueyi_info:'出牌阶段开始时,你可以选择一名其他角色。你摸一张牌并与其猜拳(平局则重来)。若你赢,你对其造成1点伤害。若你没赢,你本阶段内使用牌时不能指定其为目标。', yui_jiang:'激昂', @@ -10747,6 +11105,31 @@ game.import('character',function(lib,game,ui,get,ai,_status){ yuu_lveduo:'掠夺', yuu_lveduo_info:'每轮限一次,其他角色的回合开始时,若你本局游戏内未对其发动过〖掠夺〗且你的武将牌正面朝上,你可以将武将牌翻面并获得该角色本回合内的控制权。此回合结束时,你将武将牌翻回正面。锁定技,若你的武将牌背面朝上,则你不能使用或打出牌。', yuu_lveduo_full_info:'每轮限一次,其他角色的回合开始时,若你本局游戏内未对其发动过〖掠夺〗且你的武将牌正面朝上,你可以将武将牌翻面并获得该角色本回合内的控制权。此回合结束时,你将武将牌翻回正面,获得该角色武将牌上所有的带有「Charlotte」标签的技能,且该角色失去这些技能。锁定技,若你的武将牌背面朝上,则你不能使用或打出牌。', + ryoichi_baoyi:'爆衣', + ryoichi_baoyi_info:'锁定技,当你失去装备区内的一张牌后,你摸一张牌,然后选择一项:①弃置一名其他男性角色区域内的两张牌。②令一名其他女性角色失去1点体力。', + ryoichi_tuipi:'褪皮', + ryoichi_tuipi_info:'锁定技,你不是【顺手牵羊】和【过河拆桥】的合法目标。你装备区的牌于弃牌阶段内计入手牌上限。', + kotori_yumo:'驭魔', + kotori_yumo_damage:'驭魔', + kotori_yumo_gain:'驭魔', + kotori_yumo_info:'锁定技,游戏开始时,你获得蓝色、红色、绿色、黄色魔物各一个。当有角色受到伤害后,若你没有对应的标记,你根据其势力获得一个对应魔物:魏:蓝、蜀:红、吴:绿、群:黄、键:紫。回合开始时,你可以弃置一个对应的魔物并获得以下技能之一直到回合结束:蓝:魏业、红:蜀义、绿:吴耀、黄:群心、紫:键魂。', + kotori_skill_wei:'魏业', + kotori_skill_wei_info:'回合开始时,你可以弃置一张牌并指定一名其他角色,该角色须弃置一张牌,否则你摸一张牌。', + kotori_skill_shu:'蜀义', + kotori_skill_shu_info:'你使用【杀】上限+1;出牌阶段结束时,若你于此阶段使用【杀】次数不少于2,摸一张牌。', + kotori_skill_wu:'吴耀', + kotori_skill_wu_info:'回合结束时,若你的手牌数不等于你的体力值,则你摸一张牌。', + kotori_skill_qun:'群心', + kotori_skill_qun_info:'锁定技,弃牌阶段开始时,若你的手牌数比体力值多2或更多,你本回合手牌上限+1;若你已损失体力值大于1,你手牌上限+1', + kotori_skill_key:'键魂', + kotori_skill_key_info:'出牌阶段限一次,你可以摸一张牌并获得1点护甲。若如此做,你于当前回合结束时失去1点体力。', + kotori_yumo_wei:'魔物', + kotori_yumo_shu:'魔物', + kotori_yumo_wu:'魔物', + kotori_yumo_qun:'魔物', + kotori_yumo_key:'魔物', + kotori_huazhan:'花绽', + kotori_huazhan_info:'每回合每种魔物限一次,你可将一个蓝色/红色/绿色/黄色/紫色魔物当做【树上开花】使用。', key_kud:'库特莉亚芙卡', kud_qiaoshou:'巧手', @@ -11051,6 +11434,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ diy_yongjian:'用间篇', diy_yijiang:'设计比赛2020', diy_fakenews:'假新闻', + diy_trashbin:'垃圾桶', + old_jiakui:'贾逵重制', + ol_guohuai:'三血郭淮', }, }; }); diff --git a/character/mobile.js b/character/mobile.js index c48175022..02c820b78 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -13,14 +13,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian"], mobile_yijiang1:["re_jikang","old_bulianshi","xin_liaohua","xin_caozhang","re_xusheng","xin_chengpu","xin_jianyong","xin_gongsunzan"], mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan"], - mobile_trashbin:['old_jiakui'], }, }, character:{ xin_gongsunzan:['male','qun',4,['xinyicong','qiaomeng']], dingyuan:['male','qun',4,['beizhu']], xin_jianyong:['male','shu',3,['xinqiaoshui','xinjyzongshi']], - old_jiakui:['male','wei',4,['tongqu','xinwanlan']], xin_caozhang:['male','wei',4,['rejiangchi']], xin_liaohua:['male','shu',4,['redangxian','refuli']], furong:['male','shu',4,['xuewei','liechi']], @@ -348,11 +346,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }); if(cards.length){ var card=cards.randomRemove(1)[0]; - target.useCard(player,false,{ - name:'sha', - isCard:true, - cards:[card], - },[card]).card.beizhu=true; + target.useCard(player,false,card).card.beizhu=true; event.redo(); } }, @@ -6113,8 +6107,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ mobile_shenhua:'手杀异构·神话再临', mobile_yijiang1:'手杀异构·一将成名', mobile_sp:'手杀异构·SP', - mobile_trashbin:'通厕所的', - old_jiakui:'贾逵重制', xin_gongsunzan:'手杀公孙瓒', } }; diff --git a/character/old.js b/character/old.js index d93f9631f..cc5c19cb0 100755 --- a/character/old.js +++ b/character/old.js @@ -752,7 +752,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_zhuran:'OL朱然', ol_guansuo:'OL关索', ol_manchong:'OL满宠', - ol_guohuai:'OL郭淮', old_fuhuanghou:'旧伏皇后', old_caochong:'旧曹冲', old_guanqiujian:'旧毌丘俭', diff --git a/character/refresh.js b/character/refresh.js index 6c0f30c27..969ae662b 100755 --- a/character/refresh.js +++ b/character/refresh.js @@ -2491,14 +2491,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetInRange:function(card,player,target){ if(target==player.storage.rexianzhen) return true; }, - cardUsable:function(card,player,num){ - if(card.name=='sha'&&typeof num=='number') return num+100; - }, - playerEnabled:function(card,player,target){ - if(card.name=='sha'&&player.storage.rexianzhen!=target&&!ui.selected.targets.contains(player.storage.rexianzhen)){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } + cardUsableTarget:function(card,player,target){ + if(target==player.storage.rexianzhen) return true; } }, ai:{ @@ -3307,8 +3301,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, mark:function(dialog,storage,player){ if(storage&&storage.current) dialog.addSmall([[storage.current],'character']); - if(storage&&storage.current2) dialog.addText('【'+get.translation(storage.current2)+ - '】'+lib.translate[storage.current2+'_info']); + if(storage&&storage.current2) dialog.add('
【'+get.translation(lib.translate[storage.current2+'_ab']||get.translation(storage.current2).slice(0,2))+'】
'+get.skillInfoTranslation(storage.current2,player)+'
'); if(storage&&storage.character.length){ if(player.isUnderControl(true)){ dialog.addSmall([storage.character,'character']); @@ -6480,9 +6473,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ cardEnabled:function(){ return false; }, - cardUsable:function(){ - return false; - }, cardRespondable:function(){ return false; }, @@ -6543,6 +6533,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ player:["changeHp"], }, audio:2, + audioname:{gongsunzan:'yicong'}, forced:true, filter:function(event,player){ return get.sgn(player.hp-2.5)!=get.sgn(player.hp-2.5-event.num); diff --git a/character/shenhua.js b/character/shenhua.js index de8125469..01148ef06 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -965,18 +965,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; } }, - cardUsable:function (card,player,num){ - if(typeof num=='number'&&game.hasPlayer(function(current){ - return current.hasSkill('drlt_xiongluan2'); - })) return num+100; - }, - playerEnabled:function (card,player,target){ - if(game.hasPlayer(function(current){ - return current.hasSkill('drlt_xiongluan2'); - })&&!target.hasSkill('drlt_xiongluan2')){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } + cardUsableTarget:function(card,player,target){ + if(target.hasSkill('drlt_xiongluan2')) return true; }, }, }, diff --git a/character/sp.js b/character/sp.js index 0c0718cea..85fdaaa18 100755 --- a/character/sp.js +++ b/character/sp.js @@ -848,7 +848,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ card.remove(); card=game.createCard('qibaodao',card.suit,card.number); } - targets[0].chooseUseTarget(card,true,'nopopup','noanimate'); + targets[0].chooseUseTarget(card,true,'nopopup','nothrow'); } else{ player.chat('没有装备牌了吗'); @@ -2440,14 +2440,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetInRange:function (card,player,target){ if(target==player.storage.zhengbi_eff1) return true; }, - cardUsable:function (card,player,num){ - if(typeof num=='number'&&player.storage.zhengbi_eff1&&player.storage.zhengbi_eff1.isAlive()) return num+100; - }, - playerEnabled:function (card,player,target){ - if(player.storage.zhengbi_eff1.isAlive()&&player.storage.zhengbi_eff1&&target!=player.storage.zhengbi_eff1){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } + cardUsableTarget:function (card,player,target){ + if(player.storage.zhengbi_eff1==target) return true; }, }, onremove:true, @@ -3518,7 +3512,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ equip1=game.createCard2('qibaodao',equip1.suit,equip1.number); } target.$draw(equip1); - target.chooseUseTarget(true,equip1,'noanimate','nopopup'); + target.chooseUseTarget(true,equip1,'nothrow','nopopup'); game.delay(); 'step 2' game.updateRoundNumber(); @@ -10265,11 +10259,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return false; } }, - cardUsable:function(card,player){ - if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){ - return false; - } - }, cardRespondable:function(card,player){ if(player.storage.zuixiang2&&player.storage.zuixiang2.contains(get.type(card,'trick'))){ return false; @@ -12151,20 +12140,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ content:'players' }, mod:{ - cardUsable:function(card,player,num){ - if(typeof num=='number') return num+100; - }, - playerEnabled:function(card,player,target){ - var bool=false; - if(player.storage.huxiao3&&ui.selected.targets.length){ - for(var i=0;i0; - }, - filter:function(event,player){ - return _status.currentPhase==player; - }, + trigger:{player:'useCardToPlayered'}, + silent:true, + firstDo:true, content:function(){ - var target=trigger.target; - if(target.hasSkill('chixin3')){ - target.storage.chixin++; - } - else{ - target.storage.chixin=1; - target.addTempSkill('chixin3','phaseUseEnd'); - } + trigger.target.addTempSkill('chixin3'); } }, chixin1:{ @@ -13171,23 +13133,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, } }, - chixin3:{ - mod:{ - targetEnabled:function(card,player,target){ - if(card.name!='sha') return; - if(player==_status.currentPhase&&player.hasSkill('chixin')){ - var num=player.getCardUsable(card,true)-20; - var players=game.filterPlayer(); - for(var i=0;i1; - } - } - } - }, + chixin3:{}, suiren:{ trigger:{player:'phaseZhunbeiBegin'}, skillAnimation:true, @@ -13593,15 +13539,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ trigger:{ player:"phaseZhunbeiBegin", }, - forced:true, direct:true, - filter:function (event,player){ + filter:function(event,player){ if(player.phaseNumber>1) return false; return !game.hasPlayer(function(current){ return current.hasSkill('smh_huoji')||current.hasSkill('smh_lianhuan'); }); }, - content:function (){ + content:function(){ "step 0" player.chooseTarget('请将「龙印」交给一名角色',true,function(card,player,target){ return target!=player; @@ -13620,13 +13565,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(game.hasPlayer(function(current){ return !current.hasSkill('smh_huoji')&¤t!=player })){ - player.chooseTarget('请将「凤印」交给一名角色',true,function(card,player,target){ - return target!=player&&!target.hasSkill('smh_huoji'); - }).set('ai',function(target){ - var player=_status.event.player; - return 10+get.attitude(player,target); - }); - }else event.finish(); + player.chooseTarget('请将「凤印」交给一名角色',true,function(card,player,target){ + return target!=player&&!target.hasSkill('smh_huoji'); + }).set('ai',function(target){ + var player=_status.event.player; + return 10+get.attitude(player,target); + }); + } + else event.finish(); "step 2" if(result.bool&&result.targets&&result.targets.length){ var target=result.targets[0]; diff --git a/character/sp2.js b/character/sp2.js index 0fe4a985e..4017edc23 100644 --- a/character/sp2.js +++ b/character/sp2.js @@ -849,6 +849,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ }, }, ziqu:{ + audio:2, + audioname:['sp_key_yuri'], trigger:{source:'damageBegin2'}, filter:function(event,player){ return event.player!=player&&!player.getStorage('ziqu').contains(event.player)&& @@ -4658,24 +4660,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "xinfu_tanbei":{ locked:false, mod:{ - targetInRange:function (card,player,target){ + targetInRange:function(card,player,target){ if(target.hasSkill('tanbei_effect1')){ return true; } }, - cardUsable:function (card,player,num){ - if(typeof num=='number'&&game.hasPlayer(function(current){ - return current.hasSkill('tanbei_effect1'); - })) return num+100; + cardUsableTarget:function(card,player,target){ + if(target.hasSkill('tanbei_effect1')) return true; }, - playerEnabled:function (card,player,target){ + playerEnabled:function(card,player,target){ if(target.hasSkill('tanbei_effect2')) return false; - if(game.hasPlayer(function(current){ - return current.hasSkill('tanbei_effect1'); - })&&!target.hasSkill('tanbei_effect1')){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } }, }, audio:2, diff --git a/character/standard.js b/character/standard.js index 61b1cdb4b..3a8f72466 100755 --- a/character/standard.js +++ b/character/standard.js @@ -37,7 +37,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ lvbu:['male','qun',4,['wushuang']], diaochan:['female','qun',3,['lijian','biyue']], huaxiong:['male','qun',6,['yaowu']], - gongsunzan:['male','qun',4,['yicong']], + gongsunzan:['male','qun',4,['reyicong']], xf_yiji:["male","shu",3,["xinfu_jijie","xinfu_jiyuan"],[]], re_yuanshu:['male','qun',4,['rewangzun','retongji']], diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js index 833c7cb61..f80be0b17 100755 --- a/character/xinghuoliaoyuan.js +++ b/character/xinghuoliaoyuan.js @@ -1444,10 +1444,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return true; } }, - cardUsable:function (card,player,num){ - if(typeof num=='number'&&player.countCards('j')&&card.name!='jiu'){ - return Infinity; - } + cardUsableTarget:function(card,player,target){ + if(player.countCards('j')&&player.inRange(target)) return true; }, aiValue:function(player,card,num){ if(card.name=='zhangba') return 15; diff --git a/character/yijiang.js b/character/yijiang.js index aff773bae..f2860ced2 100755 --- a/character/yijiang.js +++ b/character/yijiang.js @@ -62,7 +62,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ hanhaoshihuan:['male','wei',4,['shenduan','yonglve']], caorui:['male','wei',3,['huituo','mingjian','xingshuai'],['zhu']], - caoxiu:['male','wei',4,['reqianju','reqingxi']], + caoxiu:['male','wei',4,['qianju','reqingxi']], zhongyao:['male','wei',3,['huomo','zuoding']], liuchen:['male','shu',4,['zhanjue','qinwang'],['zhu']], zhangyi:['male','shu',4,['wurong','shizhi']], @@ -1870,7 +1870,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(card)=='equip'&&target.hasUseTarget(card); }); if(target.isMinEquip()&&equip){ - target.chooseUseTarget(equip,'noanimate','nopopup',true); + target.chooseUseTarget(equip,'nothrow','nopopup',true); event.e=true; } 'step 3' @@ -1885,9 +1885,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ 'step 5' if(!event.e&&player.isMinEquip()){ var equip=get.cardPile(function(card){ - return get.type(card)=='equip'&&target.hasUseTarget(card); + return get.type(card)=='equip'&&player.hasUseTarget(card); }); - if(equip) player.chooseUseTarget(equip,'noanimate','nopopup',true); + if(equip) player.chooseUseTarget(equip,'nothrow','nopopup',true); } 'step 6' game.updateRoundNumber(); @@ -2398,7 +2398,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(card)=='equip'&&!target.isDisabled(get.subtype(card)); }); if(event.card){ - target.chooseUseTarget(event.card,'noanimate','nopopup',true); + target.chooseUseTarget(event.card,'nothrow','nopopup',true); event.goto(3); } else{ @@ -2477,7 +2477,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(card)=='equip'; }); if(card){ - trigger.source.chooseUseTarget(card,'noanimate','nopopup',true); + trigger.source.chooseUseTarget(card,'nothrow','nopopup',true); } }, ai:{ @@ -2527,7 +2527,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ return get.type(card)=='equip'; }); if(card){ - target.chooseUseTarget(card,true,'noanimate','nopopup',true); + target.chooseUseTarget(card,true,'nothrow','nopopup',true); } } if(event.triggername=='dyingAfter'&&player.storage.juexiang_lie>0) event.goto(0); @@ -4992,7 +4992,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ event.directfalse=true; } else{ - trigger.target.chooseToDiscard(num,'弃置'+get.cnNumber(num)+'张手牌,或令杀的伤害+1').set('ai',function(card){ + trigger.target.chooseToDiscard(num,'弃置'+get.cnNumber(num)+'张手牌,或令'+get.translation(trigger.card)+'的伤害+1').set('ai',function(card){ var player=_status.event.player; if(player.hp==1){ if(get.type(card)=='basic'){ @@ -5016,18 +5016,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){ if(e1){ player.discard(e1,'notBySelf'); } + event.finish(); } else{ - var storage=trigger.target.storage; var id=trigger.target.playerid; var map=trigger.customArgs; if(!map[id]) map[id]={}; if(!map[id].extraDamage) map[id].extraDamage=0; map[id].extraDamage++; - if(!storage.reqingxi2) storage.reqingxi2=[]; - storage.reqingxi2.push(trigger.card); - trigger.target.addTempSkill('reqingxi2'); + trigger.target.judge(function(card){ + if(get.color(card)=='red') return -1; + return 0; + }); } + 'step 2' + if(result.bool===false) trigger.directHit.add(trigger.target); } }, reqingxi2:{ @@ -5259,15 +5262,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetInRange:function(card,player,target){ if(target==player.storage.xinxianzhen) return true; }, - cardUsable:function(card,player,num){ - if(typeof num=='number') return num+100; + cardUsableTarget:function(card,player,target){ + if(target==player.storage.xinxianzhen) return true; }, - playerEnabled:function(card,player,target){ - if(card.name=='sha'&&player.storage.xinxianzhen!=target&&!ui.selected.targets.contains(player.storage.xinxianzhen)){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } - } }, ai:{ unequip:true, @@ -5381,15 +5378,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){ targetInRange:function(card,player,target){ if(target==player.storage.xianzhen) return true; }, - cardUsable:function(card,player,num){ - if(card.name=='sha'&&typeof num=='number') return num+100; + cardUsableTarget:function(card,player,target){ + if(target==player.storage.xianzhen) return true; }, - playerEnabled:function(card,player,target){ - if(card.name=='sha'&&player.storage.xianzhen!=target&&!ui.selected.targets.contains(player.storage.xianzhen)){ - var num=player.getCardUsable(card)-100; - if(num<=0) return false; - } - } }, ai:{ unequip:true, @@ -10116,7 +10107,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ var card=result[0]; if(get.type(card)=='equip'){ if(!event.target.isDisabled(get.subtype(card))){ - event.target.chooseUseTarget(card,true,'noanimate','nopopup'); + event.target.chooseUseTarget(card,true,'nopopup'); game.delay(); } event.bool=true; @@ -10880,12 +10871,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){ "step 0" player.draw(); "step 1" - player.showHandcards(); + if(!player.countCards('h')) event.finish(); + else player.showHandcards(); "step 2" if(!trigger.source) return; var cards=player.getCards('h'); + var color=get.color(cards[0],player); for(var i=1;i