-

公告
精灵图鉴页面将于2026年6月3日 00:00-08:00完成迁移,评论内容将同步转移至新页面。新页面启用全新命名规则,避免同名精灵页面被覆盖。若迁移后出现少量显示异常,我们将于当日12:00-16:00统一处理。由此带来不便,敬请谅解。

本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~ 编辑帮助:目录 • BWIKI反馈留言板


请选择语言:

版本250722.2
全站通知:

模块:SkillGui

来自赛尔号WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:SkillGui/doc创建

-- ModuleSkillGui
local p = {}

-- 定义关键词和标签映射
p.keywords = {
    -- 增伤
    ["(伤害威力)翻倍"] = {"增伤"},
    ["威力为%d+倍"] = {"增伤"},
    ["威力增加%d+"] = {"增伤"},
    ["伤害(额外)提(升)"] = {"增伤"},
    ["伤害(额外)提(升高)"] = {"增伤"},
    ["忽略对手%d+%%的双防值"] = {"增伤"},
    ["对方能力等级越高,此技能威力越大"] = {"增伤"},
    ["对方体力小于%d+%%时威力加倍"] = {"增伤"},
    ["后出手的话威力为%d+倍"] = {"增伤"},
    ["先出手的话威力为%d+倍"] = {"增伤"},
    ["自身HP小于%d+%%时威力为%d+倍"] = {"增伤"},
    ["威力随机,随机范围%d+~%d+"] = {"增伤"},
    ["伤害提升"] = {"增伤"},
    ["伤害翻倍"] = {"增伤"},
    ["必定造成双倍伤害"] = {"增伤"},
    ["伤害为%d+倍"] = {"增伤"},
    ["造成的伤害提高"] = {"增伤"},
    ["造成的伤害越大"] = {"增伤"},
    ["造成的伤害加倍"] = {"增伤"},
    ["造成的伤害翻倍"] = {"增伤"},
    ["造成的伤害增加"] = {"增伤"},
    ["造成的伤害两倍"] = {"增伤"},
    ["造成的伤害三倍"] = {"增伤"},
    ["造成的伤害四倍"] = {"增伤"},
    ["造成的伤害五倍"] = {"增伤"},
    ["造成的伤害六倍"] = {"增伤"},

    -- 恢复
    ["回复自己的体力"] = {"恢复"},
    ["恢复自己的体力"] = {"恢复"},
    ["回复己方体力"] = {"恢复"},
    ["恢复己方体力"] = {"恢复"},
    ["回复自身体力"] = {"恢复"},
    ["恢复自身体力"] = {"恢复"},
    ["回复%d+点体力"] = {"恢复"},
    ["恢复%d+点体力"] = {"恢复"},
    ["回复固定体力值"] = {"恢复"},
    ["恢复固定体力值"] = {"恢复"},
    ["回复自身所有PP值"] = {"恢复"},
    ["恢复自身所有PP值"] = {"恢复"},
    ["回复自身最大体力的%d+%%"] = {"恢复"},
    ["恢复自身最大体力的%d+%%"] = {"恢复"},
    ["回复自身体力的%d+%%"] = {"恢复"},
    ["恢复自身体力的%d+%%"] = {"恢复"},
    ["给予对方损伤的一半会回复自己的体力"] = {"恢复"},
    ["伤害数值的%d+%%恢复自身体力"] = {"恢复"},
    ["恢复自身最大体力的%d+%%"] = {"恢复"},
    ["随机恢复%d+到%d+点生命值"] = {"恢复"},
    ["恢复.*体力"] = {"恢复"},

    -- 先制
    ["先制%+%d+"] = {"先制"},
    ["下回合自身先制[+-]%d+"] = {"先制"},
    ["下回合对手先制[+-]%d+"] = {"先制"},
    ["先制%s*额外%s*%+%d+"] = {"先制"},

    -- 强化
    ["自身攻击等级%-%d+"] = {"强化"},
    ["自身防御等级%-%d+"] = {"强化"},
    ["自身特攻等级%-%d+"] = {"强化"},
    ["自身特防等级%-%d+"] = {"强化"},
    ["自身速度等级%-%d+"] = {"强化"},
    ["自身体力等级%-%d+"] = {"强化"},
    ["自身命中等级%-%d+"] = {"强化"},
    ["自身攻击等级%+%d+"] = {"强化"},
    ["自身防御等级%+%d+"] = {"强化"},
    ["自身特攻等级%+%d+"] = {"强化"},
    ["自身特防等级%+%d+"] = {"强化"},
    ["自身速度等级%+%d+"] = {"强化"},
    ["自身体力等级%+%d+"] = {"强化"},
    ["自身命中等级%+%d+"] = {"强化"},
    ["自身全属性等级%+%d+"] = {"强化"},
    ["自身随机%d+项属性等级%+%d+"] = {"强化"},
    ["攻击等级%+%d+"] = {"强化"},
    ["防御等级%+%d+"] = {"强化"},
    ["特攻等级%+%d+"] = {"强化"},
    ["特防等级%+%d+"] = {"强化"},
    ["速度等级%+%d+"] = {"强化"},
    ["体力等级%+%d+"] = {"强化"},
    ["命中等级%+%d+"] = {"强化"},
    ["全属性等级%+%d+"] = {"强化"},
    ["随机%d+项属性等级%+%d+"] = {"强化"},
    ["自身.*全属性%+"] = {"强化"},
    ["自身.*等级%+"] = {"强化"},
    ["自身攻击%+"] = {"强化"},
    ["自身防御%+"] = {"强化"},
    ["自身特攻%+"] = {"强化"},
    ["自身特防%+"] = {"强化"},
    ["自身速度%+"] = {"强化"},
    ["能力提升状态翻倍"] = {"强化"},

    -- 弱化
    ["使对手攻击等级%-%d+"] = {"弱化"},
    ["使对手防御等级%-%d+"] = {"弱化"},
    ["使对手特攻等级%-%d+"] = {"弱化"},
    ["使对手特防等级%-%d+"] = {"弱化"},
    ["使对手速度等级%-%d+"] = {"弱化"},
    ["使对手体力等级%-%d+"] = {"弱化"},
    ["使对手命中等级%-%d+"] = {"弱化"},
    ["使对手全属性等级%-%d+"] = {"弱化"},
    ["使对手随机%d+项属性等级%-%d+"] = {"弱化"},
    ["改变对手攻击等级%-%d+"] = {"弱化"},
    ["改变对手防御等级%-%d+"] = {"弱化"},
    ["改变对手特攻等级%-%d+"] = {"弱化"},
    ["改变对手特防等级%-%d+"] = {"弱化"},
    ["改变对手速度等级%-%d+"] = {"弱化"},
    ["改变对手体力等级%-%d+"] = {"弱化"},
    ["改变对手命中等级%-%d+"] = {"弱化"},
    ["改变对手全属性等级%-%d+"] = {"弱化"},
    ["改变对手随机%d+项属性等级%-%d+"] = {"弱化"},
    ["对手攻击等级%-%d+"] = {"弱化"},
    ["对手防御等级%-%d+"] = {"弱化"},
    ["对手特攻等级%-%d+"] = {"弱化"},
    ["对手特防等级%-%d+"] = {"弱化"},
    ["对手速度等级%-%d+"] = {"弱化"},
    ["对手体力等级%-%d+"] = {"弱化"},
    ["对手命中等级%-%d+"] = {"弱化"},
    ["对手全属性等级%-%d+"] = {"弱化"},
    ["对手随机%d+项属性等级%-%d+"] = {"弱化"},
    ["对手.*全属性%-[^,,;;%.。]"] = {"弱化"},
    ["对方.*全属性%-[^,,;;%.。]"] = {"弱化"},
    ["对手.*等级%-%d+"] = {"弱化"},
    ["对方.*等级%-%d+"] = {"弱化"},
    ["对手攻击等级%-"] = {"弱化"},
    ["对手防御等级%-"] = {"弱化"},
    ["对手特攻等级%-"] = {"弱化"},
    ["对手特防等级%-"] = {"弱化"},
    ["对手速度等级%-"] = {"弱化"},
    ["对方攻击等级%-"] = {"弱化"},
    ["对方防御等级%-"] = {"弱化"},
    ["对方特攻等级%-"] = {"弱化"},
    ["对方特防等级%-"] = {"弱化"},
    ["对方速度等级%-"] = {"弱化"},
    ["反馈自身能力下降"] = {"弱化"},
    ["反馈自身的能力下降"] = {"弱化"},
    ["能力下降返还给对手"] = {"弱化"},
    ["能力下降反馈给对手"] = {"弱化"},
    ["附加.*对手.*能力下降"] = {"弱化"},
    ["附加.*对方.*能力下降"] = {"弱化"},
    ["对手.*能力值%-"] = {"弱化"},
    ["对手.*能力等级%-"] = {"弱化"},
    ["对方.*能力值%-"] = {"弱化"},
    ["对方.*能力等级%-"] = {"弱化"},

    -- 消强
    ["增强效果消失"] = {"消强"},
    ["消除能力提升状态"] = {"消强"},
    ["消除对手能力提升状态"] = {"消强"},

    -- 必中
    ["必中"] = {"必中"},
    ["必定命中"] = {"必中"},

    -- 反伤
    ["(反伤伤害反馈反馈给对手)"] = {"反伤"},
    ["将所受的伤害%d+倍反馈给对手"] = {"反伤"},
    ["伤害反弹给对手"] = {"反伤"},
    ["伤害反馈给对手"] = {"反伤"},
    ["反弹.*对手.*伤害"] = {"反伤"},
    ["反馈.*对手.*伤害"] = {"反伤"},
    ["反弹.*对方.*伤害"] = {"反伤"},
    ["反馈.*对方.*伤害"] = {"反伤"},
    ["反弹.*伤害.*给对手"] = {"反伤"},
    ["反馈.*伤害.*给对手"] = {"反伤"},
    ["反弹.*受到伤害"] = {"反伤"},
    ["反馈.*受到伤害"] = {"反伤"},
    ["反馈伤害值.*的百分比伤害"] = {"反伤"},
    ["免疫.*并直接扣除对手等量体力"] = {"反伤"},
    ["受攻击时反弹"] = {"反伤"},

    -- 免伤
    ["伤害转化为体力"] = {"免伤"},
    ["伤害减免"] = {"免伤"},
    ["下回合受到的伤害转化为自身体力"] = {"免伤", "恢复"},
    ["免疫.*伤害"] = {"免伤"},

    -- 降疗
    ["无法通过技能恢复体力"] = {"降疗"},
    ["无法通过自身技能恢复体力"] = {"降疗"},
    ["无法通过自身技能恢复自身体力"] = {"降疗"},
    ["对手.*无法.*恢复.*体力"] = {"降疗"},

    -- 解弱
    ["解除自身能力下降状态"] = {"解弱"},
    ["解除自身的能力下降状态"] = {"解弱"},

    -- 闪避
    ["躲避"] = {"闪避"},
    ["必定miss"] = {"闪避"},
    ["使得对方的技能失效"] = {"闪避"},
    ["对自身必定miss"] = {"闪避"},
    ["对自身miss"] = {"闪避"},
    ["对自身MISS"] = {"闪避"},
    ["对手所有攻击必定miss"] = {"闪避"},
    ["对手所有攻击必定MISS"] = {"闪避"},
    ["使对手.*miss"] = {"闪避"},
    ["使对手.*MISS"] = {"闪避"},
    ["则对手.*miss"] = {"闪避"},
    ["则对手.*MISS"] = {"闪避"},
    ["躲避.*攻击"] = {"闪避"},
    ["闪避.*攻击"] = {"闪避"},
    ["对方.*攻击.*被己方闪避"] = {"闪避"},
    ["对手.*攻击.*被己方闪避"] = {"闪避"},
    ["命中率减少"] = {"闪避"},

    -- 减PP
    ["PP值归零"] = {"减PP"},
    ["%d+%%降低对手所有技能%d+点PP值"] = {"减PP"},
    ["降低对手所有PP%d+点"] = {"减PP"},
    ["降低.*对手.*PP"] = {"减PP"},
    ["降低.*对手.*pp"] = {"减PP"},
    ["降低.*双方.*PP"] = {"减PP"},
    ["降低.*双方.*pp"] = {"减PP"},
    ["减少.*对手.*PP"] = {"减PP"},
    ["减少.*对手.*pp"] = {"减PP"},
    ["减少.*双方.*PP"] = {"减PP"},
    ["减少.*双方.*pp"] = {"减PP"},
    ["对手.*消耗.*PP"] = {"减PP"},
    ["对手.*消耗.*pp"] = {"减PP"},
    ["对手.*降低.*PP"] = {"减PP"},
    ["对手.*降低.*pp"] = {"减PP"},
    ["对手.*减少.*PP"] = {"减PP"},
    ["对手.*减少.*pp"] = {"减PP"},
    ["对手.*吸取.*PP"] = {"减PP"},
    ["对手.*吸取.*pp"] = {"减PP"},
    ["双方.*消耗.*PP"] = {"减PP"},
    ["双方.*消耗.*pp"] = {"减PP"},
    ["双方.*降低.*PP"] = {"减PP"},
    ["双方.*降低.*pp"] = {"减PP"},
    ["双方.*减少.*PP"] = {"减PP"},
    ["双方.*减少.*pp"] = {"减PP"},
    ["双方.*吸取.*PP"] = {"减PP"},
    ["双方.*吸取.*pp"] = {"减PP"},
    ["对方.*消耗.*PP"] = {"减PP"},
    ["对方.*消耗.*pp"] = {"减PP"},
    ["对方.*降低.*PP"] = {"减PP"},
    ["对方.*降低.*pp"] = {"减PP"},
    ["对方.*减少.*PP"] = {"减PP"},
    ["对方.*减少.*pp"] = {"减PP"},
    ["对方.*吸取.*PP"] = {"减PP"},
    ["对方.*吸取.*pp"] = {"减PP"},
    ["对手.*PP.*归0"] = {"减PP"},
    ["对手.*PP.*归零"] = {"减PP"},
    ["对手.*PP.*减"] = {"减PP"},
    ["对手.*PP.*%-"] = {"减PP"},
    ["对手.*pp.*归0"] = {"减PP"},
    ["对手.*pp.*归零"] = {"减PP"},
    ["对手.*pp.*减"] = {"减PP"},
    ["对手.*pp.*%-"] = {"减PP"},
    ["双方.*PP.*归0"] = {"减PP"},
    ["双方.*PP.*归零"] = {"减PP"},
    ["双方.*PP.*减"] = {"减PP"},
    ["双方.*PP.*%-"] = {"减PP"},
    ["双方.*pp.*归0"] = {"减PP"},
    ["双方.*pp.*归零"] = {"减PP"},
    ["双方.*pp.*减"] = {"减PP"},
    ["双方.*pp.*%-"] = {"减PP"},
    ["对方.*PP.*归0"] = {"减PP"},
    ["对方.*PP.*归零"] = {"减PP"},
    ["对方.*PP.*减"] = {"减PP"},
    ["对方.*PP.*%-"] = {"减PP"},
    ["对方.*pp.*归0"] = {"减PP"},
    ["对方.*pp.*归零"] = {"减PP"},
    ["对方.*pp.*减"] = {"减PP"},
    ["对方.*pp.*%-"] = {"减PP"},
    ["消除敌方.*PP"] = {"减PP"},
    ["消除敌方.*pp"] = {"减PP"},

    -- 吸血
    ["造成.*伤害的%d+%%恢复自身体力"] = {"吸血"},
    ["攻击伤害的%d+%%.*恢复.*体力"] = {"吸血"},
    ["吸取对手最大体力%d+%%"] = {"吸血"},
    ["吸取对手最大体力的%d+%%"] = {"吸血"},
    ["吸取对手%d+点体力"] = {"吸血"},
    ["吸取对手%d+点固定体力"] = {"吸血"},
    ["吸取最大体力%d+%%"] = {"吸血"},
    ["吸取最大体力的%d+%%"] = {"吸血"},
    ["吸取%d+点体力"] = {"吸血"},
    ["吸取%d+点固定体力"] = {"吸血"},
    ["吸收对手最大体力%d+%%"] = {"吸血"},
    ["吸收对手最大体力的%d+%%"] = {"吸血"},
    ["吸收对手%d+点体力"] = {"吸血"},
    ["吸收对手%d+点固定体力"] = {"吸血"},
    ["吸收最大体力%d+%%"] = {"吸血"},
    ["吸收最大体力的%d+%%"] = {"吸血"},
    ["吸收%d+点体力"] = {"吸血"},
    ["吸收%d+点固定体力"] = {"吸血"},

    -- 吸强
    ["吸取对手的能力提升状态"] = {"吸强"},
    ["吸取对手能力提升状态"] = {"吸强"},
    ["吸取对手的能力提升"] = {"吸强"},
    ["吸取对手能力提升"] = {"吸强"},
    ["吸收对手的能力提升状态"] = {"吸强"},
    ["吸收对手能力提升状态"] = {"吸强"},
    ["吸收对手的能力提升"] = {"吸强"},
    ["吸收对手能力提升"] = {"吸强"},
    ["吸取的能力提升状态"] = {"吸强"},
    ["吸取能力提升状态"] = {"吸强"},
    ["吸取的能力提升"] = {"吸强"},
    ["吸取能力提升"] = {"吸强"},
    ["吸收的能力提升状态"] = {"吸强"},
    ["吸收能力提升状态"] = {"吸强"},
    ["吸收的能力提升"] = {"吸强"},
    ["吸收能力提升"] = {"吸强"},
    ["吸取.*对手.*能力提升"] = {"吸强"},
    ["吸取.*对手的能力提升"] = {"吸强"},
    ["吸收.*对手.*能力提升"] = {"吸强"},
    ["吸收.*对手的能力提升"] = {"吸强"},
    ["吞噬.*对手.*能力提升"] = {"吸强"},
    ["吞噬.*对手的能力提升"] = {"吸强"},
    ["对手能力提升.*转移到自己"] = {"吸强"},
    ["对手的能力提升.*转移到自己"] = {"吸强"},
    ["使对手.*能力提升.*自己"] = {"吸强"},
    ["使对手.*能力提升.*自身"] = {"吸强"},
    ["使对手.*能力提升状态.*自己"] = {"吸强"},
    ["使对手.*能力提升状态.*自身"] = {"吸强"},

    -- 减伤
    ["受到的攻击伤害减少"] = {"减伤"},
    ["受到的伤害减少"] = {"减伤"},
    ["受到.*伤害.*降低"] = {"减伤"},
    ["%d+回合内每回合所受的伤害减少%d+点"] = {"减伤"},
    ["减少%d+点下回合所受的伤害"] = {"减伤"},
    ["受到.*伤害.*减半"] = {"减伤"},
    ["受到.*伤害.*减少"] = {"减伤"},
    ["减少.*所受.*伤害"] = {"减伤"},
    ["所受的伤害减少"] = {"减伤"},
    ["自身下次受到的伤害减少"] = {"减伤"},
    ["对方攻击伤害是正常状态下的"] = {"减伤"},
    ["抵挡.*伤害"] = {"减伤"},
    ["对手.*造成.*伤害.*减少"] = {"减伤"},
    ["对手.*造成.*伤害.*降低"] = {"减伤"},

    -- 护盾
    ["获得%d+点护盾"] = {"护盾"},
    ["自身.*附加.*护盾"] = {"护盾"},
    ["己方.*附加.*护盾"] = {"护盾"},
    ["获得[^;;。]*护盾"] = {"护盾"},

    -- 消除护盾
    ["消除双方护盾"] = {"消除护盾"},
    ["消除.*护盾"] = {"消除护盾"},

    -- 致命一击
    ["攻击击中对象要害概率增加"] = {"致命一击"},
    ["若打出致命一击则对手%d+%%概率害怕"] = {"致命一击", "施加异常"},
    ["击中对象要害概率增加"] = {"致命一击"},
    ["必定打出暴击"] = {"致命一击"},
    ["必定打出致命"] = {"致命一击"},
    ["必定暴击"] = {"致命一击"},
    ["必定致命"] = {"致命一击"},
    ["概率打出致命一击"] = {"致命一击"},
    ["致命一击.*上升"] = {"致命一击"},
    ["致命一击.*提升"] = {"致命一击"},
    ["暴击.*上升"] = {"致命一击"},
    ["暴击.*提升"] = {"致命一击"},
    ["自身所有攻击致命一击"] = {"致命一击"},
    ["自身体力低于对手时100%%的概率打出致命一击"] = {"致命一击"},

    -- 免疫异常
    ["免疫并反弹所有受到的异常状态"] = {"免疫异常"},
    ["免疫所有受到的异常状态"] = {"免疫异常"},
    ["免疫受到的异常状态"] = {"免疫异常"},
    ["免疫异常状态"] = {"免疫异常"},

    -- 免疫弱化
    ["免疫能力下降状态"] = {"免疫弱化"},
    ["免疫能力下降"] = {"免疫弱化"},
    ["不受能力下降"] = {"免疫弱化"},

    -- 施加异常 - 对方
    ["对手.*则.*烧伤"] = {"施加异常"},
    ["令自身砥砺"] = {"施加异常"},
    ["自身砥砺"] = {"施加异常"},
    ["对方砥砺"] = {"施加异常"},
    ["对手砥砺"] = {"施加异常"},
    ["令.*砥砺"] = {"施加异常"},
    ["附加并解除自身所处的异常状态"] = {"解除异常","施加异常"},
    ["对方麻痹"] = {"施加异常"},
    ["对方中毒"] = {"施加异常"},
    ["对方烧伤"] = {"施加异常"},
    ["对方寄生"] = {"施加异常"},
    ["对方冻伤"] = {"施加异常"},
    ["对方害怕"] = {"施加异常"},
    ["对方疲惫"] = {"施加异常"},
    ["对方睡眠"] = {"施加异常"},
    ["对方石化"] = {"施加异常"},
    ["对方混乱"] = {"施加异常"},
    ["对方衰弱"] = {"施加异常"},
    ["对方山神守护"] = {"施加异常"},
    ["对方易燃"] = {"施加异常"},
    ["对方狂暴"] = {"施加异常"},
    ["对方冰封"] = {"施加异常"},
    ["对方流血"] = {"施加异常"},
    ["对方瘫痪"] = {"施加异常"},
    ["对方失明"] = {"施加异常"},
    ["对方焚烬"] = {"施加异常"},
    ["对方诅咒"] = {"施加异常"},
    ["对方感染"] = {"施加异常"},
    ["对方束缚"] = {"施加异常"},
    ["对方失神"] = {"施加异常"},
    ["对方沉默"] = {"施加异常"},
    ["对方臣服"] = {"施加异常"},
    ["对方凝滞"] = {"施加异常"},
    ["对方星赐"] = {"施加异常"},
    ["对方星哲"] = {"施加异常"},
    -- 施加异常 - 对手
    ["对手麻痹"] = {"施加异常"},
    ["对手中毒"] = {"施加异常"},
    ["对手烧伤"] = {"施加异常"},
    ["对手寄生"] = {"施加异常"},
    ["对手冻伤"] = {"施加异常"},
    ["对手害怕"] = {"施加异常"},
    ["对手疲惫"] = {"施加异常"},
    ["对手睡眠"] = {"施加异常"},
    ["对手石化"] = {"施加异常"},
    ["对手混乱"] = {"施加异常"},
    ["对手衰弱"] = {"施加异常"},
    ["对手山神守护"] = {"施加异常"},
    ["对手易燃"] = {"施加异常"},
    ["对手狂暴"] = {"施加异常"},
    ["对手冰封"] = {"施加异常"},
    ["对手流血"] = {"施加异常"},
    ["对手瘫痪"] = {"施加异常"},
    ["对手失明"] = {"施加异常"},
    ["对手焚烬"] = {"施加异常"},
    ["对手诅咒"] = {"施加异常"},
    ["对手感染"] = {"施加异常"},
    ["对手束缚"] = {"施加异常"},
    ["对手失神"] = {"施加异常"},
    ["对手沉默"] = {"施加异常"},
    ["对手臣服"] = {"施加异常"},
    ["对手凝滞"] = {"施加异常"},
    ["对手星赐"] = {"施加异常"},
    ["对手星哲"] = {"施加异常"},
    -- 转化为异常状态
    ["转化为疲惫"] = {"施加异常"},
    ["转化为害怕"] = {"施加异常"},
    ["转化为麻痹"] = {"施加异常"},
    ["转化为中毒"] = {"施加异常"},
    ["转化为烧伤"] = {"施加异常"},
    ["转化为睡眠"] = {"施加异常"},
    ["转化为混乱"] = {"施加异常"},
    ["转化为冰封"] = {"施加异常"},
    ["转化为石化"] = {"施加异常"},
    ["转化为凝滞"] = {"施加异常"},

    -- 随机效果
    ["随机%d+%%概率"] = {"随机效果"},
    ["%d+%%的概率"] = {"随机效果"},

    -- 效果无效
    ["攻击.*伤害.*无效"] = {"效果无效"},
    ["攻击.*伤害.*失效"] = {"效果无效"},
    ["技能.*无效"] = {"效果无效"},
    ["技能.*失效"] = {"效果无效"},
    ["回合类效果无法被消除"] = {"效果无效"},
    ["免疫下次受到的攻击"] = {"效果无效"},
    ["免疫下.*次对手的攻击"] = {"效果无效"},
    ["免疫%d+次受到的攻击"] = {"效果无效"},
    ["免疫%d+次对手的攻击"] = {"效果无效"},
    ["自身免疫受到的攻击"] = {"效果无效"},
    ["对手.*技能.*命中.*失效"] = {"效果无效"},
    ["对手.*技能.*命中.*无效"] = {"效果无效"},
    ["对手.*技能.*效果.*失效"] = {"效果无效"},
    ["对手.*技能.*效果.*无效"] = {"效果无效"},
    ["对方.*技能.*命中.*失效"] = {"效果无效"},
    ["对方.*技能.*命中.*无效"] = {"效果无效"},
    ["对方.*技能.*效果.*失效"] = {"效果无效"},
    ["对方.*技能.*效果.*无效"] = {"效果无效"},
    ["令对手技能无效"] = {"效果无效"},
    ["令对手技能.*效"] = {"效果无效"},
    ["使对手技能失效"] = {"效果无效"},
    ["令对手技能失效"] = {"效果无效"},

    -- 附加伤害
    ["附加%d+点固定伤害"] = {"附加伤害"},
    ["附加双方能力下降等级总和"] = {"附加伤害"},
    ["额外附加%d+点伤害"] = {"附加伤害"},
    ["额外增加%d+点伤害"] = {"附加伤害"},
    ["额外增加%d+点固定伤害"] = {"附加伤害"},
    ["造成%d+点固定伤害"] = {"附加伤害"},
    ["消耗%d+点体力"] = {"附加伤害"},
    ["降低对方%d+%%的hp"] = {"附加伤害"},
    ["消耗%d+%%的当前最大体力"] = {"附加伤害"},
    ["消耗自身当前最大体力的%d+%%并使对手受到等量百分比伤害"] = {"附加伤害"},
    ["回合结束时减少对手%d+%%最大体力"] = {"附加伤害"},
    ["造成等量百分比伤害"] = {"附加伤害"},
    ["减少对手所有不在场精灵%d+点体力"] = {"附加伤害"},
    ["附加已损失体力值%d+%%的百分比伤害"] = {"附加伤害"},
    ["附加对手当前体力值%d+%%的百分比伤害"] = {"附加伤害"},
    ["附加防御%d+%%的百分比伤害"] = {"附加伤害"},
    ["附加特防%d+%%的百分比伤害"] = {"附加伤害"},
    ["若对手处于异常状态,则附加%d+点伤害"] = {"附加伤害"},
    ["对手.*受到.*百分比伤害"] = {"附加伤害"},
    ["对手.*受到.*固定伤害"] = {"附加伤害"},
    ["对手.*受到.*固伤"] = {"附加伤害"},
    ["对方.*受到.*百分比伤害"] = {"附加伤害"},
    ["对方.*受到.*固定伤害"] = {"附加伤害"},
    ["对方.*受到.*固伤"] = {"附加伤害"},
    ["附加.*的百分比伤害"] = {"附加伤害"},
    ["附加.*的固定伤害"] = {"附加伤害"},
    ["每回合.*受到.*百分比伤害"] = {"附加伤害"},
    ["每回合.*受到.*固定伤害"] = {"附加伤害"},
    ["减少对手.*体力"] = {"附加伤害"},
    ["降低对手.*体力"] = {"附加伤害"},
    ["对手损失.*固定体力"] = {"附加伤害"},

    -- 强化反转
    ["反转对手的能力提升"] = {"强化反转"},
    ["反转.*对手能力提升"] = {"强化反转"},
    ["反转.*对手的能力提升"] = {"强化反转"},

    -- 消除回合
    ["回合类效果被消除"] = {"消除回合"},
    ["消除对手回合类效果"] = {"消除回合"},
    ["消除回合类效果"] = {"消除回合"},
    ["消除对手回合"] = {"消除回合"},
    ["消除敌我双方回合"] = {"消除回合"},
    ["消除双方回合"] = {"消除回合"},
    ["消除敌我双方.*回合类效果"] = {"消除回合"},
    ["消除双方.*回合类效果"] = {"消除回合"},
    ["消除.*回合.*效果"] = {"消除回合"},

    -- 伤害限制
    ["受到的伤害不超过"] = {"伤害限制"},
    ["造成的伤害不少于%d+"] = {"伤害限制"},
    ["受到的攻击伤害不超过"] = {"伤害限制"},

    -- 弱化反转
    ["反转自身能力下降状态"] = {"弱化反转"},
    ["反转自身能力下降"] = {"弱化反转"},
    ["反转自身的能力下降"] = {"弱化反转"},

    -- 复合效果(确保不重复)
    -- 下回合受到的伤害转化为自身体力 已在免伤中处理
}

