ro-table/Asstes/Resources/Script/FrameWork/Manager/AntiAutoAssistManager.txt
2025-06-04 05:02:57 +08:00

158 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

AntiAutoAssistManager = class("AntiAutoAssistManager")
AntiAutoAssistManager.ClickMvpReportInterval = 120*1000 -- 每隔120s向伺服器發送一次點選MVP的時間間隔
AntiAutoAssistManager.ClickMvpReportThreshold = 200 -- 大於0.2s的點選MVP時間間隔不會發送
AntiAutoAssistManager.CoordinatesReportInterval = 1800*1000 -- 每隔半小時向伺服器發送一次點選按鈕座標資訊的string
AntiAutoAssistManager.CoordinatesReportThreshold = 50 -- 小於50次的特定座標點選次數不會發送
AntiAutoAssistManager.SuspicionThreshold = 1 -- 嫌疑次數超過1就會被標記
local isMarked = false
local minClickMvpInterval, frameCountOfMin, clickMvpSendTimerId
local coordinatesMap, coordinatesTimerId
function AntiAutoAssistManager.Me()
if(AntiAutoAssistManager.me == nil) then
AntiAutoAssistManager.me = AntiAutoAssistManager.new()
end
return AntiAutoAssistManager.me
end
function AntiAutoAssistManager:ctor()
self:InitClickMvpData()
self:InitCoordinatesData()
end
function AntiAutoAssistManager:InitClickMvpData()
minClickMvpInterval = 10*1000
frameCountOfMin = 10*30
end
function AntiAutoAssistManager:InitCoordinatesData()
coordinatesMap = {
-- AutoBattleButton = {},
}
end
function AntiAutoAssistManager:RecvCheatTagStat(data)
LogUtility.InfoFormat("ClickMvp Suspicion Count: {0}", data.count)
if data.count > self.SuspicionThreshold then
self:Mark()
else
self:Unmark()
end
end
function AntiAutoAssistManager:Mark()
if isMarked then return end
isMarked = true
LogUtility.Info("You are marked")
self:StartRecordingPressCoordinates()
end
function AntiAutoAssistManager:Unmark()
if not isMarked then return end
isMarked = false
LogUtility.Info("You are unmarked")
self:StopRecordingPressCoordinates()
end
function AntiAutoAssistManager:StartRecordingPressCoordinates()
EventManager.Me():AddEventListener(AntiAutoAssistEvent.MousePress, self.HandleMousePress, self)
coordinatesTimerId = LuaTimer.Add(0, self.CoordinatesReportInterval, function()
self:SendPressCoordinates()
self:ClearPressCoordinates()
return true
end)
end
function AntiAutoAssistManager:StopRecordingPressCoordinates()
EventManager.Me():RemoveEventListener(AntiAutoAssistEvent.MousePress, self.HandleMousePress, self)
LuaTimer.Delete(coordinatesTimerId)
end
function AntiAutoAssistManager:HandleMousePress(obj)
local isPress, name, x, y = obj.isPress, obj.objName, obj.positionX, obj.positionY
if isPress then
self:RecordPressCoordinates(name, x, y)
end
end
function AntiAutoAssistManager:RecordPressCoordinates(name, x, y)
if not isMarked then return end
local objCoordinates = coordinatesMap[name]
--[[
if not objCoordinates then
objCoordinates = {}
coordinatesMap[name] = objCoordinates
end
]]
if not objCoordinates then return end
local coordinateStr = self:MakeCoordinateString(x, y)
if objCoordinates[coordinateStr] then
objCoordinates[coordinateStr] = objCoordinates[coordinateStr] + 1
else
objCoordinates[coordinateStr] = 1
end
LogUtility.Info(string.format("Record Press Coordinates: obj:%s, %s, count:%d", name, coordinateStr, objCoordinates[coordinateStr]))
end
function AntiAutoAssistManager:SendPressCoordinates()
local str = self:MakeSendPressCoordinatesString()
-- TODO:Send String
end
function AntiAutoAssistManager:ClearPressCoordinates()
for name,objCoordinates in pairs(coordinatesMap) do
for coordinateStr,count in pairs(objCoordinates) do
if count < 4 then -- 點選次數小於4的座標項刪除
objCoordinates[coordinateStr] = nil
else -- 其餘項次數歸零
objCoordinates[coordinateStr] = 0
end
end
--[[
local isAny = false
for k in pairs(objCoordinates) do
isAny = true
break
end
if not isAny then
coordinatesMap[name] = nil
end
]]
end
end
function AntiAutoAssistManager:RecordClickMvpInterval(interval, frameCount)
if interval < minClickMvpInterval then
minClickMvpInterval = math.floor(interval)
frameCountOfMin = frameCount
end
if not clickMvpSendTimerId and interval < self.ClickMvpReportThreshold then
LogUtility.Info("ClickMvpSend Service Started")
self:SendClickMvpInterval()
clickMvpSendTimerId = LuaTimer.Add(16, self.ClickMvpReportInterval, function ()
self:SendClickMvpInterval()
return true
end)
end
end
function AntiAutoAssistManager:SendClickMvpInterval()
local interval, frameCount = minClickMvpInterval, frameCountOfMin
if interval < self.ClickMvpReportThreshold then
LogUtility.InfoFormat("SendClickMvp interval: {0} msframeCount: {1} ", interval, frameCount)
ServiceNUserProxy.Instance:CallCheatTagUserCmd(interval, frameCount)
self:InitClickMvpData()
end
end
function AntiAutoAssistManager:MakeCoordinateString(x,y)
return string.format("x%dy%d", x*1000, y*1000)
end
function AntiAutoAssistManager:MakeSendPressCoordinatesString()
-- TODO: Make String
return ""
end