diff --git a/audio/die/ol_sb_yuanshao.mp3 b/audio/die/ol_sb_yuanshao.mp3 new file mode 100644 index 000000000..b9060a40e Binary files /dev/null and b/audio/die/ol_sb_yuanshao.mp3 differ diff --git a/audio/skill/olsbhetao1.mp3 b/audio/skill/olsbhetao1.mp3 new file mode 100644 index 000000000..97d08d11f Binary files /dev/null and b/audio/skill/olsbhetao1.mp3 differ diff --git a/audio/skill/olsbhetao2.mp3 b/audio/skill/olsbhetao2.mp3 new file mode 100644 index 000000000..0e378bfa6 Binary files /dev/null and b/audio/skill/olsbhetao2.mp3 differ diff --git a/audio/skill/olsbshenli1.mp3 b/audio/skill/olsbshenli1.mp3 new file mode 100644 index 000000000..8f530eafd Binary files /dev/null and b/audio/skill/olsbshenli1.mp3 differ diff --git a/audio/skill/olsbshenli2.mp3 b/audio/skill/olsbshenli2.mp3 new file mode 100644 index 000000000..088198f20 Binary files /dev/null and b/audio/skill/olsbshenli2.mp3 differ diff --git a/audio/skill/olsbshishou1.mp3 b/audio/skill/olsbshishou1.mp3 new file mode 100644 index 000000000..6c29b43eb Binary files /dev/null and b/audio/skill/olsbshishou1.mp3 differ diff --git a/audio/skill/olsbshishou2.mp3 b/audio/skill/olsbshishou2.mp3 new file mode 100644 index 000000000..0e93a590c Binary files /dev/null and b/audio/skill/olsbshishou2.mp3 differ diff --git a/audio/skill/olsbyufeng1.mp3 b/audio/skill/olsbyufeng1.mp3 new file mode 100644 index 000000000..ae5c6cf7b Binary files /dev/null and b/audio/skill/olsbyufeng1.mp3 differ diff --git a/character/onlyOL.js b/character/onlyOL.js index 4f4e7e6ba..238d02b14 100644 --- a/character/onlyOL.js +++ b/character/onlyOL.js @@ -11,19 +11,226 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_sb_guanyu:['male','shu',4,['olsbweilin','olsbduoshou']], ol_sb_taishici:['male','wu',4,['olsbdulie','olsbdouchan']], ol_gaoshun:['male','qun',4,['olxianzhen','decadejinjiu'],['die_audio:re_gaoshun']], + ol_sb_yuanshao:['male','qun',4,['olsbhetao','olsbshenli','olsbyufeng','olsbshishou'],['zhu']], }, characterSort:{ onlyOL:{ onlyOL_yijiang1:['ol_jianyong','ol_lingtong','ol_gaoshun'], onlyOL_yijiang2:['ol_caozhang'], - onlyOL_sb:['ol_sb_jiangwei','ol_sb_guanyu','ol_sb_taishici'], + onlyOL_sb:['ol_sb_jiangwei','ol_sb_guanyu','ol_sb_taishici','ol_sb_yuanshao'], }, }, characterIntro:{ }, characterReplace:{ }, + card:{ + sizhaojian:{ + fullskin:true, + type:'equip', + subtype:'equip1', + distance:{attackFrom:-1}, + ai:{basic:{equipValue:7}}, + skills:['olsbyufeng_sizhaojian'], + }, + }, skill:{ + //OL谋袁绍 + //真·四世三公——袁神,启动 + olsbhetao:{ + audio:2, + trigger:{global:'useCardToPlayered'}, + filter(event,player){ + return event.player!=player&&event.isFirstTarget&&event.targets.length>1&&player.countCards('he',card=>{ + if(get.position(card)=='h'&&_status.connectMode) return true; + return get.color(card)==get.color(event.card)&&lib.filter.cardDiscardable(card,player); + }); + }, + direct:true, + async content(event,trigger,player){ + const {result:{bool,cards,targets}}=await player.chooseCardTarget({ + prompt:get.prompt('olsbhetao'), + filterCard(card,player){ + return get.color(card)==get.color(get.event().getTrigger().card); + }, + filterTarget(card,player,target){ + return get.event().getTrigger().targets.includes(target); + }, + ai1(card){ + return 7.5-get.value(card); + }, + ai2(target){ + const player=get.event('player'),trigger=get.event().getTrigger(); + if(trigger.card.name=='tiesuo'){ + const att=get.attitude(player,target); + return get.agn(att)*(2+get.sgn(att)); + } + const sum=trigger.targets.reduce((i,j)=>i+get.effect(j,trigger.card,trigger.player,player),0); + return get.effect(target,trigger.card,trigger.player,player)*2-sum; + }, + }).set('prompt2','弃置一张'+get.translation(get.color(trigger.card))+'牌,令'+get.translation(trigger.card)+'改为对其中一个目标结算两次'); + if(bool){ + const target=targets[0]; + player.logSkill('olsbhetao',target); + player.discard(cards); + trigger.getParent().effectCount++; + trigger.getParent().excluded.addArray(game.filterPlayer(i=>trigger.targets.includes(i)&&target!=i)); + } + }, + ai:{threaten:3.5}, + global:'olsbhetao_ai', + subSkill:{ + ai:{ + effect:{ + player(card,player){ + const select=get.copy(get.info(card).selectTarget); + let range; + if(select==undefined) range=[1,1]; + else if(typeof select=='number') range=[select,select]; + else if(get.itemtype(select)=='select') range=select; + else if(typeof select=='function') range=select(card,player); + game.checkMod(card,player,range,'selectTarget',player); + if(range[1]==-1||range[1]>1) return 'zeroplayertarget'; + }, + }, + }, + }, + }, + olsbshenli:{ + audio:2, + trigger:{player:'useCardToPlayered'}, + filter(event,player){ + if(!player.isPhaseUsing()||player.hasSkill('olsbshenli_used')) return false; + return event.card.name=='sha'&&game.hasPlayer(target=>{ + return !event.targets.includes(target)&&player.canUse(event.card,target,false); + })&&event.isFirstTarget; + }, + async content(event,trigger,player){ + player.addTempSkill('olsbshenli_used','phaseUseAfter'); + trigger.getParent().targets.addArray(game.filterPlayer(target=>{ + return !trigger.targets.includes(target)&&player.canUse(trigger.card,target,false); + })); + player.when('useCardAfter').filter(evt=>evt==trigger.getParent()) + .then(()=>{ + const sum=player.getHistory('sourceDamage',evt=>evt.card&&evt.card==trigger.card).reduce((num,evt)=>{ + return num+evt.num; + },0); + const bool=(sum>player.countCards('h')),goon=(sum>player.getHp()); + if(bool) player.draw(Math.min(5,sum)); + if(goon){ + const targets=game.filterPlayer(target=>trigger.targets.includes(target)) + if(targets.length) player.useCard(trigger.card,targets,false); + } + }); + }, + subSkill:{used:{charlotte:true}}, + }, + olsbyufeng:{ + audio:2, + trigger:{ + global:'phaseBefore', + player:'enterGame', + }, + filter(event,player){ + if(get.cardPile('sizhaojian','field')) return false; + return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1); + }, + forced:true, + locked:false, + async content(event,trigger,player){ + const card=game.createCard2('sizhaojian','diamond',6); + player.$gain2(card,false); + game.delayx(); + player.equip(card); + }, + subSkill:{ + sizhaojian:{ + equipSkill:true, + trigger:{player:'useCardToPlayered'}, + filter(event,player){ + return event.card.name=='sha'&&typeof get.number(event.card)=='number'; + }, + forced:true, + locked:false, + logTarget:'target', + async content(event,trigger,player){ + const target=trigger.target; + target.addTempSkill('olsbyufeng_block'); + target.markAuto('olsbyufeng_block',[trigger.card]); + }, + }, + block:{ + mod:{ + cardEnabled(card,player){ + if(!player.storage.olsbyufeng_block) return; + const storage=player.getStorage('olsbyufeng_block'); + let evt=_status.event; + if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse'); + if(!evt||!evt.respondTo||!storage.includes(evt.respondTo[1])) return; + const num=get.number(card); + if(typeof num!='number'||num{ + if(target.group!='qun') return false; + const evt=event.getl(target); + return evt&&evt.player==target&&evt.es&&evt.es.length>0; + }); + }, + direct:true, + zhuSkill:true, + async content(event,trigger,player){ + const targets=game.filterPlayer(target=>{ + if(target.group!='qun') return false; + const evt=trigger.getl(target); + return evt&&evt.player==target&&evt.es&&evt.es.length>0; + }).sortBySeat(); + const card=get.cardPile('sizhaojian','field'); + for(const target of targets){ + const {result:{bool}}=await target.chooseBool(get.prompt('olsbshishou',player),'将'+get.translation(card)+'置入'+get.translation(player)+'的装备区中').set('choice',get.attitude(target,player)>0); + if(bool){ + target.logSkill('olsbshishou',player); + if(get.owner(card)) get.owner(card).$give(card,player,false); + player.equip(card); + break; + } + } + }, + }, //界高顺 olxianzhen:{ audio:'rexianzhen', @@ -771,6 +978,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){ ol_gaoshun_prefix:'OL界', olxianzhen:'陷阵', olxianzhen_info:'出牌阶段限一次,你可以与一名角色拼点。若你赢,本回合你无视该角色的防具且对其使用牌没有次数和距离限制,且当你使用【杀】或普通锦囊牌指定其他角色为唯一目标时可以令该角色也成为此牌的目标;若你没赢,本回合你不能对其使用【杀】且你的【杀】不计入手牌上限。', + ol_sb_yuanshao:'OL谋袁绍', + ol_sb_yuanshao_prefix:'OL谋', + olsbhetao:'合讨', + olsbhetao_info:'其他角色使用牌执行第一个目标后,若此牌指定的目标数大于1,则你可以弃置一张与此牌颜色相同的牌并令此牌改为对其中一名目标角色结算两次。', + olsbshenli:'神离', + olsbshenli_info:'出牌阶段限一次,当你使用【杀】指定目标后,你可以令所有可成为此牌目标的其他角色均成为此牌目标,此牌结算完毕后,若你因此牌造成的伤害值X:大于你的手牌数,你摸X张牌(至多摸五张);大于你的体力值,你令此牌额外结算一次。', + olsbyufeng:'玉锋', + olsbyufeng_sizhaojian:'思召剑', + olsbyufeng_block:'思召剑', + olsbyufeng_info:'游戏开始时,若【思召剑】未加入本局游戏,若你可装备【思召剑】,则你将【思召剑】置入装备区。', + sizhaojian:'思召剑', + sizhaojian_info:'当你使用有点数的【杀】指定目标后,你令目标角色只能使用有点数且点数大于等于此【杀】的【闪】响应此牌。', + olsbshishou:'士首', + olsbshishou_info:'主公技,其他群势力角色失去装备区的牌后,若你的装备区中没有【思召剑】,若【思召剑】存在于场上/牌堆/弃牌堆中,其可令你将【思召剑】置入装备区。', onlyOL_yijiang1:'OL专属·将1', onlyOL_yijiang2:'OL专属·将2', diff --git a/character/rank.js b/character/rank.js index b7ad5c10a..c05323bd8 100644 --- a/character/rank.js +++ b/character/rank.js @@ -51,6 +51,7 @@ window.noname_character_rank={ ], ap:[ 'xia_guanyu', + 'ol_sb_yuanshao', 'gjqt_aruan', 'gjqt_cenying', 'gjqt_ouyangshaogong', @@ -1686,6 +1687,7 @@ window.noname_character_rank={ 'dc_sunce', 'xia_yuzhenzi', 'xia_guanyu', + 'ol_sb_yuanshao', 'swd_muyun', 'swd_zhaoyun', 'swd_septem', diff --git a/character/shenhua.js b/character/shenhua.js index 6d3d50e85..194c83e0b 100755 --- a/character/shenhua.js +++ b/character/shenhua.js @@ -7736,7 +7736,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ pangtong:['pangtong','ol_pangtong','re_pangtong','sb_pangtong'], re_jsp_pangtong:['re_jsp_pangtong','jsrg_pangtong','sp_pangtong'], taishici:['taishici','re_taishici','ol_sb_taishici'], - re_yuanshao:['re_yuanshao','ol_yuanshao','xin_yuanshao','sb_yuanshao'], + re_yuanshao:['re_yuanshao','ol_yuanshao','xin_yuanshao','ol_sb_yuanshao','sb_yuanshao'], pangde:['re_pangde','ol_pangde','pangde'], yanwen:['yanwen','ol_yanwen','re_yanwen'], caopi:['caopi','re_caopi','ps_caopi','sb_caopi'], diff --git a/image/card/sizhaojian.png b/image/card/sizhaojian.png new file mode 100644 index 000000000..40c1683f9 Binary files /dev/null and b/image/card/sizhaojian.png differ diff --git a/image/character/ol_sb_yuanshao.jpg b/image/character/ol_sb_yuanshao.jpg new file mode 100644 index 000000000..96af5734a Binary files /dev/null and b/image/character/ol_sb_yuanshao.jpg differ