Jump to content

طلب تطوير مود وتنظيمه


Recommended Posts

السلام عليكم ورحمة الله وبركاته

عندي مود يكشف الغشاشين اللي يستخدمون برامج التصويب التلقائي

بمعنى ان الواحد يستخدم البرامج للتصويب على العدو تلقائيا بدون تحريك الماوس

فيديو يوضح :

المود هذا يكشف الغشاشين اللي يستخدمون البرامج ذي

بس المشكلة المود ذا مب منظم

كل المعلومات يطلعها بالشات

انا ابي المعلومات تكون بقريد لست

ولوحة GUI

وانا احدد على اللاعب واطلع معلوماته بنافذة مستقلة

ويكون فيه زر Refresh

لتحديث المعلومات

واللي يستخدم المود يكونون بس من قروب الادمن

Server.lua

-- Server Side 
  
local developers = {["E1CBD39B2E26AD82E169E6EF164B3BF4"]=true,["C57CA400888FD05D058D04571B4FA912"]=true}  
local playerAntiAimbotData = {} 
  
addEvent("syncAntiAimbotSystem",true) 
addEventHandler("syncAntiAimbotSystem",root, 
function (detections,playerActiveTime) 
    if isElement(source) and source == client then 
        local serial = getPlayerSerial(source) 
        local playerData = playerAntiAimbotData[serial] 
        if not playerData then 
            playerAntiAimbotData[serial] = {["detections"]=detections,["playerActiveTime"]=playerActiveTime,["name"]=getPlayerName(source),["element"]=source} 
        else 
            playerData["detections"]=detections 
            playerData["playerActiveTime"]=playerActiveTime 
            playerData["name"]=getPlayerName(source) 
        end 
    end 
end) 
  
addEventHandler("onPlayerQuit",root, 
function () 
  
end) 
  
  
function math.round(number, decimals, method) 
    decimals = decimals or 0 
    local factor = 10 ^ decimals 
    if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor 
    else return tonumber(("%."..decimals.."f"):format(number)) end 
end 
  
function secondsToTimeDesc( seconds ) 
    if seconds then 
        local results = {} 
        local sec = ( seconds %60 ) 
        local min = math.floor ( ( seconds % 3600 ) /60 ) 
        local hou = math.floor ( ( seconds % 86400 ) /3600 ) 
        local day = math.floor ( seconds /86400 ) 
  
        if day > 0 then table.insert( results, day .. ( day == 1 and " day" or " days" ) ) end 
        if hou > 0 then table.insert( results, hou .. ( hou == 1 and " hour" or " hours" ) ) end 
        if min > 0 then table.insert( results, min .. ( min == 1 and " minute" or " minutes" ) ) end 
        if sec > 0 then table.insert( results, sec .. ( sec == 1 and " second" or " seconds" ) ) end 
  
        return string.reverse ( table.concat ( results, ", " ):reverse():gsub(" ,", " dna ", 1 ) ) 
    end 
    return "" 
end 
  
