158 lines
5.2 KiB
Plaintext
158 lines
5.2 KiB
Plaintext
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} ms,frameCount: {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 |