From bd839e343c60617df94a7b051afd7283059380ca Mon Sep 17 00:00:00 2001 From: LyKoiya <1511137684@qq.com> Date: Wed, 1 Jul 2026 01:03:00 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=90=8D=E4=B8=8D=E5=90=8C=EF=BC=8C=E5=96=8A=E8=AF=9D=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E7=9B=B8=E5=90=8C=E5=86=B2=E7=AA=81=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MY_TeamMon/src/MY_TeamMon.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MY_TeamMon/src/MY_TeamMon.lua b/MY_TeamMon/src/MY_TeamMon.lua index 526f41f02..79228da4d 100644 --- a/MY_TeamMon/src/MY_TeamMon.lua +++ b/MY_TeamMon/src/MY_TeamMon.lua @@ -868,7 +868,7 @@ function D.CreateData(szEvent) if v.szContent then if v.szContent:find('{$me}') or v.szContent:find('{$team}') or v.bSearch or v.bReg then -- 具有通配符和搜索标记的数据不作 HIT 高速匹配策略考虑 table.insert(cache.OTHER, v) - elseif not cache.HIT[v.szContent] then -- 按照数据优先级顺序(地图>地图组>通用),同级按照下标先后顺序,只取第一个匹配结果 + elseif not (cache.HIT[v.szContent] and cache.HIT[v.szContent][v.szTarget or 'sys']) then -- 按照数据优先级顺序(地图>地图组>通用),同级按照下标先后顺序,只取第一个匹配结果 cache.HIT[v.szContent] = cache.HIT[v.szContent] or {} cache.HIT[v.szContent][v.szTarget or 'sys'] = v end From 2454cf276cb0e38b2bea97ae265ed430074cd632 Mon Sep 17 00:00:00 2001 From: LyKoiya <1511137684@qq.com> Date: Wed, 1 Jul 2026 01:13:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=AD=A3?= =?UTF-8?q?=E5=88=99=E6=A8=A1=E5=BC=8F=E6=94=AF=E6=8C=81{$team}=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MY_TeamMon/src/MY_TeamMon.lua | 52 +++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/MY_TeamMon/src/MY_TeamMon.lua b/MY_TeamMon/src/MY_TeamMon.lua index 79228da4d..1e4bd38c0 100644 --- a/MY_TeamMon/src/MY_TeamMon.lua +++ b/MY_TeamMon/src/MY_TeamMon.lua @@ -1730,18 +1730,52 @@ function D.OnCallMessage(szEvent, szContent, dwNpcID, szNpcName) dwReceiverID, szReceiver = nil end if bInParty and content:find('{$team}', nil, true) then - local c = content - for _, vv in ipairs(team.GetTeamMemberList()) do - if string.find(szContent, c:gsub('{$team}', team.GetClientTeamMemberName(vv)), nil, true) and (v.szTarget == szNpcName or v.szTarget == '%') then -- hit - data = v - dwReceiverID = vv - szReceiver = team.GetClientTeamMemberName(vv) + if v.bReg then + -- 正则模式(带{$team}):逆向排除,先遍历成员名,替换为空,若替换成功,说明命中,再将正则规则{$team}替换为空,匹配剩余的内容,如此只用一次正则,节约性能 + local nHitMemberID, szHitMemberName, szProcessedContent + local tMembers = {} + -- 按名字长度降序排序,避免名字包含关系导致误判替换 + for _, vv in ipairs(team.GetTeamMemberList()) do + tMembers[#tMembers + 1] = { dwID = vv, szName = team.GetClientTeamMemberName(vv) } + end + table.sort(tMembers, function(a, b) return #a.szName > #b.szName end) + -- 替换正则规则{$team}为空,并获取{$team}数量,决定后续成员名替换为空次数 + local szPattern, nTeamCount = content:gsub('{$team}', '') + for _, member in ipairs(tMembers) do + local szReplaced = string.gsub(szContent, member.szName, '', nTeamCount) + if #szReplaced < #szContent then + nHitMemberID = member.dwID + szHitMemberName = member.szName + szProcessedContent = szReplaced + break + end + end + if nHitMemberID and szHitMemberName then + local res = {string.find(szProcessedContent, szPattern)} + if res[1] then + table.remove(res, 1) + table.remove(res, 1) + data = v + aBackreferences = res + dwReceiverID = nHitMemberID + szReceiver = szHitMemberName + break + end + end + else + local c = content + for _, vv in ipairs(team.GetTeamMemberList()) do + if string.find(szContent, c:gsub('{$team}', team.GetClientTeamMemberName(vv)), nil, true) and (v.szTarget == szNpcName or v.szTarget == '%') then -- hit + data = v + dwReceiverID = vv + szReceiver = team.GetClientTeamMemberName(vv) + break + end + end + if dwReceiverID and szReceiver then break end end - if dwReceiverID and szReceiver then - break - end elseif v.szTarget == szNpcName or v.szTarget == '%' then if v.bReg then local res = {string.find(szContent, content)} From 27a72a422fb53dac866313f0a29e5b66afc793f9 Mon Sep 17 00:00:00 2001 From: LyKoiya <1511137684@qq.com> Date: Wed, 1 Jul 2026 01:29:18 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=E7=BC=93=E5=AD=98=E5=9B=A2?= =?UTF-8?q?=E9=98=9F=E6=B0=94=E5=8A=B2=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MY_Cataclysm/src/MY_CataclysmMain.lua | 2 ++ MY_Cataclysm/src/MY_CataclysmParty.lua | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/MY_Cataclysm/src/MY_CataclysmMain.lua b/MY_Cataclysm/src/MY_CataclysmMain.lua index bde8d005c..e022e7f10 100644 --- a/MY_Cataclysm/src/MY_CataclysmMain.lua +++ b/MY_Cataclysm/src/MY_CataclysmMain.lua @@ -107,6 +107,8 @@ local function UpdateTeamMonData() if data.bCheckLevel then v.nLevel = data.nLevel end + v.szDisplayName = v.szDisplayName or data.szDisplayName + v.szDisplayName = v.szDisplayName and X.RenderTemplateString(v.szDisplayName, nil, -1, false, false) v.nIcon = data.nIcon table.insert(aBuff, v) end diff --git a/MY_Cataclysm/src/MY_CataclysmParty.lua b/MY_Cataclysm/src/MY_CataclysmParty.lua index 0fa7bdb8d..cab2a99d6 100644 --- a/MY_Cataclysm/src/MY_CataclysmParty.lua +++ b/MY_Cataclysm/src/MY_CataclysmParty.lua @@ -1699,7 +1699,7 @@ function D.UpdateCharaterBuff(p, handle, tKeep) local szCountdownKey = 'MY_CATACLYSM_' .. tBuff.dwID .. '_' .. tRule.szKey FireUIEvent('MY_LIFEBAR_COUNTDOWN', dwCharID, 'BUFF', szCountdownKey, { dwBuffID = tBuff.dwID, - szText = tBuff.szName, + szText = tRule.szDisplayName or tBuff.szName, nLogicFrame = tBuff.nEndFrame, col = tRule.colScreenHead or tRule.col, nPriority = tItem.nPriority, From 9f2498fc03a5d77fce40600c9f1bb79c15e88c3b Mon Sep 17 00:00:00 2001 From: LyKoiya <1511137684@qq.com> Date: Wed, 1 Jul 2026 01:30:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E5=9B=A2=E9=98=9F=E6=88=90=E5=91=98=E7=9A=84?= =?UTF-8?q?=E6=B0=94=E5=8A=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MY_TeamMon/src/MY_TeamMon.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MY_TeamMon/src/MY_TeamMon.lua b/MY_TeamMon/src/MY_TeamMon.lua index 1e4bd38c0..a18c2bee6 100644 --- a/MY_TeamMon/src/MY_TeamMon.lua +++ b/MY_TeamMon/src/MY_TeamMon.lua @@ -1064,7 +1064,7 @@ function D.OnBuff(dwOwner, bDelete, bCanCancel, dwBuffID, nCount, nBuffLevel, dw if MY_TEAM_MON_SHIELDED_TOTAL then return end - if MY_TEAM_MON_SHIELDED_OTHER_PLAYER and X.IsPlayer(dwSkillSrcID) and dwSkillSrcID ~= MY_TEAM_MON_CORE_PLAYERID then + if MY_TEAM_MON_SHIELDED_OTHER_PLAYER and X.IsPlayer(dwSkillSrcID) and dwSkillSrcID ~= MY_TEAM_MON_CORE_PLAYERID and not X.IsTeammate(dwSkillSrcID) then return end local szType = bCanCancel and 'BUFF' or 'DEBUFF'