Jump to content

getElementData~setElementData


Recommended Posts

getElementData(int, "status") 
setElementData(int, "status", lol) 

Хотелось бы спросить, для чего эту функцию заменяют на кустомную? Её можно разве подменить читами или т.п?

local secretHandle = '' 
  
addEventHandler("onElementDataChange", getRootElement(),  
    function (index, oldValue) 
        if not client then 
            return 
        end 
        local theElement = source 
        if (index ~= "interiormarker") and (index ~= "i:left") and (index ~= "i:right") then 
            local isProtected = getElementData(theElement, secretHandle.."p:"..index) 
            if (isProtected) then 
                -- get real source here 
                -- it aint source! 
                local sourceClient = client 
                if (sourceClient) then 
                    if (getElementType(sourceClient) == "player") then 
                        local newData = getElementData(source, index) 
                        local playername = getPlayerName(source) or "Somethings" 
                        -- Get rid of the player 
                        local msg = "[AdmWarn] " .. getPlayerName(sourceClient) .. " sent illegal data. Player has been banned." 
                        local msg2 = " (victim: "..playername.." index: "..index .." newvalue:".. tostring(newData) .. " oldvalue:".. tostring(oldValue)  ..")" 
                        --outputConsole(msg) 
                        --outputConsole(msg2) 
                        --exports.global:sendMessageToAdmins(msg) 
                        exports.global:sendMessageToAdmins(msg) 
                        exports.global:sendMessageToAdmins(msg2) 
                        --exports.logs:logMessage(msg..msg2, 29) 
                        --exports.logs:dbLog(sourceClient, 5, sourceClient, msg..msg2 ) 
                         
                        -- uncomment this when it works 
                        --local ban = banPlayer(sourceClient, false, false, true, getRootElement(), "Hacked Client.", 0) 
                         
                        -- revert data 
                        changeProtectedElementDataEx(source, index, oldValue, true) 
                    end 
                end 
            end 
        end 
    end 
); 
  
addEventHandler ( "onPlayerJoin", getRootElement(),  
    function ()  
        protectElementData(source, "adminlevel") 
        protectElementData(source, "account:id") 
        protectElementData(source, "account:username") 
        protectElementData(source, "legitnamechange") 
        protectElementData(source, "dbid") 
    end 
); 
  
function allowElementData(thePlayer, index) 
    setElementData(thePlayer, secretHandle.."p:"..index, false, false) 
end 
  
function protectElementData(thePlayer, index) 
    setElementData(thePlayer, secretHandle.."p:"..index, true, false) 
end 
  
function changeProtectedElementData(thePlayer, index, newvalue) 
    allowElementData(thePlayer, index) 
    setElementData(thePlayer, index, newvalue) 
    protectElementData(thePlayer, index) 
end 
  
function changeProtectedElementDataEx(thePlayer, index, newvalue, sync, nosyncatall) 
    if (thePlayer) and (index) then 
        if not newvalue then 
            newvalue = nil 
        end 
        if not nosyncatall then 
            nosyncatall = false 
        end 
     
        allowElementData(thePlayer, index) 
        if not setElementData(thePlayer, index, newvalue, sync) then 
        --  if not thePlayer or not isElement(thePlayer) then 
        --  outputDebugString("changeProtectedElementDataEx") 
        -- --   outputDebugString(tostring(thePlayer)) 
        --  outputDebugString("index: "..index) 
        --  outputDebugString("newvalue: "..tostring(newvalue)) 
        --  outputDebugString("sync: "..tostring(sync)) 
        --  end 
        end 
        if not sync then 
            if not nosyncatall then 
                if getElementType ( thePlayer ) == "player" then 
                    triggerClientEvent(thePlayer, "edu", getRootElement(), thePlayer, index, newvalue) 
                end 
            end 
        end 
        protectElementData(thePlayer, index) 
        return true 
    end 
    return false 
end 
  
function genHandle() 
    local hash = '' 
    for Loop = 1, math.random(5,16) do 
        hash = hash .. string.char(math.random(65, 122)) 
    end 
    return hash 
end 
  
function fetchH() 
    return secretHandle 
end 
  
secretHandle = genHandle() 

Link to comment

Просто в МТА 1.0.5 кое кому удалось взломать защиту клиентских скриптов, это позволило загружать свои клиентские скрипты и выполнять их. Так как далеко не все скриптеры понимают что либо в безопасности, им хватает ума хранить важную информацию в ElementData, и поэтому делают такой костыль который запрещает изменять ElementData с клиента.

А вобще и читами можно хакнуть. Любую программу можно взломать.. Даже МТАшный драйвер не поможет при умелых руках.

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...