-- 定义需要特殊处理的规则(包含断言逻辑)
p.specialRules = {
    {
        type = "negative_lookbehind",
        pattern = "免疫.*伤害",
        forbidden_prefix = "对手",
        tags = {"免伤"}
    },
    {
        type = "negative_lookbehind",
        pattern = "全属性%+",
        forbidden_prefix = "对手",
        tags = {"强化"}
    },
    {
        type = "negative_lookbehind",
        pattern = "技能.*效果.*(失效|无效)",
        forbidden_prefix = "攻击",
        tags = {"效果无效"}
    },
    {
        type = "negative_lookbehind",
        pattern = "技能.*效果.*(失效|无效)",
        forbidden_prefix = "属性",
        tags = {"效果无效"}
    },
    {
        type = "negative_lookbehind",
        pattern = "降低.*[Hh][Pp]",
        forbidden_prefix = "最高",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = "附加.*伤害",
        forbidden_substring = "减少",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = "附加.*固伤",
        forbidden_substring = "减少",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = "恢复.*(生命值|生命|体力|HP|hp)",
        forbidden_substring = "无法.*恢复",
        tags = {"恢复"}
    },
    {
        type = "negative_lookbehind",
        pattern = "打出致命一击",
        forbidden_prefix = "若",
        tags = {"致命一击"}
    },
}

-- 辅助函数:检查是否包含子字符串(plain text search)
local function contains(text, substring)
    return string.find(text, substring, 1, true) ~= nil
end

-- 辅助函数:查找所有匹配位置,防止空匹配死循环
local function findAllMatches(text, pattern)
    local matches = {}
    local start_pos = 1
    local text_len = #text
    while start_pos <= text_len do
        local s, e = string.find(text, pattern, start_pos)
        if not s then break end
        table.insert(matches, {start = s, finish = e})
        -- 防止空匹配导致死循环
        if e >= s then
            start_pos = e + 1
        else
            start_pos = s + 1
        end
    end
    return matches
end

-- 提取标签的函数
local function extractTags(description, priorityThreshold)
    local tags = {}
    local seen_tags = {}

    -- 处理普通关键词
    for keyword, tag_list in pairs(p.keywords) do
        local ok, result = pcall(string.find, description, keyword)
        if ok and result then
            for _, tag in ipairs(tag_list) do
                if not seen_tags[tag] then
                    table.insert(tags, tag)
                    seen_tags[tag] = true
                end
            end
        end
    end

    -- 处理特殊规则
    for _, rule in ipairs(p.specialRules) do
        local ok, all_matches = pcall(findAllMatches, description, rule.pattern)
        if not ok then all_matches = {} end
        if rule.type == "negative_lookbehind" then
            for _, match_info in ipairs(all_matches) do
                local prefix_text = string.sub(description, 1, match_info.start - 1)
                if not contains(prefix_text, rule.forbidden_prefix) then
                    if rule.tags then
                        for _, tag in ipairs(rule.tags) do
                            if not seen_tags[tag] then
                                table.insert(tags, tag)
                                seen_tags[tag] = true
                            end
                        end
                    end
                end
            end
        elseif rule.type == "negative_lookahead" then
            for _, match_info in ipairs(all_matches) do
                local suffix_text = string.sub(description, match_info.finish + 1)
                if not contains(suffix_text, rule.forbidden_substring) then
                    if rule.tags then
                        for _, tag in ipairs(rule.tags) do
                            if not seen_tags[tag] then
                                table.insert(tags, tag)
                                seen_tags[tag] = true
                            end
                        end
                    end
                end
            end
        end
    end

    -- 新增逻辑:检查是否需要添加先制标签
    if priorityThreshold then
        local threshold = tonumber(priorityThreshold)
        if threshold and threshold > 0 then
            if not seen_tags["先制"] then
                table.insert(tags, "先制")
                seen_tags["先制"] = true
            end
        end
    end

    -- 排序结果
    table.sort(tags)
    return tags
end

-- 主要的导出函数,接受 frame 对象作为参数
function p.main(frame)
    local inputText = frame.args[1] or ""
    local priorityThreshold = frame.args[2]

    inputText = mw.text.trim(inputText)

    if inputText == "" then
        return ""
    end

    local result_tags = extractTags(inputText, priorityThreshold)

    if #result_tags == 0 then
        return ""
    end

    local html_parts = {}
    for _, tag in ipairs(result_tags) do
        local span_element = mw.html.create('span')
            :addClass('jntag')
            :attr('id', tag)
            :wikitext(tag)
        table.insert(html_parts, tostring(span_element))
    end

    return table.concat(html_parts, '')
end

-- 直接调用的函数,方便其他 Lua 模块使用
function p.extractTagsDirect(description, priorityThreshold)
    return extractTags(mw.text.trim(description or ""), priorityThreshold)
end

return p