Merge pull request #334 from copcap/dev

OL牵招;bug修复
This commit is contained in:
Spmario233 2023-09-15 22:54:48 +08:00 committed by GitHub
commit fd89eb8223
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 212 additions and 13 deletions

BIN
audio/die/gaoxiang.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchiying1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchiying2.mp3 Normal file

Binary file not shown.

View File

@ -3043,7 +3043,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{target:'useCardToTargeted'}, trigger:{target:'useCardToTargeted'},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
return event.player!=player&&get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0); return get.type2(event.card)=='trick'&&(event.targets.length==1||player.countCards('he')>0);
}, },
content:function(){ content:function(){
if(trigger.targets.length==1) player.draw(); if(trigger.targets.length==1) player.draw();
@ -10132,7 +10132,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcqinqing:'寝情', dcqinqing:'寝情',
dcqinqing_info:'结束阶段,你可以弃置一名攻击范围内包含一号位的其他角色一张牌。然后若其手牌数大于一号位,你摸一张牌。', dcqinqing_info:'结束阶段,你可以弃置一名攻击范围内包含一号位的其他角色一张牌。然后若其手牌数大于一号位,你摸一张牌。',
dccunwei:'存畏', dccunwei:'存畏',
dccunwei_info:'锁定技。当你成为其他角色使用锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。', dccunwei_info:'锁定技。当你成为锦囊牌的目标后,若你是唯一目标,你摸一张牌;否则你弃置一张牌。',
dc_zhaotongzhaoguang:'赵统赵广', dc_zhaotongzhaoguang:'赵统赵广',
dcqingren:'青刃', dcqingren:'青刃',
dcqingren_info:'结束阶段你可以摸X张牌X为你本回合发动〖翊赞〗的次数。', dcqingren_info:'结束阶段你可以摸X张牌X为你本回合发动〖翊赞〗的次数。',

View File

@ -3965,7 +3965,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish(); else event.finish();
'step 2' 'step 2'
var target=targets.shift(); var target=targets.shift();
target.chooseToDiscard('寻道:请弃置一张牌'+(target==player?'':',可能被作为新判定牌'),'he',true).set('ai',target=>{ target.chooseToDiscard('寻道:请弃置一张牌'+(target==player?'':',可能被作为新判定牌'),'he',true).set('ai',card=>{
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;
var judging=_status.event.judging; var judging=_status.event.judging;

View File

@ -14146,7 +14146,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mbaosi_info:'锁定技。当你于出牌阶段对一名攻击范围内的角色造成伤害后,你于此阶段对其使用牌无次数限制。', mbaosi_info:'锁定技。当你于出牌阶段对一名攻击范围内的角色造成伤害后,你于此阶段对其使用牌无次数限制。',
xin_zhoutai:'手杀周泰', xin_zhoutai:'手杀周泰',
re_yanwen:"手杀颜良文丑", re_yanwen:"手杀颜良文丑",
qianzhao:'牵招', qianzhao:'手杀牵招',
mbshihe:'势吓', mbshihe:'势吓',
mbshihe_info_identity:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你造成伤害时,取消之;没赢,你随机弃置一张牌。', mbshihe_info_identity:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你造成伤害时,取消之;没赢,你随机弃置一张牌。',
mbshihe_info:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你和你的友方角色造成伤害时,取消之;没赢,你随机弃置一张牌。', mbshihe_info:'出牌阶段限一次。你可以与一名角色拼点。若你:赢,当其于其下回合结束前对你和你的友方角色造成伤害时,取消之;没赢,你随机弃置一张牌。',

View File

@ -915,7 +915,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zymingshi:{ zymingshi:{
audio:'mingshi', audio:'mingshi',
forced:true, forced:true,
trigger:{target:'useCardToTargeted'}, trigger:{target:'useCardToBefore'},
priority:15,
filter:function(event,player){ filter:function(event,player){
if(!player.hasEmptySlot(2)) return false; if(!player.hasEmptySlot(2)) return false;
if(event.card.name!='sha') return false; if(event.card.name!='sha') return false;

View File

@ -1247,6 +1247,7 @@ window.noname_character_rank={
'jsrg_zhanghe', 'jsrg_zhanghe',
'jsrg_zoushi', 'jsrg_zoushi',
'gaoxiang', 'gaoxiang',
'ol_qianzhao',
], ],
bm:[ bm:[
'diy_xizhenxihong', 'diy_xizhenxihong',

View File

@ -1165,7 +1165,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
event.targets=trigger.targets.filter(i=>!i.isLinked()); event.targets=trigger.targets.filter(i=>!i.isLinked());
player.logSkill('sblianhuan_discard2',event.targets); if(!event.targets.length) event.finish();
else player.logSkill('sblianhuan_discard2',event.targets);
'step 1' 'step 1'
var target=targets.shift(); var target=targets.shift();
var cards=target.getCards('h',card=>{ var cards=target.getCards('h',card=>{

View File

@ -10,7 +10,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_tianzhu:['niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'], sp_tianzhu:['niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"], sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'], sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'],
sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu'], sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'],
sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'], sp_liesi:['mizhu','weizi','ol_liuba','zhangshiping'],
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'], sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
sp_waitforsort:[], sp_waitforsort:[],
@ -27,6 +27,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
character:{ character:{
ol_qianzhao:['male','wei',4,['olweifu','olkuansai']],
niujin:['male','wei',4,['olcuorui','liewei']], niujin:['male','wei',4,['olcuorui','liewei']],
hejin:['male','qun',4,['olmouzhu','olyanhuo']], hejin:['male','qun',4,['olmouzhu','olyanhuo']],
hansui:['male','qun',4,['olniluan','olxiaoxi']], hansui:['male','qun',4,['olniluan','olxiaoxi']],
@ -691,6 +692,192 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
skill:{ skill:{
//OL牵招
olweifu:{
audio:2,
enable:'phaseUse',
filterCard:lib.filter.cardDiscardable,
position:'he',
filter:function(event,player){
return player.hasCard(card=>lib.filter.cardDiscardable(card,player),'he');
},
check:function(card){
var player=_status.event.player;
return (5-get.value(card))/Math.pow(Math.max(0.1,player.getUseValue(card)),0.33);
},
content:function(){
'step 0'
player.judge(card=>{
var evt=_status.event.getParent();
var cardx=evt.cards[0];
if(get.type2(card)==get.type2(cardx)) return 0.5;
return 0.1;
}).set('callback',function(){
var card=event.judgeResult.card;
player.addTempSkill('olweifu_clear');
player.addTempSkill('olweifu_add');
if(!get.is.object(player.storage.olweifu_add)) player.storage.olweifu_add={};
var type=get.type2(card,player);
if(typeof player.storage.olweifu_add[type]!='number') player.storage.olweifu_add[type]=0;
player.storage.olweifu_add[type]++;
player.markSkill('olweifu_add');
if(type==get.type2(event.getParent(2).cards[0],player)) player.draw();
}).set('judge2',result=>result.bool);
},
ai:{
order:7,
result:{
player:function(player){
return player.hasCard(card=>{
var type=get.type2(card);
if(type=='equip') return false;
return player.hasUseTarget(card)&&player.getUseValue(card)>5&&game.countPlayer(current=>{
return lib.filter.targetEnabled2(card,player,current)&&get.effect(current,card,player,player)>0;
})+1>(get.is.object(player.storage.olweifu_add)?(player.storage.olweifu_add[type]||0):0);
},'hs')?1:0;
},
},
},
subSkill:{
clear:{
trigger:{player:'useCard1'},
filter:function(event,player){
var type=get.type2(event.card);
if(get.is.object(player.storage.olweifu_add)&&typeof player.storage.olweifu_add[type]=='number') return true;
return false;
},
silent:true,
firstDo:true,
charlotte:true,
content:function(){
var type=get.type2(trigger.card);
var num=player.storage.olweifu_add[type];
delete player.storage.olweifu_add[type];
if(get.is.empty(player.storage.olweifu_add)){
delete player.storage.olweifu_add;
player.unmarkSkill('olweifu_add');
}
trigger._olweifu_clear=num;
}
},
add:{
trigger:{player:'useCard2'},
filter:function(event,player){
if(!event._olweifu_clear) return false;
var info=get.info(event.card);
if(info.allowMultiple==false) return false;
if(event.targets&&!info.multitarget){
if(game.hasPlayer(current=>{
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current);
})) return true;
}
return false;
},
onremove:true,
charlotte:true,
direct:true,
content:function(){
'step 0'
var num=trigger._olweifu_clear;
player.chooseTarget(get.prompt('olweifu'),'为'+get.translation(trigger.card)+'额外指定'+get.cnNumber(num)+'个目标。',[1,num],(card,player,target)=>{
return !_status.event.sourcex.contains(target)&&lib.filter.targetEnabled2(_status.event.card,player,target);
}).set('sourcex',trigger.targets).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,_status.event.card,player,player);
}).set('card',trigger.card);
'step 1'
if(result.bool){
var targets=result.targets;
player.logSkill('olweifu_add',targets);
trigger.targets.addArray(targets);
game.log(targets,'也成为了',trigger.card,'的目标');
if(!event.isMine()&&!event.isOnline()) game.delayex();
}
},
intro:{
markcount:()=>0,
content:(storage,player)=>{
if(!get.is.object(storage)) return;
var str='使用下一张以下类型的牌无距离限制,且可以额外指定对应数量个目标:';
for(var type in storage){
str+='<li>'+get.translation(type)+'牌:+'+storage[type];
}
return str;
}
},
mod:{
targetInRange:(card,player)=>{
var type=get.type2(card);
if(get.is.object(player.storage.olweifu_add)&&typeof player.storage.olweifu_add[type]=='number') return true;
},
}
}
},
},
olkuansai:{
audio:2,
trigger:{
global:'useCardToPlayered',
},
filter:function(event,player){
return event.isFirstTarget&&event.targets.length>player.getHp();
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('olkuansai'),'令其中一个目标选择一项1.交给你一张牌2.令你回复1点体力。',(card,player,target)=>{
return _status.event.targets.contains(target);
}).set('targets',trigger.targets).set('ai',target=>{
var player=_status.event.player;
var att=get.attitude(player,target);
if(att>0) return 1;
return (1-att)/Math.sqrt(1+target.countCards('he'));
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('olkuansai',target);
var position='e';
if(player!=target) position+='h';
var forced=player.isHealthy();
var str='请交给其一张牌'+(forced?'':'或点击“取消”令其回复1点体力')+'。';
if(!target.countCards(position)) event._result={bool:false};
else target.chooseCard(get.translation(player)+'对你发动了【款塞】',str,position,forced).set('ai',card=>{
if(_status.event.recover) return 0;
var target=_status.event.player,player=_status.event.getParent().player;
if(get.attitude(target,player)>0){
return get.value(card,target)-get.value(card,player);
}
if(get.tag(card,'recover')) return -1;
return 6.5-get.value(card);
}).set('recover',function(){
if(forced) return false;
var recoverEff=get.recoverEffect(player,target,target);
var att=get.attitude(target,player);
if(att<0){
if(recoverEff>=0) return true;
if(target.hasCard(card=>{
return get.value(card)<6.5&&!get.tag(card,'recover')||get.value(card)<=0.05;
},position)) return false;
}
else{
if(recoverEff>0) return true;
if(target.hasCard(card=>{
return get.value(card,target)<get.value(card,player);
},position)) return false;
}
return true;
}());
}
else event.finish();
'step 2'
if(result.bool){
target.give(result.cards,player);
}
else player.recover(target);
},
},
//牛金 //牛金
olcuorui:{ olcuorui:{
audio:'cuorui', audio:'cuorui',
@ -1293,7 +1480,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hasSame:function(info,card){ hasSame:function(info,card){
if(info.type==get.type2(card,false)) return true; if(info.type==get.type2(card,false)) return true;
if(info.suit!='none'&&info.suit==get.suit(card,false)) return true; if(info.suit!='none'&&info.suit==get.suit(card,false)) return true;
if(typeof info.number=='number'&&info.number>0&&info.number==get.suit(card,false)) return true; if(typeof info.number=='number'&&info.number>0&&info.number==get.number(card,false)) return true;
return info.length==get.cardNameLength(card) return info.length==get.cardNameLength(card)
}, },
content:function(){ content:function(){
@ -23288,6 +23475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ganfuren:['dc_ganfuren','ganfuren'], ganfuren:['dc_ganfuren','ganfuren'],
wenqin:['wenqin','pe_wenqin'], wenqin:['wenqin','pe_wenqin'],
zhouqun:['ol_zhouqun','zhouqun'], zhouqun:['ol_zhouqun','zhouqun'],
qianzhao:['ol_qianzhao','qianzhao'],
}, },
translate:{ translate:{
"xinfu_lingren":"凌人", "xinfu_lingren":"凌人",
@ -24317,7 +24505,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olkenshang:'垦伤', olkenshang:'垦伤',
olkenshang_info:'你可以将任意张牌当【杀】使用然后你可以将此牌目标改为所有你攻击范围外的角色。此牌结算结束后若此牌对应的实体牌数大于X你摸X张牌X为此牌造成过的伤害值否则你失去一个技能。', olkenshang_info:'你可以将任意张牌当【杀】使用然后你可以将此牌目标改为所有你攻击范围外的角色。此牌结算结束后若此牌对应的实体牌数大于X你摸X张牌X为此牌造成过的伤害值否则你失去一个技能。',
rekenshang:'垦伤', rekenshang:'垦伤',
rekenshang_info:'你可以将至少两张牌当【杀】使用,然后你可以将此牌目标改为等量名角色。此牌结算结束后,若此牌对应的实体牌数大于X你摸X张牌X为此牌造成过的伤害值。', rekenshang_info:'你可以将至少两张牌当【杀】使用,然后你可以将此牌目标改为等量名角色。此牌结算结束后,若此牌对应的实体牌数大于此牌造成过的伤害值,你摸一张牌。',
ol_zhujun:'OL朱儁', ol_zhujun:'OL朱儁',
olcuipo:'摧破', olcuipo:'摧破',
olcuipo_info:'锁定技。当你使用牌时若此牌是你本回合使用的第X张牌X为此牌牌名的字数{若此牌为【杀】或伤害类锦囊牌,则此牌的伤害值基数+1否则你摸一张牌}。', olcuipo_info:'锁定技。当你使用牌时若此牌是你本回合使用的第X张牌X为此牌牌名的字数{若此牌为【杀】或伤害类锦囊牌,则此牌的伤害值基数+1否则你摸一张牌}。',
@ -24404,7 +24592,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olniluan:'逆乱', olniluan:'逆乱',
olniluan_info:'体力值大于你的其他角色的结束阶段,若其本回合内使用过【杀】,则你可以将一张黑色牌当作【杀】对其使用(无距离限制)。', olniluan_info:'体力值大于你的其他角色的结束阶段,若其本回合内使用过【杀】,则你可以将一张黑色牌当作【杀】对其使用(无距离限制)。',
olxiaoxi:'骁袭', olxiaoxi:'骁袭',
olxiaoxi_info:'新的一轮开始时,你可以视为使用一张无距离限制的【杀】。', olxiaoxi_info:'一轮游戏开始时,你可以视为使用一张无距离限制的【杀】。',
ol_qianzhao:'牵招',
olweifu:'威抚',
olweifu_info:'出牌阶段,你可以弃置一张牌并判定。你本回合下次使用与结果类型相同的牌无距离限制,且可以额外指定一个目标。若你弃置的牌与判定牌类型相同,你摸一张牌。',
olkuansai:'款塞',
olkuansai_info:'当一张牌指定第一个目标后若目标数大于你的体力值你可以令其中一个目标选择一项1.交给你一张牌2.令你回复1点体力。',
sp_tianji:'天极·皇室宗亲', sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲', sp_sibi:'四弼·辅国文曲',

View File

@ -8417,7 +8417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
charlotte:true, charlotte:true,
filter:function(event,player,name){ filter:function(event,player,name){
if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark')); if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark'));
return event.player!=player&&event._twchuanshu&&player.hasHistory('sourceDamage',function(evt){ return player.getStorage('twchuanshu_effect').some(i=>i!=player)&&event._twchuanshu&&player.hasHistory('sourceDamage',function(evt){
return evt.card==event.card; return evt.card==event.card;
}); });
}, },
@ -8434,7 +8434,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.getHistory('sourceDamage',function(evt){ player.getHistory('sourceDamage',function(evt){
if(evt.card==trigger.card) num2+=evt.num; if(evt.card==trigger.card) num2+=evt.num;
}); });
player.draw(num1*num2); var targets=player.getStorage('twchuanshu_effect').filter(i=>i!=player&&i.isIn());
for(var target of targets){
target.draw(num1*num2);
}
} }
}, },
}, },

View File

@ -2797,7 +2797,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
frequent:true, frequent:true,
locked:false, locked:false,
content:function(){ content:function(){
player.draw(); player.draw(trigger.targets.length);
}, },
mod:{ mod:{
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB