OnPlayerACInfo: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(added code example, format fixes)
m (typo, and something missing)
Line 70: Line 70:
             local name = getAccountName(account)
             local name = getAccountName(account)
             if isObjectInACLGroup("user."..name,group) then
             if isObjectInACLGroup("user."..name,group) then
             outputChatBox("The player "..playerName.." has triggered SD/AC "..acCode.."! Keep an eye out!",p)
             outputChatBox("The player "..playerName.." has triggered SD/AC #"..acCode.."! Keep an eye out!",p)
                         end
                         end
                   end
                   end
Line 76: Line 76:
       end
       end
end
end
-- Ensure no one gets missed when the resource is (re)started
function onRestart()
for _,p in ipairs (getElementsByType("player")) do
resendPlayerACInfo(p)
end
end
addEventHandler("onResourceStart", resourceRoot, onRestart)
</syntaxhighlight>
</syntaxhighlight>



Revision as of 14:33, 22 October 2018

This event is triggered when a player trips anti-cheat detections. It can be used to script a white/blacklist of custom d3d9.dll files, or a white/blacklist of players with certain anti-cheat codes. The relevant anti-cheat code has to be disabled (or not enabled) in the server mtaserver.conf to be of use here.

[[{{{image}}}|link=|]] Note: Any resource using this event should call resendPlayerACInfo for each player in onResourceStart

Parameters

table detectedACList, int d3d9Size, string d3d9MD5, string d3d9SHA256
  • detectedACList: A table of anti-cheat codes the player has triggered.
  • d3d9Size: A number representing the file size of any custom d3d9.dll the player may have installed.
  • d3d9MD5: A string containing the MD5 of any custom d3d9.dll the player may have installed.
  • d3d9SHA256: A string containing the SHA256 of any custom d3d9.dll the player may have installed.

Source

The source of this event is the player

Example

This example prints all information into the chatbox


function handleOnPlayerACInfo( detectedACList, d3d9Size, d3d9MD5, d3d9SHA256 )
    outputChatBox( "ACInfo for " .. getPlayerName(source)
                .. " detectedACList:" .. table.concat(detectedACList,",")
                .. " d3d9Size:" .. d3d9Size
                .. " d3d9SHA256:" .. d3d9SHA256
                )
end
	
addEventHandler( "onPlayerACInfo", root, handleOnPlayerACInfo )

-- Ensure no one gets missed when the resource is (re)started
addEventHandler( "onResourceStart", resourceRoot,
    function()
        for _,plr in ipairs( getElementsByType("player") ) do
            resendPlayerACInfo( plr )
        end
    end
)

This example will notify all online admins when someone triggers a (suspicious) detection

function handleAC(detectedACList)
    for _,acCode in ipairs(detectedACList) do
        if acCode == 33 then -- SD #33 in this code example = NetLimiter software (possible lagswitch)
        warnAdmins(getPlayerName(source),acCode)
        end
    end
end
addEventHandler("onPlayerACInfo", root, handleAC)


function warnAdmins(playerName,acCode)

local staffACL =
{
    [aclGetGroup("Admin")] = true,
    [aclGetGroup("Moderator")] = true,
}

    for _,p in ipairs (getElementsByType("player")) do
        local account = getPlayerAccount(p)
        if p and account then

        for group,_ in pairs(staffACL) do
            local name = getAccountName(account)
            if isObjectInACLGroup("user."..name,group) then
            outputChatBox("The player "..playerName.." has triggered SD/AC #"..acCode.."! Keep an eye out!",p)
                        end
                  end
            end
      end
end

-- Ensure no one gets missed when the resource is (re)started
function onRestart()
	for _,p in ipairs (getElementsByType("player")) do
		resendPlayerACInfo(p)
	end
end
addEventHandler("onResourceStart", resourceRoot, onRestart)

This example allows player serial exceptions for SD #14 (virtual machines). In order for this to work, it's important that you don't add SD #14 detection into mtaserver.conf, as this is a custom re-implementation.

-- List of serials which are allowed to use virtual machines
allowVM = { ["0123456789012345601234567890123456"] = true,
            ["A123637892167367281632896790123456"] = true,
            ["E123456789012347839207878392123456"] = true }

function handleOnPlayerACInfo( detectedACList, d3d9Size, d3d9MD5, d3d9SHA256 )
    for _,acCode in ipairs( detectedACList ) do
        if acCode == 14 then
            local serial = getPlayerSerial(source)
            if not allowVM[serial] then
                kickPlayer( source, "This server does not allow virtual machines." )
            end
        end
    end
end
addEventHandler( "onPlayerACInfo", root, handleOnPlayerACInfo )

-- Ensure no one gets missed when the resource is (re)started
addEventHandler( "onResourceStart", resourceRoot,
    function()
        for _,plr in ipairs( getElementsByType("player") ) do
            resendPlayerACInfo( plr )
        end
    end
)


See Also

Player events


Event functions