commit
d63a934524
|
@ -136,6 +136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}).length<4-player.getStorage('dcjianzhuan').length;
|
||||
},
|
||||
forced:true,
|
||||
derivation:'dcjianzhuan_faq',
|
||||
async content(event,trigger,player){
|
||||
const evtx=event.getParent('phaseUse'),num=player.getHistory('useSkill',evt=>{
|
||||
return evt.skill=='dcjianzhuan'&&evt.event.getParent('phaseUse')==evtx;
|
||||
|
@ -163,6 +164,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
discard_target:{
|
||||
intro:'拆牌',
|
||||
introx:(num)=>'令一名角色弃置'+num+'张牌',
|
||||
weight:1,
|
||||
ai_effect(player,num){
|
||||
return game.hasPlayer(target=>{
|
||||
return get.effect(target,{name:'guohe_copy2'},player,player)>0;
|
||||
|
@ -182,6 +184,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
draw_self:{
|
||||
intro:'摸牌',
|
||||
introx:(num)=>'摸'+num+'张牌',
|
||||
weight:1,
|
||||
ai_effect(player,num){
|
||||
return 3;
|
||||
},
|
||||
|
@ -192,6 +195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
recast_self:{
|
||||
intro:'重铸',
|
||||
introx:(num)=>'重铸'+num+'张牌',
|
||||
weight:1,
|
||||
ai_effect(player,num){
|
||||
return 1;
|
||||
},
|
||||
|
@ -203,6 +207,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
discard_self:{
|
||||
intro:'弃牌',
|
||||
introx:(num)=>'弃置'+num+'张牌',
|
||||
weight:'90%',
|
||||
ai_effect(player,num){
|
||||
let cards=player.getCards('hs');
|
||||
cards.sort((a,b)=>get.value(b)-get.value(a));
|
||||
|
@ -226,13 +231,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
forced:true,
|
||||
async content(event,trigger,player){
|
||||
const info=get.info('dcjianzhuan').choices;
|
||||
let choices=[],map={};
|
||||
let map={};
|
||||
let unfixedWeightTotal=0,remainedWeight=100;
|
||||
let entries=[];
|
||||
for(const i in info){
|
||||
map[info[i].intro]=i;
|
||||
const infox=info[i];
|
||||
map[infox.intro]=i;
|
||||
if(player.getStorage('dcjianzhuan').includes(i)) continue;
|
||||
choices.push(info[i].intro);
|
||||
let weight=(infox.weight||1).toString();
|
||||
if(weight.endsWith('%')){
|
||||
weight=Math.min(remainedWeight,parseInt(weight.slice(0,-1)));
|
||||
entries.push([infox.intro,weight]);
|
||||
remainedWeight-=weight;
|
||||
}
|
||||
else{
|
||||
weight=parseInt(weight);
|
||||
unfixedWeightTotal+=weight;
|
||||
entries.push([infox.intro,-weight]);
|
||||
}
|
||||
}
|
||||
const removeChoice=choices.randomGet();
|
||||
entries=entries.map(entry=>{
|
||||
let weight=entry[1];
|
||||
if(weight<0) weight=-remainedWeight/unfixedWeightTotal*weight;
|
||||
return [entry[0],weight];
|
||||
});
|
||||
let rand=Math.random()*100;
|
||||
let removeChoice=entries.find(entry=>{
|
||||
rand-=entry[1];
|
||||
return rand<0;
|
||||
})[0];
|
||||
if(get.isLuckyStar(player)&&Object.keys(entries).includes('弃牌')) removeChoice='弃牌';
|
||||
player.markAuto('dcjianzhuan',[map[removeChoice]]);
|
||||
player.popup(removeChoice);
|
||||
game.log(player,'移去了','#g'+removeChoice,'项');
|
||||
|
@ -13002,6 +13030,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
dc_caoshuang_prefix:'新杀',
|
||||
dcjianzhuan:'渐专',
|
||||
dcjianzhuan_info:'锁定技。①当你于出牌阶段使用牌时,你选择此阶段未执行过的一项执行:⒈令一名角色弃置X张牌;⒉摸X张牌;⒊重铸X张牌;⒋弃置X张牌(X为此技能于本阶段的发动次数)。②出牌阶段结束时,若你本阶段执行过〖渐专①〗的所有选项,则你随机移除〖渐专①〗的一项。',
|
||||
dcjianzhuan_faq:'渐专概率',
|
||||
dcjianzhuan_faq_info:'<br>当系统随机选择要删除的选项时,“弃置X张牌”的选项概率固定为90%;剩余选项平分剩余的的10%概率。<br>如第一次删除时,删除弃牌选项概率为90%,其余三个选项被删除的概率均为3.33%,若删除了非弃牌选项,第二次删除时,删除弃牌选项的概率依旧是90%,其余两个选项被删除的概率均为5%。',
|
||||
dcfanshi:'返势',
|
||||
dcfanshi_info:'觉醒技,结束阶段,若〖渐专①〗剩余选项数小于2,则你执行三次X视为1的剩余选项,然后增加2点体力上限并回复2点体力,失去技能〖渐专〗并获得技能〖覆斗〗。',
|
||||
dcfudou:'覆斗',
|
||||
|
|
|
@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
connect:true,
|
||||
characterSort:{
|
||||
mobile:{
|
||||
mobile_default:['xin_huojun','muludawang','mb_chengui','mb_huban','mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi'],
|
||||
mobile_default:['xin_huojun','muludawang','mb_chengui','mb_huban','mb_xianglang','yanxiang','xin_wuban','laimin','baoxin','jiangji','liwei','xin_guozhao',"miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou","fuqian","simafu","mayuanyi","yanpu","sunhanhua","sp_maojie","peixiu","sp_jianggan","ruanhui","xin_mamidi","sp_caosong","yangfu","wangjun","sp_pengyang","qianzhao",'shichangshi','yangfeng'],
|
||||
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning",'yj_huangzhong','yj_weiyan','yj_zhoubuyi'],
|
||||
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
|
||||
mobile_shenhua_feng:['re_xiaoqiao',"xin_zhoutai"],
|
||||
|
@ -26,6 +26,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
character:{
|
||||
yangfeng:['male','shu',4,['mbxuetu','mbweiming']],
|
||||
xin_huojun:['male','shu',4,['sidai','jieyu'],['character:tw_huojun','die_audio:tw_huojun']],
|
||||
muludawang:['male','qun','3/3/1',['shoufa','zhoulin','yuxiang']],
|
||||
mb_chengui:['male','qun',3,['guimou','zhouxian']],
|
||||
|
@ -178,6 +179,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
scs_gaowang:['male','qun','',['scsmiaoyu'],['unseen','sex:male_castrated']],
|
||||
},
|
||||
characterIntro:{
|
||||
yangfeng:'杨奉(?-197年/198年),东汉末年将领。杨奉早年参加白波军起义,曾经帮助李傕对抗郭汜,后来背叛李傕。兴平二年,加号兴义将军,护送汉献帝刘协东归雒阳,颇有功勋,加号车骑将军,屯兵于梁县。建安元年,随着汉献帝迁都许县,失去权力,先后依附于袁术、吕布,劫掠徐州和扬州地区。建安二年(一说三年),带兵进犯刘备领地,被刘备诱杀。',
|
||||
muludawang:'古典小说《三国演义》中的虚构人物,八纳洞主,孟获盟友。擅驱兽法,能行风雨,控制猛兽并指挥它们作战。在法术帮助下最初对蜀军取得一些胜利,但在诸葛亮的喷火木兽将他的动物吓跑后战败,最后死于乱军之中。',
|
||||
laimin:'来敏(165年—261年),字敬达,义阳新野人,东汉太中大夫来歙之后,司空来艳之子,三国时期蜀汉官员。东汉末年,逢董卓之乱,来敏跟随姐夫黄琬到荆州避难,黄琬是刘璋祖母的侄子,来敏又与姐姐来氏入蜀,被刘璋引为宾客。来敏喜欢读书,尤其喜欢《左氏春秋》。刘备平定益州后,以来敏为典学校尉,后立太子,来敏为家令。刘禅继位后,任命来敏为虎贲中郎将,诸葛亮驻汉中,请来敏为军祭酒、辅军将军。却因其口出狂言而被罢官,诸葛亮死后,来敏历任大长秋、光禄大夫、执慎将军等职,期间多次因说错话而被免官,蜀汉景耀年间,来敏去世,时年九十七岁。',
|
||||
shichangshi:'十常侍,指中国东汉(公元25年—220年)灵帝时期(168年-189年)操纵政权的十二个宦官:张让、赵忠、夏恽、郭胜、孙璋、毕岚、栗嵩、段珪、高望、张恭、韩悝、宋典(在小说《三国演义》里,十常侍指的是指张让、赵忠、封谞、段珪、曹节、侯览、蹇硕、程旷、夏恽、郭胜十人),他们都任职中常侍。玩弄小皇帝于股掌之中,以至灵帝称“张常侍是我父,赵常侍是我母”。十常侍自己横征暴敛,卖官鬻爵,他们的父兄子弟遍布天下,横行乡里,祸害百姓,无官敢管。人民不堪剥削、压迫,纷纷起来反抗。当时一些比较清醒的官吏,已看出宦官集团的黑暗腐败,导致大规模农民起义的形势。郎中张钧在给皇帝的奏章中明确指出,黄巾起义是外戚宦官专权逼出来的,他说:“张角所以能兴兵作乱,万人所以乐附之者,其源皆由十常侍多放父兄、子弟、婚宗、宾客典据州郡,辜确财利,侵略百姓,百姓之怨无所告诉,故谋议不轨,聚为‘盗贼’。”后被曹操、袁绍所歼。',
|
||||
|
@ -394,6 +396,210 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
},
|
||||
},
|
||||
skill:{
|
||||
//杨奉
|
||||
mbxuetu:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
usable:2,
|
||||
filter(event,player){
|
||||
if (player.countMark('mbxuetu_status') !== 1 && player.getStat('skill').mbxuetu) return false;
|
||||
if (!player.storage.mbxuetu) return player.countCards('he');
|
||||
return true;
|
||||
},
|
||||
zhuanhuanji2(skill, player){
|
||||
return player.countMark('mbxuetu_status') !== 1;
|
||||
},
|
||||
filterCard(card,player){
|
||||
if (player.countMark('mbxuetu_status') > 1) return false;
|
||||
if (player.countMark('mbxuetu_status') === 1) {
|
||||
if (player.getStorage('mbxuetu_used').includes(false)) return false;
|
||||
return true;
|
||||
}
|
||||
return !player.storage.mbxuetu;
|
||||
},
|
||||
selectCard(){
|
||||
const player = get.player();
|
||||
if (player.countMark('mbxuetu_status') > 1) return -1;
|
||||
if (player.countMark('mbxuetu_status') === 1) {
|
||||
if (player.getStorage('mbxuetu_used').includes(false)) return -1;
|
||||
if (player.getStorage('mbxuetu_used').includes(true)) return 1;
|
||||
return [0,1];
|
||||
}
|
||||
return !player.storage.mbxuetu ? 1 : -1;
|
||||
},
|
||||
check(card){
|
||||
return 6-get.value(card);
|
||||
},
|
||||
prompt(){
|
||||
const player = get.player(), storage = player.storage.mbxuetu, status = player.countMark('mbxuetu_status');
|
||||
if (status === 0) {
|
||||
if (storage) return '转换技。出牌阶段限一次,你可以失去1点体力,然后令一名角色摸两张牌。';
|
||||
return '转换技。出牌阶段限一次,你可以弃置一张牌,然后令一名角色回复1点体力。';
|
||||
}
|
||||
else if (status === 1) {
|
||||
return '出牌阶段各限一次。⒈你可以弃置一张牌,然后令一名角色回复1点体力;⒉你可以失去1点体力,然后令一名角色摸两张牌。';
|
||||
}
|
||||
else {
|
||||
if (storage) return '转换技。出牌阶段限一次,你可以摸一张牌,然后对一名角色造成1点伤害。';
|
||||
return '转换技。出牌阶段限一次,你可以回复1点体力,然后令一名角色弃置两张牌。';
|
||||
}
|
||||
},
|
||||
position:'he',
|
||||
filterTarget:true,
|
||||
onremove:['mbxuetu','mbxuetu_status'],
|
||||
derivation:['mbxuetu_achieve','mbxuetu_fail'],
|
||||
async content(event,trigger,player){
|
||||
const target = event.targets[0], storage = Boolean(player.storage.mbxuetu);
|
||||
const status = player.countMark('mbxuetu_status');
|
||||
player.changeZhuanhuanji('mbxuetu');
|
||||
if (status < 2) {
|
||||
if (!player.storage.mbxuetu_used) {
|
||||
player.when(['phaseUseAfter', 'mbweiming_achieveAfter']).then(() => {
|
||||
delete player.storage.mbxuetu_used;
|
||||
});
|
||||
}
|
||||
player.markAuto('mbxuetu_used', storage);
|
||||
if (status === 0 && !storage || status === 1 && event.cards.length) {
|
||||
await target.recover();
|
||||
}
|
||||
else {
|
||||
await player.loseHp();
|
||||
await target.draw(2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!storage) {
|
||||
await player.recover();
|
||||
await target.chooseToDiscard(2,true,'he');
|
||||
}
|
||||
else {
|
||||
await player.draw();
|
||||
await target.damage();
|
||||
}
|
||||
}
|
||||
},
|
||||
mark:true,
|
||||
marktext:'☯',
|
||||
intro:{
|
||||
content:(storage,player)=>{
|
||||
if (!player.countMark('mbxuetu_status')) {
|
||||
if (storage) return '转换技。出牌阶段限一次,你可以失去1点体力,然后令一名角色摸两张牌。';
|
||||
return '转换技。出牌阶段限一次,你可以弃置一张牌,然后令一名角色回复1点体力。';
|
||||
}
|
||||
else {
|
||||
if (storage) return '转换技。出牌阶段限一次,你可以摸一张牌,然后对一名角色造成1点伤害。';
|
||||
return '转换技。出牌阶段限一次,你可以回复1点体力,然后令一名角色弃置两张牌。';
|
||||
}
|
||||
}
|
||||
},
|
||||
ai:{
|
||||
order(item,player){
|
||||
const status = player.countMark('mbxuetu_status');
|
||||
if (status > 1) return Math.max(get.order({ name: 'guohe' }), get.order({ name: 'chuqibuyi' }));
|
||||
if (status === 1 || player.storage.mbxuetu) return 9;
|
||||
return 2;
|
||||
},
|
||||
result:{
|
||||
target(player,target){
|
||||
const status = player.countMark('mbxuetu_status');
|
||||
if (status > 1) {
|
||||
if (player.storage.mbxuetu) return -get.damageEffect(target, player, player) / 10;
|
||||
return -2;
|
||||
}
|
||||
if (status === 0 && player.storage.mbxuetu || status === 1 && !ui.selected.cards.length) return 2;
|
||||
const eff = get.recoverEffect(target, player, player);
|
||||
return eff > 0 ? 2 : (eff < 0 ? -get.sgnAttitude(player, target) : 0);
|
||||
},
|
||||
player(player,target){
|
||||
const status = player.countMark('mbxuetu_status');
|
||||
if (status > 1) {
|
||||
if (player.storage.mbxuetu) return 1;
|
||||
return get.recoverEffect(player, player) / 6;
|
||||
}
|
||||
if (status === 1 || !player.storage.mbxuetu) return -0.5;
|
||||
const eff = get.effect(player, {name: 'losehp'}, player, player);
|
||||
if (eff >= 0) return Math.min(1, eff / 2);
|
||||
const hp = player.getHp() + player.countCards('hes', card => {
|
||||
return player.canSaveCard(card, player);
|
||||
});
|
||||
return -1.5 * Math.max(0, 3 - hp);
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
mbweiming:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
player:'phaseUseBegin',
|
||||
},
|
||||
filter(event,player){
|
||||
return game.hasPlayer(current => {
|
||||
return !player.getStorage('mbweiming').includes(current);
|
||||
});
|
||||
},
|
||||
dutySkill:true,
|
||||
forced:true,
|
||||
direct:true,
|
||||
group:['mbweiming_achieve', 'mbweiming_fail'],
|
||||
async content(event, trigger, player){
|
||||
const targets = await player.chooseTarget('威命:记录一名未记录过的角色','当你杀死没有被记录过的角色后,则〖威命〗使命成功;如果在你杀死这些角色中的一名之前,有被记录过的角色死亡,则你〖威命〗使命失败。',true)
|
||||
.set('filterTarget', (card, player, target) => {
|
||||
return !player.getStorage('mbweiming').includes(target);
|
||||
})
|
||||
.set('ai', target => {
|
||||
if (target === player) return 1;
|
||||
return 1 + Math.sqrt(Math.abs(get.attitude(player, target))) * Math.abs(get.threaten(target)) / Math.sqrt(target.getHp() + 1) / Math.sqrt(target.countCards('hes') + 1);
|
||||
})
|
||||
.forResultTargets();
|
||||
if (targets && targets.length > 0) {
|
||||
const target = targets[0];
|
||||
player.logSkill('mbweiming', target);
|
||||
player.markAuto('mbweiming', target);
|
||||
}
|
||||
},
|
||||
intro:{
|
||||
content: '已记录$',
|
||||
},
|
||||
subSkill: {
|
||||
achieve: {
|
||||
audio:'mbweiming',
|
||||
trigger:{
|
||||
source:'dieAfter',
|
||||
},
|
||||
filter(event,player){
|
||||
return !player.getStorage('mbweiming').includes(event.player);
|
||||
},
|
||||
dutySkill:true,
|
||||
forced:true,
|
||||
skillAnimation:true,
|
||||
animationColor:'fire',
|
||||
async content(event, trigger, player){
|
||||
game.log(player,'成功完成使命');
|
||||
player.awakenSkill('mbweiming');
|
||||
player.storage.mbxuetu_status = 1;
|
||||
player.unmarkSkill('mbxuetu');
|
||||
await game.asyncDelayx();
|
||||
}
|
||||
},
|
||||
fail: {
|
||||
audio:'mbweiming',
|
||||
trigger:{
|
||||
global:'dieAfter',
|
||||
},
|
||||
filter(event,player){
|
||||
return player.getStorage('mbweiming').includes(event.player);
|
||||
},
|
||||
dutySkill:true,
|
||||
forced:true,
|
||||
async content(event, trigger, player){
|
||||
game.log(player,'使命失败');
|
||||
player.awakenSkill('mbweiming');
|
||||
player.storage.mbxuetu_status = 2;
|
||||
await game.asyncDelayx();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
//霍骏
|
||||
sidai:{
|
||||
audio:'twsidai',
|
||||
|
@ -15644,6 +15850,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
][['豹','鹰','熊','兔'].indexOf(zhoufa)];
|
||||
return str+'。';
|
||||
},
|
||||
mbxuetu(player){
|
||||
const xuetu=player.storage.mbxuetu, status = player.countMark('mbxuetu_status');
|
||||
if (status === 0) {
|
||||
if (!xuetu) return '转换技。出牌阶段限一次,<span class="bluetext">阴:你可以弃置一张牌,然后令一名角色回复1点体力;</span>阳:你可以失去1点体力,然后令一名角色摸两张牌。';
|
||||
return '转换技。出牌阶段限一次,阴:你可以弃置一张牌,然后令一名角色回复1点体力;<span class="bluetext">阳:你可以失去1点体力,然后令一名角色摸两张牌。</span>';
|
||||
}
|
||||
else if (status === 1) {
|
||||
return lib.translate.mbxuetu_achieve_info;
|
||||
}
|
||||
else {
|
||||
if (!xuetu) return '转换技。出牌阶段限一次,<span class="bluetext">阴:你可以回复1点体力,然后令一名角色弃置两张牌;</span>阳:你可以摸一张牌,然后对一名角色造成1点伤害。';
|
||||
return '转换技。出牌阶段限一次,阴:你可以回复1点体力,然后令一名角色弃置两张牌;<span class="bluetext">阳:你可以摸一张牌,然后对一名角色造成1点伤害。</span>';
|
||||
}
|
||||
},
|
||||
},
|
||||
perfectPair:{
|
||||
simazhao:['simayi','jin_simayi','jin_wangyuanji'],
|
||||
|
@ -16526,6 +16746,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sidai_info:'限定技,出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限。',
|
||||
jieyu:'竭御',
|
||||
jieyu_info:'结束阶段,你可以从弃牌堆中获得共X张不同牌名的基本牌(X为3-你上次发动〖竭御〗至今你成为其他角色使用伤害类卡牌目标的次数,且X至少为1)。',
|
||||
yangfeng:'杨奉',
|
||||
mbxuetu:'血途',
|
||||
mbxuetu_info:'转换技。出牌阶段限一次,阴:你可以弃置一张牌,然后令一名角色回复1点体力;阳:你可以失去1点体力,然后令一名角色摸两张牌。',
|
||||
mbxuetu_achieve:'血途·成功',
|
||||
mbxuetu_achieve_info:'出牌阶段各限一次。⒈你可以弃置一张牌,然后令一名角色回复1点体力;⒉你可以失去1点体力,然后令一名角色摸两张牌。',
|
||||
mbxuetu_fail:'血途·失败',
|
||||
mbxuetu_fail_info:'转换技。出牌阶段限一次,阴:你可以回复1点体力,然后令一名角色弃置两张牌;阳:你可以摸一张牌,然后对一名角色造成1点伤害。',
|
||||
mbweiming:'威命',
|
||||
mbweiming_info:'使命技,锁定技。①出牌阶段开始时,你记录一名未以此法记录过的角色。②成功:当你杀死一名未被〖威命①〗记录过的角色后,修改〖血途〗为成功版本。③失败:当一名被〖威命①〗记录过的角色死亡后,你修改〖血途〗为失败版本。',
|
||||
|
||||
mobile_standard:'手杀异构·标准包',
|
||||
mobile_shenhua_feng:'手杀异构·其疾如风',
|
||||
|
|
|
@ -1068,6 +1068,9 @@ window.noname_character_rank={
|
|||
'shen_xuzhu',
|
||||
'dc_jiangji',
|
||||
'dc_wangling',
|
||||
'yangfeng',
|
||||
'sb_xiahoudun',
|
||||
'sb_gaoshun',
|
||||
],
|
||||
b:[
|
||||
'junk_guanyu',
|
||||
|
|
339
character/sb.js
339
character/sb.js
|
@ -5,6 +5,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
name:'sb',
|
||||
connect:true,
|
||||
character:{
|
||||
sb_gaoshun:['male','qun',4,['sbxianzhen','sbjinjiu']],
|
||||
sb_xiahoudun:['male','wei',4,['sbganglie','sbqingjian']],
|
||||
sb_xunyu:['male','wei',3,['sbquhu','sbjieming']],
|
||||
sb_caopi:['male','wei',3,['sbxingshang','sbfangzhu','sbsongwei'],['zhu']],
|
||||
sb_guanyu:['male','shu',4,['sbwusheng','sbyijue']],
|
||||
|
@ -58,6 +60,331 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
}
|
||||
},
|
||||
skill:{
|
||||
//高顺
|
||||
sbxianzhen:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
usable:1,
|
||||
filterTarget(card,player,target){
|
||||
return target!==player;
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const target = event.targets[0];
|
||||
player.addTempSkill('sbxianzhen_attack', 'phaseUseAfter');
|
||||
player.markAuto('sbxianzhen_attack',target);
|
||||
},
|
||||
ai:{
|
||||
expose: 0.2,
|
||||
order(item,player){
|
||||
return get.order({ name: 'sha' }) + 1;
|
||||
},
|
||||
result:{
|
||||
target(player,target){
|
||||
if (!player.countCards('hs', card => {
|
||||
return get.name(card) === 'sha' && player.canUse(card, target, false);
|
||||
})) return -0.1;
|
||||
if (target.countCards('h') === 1 && player.canCompare(target)) return -2;
|
||||
return -1.5;
|
||||
},
|
||||
}
|
||||
},
|
||||
subSkill:{
|
||||
attack:{
|
||||
audio:'sbxianzhen',
|
||||
trigger:{player:'useCardToPlayered'},
|
||||
filter(event,player){
|
||||
if (event.card.name !== 'sha') return false;
|
||||
return player.getStorage('sbxianzhen_attack').includes(event.target) && event.target.isIn() && player.canCompare(event.target);
|
||||
},
|
||||
charlotte:true,
|
||||
onremove:true,
|
||||
logTarget:'target',
|
||||
check(event,player){
|
||||
return get.attitude(player, event.target) < 0;
|
||||
},
|
||||
prompt(event,player){
|
||||
return `陷阵:是否与${get.translation(event.target)}拼点?`
|
||||
},
|
||||
prompt2(event,player){
|
||||
const target = event.target, card = event.card;
|
||||
return `若你赢,${get.translation(card)}无视防具且不计入次数,且若你本回合未以此法造成过伤害,你对其造成1点伤害;<br>若其拼点牌为【杀】,则你获得之;<br>若其拼点牌为其最后的手牌,则${get.translation(card)}对其造成伤害时,此伤害+1。`
|
||||
},
|
||||
group:'sbxianzhen_record',
|
||||
async content(event,trigger,player){
|
||||
const target = trigger.target, card = trigger.card;
|
||||
const next = player.chooseToCompare(target);
|
||||
let result = await next.forResult();
|
||||
if (result.bool) {
|
||||
target.addTempSkill('qinggang2');
|
||||
target.storage.qinggang2.add(card);
|
||||
if (trigger.addCount !== false) {
|
||||
trigger.addCount = false;
|
||||
const stat = player.getStat('card');
|
||||
if (stat[card.name] && stat[card.name] > 0) stat[card.name]--;
|
||||
}
|
||||
game.log(card, '无视防具且不计入次数限制');
|
||||
if (!player.storage.sbxianzhen_damaged) {
|
||||
player.storage.sbxianzhen_damaged = true;
|
||||
player.when('phaseAfter').then(() => {
|
||||
delete player.storage.sbxianzhen_damaged;
|
||||
})
|
||||
await target.damage();
|
||||
await game.asyncDelayx();
|
||||
}
|
||||
}
|
||||
const toGain = [];
|
||||
for (const lose_list of next.lose_list) {
|
||||
let [comparer, cards] = lose_list;
|
||||
if (!Array.isArray(cards)) cards = [cards];
|
||||
if (comparer === player) continue;
|
||||
for (const card of cards) {
|
||||
if (get.name(card, comparer) == 'sha' && get.position(card, true) == 'd') {
|
||||
toGain.push(card);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (toGain.length) await player.gain(toGain, 'gain2');
|
||||
if (player.getStorage('sbxianzhen_recorded').includes(target)) {
|
||||
const id = target.playerid;
|
||||
const map = trigger.getParent().customArgs;
|
||||
if (!map[id]) map[id] = {};
|
||||
if (typeof map[id].extraDamage != 'number') {
|
||||
map[id].extraDamage = 0;
|
||||
}
|
||||
map[id].extraDamage++;
|
||||
game.log(card, '对', target, '造成的伤害+1');
|
||||
}
|
||||
},
|
||||
intro:{
|
||||
content:'本阶段对$使用牌无距离限制,且使用杀指定其为目标后可以与其拼点',
|
||||
},
|
||||
mod:{
|
||||
targetInRange(card,player,target){
|
||||
if(player.getStorage('sbxianzhen_attack').includes(target)) return true;
|
||||
},
|
||||
}
|
||||
},
|
||||
record:{
|
||||
trigger:{
|
||||
global:'loseAsyncEnd',
|
||||
},
|
||||
charlotte:true,
|
||||
silent:true,
|
||||
filter(event,player){
|
||||
if(event.getParent(2).name !== 'sbxianzhen_attack') return false;
|
||||
return game.hasPlayer(current => {
|
||||
if (current.countCards('h')) return false;
|
||||
const evt = event.getl(current);
|
||||
return evt && evt.hs && evt.hs.length;
|
||||
});
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
const targets = [];
|
||||
game.countPlayer(current => {
|
||||
if (current.countCards('h')) return false;
|
||||
const evt = trigger.getl(current);
|
||||
if(evt && evt.hs && evt.hs.length) targets.add(current);
|
||||
});
|
||||
if (!player.storage.sbxianzhen_recorded) {
|
||||
player.when('sbxianzhen_attackAfter').then(() => {
|
||||
delete player.storage.sbxianzhen_recorded;
|
||||
})
|
||||
}
|
||||
player.markAuto('sbxianzhen_recorded', targets);
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
sbjinjiu:{
|
||||
audio:2,
|
||||
inherit:'rejinjiu',
|
||||
group:['sbjinjiu_decrease','sbjinjiu_compare'],
|
||||
global:'sbjinjiu_global',
|
||||
subSkill:{
|
||||
decrease:{
|
||||
audio:'sbjinjiu',
|
||||
forced:true,
|
||||
trigger:{player:'damageBegin4'},
|
||||
filter(event,player){
|
||||
return event.getParent(2).jiu;
|
||||
},
|
||||
async content(event,trigger){
|
||||
trigger.num = 1;
|
||||
},
|
||||
ai:{
|
||||
filterDamage:true,
|
||||
skillTagFilter(player,tag,arg){
|
||||
return arg&&arg.jiu;
|
||||
},
|
||||
},
|
||||
},
|
||||
global:{
|
||||
mod:{
|
||||
cardEnabled(card,player){
|
||||
if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('sbjinjiu')) return false;
|
||||
},
|
||||
cardSavable(card,player){
|
||||
if(card.name=='jiu'&&_status.currentPhase&&_status.currentPhase!=player&&_status.currentPhase.hasSkill('sbjinjiu')) return false;
|
||||
},
|
||||
},
|
||||
},
|
||||
compare:{
|
||||
trigger:{
|
||||
global:'compare',
|
||||
},
|
||||
filter(event,player){
|
||||
const participant = [event.player];
|
||||
if(event.targets) participant.addArray(event.targets);
|
||||
else participant.add(event.target);
|
||||
if (!participant.includes(player)) return false;
|
||||
if (event.player !== player && event.card1 && event.card1.name === 'jiu') return true;
|
||||
if (event.target !== player && event.card2 && event.card2.name === 'jiu') return true;
|
||||
return false;
|
||||
},
|
||||
forced:true,
|
||||
direct:true,
|
||||
async content(event,trigger,player){
|
||||
for (const [role, ind] of [['player',1], ['target',2]]){
|
||||
const current = trigger[role], card = trigger[`card${ind}`];
|
||||
if (current !== player && card && card.name === 'jiu') {
|
||||
await player.logSkill('sbjinjiu_compare', current);
|
||||
game.log(current, '拼点牌点数视为','#yA');
|
||||
trigger[`num${ind}`] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
//夏侯惇
|
||||
sbganglie:{
|
||||
audio:2,
|
||||
enable:'phaseUse',
|
||||
filter(event,player){
|
||||
if (!event.sbganglie_enabledTargets) return false;
|
||||
return game.hasPlayer(current=>{
|
||||
return lib.skill.sbganglie.filterTarget(null,player,current);
|
||||
});
|
||||
},
|
||||
onChooseToUse(event){
|
||||
if (game.online || event.type !== 'phase') return;
|
||||
const player = event.player;
|
||||
const chosen = player.getAllHistory('useSkill', evt => evt.skill === 'sbganglie').map(evt => {
|
||||
return evt.targets;
|
||||
}).flat();
|
||||
const targets = player.getAllHistory('damage', evt => evt.source && evt.source.isIn()).map(evt => evt.source).unique();
|
||||
targets.removeArray(chosen);
|
||||
event.set('sbganglie_enabledTargets',targets);
|
||||
},
|
||||
filterTarget(card,player,target){
|
||||
return get.event('sbganglie_enabledTargets').includes(target);
|
||||
},
|
||||
async content(event,trigger,player){
|
||||
event.targets[0].damage(2);
|
||||
},
|
||||
ai:{
|
||||
order:6,
|
||||
result:{
|
||||
target:-2,
|
||||
}
|
||||
},
|
||||
},
|
||||
sbqingjian:{
|
||||
audio:2,
|
||||
trigger:{
|
||||
global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter'],
|
||||
},
|
||||
forced:true,
|
||||
locked:false,
|
||||
filter(event,player){
|
||||
if (player.getExpansions('sbqingjian').length >= Math.max(1, player.getHp() - 1)) return false;
|
||||
if (event.name !== 'cardsDiscard') {
|
||||
if (event.position !== ui.discardPile) return false;
|
||||
if (!game.hasPlayer(current => {
|
||||
const evt = event.getl(current);
|
||||
return evt.cards && evt.cards.length > 0;
|
||||
})) return false;
|
||||
}
|
||||
else{
|
||||
const evt = event.getParent();
|
||||
if (evt.relatedEvent && evt.relatedEvent.name === 'useCard') return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
group:'sbqingjian_give',
|
||||
async content(event,trigger,player){
|
||||
let cards = trigger.cards.slice();
|
||||
const maxNum = Math.max(1, player.getHp() - 1);
|
||||
const myLen = player.getExpansions('sbqingjian').length, cardsLen = trigger.cards.length;
|
||||
const overflow = myLen + cardsLen - maxNum;
|
||||
if (overflow > 0) cards.randomRemove(overflow);
|
||||
const next = player.addToExpansion(cards, 'gain2');
|
||||
next.gaintag.add('sbqingjian');
|
||||
await next;
|
||||
},
|
||||
marktext:'俭',
|
||||
intro:{
|
||||
content:'expansion',
|
||||
markcount:'expansion',
|
||||
},
|
||||
subSkill:{
|
||||
give:{
|
||||
audio:'sbqingjian',
|
||||
trigger:{player:'phaseUseEnd'},
|
||||
filter(event,player){
|
||||
return player.getExpansions('sbqingjian').length > 0;
|
||||
},
|
||||
forced:true,
|
||||
locked:false,
|
||||
async content(event,trigger,player){
|
||||
if (_status.connectMode) game.broadcastAll(() => { _status.noclearcountdown = true });
|
||||
const given_map = {};
|
||||
const expansions = player.getExpansions('sbqingjian');
|
||||
let result;
|
||||
while (true) {
|
||||
if (expansions.length > 1) {
|
||||
result = await player.chooseCardButton('清俭:请选择要分配的牌', true, expansions, [1, expansions.length]).set('ai', button => {
|
||||
if (ui.selected.buttons.length) return 0;
|
||||
return get.value(button.link, get.player());
|
||||
}).forResult();
|
||||
}
|
||||
else if (expansions.length === 1) result = { bool: true, links: expansions.slice(0) };
|
||||
else return;
|
||||
if (!result.bool) return;
|
||||
const toGive = result.links;
|
||||
result = await player.chooseTarget(`选择一名角色获得${get.translation(toGive)}`, expansions.length === 1).set('ai', target => {
|
||||
const att = get.attitude(get.player(), target);
|
||||
if (get.event('toEnemy')) return Math.max(0.01, 100 - att);
|
||||
else if (att > 0) return Math.max(0.1, att / (1 + target.countCards('h') + (get.event().getParent().given_map[target.playerid] || 0)));
|
||||
else return Math.max(0.01, (100 + att) / 100);
|
||||
}).set('toEnemy', get.value(toGive[0], player, 'raw') < 0).forResult();
|
||||
if (result.bool) {
|
||||
expansions.removeArray(toGive);
|
||||
if (result.targets.length) {
|
||||
const id = result.targets[0].playerid;
|
||||
if (!given_map[id]) given_map[id] = [];
|
||||
given_map[id].addArray(toGive);
|
||||
}
|
||||
if (!expansions.length) break;
|
||||
}
|
||||
}
|
||||
if (_status.connectMode) game.broadcastAll(() => { delete _status.noclearcountdown; game.stopCountChoose() });
|
||||
const gain_list = [];
|
||||
for (const i in given_map) {
|
||||
const source = (_status.connectMode ? lib.playerOL : game.playerMap)[i];
|
||||
player.line(source, 'green');
|
||||
gain_list.push([source, given_map[i]]);
|
||||
game.log(source, '获得了', given_map[i]);
|
||||
}
|
||||
await game.loseAsync({
|
||||
gain_list,
|
||||
giver: player,
|
||||
animate: 'gain2',
|
||||
}).setContent('gaincardMultiple');
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
//荀彧
|
||||
sbquhu:{
|
||||
audio:2,
|
||||
|
@ -6720,6 +7047,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
sbquhu_info:'出牌阶段限一次。你可以选择两名有牌的其他角色,你与这些角色同时将任意张牌扣置于武将牌上。若你以此法扣置的牌唯一最少,则扣置牌最多的其他角色获得你扣置的牌,且这些角色获得各自扣置的牌;否则这两名角色中扣置牌较多的角色对较少的角色造成1点伤害,获得你扣置的牌,然后这些角色将各自扣置的牌置入弃牌堆(若这两名角色扣置的牌数相同,视为与你逆时针最近座次的角色扣置牌较多)。',
|
||||
sbjieming:'节命',
|
||||
sbjieming_info:'当你受到伤害后,你可以令一名角色摸三张牌,然后其可以弃置任意张牌。若其弃置的牌数不大于X,你失去1点体力(X为你已损失的体力值,至少为1)。',
|
||||
sb_xiahoudun:'谋夏侯惇',
|
||||
sb_xiahoudun_prefix:'谋',
|
||||
sbganglie:'刚烈',
|
||||
sbganglie_info:'出牌阶段,你可以选择一名本局游戏对你造成过伤害且未以此法选择过的角色,你对其造成2点伤害。',
|
||||
sbqingjian:'清俭',
|
||||
sbqingjian_info:'①当有一张牌不因使用而进入弃牌堆后,若你的“清俭”数小于X,你将此牌置于你的武将牌上,称为“清俭”(X为你的体力值-1,且至少为1)。②出牌阶段结束时,你将所有“清俭”分配给任意角色。',
|
||||
sb_gaoshun:'谋高顺',
|
||||
sb_gaoshun_prefix:'谋',
|
||||
sbxianzhen:'陷阵',
|
||||
sbxianzhen_info:'出牌阶段限一次。你可以选择一名其他角色,你于本阶段获得如下效果:⒈你对其使用牌无距离限制;⒉当你使用【杀】指定其为目标后,你可以与其拼点:若你赢,此【杀】无视防具且不计入次数,且若你本回合未以此法造成过伤害,你对其造成1点伤害;若其拼点牌为【杀】,则你获得之;若其拼点牌为其最后的手牌,则此【杀】对其造成伤害时,此伤害+1。',
|
||||
sbjinjiu:'禁酒',
|
||||
sbjinjiu_info:'锁定技。①你的【酒】均视为【杀】。②当你受到酒【杀】的伤害时,你令此伤害减至1。③其他角色不能于你的回合内使用【酒】。④当一名其他角色的拼点牌亮出后,若你为发起者或参与者且此牌为【酒】,则此牌的点数视为A。',
|
||||
|
||||
sb_zhi:'谋攻篇·知',
|
||||
sb_shi:'谋攻篇·识',
|
||||
|
|
|
@ -8896,7 +8896,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.expandSkills(list2);
|
||||
for(var k=0;k<list2.length;k++){
|
||||
var info=lib.skill[list2[k]];
|
||||
if(!info||!info.trigger||!info.trigger.player||info.silent||info.limited||info.juexingji||info.zhuanhuanji||info.hiddenSkill||info.dutySkill||(info.zhuSkill&&!player.isZhu2())) continue;
|
||||
if(get.is.zhuanhuanji(list2[k],player)) continue;
|
||||
if(!info||!info.trigger||!info.trigger.player||info.silent||info.limited||info.juexingji||info.hiddenSkill||info.dutySkill||(info.zhuSkill&&!player.isZhu2())) continue;
|
||||
if(info.trigger.player==name2||Array.isArray(info.trigger.player)&&info.trigger.player.includes(name2)){
|
||||
if(info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue;
|
||||
if(info.init) continue;
|
||||
|
@ -8976,7 +8977,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
game.expandSkills(list2);
|
||||
for(var k=0;k<list2.length;k++){
|
||||
var info=lib.skill[list2[k]];
|
||||
if(!info||!info.enable||info.charlotte||info.limited||info.juexingji||info.zhuanhuanji||info.hiddenSkill||info.dutySkill||(info.zhuSkill&&!player.isZhu2())) continue;
|
||||
if(get.is.zhuanhuanji(list2[k],player)) continue;
|
||||
if(!info||!info.enable||info.charlotte||info.limited||info.juexingji||info.hiddenSkill||info.dutySkill||(info.zhuSkill&&!player.isZhu2())) continue;
|
||||
if((info.enable=='phaseUse'||(Array.isArray(info.enable)&&info.enable.includes('phaseUse')))||(info.enable=='chooseToUse'||(Array.isArray(info.enable)&&info.enable.includes('chooseToUse')))){
|
||||
if(info.ai&&(info.ai.combo||info.ai.notemp||info.ai.neg)) continue;
|
||||
if(info.init||info.onChooseToUse) continue;
|
||||
|
|
|
@ -2337,7 +2337,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xuzhu:['xuzhu','re_xuzhu'],
|
||||
zhangliao:['zhangliao','re_zhangliao'],
|
||||
sp_zhangliao:['sp_zhangliao','yj_zhangliao','jsrg_zhangliao'],
|
||||
xiahoudun:['xiahoudun','re_xiahoudun','xin_xiahoudun'],
|
||||
xiahoudun:['xiahoudun','re_xiahoudun','xin_xiahoudun','sb_xiahoudun'],
|
||||
liubei:['liubei','re_liubei','sb_liubei','dc_liubei','junk_liubei'],
|
||||
guanyu:['guanyu','re_guanyu','ol_sb_guanyu','sb_guanyu','ps_guanyu','old_guanyu','junk_guanyu'],
|
||||
zhangfei:['zhangfei','re_zhangfei','old_zhangfei','xin_zhangfei','sb_zhangfei','tw_zhangfei','jsrg_zhangfei','yj_zhangfei'],
|
||||
|
|
|
@ -11535,22 +11535,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filter:function(event,player){
|
||||
return game.hasPlayer(function(current){
|
||||
return current.getSkills(null,false,false).filter(function(i){
|
||||
var info=get.info(i);
|
||||
return info&&info.zhuanhuanji;
|
||||
return get.is.zhuanhuanji(i,current);
|
||||
}).length>0;
|
||||
});
|
||||
},
|
||||
filterTarget:function(card,player,target){
|
||||
return target.getSkills(null,false,false).filter(function(i){
|
||||
var info=get.info(i);
|
||||
return info&&info.zhuanhuanji;
|
||||
return get.is.zhuanhuanji(i,current);
|
||||
}).length>0;
|
||||
},
|
||||
content:function(){
|
||||
'step 0'
|
||||
var list=target.getSkills(null,false,false).filter(function(i){
|
||||
var info=get.info(i);
|
||||
return info&&info.zhuanhuanji;
|
||||
return get.is.zhuanhuanji(i,current);
|
||||
});
|
||||
if(list.length==1){
|
||||
event._result={control:list[0]};
|
||||
|
@ -11584,8 +11581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
filter:function(event,player){
|
||||
return game.hasPlayer(function(current){
|
||||
return current.getSkills(null,false,false).filter(function(i){
|
||||
var info=get.info(i);
|
||||
return info&&info.zhuanhuanji;
|
||||
return get.is.zhuanhuanji(i,current);
|
||||
}).length>0;
|
||||
});
|
||||
},
|
||||
|
|
|
@ -7936,8 +7936,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
audio:2,
|
||||
getZhuanhuanji:function(player,bool){
|
||||
var skills=player.getSkills(null,false,false).filter(function(i){
|
||||
var info=get.info(i);
|
||||
return info&&!info.charlotte&&info.zhuanhuanji;
|
||||
const list=get.skillCategoriesOf(i);
|
||||
return !list.includes('Charlotte')&&list.includes('转换技');
|
||||
});
|
||||
if(!bool) return skills;
|
||||
if(!skills.length) return 'none';
|
||||
|
|
|
@ -13912,7 +13912,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
|
|||
xusheng:['xusheng','xin_xusheng','re_xusheng','old_xusheng'],
|
||||
wuguotai:['wuguotai','xin_wuguotai','re_wuguotai'],
|
||||
lingtong:['lingtong','xin_lingtong','ol_lingtong','re_lingtong','old_lingtong'],
|
||||
gaoshun:['gaoshun','xin_gaoshun','ol_gaoshun','re_gaoshun','old_gaoshun'],
|
||||
gaoshun:['gaoshun','xin_gaoshun','ol_gaoshun','re_gaoshun','sb_gaoshun','old_gaoshun'],
|
||||
zhonghui:['zhonghui','xin_zhonghui','re_zhonghui','old_zhonghui','pe_zhonghui'],
|
||||
wangyi:['wangyi','re_wangyi','old_wangyi'],
|
||||
caozhang:['caozhang','ol_caozhang','re_caozhang','xin_caozhang'],
|
||||
|
|
|
@ -76,6 +76,7 @@ var pinyin_dict_polyphone = {
|
|||
"血诏": "xuè ",
|
||||
"血偿": "xuè ",
|
||||
"血拼": "xuè ",
|
||||
"血途": "xuè ",
|
||||
"行殇": "xíng ",
|
||||
"节行": "jié xíng",
|
||||
"天行": " xíng",
|
||||
|
|
|
@ -281,7 +281,7 @@ export class Get extends Uninstantable {
|
|||
if (info.zhuSkill) list.add('主公技');
|
||||
if (info.limited) list.add('限定技');
|
||||
if (info.juexingji) list.add('觉醒技');
|
||||
if (info.zhuanhuanji) list.add('转换技');
|
||||
if (get.is.zhuanhuanji(skill, player)) list.add('转换技');
|
||||
if (info.hiddenSkill) list.add('隐匿技');
|
||||
if (info.clanSkill) list.add('宗族技');
|
||||
if (info.groupSkill) list.add('势力技');
|
||||
|
|
|
@ -443,4 +443,18 @@ export class Is extends Uninstantable {
|
|||
if (info.locked) return true;
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* @param { string } skill
|
||||
* @param { Player } player
|
||||
* @returns
|
||||
*/
|
||||
static zhuanhuanji(skill, player) {
|
||||
const info = lib.skill[skill], { zhuanhuanji } = info;
|
||||
if ('zhuanhuanji2' in info) {
|
||||
const { zhuanhuanji2 } = info;
|
||||
if (typeof zhuanhuanji2 === 'function') return Boolean(zhuanhuanji2(skill, player));
|
||||
return Boolean(zhuanhuanji2);
|
||||
}
|
||||
return Boolean(zhuanhuanji);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue