-

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


请选择语言:

版本250722.2
全站通知:

模块:SkillGui

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

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

-- Module:SkillGui
local p = {}

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


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

    -- 先制
    ["先制%+%d+"] = {"先制"},
    ["下回合(自身|对手)?先制[+-]%d+"] = {"先制"},
    -- [".*?先制%s*(额外)?%s*[+](%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+"] = {"弱化"},
    ["对手全属性等级-%d+"] = {"弱化"},
    ["对手随机%d+项属性等级-%d+"] = {"弱化"},

    -- [".*?(对手|对方).*?全属性%-[^,,;;.。]*"] = {"弱化"}, -- 拆分此规则
    [".*对手.*全属性%-[^,,;;.。]*"] = {"弱化"},
    [".*对方.*全属性%-[^,,;;.。]*"] = {"弱化"},
    -- [".*?(对手|对方).*?等级{%d+}.*?"] = {"弱化"}, -- 拆分此规则
    [".*对手.*等级{%d+}.*"] = {"弱化"},
    [".*对方.*等级{%d+}.*"] = {"弱化"},
    -- [".*?(对手|对方).*?(攻击|防御|特攻|特防|速度)等级%-.*?"] = {"弱化"}, -- 拆分此规则
    [".*对手.*(攻击|防御|特攻|特防|速度)等级%-.*"] = {"弱化"}, -- 仍含 |, 可能需再拆分
    [".*对手.*攻击等级%-.*"] = {"弱化"},
    [".*对手.*防御等级%-.*"] = {"弱化"},
    [".*对手.*特攻等级%-.*"] = {"弱化"},
    [".*对手.*特防等级%-.*"] = {"弱化"},
    [".*对手.*速度等级%-.*"] = {"弱化"},
    [".*对方.*(攻击|防御|特攻|特防|速度)等级%-.*"] = {"弱化"}, -- 仍含 |, 可能需再拆分
    [".*对方.*攻击等级%-.*"] = {"弱化"},
    [".*对方.*防御等级%-.*"] = {"弱化"},
    [".*对方.*特攻等级%-.*"] = {"弱化"},
    [".*对方.*特防等级%-.*"] = {"弱化"},
    [".*对方.*速度等级%-.*"] = {"弱化"},

    [".*?反馈自身(的|)能力下降.*?"] = {"弱化"},
    [".*?能力下降.*?(返还|反馈)给对手.*?"] = {"弱化"},
    -- [".*?附加.*?(对手|对方).*?能力下降.*?"] = {"弱化"}, -- 拆分此规则
    [".*?附加.*?对手.*?能力下降.*?"] = {"弱化"},
    [".*?附加.*?对方.*?能力下降.*?"] = {"弱化"},
    -- [".*?(对手|对方).*?能力(值|等级)%-.*?"] = {"弱化"}, -- 拆分此规则
    [".*?对手.*?能力(值|等级)%-.*?"] = {"弱化"},
    [".*?对方.*?能力(值|等级)%-.*?"] = {"弱化"},


    -- 消强 (拆分 | 规则)
    -- ["(增强效果消失|消除(对手)?能力提升状态)"] = {"消强"}, -- 拆分此规则
    ["增强效果消失"] = {"消强"},
    ["消除能力提升状态"] = {"消强"}, -- 可选
    ["消除对手能力提升状态"] = {"消强"}, -- 这个已存在,无需重复

    -- 必中
    ["必中"] = {"必中"},
    -- [".*?必(定命|)中.*?"] = {"必中"}, -- 拆分此规则
    [".*?必定命中.*?"] = {"必中"},
    [".*?必中.*?"] = {"必中"},

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

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

    -- 降疗
    ["无法通过(自身)?技能恢复(自身)?体力"] = {"降疗"},
    -- [".*?对手.*?无法.*?恢复.*?体力.*?"] = {"降疗"}, -- 拆分此规则
    [".*对手.*无法.*恢复.*体力.*"] = {"降疗"},

    -- 解弱 (拆分 ? 规则)
    -- ["解除自身(的)?能力下降状态"] = {"解弱"}, -- 拆分此规则
    ["解除自身能力下降状态"] = {"解弱"},
    ["解除自身的功能下降状态"] = {"解弱"}, -- 这个可能不对,原文是 "能力下降状态"

    -- 闪避
    ["躲避"] = {"闪避"},
    ["必定miss"] = {"闪避"},
    ["使得对方的技能失效"] = {"闪避"},
    -- [".*?对自身(必定|)(miss|MISS).*?"] = {"闪避"}, -- 拆分此规则
    [".*对自身必定miss.*"] = {"闪避"},
    [".*对自身miss.*"] = {"闪避"},
    [".*对自身MISS.*"] = {"闪避"},
    -- [".*?对手所有攻击必定(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.*"] = {"减PP"},
    [".*对方.*吸取.*PP.*"] = {"减PP"},
    [".*对方.*吸取.*pp.*"] = {"减PP"},
    -- [".*?(对手|双方|对方).*?(PP|pp).*?(归0|归零|减|-).*?"] = {"减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.*"] = {"减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+"] = {"吸血"},
    ["吸收最大体力的%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+%%的百分比伤害"] = {"附加伤害"},
    ["附加特防%d+%%的百分比伤害"] = {"附加伤害"},
    ["若对手处于异常状态,则附加%d+点伤害"] = {"附加伤害"},
    -- [".*?(对手|对方).*?受到.*?(百分比伤害|固定伤害|固伤).*?"] = {"附加伤害"}, -- 拆分此规则
    [".*对手.*受到.*百分比伤害.*"] = {"附加伤害"},
    [".*对手.*受到.*固定伤害.*"] = {"附加伤害"},
    [".*对手.*受到.*固伤.*"] = {"附加伤害"},
    [".*对方.*受到.*百分比伤害.*"] = {"附加伤害"},
    [".*对方.*受到.*固定伤害.*"] = {"附加伤害"},
    [".*对方.*受到.*固伤.*"] = {"附加伤害"},
    -- [".*?附加.*?(百分比|固定)伤害.*?"] = {"附加伤害"}, -- 关键规则,已处理
    -- [".*附加.*百分比伤害.*"] = {"附加伤害"}, -- 试试这个
    -- [".*附加.*固定伤害.*"] = {"附加伤害"}, -- 试试这个
    -- 尝试使用 .+ (至少一个字符) 代替 .*?
    ["附加.+的百分比伤害"] = {"附加伤害"}, -- 这个可能更稳定
    ["附加.+的固定伤害"] = {"附加伤害"}, -- 这个可能更稳定
    -- [".*?每回合.*?受到.*?(百分比|固定)伤害.*?"] = {"附加伤害"}, -- 拆分此规则
    [".*每回合.*受到.*百分比伤害.*"] = {"附加伤害"},
    [".*每回合.*受到.*固定伤害.*"] = {"附加伤害"},
    -- [".*?(减少|降低)对手.*?体力.*?"] = {"附加伤害"}, -- 拆分此规则
    [".*减少对手.*体力.*"] = {"附加伤害"},
    [".*降低对手.*体力.*"] = {"附加伤害"},
    -- [".*?对手损失.*?固定体力.*?"] = {"附加伤害"}, -- 拆分此规则
    [".*对手损失.*固定体力.*"] = {"附加伤害"},


    -- 强化反转
    ["反转对手的能力提升"] = {"强化反转"},
    -- [".*?反转.*?对手(的|)能力提升?.*?"] = {"强化反转"}, -- 拆分此规则
    [".*反转.*对手能力提升.*"] = {"强化反转"},
    [".*反转.*对手的能力提升.*"] = {"强化反转"},

    -- 消除回合
    ["(回合类效果被消除|消除(对手)?回合类效果)"] = {"消除回合"},
    -- [".*?消除对手回合|消除(敌我)双方回合.*?"] = {"消除回合"}, -- 拆分此规则
    [".*消除对手回合.*"] = {"消除回合"},
    [".*消除敌我双方回合.*"] = {"消除回合"},
    [".*消除双方回合.*"] = {"消除回合"},
    -- [".*?消除(?:敌我|)双方.*?回合类效果.*?"] = {"消除回合"}, -- 拆分此规则
    [".*消除敌我双方.*回合类效果.*"] = {"消除回合"},
    [".*消除双方.*回合类效果.*"] = {"消除回合"},
    ["消除.*回合.*效果"] = {"消除回合"}, 

    -- 伤害限制
    ["受到的伤害不超过"] = {"伤害限制"},
    ["造成的伤害不少于%d+"] = {"伤害限制"},
    -- [".*?受到的(?:攻击|)伤害不超过.*?"] = {"伤害限制"}, -- 拆分此规则
    [".*受到的攻击伤害不超过.*"] = {"伤害限制"},
    [".*受到的伤害不超过.*"] = {"伤害限制"},

    -- 弱化反转
    ["反转自身能力下降状态"] = {"弱化反转"},
    -- [".*?反转自身(的|)能力下降.*?"] = {"弱化反转"}, -- 拆分此规则
    [".*反转自身能力下降.*"] = {"弱化反转"},
    [".*反转自身的功能下降.*"] = {"弱化反转"}, -- 原文是 "能力下降"

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

    -- 为之前拆分的规则添加缺失的条目
    -- 解弱
    ["解除自身能力下降状态"] = {"解弱"}, -- 确保这个存在
    -- 消强
    ["增强效果消失"] = {"消强"},
    ["消除能力提升状态"] = {"消强"},
    ["消除对手能力提升状态"] = {"消强"}, -- 确保这个存在
}

-- 定义需要特殊处理的规则 (包含断言逻辑) (将 local 改为 p.)
p.specialRules = { {
        type = "negative_lookbehind",
        pattern = "免疫.*?伤害.*?",
        forbidden_prefix = "对手",
        tags = {"免伤"}
    },
    {
        type = "negative_lookbehind",
        pattern = "全属性%+.*?",
        forbidden_prefix = "对手",
        tags = {"强化"}
    },
    {
        type = "negative_lookbehind",
        pattern = "技能(命中|附加)(的|)效果(失效|无效).*?",
        forbidden_prefix = "攻击",
    ["威力增加%d+"] = {"增伤"},
    },
    {
        type = "negative_lookbehind",
        pattern = "技能(命中|附加)(的|)效果(失效|无效).*?",
        forbidden_prefix = "属性",
        tags = {"效果无效"}
    },
    {
        type = "negative_lookbehind",
        pattern = "降低.*?(HP|hp).*?",
        forbidden_prefix = "最高",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = ".*?(附加|造成|附带)[^,,;;.。]*?(%d+%%?|固定|百分比)[^,,;;.。]*?伤害.*?",
        forbidden_substring = "减少",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = ".*?(附加|造成|附带)[^,,;;.。]*?固伤.*?",
        forbidden_substring = "减少",
        tags = {"附加伤害"}
    },
    {
        type = "negative_lookahead",
        pattern = ".*?恢(复|复).*?(?:生命值|生命|体力|HP).*?",
        forbidden_substring = "无法.*?恢(复|复)",
        tags = {"恢复"}
    },
    {
        type = "negative_lookbehind",
        pattern = "打出致命一击",
        forbidden_prefix = "若",
        tags = {"致命一击"}
    },
    {
    type = "negative_lookbehind",
    pattern = "免疫.*?伤害.*?",
    forbidden_prefix = "对手", -- 这意味着 "免疫.*伤害" 如果前面有 "对手",则不匹配
    tags = {"免伤"}            -- 这样 "免疫对手的攻击伤害" 就会匹配,因为它前面没有 "对手"
}
}

-- 辅助函数:检查是否包含子字符串(用于模拟 negative lookahead/lookbehind)
local function contains(text, substring)
    -- 使用 string.find,最后一个参数 true 表示 plain text search,不使用模式
    return string.find(text, substring, 1, true) ~= nil
end

-- 辅助函数:查找所有匹配位置(用于模拟 negative lookbehind)
local function findAllMatches(text, pattern)
    local matches = {}
    local start_pos = 1
    while true do
        local s, e = string.find(text, pattern, start_pos)
        if not s then break end
        table.insert(matches, {start = s, finish = e})
        start_pos = e + 1
    end
    return matches
end

-- 提取标签的函数 (新增 threshold 参数)
local function extractTags(description, priorityThreshold)
    local tags = {}
    local seen_tags = {} -- 用于去重

    -- 处理普通关键词 (加上 p. 前缀)
    for keyword, tag_list in pairs(p.keywords) do
        if string.find(description, keyword) 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

    -- 处理特殊规则 (加上 p. 前缀)
    for _, rule in ipairs(p.specialRules) do
        if rule.type == "negative_lookbehind" then
            -- 查找所有匹配模式的位置
            local all_matches = findAllMatches(description, rule.pattern)
            for _, match_info in ipairs(all_matches) do
                local match_start = match_info.start
                -- 提取匹配部分之前的文本
                local prefix_text = string.sub(description, 1, match_start - 1)
                -- 检查前缀文本是否包含禁止的字符串
                if not contains(prefix_text, rule.forbidden_prefix) 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
        elseif rule.type == "negative_lookahead" then
            -- 查找所有匹配模式的位置
            local all_matches = findAllMatches(description, rule.pattern)
            for _, match_info in ipairs(all_matches) do
                local match_end = match_info.finish
                -- 提取匹配部分之后的文本
                local suffix_text = string.sub(description, match_end + 1)
                -- 检查后缀文本是否包含禁止的字符串
                if not contains(suffix_text, rule.forbidden_substring) 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

    -- 新增逻辑:检查是否需要添加 "先制" 标签
    if priorityThreshold and tonumber(priorityThreshold) and tonumber(priorityThreshold) > 0 then
        local hasPriorityTag = false
        for _, tag in ipairs(tags) do
            if tag == "先制" then
                hasPriorityTag = true
                break
            end
        end
        -- 如果阈值大于0且列表中没有 "先制" 标签,则添加它
        if not hasPriorityTag then
            -- 检查 "先制" 是否已在 seen_tags 中,避免重复
            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] -- 获取第二个参数,可以是 nil

    -- 去除首尾空白
    inputText = mw.text.trim(inputText)

    -- 如果输入为空,返回提示信息
    if inputText == "" then
        return ""
    end

    -- 调用核心逻辑函数
    local result_tags = extractTags(inputText, priorityThreshold)

    -- 如果没有匹配到任何标签
    if #result_tags == 0 then
        return ""
    end

    -- 构建带有 span 标签的输出
    local html_parts = {}
    for i, tag in ipairs(result_tags) do
        -- 创建一个 span 元素
        local span_element = mw.html.create('span')
            :addClass('jntag') -- 添加 class
            :attr('id', tag)   -- 添加 id,使用标签内容
            :wikitext(tag)     -- 设置内部文本
        table.insert(html_parts, tostring(span_element))
    end

    -- 用逗号连接所有 span 元素
    local output_html = table.concat(html_parts, '')

    -- 返回构建好的 HTML
    return output_html
end

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

return p