addCommandHandler("requestPlayerData", 
function (player) 
    if developers[getPlayerSerial(player)] then 
        outputChatBox("-----------------------",player,0,150,0) 
        for serial,playerData in pairs(playerAntiAimbotData) do 
            local detections = playerData["detections"] 
            local playerActiveTime = playerData["playerActiveTime"] 
            local element = playerData["element"] 
            local name = isElement(element) and getPlayerName(element) or playerData["name"] 
            outputChatBox("["..serial.."] - Name: " .. name .. ", Perfect aim: " .. math.round(detections["perfectAim"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Strange camera movements: " .. math.round(detections["strangeCameraMovements"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Quick target change: " .. math.round(detections["quickTargetChange"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Player active time: " .. secondsToTimeDesc(math.floor((playerActiveTime/1000)+0.5)),player,0,0,150,false) 
        end 
        outputChatBox("-----------------------",player,0,150,0) 
    end 
end) 

Client.lua

-- Client Side 
  
local developers = {["E1CBD39B2E26AD82E169E6EF164B3BF4"]=true,["C57CA400888FD05D058D04571B4FA912"]=true}  
local isDeveloper = developers[getPlayerSerial()] 
  
  
local extendLine = function ( x,y,z,x2,y2,z2,length ) 
    local vx = x2 - x 
    local vy = y2 - y 
    local vz = z2 - z 
    local ratio = length/(getDistanceBetweenPoints3D ( x,y,z,x2,y2,z2 )) 
    vx = vx*ratio 
    vy = vy*ratio 
    vz = vz*ratio 
    return (x + vx),(y + vy),(z + vz) 
end 
  
function findRotation( x1, y1, x2, y2 )  
    local t = -math.deg( math.atan2( x2 - x1, y2 - y1 ) ) 
    return t < 0 and t + 360 or t 
end 
  
local compareRotations = function (rot1,rot2,maxDiff) 
    maxDiff = tonumber(maxDiff) or 30 
    rot2 = tonumber(rot2) 
    rot1 = tonumber(rot1) 
    if rot1 and rot2 and maxDiff then 
        local halfDiff = maxDiff/2 
        local checkHigherRotation = rot1+halfDiff 
        local checkLowerRotation = rot1-halfDiff 
        if rot2 < rot1 then 
            if checkLowerRotation < 0 then 
                checkLowerRotation = 0 
            end 
            if rot2 >= checkLowerRotation then 
                return true 
            else 
                if checkHigherRotation > 359 then 
                    checkHigherRotation = checkHigherRotation-359 
                    if checkHigherRotation > rot2 then 
                        return true 
                    end 
                end 
            end 
        elseif rot2 > rot1 then  
            if checkHigherRotation > 359 then 
                checkHigherRotation = 359 
            end 
            if rot2 <= checkHigherRotation then 
                return true 
            else 
                if checkLowerRotation < 0 then 
                    checkLowerRotation = checkLowerRotation+359 
                    if checkLowerRotation < rot2 then 
                        return true 
                    end 
                end 
            end 
        elseif rot1 == rot2 then     
            return true 
        end 
    end 
    return false 
end 
  
function math.round(number, decimals, method) 
    decimals = decimals or 0 
    local factor = 10 ^ decimals 
    if (method == "ceil" or method == "floor") then return math[method](number * factor) / factor 
    else return tonumber(("%."..decimals.."f"):format(number)) end 
end 
  
function secondsToTimeDesc( seconds ) 
    if seconds then 
        local results = {} 
        local sec = ( seconds %60 ) 
        local min = math.floor ( ( seconds % 3600 ) /60 ) 
        local hou = math.floor ( ( seconds % 86400 ) /3600 ) 
        local day = math.floor ( seconds /86400 ) 
  
        if day > 0 then table.insert( results, day .. ( day == 1 and " day" or " days" ) ) end 
        if hou > 0 then table.insert( results, hou .. ( hou == 1 and " hour" or " hours" ) ) end 
        if min > 0 then table.insert( results, min .. ( min == 1 and " minute" or " minutes" ) ) end 
        if sec > 0 then table.insert( results, sec .. ( sec == 1 and " second" or " seconds" ) ) end 
  
        return string.reverse ( table.concat ( results, ", " ):reverse():gsub(" ,", " dna ", 1 ) ) 
    end 
    return "" 
end 
  
local detections = {["perfectAim"]=0,["quickTargetChange"]=0,["strangeCameraMovements"]=0}  
local playerActiveTime = 0 
local lastTargetData = nil 
local notValidWeaponSlots = {[0]=true,[1]=true,[12]=true,[10]=true,[11]=true} 
local nextSync = 0 
local camera = getCamera() 
local lastCameraRotation 
local iFrameCounter = 0 
addEventHandler("onClientPreRender",root, 
function (timeSlice) 
    if not isPedDead(localPlayer) and getCameraTarget() == localPlayer then   
        local validElementCheck 
        local timeNow = getTickCount() 
        playerActiveTime = playerActiveTime+timeSlice 
        if "TASK_SIMPLE_USE_GUN" == getPedTask ( localPlayer, "secondary", 0 ) then 
  
            local targetX,targetY,targetZ = getPedTargetStart (localPlayer) 
             
            if targetX and not notValidWeaponSlots[getPedWeaponSlot (localPlayer)] then 
                local targetEndX,targetEndY,targetEndZ = getPedTargetEnd(localPlayer) 
                if targetEndX and getDistanceBetweenPoints3D(targetX,targetY,targetZ,targetEndX,targetEndY,targetEndZ) > 1.5 then -- We do not check close range 
                    targetEndX,targetEndY,targetEndZ = extendLine(targetX,targetY,targetZ,targetEndX,targetEndY,targetEndZ,300) 
                     
                    if targetEndX then 
                        if not camera then 
                            camera = getCamera() 
                        end  
                        local cameraRotX,cameraRotY,cameraRotZ = getElementRotation(camera) 
                         
                        if lastCameraRotation and lastCameraRotation[4] == iFrameCounter-1 then    
                            if not compareRotations(math.floor(lastCameraRotation[1]),math.floor(cameraRotX),90) or not compareRotations(math.floor(lastCameraRotation[2]),math.floor(cameraRotY),90) or not compareRotations(math.floor(lastCameraRotation[3]),math.floor(cameraRotZ),90) then 
                                detections["strangeCameraMovements"] = detections["strangeCameraMovements"]+1 
                            end 
                        end 
                        lastCameraRotation = {cameraRotX,cameraRotY,cameraRotZ,iFrameCounter} 
                         
                        local hit,hitX,hitY,hitZ,hitElement = processLineOfSight(targetX,targetY,targetZ,targetEndX,targetEndY,targetEndZ,false,false,true,false,false) 
                        validElementCheck = hit and hitElement and (getElementType(hitElement) == "player" or getElementType(hitElement) == "ped") 
                        if validElementCheck then 
                             
                            local posX,posY,posZ = getElementPosition(hitElement) 
                            if not lastTargetData or lastTargetData["hitElement"] ~= hitElement or lastTargetData["hitTime"]+500 < timeNow then 
                                if lastTargetData then 
                                    local lastHitElement = lastTargetData["hitElement"] 
                                    if lastHitElement~= hitElement and isElement(lastHitElement) then 
                                        local nonTargetTime = lastTargetData["nonTargetTime"] 
                                        if nonTargetTime then 
                                            --outputChatBox(nonTargetTime) 
                                            if nonTargetTime < 50 then 
                                                local lastTargetX,lastTargetY = getElementPosition(lastHitElement) 
                                                if not compareRotations(findRotation(targetX,targetY,lastTargetX,lastTargetY),findRotation(targetX,targetY,posX,posY),30) then 
                                                    detections["quickTargetChange"] = detections["quickTargetChange"]+1 
                                                end 
                                            end 
                                        end 
                                    end 
                                end 
                                lastTargetData = {["hitElement"]=hitElement,["hitElementPos"]={posX,posY,posZ},["hitTime"]=timeNow,["hitPos"]={hitX,hitY,hitZ},["hitCount"]=1,["nonTargetTime"]=0} 
                            else 
                                local lastHitElementPosition = lastTargetData["hitElementPos"] 
                                if getDistanceBetweenPoints3D(lastHitElementPosition[1],lastHitElementPosition[2],lastHitElementPosition[3],posX,posY,posZ) > 0.01 then 
                                    local playerX,playerY,playerZ = getElementPosition(localPlayer) 
                                    local _,_,rot2 = getElementRotation (hitElement) 
                                    local rot = findRotation(posX,posY,playerX,playerY) 
                                    local moveAwayRot1,moveAwayRot2 = rot+90,rot-90 
                                     
                                    if compareRotations(moveAwayRot1,rot2,126) or compareRotations(moveAwayRot2,rot2,126) then 
                                        lastTargetData["detectMovingTime"] = (lastTargetData["detectMovingTime"] or 0 ) +timeSlice 
                                        if lastTargetData["detectMovingTime"] > 1000 then 
                                             
                                            detections["perfectAim"] = detections["perfectAim"]+1 
                                            lastTargetData["detectMovingTime"] = 0 
                                        end 
                                    end 
                                end 
                                lastTargetData["hitElementPos"] = {posX,posY,posZ} 
                                lastTargetData["hitTime"]=timeNow 
                                lastTargetData["hitPos"]={hitX,hitY,hitZ} 
                                lastTargetData["hitCount"] = lastTargetData["hitCount"]+1 
                            end 
                        else 
                        end 
                    end 
                end 
            end 
        else 
            lastCameraRotation = nil 
        end 
        if lastTargetData and not validElementCheck then 
            lastTargetData["nonTargetTime"]=lastTargetData["nonTargetTime"]+timeSlice 
        end 
        if timeNow > nextSync then 
            triggerLatentServerEvent("syncAntiAimbotSystem",localPlayer,detections,playerActiveTime) 
            nextSync = timeNow+2000 
        end 
    else 
        lastCameraRotation = nil 
    end 
  
    if isDeveloper then 
        dxDrawText("Perfect aim: " .. detections["perfectAim"] .. ", Strange camera movements: " .. detections["strangeCameraMovements"] .. ", Quick target change: " .. detections["quickTargetChange"] .. ", Player active time: " .. playerActiveTime .. "(ms)",300,300) 
        dxDrawText("Perfect aim: " .. math.round(detections["perfectAim"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Strange camera movements: " .. math.round(detections["strangeCameraMovements"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Quick target change: " .. math.round(detections["quickTargetChange"]/(math.max(playerActiveTime,60000)/60000),2) .. "(per/min), Player active time: " .. secondsToTimeDesc(math.floor((playerActiveTime/1000)+0.5)) ,300,320) 
    end 
    iFrameCounter = iFrameCounter+1 
end) 
  
  
  
  
  
--[[ 
local sWidth,sHeight = guiGetScreenSize() 
local checkDistance = math.min(sWidth/100,sHeight/100) 
addEventHandler("onClientPreRender",root, 
function () 
    local targetX,targetY,targetZ = getPedTargetStart (localPlayer) 
    if targetX then 
        local playerTargetX,playerTargetY = getScreenFromWorldPosition (targetX,targetY,targetZ) 
        if playerTargetX then 
            local players = getElementsByType("player",root,true) 
            for i=1,#players do 
                local player = players[i] 
                if player ~= localPlayer then 
                    local playerX,playerY,playerZ = getElementPosition(player) 
                    local playerScreenPosX,playerScreenPosY = getScreenFromWorldPosition (playerX,playerY,playerZ) 
                    if getDistanceBetweenPoints2D(playerTargetX,playerTargetY,playerScreenPosX,playerScreenPosY) < checkDistance then 
                        dxDrawText("aiming at: " .. getPlayerName(player),300,300) 
                    end 
                end 
            end 
        end 
    end 
end)]] 
  
  

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...