diff --git a/character/rank.js b/character/rank.js
index 8b92144e0..42662b99f 100644
--- a/character/rank.js
+++ b/character/rank.js
@@ -966,6 +966,7 @@ window.noname_character_rank={
'dc_liuba',
'key_seira',
'lukai',
+ 'ol_lukai',
'niufu',
're_liufeng',
'huzhao',
@@ -2569,6 +2570,7 @@ window.noname_character_rank={
'dc_wangchang',
'jin_zhouchu',
'lukai',
+ 'ol_lukai',
'caoxiancaohua',
'huzhao',
're_liufeng',
diff --git a/character/sp.js b/character/sp.js
index 3b9ff8a9b..a33434628 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_zhongdan:["cuiyan","huangfusong"],
sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
sp_others:["hanba","caiyang"],
- sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan'],
+ sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','liupan','ol_lukai'],
},
},
characterFilter:{
@@ -30,6 +30,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
+ ol_lukai:['male','wu',3,['olxuanzhu','oljiane']],
liupan:['male','qun',4,['olpijing']],
guotu:['male','qun',3,['olqushi','olweijie']],
ol_hujinding:['female','shu',3,['olqingyuan','olchongshen']],
@@ -710,6 +711,224 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
+ //陆凯
+ olxuanzhu:{
+ mark:true,
+ marktext:'☯',
+ zhuanhuanji:true,
+ intro:{
+ content(storage){
+ if(storage) return '每回合限一次,你可以将一张牌称为“玄”置于武将牌上,然后视为使用任意普通锦囊牌(须指定目标且仅指定一个目标)。若此次置于武将牌上的“玄”:不为装备牌,你弃置一张牌;为装备牌,你将所有“玄”置入弃牌堆,然后摸等量的牌。';
+ return '每回合限一次,你可以将一张牌称为“玄”置于武将牌上,然后视为使用任意基本牌。若此次置于武将牌上的“玄”:不为装备牌,你弃置一张牌;为装备牌,你将所有“玄”置入弃牌堆,然后摸等量的牌。';
+ },
+ },
+ audio:2,
+ enable:'chooseToUse',
+ filter(event,player){
+ if(!player.countCards('he')||event.type=='wuxie') return false;
+ return get.inpileVCardList(info=>{
+ const name=info[2],type=get.type(name),infox=get.info({name:name});
+ if(type!='basic'&&type!='trick') return false;
+ if(type=='trick'&&(!infox||!infox.filterTarget)) return false;
+ return (type!='basic')==(player.storage.olxuanzhu||false);
+ }).some(card=>event.filterCard({name:card[2],nature:card[3]},player,event));
+ },
+ usable:1,
+ chooseButton:{
+ dialog(event,player){
+ const list=get.inpileVCardList(info=>{
+ const name=info[2],type=get.type(name),infox=get.info({name:name});
+ if(type!='basic'&&type!='trick') return false;
+ if(type=='trick'&&(!infox||!infox.filterTarget)) return false;
+ return (type!='basic')==(player.storage.olxuanzhu||false);
+ }).filter(card=>event.filterCard({name:card[2],nature:card[3]},player,event));
+ return ui.create.dialog('玄注',[list,'vcard']);
+ },
+ check(button){
+ if(get.event().getParent().type!='phase') return 1;
+ return get.event('player').getUseValue({name:button.link[2],nature:button.link[3]});
+ },
+ backup(links,player){
+ let next={
+ audio:'olxuanzhu',
+ filterCard:true,
+ popname:true,
+ check(card){
+ return 1/(get.value(card)||0.5);
+ },
+ position:'he',
+ ignoreMod:true,
+ precontent(){
+ const cards=event.result.cards.slice();
+ player.addToExpansion(cards,player,'give').gaintag.add('olxuanzhu');
+ const viewAs={name:event.result.card.name,nature:event.result.card.nature};
+ event.result.card=viewAs;event.result.cards=[];
+ player.when('useCardAfter').filter(evt=>evt.skill=='olxuanzhu_backup').then(()=>{
+ const card=cards[0];
+ if(get.type(card)!='equip') player.chooseToDiscard('he',true);
+ else{
+ const cardx=player.getExpansions('olxuanzhu');
+ if(cardx.length){
+ player.loseToDiscardpile(cardx);
+ player.draw(cardx.length);
+ }
+ }
+ }).vars({cards:cards});
+ },
+ };
+ const viewAs={
+ name:links[0][2],
+ nature:links[0][3],
+ suit:'none',
+ number:null,
+ isCard:true,
+ };
+ next.viewAs=viewAs;
+ if(get.info('xunshi').isXunshi(viewAs)){
+ next.filterTarget=function(card,player,target){
+ const info=get.info(card);
+ if(info.changeTarget){
+ let targets=[target];
+ info.changeTarget(player,targets);
+ if(targets.length>1) return false;
+ }
+ return lib.filter.filterTarget(card,player,target);
+ };
+ next.selectTarget=1;
+ }
+ return next;
+ },
+ prompt(links,player){
+ const viewAs={
+ name:links[0][2],
+ nature:links[0][3],
+ suit:'none',
+ number:null,
+ isCard:true,
+ };
+ const str='将一张牌称为“玄”置于武将牌上,然后视为使用'+(get.translation(links[0][3])||'')+'【'+get.translation(links[0][2])+'】';
+ return str+(get.info('xunshi').isXunshi(viewAs)=='trick'?'(仅能指定一个目标)':'');
+ },
+ },
+ hiddenCard(player,name){
+ if(!lib.inpile.includes(name)||player.getStat('skill').olsbweilin||!player.countCards('he')) return false;
+ return get.inpileVCardList(info=>{
+ const name=info[2],type=get.type(name),infox=get.info({name:name});
+ if(type!='basic'&&type!='trick') return false;
+ if(type=='trick'&&(!infox||!infox.filterTarget)) return false;
+ return (type!='basic')==(player.storage.olxuanzhu||false);
+ }).map(card=>card[2]).includes(name);
+ },
+ ai:{
+ order(item,player){
+ if(player&&get.event().type=='phase'){
+ let list=get.inpileVCardList(info=>{
+ const name=info[2],type=get.type(name),infox=get.info({name:name});
+ if(type!='basic'&&type!='trick') return false;
+ if(type=='trick'&&(!infox||!infox.filterTarget)) return false;
+ return (type!='basic')==(player.storage.olxuanzhu||false);
+ }).map(card=>{return {name:card[2],nature:card[3]}}).filter(card=>player.getUseValue(card,true,true)>0);
+ if(!list.length) return 0;
+ list.sort((a,b)=>{
+ const getNum=function(card){
+ if(get.info('xunshi').isXunshi(card)) return get.effect(game.filterPlayer(target=>{
+ return player.canUse(card,target,true,true);
+ }).sort((a,b)=>get.effect(b,card,player,player)-get.effect(a,card,player,player)),card,player,player);
+ return player.getUseValue(card,true,true);
+ };
+ return (getNum(b)||0)-(getNum(a)||0);
+ });
+ return get.order(list[0],player)*0.99;
+ }
+ return 0.001;
+ },
+ respondSha:true,
+ respondShan:true,
+ skillTagFilter(player,tag,arg){
+ if(arg=='respond') return false;
+ const name=(tag=='respondSha'?'sha':'shan');
+ return get.info('olxuanzhu').hiddenCard(player,name);
+ },
+ result:{player:1},
+ },
+ marktext:'玄',
+ intro:{
+ content:'expansion',
+ markcount:'expansion',
+ },
+ onremove(player,skill){
+ const cards=player.getExpansions(skill);
+ if(cards.length) player.loseToDiscardpile(cards);
+ },
+ subSkill:{backup:{}},
+ },
+ oljiane:{
+ audio:2,
+ trigger:{player:['shaDamage','useCardToEnd']},
+ filter(event,player,name){
+ if(event.type!='card'||event.target==player) return false;
+ if(name=='shaDamage') return true;
+ return event.card.name!='sha'&&!event.getParent()._neutralized;
+ },
+ logTarget:'target',
+ forced:true,
+ async content(event,trigger,player){
+ trigger.target.addTempSkill('oljiane_neutralized');
+ },
+ group:'oljiane_neutralize',
+ global:'oljiane_ai',
+ subSkill:{
+ neutralize:{
+ audio:'oljiane',
+ trigger:{
+ target:'shaMiss',
+ global:'eventNeutralized',
+ },
+ filter(event,player,name){
+ if(event.type!='card') return false;
+ return name=='shaMiss'||event._neutralize_event.player==player;
+ },
+ forced:true,
+ async content(event,trigger,player){
+ player.addTempSkill('oljiane_nouse');
+ },
+ },
+ ai:{
+ ai:{
+ directHit_ai:true,
+ skillTagFilter(player,tag,arg){
+ if(!arg||!arg.target||!arg.target.hasSkill('oljiane_neutralized')) return false;
+ },
+ },
+ },
+ neutralized:{
+ charlotte:true,
+ mark:true,
+ marktext:'牌',
+ intro:{content:'本回合无法抵消牌'},
+ trigger:{global:'useCard'},
+ forced:true,
+ popup:false,
+ async content(event,trigger,player){
+ const id=player.playerid;
+ const map=trigger.customArgs;
+ if(!map[id]) map[id]={};
+ map[id].directHit2=true;
+ },
+ mod:{
+ wuxieJudgeEnabled:()=>false,
+ wuxieEnabled:()=>false,
+ },
+ },
+ neuse:{
+ charlotte:true,
+ mark:true,
+ marktext:'牌',
+ intro:{content:'本回合无法成为牌的目标'},
+ mod:{targetEnabled:()=>false},
+ },
+ },
+ },
//刘磐
olpijing:{
audio:2,
@@ -26184,6 +26403,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
str+='然后若没有角色因此【杀】死亡,你移除本次被选择的项。';
return str;
},
+ olxuanzhu(player){
+ if(player.storage.olxuanzhu) return '转换技,每回合限一次,你可以将一张牌称为“玄”置于武将牌上,然后视为使用:阴,任意基本牌;阳,任意普通锦囊牌(须指定目标且仅指定一个目标)。若此次置于武将牌上的“玄”:不为装备牌,你弃置一张牌;为装备牌,你将所有“玄”置入弃牌堆,然后摸等量的牌。';
+ return '转换技,每回合限一次,你可以将一张牌称为“玄”置于武将牌上,然后视为使用:阴,任意基本牌;阳,任意普通锦囊牌(须指定目标且仅指定一个目标)。若此次置于武将牌上的“玄”:不为装备牌,你弃置一张牌;为装备牌,你将所有“玄”置入弃牌堆,然后摸等量的牌。';
+ },
},
characterReplace:{
guanyinping:['guanyinping','old_guanyinping'],
@@ -26247,6 +26470,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhugedan:['re_zhugedan','zhugedan'],
zhangren:['jsrg_zhangren','zhangren'],
wenqin:['ol_wenqin','pe_wenqin'],
+ lukai:['ol_lukai','lukai'],
},
translate:{
"xinfu_lingren":"凌人",
@@ -27472,6 +27696,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liupan:'刘磐',
olpijing:'披荆',
olpijing_info:'每回合限一次,当你使用黑色【杀】或黑色普通锦囊牌指定唯一目标后,你可以令至多X名其他角色成为此牌的额外目标并依次交给你一张牌(X为你已损失的体力值且X至少为1)。这些角色下次使用基本牌或普通锦囊牌指定唯一目标时,其可令你成为此牌的额外目标或摸一张牌。',
+ ol_lukai:'OL陆凯',
+ ol_lukai_prefix:'OL',
+ olxuanzhu:'玄注',
+ olxuanzhu_info:'转换技,每回合限一次,你可以将一张牌称为“玄”置于武将牌上,然后视为使用:阴,任意基本牌;阳,任意普通锦囊牌(须指定目标且仅指定一个目标)。若此次置于武将牌上的“玄”:不为装备牌,你弃置一张牌;为装备牌,你将所有“玄”置入弃牌堆,然后摸等量的牌。',
+ oljiane:'謇谔',
+ oljiane_info:'锁定技。①当你对其他角色使用的牌生效后,其本回合无法抵消牌。②当你抵消牌后,你本回合无法成为牌的目标。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',
diff --git a/image/character/ol_lukai.jpg b/image/character/ol_lukai.jpg
new file mode 100644
index 000000000..ed8ce8938
Binary files /dev/null and b/image/character/ol_lukai.jpg differ