commit
608b1e700d
|
@ -2494,7 +2494,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
icesha_skill:{
|
||||
inherit:'hanbing_skill',
|
||||
trigger:{source:'damageBegin2'},
|
||||
trigger:{source:'damageBegin3'},
|
||||
equipSkill:false,
|
||||
ruleSkill:true,
|
||||
filter:function(event){
|
||||
|
|
|
@ -5337,10 +5337,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
check:function(event,player){
|
||||
var num=player.getDamagedHp()-1;
|
||||
if(num<=0) return false;
|
||||
var list=game.filterPlayer().map(target=>{
|
||||
return get.attitude(player,target)*Math.pow(Math.max(0,target.maxHp-target.countCards('h')-1),2);
|
||||
}).sort((a,b)=>b-a);
|
||||
return list.slice(0,num).reduce((p,c)=>p+c,0)>0;
|
||||
return game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)>0&&target.maxHp-target.countCards('h')>1;
|
||||
});
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
|
@ -5348,7 +5347,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
'step 1'
|
||||
var num=player.getDamagedHp();
|
||||
if(!player.isIn()||!num) event.finish();
|
||||
else player.chooseTarget('御关:令'+get.cnNumber(num)+'名角色将手牌摸至体力上限',Math.min(game.countPlayer(),num),true).set('ai',target=>{
|
||||
else player.chooseTarget('御关:令'+get.cnNumber(num)+'名角色将手牌摸至体力上限',Math.min(game.countPlayer(),[1,num]),true).set('ai',target=>{
|
||||
return get.attitude(_status.event.player,target)*Math.max(0.1,target.maxHp-target.countCards('h'));
|
||||
});
|
||||
'step 2'
|
||||
|
@ -12716,7 +12715,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xingchong:'幸宠',
|
||||
xingchong_info:'一轮游戏开始时,你可声明两个自然数X和Y,且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张手牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。',
|
||||
liunian:'流年',
|
||||
liunian_info:'锁定技。回合结束时,若本回合内进行了本次游戏的第一次洗牌,则你加1点体力上限;若本回合内进行了本次游戏的第二次洗牌,则你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。',
|
||||
liunian_info:'锁定技。一名角色的回合结束时,若本回合内进行了本次游戏的第一次洗牌,则你加1点体力上限;若本回合内进行了本次游戏的第二次洗牌,则你于本回合结束时回复1点体力,且本局游戏内的手牌上限+10。',
|
||||
caimaozhangyun:'蔡瑁张允',
|
||||
lianzhou:'连舟',
|
||||
lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。',
|
||||
|
@ -12828,7 +12827,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dcxuewei:'血卫',
|
||||
dcxuewei_info:'结束阶段,你可以选择一名体力值不大于你的角色,然后你获得如下效果直到你的下回合开始时:当其受到伤害时,防止此伤害,然后你失去1点体力,你与其各摸一张牌(若该角色为你,则改为你摸一张牌)。',
|
||||
dcyuguan:'御关',
|
||||
dcyuguan_info:'一名角色的回合结束时,若你已损失的体力值为全场最多,你可以减1点体力上限,然后令X名角色将手牌摸至体力上限(X为你已损失的体力值)。',
|
||||
dcyuguan_info:'一名角色的回合结束时,若你已损失的体力值为全场最多,你可以减1点体力上限,然后令至多X名角色将手牌摸至体力上限(X为你已损失的体力值)。',
|
||||
qinlang:'秦朗',
|
||||
dchaochong:'昊宠',
|
||||
dchaochong_info:'当你使用牌后,你可以将手牌摸至或弃置至你的手牌上限数(至多摸五张)。然后若你以此法:得到牌,你的手牌上限-1;失去牌,你的手牌上限+1。',
|
||||
|
|
199
character/sb.js
199
character/sb.js
|
@ -754,12 +754,61 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:'mark',
|
||||
},
|
||||
ai:{threaten:2.5},
|
||||
getNum(num){
|
||||
if(typeof num!='number'||Array.from({length:8}).map((_,i)=>i+1).includes(num)) return 0;
|
||||
return [1,2,3,4,2,2,3,3][num-1];
|
||||
},
|
||||
getEffect(player,num){
|
||||
if(!player||typeof num!='number') return 0;
|
||||
switch(num){
|
||||
//行殇四个选项
|
||||
case 1://-1,重置武将牌
|
||||
if(game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)>0&&target.isTurnedOver();
|
||||
})) return 10;
|
||||
return 0;
|
||||
case 2://-2,摸min(5,max(1,阵亡角色数))的牌
|
||||
return Math.min(5,(Math.max(1,game.dead.length)));
|
||||
case 3://-3,加上限加血+复原装备栏
|
||||
if(!game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)>0&&target.maxHp<10;
|
||||
})) return 0;
|
||||
return 2+(game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)>0&&target.hasDisabledSlot();
|
||||
})?1:0);
|
||||
case 4://-4,劝封/化萍
|
||||
return 0;
|
||||
//放逐四个选项
|
||||
case 5://-2,白板到结束
|
||||
if(game.hasPlayer(target=>{
|
||||
if(target.hasSkill('sbfangzhu_ban')||target.hasSkill('fengyin')||target.hasSkill('baiban')) return false;
|
||||
return get.attitude(player,target)<0&&['name','name1','name2'].reduce((sum,name)=>{
|
||||
if(target[name]&&(name!='name1'||target.name!=target.name1)){
|
||||
if(get.character(target[name])) sum+get.rank(target[name],true);
|
||||
}
|
||||
return sum;
|
||||
},0)>5;
|
||||
})) return 6;
|
||||
return 0;
|
||||
case 6://-2,强命到结束
|
||||
return 0;
|
||||
case 7://-3,翻面
|
||||
if(game.hasPlayer(target=>{
|
||||
return get.attitude(player,target)<0&&!target.isTurnedOver();
|
||||
})) return 8;
|
||||
return 0;
|
||||
case 8://-3,定向鸡肋
|
||||
return 0;
|
||||
default://其他
|
||||
return 0;
|
||||
}
|
||||
},
|
||||
group:'sbxingshang_use',
|
||||
subSkill:{
|
||||
use:{
|
||||
audio:'sbxingshang',
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
filter(event,player){
|
||||
return game.hasPlayer(target=>{
|
||||
if(player.countMark('sbxingshang')>1) return true;
|
||||
return player.countMark('sbxingshang')&&(target.isLinked()||target.isTurnedOver());
|
||||
|
@ -767,7 +816,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
usable:1,
|
||||
chooseButton:{
|
||||
dialog:function(){
|
||||
dialog(){
|
||||
var dialog=ui.create.dialog(
|
||||
'行殇:请选择你要执行的一项',
|
||||
[[
|
||||
|
@ -783,7 +832,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
);
|
||||
return dialog;
|
||||
},
|
||||
filter:function(button,player){
|
||||
filter(button,player){
|
||||
if(button.link>player.countMark('sbxingshang')) return false;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
|
@ -796,39 +845,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
return game.dead.length;
|
||||
}
|
||||
},
|
||||
check:function(button){
|
||||
let player=_status.event.player;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
return game.filterPlayer(current=>get.attitude(player,current)>0).reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.isLinked()) num+=0.5;
|
||||
if(target.isTurnedOver()) num+=10;
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 2:
|
||||
return Math.min(5,Math.max(1,game.dead.length));
|
||||
case 3:
|
||||
return game.filterPlayer().reduce((list,target)=>{
|
||||
list.push(get.recoverEffect(target,player,player));
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 4:
|
||||
return game.dead.reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
}
|
||||
check(button){
|
||||
const player=get.event('player'),info=get.info('sbxingshang');
|
||||
let list=Array.from({length:4}).map((_,i)=>i+1);
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num));
|
||||
const num=list.sort((a,b)=>info.getEffect(player,b)-info.getEffect(player,a))[0];
|
||||
return (button.link==num)?10:0;
|
||||
},
|
||||
backup:function(links,player){
|
||||
backup(links,player){
|
||||
return {
|
||||
num:links[0],
|
||||
audio:'sbxingshang',
|
||||
filterTarget:function(card,player,target){
|
||||
filterTarget(card,player,target){
|
||||
switch(lib.skill.sbxingshang_use_backup.num){
|
||||
case 1:
|
||||
return target=>target.isLinked()||target.isTurnedOver();
|
||||
|
@ -889,17 +917,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
ai:{
|
||||
result:{
|
||||
target:function(player,target){
|
||||
target(player,target){
|
||||
switch(lib.skill.sbxingshang_use_backup.num){
|
||||
case 1:
|
||||
let num=0;
|
||||
if(target.isLinked()) num+=0.5;
|
||||
if(target.isLinked()&&!target.hasSkill('nzry_jieying')) num+=0.5;
|
||||
if(target.isTurnedOver()) num+=10;
|
||||
return num;
|
||||
case 2:
|
||||
return 1;
|
||||
return get.effect(target,{name:'draw'},player,player);
|
||||
case 3:
|
||||
return get.recoverEffect(target,player,player);
|
||||
return Math.max(0,get.recoverEffect(target,player,player))+get.attitude(player,target);
|
||||
case 4:
|
||||
return 1;
|
||||
}
|
||||
|
@ -908,21 +936,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
prompt(links,player){
|
||||
const str='###行殇###';
|
||||
switch(links[0]){
|
||||
case 1:
|
||||
return '复原一名角色的武将牌';
|
||||
return str+'复原一名角色的武将牌';
|
||||
case 2:
|
||||
return '令一名角色摸'+get.cnNumber(Math.min(5,Math.max(1,game.dead.length)))+'张牌';
|
||||
return str+'令一名角色摸'+get.cnNumber(Math.min(5,Math.max(1,game.dead.length)))+'张牌';
|
||||
case 3:
|
||||
return '令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏';
|
||||
return str+'令一名体力上限小于10的角色加1点体力上限并回复1点体力,然后随机恢复一个被废除的装备栏';
|
||||
case 4:
|
||||
return '获得一名已阵亡角色的所有技能,然后失去武将牌上的所有技能';
|
||||
return str+'获得一名已阵亡角色的所有技能,然后失去武将牌上的所有技能';
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:9,
|
||||
order(_,player){
|
||||
const info=get.info('sbxingshang');
|
||||
const goon=(player.hasSkill('sbfangzhu')&&!player.getStat('skill').sbfangzhu);
|
||||
let list=Array.from({length:goon?8:4}).map((_,i)=>i+1);
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num));
|
||||
list.sort((a,b)=>info.getEffect(player,b)-info.getEffect(player,a));
|
||||
return (Array.from({length:4}).map((_,i)=>i+1).includes(list[0])&&info.getEffect(player,list[0])>0)?1:0;
|
||||
},
|
||||
result:{player:1},
|
||||
},
|
||||
},
|
||||
|
@ -932,12 +968,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbfangzhu:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
filter(event,player){
|
||||
return player.countMark('sbxingshang')>1;
|
||||
},
|
||||
usable:1,
|
||||
chooseButton:{
|
||||
dialog:function(){
|
||||
dialog(){
|
||||
var dialog=ui.create.dialog('放逐:请选择你要执行的一项','hidden');
|
||||
dialog.add([[
|
||||
[1,'移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束'],
|
||||
|
@ -947,40 +983,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
],'textbutton']);
|
||||
return dialog;
|
||||
},
|
||||
filter:function(button,player){
|
||||
filter(button,player){
|
||||
if(button.link>2&&player.countMark('sbxingshang')<3) return false;
|
||||
if(button.link==4) return game.hasPlayer(target=>target!=player&&!target.hasSkill('sbfangzhu_ban'));
|
||||
return true;
|
||||
},
|
||||
check:function(button){
|
||||
let player=_status.event.player;
|
||||
switch(button.link){
|
||||
case 1:
|
||||
return game.filterPlayer(current=>get.attitude(player,current)<0).reduce((list,target)=>{
|
||||
let num=0;
|
||||
if(target.name&&lib.character[target.name]) num+=get.rank(target.name,true);
|
||||
if(target.name2&&lib.character[target.name2]) num+=get.rank(target.name2,true);
|
||||
list.push(num);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 2:
|
||||
return 0;
|
||||
case 3:
|
||||
return game.filterPlayer(target=>target!=player&&!target.hasSkill('sbfangzhu_ban')).reduce((list,target)=>{
|
||||
if(get.attitude(player,target)>0&&target.isTurnedOver()) list.push(10*target.countCards('hs')+1);
|
||||
else if(get.attitude(player,target)<0&&!target.isTurnedOver()) list.push(5*target.countCards('hs')+1);
|
||||
else list.push(0);
|
||||
return list;
|
||||
},[]).sort((a,b)=>b-a)[0];
|
||||
case 4:
|
||||
return 0;
|
||||
}
|
||||
check(button){
|
||||
const player=get.event('player'),info=get.info('sbxingshang');
|
||||
let list=Array.from({length:4}).map((_,i)=>i+1);
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num+4));
|
||||
const num=list.sort((a,b)=>info.getEffect(player,b+4)-info.getEffect(player,a+4))[0]-4;
|
||||
return (button.link==num)?10:0;
|
||||
},
|
||||
backup:function(links,player){
|
||||
backup(links,player){
|
||||
return {
|
||||
num:links[0],
|
||||
audio:'sbfangzhu',
|
||||
filterTarget:lib.filter.notMe,
|
||||
filterTarget(card,player,target){
|
||||
if(target==player) return false;
|
||||
if(lib.skill.sbfangzhu_backup.num==4) return !target.hasSkill('sbfangzhu_ban');
|
||||
return true;
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const target=event.target;
|
||||
const num=lib.skill.sbfangzhu_backup.num;
|
||||
|
@ -1008,7 +1031,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
ai:{
|
||||
result:{
|
||||
target:function(player,target){
|
||||
target(player,target){
|
||||
switch(lib.skill.sbfangzhu_backup.num){
|
||||
case 1:
|
||||
let num=0;
|
||||
|
@ -1029,21 +1052,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
}
|
||||
},
|
||||
prompt:function(links,player){
|
||||
prompt(links,player){
|
||||
const str='###放逐###';
|
||||
switch(links[0]){
|
||||
case 1:
|
||||
return '移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束';
|
||||
return str+'移去2个“颂”标记,令一名其他角色的非Charlotte技能失效直到其回合结束';
|
||||
case 2:
|
||||
return '移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束';
|
||||
return str+'移去2个“颂”标记,令一名其他角色不能响应除其外的角色使用的牌直到其回合结束';
|
||||
case 3:
|
||||
return '移去3个“颂”标记,令一名其他角色将武将牌翻面';
|
||||
return str+'移去3个“颂”标记,令一名其他角色将武将牌翻面';
|
||||
case 4:
|
||||
return '移去3个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束';
|
||||
return str+'移去3个“颂”标记,令一名其他角色只能使用你选择的一种类型的牌直到其回合结束';
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order:9,
|
||||
order(_,player){
|
||||
const info=get.info('sbxingshang');
|
||||
const goon=(player.hasSkill('sbxingshang')&&!player.getStat('skill').sbxingshang_use);
|
||||
let list=Array.from({length:goon?8:4}).map((_,i)=>i+(goon?1:5));
|
||||
list=list.filter(num=>player.countMark('sbxingshang')>=info.getNum(num));
|
||||
list.sort((a,b)=>info.getEffect(player,b)-info.getEffect(player,a));
|
||||
return (Array.from({length:4}).map((_,i)=>i+5).includes(list[0])&&info.getEffect(player,list[0])>0)?1:0;
|
||||
},
|
||||
result:{player:1},
|
||||
},
|
||||
subSkill:{
|
||||
|
@ -1054,7 +1085,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
marktext:'禁',
|
||||
intro:{content:'不能响应其他角色使用的牌'},
|
||||
trigger:{global:'useCard1'},
|
||||
filter:function(event,player){
|
||||
filter(event,player){
|
||||
return event.player!=player;
|
||||
},
|
||||
forced:true,
|
||||
|
@ -1073,10 +1104,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
content:'只能使用$牌',
|
||||
},
|
||||
mod:{
|
||||
cardEnabled:function(card,player){
|
||||
cardEnabled(card,player){
|
||||
if(!player.getStorage('sbfangzhu_ban').includes(get.type2(card))) return false;
|
||||
},
|
||||
cardSavable:function(card,player){
|
||||
cardSavable(card,player){
|
||||
if(!player.getStorage('sbfangzhu_ban').includes(get.type2(card))) return false;
|
||||
},
|
||||
},
|
||||
|
@ -1089,7 +1120,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
player.addSkill('sbsongwei_delete');
|
||||
},
|
||||
trigger:{player:'phaseUseBegin'},
|
||||
filter:function(event,player){
|
||||
filter(event,player){
|
||||
return game.hasPlayer(target=>target.group=='wei'&&target!=player);
|
||||
},
|
||||
zhuSkill:true,
|
||||
|
@ -1102,10 +1133,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
delete:{
|
||||
audio:'sbsongwei',
|
||||
enable:'phaseUse',
|
||||
filter:function(event,player){
|
||||
filter(event,player){
|
||||
return game.hasPlayer(target=>lib.skill.sbsongwei.subSkill.delete.filterTarget(null,player,target));
|
||||
},
|
||||
filterTarget:function(card,player,target){
|
||||
filterTarget(card,player,target){
|
||||
return target!=player&&target.group=='wei'&&target.getStockSkills(false,true).length;
|
||||
},
|
||||
skillAnimation:true,
|
||||
|
@ -1117,7 +1148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
ai:{
|
||||
order:13,
|
||||
result:{
|
||||
target:function(player,target){
|
||||
target(player,target){
|
||||
return -target.getStockSkills(false,true).length;
|
||||
},
|
||||
},
|
||||
|
|
|
@ -11484,7 +11484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
quanjiu_info:'锁定技。①你手牌区中的【酒】的牌名视为【杀】。②你使用对应的实体牌为一张【酒】的非转化【杀】不计入次数限制。',
|
||||
re_pangdegong:'庞德公',
|
||||
heqia:'和洽',
|
||||
heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法得到牌的角色可以视为使用一张基本牌,且当其声明使用此牌后,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。',
|
||||
heqia_info:'出牌阶段开始时,你可选择一项:①将任意张牌交给一名其他角色。②令一名有手牌的其他角色交给你任意张牌。然后以此法得到牌的角色可以将一张手牌当作任意基本牌使用,且当其声明使用此牌后,可以为此牌增加至至多X个目标(X为以此法移动的牌数)。',
|
||||
yinyi:'隐逸',
|
||||
yinyi_info:'锁定技。每回合限一次,当你受到非属性伤害时,若你的手牌数和体力值与伤害来源均不相同,则你防止此伤害。',
|
||||
haomeng:'郝萌',
|
||||
|
@ -11492,7 +11492,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xiongmang_info:'你可将任意张花色各不相同的手牌当做目标数上限为X的【杀】使用(X为此【杀】对应的实体牌数)。此【杀】使用结算结束后,若你未造成过渠道为此牌的伤害,则你减1点体力上限。',
|
||||
yanfuren:'严夫人',
|
||||
channi:'谗逆',
|
||||
channi_info:'出牌阶段限一次。你可将任意张手牌交给一名其他角色,然后其可以将等量的手牌当做【决斗】使用。若其因此【决斗】造成了伤害,则其摸X张牌(X为此【决斗】对应的实体牌数)。若其因此【决斗】受到过伤害,则你弃置所有手牌。',
|
||||
channi_info:'出牌阶段限一次。你可将任意张手牌交给一名其他角色,然后其可以将至多等量的手牌当做【决斗】使用。若其因此【决斗】造成了伤害,则其摸X张牌(X为此【决斗】对应的实体牌数)。若其因此【决斗】受到过伤害,则你弃置所有手牌。',
|
||||
nifu:'匿伏',
|
||||
nifu_info:'锁定技。一名角色的回合结束时,你将手牌摸至或弃置至三张。',
|
||||
licaiwei:'李采薇',
|
||||
|
|
Loading…
Reference in New Issue