noname/node_modules/noname-typings/Skill.d.ts

1832 lines
64 KiB
TypeScript
Raw Normal View History

/** 时机 */
declare interface SkillTrigger {
/**
*
*
*
*/
global?: string | string[];
/**
*
*
* ;
*
*
*/
player?: string | string[];
/**
*
*/
target?: string | string[];
/**
*
*/
source?: string | string[];
}
/**
* hookTrigger在不同方法中触发的方法接口
*
*
*/
declare interface SkillHookTrigger {
/**
* hookTrigger相关
*
*
*
* createTrigger中最终步骤中hookTrigger配置才调用到
*
* true时triggerAfter
*
* @param event
* @param player
* @param triggername
*/
after?(event: GameEventPromise, player: Player, triggername: string): boolean;
/**
* hookTrigger相关
*
* filterTrigger中执行filter有些类似
*/
block?(event: GameEventPromise, player: Player, name: string, skill: string): boolean;
/**
* hookTrigger相关
*
* logSkill中执行logSkill都会触发
*/
log?: ThreeParmFun<Player, string, Target[], void>;
}
/** mod的配置 */
declare interface Mod {
/**
*
* @param card:Card
* @param player:Player
*/
cardDiscardable?(card: Card, player: Player): boolean | void;
/**
* ()
* cardEnabled一起使用
*
* player.canUselib.filter.cardEnabledlib.filter.filterCard
*
* @param card:Card
* @param player:Player
*/
cardEnabled?(card: Card, player: Player): boolean | void;
/**
*
*
* event.backup中技能信息触发viewAScardEnabledmod的触发cardRespondablemod的触发_savecardSavable的mod触发
*/
cardEnabled2?(card: Card, player: Player): boolean | void;
/**
* 使
*
* cardEnabled一起使用
*
* @param card Card
* @param player Player
* @param num 使
*/
cardUsable?(card: Card, player: Player, num: number): boolean | number | void;
/**
*
*
* cardEnabled一起使用
*
* @param card:Card
* @param player:Player
*/
cardRespondable?(card: Card, player: Player): boolean | void;
/**
*
*
* cardEnabled一起使用
*
* cardEnabled不同mod检测_save
*
* cardEnabled的检测
*
* filterCard
*
* @param card:Card
* @param player:Player
* @param taregt:Target
*/
cardSavable?(card: Card, player: Player, taregt: Player): boolean | void;
/**
*
*
*
*/
globalTo?(from: Player, to: Player, current): number | void;
/**
*
*
*
*/
globalFrom?(from: Player, to: Player, distance: number): number | void;
/**
*
* @param from
* @param to
* @param range
*
* globalFrom同理
*/
attackFrom?(from: Player, to: Player, range: number): number | void;
/**
*
* @param from
* @param to
* @param range
*
* globalTo同理
*/
attackTo?(from: Player, to: Player, range: number): number | void;
/** 手牌上限 */
maxHandcard?(player: Player, num: number): number | void;
/**
*
*
* card
*
* player
*
* range
* range[1];
*/
selectTarget?(card: Card, player: Player, range: Select): void;
/**
* 使使
*
* @param card:Card
*
* @param player:Player 使
*
* @param target:Target
*/
playerEnabled?(card: Card, player: Player, target: Player): boolean | void;
/**
*
*
* card
*
* player使
*
* target
*/
targetEnabled?(card: Card, player: Player, target: Player): boolean | void;
/**
*
*
* @param card:Card
*
* @param player:Player (使)
*
* @param target:Target
*
* @return bool值可以不接受使;number
*/
targetInRange?(card: Card, player: Player, target: Player): boolean | number | void;
/**
*
*
* @param card:Card
*
* @param player:Player
*/
ignoredHandcard?(card: Card, player: Player): boolean | void;
/** 过滤可以被丢弃的牌 */
canBeDiscarded?(card: Card, player: Player, target: Player, eventName: string): boolean | void;
/** 过滤可以获得的牌 */
canBeGained?(card: Card, player: Player, target: Player, eventName: string): boolean | void;
canBeReplaced?(card: Card, source: Player, player: Player): boolean | void;
/**
*
*/
suit?(card: Card, suit: string): string | void;
/**
*
*
* mod.effect会受该结果影响
* @param player
* @param result
*/
judge?(player: Player, result: JudgeResultData);
//2020-2-23版本
/**
* 使使
*
* content期间设置
*
* judgechooseToCompareMultiplechooseToCompare
*
* judge事件中 callback事件 judgeEnd和judgeAfter时机之前对判定牌进行操作
*
* event.callback存在judgeCallback
*
* ,compareMultiplecompare
*
* callback就是作为以上事件的content使用
*/
callback?: ContentFuncByAll | GeneratorContentFuncByAll | OldContentFuncByAll;
//无懈相关主要在_wuxie中此时应时无懈询问阶段检测触发卡牌以下对应mod
/*
card:trigger.card
player:当前事件的玩家
target:trigger.target
current:当前game.filterPlayer
*/
//触发阶段为:phaseJudge(判定阶段)
/** 是否能在判定阶段使用无懈 */
wuxieJudgeEnabled?(card: Card, player: Player, current: Player): boolean | void;
/** 是否能在判定阶段响应无懈 */
wuxieJudgeRespondable?(card: Card, player: Player, current: Player): boolean | void;
//非判定阶段触发
/** 是否能使用无懈 */
wuxieEnabled?(card: Card, player: Player, target: Player, current: Player): boolean | void;
/** 是否能响应无懈 */
wuxieRespondable?(card: Card, player: Player, target: Player, current: Player): boolean | void;
//94版本
/** 改变卡牌名字 用于get.name*/
cardname?(card: Card, player: Player): string | void;
/** 改变卡牌伤害属性 用于get.nature*/
cardnature?(card: Card, player: Player): string | void | boolean;
/** 对特定角色使用牌的次数限制用于优化【对特定角色使用牌无次数限制】的机制【v1.9.105】 */
cardUsableTarget?(card: Card, player: Player, target: Player): boolean | void;
/** 用于get.value对最后得返回value结果做处理 */
aiValue?(player: Player, card: Card, num: number): number | void;
/** 用于get.order对最后得返回order结果做处理 */
aiOrder?(player: Player, card: Card, num: number): number | void;
//player.inRange新增
/** 在玩家范围内,即target是否在player的攻击范围内 */
inRange?(from: Player, to: Player): boolean | void;
/** 在目标范围内,即player是否在source的攻击范围内 */
inRangeOf?(from: Player, to: Player): boolean | void;
maxHandcardBase?(player: Player, num: number): number | void;
/**
*
* v1.9.108.6~
*/
cardChongzhuable?(card: Card, player: Player): boolean | void;
aiValue?(player: Player, card: Card, num: number): number | void;
aiUseful?(player: Player, card: Card, num: number): number | void;
attackRange?(player: Player, num: number): number | void;
}
/** 技能 */
declare interface Skill {
/**
*
* 使
*/
name?: string;
/**
* key使......
*
* key
*/
// key?:string;
/**
*
*
* inherit继承技能中有的属性
* audioinherit的名字
*
*/
inherit?: string;
//声音
/**
*
*
* audionameaudioinfoinfo.audio
*
* ext:使\extension\
*
* +
*
*
* audioinfo为该技能的audio;
*
* [audioname,audioinfo]
*
* audioinfo为数字时1使\audio\skill内的配音audioname1~audioinfo序号;
*
* audioinfo为布尔值true或者字符串非空时game.playSkillAudio(audioname)使\audio\skill内的配音;
*
* falsenull结果
*
* 若info.audio:true使game.playSkillAudio(audioname)
*
* (game.trySkillAudio为准)
*
* info.audio是字符串
*
* 1.,ext:扩展包的名字:
*
* 2.audioinfo
*
* info.audio是数组[,]
*
* 1."true"2."技能名+1-数字范围"
*
* info.audio是数字"audioname+1-数字范围";
*/
audio?: number | string | boolean | [string, number];
/**
*
*
* 使audioname覆盖上面解析出来的audionameaudioname为audioname_玩家武将名,
*
* \audio\audioname_玩家武将名
*
*
* info.audioname存在player"audioname_玩家名"
*/
audioname?: string[];
//【v1.9.102】
/**
* audioname2机制
*
* key值为人物的name
*/
audioname2?: SMap<string>;
/** 强制播放音频 */
forceaudio?: boolean;
//时机与触发相关
/**
*
*
*
*
* 1enableevent._trigger;
*
* 2triggercontent
*/
trigger?: SkillTrigger;
/**
* true时_hookTrigger
*
*
*
* addSkillTriggerplayer._hookTrigger中
*
* createTriggerlogSkillfilterTriggers时执行所有挂载在_hookTrigger所有对应的hookTrigger
*
* 使after,block,log
*/
hookTrigger?: HookTrigger;
/** 同时机技能发动的优先度 */
priority?: number;
//基本都在核心createTriggeraddTriggertrigger中逻辑触发相关属于重要得属性
/**
* createTriggeraddTriggertrigger相关
*
*
* 1.truehiddenSkills隐藏技能列表中createTrigger
*
*
* 2.event.addTriggerevent.trigger中truepriority+1
* priority影响*100
*
* 3.true
* forced没设置到true
* popup没设置到false
*
* ,
*/
silent?: boolean;
/**
*
*
* forced+nopop ,
*
* silent为truetruetriggerHidden
*
* createTrigger中event._result={bool:true}info.check进行ai检测
*/
direct?: boolean;
/**
*
*
*
*
* checkcheck方法检测
*/
frequent?: boolean | string | TwoParmFun<Trigger, Player, number | boolean>;
/**
* 2
*
* lib.config.autoskilllist
*
* ui.click.autoskill2中执行,
*
* UI上作用frequent参数
*/
subfrequent?: string[];
/**
*
*
* loop之间的时间,game.delayx的调用情况
*/
autodelay?: boolean | number | TwoParmFun<Trigger, Player, number>;
/** 第一时刻执行?(将发动顺序前置到列表前) */
firstDo?: boolean;
/** 最后一刻做?(将发动顺序置于列表后方) */
lastDo?: boolean;
/**
*
*
* true为固定触发mod里的技能
*
*
* game.check检测用的标准属性之一
*/
forced?: boolean;
/**
*
*/
forceDie?: boolean;
/**
*
*
* arrangeTrigger过滤出多个同时机的触发技能时createTrigger中
*
* falsefalse才会;
*
* createTriggerstep 3使player.popup弹出该提示文本
*/
popup?: boolean | string;
/**
* player是否logSkill('此技能').
*
* true
*
* logSkill 使
* true为不
*/
nopop?: boolean;
/**
*
*
* createTrigger中step 3
*
* @param trigger
* @param player
*/
oncancel?(trigger: GameEventPromise, player: Player): void;
//触发内容基本触发流程
/**
* content之前执行
*
* chooseToUsestep2中执行
* chooseButton一致chooseButton不存在时且game.online为false
* @param config
*/
precontent?: ContentFuncByAll | GeneratorContentFuncByAll | OldContentFuncByAll;
/**
* content之前触发内容
*
* useSkill中使用content之前
*/
contentBefore?: ContentFuncByAll | GeneratorContentFuncByAll | OldContentFuncByAll;
/**
*
*
*
* createTriggerstep3中创建当前技能的事件content为事件content作为触发内容
*
*
* useSkill中创建当前技能的事件
* (step x分割开执行逻辑步骤)
*
* contentevent一般是不具备
* trigger触发事件中获取
*/
content?: ContentFuncByAll | GeneratorContentFuncByAll | OldContentFuncByAll;
/**
* content之后触发内容
*
* useSkill中使用content之后
*/
contentAfter?: ContentFuncByAll | GeneratorContentFuncByAll | OldContentFuncByAll;
//技能初始化与移除:
/**
*
*
* addSkillTriggertriggeronly取值为true
*
* addSkill处理this.addSkillTrigger(skill)使
*/
init?(player: Player, skill: string): void;
/**
*
*
* addSkill中调用
*/
init2?(player: Player, skill: string): void;
/** 在执行player.disableSkill丧失技能时若该属性为true则执行技能的onremove */
ondisable?: boolean;
/**
*
* string时:
*
* storageplayer.storage中该技能的缓存
*
*
* discardplayer.storage[skill]game.cardsDiscardplayer.storage[skill]
*
* losediscard
*
* true时player.storage[skill]
*
* player.storagestorage
*
* disableSkill中info.ondisableonremove必须是方法skill参数
*/
onremove?: TwoParmFun<Player, string, void> | string | string[] | boolean;
/** 是否持续的附加技能在removeSkill中使用 */
keepSkill?: boolean;
//以下3个属性基本功能时一致在某些模式下是否能使用只使用一个就差不多
/**
*
*
* _info
*/
forbid?: string[];
/** 与forbid相反只能在指定玩法模式下才能被使用其他逻辑一致 */
mode?: string[];
/** 当前模式下是否能使用返回false则不能使用其实和forbid逻辑一致 */
available?(mode: string): boolean;
//技能相关设置:
/**
*
*
*
*
*
*
* undist使
*
* player.getNext获取下一位玩家player.getPrevious确定上一位玩家player.distance计算玩家距离
*/
group?: string | string[];
/**
*
*
* ;
*
* _子技能
*
* _子技能
*/
subSkill?: SMap<Skill>;
/**
* ?:
*
* global的值为技能名
*
* + _
*/
global?: string | string[];
/**
* game.addGlobalSkill中使用
*
* global技能
*/
globalSilent?: boolean;
//技能相关设置=>功能设置
/**
* 使
*
* 使filter内filter与变量动态判断
*
* createTriggerstep3中触发计数
*
* counttriggerplayer.storage.counttrigger[]
*/
usable?: number;
/**
* 使
*
* _roundcountgroup
*
* roundStart使
*/
round?: number;
/** 用于“技能名_roundcount”技能中当前技能不可使用时“n轮后”xxx中xxx的部分显示即后面部分 */
roundtext?: string;
/** 增加显示的信息这部分时增加“n轮后”前面部分 */
addintro?(storage: SMap<any>, player: Player): string;
/** 延迟的时间 */
delay?: number | boolean;
/**
*
*
* falseget.is.lockedfalse了
*
* 1.info.trigger&&info.forced2.info.mod3.info.locked
*
* fengyinfalse时get.is.locked返回为falsetrue则正常逻辑
*/
locked?: boolean;
/** 是否是旧版技能值为true添加到lib.config.vintageSkills中可以实现新/旧版技能切换如果该为true则“原翻译名_alter”即作为当前的翻译 */
alter?: boolean;
//锁定技
/**
* mod技能的设置
*
*
* */
mod?: Mod;
//【重点】标记的key需要和技能名一致游戏内都是通过对应skill取得对应的标记key即player.storage[skill]
//限定技与觉醒技与技能标记
/*
filter中!player.storage.xxx==true判定
content内设置player.storage.xxx=true
player.awakenSkill("xxx");
*/
/**
*
*
* true时
*
* mark设置为true
*
* intro.content设置为limited
*
* skillAnimation设置为true
*
* init设置为初始化玩家缓存的该技能名标记为false
*/
limited?: boolean;
/**
*
*
*
*
* epiclegend
*/
skillAnimation?: boolean | string;
/** 是否只显示文字特效 */
textAnimation?: boolean;
/** 动画文字(可用于觉醒文字) */
animationStr?: string;
/** 动画文字颜色(觉醒文字颜色) */
animationColor?: string;
/**
*
*
* (使)
*/
juexingji?: boolean;
/**
*
*
* false markSkill
*
* unmarkSkill
*
* mark的常量值"card","cards","image","character"UI上
*
* character使
*
* autoupdateMark时unmarkSkill(?????)
*/
mark?: boolean | string;
/** 标记显示文本,一般为一个字 */
marktext?: string;
/** 标记显示内容 */
intro?: {
/** 自定义mark弹窗的显示内容 */
mark?: ThreeParmFun<Dialog, GameStorageItem, Player, string | void>;
/** 用于info.mark为“character”添加移除标记时log显示的标记名好像意义不大 */
name?: string | TwoParmFun<GameStorageItem, Player, string>;
name2?: string | TwoParmFun<GameStorageItem, Player, string>;
/**
*
* cards时显示标记内的牌.
*
* :
*
* "mark":
*
* "card":
*
* "cards":
*
* "limited":(info.limited为true下回默认设置这个)
*
* "time":
*
* "turn":
*
* "cardCount":
*
* "info":
*
* "character":
*
* "player":
*
* "players":
*
*
*
* get.storageintro 使,type
*
* info.mark为character
*
* :info.mark为true时使
*
* 使
*
* "#"(this.storage[skill]),
*
* "&"get.cnNumber(this.storage[skill])(使get.cnNumber来获取的数量),
*
* "$"get.translation(this.storage[skill])()
*
*
*/
content?: string | ((storage: GameStorageItem, player: Player, skill: string) => string | void);
/**
*
*
* player.updateMark时使用this.storage[i+'_markcount']
*/
markcount?: number | TwoParmFun<GameStorageItem, Player, number | string> | string;
/** 是否不启用技能标记计数 */
nocount?: boolean;
/**
* unmarkSkill执行
*
* throw
*
* 使
*
*
*/
onunmark?: TwoParmFun<GameStorageItem, Player, void> | string | boolean;
// id?:string; //id名字需带“subplayer”用于特殊模式显示信息用
};
//主公技
/**
*
*
* true时
*
* (使)
*/
zhuSkill?: boolean;
//主动技能(主动使用技能,包含技能使用的相关操作配置)
/**
* 使
*
*
*
* info.enable==event.name看出trigger差不多
*
* game.checkevent.nameinfo.enable;
*
*
*
* phaseUse使
*
* chooseToRespond
*
* chooseToUse使/使
*/
enable?: string | string[] | OneParmFun<Trigger, boolean>;
/**
* 使
*
* useCard中使用
*
* true的话player.popup
*
* player.popup({使name使nature}'metal')
*/
popname?: boolean;
//视为技(转换卡牌的技能)
/**
* ()
*
*
*
* v1.9.102使viewAs使backup,ok;
*/
2024-01-27 14:29:32 +00:00
viewAs?: string | CardBaseUIData | ((cards: Card[], player: Player) => string | VCard | CardBaseUIData);
/**
*
* @param player
*/
viewAsFilter?(player: Player): boolean | void;
/**
* 使
*
* result.cards是视为前的牌
*
* useResultuseCard,useSkill;
*
*
*
* @param result
* @param player
*/
onuse?(result: BaseCommonResultData, player: Player): void;
/**
*
*
* 使
*
* 使
*
* chooseToUse
*
* chooseToRespond
*/
chooseButton?: ChooseButtonConfigData;
/**
*
*
* (,backup的技能名backup的视为技能)
*
* chooseToUsestep1中使用event._aiexclude中
*
*
* chooseToUsestep3中chooseButton的backup方法
*
* _backuplib.skill中
*
* sourceSkill中
*/
sourceSkill?: string;
//具体功能的处理
//弃牌,失去牌(默认不设置discardlose则直接player.discard弃置选择的牌)
//discardlose其中一个false都会为非视为技走lose事件失去卡牌且提供丰富的参数设置
/**
*
*
* useSkill中调用
*
*
*
* falseundefined != false结果为truetrue效果一致
*/
discard?: boolean;
/**
* player.lose
*
* discard调用时机一致useSkill中
* false
*/
lose?: boolean;
/**
*
*
*
*
* givegive2throwthrow2
*
*
*/
prepare?: string | ((cards: Card[], player: Player, targets: Target[]) => string | void);
/** 在lose事件中使用触发执行“lose_卡牌名”事件的content */
onLose?: OldContentFuncByAll | OldContentFuncByAll[];
/**
* lose事件中使用equipsonLose才生效
* lose_卡牌名onLose
*/
filterLose?: TwoParmFun<Card, Player, boolean>;
/** 在lose事件中使用取值为true作用貌似强制延迟弃牌动画处理 */
loseDelay?: boolean;
/**
* lose失去牌阶段
*
* false
*
* false
*
* lose绑定一起使用false时_triggered为null
*/
//新版本出牌阶段主动技的新参数均仅在discard为false且lose不为false时有效且losetrigger不为false
//是默认情况下执行player.lose(cards,ui.special),以下为
losetrigger?: boolean;
/** 让角色失去卡牌的过程中强制视为正面朝上失去(losetrigger不为false时既默认情况下生效) */
visible?: boolean;
/**
* (position)
*
* ui的成员ui[info.loseTo]
*
* "special",
*
* "special","discardPile","cardPile","ordering""control"(,)
*/
loseTo?: string;
/**
* ui.special(loseTo影响)
*
* lose事件的toStorage为truestorage中
*/
toStorage?: boolean;
/**
* v1.9.108.6
*/
insert?: boolean;
/**
* (线)
*
* chooseToRespond中使用
*/
prerespond?(result, player: Player): void;
/**
* (使)
*
* respond中使用
*/
onrespond?(event: GameEventPromise, player: Player): void;
/**
* true则可以发动此技能
*
* filterTrigger,game.check中处理,false则不处理true结果
*
*
*
* 1.game.check,filter,event指的是当前game.check处理的事件
*
* 2.lib.filter.filterTrigger,filter,event指的是当前的触发事件
* @param event event._trigger,trigger时机event为触发该技能时机时的事件
* @param player
* @param name event.triggernamelib.filter.filterTrigger中才传该值
*/
filter?(event: GameEventPromise, player: Player, name?: string): boolean | void | null;
/**
*
*
* 使ui.click.target/player....
*
*
*
* target
*
*
* targetprompt:['出杀','出闪'],
*/
targetprompt?: string | string[] | OneParmFun<Target, string>;
/**
* ()
*
* true为可选择多名目标
*/
multitarget?: boolean | number;
/**
* 线
* fireFF9244thunder8DD8FFgreen8DFFD8
*/
line?: string | { color: number[] } | boolean;
/** 是否显示多条指引线 */
multiline?: boolean;
/**
* 使,
*
* chooseToUse content中调用
*
* event.set(key)
*
* 使
*
*
* @param event
*/
onChooseToUse?(event: GameEventPromise): void;
/**
*
*
* chooseToCompare和chooseToCompareMultiplestep2中使用
* @param player
*/
onCompare?(player: Player): Card[];
/**
* chooseToRespond时使用chooseToRespond事件player所有的技能该接口
*
* chooseToRespond事件时使
* v1.9.106
* @param event
*/
onChooseToRespond?(event: GameEventPromise): void;
//核心
//event.bakcup设置的信息game.check使用到的一些参数其实就是把game.check需要的一些参数设置到技能中作为check时的条件
// 追加这个主要用于game.check检测中取代当前事件的条件若没有主动申请检测则其实用不上
// 在表现上,主要用于:主动技,视为技
/*
filterButton
selectButton
filterTarget
selectTarget
filterCard
selectCard
position
forced
complexSelect?:boolean;
complexCard?:boolean;
complexTarget
ai1
ai2
*/
//目标
/**
*
*
*
*
* -1,
*
* ,[1,Infinity]
*
* ()=>number
*/
selectCard?: number | Select | NoneParmFum<number | Select>;
/**
*
*
*
*
* -1
*
*
*/
selectTarget?: number | Select | (() => number | Select);
/**
*
*
* 使便
*
* 使
*
* get.filter处理成事件的filterCard的方法
*
* true使ui.click.skill,ai.basic.chooseCard
*
* game.check时viewAsfilterCard,event参数使
*
*/
filterCard?: boolean | CardBaseUIData | TwoParmFun<Card, Player, boolean> | boolean;
/**
* 使mod检测
*
* true;
*
* event.backup使用
*
* info.viewAs有值的时候
*
* filterCardfilterCard
* 使cardEnabled2mod检测卡牌是否可使用
*
*
* cardEnabled2
*
* chooseToUse使,使cardEnabled使mod检测
*
* chooseToRespond使cardRespondablemod检测
*/
ignoreMod?: boolean;
/**
*
*/
filterTarget?: ((card: Card, player: Player, target: Player) => boolean) | boolean;
/**
*
* 'h', 'e', 'j'
*/
position?: string;
/**
*
*
* 使
*
* /
*/
prompt?: string | TwoParmFun<Trigger, Player, String>;
//| TwoParmFun<Trigger, Player, String> | TwoParmFun<Links, Player, string> //好像没见到用
/**
*
*
* createTriggerstep1中event.prompt2
*
* boolean类型false,prompt2使lib.translate[_info]
*
* prompt提示下的提示
*/
prompt2?: string | TwoParmFun<Trigger, Player, String> | boolean;
/**
* ui.click.skill中使用event.skillDialog不存在dialog作为skillDialog
*
* 使info信息代替
*/
promptfunc?: TwoParmFun<Trigger, Player, String>;
/** 表示这次描述非常长(涉及用了h5文本)设置为true重新执行ui.update()设置skillDialog.forcebutton为true */
longprompt?: boolean;
//补充game.check相关参数的声明
/** 过滤不可选择按钮 */
filterButton?(button: Button, player: Player): boolean;
/** 按钮的可选数量大多数情况下默认1 */
selectButton?: number | Select | NoneParmFum<number | Select>;
complexSelect?: boolean;
/** 复合选牌:即每选完一次牌后,都会重新下一次对所有牌的过滤 */
complexCard?: boolean;
complexTarget?: boolean;
/** 一般作为chooseCard相关ai */
ai1?: Function;
/** 一般作为chooseTarget相关ai */
ai2?: Function;
/**
*
*
* 使player.hasUsableCardplayer.hasWuxie
*
*
*
* muniu
* @param player
* @param name
*/
hiddenCard?(player: Player, name: string): boolean | void;
/** 录像相关game.videoContent.skill中相关 */
video?(player: Player, data: string | any[]): void;
process?(player: Player): void;
//在skillDisabled中根据以下5个属性检测技能是否是不能使用若其中有一个时true都排除掉在chooseSkill,选择获得技能时筛选列表
//在getStockSkills中有前3个标签属性的技能也是无法获取的
/**
*
*
* skillintro中使用
*
*
*/
unique?: boolean;
/** 临时技能在die死亡时会被移除 */
temp?: boolean;
/** 子技能标签在subSkill的技能中会默认标记该属性为true */
sub?: boolean;
/** 固有技不能被removeSkill移除 */
fixed?: boolean;
/** 一次性技能在resetSkills时直接移除该技能 */
vanish?: boolean;
/**
*
*
* fengyinbaiban
*
* clearSkills时all为true
*
*
*/
charlotte?: boolean;
/** 在clearSkills中使用,标记此标记,永远不会被该方法删除,该标记独立使用,一般其他方法没有对其进行处理 */
superCharlotte?: boolean;
/** 作用不明并没有什么用与ui相关在skillintro中使用,值为true */
gainable?: boolean;
/** 在nodeintro中使用添加classname:thundertext,值为true */
thundertext?: boolean;
//在nodeintro中使用的这几个配置都没什么意义
/** 设置nodeintro的点击事件 */
clickable?(player: Player): void;
/** 过滤点击,应该是过滤弹出面板是否能点击,具体作用日后细究 */
clickableFilter?(player: Player): boolean;
/** 技能名不带【】括号 */
nobracket?: boolean;
//日志相关:
/** 是否在历史日志中显示取值未false不显示 */
logv?: boolean;
/**
*
*
* useSkill时notarget...;
*
* useCard时falseplayer.logSkill;
*/
log?: boolean | string;
/**
*
*
* trigger事件的一个玩家元素"player","source","target"...
*
* ,
*
* prompt
*/
logTarget?: string | TwoParmFun<GameEventPromise, Player, string | Player | Player[] | null>;
/**
* logTarget显示触发者的目标日志
*
* createTriggerstep3中使用false使logTargetlogSkill;
*/
logLine?: boolean;
//技能的信息显示:
/**
*
*
* addCard时_infoaddCard很少使用
*
* subSkill子技能_子技能名_info()
*
* game逻辑无关,
*/
description?: string;
/** 该技能的描述自定义和game逻辑无关,用于自己的解析逻辑) */
// infoDescription?:string;
/**
*
*
*
*/
derivation?: string[] | string;
/**
* card配置
* contect模式得卡card
*/
forceLoad?: boolean;
//AI相关
/** ai的详细配置 */
ai?: SkillAI;
/**
* ai用于检测的方法
*
* eventcard,button
*
* ai.basic使用的check方法(choose系列时用的ai自动选择)
*
* 1ai如何选牌
*
* ai.basic.chooseCard中使用
*
* 2ai如何选按钮
*
* ai.basic.chooseButton中使用
*
* 3ai如何选玩家
*
* ai.basic.chooseTarget中使用
*
*
*
*
*
*
*
* createTrigger中使用,trigger事件player玩家
*
* 1info.frequent=='check'
*
* 2ai是否发动这个技能true则发动此技能createTrigger过程中ai如何chooseBool这个技能
*
*
*
* a.0<=0是对敌方发动:return get.attitude(player,event.player)>0;
*
* b.8return 8-get.value(card); 广86-ai.get.value(card);
*
*
*
* event:GameEvent,player:Player
*
* 使card:Card
*
*
*/
check?: (card: Card) => number | boolean | void;
check?: (event: GameEventPromise, player: Player) => number | boolean | void;
check?: () => number | boolean | void;
// check?(...any:any):number|boolean;
// /** ai用于检测的方法用于主动使用触发技能 */
// check?(card:Card):number|boolean;
// /** ai用于检测的方法用于事件触发技能 */
// check?(event:GameEventPromise,player:Player):number|boolean;
// check?():number|boolean;
// check?:OneParmFun<Card,number|boolean> | OneParmFun<Button,number|boolean> | OneParmFun<Player,number|boolean> | TwoParmFun<GameEventPromise,Player,number|boolean>;
//event.addTrigger,默认对于技能优先度的标记rule<card<equipsilent默认比同级多1优先度
/** 装备技能 */
equipSkill?: boolean;
/** 卡牌技能 */
cardSkill?: boolean;
/** 规则技能 */
ruleSkill?: boolean;
2024-01-29 07:13:34 +00:00
zhuanhuanji?: 'number' | boolean | ((player: Player, skill: string) => any);
/**
*
*/
categories?: (skill: string, player: Player) => string[];
2024-01-27 14:29:32 +00:00
//日后还有很多属性要添加的
[key: string]: any;
}
/** ai的配置信息 */
declare interface SkillAI {
//****************************技能标签 start****************************** */
//技能标签(告诉ai的细致的信息用来自己处理时使用甚至可以视为一般标记使用)
/*
player.hasSkillTag('xxxx')
info.ai.skillTagFilter
ai[tag],
info.ai[tag]==arg
true才可以成功0
*/
//无视防具系列:
/**
* 1
*
* filter中有所实现
*/
unequip?: boolean;
/**
* 2
*
*
*
*/
unequip2?: boolean;
/** 无视防具3 */
unequip_ai?: boolean;
/**
*
* AI手里没,;
*
*/
respondShan?: boolean;
/**
*
* AI手里没,;
*
*/
respondSha?: boolean;
/**
* createTrigger中使用
*/
nofrequent?: boolean;
/**
*
* AI检测是否是卖血流(if(target.hasSkillTag('maixie')))AI就会卖血
*/
maixie?: boolean;
/**
* 2
* chooseDrawRecover AI主动优先选择回血
*/
maixie_hp?: boolean;
/**
* 3
*/
maixie_defend?: boolean;
/**
*
* damageAI使使
*/
nohujia?: boolean;
/**
*
* get.buttonValue中,
* ui的选择项
*/
noe?: boolean;
/**
*
* get.buttonValue中,AI检测是否含有标签,AI不要拆迁()
* ui的选择项
*/
noh?: boolean;
/**
*
* player.canCompare
*/
noCompareSource?: boolean;
/**
*
* player.canCompare
*/
noCompareTarget?: boolean;
/**
* lib.filter.cardRespondable,
*/
norespond?: boolean;
/**
*
* lib.filter.wuxieSwap的检测
*/
noautowuxie?: boolean;
/**
*
* _save全局技能中检测
* 3v1.9.108.2.1
*/
save?: boolean;
/**
*
*
*
*/
respondTao?: boolean;
/**
*
* game.check的检测
*/
nomingzhi?: boolean;
/**
* card.ai.basic.order的默认优先度
*/
reverseEquip?: boolean;
/** 非身份,国战使用,濒死阶段,有该标记,可以强行进行复活求帮助 */
revertsave?: boolean;
/** 改变判定 */
rejudge?: boolean;
//inRange方法相关标记影响距离计算
/** 逆时针计算距离 */
left_hand?: boolean;
/** 顺时针计算距离 */
right_hand?: boolean;
/** 计算距离时,无视本单位 */
undist?: boolean;
//其余一些有些少出场的:
/** 不会受到火焰伤害 */
nofire?: boolean;
/** 不会受到雷电伤害 */
nothunder?: boolean;
/** 不会受到伤害 */
nodamage?: boolean;
/** 使用毒会有收益 */
usedu?: boolean;
/** 不受毒影响 */
nodu?: boolean;
notrick?: boolean;
notricksource?: boolean;
useShan?: boolean;
noShan?: boolean;
nolose?: boolean;
nodiscard?: boolean;
/** 玩家不响应无懈 */
playernowuxie?: boolean;
/** 【响应酒】当你需要使用“酒”时,标记技能可响应 */
jiuOther?: boolean;
/** 【伤害减免】当你收到伤害时,伤害会减免 */
filterDamage?: boolean;
//个人额外扩展:
/** 不能被横置 */
noLink?: boolean;
/** 不能被翻面 */
noTurnover?: boolean;
//【v1.9.102】
/**
*
*
*
* viewHandcard的技能标签即可skillTagFilter即可实现对特定角色的手牌可见
*
* ai:{
viewHandcard:true,
skillTagFilter:function(player,tag,arg){ //arg为目标通过调整skillTagFilter即可实现对特定角色的手牌可见
if(player==arg) return false;
}, //可看见除自己外所有人的手牌;
}
*/
viewHandcard?: boolean;
/**
*
*
* get.effecttarget时target的result
*/
ignoreSkill?: boolean;
//********************************技能标签 end********************************** */
//ai基础属性值
/**
* ai发动技能的优先度
* 使
*/
order?: number | TwoParmFun<SkillOrCard, Player, number | void>;
/**
* 0~1
* 0~1,AI判断身份,AI中未写expose其他AI将会无法判断其身份
*/
expose?: number;
/**
*
* ,1,0~4(threaten值为3)
*/
threaten?: number | ((player: Player, target: Target) => number | void);
/**
*
* identity决定att不同
* ,att值为6,att值为10;
*
*/
// attitude?: number;
/**
*
* ai出牌
* ,,AI会倾向于最大效果的目标/;
*
* ai有某技能时某牌的使用效果发生改变
*
* ai里面的effect是上帝视角,target不代表目标角色,player也不代表拥有此技能的玩家本身,
effect是写给别的AI看的,target代表玩家本身,player代表其他人,
* target()
*
*
*
如果技能发动无须指定目标: effect=result*ai.get.attitude(player,player);
=使 * 使att+ * 使att; ,;
=使 * 使att+ * 使att; ,;
n,使n',n>0,n<0代表负收益;
4,使n;
3
1. a,a*n;
2. 2[a,b],a*n+b;
3. 4[a,b,c,d],a*n+b,使c*n'+d;
n代表火杀对目标的效果
1. return 0;
2. return [0,1];
3. 使return [0,0,1,-1];
content:function(){
game.log(player,'对',target,'的att是',ai.get.attitude(player,target));
game.log(player,'对',player,'的att是',ai.get.attitude(player,player));
game.log(player,'对',target,'发动【测试】的eff是',ai.get.effect(target,'测试',player,player));
game.log(player,'对',target,'使用【杀】的eff是',ai.get.effect(target,{name:'sha'},player,player));
},
effect的返回值
effect有3种可能的返回值,124
1个数字n:收益*n
2[a,b]:a*+b
4[a,b,c,d]:a*+b使c*+d
* zeroplayertarget [0,0,0,0] zerotarget [0,0
"下面以target:function(){},别人对你使用杀为例,括号里为可能的技能描述"
return -1;//负影响(杀对你造成伤害时改为等量回复)
return 0;//无影响(杀对你无效)
return 2;//2倍影响(杀对你的伤害翻倍)
return 0.5;//一半影响(杀对你的伤害减半)
return [1,1];//正常影响+1(成为杀的目标摸一张牌)
return [1,-1];//正常影响-1(成为杀的目标弃一张牌)
return [0,1];//无影响+1(杀对你造成伤害时改为摸一张牌);
return [0,-1];//无影响-1(杀对你造成伤害时改为弃一张牌)
return [1,0,0,-1];//对你正常影响,对使用者无影响-1(刚烈)
return [1,1,1,1];//对双方正常影响+1(你成为杀的目标时你和使用者各摸一张牌)
*/
effect?: {
/**
* 使/
*
* "zeroplayer","zerotarget","zeroplayertarget",指定最终结果的:对使用者的收益值,0
* @param result1 ai.result.player的结果
*/
player?(card: Card, player: Player, target: Player, result1: number): string | number | number[] | void | boolean;
/**
* /
*
* "zeroplayer","zerotarget","zeroplayertarget",指定最终结果的:对使用者的收益值,0
* @param result2 ai.result.target的结果
*/
target?(card: Card, player: Player, target: Player, result2: number): string | number | number[] | void | boolean;
};
/**
*
* AI声明默认为0()
* ;
*
*
* get.result中使用
*
*/
result?: {
/**
* ai如何选择目标
* ;
* ;
* player(player){}player可以在这里进行判断......
*/
target?: number | ((player: Player, taregt: Player, card: Card) => number | void | boolean);
/**
* get.effect_use中target
*/
target_use?: number | ((player: Player, taregt: Player, card: Card) => number | void) | boolean;
/**
* ai是否发动此技能
* ;
*
*/
player?: number | ((player: Player, taregt: Player, card: Card) => number | void | boolean);
/**
* get.effect_use中player
*/
player_use?: number | ((player: Player, taregt: Player, card: Card) => number | void | boolean);
/**
* true时equipcard.ai.result.target
*/
keepAI?: boolean,
}
/**
*
*
* 使ai什么时候可以发动视为技true/false
* player.hasSkillTag,player.hasGlobalTag中使用
*/
skillTagFilter?(player: Player, tag: string, arg: any): boolean | void;
//------------------------------主要给卡牌使用的ai配置也共享上面一些配置--------------------------------
//若武将使用以下配置,一般为该武将的“视为技”时使用,其配置对应“视为”的卡牌
//这些时在外的简写一般详细处理在basic内
/**
* ai
*
*
* tao [8,6.5,5,4]>shan [7,2]>wuxie [6,4]>sha,nanman [5,1]>wuzhong 4.5>shunshou,tiesuo 4
* wugu,wanjian,juedou,guohe,jiedao,lebu,huogong,bingliang 1>shandian 0
* value的结果为一个数组时card在手牌中位置value
*/
useful?: number;
/**
* 使ai
*
* ai会选用的牌范围越广86-ai.get.value(card);
*
* wuzhong 9.2>shunshou 9>lebu 8>tao [8,6.5,5,4]>shan [7,2]>wuxie [6,4]>juedou 5.5>guohe,nanman,wanjian 5>sha [5,1]
* tiesuo,bingliang 4>huogong [3,1]>jiedao 2>taoyuan,shandian 0
* value的结果为一个数组时card在手牌中位置value
*/
value?: number | number[] | TwoParmFun<Player, any, number>;
/** 该装备的价值 */
equipValue?: number | TwoParmFun<Card, Player, number>;
/** 主要是使用在card的ai属性武将技能可以无视 */
basic?: {
/** 该装备的价值同equipValue优先使用equipValue没有则ai.basic.equipValue */
equipValue?: number | TwoParmFun<Card, Player, number>;
/** 优先度 */
order?: number | TwoParmFun<Card, Player, number>;
/** 回合外留牌的价值(该牌可用价值),number为当前事件玩家的手牌的下标 */
useful?: SAAType<number> | TwoParmFun<Card, number, SAAType<number>>;
/** 该牌的使用价值 */
value?: SAAType<number> | FourParmFun<Card, Player, number, any, SAAType<number>>;
[key: string]: SAAType<number> | string | Function;
};
//ai的tag【可用于标记卡牌的属性】
//get.tag(卡牌,标签名) 检测是否有指定卡牌标签:
/** 主要是使用在card中独立制定的一些标记来描述自身得一些特性,有则标记1默认是没有实质上用bool也行可能有少许标记参与运算 */
tag?: {
//比较常用:(以下为自己得理解)
/** 【响应杀】:即手上没有杀时,也有可能响应杀 */
respondSha?: CardTagType;
/** 【响应闪】:即手上没有闪时,也有可能响应闪 */
respondShan?: CardTagType;
/** 【不会受到伤害】 */
damage?: CardTagType;
/** 【不受元素伤害】 */
natureDamage?: CardTagType;
/** 【不受雷属性伤害】 */
thunderDamage?: CardTagType;
/** 【不受冰属性伤害】【v1.9.107】 */
iceDamage?: CardTagType;
/** 【不受火属性伤害】 */
fireDamage?: CardTagType;
/** 【可以指定多个目标】 */
multitarget?: CardTagType;
/** 【回复体力】 */
recover?: CardTagType;
/** 【失去体力】 */
loseHp?: CardTagType;
/** 【可获得牌】 */
gain?: CardTagType;
/** 【可自救】 */
save?: CardTagType;
/** 【可弃牌】,即弃牌可以有收益 */
discard?: CardTagType;
/** 【失去牌】 */
loseCard?: CardTagType;
/** 【多个目标结算时(?存疑)】 */
multineg?: CardTagType;
/** 【可多次/再次判定/改变判定】 */
rejudge?: CardTagType;
draw?: CardTagType;
norepeat?: CardTagType;
/** 【装备替换价值】 */
valueswap?: CardTagType;
[key: string]: CardTagType;
}
/**
*
*
* get.effect中使用
* @param player
* @param target
* @param card
*/
canLink?(player: Player, target: Player, card: Card): boolean;
//日后还有很多属性要添加的
[key: string]: any;
}
/** 卡牌的tag的类型作为方法的第二参数很少用上一般用于二级类型判断 */
type CardTagType = number | TwoParmFun<Card, string, boolean | number> | OneParmFun<Card, boolean | number>;