Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 43 additions & 9 deletions MY_TeamMon/src/MY_TeamMon.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)}
Expand Down