Merge branch 'libccy:PR-Branch' into PR-Branch

This commit is contained in:
157 2023-10-27 20:42:52 +08:00 committed by GitHub
commit f3ff8d8554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 118 deletions

View File

@ -41,16 +41,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(player.getStorage('clanbaichu').contains(event.card.name)) return true; if(player.getStorage('clanbaichu').contains(event.card.name)) return true;
if(get.suit(event.card)=='none') return false; if(get.suit(event.card)=='none') return false;
var str=(get.suit(event.card)+''+get.type2(event.card)); var str=(get.suit(event.card)+'+'+get.type2(event.card));
if(!player.getStorage('clanbaichu').contains(str)) return true; if(!player.getStorage('clanbaichu').contains(str)) return true;
return !player.hasSkill('qice'); return !player.hasSkill('qice');
}, },
forced:true, forced:true,
content:function(){ content:function(){
'step 0' 'step 0'
if(player.getStorage('clanbaichu').contains(trigger.card.name)){
event.draw=true;
}
if(get.suit(trigger.card)!='none'){ if(get.suit(trigger.card)!='none'){
var str=(get.suit(trigger.card)+'+'+get.type2(trigger.card)); var str=(get.suit(trigger.card)+'+'+get.type2(trigger.card));
if(player.getStorage('clanbaichu').contains(str)){ if(player.getStorage('clanbaichu').contains(str)){
@ -68,6 +65,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var dialog=['请选择【百出】记录的普通锦囊牌牌名',[list,'vcard']]; var dialog=['请选择【百出】记录的普通锦囊牌牌名',[list,'vcard']];
player.chooseButton(dialog,true).set('ai',function(button){ player.chooseButton(dialog,true).set('ai',function(button){
var player=_status.event.player,name=button.link[2]; var player=_status.event.player,name=button.link[2];
if(name==_status.event.getTrigger().card.name) return 1919810;
if(name=='wuxie') return 114514; if(name=='wuxie') return 114514;
return get.effect(player,{name:name},player,player)*(1+player.countCards('hs',name)); return get.effect(player,{name:name},player,player)*(1+player.countCards('hs',name));
}); });
@ -85,7 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx(); game.delayx();
} }
'step 2' 'step 2'
if(event.draw) player.chooseDrawRecover(true); if(player.getStorage('clanbaichu').contains(trigger.card.name)) player.chooseDrawRecover(true);
}, },
intro:{ intro:{
markcount:()=>0, markcount:()=>0,
@ -233,7 +231,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){ if(result.bool){
var card={ var card={
name:result.links[0][2], name:result.links[0][2],
nature:result.links[0][2], nature:result.links[0][3],
}; };
player.useCard(card,target,false); player.useCard(card,target,false);
} }

View File

@ -145,7 +145,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).join('、')}`, }).join('、')}`,
}, },
$createButton:function(item,type,position,noclick,node){ $createButton:function(item,type,position,noclick,node){
node=ui.create.identityCard(item,position,null,noclick); node=ui.create.identityCard(item,position,noclick);
node.link=item; node.link=item;
return node; return node;
}, },
@ -176,7 +176,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
[list,function(item,type,position,noclick,node){ [list,function(item,type,position,noclick,node){
return lib.skill.jxlianpo.$createButton(item,type,position,noclick,node); return lib.skill.jxlianpo.$createButton(item,type,position,noclick,node);
}], }],
]) ],true);
'step 1' 'step 1'
var choice=result.links[0],mark=`jxlianpo_mark_${choice}`; var choice=result.links[0],mark=`jxlianpo_mark_${choice}`;
player.when({global:'roundStart'}) player.when({global:'roundStart'})
@ -192,13 +192,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}); });
player.addMark(mark,1,false); player.addMark(mark,1,false);
var videoId=lib.status.videoId++; event.videoId=lib.status.videoId++;
var createDialog=function(player,identity,id){ var createDialog=function(player,identity,id){
var dialog=ui.create.dialog(`${get.translation(player)}展示了“${get.translation(identity+'2')}”的身份牌<br>`,'forcebutton'); var dialog=ui.create.dialog(`${get.translation(player)}展示了“${get.translation(identity+'2')}”的身份牌<br>`,'forcebutton');
dialog.videoId=id; dialog.videoId=id;
ui.create.spinningIdentityCard(identity,dialog); ui.create.spinningIdentityCard(identity,dialog);
}; };
game.broadcastAll(createDialog,player,choice,videoId); game.broadcastAll(createDialog,player,choice,event.videoId);
var color=''; var color='';
if(choice=='zhong') color='#y'; if(choice=='zhong') color='#y';
else if(choice=='fan') color='#g'; else if(choice=='fan') color='#g';
@ -206,7 +206,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.log(player,'展示了',`${color}${get.translation(choice+'2')}`,'的身份牌'); game.log(player,'展示了',`${color}${get.translation(choice+'2')}`,'的身份牌');
game.delay(3); game.delay(3);
'step 2' 'step 2'
game.broadcastAll('closeDialog',videoId); game.broadcastAll('closeDialog',event.videoId);
} }
}, },
global:{ global:{

View File

@ -32,7 +32,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
baoxin:['male','qun',4,['mutao','yimou'],['character:tw_baoxin','die_audio:tw_baoxin']], baoxin:['male','qun',4,['mutao','yimou'],['character:tw_baoxin','die_audio:tw_baoxin']],
jiangji:['male','wei',3,['twjichou','jilun'],['character:tw_jiangji','die_audio:tw_jiangji']], jiangji:['male','wei',3,['twjichou','jilun'],['character:tw_jiangji','die_audio:tw_jiangji']],
liwei:['male','shu',4,['jiaohua'],['character:tw_liwei','die:tw_liwei']], liwei:['male','shu',4,['jiaohua'],['character:tw_liwei','die:tw_liwei']],
laimin:['male','shu',3,['laishou','luanqun']], laimin:['male','shu',3,['laishou','luanqun'],['unseen']],
yj_zhoubuyi:['male','wei',3,['mbhuiyao','mbquesong']], yj_zhoubuyi:['male','wei',3,['mbhuiyao','mbquesong']],
xin_guozhao:['female','wei',3,['yichong','wufei']], xin_guozhao:['female','wei',3,['yichong','wufei']],
xin_zhangyi:['male','shu',4,['xinwurong','shizhi']], xin_zhangyi:['male','shu',4,['xinwurong','shizhi']],
@ -970,95 +970,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2, audio:2,
enable:'phaseUse', enable:'phaseUse',
usable:1, usable:1,
// filterTarget:lib.filter.notMe, filterTarget:lib.filter.notMe,
content:function(){ content:function(){
'step 0'
player.damage('nosource'); player.damage('nosource');
'step 1' target.damage('unreal');
if(game.countPlayer()<2) event.finish();
if(game.countPlayer()==2) event._result={bool:true,targets:[game.findPlayer(i=>i!=player),player]};
else player.chooseTarget(`慧夭:请选择两名角色`,`令不为你的第一名角色视为对第二名角色造成过1点伤害。`,(card,player,target)=>{
if(!ui.selected.targets.length) return player!=target;
return true;
},2,true).set('multitarget',true).set('targetprompt',['伤害来源','受伤角色']).set('ai',target=>{
return target==get.event('aiTargets')[ui.selected.targets.length]?10:0;
}).set('aiTargets',lib.skill.mbhuiyao.getUnrealDamageTargets(player,[game.filterPlayer(i=>i!=player),game.filterPlayer()],true));
'step 2'
if(result.bool){
var targets=result.targets;
player.line2(targets,'green');
game.delaye();
targets[1].damage(targets[0],'unreal');
}
},
getUnrealDamageTargets:(player,lists,forced)=>{
const targets=[null,null];
let sourceList,targetList;
if(lists.length==2&&lists.every(l=>Array.isArray(l))){
sourceList=lists[0]; targetList=lists[1];
}
else{
sourceList=lists.slice(); targetList=lists.slice();
}
const list=targetList.map(current=>{
const _hp=current.hp,_maxhp=current.maxHp;
current.hp=100; current.maxHp=100;
const att=-get.sgnAttitude(player,current);
let val=get.damageEffect(current,player,current)*att;
current.getSkills(null,false,false).forEach(skill=>{
const info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
const eff=100/val+15;
current.hp=_hp; current.maxHp=_maxhp;
return [current,eff];
}).sort((a,b)=>b[1]-a[1])[0];
if(list[1]<0&&!forced) return targets;
const targetx=list[0];
targets[1]=targetx;
const list2=sourceList.filter(i=>i!=targetx).map(current=>{
const _hp=targetx.hp,_maxhp=targetx.maxHp;
targetx.hp=100; targetx.maxHp=100;
const att=-get.sgnAttitude(player,current);
const eff=get.damageEffect(targetx,current,current)*att;
targetx.hp=_hp; targetx.maxHp=_maxhp;
return [current,eff];
}).sort((a,b)=>b[1]-a[1])[0];
if(!list2) return targets;
targets[0]=list2[0];
return targets;
}, },
ai:{ ai:{
order:6, order:6,
result:{ result:{
player:function(player){ target:function(player,target){
if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=1) return 0; if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<1) return 0;
var limit=25; var _hp=target.hp,_maxhp=target.maxHp;
var quesong=player.hasSkill('mbquesong')&&!player.getStat().damaged; target.hp=10; target.maxHp=10;
if(quesong){ var att=-get.sgnAttitude(player,target);
limit-=7.5; var val=get.damageEffect(target,player,target)*att;
target.getSkills(null,false,false).forEach(skill=>{
var info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
var eff=100/val;
target.hp=_hp; target.maxHp=_maxhp;
var limit=17.5;
if(player.hasSkill('mbquesong')){
if(!player.getStat().damaged) limit+=7.5;
} }
if(quesong&&game.hasPlayer(target=>{ if(eff<limit) return 0;
var att=get.attitude(player,target); return eff/30;
if(att<0) return false;
return att*Math.sqrt(Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)))>=10||target.getHp()<=2;
})) return 1;
if(!quesong&&game.hasPlayer(target=>{
if(target==player) return false;
var _hp=target.hp,_maxhp=target.maxHp;
target.hp=100; target.maxHp=100;
var att=-get.sgnAttitude(player,target);
var val=get.damageEffect(target,player,target)*att;
target.getSkills(null,false,false).forEach(skill=>{
var info=get.info(skill);
if(info&&info.ai&&(info.ai.maixie||info.ai.maixie_hp||info.ai.maixie_defend)) val=Math[val>0?'max':'min'](val>0?0.1:-0.1,val+2*att);
});
var eff=100/val;
target.hp=_hp; target.maxHp=_maxhp;
if(eff<limit) return false;
return true;
})) return 1;
return 0;
} }
} }
}, },
@ -1075,7 +1012,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseTarget(get.prompt2('mbquesong')).set('ai',target=>{ player.chooseTarget(get.prompt2('mbquesong')).set('ai',target=>{
var player=_status.event.player; var player=_status.event.player;
if(get.attitude(player,target)<=0) return 0; if(get.attitude(player,target)<=0) return 0;
var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp(); var len=[1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0);hp=target.getHp();
return len+target.isTurnedOver()*2+1.5*Math.min(4,target.getDamagedHp())/(hp+1); return len+target.isTurnedOver()*2+1.5*Math.min(4,target.getDamagedHp())/(hp+1);
}); });
'step 1' 'step 1'
@ -1083,17 +1020,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target=result.targets[0]; var target=result.targets[0];
event.target=target; event.target=target;
player.logSkill('mbquesong',target); player.logSkill('mbquesong',target);
var len=Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0)),hp=target.getHp(); var len=[1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0);hp=target.getHp();
if(hp==0||target.countCards('h')<hp) event._result={bool:false}; var forced=false;
if(len==0) forced=true;
if(hp==0||target.countCards('h')<hp){
if(forced) event.finish();
else event._result={bool:false};
}
else{ else{
var str=`是否弃置${get.cnNumber(hp)}张手牌并回复1点体力或点击“取消”摸${get.cnNumber(len)}张牌并复原武将牌。`; var str=`${forced?'请':'是否'}弃置${get.cnNumber(hp)}张手牌并回复1点体力${forced?'':'?或点击“取消”摸'+get.cnNumber(len)+'张牌并复原武将牌'}`;
target.chooseToDiscard(get.translation(player)+'对你发动了【雀颂】',str,'h',hp).set('ai',card=>{ target.chooseToDiscard(get.translation(player)+'对你发动了【雀颂】',str,forced,'h',hp).set('ai',card=>{
if(!get.event('goon')) return 0; if(!_status.event.goon) return 0;
return 6-get.value(card); return 6-get.value(card);
}).set('goon',function(){ }).set('goon',function(){
var _hp=hp+target.isTurnedOver()*1.5; var _hp=hp+target.isTurnedOver()*1.5;
if(_hp+player.countCards('hs',card=>get.tag(card,'recover'))<=2-len/4) return true; if(forced||_hp+player.countCards('hs',card=>get.tag(card,'recover'))<=2-len/4) return true;
return len<=_hp; return len>_hp;
}()); }());
} }
} }
@ -1104,12 +1046,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish(); event.finish();
} }
else{ else{
target.draw(Math.max(1,[1,2,3,4].reduce((p,c)=>p+target.countEmptySlot(c),0))); target.draw([1,2,3,4,5].reduce((p,c)=>p+target.countEmptySlot(c),0));
} }
'step 3' 'step 3'
target.link(false); player.link(false);
'step 4' 'step 4'
target.turnOver(false); player.turnOver(false);
}, },
ai:{ ai:{
expose:0.2, expose:0.2,
@ -11287,11 +11229,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseTarget(get.prompt('zhongzuo'),'令一名角色摸两张牌。若其已受伤,则你摸一张牌。').set('ai',function(target){ player.chooseTarget(get.prompt('zhongzuo'),'令一名角色摸两张牌。若其已受伤,则你摸一张牌。').set('ai',function(target){
if(target.hasSkillTag('nogain')) return target.isDamaged()?0:1; if(target.hasSkillTag('nogain')&&target!=_status.currentPhase) return target.isDamaged()?0:1;
let att=get.attitude(_status.event.player,target); var att=get.attitude(_status.event.player,target);
if(att<=0) return 0; if(target.isDamaged()) att=att*1.2;
if(target.isDamaged()) return 1+att/5; return att;
return att/5;
}); });
'step 1' 'step 1'
if(result.bool){ if(result.bool){
@ -12605,7 +12546,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 3' 'step 3'
if(result.bool){ if(result.bool){
trigger.player.gain(event.card,'give',player,'bySelf'); trigger.player.gain(event.card,'give',player,'bySelf');
player.chooseBool('是否对'+get.translation(trigger.player)+'造成1点伤害?').ai=function(){ player.chooseBool('是否对'+get.translation(trigger.player)+'造成点伤害?').ai=function(){
return get.damageEffect(trigger.player,player,player)>0 return get.damageEffect(trigger.player,player,player)>0
}; };
} }
@ -12951,7 +12892,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.ingame=game.hasPlayer(function(current){ event.ingame=game.hasPlayer(function(current){
return ['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name2); return ['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name)||['re_xushu','xin_xushu','xushu','dc_xushu'].contains(current.name2);
})?true:false; })?true:false;
var prompt='请选择一名角色,令其回复1点体力并摸一张牌'; var prompt='请选择一名角色,令其回复点体力并摸一张牌';
prompt+=event.ingame?',然后你摸一张牌。':'。'; prompt+=event.ingame?',然后你摸一张牌。':'。';
player.chooseTarget(prompt).set('ai',function(target){ player.chooseTarget(prompt).set('ai',function(target){
var player=_status.event.player; var player=_status.event.player;
@ -15510,9 +15451,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yj_zhoubuyi:'☆周不疑', yj_zhoubuyi:'☆周不疑',
yj_zhoubuyi_prefix:'☆', yj_zhoubuyi_prefix:'☆',
mbhuiyao:'慧夭', mbhuiyao:'慧夭',
mbhuiyao_info:'出牌阶段限一次。你可以受到1点无来源伤害然后你选择一名其他角色,令其视为对一名角色造成过1点伤害。', mbhuiyao_info:'出牌阶段限一次。你可以受到1点无来源伤害视为对一名其他角色造成过1点伤害。',
mbquesong:'雀颂', mbquesong:'雀颂',
mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸等同于其装备区中非宝物栏中空栏的数量的牌并复原武将牌(至少摸一张牌)2.弃置等同于其体力值的手牌并回复1点体力。', mbquesong_info:'一名角色的结束阶段若你于本回合受到过伤害你可以令一名角色选择一项1.摸等同于其装备区中空栏的数量的牌并复原武将牌2.弃置等同于其体力值的手牌并回复1点体力。',
xin_yuanshao:'手杀界袁绍', xin_yuanshao:'手杀界袁绍',
xin_yuanshao_prefix:'手杀界', xin_yuanshao_prefix:'手杀界',
re_baosanniang:'手杀鲍三娘', re_baosanniang:'手杀鲍三娘',

View File

@ -38,8 +38,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']], sb_liubiao:['male','qun',3,['sbzishou','sbzongshi']],
sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']], sb_zhurong:['female','shu',4,['sblieren','sbjuxiang']],
sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']], sb_menghuo:['male','shu',4,['sbhuoshou','sbzaiqi']],
sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang']], sb_yl_luzhi:['male','qun',3,['nzry_mingren','sbzhenliang'],['unseen']],
sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan']], sb_xiaoqiao:['female','wu',3,['sbtianxiang','xinhongyan'],['unseen']],
}, },
characterSort:{ characterSort:{
sb:{ sb:{

View File

@ -43336,8 +43336,8 @@
}, },
create:{ create:{
//创建身份牌实例 //创建身份牌实例
identityCard:function(identity,position,info,noclick){ identityCard:function(identity,position,noclick){
const card=ui.create.card(position,info,noclick); const card=ui.create.card(position,'noclick',noclick);
card.classList.add('button'); card.classList.add('button');
card._customintro=uiintro=>uiintro.add(`${get.translation(`${identity}${2}`)}的身份牌`); card._customintro=uiintro=>uiintro.add(`${get.translation(`${identity}${2}`)}的身份牌`);
const fileName=`image/card/identity_${identity}.jpg`; const fileName=`image/card/identity_${identity}.jpg`;