This commit is contained in:
Spmario233 2021-10-12 13:02:49 +08:00
parent 6eb57eb0ec
commit fbd3fb9bf1
20 changed files with 784 additions and 114 deletions

View File

@ -222,12 +222,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
target:target,
card:card,
},true)) return false;
if(player.hasSkill('jueqing')||target.hasSkill('gangzhi')||target.hasSkill('gangzhi')) return false;
if(player.hasSkill('jueqing')||player.hasSkill('gangzhi')||target.hasSkill('gangzhi')) return false;
return true;
},
basic:{
useful:[5,1],
value:[5,1],
useful:[5,3,1],
value:[5,3,1],
},
order:function(item,player){
if(player.hasSkillTag('presha',true,null,true)) return 10;
@ -293,8 +293,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
shacopy:{
ai:{
basic:{
useful:[5,1],
value:[5,1],
useful:[5,3,1],
value:[5,3,1],
},
order:3,
result:{
@ -357,8 +357,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
order:3,
basic:{
useful:[7,2],
value:[7,2],
useful:[7,5.1,2],
value:[7,5.1,2],
},
result:{player:1},
//expose:0.2
@ -389,8 +389,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(player.hasSkillTag('pretao')) return 5;
return 2;
},
useful:[8,6.5,5,4],
value:[8,6.5,5,4],
useful:[6.5,4,3,2],
value:[6.5,4,3,2],
},
result:{
target:2,
@ -800,7 +800,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
basic:{
order:3,
useful:1,
useful:0.5,
},
result:{
target:function(player,target){
@ -848,7 +848,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 11;
},
useful:[3,1],
value:0
value:0,
},
result:{
target:function(player,target){
@ -886,7 +886,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0;
if(evt.player.hasSkillTag('notricksource')) return 0;
if(evt.target.hasSkillTag('notrick')) return 0;
return 11-get.value(card);
return get.order(card);
});
next.autochoose=lib.filter.autoRespondSha;
}
@ -964,7 +964,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(evt.target.hasSkillTag('noShan')){
return -1;
}
return 11-get.value(card);
return get.order(card);
});
next.autochoose=lib.filter.autoRespondShan;
}
@ -1101,14 +1101,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(event.player==target){
if(player.hasSkill('naman')) return -1;
if(get.attitude(target,player)<0||event.player.hp<=1){
return get.unuseful2(card)
return get.order(card);
}
return -1;
}
else{
if(target.hasSkill('naman')) return -1;
if(get.attitude(player,target)<0||event.player.hp<=1){
return get.unuseful2(card)
return get.order(card);
}
return -1;
}
@ -1320,7 +1320,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{
basic:{
order:9,
useful:1,
useful:5,
value:5,
},
yingbian:function(card,player,targets,viewer){
@ -1445,8 +1445,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
type:'trick',
ai:{
basic:{
useful:[6,4],
value:[6,4],
useful:[6,4,3],
value:[6,4,3],
},
result:{player:1},
expose:0.2

View File

@ -11550,7 +11550,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinpi:['xinpi','sp_xinpi'],
duyu:['duyu','sp_duyu'],
zhangwen:['sp_zhangwen','zhangwen'],
//bianfuren:['sp_bianfuren','bianfuren'],
bianfuren:['bianfuren','sp_bianfuren'],
},
translate:{
liuzan:'手杀留赞',

View File

@ -698,6 +698,8 @@ window.noname_character_rank={
'xin_zhonghui',
'jiachong',
'wuban',
'tw_zhaoxiang',
'ol_lusu',
],
b:[
'diy_feishi',
@ -888,6 +890,7 @@ window.noname_character_rank={
're_dongbai',
'xin_guyong',
'duosidawang',
're_jiaxu',
],
bm:[
'diy_xizhenxihong',
@ -1427,6 +1430,7 @@ window.noname_character_rank={
'key_kotomi',
'zhongyan',
'kaisa',
'tw_zhaoxiang',
],
rare:[
'pal_shenqishuang',
@ -1726,6 +1730,7 @@ window.noname_character_rank={
'zhangzhongjing',
'xin_zhonghui',
'jiachong',
'ol_lusu',
],
junk:[
'sunshao',

View File

@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_standard:["re_caocao","re_simayi","re_guojia","re_lidian","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_xushu","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'],
refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'],
refresh_huo:["ol_sp_zhugeliang","re_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"],
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','re_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu'],
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','re_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'],
refresh_shan:['ol_jiangwei','re_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai'],
refresh_yijiang1:['re_wuguotai','re_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua'],
refresh_yijiang2:['old_madai','wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','re_bulianshi','xin_liubiao'],
@ -18,7 +18,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
connect:true,
character:{
re_jiaxu:['male','qun',3,['rewansha','reluanwu','reweimu'],['unseen']],
ol_lusu:['male','wu',3,['olhaoshi','oldimeng']],
re_jiaxu:['male','qun',3,['rewansha','luanwu','reweimu']],
re_guyong:['male','wu',3,['reshenxing','rebingyi']],
xin_zhonghui:['male','wei',4,['xinquanji','xinzili']],
re_caifuren:['female','qun',3,['reqieting','rexianzhou']],
@ -138,6 +139,170 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//鲁肃
olhaoshi:{
trigger:{player:'phaseDrawBegin2'},
filter:function(event,player){
return !event.numFixed;
},
check:function(event,player){
return (player.countCards('h')+2+event.num)<=5||game.hasPlayer(function(target){
return !game.hasPlayer(function(current){
return current!=player&&current!=target&&current.countCards('h')<target.countCards('h');
})&&get.attitude(player,target)>0;
});
},
content:function(){
trigger.num+=2;
player.addTempSkill('olhaoshi_give','phaseDrawAfter');
},
subSkill:{
give:{
trigger:{player:'phaseDrawEnd'},
forced:true,
charlotte:true,
popup:false,
filter:function(event,player){
return player.countCards('h')>5;
},
content:function(){
'step 0'
var targets=game.filterPlayer(function(target){
return !game.hasPlayer(function(current){
return current!=player&&current!=target&&current.countCards('h')<target.countCards('h');
});
}),num=Math.floor(player.countCards('h')/2);
player.chooseCardTarget({
position:'h',
filterCard:true,
filterTarget:function(card,player,target){
return _status.event.targets.contains(target);
},
targets:targets,
selectTarget:targets.length==1?-1:1,
selectCard:num,
prompt:'将'+get.cnNumber(num)+'张手牌交给一名手牌数最少的其他角色',
ai1:function(card){
var goon=false,player=_status.event.player;
for(var i of _status.event.targets){
if(get.attitude(i,target)>0&&get.attitude(target,i)>0) goon=true;break;
}
if(goon){
if(!player.hasValueTarget(card)||card.name=='sha'&&player.countCards('h',function(cardx){
return cardx.name=='sha'&&!ui.selected.cards.contains(cardx);
})>player.getCardUsable('sha')) return 2;
return Math.max(2,get.value(card)/4);
}
return 1/Math.max(1,get.value(card));
},
ai2:function(target){
return get.attitude(_status.event.player,target);
},
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
target.gain(result.cards,player,'giveAuto');
player.markAuto('olhaoshi_help',[target]);
player.addTempSkill('olhaoshi_help',{player:'phaseBeginStart'});
}
},
},
help:{
trigger:{target:'useCardToTargeted'},
direct:true,
charlotte:true,
onremove:true,
filter:function(event,player){
if(!player.storage.olhaoshi_help||!player.storage.olhaoshi_help.length) return false;
if(event.card.name!='sha'&&get.type(event.card)!='trick') return false;
for(var i of player.storage.olhaoshi_help){
if(i.countCards('h')>0) return true;
}
return false;
},
content:function(){
'step 0'
if(!event.targets) event.targets=player.storage.olhaoshi_help.slice(0).sortBySeat();
event.target=event.targets.shift();
event.target.chooseCard('h','好施:是否将一张手牌交给'+get.translation(player)+'').set('ai',function(card){
var player=_status.event.player,target=_status.event.getTrigger().player;
if(!_status.event.goon){
if(get.value(card,player)<0||get.value(card,target)<0) return 1;
return 0;
}
var cardx=_status.event.getTrigger().card;
if(card.name=='shan'&&get.tag(cardx,'respondShan')&&target.countCards('h','shan')<player.countCards('h','shan')) return 2;
if(card.name=='sha'&&(cardx.name=='juedou'||get.tag(card,'respondSha')&&(target.countCards('h','sha')<player.countCards('h','sha')))) return 2;
if(get.value(card,target)>get.value(card,player)||target.getUseValue(card)>player.getUseValue(card)) return 1;
if(player.hasSkillTag('noh')) return 0.5/Math.max(1,get.value(card,player));
return 0;
}).set('goon',get.attitude(event.target,player)>0);
'step 1'
if(result.bool){
target.logSkill('olhaoshi_help',player);
player.gain(result.cards,target,'giveAuto');
}
if(targets.length) event.goto(0);
},
},
},
},
oldimeng:{
enable:'phaseUse',
usable:1,
filter:function(event,player){
return game.hasPlayer((current)=>current.countCards('h')>0);
},
selectTarget:2,
complexTarget:true,
filterTarget:function(card,player,target){
if(!ui.selected.targets.length||ui.selected.targets[0].countCards('h')>0) return true;
return target.countCards('h')>0;
},
multitarget:true,
multiline:true,
content:function(){
targets[0].swapHandcards(targets[1]);
var num=Math.abs(targets[0].countCards('h')-targets[1].countCards('h'));
if(num>0){
player.addMark('oldimeng_discard',num,false);
player.addTempSkill('oldimeng_discard','phaseUseAfter');
}
},
ai:{
threaten:4.5,
pretao:true,
nokeep:true,
order:1,
expose:0.2,
result:{
target:function(player,target){
if(!ui.selected.targets.length) return -Math.sqrt(target.countCards('h'));
var h1=ui.selected.targets[0].getCards('h'),h2=target.getCards('h');
if(h2.length>h1.length) return 0;
var delval=get.value(h2,target)-get.value(h1,ui.selected.targets[0]);
if(delval>=0) return 0;
return -delval*(h1.length-h2.length);
},
},
},
subSkill:{
discard:{
trigger:{player:'phaseUseEnd'},
forced:true,
charlotte:true,
onremove:true,
filter:function(event,player){
return player.countCards('he')>0;
},
content:function(){
player.chooseToDiscard('he',true,player.countMark('oldimeng_discard'));
},
},
},
},
//贾诩
rewansha:{
audio:'wansha',
@ -213,16 +378,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 1"
event.currented.push(event.current);
event.current.animate('target');
event.current.chooseToUse('乱武:使用一张杀或流失一点体力',{name:'sha'},function(card,player,target){
event.current.chooseToUse('乱武:使用一张杀或失去一点体力',function(card){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments)
},function(card,player,target){
if(player==target) return false;
if(!player.canUse('sha',target)) return false;
if(get.distance(player,target)<=1) return true;
if(game.hasPlayer(function(current){
return current!=player&&get.distance(player,current)<get.distance(player,target);
})){
return false;
var dist=get.distance(player,target);
if(dist>1){
if(game.hasPlayer(function(current){
return current!=player&&get.distance(player,current)<dist;
})){
return false;
}
}
return true;
return lib.filter.filterTarget.apply(this,arguments)
}).set('ai2',function(){
return get.effect_use.apply(this,arguments)+0.01;
});
"step 2"
if(result.bool==false){
@ -283,6 +454,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
trigger.cancel();
},
ai:{
effect:{
target:function(card,player,target){
if(target==_status.currentPhase&&get.tag(card,'damage')) return 'zerotarget';
},
},
},
},
//顾雍
reshenxing:{
@ -353,7 +531,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else player.chooseBool(get.prompt('bingyi'),'展示所有手牌').ai=function(){return false};
"step 1"
if(result.bool){
player.logSkill('xinbingyi');
player.logSkill('rebingyi');
player.showHandcards(get.translation(player)+'发动了【秉壹】');
event.targets=result.targets;
}
@ -2283,10 +2461,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att=get.attitude(player,target);
var sgnatt=get.sgn(att);
if(ui.selected.targets.length==0){
if(att>0){
if(target==player&&player.hasSkill('decadexuanfeng')){
if(player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0;
});
})>0) return 18;
return 7;
}
else if(att>0){
if(target.countCards('e',function(card){
return get.value(card,target)<0&&!_status.event.cards.contains(card)&&game.hasPlayer(function(current){
return current!=target&&get.attitude(player,current)<0&&current.isEmpty(get.subtype(card))
return current!=target&&current.isEmpty(get.subtype(card))&&get.effect(current,card,player,player)<0;
});
})>0) return 9;
}
@ -2312,6 +2498,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var i;
var att2=get.sgn(get.attitude(player,ui.selected.targets[0]));
for(i=0;i<es.length;i++){
if(ui.selected.targets[0]==player&&player.hasSkill('decadexuanfeng')){
var bool=game.hasPlayer(function(current){
return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0;
});
if(bool&&player.countCards('e',function(card){
return !_status.event.cards.contains(card)&&target.isEmpty(get.subtype(card))&&get.effect(target,card,player,player)>0;
})) return 2.5*Math.abs(att);
else if(bool) return 1/Math.max(1,Math.abs(att));
else return get.damageEffect(target,player,player);
}
if(sgnatt!=0&&att2!=0&&sgnatt!=att2&&
get.sgn(get.value(es[i],ui.selected.targets[0]))==-att2&&
get.sgn(get.effect(target,es[i],player,target))==sgnatt&&
@ -2395,14 +2591,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
var sources=game.filterPlayer(function(current){
return get.attitude(player,current)<0&&current.countCards('e');
return ((current==player&&current.hasSkill('decadexuanfeng'))||get.attitude(player,current)<0)&&current.countCards('e');
});
for(var i=0;i<sources.length;i++){
var es=sources[i].getCards('e');
for(var j=0;j<es.length;j++){
var type=get.subtype(es[j]);
if(vacancies[type]&&get.value(es[j])>0){
if(sources[i]==player||vacancies[type]>0&&get.value(es[j])>0){
num++;
if(sources[i]==player&&vacancies[type]&&game.hasPlayer(function(current){
return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0;
})) num+=0.5;
if(num>=3){
return 1;
}
@ -2483,8 +2682,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
ai:{
effect:{
player_use:function(card,player,target){
if(player==target&&get.type(card)=='equip'&&player.countCards('hes',function(cardx){
return card!=cardx&&(!card.cards||!card.cards.contains(cardx))&&(player.hasSkill('yongjin')||get.subtype(card)==get.subtype(cardx))&&(get.position(cardx)=='e'||player.canUse(cardx,player));
})>0) return;
if(!game.hasPlayer(function(current){
return get.attitude(player,current)<0&&current.countDiscardableCards(player,'he')>0&&get.damageEffect(current,player,player)>0;
})) return;
if(typeof card=='object'&&player.isPhaseUsing()&&
player.needsToDiscard()==2&&card.cards&&card.cards.filter(function(i){
return get.position(i)=='h';
}).length>0&&!get.tag(card,'draw')&&!get.tag(card,'gain')&&!(get.tag(card,'discard')&&target==player&&player.countCards('e')>0)) return 'zeroplayertarget';
},
target:function(card,player,target,current){
if(get.type(card)=='equip'&&!get.cardtag(card,'gifts')) return [1,3];
if(get.tag(card,'damage')&&target.hp>2){
var num1=target.countCards('h'),num2=target.getHandcardLimit();
if(num1>num2) return [1,1];
if(num1==num2) return [1.1,_status.event.player==target?3:0.5];
if(num1==num2-1) return [0.1,_status.event.player==target?4.5:0.1];
}
if(typeof card=='object'&&(card.name=='shunshou'||card.name=='guohe'||card.name=='zhujinqiyuan')&&target.countCards('h')>0&&get.attitude(player,target)<0) return [1,-1];
}
},
reverseEquip:true,
@ -3488,6 +3706,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
ollongdan:{
mod:{
aiValue:function(player,card,num){
if(card.name!='sha'&&card.name!='shan') return;
var geti=function(){
var cards=player.getCards('hs',function(card){
return card.name=='sha'||card.name=='shan';
});
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
return Math.max(num,[7,5,5,3][Math.min(geti(),3)]);
},
aiUseful:function(){
return lib.skill.ollongdan.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:'longdan_sha',
audioname:['re_zhaoyun'],
hiddenCard:function(player,name){
@ -6070,6 +6307,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
xinleiji_faq:{},
reqingguo:{
mod:{
aiValue:function(player,card,num){
if(get.name(card)!='shan'&&get.color(card)!='black') return;
var cards=player.getCards('hs',function(card){
return get.name(card)=='shan'||get.color(card)=='black';
});
cards.sort(function(a,b){
return (get.name(b)=='shan'?1:2)-(get.name(a)=='shan'?1:2);
});
var geti=function(){
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
if(get.name(card)=='shan') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
return Math.max(num,[6.5,4,3][Math.min(geti(),2)]);
},
aiUseful:function(){
return lib.skill.reqingguo.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:2,
enable:['chooseToRespond','chooseToUse'],
filterCard:function(card){
@ -6083,6 +6343,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
prompt:'将一张黑色牌当闪打出',
check:function(){return 1},
ai:{
order:2,
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('hes',{color:'black'})) return false;
@ -6168,6 +6429,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
rekanpo:{
mod:{
aiValue:function(player,card,num){
if(get.name(card)!='wuxie'&&get.color(card)!='black') return;
var cards=player.getCards('hs',function(card){
return get.name(card)=='wuxie'||get.color(card)=='black';
});
cards.sort(function(a,b){
return (get.name(b)=='wuxie'?1:2)-(get.name(a)=='wuxie'?1:2);
});
var geti=function(){
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
if(get.name(card)=='wuxie') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
return Math.max(num,[6,4,3][Math.min(geti(),2)]);
},
aiUseful:function(){
return lib.skill.rekanpo.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:2,
audioname:['ol_sp_zhugeliang','ol_pangtong'],
position:"hes",
@ -10160,7 +10444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinpaiyi_info:'出牌阶段每项各限一次你可移去一张“权”并选择一项①令一名角色摸X张牌。②对至多X名角色各造成1点伤害。X为“权”数',
re_guyong:'界顾雍',
reshenxing:'慎行',
reshenxing_info:'出牌阶段你可以弃置X张牌X为你本阶段内发动过〖慎行〗的次数),然后摸一张牌。若这两张牌颜色不同,则改为摸两张牌。',
reshenxing_info:'出牌阶段你可以弃置X张牌X为你本阶段内发动过〖慎行〗的次数且至多为2),然后摸一张牌。',
rebingyi:'秉壹',
rebingyi_info:'结束阶段你可展示所有手牌。若这些牌颜色均相同则你可以令至多X名角色各摸一张牌X为你的手牌数点数均相同则你摸一张牌。',
re_jiaxu:'界贾诩',
@ -10170,6 +10454,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reluanwu_info:'限定技出牌阶段你可令所有其他角色依次选择一项①对距离最近或之一的角色使用一张【杀】②失去1点体力。然后你摸X张牌X为选择①和②的角色数中的最大值。',
reweimu:'帷幕',
reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时,防止此伤害。',
ol_lusu:'界鲁肃',
olhaoshi:'好施',
olhaoshi_info:'摸牌阶段开始时你可以多摸两张牌。然后摸牌阶段结束时若你的手牌数大于5则你将手牌数的一半向下取整交给一名手牌最少其他角色并获得如下效果直到你下回合开始当你成为【杀】或普通锦囊牌的目标后其可以交给你一张手 牌。',
oldimeng:'缔盟',
oldimeng_info:'出牌阶段限一次你可令两名角色交换手牌并获得如下效果出牌阶段结束时你弃置X张牌X为这两名角色的手牌数之差。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -4942,16 +4942,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 1"
event.currented.push(event.current);
event.current.animate('target');
event.current.chooseToUse('乱武:使用一张杀或流失一点体力',{name:'sha'},function(card,player,target){
event.current.chooseToUse('乱武:使用一张杀或失去一点体力',function(card){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments)
},function(card,player,target){
if(player==target) return false;
if(!player.canUse('sha',target)) return false;
if(get.distance(player,target)<=1) return true;
if(game.hasPlayer(function(current){
return current!=player&&get.distance(player,current)<get.distance(player,target);
})){
return false;
var dist=get.distance(player,target);
if(dist>1){
if(game.hasPlayer(function(current){
return current!=player&&get.distance(player,current)<dist;
})){
return false;
}
}
return true;
return lib.filter.filterTarget.apply(this,arguments)
}).set('ai2',function(){
return get.effect_use.apply(this,arguments)+0.01;
});
"step 2"
if(result.bool==false) event.current.loseHp();
@ -5092,6 +5098,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
kanpo:{
mod:{
aiValue:function(player,card,num){
if(get.name(card)!='wuxie'&&get.color(card)!='black') return;
var cards=player.getCards('hs',function(card){
return get.name(card)=='wuxie'||get.color(card)=='black';
});
cards.sort(function(a,b){
return (get.name(b)=='wuxie'?1:2)-(get.name(a)=='wuxie'?1:2);
});
var geti=function(){
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
if(get.name(card)=='wuxie') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
return Math.max(num,[6,4,3][Math.min(geti(),2)]);
},
aiUseful:function(){
return lib.skill.kanpo.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:2,
enable:'chooseToUse',
filterCard:function(card){
@ -7338,6 +7367,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guanqiujian:['guanqiujian','re_guanqiujian','old_guanqiujian'],
chendao:['chendao','ns_chendao'],
zhugezhan:['zhugezhan','old_zhugezhan'],
ol_lusu:['ol_lusu','re_lusu'],
},
translate:{
re_yuanshao:'袁绍',

View File

@ -8,7 +8,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_default:["caoying","simahui","yangxiu","chenlin","caohong","xiahouba","yuanshu","sp_diaochan","sp_zhaoyun","zhugejin","zhugeke","guanyinping","simalang","zhangxingcai","sp_sunshangxiang","caoang","sp_caoren","zhangbao","maliang","zhugedan","sp_jiangwei","sp_machao","sunhao","shixie","mayunlu","zhanglu","wutugu","sp_caiwenji","zhugeguo","jsp_guanyu","jsp_huangyueying","sunluyu","zumao","wenpin","daxiaoqiao","tadun","yanbaihu","chengyu","wanglang","sp_pangde","sp_jiaxu","litong","mizhu","buzhi","caochun","dongbai","zhaoxiang","mazhong","dongyun","kanze","heqi","wangyun","sunqian","xizhicai","quyi","luzhi","xujing","yuantanyuanshang","sunshao","zhangling",'guansuo','baosanniang','ol_zhangchangpu','caoshuang','sp_zhangliao','wolongfengchu','ol_xinxianying','panshu','huangzu','huangchengyan','gaogan','duxi'],
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"],
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_single:["niujin"],
sp_others:["hanba","caiyang"],
@ -16,6 +16,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
characterFilter:{},
character:{
bianfuren:['female','wei',3,['fuwei','yuejian']],
duxi:['male','wei',3,['quxi','bixiong']],
gaogan:['male','qun',4,['juguan']],
sp_mifangfushiren:['male','shu',4,['mffengshi']],
@ -123,7 +124,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hetaihou:['female','qun',3,['zhendu','qiluan']],
//kongrong:['male','qun',3,['lirang','mingshi']],
dingfeng:['male','wu',4,['reduanbing','refenxun']],
//bianfuren:['female','wei',3,['wanwei','yuejian']],
shamoke:['male','shu',4,['gzjili']],
liqueguosi:['male','qun',4,['xiongsuan']],
lvfan:['male','wu',3,['diaodu','diancai']],
@ -392,6 +392,92 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//卞夫人
fuwei:{
audio:'wanwei',
trigger:{
player:'loseAfter',
global:'gainAfter',
},
filter:function(event,player){
var evt=event;
if(event.name=='lose'){
if(event.type!='discard') return false;
evt=event.getParent();
}
if(evt[event.name=='gain'?'bySelf':'notBySelf']!=true) return false;
var evtx=event.getl(player);
return evtx&&evtx.cards2&&evtx.cards2.length>0;
},
prompt2:function(event,player){
var evt=event.getl(player),origins=evt.cards2.map(function(i){
return get.name(i,evt.hs.contains(i)?player:false);
});
return '从牌堆中获得'+get.translation(origins)+';若没有则改为摸一张牌';
},
usable:1,
content:function(){
var num=0,cards=[],evt=trigger.getl(player),origins=evt.cards2.map(function(i){
return get.name(i,evt.hs.contains(i)?player:false);
});
for(var i of origins){
var card=get.cardPile2(function(card){
return card.name==i&&!cards.contains(card);
});
if(card) cards.push(card);
else num++;
}
if(cards.length) player.gain(cards,'gain2');
if(num) player.draw(num);
},
},
yuejian:{
audio:2,
usable:2,
trigger:{global:'useCardAfter'},
filter:function(event,player){
return player!=event.player&&event.targets&&event.targets.contains(player)&&player.countCards('h')>0;
},
prompt2:function(event,player){
var suit=get.suit(event.card),hs=player.getCards('h'),cards=event.cards.filterInD();
if(!lib.suit.contains(suit)||!cards.length){
return '展示所有手牌,然后无事发生';
}
for(var i of hs){
if(get.suit(i)==suit){
return '展示所有手牌,然后无事发生';
}
}
return '展示所有手牌,然后<span class="yellowtext">获得'+get.translation(cards)+'</span>';
},
check:function(event,player){
var suit=get.suit(event.card),hs=player.getCards('h'),cards=event.cards.filterInD();
if(!lib.suit.contains(suit)||!cards.length){
return false;
}
for(var i of hs){
if(get.suit(i)==suit){
return false;
}
}
return true;
},
content:function(){
'step 0'
player.showHandcards(get.translation(player)+'发动了【约俭】');
var suit=get.suit(trigger.card),hs=player.getCards('h');
if(!lib.suit.contains(suit)){event.finish();return;}
for(var i of hs){
if(get.suit(i)==suit){
event.finish();
return;
}
}
'step 1'
var cards=trigger.cards.filterInD();
if(cards.length) player.gain(cards,'gain2');
},
},
//杜袭
quxi:{
audio:2,
@ -1082,7 +1168,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var player=_status.event.player;
if(button.link[2]=='jiu'){
if(player.getUseValue({name:'jiu'})<=0) return 0;
if(player.countCards('h','sha')) return 4
if(player.countCards('h','sha')) return player.getUseValue({name:'jiu'});
}
return player.getUseValue({name:button.link[2],nature:button.link[3]})/4;
},
@ -1100,7 +1186,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
position:'he',
check:function(card){
var player=_status.event.player,color=get.color(card,player);
if(player.countCards('he',{color:color})<=player.countMark('jinzhi2')||(ui.selected.cards.length&&get.color(ui.selected.cards[0],player)!=color)) return 0;
if(player.countCards('he',{color:color})<=player.countMark('jinzhi2')||(ui.selected.cards.length&&get.color(ui.selected.cards[0],player)!=color)) return -1;
if(lib.skill.jinzhi_backup.viewAs.name=='jiu'&&!player.countCards('h',function(cardx){
return card!=cardx&&!ui.selected.cards.contains(cardx)&&get.name(cardx,player)=='sha';
})) return 0;
@ -1142,7 +1228,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
ai:{
order:function(item,player){
if(_status.event.type=='phase'&&player.getUseValue({name:'jiu'},null,true)>0&&player.countCards('h','sha')) return 4;
if(_status.event.type=='phase'&&!player.countMark('jinzhi2')&&player.getUseValue({name:'jiu'},null,true)>0&&player.countCards('h','sha')) return get.order({name:'jiu'})+1;
return 1;
},
respondShan:true,
@ -3314,29 +3400,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
yuejian:{
trigger:{global:'phaseDiscardBegin'},
audio:2,
filter:function(event,player){
return event.player.countUsed()<event.player.maxHp;
},
content:function(){
trigger.player.addTempSkill('yuejian_num');
},
logTarget:'player',
check:function(event,player){
return get.attitude(player,event.player)>0&&event.player.needsToDiscard();
},
subSkill:{
num:{
mod:{
maxHandcard:function(player,num){
return num+player.maxHp;
}
}
},
}
},
gzjili:{
mod:{
aiOrder:function(player,card,num){
@ -6364,6 +6427,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
refanghun:{
mod:{
aiValue:function(player,card,num){
if(card.name!='sha'&&card.name!='shan') return;
var geti=function(){
var cards=player.getCards('hs',function(card){
return card.name=='sha'||card.name=='shan';
});
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
return Math.max(num,[7,5,5,3][Math.min(geti(),3)]);
},
},
locked:false,
audio:'fanghun',
inherit:'fanghun',
trigger:{
@ -6495,10 +6574,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(temp>max) max=temp;
}
}
if(max>0) max+=0.3;
if(max>0) max+=((player.storage.refuhan||player.storage.twfuhan)?0.3:-0.3);
return max;
}
return 4;
return (player.storage.refuhan||player.storage.twfuhan)?4:1;
},
},
},
@ -14683,6 +14762,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fuwan:['fuwan','sp_fuwan'],
huaxin:['ol_huaxin','huaxin','sp_huaxin'],
xujing:['xujing','sp_xujing'],
zhaoxiang:['zhaoxiang','tw_zhaoxiang'],
},
translate:{
"xinfu_lingren":"凌人",
@ -14936,8 +15016,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
wanwei:'挽危',
wanwei_info:'当你因被其他角色获得或弃置而失去牌时,你可以改为自己选择失去的牌。',
yuejian:'约俭',
yuejian_info:'一名角色的弃牌阶段开始时若其本回合内使用过的牌数小于X则你可以令其本回合的手牌上限+X。(X为其的体力上限)',
gzjili:'蒺藜',
gzjili_info:'当你于一回合内使用或打出第X张牌时你可以摸X张牌X为你的攻击范围。',
xiongsuan:'凶算',
@ -15505,7 +15583,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
bixiong:'避凶',
bixiong2:'避凶',
bixiong_info:'锁定技,当你于弃牌阶段弃置手牌后,你不能成为与这些牌花色相同的牌的目标直到你下回合开始。',
fuwei:'扶危',
fuwei_info:'每回合限一次。当你的牌被其他角色弃置或获得后,你可从牌堆中获得一张与此牌名称相同的牌(若没有则改为摸一张牌)。',
yuejian:'约俭',
yuejian_info:'每回合限两次。当其他角色对你使用的牌A结算结束后你可展示所有手牌。若牌A有花色且你的手牌中没有同花色的牌则你获得牌A对应的所有实体牌。',
sp_default:"常规",
sp_tongque:"铜雀台",

View File

@ -727,6 +727,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
qingguo:{
mod:{
aiValue:function(player,card,num){
if(get.name(card)!='shan'&&get.color(card)!='black') return;
var cards=player.getCards('hs',function(card){
return get.name(card)=='shan'||get.color(card)=='black';
});
cards.sort(function(a,b){
return (get.name(b)=='shan'?1:2)-(get.name(a)=='shan'?1:2);
});
var geti=function(){
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
if(get.name(card)=='shan') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
return Math.max(num,[6.5,4,3][Math.min(geti(),2)]);
},
aiUseful:function(){
return lib.skill.qingguo.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:2,
enable:['chooseToRespond','chooseToUse'],
filterCard:function(card){
@ -740,6 +763,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
prompt:'将一张黑色手牌当闪使用或打出',
check:function(){return 1},
ai:{
order:3,
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('hs',{color:'black'})) return false;
@ -2372,6 +2396,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
jijiu:{
mod:{
aiValue:function(player,card,num){
if(get.name(card)!='tao'&&get.color(card)!='red') return;
var cards=player.getCards('hs',function(card){
return get.name(card)=='tao'||get.color(card)=='red';
});
cards.sort(function(a,b){
return (get.name(a)=='tao'?1:2)-(get.name(b)=='tao'?1:2);
});
var geti=function(){
if(cards.contains(card)){
return cards.indexOf(card);
}
return cards.length;
};
return Math.max(num,[6.5,4,3,2][Math.min(geti(),2)]);
},
aiUseful:function(){
return lib.skill.kanpo.mod.aiValue.apply(this,arguments);
},
},
locked:false,
audio:2,
audioname:['re_huatuo'],
enable:'chooseToUse',

View File

@ -11,6 +11,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
tw_zhaoxiang:['female','shu',4,['refanghun','twfuhan','twqueshi']],
yuejiu:['male','qun',4,['cuijin']],
wuban:['male','shu',4,['jintao']],
duosidawang:['male','qun','4/5',['equan','manji']],
@ -119,7 +120,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
equipValue:7,
}
},
skills:['gx_chongyingshenfu']
skills:['gx_chongyingshenfu'],
loseDelay:false,
},
meiyingqiang:{
fullskin:true,
type:'equip',
subtype:'equip1',
cardimage:'yinyueqiang',
derivation:'tw_zhaoxiang',
distance:{attackFrom:-2},
ai:{
basic:{
equipValue:4.5,
}
},
skills:['meiyingqiang'],
},
},
characterFilter:{
@ -131,6 +147,131 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
twfuhan:{
audio:'fuhan',
trigger:{player:'phaseZhunbeiBegin'},
unique:true,
limited:true,
skillAnimation:true,
animationColor:'orange',
forceunique:true,
filter:function(event,player){
return player.countMark('fanghun')>0;
},
prompt:function(event,player){
var num=Math.max(2,player.storage.fanghun);
num=Math.min(num,8);
return get.prompt('twfuhan')+'(体力上限:'+num+'';
},
check:function(event,player){
if(player.storage.fanghun>=Math.min(4,player.maxHp)) return true;
if(player.hp<=2&&player.storage.fanghun>=3) return true;
return false;
},
content:function(){
'step 0'
event.num=player.storage.fanghun;
player.removeMark('fanghun',player.storage.fanghun);
player.awakenSkill('twfuhan');
if(_status.characterlist){
list=[];
for(var i=0;i<_status.characterlist.length;i++){
var name=_status.characterlist[i];
if(lib.character[name][1]=='shu') list.push(name);
}
}
else if(_status.connectMode){
list=get.charactersOL(function(i){
return lib.character[i][1]!='shu';
});
}
else{
list=get.gainableCharacters(function(info){
return info[1]=='shu';
});
}
var players=game.players.concat(game.dead);
for(var i=0;i<players.length;i++){
list.remove(players[i].name);
list.remove(players[i].name1);
list.remove(players[i].name2);
}
list.remove('zhaoxiang');
player.chooseButton(['扶汉:选择获得一张武将牌上的所有技能',[list.randomGets(5),'character']],true);
'step 1'
if(result.bool){
var name=result.links[0];
player.flashAvatar('twhuashen',name);
game.log(player,'获得了','#y'+get.translation(name),'的所有技能');
player.addSkill(lib.character[name][3])
}
'step 2'
var num=event.num-player.maxHp;
if(num>0) player.gainMaxHp(num);
else player.loseMaxHp(-num);
player.recover();
'step 3'
var card=get.cardPile('meiyingqiang','field');
if(card){
player.gain(card,'gain2','log');
}
},
},
twqueshi:{
trigger:{
global:'gameDrawAfter',
player:'enterGame',
},
forced:true,
locked:false,
filter:function(event,player){
return !player.isDisabled(1);
},
content:function(){
if(!lib.inpile.contains('meiyingqiang')){
lib.inpile.push('meiyingqiang');
player.equip(game.createCard('meiyingqiang','diamond',12));
}
else{
var card=get.cardPile(function(card){
return card.name=='meiyingqiang'&&card!=player.getEquip(1);
},'field');
if(card) player.equip(card);
}
},
},
meiyingqiang:{
equipSkill:true,
trigger:{
player:['loseAfter','gainAfter'],
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter'],
},
filter:function(event,player){
if(player==_status.currentPhase) return false;
var evt=event.getl(player);
if(!evt||!evt.cards2||!evt.cards2.length) return false;
var list=player.getHistory('lose',function(evt){
return evt.cards2&&evt.cards2.length;
});
if(event.name=='lose'){
if(list.indexOf(event)!=0) return false;
}
else{
if(!player.hasHistory('lose',function(evt){
return evt.getParent()==event&&list.indexOf(evt)==0;
})) return false;
}
return _status.connectMode||!lib.config.skip_shan||player.hasSha();
},
direct:true,
content:function(){
if(trigger.delay===false) game.delayx();
player.chooseToUse('梅影枪:是否使用一张【杀】?',function(card){
if(get.name(card)!='sha') return false;
return lib.filter.cardEnabled.apply(this,arguments);
}).set('addCount',false).logSkill='meiyingqiang';
},
},
cuijin:{
trigger:{global:'useCard'},
direct:true,
@ -139,9 +280,30 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
if(player!=game.me&&!player.isOnline()) game.delayx();
var target=trigger.player;
event.target=target;
player.chooseToDiscard('he',get.prompt('cuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1但若其未造成伤害则你对其造成1点伤害。').logSkill=['cuijin',target];
player.chooseToDiscard('he',get.prompt('cuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1但若其未造成伤害则你对其造成1点伤害。').set('ai',function(card){
if(_status.event.goon) return 7-get.value(card);
return 0;
}).set('goon',function(){
var d1=true;
if(trigger.player.hasSkill('jueqing')||trigger.player.hasSkill('gangzhi')) d1=false
for(var target of trigger.targets){
if(!target.mayHaveShan()||trigger.player.hasSkillTag('directHit_ai',true,{
target:target,
card:trigger.card,
},true)){
if(!target.hasSkill('gangzhi')) d1=false;
if(!target.hasSkillTag('filterDamage',null,{
player:trigger.player,
card:trigger.card,
})&&get.attitude(player,target)<0) return true;
}
}
if(d1) return get.damageEffect(trigger.player,player,player)>0;
return false;
}()).logSkill=['cuijin',target];
'step 1'
if(result.bool){
if(typeof trigger.baseDamage!='number') trigger.baseDamage=1;
@ -528,17 +690,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return true;
},
content:function(){
player.addSkill('gx_chongyingshenfu_effect');
player.markAuto('gx_chongyingshenfu_effect',[trigger.card.name]);
},
group:'gx_chongyingshenfu_effect',
subSkill:{
effect:{
trigger:{player:'damageBegin4'},
forced:true,
equipSkill:true,
charlotte:true,
filter:function(event,player){
if(!event.card||!event.card.name||!player.getStorage('gx_chongyingshenfu_effect').contains(event.card.name)) return false;
if(!event.card||!event.card.name||!player.storage.gx_chongyingshenfu_effect||!player.getStorage('gx_chongyingshenfu_effect').contains(event.card.name)) return false;
if(player.hasSkillTag('unequip2')) return false;
if(event.source.hasSkillTag('unequip',false,{
name:event.card.name,
@ -1390,7 +1551,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gx_taijifuchen:'太极拂尘',
gx_taijifuchen_info:'锁定技,当你使用【杀】指定目标后,你令目标角色选择一项:①弃置一张牌,若此牌和【杀】花色相同,则你获得之。②其不可响应此【杀】。',
gx_chongyingshenfu:'冲应神符',
gx_chongyingshenfu_info:'锁定技,当你受到牌造成的伤害后,你令所有同名牌对你造成的伤害-1直到游戏结束。',
gx_chongyingshenfu_info:'锁定技。①当你受到牌造成的伤害后,你记录此牌的名称。②当你受到〖冲应神符①〗记录过的牌造成的伤害时,你令此牌伤害-1。',
tw_dongzhao:'TW董昭',
twmiaolve:'妙略',
twmiaolve_info:'游戏开始时你获得两张【瞒天过海】。当你受到1点伤害后你可选择①获得一张【瞒天过海】并摸一张牌。②获得一张智囊。',
@ -1414,6 +1575,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yuejiu:'乐就',
cuijin:'催进',
cuijin_info:'当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌并获得如下效果:此【杀】的伤害值基数+1且当此【杀】结算结束后若未造成过伤害则你对使用者造成1点伤害。',
tw_zhaoxiang:'TW赵襄',
twfuhan:'扶汉',
twfuhan_info:'限定技。准备阶段开始时时,你可以移去所有"梅影"标记然后从五张未登场的蜀势力武将牌中选择一名获得其所有技能将体力上限数调整为以此技能移去所有“梅影”标记的数量最少为2最多为8并回复1点体力然后从牌堆/弃牌堆/场上获得【梅影枪】。',
twqueshi:'鹊拾',
twqueshi_info:'游戏开始时,你将【梅影枪】置于你的装备区。',
meiyingqiang:'梅影枪',
meiyingqiang_info:'当你于其他角色的回合内第一次失去牌时,你可以使用一张【杀】。',
tw_mobile:'移动版',
tw_yijiang:'一将成名TW',
tw_english:'英文版',

View File

@ -490,7 +490,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.triggername=='phaseJieshuBegin'){
var num=trigger.player.countCards('h');
if(num>0) player.chooseToDiscard(get.prompt('xindanshou',trigger.player),num,'弃置'+get.cnNumber(num)+'张牌并对'+get.translation(trigger.player)+'造成1点伤害','he').set('logSkill',['xindanshou',trigger.player]).set('ai',function(card){
if(get.damageEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0) return 6-get.value(card);
if(get.damageEffect(_status.event.getTrigger().player,_status.event.player,_status.event.player)>0) return Math.max(5.5,8-_status.event.selectTarget)-get.value(card);
return -1;
});
else player.chooseBool(get.prompt('xindanshou',trigger.player),'对'+get.translation(trigger.player)+'造成1点伤害').ai=function(){
@ -506,7 +506,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
});
event.num=num;
player.chooseBool(get.prompt('xindanshou')+'(可摸'+get.cnNumber(num)+'张牌)',get.translation('xindanshou_info'));
player.chooseBool(get.prompt('xindanshou')+'(可摸'+get.cnNumber(num)+'张牌)',get.translation('xindanshou_info')).set('ai',function(){
return _status.event.choice;
}).set('choice',function(){
if(player.isPhaseUsing()){
if(player.countCards('h',function(card){
return ['basic','trick'].contains(get.type(card,'trick'))&&player.canUse(card,player,null,true)&&get.effect(player,card,player)>0&&player.getUseValue(card,null,true)>0;
})) return false;
return true;
}
if(num>2) return true;
var card=trigger.card;
if(get.tag(card,'damage')&&player.hp<=trigger.getParent().baseDamage&&(!get.tag(card,'respondShan')||!player.hasShan())&&(!get.tag(card,'respondSha')||!player.hasSha())) return true;
var source=_status.currentPhase,todis=(source.countCards('h')-Math.max(0,source.needsToDiscard()));
if(todis<=Math.max(Math.min(2+(source.hp<=1?1:0),player.countCards('he',function(card){
return get.value(card,player)<Math.max(5.5,8-todis)
})),player.countCards('he',function(card){
return get.value(card,player)<=0;
}))&&get.damageEffect(source,player,player)>0) return false;
if(!source.isPhaseUsing()||get.attitude(player,source)>0) return true;
if(card.name=='sha'&&!source.getCardUsable('sha')) return true;
return Math.random()<num/3;
}());
}
'step 1'
if(result.bool){
@ -523,6 +544,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
subSkill:{as:{sub:true}},
ai:{
threaten:0.6,
effect:{
target:function(card,player,target,current){
if(typeof card!='object'||target.hasSkill('xindanshou_as')||!['basic','trick'].contains(get.type(card,'trick'))) return;
var num=0;
game.countPlayer2(function(current){
var history=current.getHistory('useCard');
for(var j=0;j<history.length;j++){
if(['basic','trick'].contains(get.type(history[j].card,'trick'))&&history[j].targets&&history[j].targets.contains(player)) num++;
}
});
if(player==target&&current>0) return [1.1,num];
return [0.9,num];
},
},
},
},
xinbenxi:{
group:['xinbenxi_summer','xinbenxi_damage'],

View File

@ -667,7 +667,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'chexuan_lose',
subfrequent:['lose'],
ai:{
order:0.4,
order:6,
result:{
player:1,
},

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.110.9.2.2',
'v1.9.110.9.2.3',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -4418,6 +4418,11 @@ window.noname_asset_list=[
'image/character/jiachong.jpg',
'image/character/wuban.jpg',
'image/character/yuejiu.jpg',
'image/character/gz_xiahouba.jpg',
'image/character/ol_lusu.jpg',
'image/character/re_jiaxu.jpg',
'image/character/tw_zhaoxiang.jpg',
'image/character/yuejiu.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -32752,7 +32752,7 @@
else{
skills2=player.getSkills(true,true,false);
}
skills2=game.filterSkills(skills2.concat(lib.skill.global),player,player.getSkills('e'));
skills2=game.filterSkills(skills2.concat(lib.skill.global),player,player.getSkills('e').concat(lib.skill.global));
event._skillChoice=[];
game.expandSkills(skills2);
for(i=0;i<skills2.length;i++){
@ -52922,30 +52922,34 @@
sgnAttitude:function(){
return get.sgn(get.attitude.apply(this,arguments));
},
useful:function(card){
useful:function(card,player){
if(get.position(card)=='j') return -1;
if(get.position(card)=='e') return get.equipValue(card);
if(card._modUseful){
return card._modUseful();
}
var i=0;
if(_status.event.player){
i=_status.event.player.getCards('h',card.name).indexOf(card);
if(!player) player=_status.event.player;
if(player){
i=player.getCards('h',card.name).indexOf(card);
if(i<0) i=0;
}
var aii=get.info(card).ai;
var useful;
if(aii&&aii.useful) useful=aii.useful;
else if(aii&&aii.basic) useful=aii.basic.useful;
if(useful==undefined) return -1;
if(typeof useful=='function'){
return useful(card,i);
var result;
if(useful==undefined) result=-1;
else if(typeof useful=='function'){
result=useful(card,i);
}
if(typeof useful=='number') return useful;
if(i<useful.length){
return useful[i];
else if(typeof useful=='number') result=useful;
else if(i<useful.length){
result=useful[i];
}
return useful[useful.length-1];
else result=useful[useful.length-1];
result=game.checkMod(player,card,result,'aiUseful',player);
return result;
},
unuseful:function(card){
return -get.useful(card);
@ -52976,7 +52980,7 @@
if(player==undefined||get.itemtype(player)!='player') player=_status.event.player;
var geti=function(){
var num=0,i;
var cards=player.getCards('h',card.name);
var cards=player.getCards('hs',card.name);
if(cards.contains(card)){
return cards.indexOf(card);
}

View File

@ -1,9 +1,9 @@
window.noname_update={
version:'1.9.110.9.2.2',
update:'1.9.110.9.2.1',
version:'1.9.110.9.2.3',
update:'1.9.110.9.2.2',
changeLog:[
'乐就',
'联机优化',
'界鲁肃、界贾诩',
'海外服赵襄',
'bug修复',
],
files:[
@ -14,7 +14,7 @@ window.noname_update={
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
//'card/standard.js',
'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
@ -26,23 +26,23 @@ window.noname_update={
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
//'character/mobile.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
//'character/old.js',
//'character/ow.js',
'character/rank.js',
//'character/refresh.js',
//'character/shenhua.js',
//'character/sp.js',
'character/refresh.js',
'character/shenhua.js',
'character/sp.js',
//'character/sp2.js',
'character/tw.js',
//'character/standard.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,12 +51,12 @@ window.noname_update={
//'layout/nova/layout.css',
//'mode/boss.js',
//'mode/brawl.js',
//'mode/chess.js',
'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
//'mode/guozhan.js',
'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

BIN
image/character/ol_lusu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

View File

@ -2357,6 +2357,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(lib.character[name][1]=='qun') return 3;
if(lib.character[name][1]=='key') return 4;
};
game.data.character=game.data.character.filter(function(i){
return Array.isArray(lib.character[i]);
})
game.data.character.sort(function(a,b){
var del=groupSort(a)-groupSort(b);
if(del!=0) return del;

View File

@ -394,7 +394,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_wujing:['male','wu',4,['donggui','fengyang'],['gzskin']],
gz_yanbaihu:['male','qun',4,['gzzhidao','gzyjili'],['gzskin']],
gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun']],
gz_xiahouba:['male','shu',4,['gzbaolie'],['doublegroup:shu:wei']],
gz_xiahouba:['male','shu',4,['gzbaolie'],['doublegroup:shu:wei','gzskin']],
gz_panjun:['male','wu',3,['gzguanwei','xinfu_gongqing'],['doublegroup:wu:shu']],
gz_huangzu:['male','qun',4,['gzwangong']],
gz_zhugeke:['male','wu',3,['aocai','gzduwu']],

View File

@ -1072,6 +1072,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
position:'e',
check:function(){return 1},
ai:{
order:0.5,
respondShan:true,
skillTagFilter:function(player){
if(!player.countCards('e')) return false;