Merge branch 'libccy:PR-Branch' into PR-Branch
This commit is contained in:
commit
c3fc7ae7e6
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -157,11 +157,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
if(target.hasSkillTag('useShan',null,event)) return true;
|
||||
if(target.isLinked()&&game.hasNature(event.card)&&get.attitude(target,player._trueMe||player)>0) return false;
|
||||
if(event.baseDamage+event.extraDamage<=0&&!game.hasNature(event.card,'ice')) return false;
|
||||
if(target.hasSkillTag('freeShan',false,event,true)) return true;
|
||||
if(event.shanRequired>1&&target.mayHaveShan(target,'use',null,'count')<event.shanRequired-(event.shanIgnored||0)) return false;
|
||||
if(event.baseDamage+event.extraDamage>=target.hp+
|
||||
((player.hasSkillTag('jueqing',false,target)||target.hasSkill('gangzhi'))?target.hujia:0)) return true;
|
||||
if(!game.hasNature(event.card,'ice')&&get.damageEffect(target,player,target,get.nature(event.card))>=0) return false;
|
||||
if(event.shanRequired>1&&target.mayHaveShan(target,'use',null,'count')<event.shanRequired-(event.shanIgnored||0)) return false;
|
||||
return true;
|
||||
})());
|
||||
//next.autochoose=lib.filter.autoRespondShan;
|
||||
|
@ -2911,14 +2910,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
audio:true,
|
||||
check:function(event,player){
|
||||
if(event&&(event.ai||event.ai1)){
|
||||
var ai=event.ai||event.ai1;
|
||||
if(!event) return true;
|
||||
if(event.ai){
|
||||
var ai=event.ai;
|
||||
var tmp=_status.event;
|
||||
_status.event=event;
|
||||
var result=ai({name:'shan'},_status.event.player,event);
|
||||
_status.event=tmp;
|
||||
return result>0;
|
||||
}
|
||||
let evt=event.getParent();
|
||||
if(player.hasSkillTag('noShan',null,evt)) return false;
|
||||
if(!evt||!evt.card||!evt.player||player.hasSkillTag('useShan',null,evt)) return true;
|
||||
if(evt.card&&evt.player&&player.isLinked()&&game.hasNature(evt.card)&&get.attitude(player,evt.player._trueMe||evt.player)>0) return false;
|
||||
return true;
|
||||
},
|
||||
content:function(){
|
||||
|
@ -2943,8 +2947,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
if(!arg||!arg.player) return true;
|
||||
if(arg.player.hasSkillTag('unequip',false,{
|
||||
target:player
|
||||
})||arg.player.hasSkillTag('unequip_ai',false,{
|
||||
target:player
|
||||
})) return false;
|
||||
return true;
|
||||
},
|
||||
|
|
|
@ -7228,11 +7228,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
delay:false,
|
||||
check:function(card){
|
||||
var player=_status.event.player;
|
||||
if(!player.storage.jueyong||player.storage.jueyong[0].length<Math.max(1,player.getDamagedHp())||!player.storage.jueyong[0].filter(function(card){
|
||||
return get.effect(player,card,player.storage.jueyong[1][player.storage.jueyong[0].indexOf(card)],player)<0;
|
||||
}).length||(player.hp<=1&&!player.storage.jueyong[0].filter(function(card){
|
||||
if(!player.storage.jueyong||!player.storage.jueyong[0].length||player.hp<=1&&!player.storage.jueyong[0].some(function(card){
|
||||
return get.tag(card,'damage')>0;
|
||||
}).length)) return -1;
|
||||
})||!player.storage.jueyong[0].some(function(card){
|
||||
return get.effect(player,card,player.storage.jueyong[1][player.storage.jueyong[0].indexOf(card)],player)<0;
|
||||
})) return -1;
|
||||
return 20-get.value(card);
|
||||
},
|
||||
content:function(){
|
||||
|
|
|
@ -137,6 +137,7 @@ window.noname_character_rank={
|
|||
'xia_yuzhenzi',
|
||||
'dc_simashi',
|
||||
'dc_sb_simayi',
|
||||
'caofang',
|
||||
],
|
||||
a:[
|
||||
'star_caoren',
|
||||
|
@ -2179,6 +2180,7 @@ window.noname_character_rank={
|
|||
'xia_shitao',
|
||||
'bailingyun',
|
||||
'dc_sb_simayi',
|
||||
'caofang',
|
||||
],
|
||||
rare:[
|
||||
're_wangyi',
|
||||
|
|
|
@ -13572,7 +13572,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
rejianxiong_old:{
|
||||
audio:2,
|
||||
audio:'rejianxiong',
|
||||
trigger:{player:'damageEnd'},
|
||||
direct:true,
|
||||
content:function(){
|
||||
|
@ -15581,6 +15581,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
re_lidian_prefix:'界',
|
||||
re_xushu:'界徐庶',
|
||||
re_xushu_prefix:'界',
|
||||
rejianxiong_old:'奸雄',
|
||||
rejianxiong_old_info:'当你受到伤害后,你可以摸一张牌或获得对你造成伤害的牌。',
|
||||
|
||||
refresh_standard:'界限突破·标',
|
||||
refresh_feng:'界限突破·风',
|
||||
|
|
|
@ -985,7 +985,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dialog(){
|
||||
var dialog=ui.create.dialog('放逐:请选择你要执行的一项','hidden');
|
||||
dialog.add([[
|
||||
[1,'移去1个“颂”标记,令一名其他角色于手牌中只能使用装备牌直到其回合结束'],
|
||||
[1,'移去1个“颂”标记,令一名其他角色于手牌中只能使用基本牌直到其回合结束'],
|
||||
[2,'移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束'],
|
||||
[3,'移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束'],
|
||||
[4,'移去3个“颂”标记,令一名其他角色将武将牌翻面'],
|
||||
|
|
|
@ -5441,8 +5441,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(!arg||!arg.player) return true;
|
||||
if(arg.player.hasSkillTag('unequip',false,{
|
||||
target:player
|
||||
})||arg.player.hasSkillTag('unequip_ai',false,{
|
||||
target:player
|
||||
})) return false;
|
||||
return true;
|
||||
},
|
||||
|
|
|
@ -3038,6 +3038,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
olcangxin:{
|
||||
audio:2,
|
||||
trigger:{player:'damageBegin4'},
|
||||
filter(event,player){
|
||||
return game.getGlobalHistory('everything',evt=>{
|
||||
return evt.name=='damage'&&evt.player==player;
|
||||
},event).indexOf(event)==0;
|
||||
},
|
||||
checkx:function(event,player){
|
||||
var target=event.source;
|
||||
return get.damageEffect(player,target,target)<=0;
|
||||
|
@ -3046,17 +3051,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:function(){
|
||||
'step 0'
|
||||
var cards=get.bottomCards(3,true);
|
||||
player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则防止此伤害',cards],[1,cards.length],true).set('ai',function(button){
|
||||
player.chooseButton(['###藏心:请选择要弃置的牌###若以此法弃置了红桃牌,则减少弃置红桃牌数的伤害',cards],[1,cards.length],true).set('ai',function(button){
|
||||
if(!_status.event.bool&&get.suit(button.link,false)=='heart') return 0;
|
||||
if(get.suit(button.link,false)!='heart') return 1;
|
||||
if(!ui.selected.buttons.some(but=>get.suit(but.link,false)=='heart')) return 1;
|
||||
const num=get.event().getTrigger().num;
|
||||
if(num>ui.selected.buttons.filter(but=>get.suit(but.link,false)=='heart').length) return 1;
|
||||
return 0;
|
||||
}).set('bool',lib.skill.olcangxin.checkx(trigger,player));
|
||||
'step 1'
|
||||
if(result.bool){
|
||||
player.$throw(result.links,1000);
|
||||
game.cardsDiscard(result.links);
|
||||
if(result.links.some(card=>get.suit(card,false)=='heart')) trigger.cancel();
|
||||
const num=result.links.filter(card=>get.suit(card,false)=='heart').length;
|
||||
if(num) trigger.num-=Math.min(trigger.num,num);
|
||||
}
|
||||
else event.finish();
|
||||
'step 2'
|
||||
|
@ -20121,8 +20128,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(!arg||!arg.player) return true;
|
||||
if(arg.player.hasSkillTag('unequip',false,{
|
||||
target:player
|
||||
})||arg.player.hasSkillTag('unequip_ai',false,{
|
||||
target:player
|
||||
})) return false;
|
||||
return true;
|
||||
},
|
||||
|
@ -27676,7 +27681,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ol_luyusheng:'OL陆郁生',
|
||||
ol_luyusheng_prefix:'OL',
|
||||
olcangxin:'藏心',
|
||||
olcangxin_info:'锁定技。①当你受到伤害时,你观看牌堆底的三张牌并弃置其中任意张牌,若你以此法弃置了红桃牌,则防止此伤害。②摸牌阶段开始时,你展示牌堆底的三张牌,然后摸X张牌(X为其中红桃牌的数量)。',
|
||||
olcangxin_info:'锁定技。①当你每回合第一次受到伤害时,你观看牌堆底的三张牌并弃置其中任意张牌,然后此伤害-X。②摸牌阶段开始时,你展示牌堆底的三张牌,然后摸X张牌(X为其中红桃牌的数量)。',
|
||||
olrunwei:'润微',
|
||||
olrunwei_info:'其他角色的弃牌阶段开始时,若其已受伤,则你可以选择一项:①令其弃置一张牌,其本回合手牌上限+1;②令其摸一张牌,其本回合手牌上限-1。',
|
||||
caoxi:'曹羲',
|
||||
|
|
|
@ -136,12 +136,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{
|
||||
order:9,
|
||||
result:{
|
||||
player(player,target){
|
||||
let res=2*get.effect(player,{name:'draw',player,player});
|
||||
if(player!==target) res+=get.effect(player,{name:'losehp'},player,player);
|
||||
return res;
|
||||
},
|
||||
target(player,target){
|
||||
if(player.getHp()+player.countCards('hs',card=>player.canSaveCard(card,player))<=1) return 0;
|
||||
const num=get.sgn(get.attitude(player,target));
|
||||
if(num*get.damageEffect(target,player,player)>0) return num*get.damageEffect(target,player,player);
|
||||
if(target==player) return 0.00001;
|
||||
return 0;
|
||||
return get.damageEffect(target,player,target);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -292,7 +293,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
//星袁绍
|
||||
starxiaoyan:{
|
||||
|
|
|
@ -693,32 +693,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
twxiayong:{
|
||||
audio:2,
|
||||
audioname:['tw_yanliang'],
|
||||
trigger:{global:'damageBegin1'},
|
||||
filter(event,player){
|
||||
if(event.getParent().type!='card'||event.card.name!='juedou'||!event.player.isIn()) return false;
|
||||
const evt=game.getGlobalHistory('useCard',evt=>evt.card==event.card)[0];
|
||||
if(evt&&evt.targets&&(event.player!=player||player.countCards('h'))){
|
||||
if(evt.player==player){
|
||||
return evt.targets.includes(event.player)&&event.player!=player;
|
||||
}
|
||||
return evt.targets.includes(player)&&evt.player!=player;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
forced:true,
|
||||
logTarget:'player',
|
||||
async content(event,trigger,player){
|
||||
if(trigger.player===player){
|
||||
const cards=player.getCards('h',card=>{
|
||||
return lib.filter.cardDiscardable(card,player,'twxiayong');
|
||||
});
|
||||
if(cards.length>0) player.discard(cards.randomGet());
|
||||
}
|
||||
else{
|
||||
trigger.increase('num');
|
||||
}
|
||||
locked:true,
|
||||
group:'twxiayong_effect',
|
||||
subSkill:{
|
||||
effect:{
|
||||
trigger:{global:'damageBegin1'},
|
||||
filter(event,player){
|
||||
if(event.getParent().type!='card'||event.card.name!='juedou'||!event.player.isIn()) return false;
|
||||
const evt=game.getGlobalHistory('useCard',evt=>evt.card==event.card)[0];
|
||||
if(evt&&evt.targets&&(event.player!=player||player.countCards('h'))){
|
||||
if(evt.player==player){
|
||||
return evt.targets.includes(event.player)&&event.player!=player;
|
||||
}
|
||||
return evt.targets.includes(player)&&evt.player!=player;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
forced:true,
|
||||
popup:false,
|
||||
async content(event,trigger,player){
|
||||
player.logSkill('twxiayong'+(trigger.player===player?'1':'2'),trigger.player);
|
||||
if(trigger.player===player){
|
||||
const cards=player.getCards('h',card=>{
|
||||
return lib.filter.cardDiscardable(card,player,'twxiayong');
|
||||
});
|
||||
if(cards.length>0) player.discard(cards.randomGet());
|
||||
}
|
||||
else{
|
||||
trigger.increase('num');
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
twxiayong1:{
|
||||
audio:true,
|
||||
audioname:['tw_yanliang'],
|
||||
sourceSkill:'twxiayong',
|
||||
},
|
||||
twxiayong2:{
|
||||
inherit:'twxiayong1',
|
||||
},
|
||||
//袁谭
|
||||
twqiaosi:{
|
||||
audio:2,
|
||||
|
|
|
@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'xianding',
|
||||
connect:true,
|
||||
character:{
|
||||
caofang:['male','wei',4,['dczhimin','dcjujian'],['zhu']],
|
||||
dc_sb_simayi:['male','wei',3,['dcsbquanmou','dcsbpingliao']],
|
||||
chendong:['male','wu',4,['dcduanxie','fenming']],
|
||||
lvfan:['male','wu',3,['diaodu','diancai']],
|
||||
|
@ -103,7 +104,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sp2_huben:['chendong','wangshuang','wenyang','re_liuzan','dc_huangzu','wulan','leitong','chentai','dc_duyu','dc_wangjun','dc_xiahouba','old_huangfusong','huzun'],
|
||||
sp2_shengun:["puyuan","guanlu","gexuan",'wufan','re_zhangbao','dukui','zhaozhi','zhujianping','dc_zhouxuān','zerong'],
|
||||
sp2_bizhe:['dc_luotong','dc_wangchang','chengbing','dc_yangbiao','ruanji','cuimao'],
|
||||
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie'],
|
||||
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren','dc_shixie','caofang'],
|
||||
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
|
||||
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen','zhugeruoxue','caoxian','dc_qinghegongzhu','zhugemengxue'],
|
||||
sp2_yinyu:['zhouyi','luyi','sunlingluan','caoyi'],
|
||||
|
@ -122,6 +123,143 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
],
|
||||
},
|
||||
skill:{
|
||||
//曹芳
|
||||
dczhimin:{
|
||||
audio:2,
|
||||
trigger:{global:'roundStart'},
|
||||
filter(event,player){
|
||||
return game.hasPlayer(current=>current!=player&¤t.countCards('h'))&&player.getHp()>0;
|
||||
},
|
||||
forced:true,
|
||||
group:['dczhimin_mark','dczhimin_draw'],
|
||||
async content(event,trigger,player){
|
||||
const targets = await player.chooseTarget(`置民:请选择至多${get.cnNumber(player.getHp())}名其他角色`, '你获得这些角色各自手牌中的随机一张点数最小的牌', (card, player, target) => {
|
||||
return target !== player && target.countCards('h');
|
||||
}, [1, player.getHp()], true).set('ai', target => {
|
||||
const player = get.player();
|
||||
return get.effect(target, {name:'shunshou_copy', position: 'h'}, player, player) + 0.1;
|
||||
}).forResultTargets();
|
||||
if (!targets || !targets.length) return;
|
||||
targets.sortBySeat(trigger.player);
|
||||
player.line(targets, 'thunder');
|
||||
const toGain = [];
|
||||
for (const target of targets) {
|
||||
const cards = target.getCards('h'), minNumber = cards.map(card => get.number(card)).sort((a, b) => a - b)[0];
|
||||
const gainableCards = cards.filter(card => {
|
||||
return get.number(card) === minNumber && lib.filter.canBeGained(card, player, target);
|
||||
}).randomSort();
|
||||
toGain.push(gainableCards[0]);
|
||||
}
|
||||
if (toGain.length) await player.gain(toGain, 'giveAuto');
|
||||
await game.asyncDelayx();
|
||||
},
|
||||
ai:{
|
||||
threaten:5.8,
|
||||
},
|
||||
mod:{
|
||||
aiOrder(player,card,num){
|
||||
if(num>0&&get.itemtype(card)==='card'&&card.hasGaintag('dczhimin_tag')&&player.countCards('h',cardx=>{
|
||||
return cardx.hasGaintag('dczhimin_tag')&&cardx!==card;
|
||||
})<player.maxHp) return num/10;
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
mark:{
|
||||
audio:'dczhimin',
|
||||
trigger:{
|
||||
player:'gainAfter',
|
||||
global:'loseAsyncAfter',
|
||||
},
|
||||
forced:true,
|
||||
filter(event,player){
|
||||
if(_status.currentPhase===player||!event.getg(player).some(card=>get.position(card)==='h'&&get.owner(card)===player)) return false;
|
||||
return true;
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
player.addGaintag(trigger.getg(player).filter(card=>get.position(card)==='h'&&get.owner(card)===player), 'dczhimin_tag');
|
||||
},
|
||||
},
|
||||
draw:{
|
||||
audio:'dczhimin',
|
||||
trigger:{
|
||||
player:'loseAfter',
|
||||
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
|
||||
},
|
||||
forced:true,
|
||||
filter(event,player){
|
||||
const evt=event.getl(player);
|
||||
if(!evt.hs.length) return false;
|
||||
return Object.values(evt.gaintag_map).flat().includes('dczhimin_tag');
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const count = player.maxHp - player.countCards('h');
|
||||
if (count <= 0) return;
|
||||
await player.draw(count);
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
dcjujian:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
zhuSkill:true,
|
||||
filter(event,player){
|
||||
return game.hasPlayer(current=>{
|
||||
return player.hasZhuSkill('dcjujian',current)&¤t.group==='wei'&¤t!==player;
|
||||
});
|
||||
},
|
||||
filterTarget(_,player,target){
|
||||
return player.hasZhuSkill('dcjujian',target)&&target.group==='wei'&&target!==player;
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const target = event.targets[0];
|
||||
await target.draw();
|
||||
target.addTempSkill('dcjujian_forbid', 'roundStart');
|
||||
target.markAuto('dcjujian_forbid', player);
|
||||
},
|
||||
ai:{
|
||||
result:{
|
||||
target(player,target){
|
||||
const num=target.countCards('hs',card=>{
|
||||
return get.type(card)=='trick'&&target.canUse(card,player)&&get.effect(player,card,target,player)<-2;
|
||||
}),att=get.attitude(player,target);
|
||||
if(att<0) return -0.74*num;
|
||||
return 1.5;
|
||||
},
|
||||
},
|
||||
},
|
||||
subSkill:{
|
||||
forbid:{
|
||||
audio:'dcjujian',
|
||||
trigger:{
|
||||
player:'useCardToBefore',
|
||||
},
|
||||
filter(event,player){
|
||||
if(get.type(event.card)!=='trick') return false;
|
||||
return player.getStorage('dcjujian_forbid').includes(event.target);
|
||||
},
|
||||
forced:true,
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
direct:true,
|
||||
async content(event,trigger,player){
|
||||
await trigger.target.logSkill('dcjujian_forbid', player);
|
||||
trigger.cancel();
|
||||
},
|
||||
intro:{
|
||||
content:'使用普通锦囊牌对$无效',
|
||||
},
|
||||
ai:{
|
||||
effect:{
|
||||
player(card,player,target,current){
|
||||
if(get.type(card)=='trick'&&player.getStorage('dcjujian_forbid').includes(target)) return 'zeroplayertarget';
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
//谋司马懿
|
||||
dcsbquanmou:{
|
||||
audio:2,
|
||||
|
@ -9529,7 +9667,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(changed2.includes(from.link)) return true;
|
||||
return changed.includes(to.link);
|
||||
});
|
||||
next.set('max',Math.min(hs.length,ts.length,player.getDamagedHp()));
|
||||
next.set('processAI',function(list){
|
||||
if(_status.event.max){
|
||||
let gain=list[0][1].sort((a,b)=>{
|
||||
return player.getUseValue(b,null,true)-player.getUseValue(a,null,true);
|
||||
}).slice(0,_status.event.max),give=list[1][1].sort((a,b)=>{
|
||||
return get.value(a,player)-get.value(b,player);
|
||||
}).slice(0,_status.event.max);
|
||||
for(let i of gain){
|
||||
if(get.value(i,player)<get.value(give[0],player)) continue;
|
||||
let j=give.shift();
|
||||
list[0][1].remove(i);
|
||||
list[0][1].push(j);
|
||||
list[1][1].remove(j);
|
||||
list[1][1].push(i);
|
||||
if(!give.length) break;
|
||||
}
|
||||
}
|
||||
return [list[0][1],list[1][1]];
|
||||
});
|
||||
}
|
||||
|
@ -14472,6 +14627,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
guozhao:['guozhao','xin_guozhao','jsrg_guozhao'],
|
||||
dingshangwan:['dingshangwan','ol_dingshangwan'],
|
||||
qinghegongzhu:['qinghegongzhu','dc_qinghegongzhu'],
|
||||
caofang:['caofang','jsrg_caofang'],
|
||||
},
|
||||
translate:{
|
||||
puyuan:'蒲元',
|
||||
|
@ -15030,6 +15186,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcsbquanmou_info:'转换技。出牌阶段每名角色限一次,你可以令一名攻击范围内的其他角色交给你一张牌。阴:当你于本阶段内下次对其造成伤害时,取消之;阳:当你于本阶段内下次对其造成伤害后,你可以选择除其外的至多三名其他角色,对这些角色依次造成1点伤害。',
|
||||
dcsbpingliao:'平辽',
|
||||
dcsbpingliao_info:'锁定技。当你声明使用【杀】时,你令此【杀】的目标对其他角色不可见,且你令攻击范围内的其他角色依次选择是否打出一张红色基本牌。所有角色选择完成后,此牌的目标角色中没有以此法打出牌的角色本回合内无法使用或打出手牌;若有不为此牌目标的角色以此法打出了牌,则你摸两张牌,且你本回合使用【杀】的次数上限+1。',
|
||||
caofang:'曹芳',
|
||||
dczhimin:'置民',
|
||||
dczhimin_tag:'民',
|
||||
dczhimin_info:'锁定技。①一轮游戏开始时,你选择至多X名其他角色(X为你的体力值),获得这些角色各自手牌中的随机一张点数最小的牌。②当你于你的回合外得到牌后,你将这些牌标记为“民”。③当你失去“民”后,你将手牌补至体力上限。',
|
||||
dcjujian:'拒谏',
|
||||
dcjujian_info:'主公技。出牌阶段限一次,你可以令一名其他魏势力角色摸一张牌,然后你令其于本轮内使用的普通锦囊牌对你无效。',
|
||||
|
||||
sp2_yinyu:'隐山之玉',
|
||||
sp2_huben:'百战虎贲',
|
||||
|
|
|
@ -2295,7 +2295,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return get.distance(player,current)>1;
|
||||
})) return false;
|
||||
if(tag=='directHit_ai') return arg.card.name=='sha';
|
||||
if(arg.card.name!='sha'&&arg.card.name!='chuqibuyi') return false;
|
||||
if(!arg||!arg.card||arg.card.name!='sha'&&arg.card.name!='chuqibuyi') return false;
|
||||
var card=arg.target.getEquip(2);
|
||||
if(card&&card.name.indexOf('bagua')!=-1) return true;
|
||||
if(player._xinbenxi_ai) return false;
|
||||
|
@ -11837,6 +11837,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
|
||||
event.given_map = {};
|
||||
event._forcing = false;
|
||||
event.aicheck = function () {
|
||||
let res = {
|
||||
bool: true,
|
||||
cards: []
|
||||
}, cards = player.getCards('he'), tars = game.filterPlayer(i => player !== i);
|
||||
cards.forEach(i => {
|
||||
let o = get.value(i, player), max = o, temp, t;
|
||||
tars.forEach(tar => {
|
||||
temp = get.value(i, tar);
|
||||
if (temp > max) {
|
||||
max = temp;
|
||||
t = tar;
|
||||
}
|
||||
});
|
||||
if (t) res.cards.push([i, t, max - o]);
|
||||
});
|
||||
if (res.cards.length < event.num) res.bool = false;
|
||||
else if (res.cards.length > event.num) res.cards.sort((a, b) => {
|
||||
return b[2] - a[2];
|
||||
}).slice(0, event.num);
|
||||
return res;
|
||||
}();
|
||||
'step 1'
|
||||
player.chooseCardTarget({
|
||||
filterCard(card){
|
||||
|
@ -11847,17 +11869,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
prompt:'请选择要分配的卡牌和目标',
|
||||
forced: event._forcing,
|
||||
ai1(card){
|
||||
//if(!ui.selected.cards.length) return 1;
|
||||
if (!_status.event.res.bool || ui.selected.cards.length) return 0;
|
||||
for (let arr of _status.event.res.cards) {
|
||||
if (arr[0] === card) return arr[2];
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
ai2(target){
|
||||
return 0;
|
||||
//wait for PZ157 to change
|
||||
var player=_status.event.player,card=ui.selected.cards[0];
|
||||
var val=target.getUseValue(card);
|
||||
let card = ui.selected.cards[0];
|
||||
for (let arr of _status.event.res.cards) {
|
||||
if (arr[0] === card) return get.attitude(player, target);
|
||||
}
|
||||
let val=target.getUseValue(card);
|
||||
if(val>0) return val*get.attitude(player,target)*2;
|
||||
return get.value(card,target)*get.attitude(player,target);
|
||||
},
|
||||
res: event.aicheck
|
||||
});
|
||||
'step 2'
|
||||
if(result.bool){
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
3739
mode/guozhan.js
3739
mode/guozhan.js
File diff suppressed because it is too large
Load Diff
|
@ -362,6 +362,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
if(_status.connectMode&&lib.configOL.change_card) game.replaceHandcards(game.players.slice(0));
|
||||
'step 4'
|
||||
game.phaseLoop(game.zhu);
|
||||
game.countPlayer(current=>current.showGiveup(),true);
|
||||
},
|
||||
game:{
|
||||
canReplaceViewpoint:()=>true,
|
||||
|
@ -550,7 +551,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
ui.wuxianhuoliProgress.innerHTML='任务进度(0/3)';
|
||||
const showTasks=()=>{
|
||||
if(ui.wuxianhuoliInfo) return;
|
||||
ui.wuxianhuoliInfo=ui.create.system('无限火力·信息',null,true);
|
||||
ui.wuxianhuoliInfo=ui.create.system('无限火力',null,true);
|
||||
ui.wuxianhuoliInfo.currentProgress=0;
|
||||
ui.wuxianhuoliInfo.currentLevel=0;
|
||||
lib.setPopped(ui.wuxianhuoliInfo,()=>{
|
||||
|
@ -943,7 +944,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
|
|||
ui.wuxianhuoliProgress.innerHTML='任务进度(0/3)';
|
||||
const showTasks=()=>{
|
||||
if(ui.wuxianhuoliInfo) return;
|
||||
ui.wuxianhuoliInfo=ui.create.system('无限火力·信息',null,true);
|
||||
ui.wuxianhuoliInfo=ui.create.system('无限火力',null,true);
|
||||
ui.wuxianhuoliInfo.currentProgress=0;
|
||||
ui.wuxianhuoliInfo.currentLevel=0;
|
||||
lib.setPopped(ui.wuxianhuoliInfo,()=>{
|
||||
|
|
|
@ -57,8 +57,8 @@ export class Get extends Uninstantable {
|
|||
* @param {number | Player} seat
|
||||
*/
|
||||
static seatTranslation(seat) {
|
||||
if (get.itemtype(seat) === 'player') seat = seat.getSeatNum();
|
||||
return `${get.cnNumber(seat, true)}号位`;
|
||||
if (get.itemtype(seat) === 'player') seat = seat.getSeatNum() - 1;
|
||||
return `${get.cnNumber(seat + 1, true)}号位`;
|
||||
}
|
||||
/**
|
||||
* @param {number} numberOfPlayers
|
||||
|
|
|
@ -3267,7 +3267,7 @@ export const Content = {
|
|||
event.result._sendskill = event._sendskill;
|
||||
}
|
||||
if ((!event.result || !event.result.bool || event.result._noHidingTimer) && (event.result.skill || event.logSkill)) {
|
||||
var info = get.info(event.result.skill || event.logSkill);
|
||||
var info = get.info(event.result.skill || (Array.isArray(event.logSkill) ? event.logSkill[0] : event.logSkill));
|
||||
if (info.direct && !info.clearTime) {
|
||||
_status.noclearcountdown = 'direct';
|
||||
}
|
||||
|
@ -3454,11 +3454,11 @@ export const Content = {
|
|||
if (event.result._sendskill) {
|
||||
lib.skill[event.result._sendskill[0]] = event.result._sendskill[1];
|
||||
}
|
||||
var info = get.info(event.result.skill);
|
||||
if (event.onresult) {
|
||||
event.onresult(event.result);
|
||||
}
|
||||
if ((!event.result || !event.result.bool || event.result._noHidingTimer) && (event.result.skill || event.logSkill)) {
|
||||
var info = get.info(event.result.skill || (Array.isArray(event.logSkill) ? event.logSkill[0] : event.logSkill));
|
||||
if (info.direct && !info.clearTime) {
|
||||
_status.noclearcountdown = 'direct';
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue