<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dutchman101</id>
	<title>Multi Theft Auto: Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dutchman101"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Dutchman101"/>
	<updated>2026-04-23T12:37:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerStaff&amp;diff=78498</id>
		<title>IsPlayerStaff</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerStaff&amp;diff=78498"/>
		<updated>2023-10-31T10:56:15Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&lt;br /&gt;
This function checks if the player is server staff (for example: Moderator or Admin, by ACL group membership).&lt;br /&gt;
&lt;br /&gt;
It's useful to check if a player is supposed to have access to/be able to use something.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool isPlayerStaff ( element thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required arguments===&lt;br /&gt;
* '''thePlayer''': The player to check rights of&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the player is in a staff group, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Function source&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local staffACLs = {&lt;br /&gt;
	aclGetGroup(&amp;quot;Admin&amp;quot;),&lt;br /&gt;
	aclGetGroup(&amp;quot;Moderator&amp;quot;),&lt;br /&gt;
	aclGetGroup(&amp;quot;SuperModerator&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function isPlayerStaff(p)&lt;br /&gt;
	if isElement(p) and getElementType(p) == &amp;quot;player&amp;quot; and not isGuestAccount(getPlayerAccount(p)) then&lt;br /&gt;
		local object = getAccountName(getPlayerAccount(p))&lt;br /&gt;
&lt;br /&gt;
		for _, group in ipairs(staffACLs) do&lt;br /&gt;
			if isObjectInACLGroup(&amp;quot;user.&amp;quot; .. object, group) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example adds a command to speed up your vehicle's handling, but only when you're in a staff ACL.&lt;br /&gt;
&lt;br /&gt;
'''Beginners note''': By adding &amp;quot;'''if not isPlayerAllowed(client) then return end'''&amp;quot; before execution of the code, you will limit its usage to only server admins and staff.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function speedUpHandling(client)&lt;br /&gt;
    if not isPlayerStaff(client) then return end -- check if the player is part of a staff ACL, if not then we won't execute (allow them to use it)&lt;br /&gt;
    local vehicle = getPedOccupiedVehicle(client)&lt;br /&gt;
    if vehicle then&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;engineAcceleration&amp;quot;,17)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;tractionMultiplier&amp;quot;,0.9)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;tractionLoss&amp;quot;,1.1)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;dragCoeff&amp;quot;,0.0)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;maxVelocity&amp;quot;,750)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;tunevehicle&amp;quot;,speedUpHandling)&lt;br /&gt;
&lt;br /&gt;
-- Now, we'll add the custom function code to the file, so that the call to 'isPlayerStaff(client)' actually works (in the script that needs access check, like above)&lt;br /&gt;
local staffACLs =&lt;br /&gt;
{&lt;br /&gt;
    aclGetGroup(&amp;quot;Admin&amp;quot;),&lt;br /&gt;
    aclGetGroup(&amp;quot;Moderator&amp;quot;),&lt;br /&gt;
    aclGetGroup(&amp;quot;SuperModerator&amp;quot;),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function isPlayerStaff(p)&lt;br /&gt;
    local acc = getPlayerAccount(p)&lt;br /&gt;
&lt;br /&gt;
    if not acc then return false end&lt;br /&gt;
    if isGuestAccount(acc) then return false end&lt;br /&gt;
&lt;br /&gt;
    local object = getAccountName(acc)&lt;br /&gt;
&lt;br /&gt;
    for _,group in ipairs(staffACLs) do&lt;br /&gt;
        if isObjectInACLGroup(&amp;quot;user.&amp;quot;..object,group) then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerStaff&amp;diff=78497</id>
		<title>IsPlayerStaff</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerStaff&amp;diff=78497"/>
		<updated>2023-10-31T10:55:36Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&lt;br /&gt;
This function checks if the player is server staff (for example: Moderator or Admin, by ACL group membership).&lt;br /&gt;
&lt;br /&gt;
It's useful to check if a player is supposed to have access to/be able to use something.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool isPlayerStaff ( element thePlayer )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required arguments===&lt;br /&gt;
* '''thePlayer''': The player to check rights of&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if the player is in a staff group, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Function source&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local staffACLs = {&lt;br /&gt;
	aclGetGroup(&amp;quot;Admin&amp;quot;),&lt;br /&gt;
	aclGetGroup(&amp;quot;Moderator&amp;quot;),&lt;br /&gt;
	aclGetGroup(&amp;quot;SuperModerator&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function isPlayerStaff(p)&lt;br /&gt;
	if isElement(p) and getElementType(p) == &amp;quot;player&amp;quot; and not isGuestAccount(getPlayerAccount(p)) then&lt;br /&gt;
		local object = getAccountName(getPlayerAccount(p))&lt;br /&gt;
&lt;br /&gt;
		for _, group in ipairs(staffACLs) do&lt;br /&gt;
			if isObjectInACLGroup(&amp;quot;user.&amp;quot; .. object, group) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example adds a command to speed up your vehicle's handling, but only when you're in a staff ACL.&lt;br /&gt;
&lt;br /&gt;
'''Beginners note''': By adding &amp;quot;'''if not isPlayerAllowed(p) then return end'''&amp;quot; before execution of the code, you will limit its usage to only server admins and staff.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function speedUpHandling(client)&lt;br /&gt;
    if not isPlayerStaff(client) then return end -- check if the player is part of a staff ACL, if not then we won't execute (allow them to use it)&lt;br /&gt;
    local vehicle = getPedOccupiedVehicle(client)&lt;br /&gt;
    if vehicle then&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;engineAcceleration&amp;quot;,17)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;tractionMultiplier&amp;quot;,0.9)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;tractionLoss&amp;quot;,1.1)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;dragCoeff&amp;quot;,0.0)&lt;br /&gt;
        setVehicleHandling(vehicle,&amp;quot;maxVelocity&amp;quot;,750)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;tunevehicle&amp;quot;,speedUpHandling)&lt;br /&gt;
&lt;br /&gt;
-- Now, we'll add the custom function code to the file, so that the call to 'isPlayerStaff(client)' actually works (in the script that needs access check, like above)&lt;br /&gt;
local staffACLs =&lt;br /&gt;
{&lt;br /&gt;
    aclGetGroup(&amp;quot;Admin&amp;quot;),&lt;br /&gt;
    aclGetGroup(&amp;quot;Moderator&amp;quot;),&lt;br /&gt;
    aclGetGroup(&amp;quot;SuperModerator&amp;quot;),&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function isPlayerStaff(p)&lt;br /&gt;
    local acc = getPlayerAccount(p)&lt;br /&gt;
&lt;br /&gt;
    if not acc then return false end&lt;br /&gt;
    if isGuestAccount(acc) then return false end&lt;br /&gt;
&lt;br /&gt;
    local object = getAccountName(acc)&lt;br /&gt;
&lt;br /&gt;
    for _,group in ipairs(staffACLs) do&lt;br /&gt;
        if isObjectInACLGroup(&amp;quot;user.&amp;quot;..object,group) then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78496</id>
		<title>IsPlayerInACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78496"/>
		<updated>2023-10-31T10:48:13Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if the player is in the target acl.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerInACL ( player thePlayer, string ACLGroup )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''thePlayer''': The player element that you want to check.&lt;br /&gt;
* '''ACLGroup''': The name of the ACL group that you want to check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns true if the player's account is in the ACL, false if otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isPlayerInACL(player, acl)&lt;br /&gt;
    if (isElement(player)) and (getElementType(player) == &amp;quot;player&amp;quot;) and (not isGuestAccount(getPlayerAccount(player))) and (aclGetGroup(acl or &amp;quot;&amp;quot;)) then&lt;br /&gt;
        local account = getPlayerAccount(player)&lt;br /&gt;
        return isObjectInACLGroup(&amp;quot;user.&amp;quot;..getAccountName(account), aclGetGroup(acl))&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Make sure to only call this check with 'client' and not source or the equivalent (see https://wiki.multitheftauto.com/wiki/Script_security)&lt;br /&gt;
function checkAccess(client)&lt;br /&gt;
    if isPlayerInACL(client, &amp;quot;Admin&amp;quot;) then&lt;br /&gt;
        outputChatBox(&amp;quot;Access Granted!&amp;quot;, client)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;Access Denied!&amp;quot;, client)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;myaccess&amp;quot;, checkAccess)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[RU:IsPlayerInACL]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78495</id>
		<title>IsPlayerInACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78495"/>
		<updated>2023-10-31T10:47:34Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Linkify&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if the player is in the target acl.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerInACL ( player thePlayer, string ACLGroup )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''thePlayer''': The player element that you want to check.&lt;br /&gt;
* '''ACLGroup''': The name of the ACL group that you want to check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns true if the player's account is in the ACL, false if otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isPlayerInACL(player, acl)&lt;br /&gt;
    if (isElement(player)) and (getElementType(player) == &amp;quot;player&amp;quot;) and (not isGuestAccount(getPlayerAccount(player))) and (aclGetGroup(acl or &amp;quot;&amp;quot;)) then&lt;br /&gt;
        local account = getPlayerAccount(player)&lt;br /&gt;
        return isObjectInACLGroup(&amp;quot;user.&amp;quot;..getAccountName(account), aclGetGroup(acl))&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Make sure to only call this check with 'client' and not source or the equivalent (see https://wiki.multitheftauto.com/wiki/Script_security)&lt;br /&gt;
function checkAccess(client)&lt;br /&gt;
    if isPlayerInACL(client, &amp;quot;Admin&amp;quot;) then&lt;br /&gt;
        outputChatBox(&amp;quot;Access Granted!&amp;quot;, client)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;Access Denied!&amp;quot;, client)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;myaccess&amp;quot;, checkAccess)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Author:''' xXMADEXx.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[RU:IsPlayerInACL]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78494</id>
		<title>IsPlayerInACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78494"/>
		<updated>2023-10-31T10:46:54Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Console &amp;gt; Admin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if the player is in the target acl.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerInACL ( player thePlayer, string ACLGroup )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''thePlayer''': The player element that you want to check.&lt;br /&gt;
* '''ACLGroup''': The name of the ACL group that you want to check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns true if the player's account is in the ACL, false if otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isPlayerInACL(player, acl)&lt;br /&gt;
    if (isElement(player)) and (getElementType(player) == &amp;quot;player&amp;quot;) and (not isGuestAccount(getPlayerAccount(player))) and (aclGetGroup(acl or &amp;quot;&amp;quot;)) then&lt;br /&gt;
        local account = getPlayerAccount(player)&lt;br /&gt;
        return isObjectInACLGroup(&amp;quot;user.&amp;quot;..getAccountName(account), aclGetGroup(acl))&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Make sure to only call this check with 'client' and not source or the equivalent (see [[Script security]])&lt;br /&gt;
function checkAccess(client)&lt;br /&gt;
    if isPlayerInACL(client, &amp;quot;Admin&amp;quot;) then&lt;br /&gt;
        outputChatBox(&amp;quot;Access Granted!&amp;quot;, client)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;Access Denied!&amp;quot;, client)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;myaccess&amp;quot;, checkAccess)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Author:''' xXMADEXx.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[RU:IsPlayerInACL]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Meta.xml&amp;diff=78493</id>
		<title>Meta.xml</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Meta.xml&amp;diff=78493"/>
		<updated>2023-10-31T10:43:40Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Added common template to help 90% of readers (that don't come here to understand all tags)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ''meta.xml'' file presents MTA with a set of metadata, such as the resource's name, the scripts to include, and which files to precache for sending to clients among other things. It is also the scope of &amp;quot;elements&amp;quot;. It is written in XML, which is based on HTML and is the parent of XHTML.&lt;br /&gt;
&lt;br /&gt;
=Tags=&lt;br /&gt;
XML is a textual data format which is widely used for the representation of data. MTA uses an XML-based language to describe the metadata for resources by using the tags below:&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;info /&amp;gt;''' Information about this resource, possible parameters include (any arbitrary parameters can be used and read using [[getResourceInfo]]):&lt;br /&gt;
** '''author:''' The author of this resource&lt;br /&gt;
** '''version:''' The version of this resource&lt;br /&gt;
** '''name:''' The name of this resource&lt;br /&gt;
** '''description:''' A brief description of this resource&lt;br /&gt;
** '''type:''' The type of this resource, that can be &amp;quot;gamemode&amp;quot;, &amp;quot;script&amp;quot;, &amp;quot;map&amp;quot; or &amp;quot;misc&amp;quot;.&lt;br /&gt;
** '''gamemodes:''' The gamemodes to be compatible with the resource. It must be the name of the gamemode resource, not the gamemode name. If you want it to be compatible with multiple gamemodes, it must be in a comma-separated list without spaces. (e.g. gamemodes=&amp;quot;test1,test2&amp;quot;). &lt;br /&gt;
*'''&amp;lt;script /&amp;gt;''' Source code for this resource, possible parameters are:&lt;br /&gt;
** '''src:''' The file name of the source code&lt;br /&gt;
** '''type:''' The type of source code: &amp;quot;client&amp;quot;, &amp;quot;server&amp;quot; or &amp;quot;shared&amp;quot;.&lt;br /&gt;
*** A '''shared''' script will be ran for both client and server, but separately as usual (basically adds the script twice: once for server and once for client)&lt;br /&gt;
**'''cache:''' When the script file type is &amp;quot;client&amp;quot;, this setting controls whether the file is saved on the clients' hard drive. If you are concerned about your scripts security, make sure to read [https://wiki.multitheftauto.com/wiki/Script_security Script security guide]. Default is &amp;quot;true&amp;quot;. Using &amp;quot;false&amp;quot; will mean the file is not saved. ''(Note: cache=false files are started at the client first, so lua file load order might differ when mixing cache settings)''&lt;br /&gt;
**'''validate:''' If set to &amp;quot;false&amp;quot;, compatibility checks are skipped.&lt;br /&gt;
*'''&amp;lt;map /&amp;gt;''' The map for a gamemode, possible parameters are:&lt;br /&gt;
**'''src:''' .map file name (can be path too eg. &amp;quot;maps/filename.map&amp;quot;)&lt;br /&gt;
**'''dimension:''' Dimension in which the map will be loaded (optional)&lt;br /&gt;
*'''&amp;lt;file /&amp;gt;''' A client-side file. Generally these are images, .txd, .col, .dff or .xml files. They'll be downloaded by clients when the resources is started (or on join)&lt;br /&gt;
**'''src:''' client-side file name (can be path too eg. &amp;quot;images/image.png&amp;quot;)&lt;br /&gt;
**'''download:''' Whether or not to be sent to the client automatically (optional). Default is &amp;quot;true&amp;quot;. Using &amp;quot;false&amp;quot; will mean they are not sent on resource start but could later be used by [[downloadFile]].&lt;br /&gt;
*'''&amp;lt;include /&amp;gt;''' Include resources that this resource will use&lt;br /&gt;
**'''resource:''' Resource name that you want to start with this resource&lt;br /&gt;
**'''minversion:''' Minimum version that '''resource''' needs to be (optional)&lt;br /&gt;
**'''maxversion:''' Maximum version that '''resource''' needs to be (optional)&lt;br /&gt;
*'''&amp;lt;config /&amp;gt;''' Config file (.xml) can be accessed by resource, possible parameters are:&lt;br /&gt;
**'''src:''' The file name of the config file&lt;br /&gt;
**'''type:''' The type of the config file: &amp;quot;client&amp;quot; or &amp;quot;server&amp;quot;&lt;br /&gt;
*'''&amp;lt;export /&amp;gt;''' This exports functions from this resource, so other resources can use them with [[call]]&lt;br /&gt;
**'''function:''' The function name&lt;br /&gt;
**'''type''' Whether function is exported server-side or client-side (valid values are: &amp;quot;client&amp;quot;, &amp;quot;server&amp;quot; and &amp;quot;shared&amp;quot;)&lt;br /&gt;
*** A '''shared''' export will make the function callable from both client and server scripts (basically adds the export twice: once for server and once for client)&lt;br /&gt;
**'''http:''' Can the function be called via HTTP (true/false)&lt;br /&gt;
*'''&amp;lt;html /&amp;gt;'''&lt;br /&gt;
**'''src:''' The filename for the HTTP file (can be a path)&lt;br /&gt;
**'''default:''' The html file is one that is shown by default when visiting /resourceName/ on the server. Only one html can be default, the rest are ignored. (true/false)&lt;br /&gt;
**'''raw:''' The html file is not parsed by the Lua interpreter and is treated as binary data. Must be used for binary files (images mainly) (true/false)&lt;br /&gt;
*'''&amp;lt;settings /&amp;gt;''' Most gamemodes use [[settings system]] to let server admins to configure it how they like. For instance you could set round time and then use [[get]] and [[set]] to get the value or change it, respectively.&lt;br /&gt;
** '''&amp;lt;setting /&amp;gt;''' Resource settings can be accessed by resource and Admin panel, possible parameters are:&lt;br /&gt;
*** '''name:''' The setting name used by the scripts to get or set the setting value&lt;br /&gt;
*** '''value:''' The setting default value used by the scripts&lt;br /&gt;
*** '''friendlyname:''' A friendly name to the setting (optional)&lt;br /&gt;
*** '''accept:''' The values the setting could accept (optional)&lt;br /&gt;
*** '''examples:''' An Example of a value (optional)&lt;br /&gt;
*** '''desc:''' A description of the setting (optional)&lt;br /&gt;
*'''&amp;lt;min_mta_version /&amp;gt;''' Minimum version requirements for this resource to run correctly. When authoring resources, the minimum version should usually be set to the current released version of MTA:SA (which at the moment is &amp;quot;{{Current Version|full}}&amp;quot;). See example for example.&lt;br /&gt;
**'''client:''' The minimum client version&lt;br /&gt;
**'''server:''' The minimum server version&lt;br /&gt;
*'''&amp;lt;aclrequest /&amp;gt;''' A list of [[Access_Control_List|ACL]] rights this resource will need. Any user with admin permission can accept or reject a resource ACL request by using the command: /aclrequest [list/allow/deny] &amp;lt;resourceName&amp;gt; [&amp;lt;right&amp;gt;/all]&lt;br /&gt;
** '''&amp;lt;right /&amp;gt;''' an individual right&lt;br /&gt;
***'''name:''' The right name.&lt;br /&gt;
***'''access:''' Set to ''true'' to allow the resource to access this right. Set to ''false'' to deny the access to this right.&lt;br /&gt;
{{New items|3.0132|1.3.1 r4141|&lt;br /&gt;
*'''&amp;lt;sync_map_element_data /&amp;gt;''' Controls whether map [[Element_data|element data]] such as &amp;quot;PosX&amp;quot; and &amp;quot;DoubleSided&amp;quot; are transferred to the client. This data is usually not required by most gamemodes or resources. (Map Editor and Interiors require this to be not set to false to work). When set in a gamemode meta.xml, the setting will apply to all maps loaded by that resource.&lt;br /&gt;
**'''false:''' Disable transfer of map element data for all resources. This can reduce map download times considerably.&lt;br /&gt;
**'''true:''' Enable transfer of map element data for all resources. (If '''false''' and '''true''' are set in different resources, true will have priority and all resources will transfer map element data)&lt;br /&gt;
}}&lt;br /&gt;
{{New items|3.0140|1.4.0 r5313|&lt;br /&gt;
*'''&amp;lt;oop /&amp;gt;''' OOP - Please refer to [[OOP]] for documentation.&lt;br /&gt;
**'''false:''' Disable OOP.&lt;br /&gt;
**'''true:''' Enable OOP.&lt;br /&gt;
}}&lt;br /&gt;
{{New feature/item|3.0150|1.5.0|7308|&lt;br /&gt;
*'''&amp;lt;download_priority_group /&amp;gt;''' If not set, the download priority group for a resource defaults to 0. If this is set higher than 0, then the resource will be downloaded and started on the client earlier than other resources. This option is useful for resources with critical client functionality that other things in your gamemode (or fair play) rely on. If set to less than 0 (a negative number, like -1), the resource will be downloaded and started on the client later than other resources. As this can be confusing, here is an example: &lt;br /&gt;
**'''Resource A: &amp;lt;download_priority_group&amp;gt;20&amp;lt;/download_priority_group&amp;gt;''' will start earlier than..&lt;br /&gt;
**'''Resource B: &amp;lt;download_priority_group&amp;gt;10&amp;lt;/download_priority_group&amp;gt;'''&amp;lt;br/&amp;gt;In this case, Resource A will start earlier than Resource B because its value (20) is higher than (10). In turn, Resource B will still start earlier than a resource with a negative value or a value below 10 (like 5).&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Quick start template:&lt;br /&gt;
{{#tag:syntaxhighlight |&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;server.lua&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;client.lua&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
|lang=&amp;quot;xml&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
Here's an example of a meta file using some of the tags mentioned:&lt;br /&gt;
{{#tag:syntaxhighlight |&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info author=&amp;quot;Slothman&amp;quot; version=&amp;quot;1.0.2&amp;quot; name=&amp;quot;Stealth&amp;quot; description=&amp;quot;Allow scripts to insert a ped that simulates combat with a real player&amp;quot; type=&amp;quot;gamemode&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script src=&amp;quot;stealthmain_server.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;noiseblip.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;mission_timer.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;gadgets_server.lua&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;gadgets_client.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;stealthmain_client.lua&amp;quot; type=&amp;quot;client&amp;quot; validate=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;noisebar.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;spycam.lua&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;riemann_z_demonstration.lua&amp;quot; type=&amp;quot;client&amp;quot; cache=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;map src=&amp;quot;base.map&amp;quot; dimension=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.txd&amp;quot; download=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.dff&amp;quot; download=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;riot_shield.col&amp;quot; download=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;armor.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;camera.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;cloak.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;goggles.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;mine.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;radar.png&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;file src=&amp;quot;shield.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;scoreboard&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;killmessages&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;include resource=&amp;quot;maplimits&amp;quot; /&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;config src=&amp;quot;help.xml&amp;quot; type=&amp;quot;client&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;export function=&amp;quot;exampleExport1&amp;quot; type=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;export function=&amp;quot;exampleExport2&amp;quot; type=&amp;quot;client&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;export function=&amp;quot;exampleExport3&amp;quot; type=&amp;quot;shared&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;settings&amp;gt;&lt;br /&gt;
        &amp;lt;setting name=&amp;quot;roundlimit&amp;quot; value=&amp;quot;[6]&amp;quot; /&amp;gt; &amp;lt;!-- round length in minutes --&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;teamdamage&amp;quot; value=&amp;quot;[1]&amp;quot; /&amp;gt; &amp;lt;!-- 0 for team protection off, 1 for team protection on --&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;teambalance&amp;quot; value=&amp;quot;[1]&amp;quot; /&amp;gt; &amp;lt;!--  difference limit of amount of players between teams --&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;isAllowedToShoot&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;admingroup&amp;quot; value=&amp;quot;Admin,AdminPlus&amp;quot;&lt;br /&gt;
		friendlyname=&amp;quot;Admin group list&amp;quot;&lt;br /&gt;
		group=&amp;quot;_Advanced&amp;quot;&lt;br /&gt;
		accept=&amp;quot;*&amp;quot;&lt;br /&gt;
		examples=&amp;quot;Admin,Moderator,SuperModerator&amp;quot;&lt;br /&gt;
		desc=&amp;quot;To use this resource, the player must belong to one of the groups listed.&amp;quot;&lt;br /&gt;
		/&amp;gt; &amp;lt;!-- a setting example using all optional parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;spazammo&amp;quot; value=&amp;quot;[25]&amp;quot; /&amp;gt; &amp;lt;!-- ammo amounts --&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;m4ammo&amp;quot; value=&amp;quot;[100]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;shotgunammo&amp;quot; value=&amp;quot;[25]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;sniperammo&amp;quot; value=&amp;quot;[20]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;ak47ammo&amp;quot; value=&amp;quot;[120]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;rifleammo&amp;quot; value=&amp;quot;[40]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;deserteagleammo&amp;quot; value=&amp;quot;[45]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;pistolammo&amp;quot; value=&amp;quot;[132]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;uziammo&amp;quot; value=&amp;quot;[150]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;tec9ammo&amp;quot; value=&amp;quot;[150]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;silencedammo&amp;quot; value=&amp;quot;[65]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;grenadeammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;satchelammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;teargasammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;setting name=&amp;quot;molatovammo&amp;quot; value=&amp;quot;[4]&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/settings&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;min_mta_version server=&amp;quot;1.5.2-9.07903&amp;quot; client=&amp;quot;1.5.2-9.07903&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;aclrequest&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.startResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.stopResource&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;right name=&amp;quot;function.setPlayerMuted&amp;quot; access=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/aclrequest&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;sync_map_element_data&amp;gt;false&amp;lt;/sync_map_element_data&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;oop&amp;gt;false&amp;lt;/oop&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;download_priority_group&amp;gt;0&amp;lt;/download_priority_group&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
|lang=&amp;quot;xml&amp;quot;}}&lt;br /&gt;
[[Category:Scripting Concepts]]&lt;br /&gt;
[[hu:Meta.xml]]&lt;br /&gt;
[[cs:Meta.xml]]&lt;br /&gt;
[[de:Meta.xml]]&lt;br /&gt;
[[es:Sobre el archivo &amp;quot;meta.xml&amp;quot;]]&lt;br /&gt;
[[it:Meta.xml]]&lt;br /&gt;
[[pl:Meta.xml]]&lt;br /&gt;
[[ru:Meta.xml]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78492</id>
		<title>IsPlayerInACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78492"/>
		<updated>2023-10-31T10:38:33Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Another check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if the player is in the target acl.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerInACL ( player thePlayer, string ACLGroup )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''thePlayer''': The player element that you want to check.&lt;br /&gt;
* '''ACLGroup''': The name of the ACL group that you want to check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns true if the player's account is in the ACL, false if otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isPlayerInACL(player, acl)&lt;br /&gt;
    if (isElement(player)) and (getElementType(player) == &amp;quot;player&amp;quot;) and (not isGuestAccount(getPlayerAccount(player))) and (aclGetGroup(acl or &amp;quot;&amp;quot;)) then&lt;br /&gt;
        local account = getPlayerAccount(player)&lt;br /&gt;
        return isObjectInACLGroup(&amp;quot;user.&amp;quot;..getAccountName(account), aclGetGroup(acl))&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Make sure to only call this check with 'client' and not source or the equivalent (see [[Script security]])&lt;br /&gt;
function checkAccess(client)&lt;br /&gt;
    if isPlayerInACL(client, &amp;quot;Console&amp;quot;) then&lt;br /&gt;
        outputChatBox(&amp;quot;Access Granted!&amp;quot;, client)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;Access Denied!&amp;quot;, client)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;myaccess&amp;quot;, checkAccess)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Author:''' xXMADEXx.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[RU:IsPlayerInACL]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78491</id>
		<title>IsPlayerInACL</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsPlayerInACL&amp;diff=78491"/>
		<updated>2023-10-31T10:33:00Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function checks if the player is in the target acl.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isPlayerInACL ( player thePlayer, string ACLGroup )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''thePlayer''': The player element that you want to check.&lt;br /&gt;
* '''ACLGroup''': The name of the ACL group that you want to check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns true if the player's account is in the ACL, false if otherwise.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function isPlayerInACL(player, acl)&lt;br /&gt;
    if isElement(player) and getElementType(player) == &amp;quot;player&amp;quot; and aclGetGroup(acl or &amp;quot;&amp;quot;) then&lt;br /&gt;
        local account = getPlayerAccount(player)&lt;br /&gt;
        return isObjectInACLGroup(&amp;quot;user.&amp;quot;..getAccountName(account), aclGetGroup(acl))&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Make sure to only call this check with 'client' and not source or the equivalent (see [[Script security]])&lt;br /&gt;
function checkAccess(client)&lt;br /&gt;
    if isPlayerInACL(client, &amp;quot;Console&amp;quot;) then&lt;br /&gt;
        outputChatBox(&amp;quot;Access Granted!&amp;quot;, client)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;Access Denied!&amp;quot;, client)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;myaccess&amp;quot;, checkAccess)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Author:''' xXMADEXx.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[RU:IsPlayerInACL]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=IsElementPlayer&amp;diff=78490</id>
		<title>IsElementPlayer</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=IsElementPlayer&amp;diff=78490"/>
		<updated>2023-10-31T10:29:32Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Delete nomination rejected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle/&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;bool isElementPlayer ( element theElement )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required argument===&lt;br /&gt;
* '''element''': The element to be checked.&lt;br /&gt;
&lt;br /&gt;
===Return===&lt;br /&gt;
Returns '''true''' if element is a '''player''' or '''false''' if element is not a '''player'''.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function isElementPlayer(theElement)&lt;br /&gt;
    if (theElement and isElement(theElement) and getElementType(theElement) == &amp;quot;player&amp;quot;) then&lt;br /&gt;
        return true;&lt;br /&gt;
    end&lt;br /&gt;
    return false;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server&amp;quot; class=&amp;quot;server&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This script tells you whether the element is a player or not.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local marker = createMarker(-2324.6, -1628.594, 483.703 -1, &amp;quot;cylinder&amp;quot;, 3, 255, 255, 0, 110)&lt;br /&gt;
&lt;br /&gt;
function onMarkerHitted(theElement)&lt;br /&gt;
    if (isElementPlayer(theElement)) then&lt;br /&gt;
        outputChatBox(&amp;quot;The theElement is a player.&amp;quot;, root)&lt;br /&gt;
    else&lt;br /&gt;
        outputChatBox(&amp;quot;The theElement is not a player, the theElement is a &amp;quot;..(getElementType(element))..&amp;quot;.&amp;quot;, root)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onMarkerHit&amp;quot;, marker, onMarkerHitted)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
'''Autor:''' Yammy_&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Both_devclass&amp;diff=78297</id>
		<title>Template:Both devclass</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Both_devclass&amp;diff=78297"/>
		<updated>2023-10-21T16:52:24Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Reject delete nomination: consequences unknown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pageclass class=&amp;quot;both&amp;quot; subcaption=&amp;quot;Class (Blue)&amp;quot;&amp;gt;&amp;lt;/pageclass&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Client Classes (Blue)]][[Category:Server Classes (Blue)]][[Category:Classes (Blue)]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:Useless_Function&amp;diff=78296</id>
		<title>Template:Useless Function</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:Useless_Function&amp;diff=78296"/>
		<updated>2023-10-21T16:51:26Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Delete nomination rejected: consequences unknown, this is likely used for flagging certain pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pageclass class=&amp;quot;#2A8BD2&amp;quot; subcaption=&amp;quot;Useless Function&amp;quot;&amp;gt;&amp;lt;/pageclass&amp;gt;&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{{Delete|{{#if: {{{1|}}} | {{{1}}}}}}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:%3D&amp;diff=78295</id>
		<title>Template:=</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:%3D&amp;diff=78295"/>
		<updated>2023-10-21T16:50:14Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Reject delete nomination: consequences unknown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Use the template &amp;lt;nowiki&amp;gt;{{=}}&amp;lt;/nowiki&amp;gt; when you need the equals sign inside another template or table.&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;=&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Template:MySQL_functions&amp;diff=78294</id>
		<title>Template:MySQL functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Template:MySQL_functions&amp;diff=78294"/>
		<updated>2023-10-21T16:49:08Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Rejected delete nomination, the way to go is expand it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[mysqlOpen]]&lt;br /&gt;
*[[mysqlClose]]&lt;br /&gt;
*[[mysqlQuery]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78293</id>
		<title>AR/table.flip</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78293"/>
		<updated>2023-10-21T16:45:04Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Protected &amp;quot;AR/table.flip&amp;quot;: Prevent self-vandalism without reasoning (that should be provided on the main, English version of this page) ([Edit=Allow only administrators] (expires 16:45, 21 January 2024 (UTC)) [Move=Allow only administrators] (expires 16:45, 21 January 2024 (UTC)))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}} __NOTOC__&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
هذه الوظيفة تقوم بإرجاع الجدول بالقيم من اخر قيمه لاول قيمه مثل الانعكاس&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table table.flip( table theTable )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''theTable''': الجدول الذى تريد انعكاس قيمه.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
إرجاع الجدول بالقيم من اخر الجدول إلى اول الجدول.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Shared&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function table.flip(theTable)&lt;br /&gt;
    assert(type(theTable) == &amp;quot;table&amp;quot;, &amp;quot;Bad argument @ 'table.flip' [Expected table at argument 1, got &amp;quot;..(type(theTable))..&amp;quot;]&amp;quot;)&lt;br /&gt;
    local newTable = {}&lt;br /&gt;
    for i = 1, #theTable do&lt;br /&gt;
        newTable[i] = theTable[#theTable-(i-1)]&lt;br /&gt;
    end&lt;br /&gt;
    return newTable&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''المؤلف:''' [[User:IManGaaX|Youssef Maged (iManGaaX)]]&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Shared&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local myTable = {&amp;quot;test_1&amp;quot;, &amp;quot;test_2&amp;quot;, &amp;quot;test_3&amp;quot;, &amp;quot;test_4&amp;quot;, &amp;quot;test_5&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
for k, v in ipairs(myTable) do&lt;br /&gt;
    outputChatBox(v)&lt;br /&gt;
end&lt;br /&gt;
--// النتيجة سوف تكون&lt;br /&gt;
--// test_1&lt;br /&gt;
--// test_2&lt;br /&gt;
--// test_3&lt;br /&gt;
--// test_4&lt;br /&gt;
--// test_5&lt;br /&gt;
&lt;br /&gt;
local flipedTable = table.flip(myTable)&lt;br /&gt;
for k, v in ipairs(flipedTable) do&lt;br /&gt;
    outputChatBox(v)&lt;br /&gt;
end&lt;br /&gt;
--// النتيجة سوف تكون&lt;br /&gt;
--// test_5&lt;br /&gt;
--// test_4&lt;br /&gt;
--// test_3&lt;br /&gt;
--// test_2&lt;br /&gt;
--// test_1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[en:table.flip]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78292</id>
		<title>AR/table.flip</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78292"/>
		<updated>2023-10-21T16:43:15Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Undo revision 78121 by IManGaaX (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}} __NOTOC__&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
هذه الوظيفة تقوم بإرجاع الجدول بالقيم من اخر قيمه لاول قيمه مثل الانعكاس&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;table table.flip( table theTable )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''theTable''': الجدول الذى تريد انعكاس قيمه.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
إرجاع الجدول بالقيم من اخر الجدول إلى اول الجدول.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Shared&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function table.flip(theTable)&lt;br /&gt;
    assert(type(theTable) == &amp;quot;table&amp;quot;, &amp;quot;Bad argument @ 'table.flip' [Expected table at argument 1, got &amp;quot;..(type(theTable))..&amp;quot;]&amp;quot;)&lt;br /&gt;
    local newTable = {}&lt;br /&gt;
    for i = 1, #theTable do&lt;br /&gt;
        newTable[i] = theTable[#theTable-(i-1)]&lt;br /&gt;
    end&lt;br /&gt;
    return newTable&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''المؤلف:''' [[User:IManGaaX|Youssef Maged (iManGaaX)]]&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Shared&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local myTable = {&amp;quot;test_1&amp;quot;, &amp;quot;test_2&amp;quot;, &amp;quot;test_3&amp;quot;, &amp;quot;test_4&amp;quot;, &amp;quot;test_5&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
for k, v in ipairs(myTable) do&lt;br /&gt;
    outputChatBox(v)&lt;br /&gt;
end&lt;br /&gt;
--// النتيجة سوف تكون&lt;br /&gt;
--// test_1&lt;br /&gt;
--// test_2&lt;br /&gt;
--// test_3&lt;br /&gt;
--// test_4&lt;br /&gt;
--// test_5&lt;br /&gt;
&lt;br /&gt;
local flipedTable = table.flip(myTable)&lt;br /&gt;
for k, v in ipairs(flipedTable) do&lt;br /&gt;
    outputChatBox(v)&lt;br /&gt;
end&lt;br /&gt;
--// النتيجة سوف تكون&lt;br /&gt;
--// test_5&lt;br /&gt;
--// test_4&lt;br /&gt;
--// test_3&lt;br /&gt;
--// test_2&lt;br /&gt;
--// test_1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
{{Useful_Functions}}&lt;br /&gt;
&lt;br /&gt;
[[en:table.flip]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78291</id>
		<title>AR/table.flip</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=AR/table.flip&amp;diff=78291"/>
		<updated>2023-10-21T16:42:59Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Undo revision 78246 by IManGaaX (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=EngineStreamingSetProperty&amp;diff=78290</id>
		<title>EngineStreamingSetProperty</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=EngineStreamingSetProperty&amp;diff=78290"/>
		<updated>2023-10-21T16:27:39Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: correct TEDERIs' mistake: moved English main page from RU/engineStreamingSetProperty to &amp;quot;engineStreamingSetProperty&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MTA:Eir/Client_function}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This function changes the behavior of the GTA:SA streaming system. It is meant to optimize the performance of the game for your custom server. Changes in these properties affect the gameplay quality of the entire server.&lt;br /&gt;
&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool engineStreamingSetProperty ( string propertyName, var propValue )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Arguments===&lt;br /&gt;
*'''propertyName:''' the name of the streaming property you want to change&lt;br /&gt;
*'''propValue:''' value to pass to the property&lt;br /&gt;
&lt;br /&gt;
===Valid Properties===&lt;br /&gt;
{{:MTA:Eir/functions/engineStreamingSetProperty/validProps}}&lt;br /&gt;
&lt;br /&gt;
===Useful Media===&lt;br /&gt;
* https://dl.dropboxusercontent.com/u/55896914/eir_resources/streaming_opt.zip - streaming debugging resource&lt;br /&gt;
* https://dl.dropboxusercontent.com/u/55896914/eir_resources/streaming_test.zip - streaming mode example resource&lt;br /&gt;
* https://www.youtube.com/watch?v=sk8WsHwPgsU - showcase video&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if valid arguments have been passed, ''false'' otherwise.&lt;br /&gt;
&lt;br /&gt;
==Examples== &lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This snippet ultimatively fixes the world flickering.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;strictNodeDistrib&amp;quot;, false );&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;infiniteStreaming&amp;quot;, true );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This snippet sets the Streaming GC system to sparse mode. In this mode only the preallocated amount of Streaming GC nodes is allowed. Keeping a low amount of Streaming nodes is interesting for performance optimizations.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;gcOnDemand&amp;quot;, true );&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;infiniteStreaming&amp;quot;, false );&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;strictNodeDistrib&amp;quot;, true );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This snippet turns on fibered loading when the Streaming system is busy and leaves it that way for five seconds.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;isFibered&amp;quot;, false );&lt;br /&gt;
&lt;br /&gt;
local lastBusyTime = false;&lt;br /&gt;
local fiberedDuration = 5000;&lt;br /&gt;
&lt;br /&gt;
addEventHandler( &amp;quot;onClientRender&amp;quot;, root,&lt;br /&gt;
    function()&lt;br /&gt;
        local isBusy = engineGetStreamingInfo().isBusy;&lt;br /&gt;
&lt;br /&gt;
        if ( isBusy ) then&lt;br /&gt;
            local now = getTickCount();&lt;br /&gt;
&lt;br /&gt;
            if not ( lastBusyTime ) then&lt;br /&gt;
                lastBusyTime = now;&lt;br /&gt;
&lt;br /&gt;
                engineStreamingSetProperty( &amp;quot;isFibered&amp;quot;, true );&lt;br /&gt;
            end&lt;br /&gt;
        elseif ( lastBusyTime ) then&lt;br /&gt;
            if ( now - lastBusyTime &amp;gt; fiberedDuration ) then&lt;br /&gt;
                engineStreamingSetProperty( &amp;quot;isFibered&amp;quot;, false );&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
This snippet makes the world load very slow. Lag spikes cannot occur due to Streaming loading anymore.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;isFibered&amp;quot;, true );&lt;br /&gt;
engineStreamingSetProperty( &amp;quot;fiberedPerfMult&amp;quot;, 0 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[en:engineStreamingSetProperty]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Table.empty&amp;diff=78289</id>
		<title>Table.empty</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Table.empty&amp;diff=78289"/>
		<updated>2023-10-21T16:22:13Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Remove delete nomination: the decision is no&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function check is empty table or not.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;boolean table.empty( table a )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''a''': The table for check.&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns the true if table is empty or false in otherwise. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;section name=&amp;quot;Code&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function table.empty( a )&lt;br /&gt;
    if type( a ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return next(a) == nil&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: Kenix &amp;amp; Renkon&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77110</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77110"/>
		<updated>2023-06-25T01:44:10Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use your own secondary kernelmode AC driver, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
&lt;br /&gt;
There are more and similar bottlenecks that are too complicated to easily explain but are based on the &amp;quot;nothing is ever 100% secure&amp;quot; principle, of which many apply to bridging between official MTA and forks using 'full AC'. It is also good to reflect on the overall thing like this: MTA team spent years to build AC technology, and its providing (now unlocking) a lot to forks if they so wish, for free. Consider it as a main layer of anticheat that already protects a lot in GTA, we help you not to have to build such a huge amount of technology all by yourself. Now the point, what else you do, like you see this as main layer and then also build your own secondary layer of anticheat, maybe even on a novice level of what's technically understandable to your developers that have no serious AC development background - that's entirely up to you and your creativity, and how serious you take your project. If you want to complement the main layer provided by us, you are able to.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- For your dedicated servers / nodes to which players will connect, use the server net modules from:&amp;lt;br&amp;gt;&lt;br /&gt;
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (rename to &amp;quot;net.so&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (rename to &amp;quot;net.dll&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Never use x86 server for your fork, that's bad for many reasons. Not being encouraged, it will have no steps.&lt;br /&gt;
&lt;br /&gt;
Let's continue with setting up the client and 'full AC'.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77109</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77109"/>
		<updated>2023-06-25T01:43:00Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: clarify&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use your own secondary kernelmode AC driver, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
&lt;br /&gt;
There are more and similar bottlenecks that are too complicated to easily explain but are based on the &amp;quot;nothing is ever 100% secure&amp;quot; principle, of which many apply to bridging between official MTA and forks using 'full AC'. It is also good to reflect on the overall thing like this: MTA team spent years to build AC technology, and its providing (now unlocking) a lot to forks if they so wish, for free. Consider it as a main layer of anticheat that already protects a lot in GTA, we help you not to have to build such a huge amount of technology all by yourself. Now the point, what else you do, like you see this as main layer and then also build your own secondary layer of anticheat, maybe even on a novice level of what's technically understandable to your developers that have no serious AC development background - that's entirely up to you and your creativity. If you want to complement the main layer provided by us, you are able to.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- For your dedicated servers / nodes to which players will connect, use the server net modules from:&amp;lt;br&amp;gt;&lt;br /&gt;
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (rename to &amp;quot;net.so&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (rename to &amp;quot;net.dll&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Never use x86 server for your fork, that's bad for many reasons. Not being encouraged, it will have no steps.&lt;br /&gt;
&lt;br /&gt;
Let's continue with setting up the client and 'full AC'.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77108</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77108"/>
		<updated>2023-06-25T01:11:23Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- For your dedicated servers / nodes to which players will connect, use the server net modules from:&amp;lt;br&amp;gt;&lt;br /&gt;
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (rename to &amp;quot;net.so&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (rename to &amp;quot;net.dll&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Never use x86 server for your fork, that's bad for many reasons. Not being encouraged, it will have no steps.&lt;br /&gt;
&lt;br /&gt;
Let's continue with setting up the client and 'full AC'.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77107</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77107"/>
		<updated>2023-06-25T01:11:02Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- For your dedicated servers / nodes to which players will connect, use the server net modules from:&amp;lt;br&amp;gt;&lt;br /&gt;
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (rename to &amp;quot;net.so&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (rename to &amp;quot;net.dll&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Never use x86 server for your fork, that's bad for many reasons. Not being encouraged, it will have no steps.&lt;br /&gt;
&lt;br /&gt;
Let's continue with setting up the client.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77106</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77106"/>
		<updated>2023-06-25T01:10:32Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: add server net module instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- For your dedicated servers / nodes to which players will connect, use the server net modules from:&amp;lt;br&amp;gt;&lt;br /&gt;
Linux x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.so (rename to &amp;quot;net.so&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Windows x64: https://mirror-cdn.multitheftauto.com/bdata/net_64.dll (rename to &amp;quot;net.dll&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
Never use x86 server for your fork, that's bad for many reasons. Not being encouraged, it will have no steps.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Serial&amp;diff=77100</id>
		<title>Serial</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Serial&amp;diff=77100"/>
		<updated>2023-06-24T10:19:46Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|NEVER use serials for anything too critical (like handling admin rights, or automatically logging in) as they can't be guaranteed to be unique or non-fakable.}}&lt;br /&gt;
&lt;br /&gt;
Serials are used by MTA and server administrators to reliably identify a PC that a player is using. Serials are 32 characters long and contain letters and numbers.&lt;br /&gt;
&lt;br /&gt;
They are mostly used for banning players, because a computer with a [http://en.wikipedia.org/wiki/Dynamic_IP dynamic IP] can change IP every now and then, making IP bans ineffective. MTA wants to give server owners a more reliable way to ban players and keep out unwanted players, which is why serials were invented.&lt;br /&gt;
&lt;br /&gt;
Their reliability is so high that many players tend to have the same serial for 6 years or longer (in theory unlimited amount of years) unless they use a different PC at some point. This gives serials a wide range of potential uses in scripting and anti-abuse purposes and systems. But for vast reasons, please avoid using them in place of user accounts, a practise that will come with a variety of problems (some of which for security reasons we won't mention, and situations like when a player starts using a different PC and loses their account data without ability to transfer it, or somehow ends up changing their serial as per the below paragraph (intended or by accident). So basically, again, do not rely on serials for critical functions on your server. Even more so, it's not guaranteed that serials cannot be compromised (hackers using someone else's serial), hence the warning that tells you to never use serials for anything critical.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
Serials are the most accurate form of identifying players that MTA has. However, you shouldn't rely on them entirely: players may change their serial, although this is very difficult to do due to MTA AC protections (serials aren't only based on hardware, but more). Besides, a player can simply use another computer with a different serial in order to fool your scripts or evade server bans.&lt;br /&gt;
&lt;br /&gt;
Please note that the reliability of serials isn't as high for internet cafe's. In internet cafe's, the risk of serial duplication is present (Due to technical limitations we don't want to explain for security concerns). This applies globally, so the PC of multiple players from around the world (in different internet cafe's) can have the same serial as eachother. If you suspect a duplication like this, please check the player for AC / SD code #34. This is easily done in the default Admin panel (under &amp;quot;AC Detected&amp;quot; on player info), but note that if your server has a high amount of problems due to duplicated serials from netcafe players, you could make a special script to alternate for those players or eventually put SD #34 in your mtaserver.conf (see [[Anti-cheat_guide#.3Cenablesd.3E.3C.2Fenablesd.3E|AC guide - CTRL + F to SD #34]] but also make sure to read the warning on that entry, so as not to overuse it/only use it when you have no other choice.&lt;br /&gt;
&lt;br /&gt;
==Practical Examples==&lt;br /&gt;
You can find the serial of an individual player by opening the [[Resource:Admin|admin panel]], selecting the relevant player from list and looking at the player information tab, or by opening '''server\mods\deathmatch\logs\ &amp;gt; server.log''' and finding a relevant entry, which will look like this:&lt;br /&gt;
&lt;br /&gt;
''CONNECT: PlayerName connected (IP: 11.246.33.390  Serial: 3AE8CACD72H193D950D0T3L6373AQ144  Version: 1.5.8-9.20802.0)''. In this example, that player's serial would be 3AE8CACD72H193D950D0T3L6373AQ144&lt;br /&gt;
&lt;br /&gt;
In order to ban this player from your server, you'd go to 'Bans' tab in admin panel and select &amp;quot;Ban Serial&amp;quot;, then enter that serial.. or the equivalent in your custom admin panel / using [[addBan]], [[banPlayer]], or by editing banlist.xml to add that entry while the server is not running.&lt;br /&gt;
&lt;br /&gt;
==Related scripting functions==&lt;br /&gt;
{{Serial functions}}&lt;br /&gt;
&lt;br /&gt;
[[tr:Serial]]&lt;br /&gt;
[[Category:Scripting_Concepts]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77097</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=77097"/>
		<updated>2023-06-21T21:31:40Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: update repository point&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of June 2023, you must pull all mtasa-blue commits (update to 1.6) and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. The netc module being offered fits for a fork based on MTA 1.6&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76284</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76284"/>
		<updated>2023-03-14T17:55:34Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Renew a notice, and remove an outdated one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of January 2023, you must pull all mtasa-blue commits and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides. // '''UPDATE''': This happened again in March 2023, you will now need to pull at least r21618 (on mtasa-blue git: commit eedbdc5fbfdd5d5bed8454728d8e224a4b94838e) in order to use the netc.dll module version being offered as of now.&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76113</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76113"/>
		<updated>2023-02-01T22:43:31Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
__NOTOC__ {{Note|This is an early version of this page, to be further improved/rewritten}}&lt;br /&gt;
&lt;br /&gt;
'''Русская версия (может быть устаревшая, так как переведена вручную):''' [[RU/Полный античит MTA для форк-проектов]]&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of January 2023, you must pull all mtasa-blue commits and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76112</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=76112"/>
		<updated>2023-02-01T22:40:47Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Add file checker recommendations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
__NOTOC__ {{Note|This is an early version of this page, to be further improved/rewritten}}&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of January 2023, you must pull all mtasa-blue commits and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides&lt;br /&gt;
}}&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: It's your own responsibility to add a file integrity/authencity checker, as obviously since the game DLLs are built by you (and not us) there is no way to embed such unique DLLs into our netc internal checklists, nor have anything within other modules to check netc itself. If you don't work this out, a cheater can just replace any module or add in a cheat payload with PE editing, this is the biggest risk factor when using &amp;quot;forks full AC&amp;quot;. How far you'd like to go with file checks, like deciding to harden it on usermode (with heartbeats or so) or use kernelmode, is up to you and the level of dedication to security your project has. If all you care about is a raised border towards cheating, you may go for basic file checker (MD5/SHA256) for all game modules&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=EngineRequestModel&amp;diff=76110</id>
		<title>EngineRequestModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=EngineRequestModel&amp;diff=76110"/>
		<updated>2023-02-01T22:22:31Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Client function}}&lt;br /&gt;
{{New feature/item|3.0158|1.5.7|20147|This function is used to assign the next available model ID to a certain element type.}}&lt;br /&gt;
{{note|Before release '''1.5.8 r20716''' this must be &amp;quot;ped&amp;quot;. After release '''1.5.8 r20716''' this function supports &amp;quot;vehicle&amp;quot; and &amp;quot;object&amp;quot; too.}}&lt;br /&gt;
{{note|Vehicle unique features may be unsupported, see [https://github.com/multitheftauto/mtasa-blue/issues/1861 issue 1861] for examples and details}}&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
int engineRequestModel ( string elementType [, int parentID ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''elementType''': &amp;quot;ped&amp;quot;, &amp;quot;vehicle&amp;quot; or &amp;quot;object&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
*'''parentID''': The ID of the parent model (by default this is: 1337 - objects, 400 - vehicles, 7 - peds).&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
{{New feature/item|3.0158|1.5.7|20147| Returns an ''integer'' of the model ID that was available to be assigned to the element type, ''false'' if no free model ID available or invalid element type.}}&lt;br /&gt;
Do not rely on the model numbers returned being consistent across multiple clients or multiple runs of resources. There is no guarantee for the order of the numbers or that the same numbers will always correspond to the same element type. Any patterns are coincidental.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example creates a ped and then gives you the opportunity to change its model. If the resource stops, then the IDs allocated will be deallocated. Use ''/cap'' for creating the ped and ''/sap'' to skin the ped. You will need some skins added to a folder and to the meta.xml for ''/sap'' to work:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local peds = {}&lt;br /&gt;
function createAllocatedPed()&lt;br /&gt;
    local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
    local id = engineRequestModel(&amp;quot;ped&amp;quot;)&lt;br /&gt;
    peds[id] = createPed(id, x+0.5, y, z+0.5)&lt;br /&gt;
    outputChatBox(&amp;quot;New ped with ID &amp;quot;..id..&amp;quot; created.&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;cap&amp;quot;, createAllocatedPed, false, false)&lt;br /&gt;
&lt;br /&gt;
function skinAllocatedPeds()&lt;br /&gt;
    local txd, dff;&lt;br /&gt;
    for id,ped in pairs(peds) do&lt;br /&gt;
        if fileExists(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.txd&amp;quot;) and fileExists(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.dff&amp;quot;) then&lt;br /&gt;
            txd = engineLoadTXD(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.txd&amp;quot;)&lt;br /&gt;
            engineImportTXD(txd, id)&lt;br /&gt;
            dff = engineLoadDFF(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.dff&amp;quot;)&lt;br /&gt;
            engineReplaceModel(dff, id)&lt;br /&gt;
            outputChatBox(&amp;quot;Model ID &amp;quot;..id..&amp;quot; changed correctly.&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            outputChatBox(&amp;quot;Model ID &amp;quot;..id..&amp;quot; couldn't change. REASON: skins/&amp;quot; .. id .. &amp;quot;.txd or skins/&amp;quot; .. id .. &amp;quot;.dff does not exist.&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;sap&amp;quot;, skinAllocatedPeds, false, false)&lt;br /&gt;
&lt;br /&gt;
function onStop()&lt;br /&gt;
    for id,ped in pairs(peds) do&lt;br /&gt;
        engineFreeModel(id)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onClientResourceStop&amp;quot;, resourceRoot, onStop)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
{{Requirements|n/a|1.5.7-9.20147|}}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Engine functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=EngineRequestModel&amp;diff=76109</id>
		<title>EngineRequestModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=EngineRequestModel&amp;diff=76109"/>
		<updated>2023-02-01T22:21:58Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Added note of unsupported &amp;quot;default GTA scripts&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Client function}}&lt;br /&gt;
{{New feature/item|3.0158|1.5.7|20147|This function is used to assign the next available model ID to a certain element type.}}&lt;br /&gt;
{{note|Before release '''1.5.8 r20716''' this must be &amp;quot;ped&amp;quot;. After release '''1.5.8 r20716''' this function supports &amp;quot;vehicle&amp;quot; and &amp;quot;object&amp;quot; too.}}&lt;br /&gt;
{{note|Vehicle unique features may be unsupported, see https://github.com/multitheftauto/mtasa-blue/issues/1861 for examples and details}}&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
int engineRequestModel ( string elementType [, int parentID ] )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
*'''elementType''': &amp;quot;ped&amp;quot;, &amp;quot;vehicle&amp;quot; or &amp;quot;object&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Optional Arguments=== &lt;br /&gt;
*'''parentID''': The ID of the parent model (by default this is: 1337 - objects, 400 - vehicles, 7 - peds).&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
{{New feature/item|3.0158|1.5.7|20147| Returns an ''integer'' of the model ID that was available to be assigned to the element type, ''false'' if no free model ID available or invalid element type.}}&lt;br /&gt;
Do not rely on the model numbers returned being consistent across multiple clients or multiple runs of resources. There is no guarantee for the order of the numbers or that the same numbers will always correspond to the same element type. Any patterns are coincidental.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
This example creates a ped and then gives you the opportunity to change its model. If the resource stops, then the IDs allocated will be deallocated. Use ''/cap'' for creating the ped and ''/sap'' to skin the ped. You will need some skins added to a folder and to the meta.xml for ''/sap'' to work:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local peds = {}&lt;br /&gt;
function createAllocatedPed()&lt;br /&gt;
    local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
    local id = engineRequestModel(&amp;quot;ped&amp;quot;)&lt;br /&gt;
    peds[id] = createPed(id, x+0.5, y, z+0.5)&lt;br /&gt;
    outputChatBox(&amp;quot;New ped with ID &amp;quot;..id..&amp;quot; created.&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;cap&amp;quot;, createAllocatedPed, false, false)&lt;br /&gt;
&lt;br /&gt;
function skinAllocatedPeds()&lt;br /&gt;
    local txd, dff;&lt;br /&gt;
    for id,ped in pairs(peds) do&lt;br /&gt;
        if fileExists(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.txd&amp;quot;) and fileExists(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.dff&amp;quot;) then&lt;br /&gt;
            txd = engineLoadTXD(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.txd&amp;quot;)&lt;br /&gt;
            engineImportTXD(txd, id)&lt;br /&gt;
            dff = engineLoadDFF(&amp;quot;skins/&amp;quot; .. id .. &amp;quot;.dff&amp;quot;)&lt;br /&gt;
            engineReplaceModel(dff, id)&lt;br /&gt;
            outputChatBox(&amp;quot;Model ID &amp;quot;..id..&amp;quot; changed correctly.&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            outputChatBox(&amp;quot;Model ID &amp;quot;..id..&amp;quot; couldn't change. REASON: skins/&amp;quot; .. id .. &amp;quot;.txd or skins/&amp;quot; .. id .. &amp;quot;.dff does not exist.&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;sap&amp;quot;, skinAllocatedPeds, false, false)&lt;br /&gt;
&lt;br /&gt;
function onStop()&lt;br /&gt;
    for id,ped in pairs(peds) do&lt;br /&gt;
        engineFreeModel(id)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
addEventHandler(&amp;quot;onClientResourceStop&amp;quot;, resourceRoot, onStop)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
{{Requirements|n/a|1.5.7-9.20147|}}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Engine functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=SetFPSLimit&amp;diff=76045</id>
		<title>SetFPSLimit</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=SetFPSLimit&amp;diff=76045"/>
		<updated>2023-01-23T08:46:08Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: removed outdated info (due to MTA fix: https://github.com/multitheftauto/mtasa-blue/pull/2663)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Server client function}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
This function sets the maximum [http://en.wikipedia.org/wiki/Frame_rate FPS (Frames per second)] that players on the server can run their game at.  &lt;br /&gt;
{{Note|&lt;br /&gt;
* When set client side, the actual limit used is the lowest of both the server and client set values.&lt;br /&gt;
* Starting from version [[https://buildinfo.mtasa.com/?Revision=21313&amp;amp;Branch r21313]] and above '''fpsLimit''' range is '''25-32767'''. In older MTA releases it was '''25-100'''.&lt;br /&gt;
}}&lt;br /&gt;
==Syntax== &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
bool setFPSLimit ( int fpsLimit )         &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Required Arguments=== &lt;br /&gt;
*'''fpsLimit:''' An integer value representing the maximum FPS. Refer to the note above for possible values. You can also pass '''0''' or '''false''', in which case the FPS limit will be the one set in the client settings (by default, 100 FPS and the client fps limit should also be manually changed via &amp;quot;fps_limit=0&amp;quot; in console or '''MTA San Andreas 1.5\MTA\config\coreconfig.xml''').&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
Returns ''true'' if successful, or ''false'' if it was not possible to set the limit or an invalid value was passed.&lt;br /&gt;
&lt;br /&gt;
==Issues when increasing FPS==&lt;br /&gt;
Note: with &amp;quot;very high&amp;quot; FPS, any FPS limit over 74 is meant.&lt;br /&gt;
It is recommended to set a conservative FPS limit (between 40-60 and 74 highest) because high FPS can break some GTA internal calculations, causing various bugs. The higher the FPS the more of a problem these become:&lt;br /&gt;
&lt;br /&gt;
74 FPS is the breaking point that opens the door to various more severe GTA bugs related to FPS and physics.&lt;br /&gt;
&lt;br /&gt;
* Physics of vehicles is effected, both high and low FPSes may bring their own set of unfair advantages. Speaking about the consequences of high FPS in this context, up to 70 or 74 FPS is considered safe (as any differences in physics, if they do exist to begin with as they theoretically should, are so tiny that they are unmeasurable and thus wouldn't affect racing results in practise). Anything beyond 74 FPS may cause impactful discrepancies.&lt;br /&gt;
&lt;br /&gt;
* Pressing the horn button to turn on and off sirens gets really hard at very high FPS. For instance, at 100 FPS, you are more likely to hit the regular horn 3 times (inconsistent) before eventually triggering the siren, besides taking a similar amount of tries to turn off the siren.&lt;br /&gt;
* At very high FPS, climbing over certain objects will result in instant death. Example at: 2520.108, -1681.407, 19.406, 266&lt;br /&gt;
* The higher your FPS, the more of a penalty in satchel throwing distance (up to ~10% at very high FPS) will apply.&lt;br /&gt;
&lt;br /&gt;
For a full list of FPS-related GTA bugs (that are much less likely to impact gameplay in a meaningful way) and MTA developers' progress in tackling them, see the [https://github.com/multitheftauto/mtasa-blue/projects/14 Framerate issues tracker] github project.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example allows players to limit their own FPS using a command.&lt;br /&gt;
&amp;lt;section name=&amp;quot;Client&amp;quot; class=&amp;quot;client&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
function fpsFunction(command, limit)&lt;br /&gt;
	if limit and tonumber(limit) and tonumber(limit) &amp;gt;= 30 and tonumber(limit) &amp;lt;= 74 then&lt;br /&gt;
		limit = tonumber(limit)&lt;br /&gt;
&lt;br /&gt;
		if setFPSLimit(limit) then&lt;br /&gt;
			outputChatBox(&amp;quot;Your FPS has been limited to: &amp;quot; .. limit .. &amp;quot;.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		outputChatBox(&amp;quot;SYNTAX: /&amp;quot; .. command .. &amp;quot; [30 ~ 74] - Limit your own FPS.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
addCommandHandler(&amp;quot;limitfps&amp;quot;, fpsFunction)&lt;br /&gt;
addCommandHandler(&amp;quot;fpslimit&amp;quot;, fpsFunction)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Server functions}}&lt;br /&gt;
&lt;br /&gt;
[[pl:setFPSLimit]]&lt;br /&gt;
[[ru:setFPSLimit]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76044</id>
		<title>OnClientElementStreamIn</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76044"/>
		<updated>2023-01-22T03:51:00Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Add additional unexpected behavior info &amp;amp; suggested workaround&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed in. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers. When this event is triggered, that element is guaranteed to be physically created as a GTA object.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed in) when said local player spawns, as this is the creation of entity local ped.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ {{Note|This event also triggers for a remote player that dies in front of local player, even if they respawn far away.. the moment they do so, this event will be triggered, and if you'd measure distance between local and said remote player (that spawned far away) during this event, it would output the distance at which they died in front of local player, e.g 2 metres. This is bug-prone behavior and likely incorrect, to be fixed in the future, but for now be aware. The 'low distance' aspect of this (which could worsen your results) is caused by the split second that their ped elements may 'flash' past its wasted location during the respawning process. For now you can work around these side effect (both, or the distance aspect.. results may vary based on randomness) by adding an isPedDead check inside the event, checking source (said remote player), as this delays the onClientElementIn until after full respawn has taken place. The below script example incorporates this workaround}}&lt;br /&gt;
&lt;br /&gt;
==Parameters== &lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed in.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed in and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamIn&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; and isPedDead(source) == false then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed in. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76043</id>
		<title>OnClientElementStreamOut</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76043"/>
		<updated>2023-01-22T03:39:00Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed out. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers when the local player is leaving the element. When this event is triggered, that element is no longer physical and is now virtualized by MTA.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ {{Note|Be aware that this event triggers for local player (as itself being the element that got streamed out) when said local player dies and respawns, as this is the removal &amp;amp; recreation of entity local ped.}}&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed out.&lt;br /&gt;
&lt;br /&gt;
==Remarks==&lt;br /&gt;
This event is not triggered for elements that are streamed-in at the point of a [[destroyElement]] call. Use the [[onClientElementDestroy]] event in combination with the [[isElementStreamedIn]] function to handle such a case.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed out and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamOut&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed out. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76042</id>
		<title>OnClientElementStreamOut</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76042"/>
		<updated>2023-01-22T03:14:32Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed out. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers when the local player is leaving the element. When this event is triggered, that element is no longer physical and is now virtualized by MTA.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed out) when said local player dies and respawns, as this is the removal &amp;amp; recreation of entity local ped.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed out.&lt;br /&gt;
&lt;br /&gt;
==Remarks==&lt;br /&gt;
This event is not triggered for elements that are streamed-in at the point of a [[destroyElement]] call. Use the [[onClientElementDestroy]] event in combination with the [[isElementStreamedIn]] function to handle such a case.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed out and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamOut&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed out. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76041</id>
		<title>OnClientElementStreamIn</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76041"/>
		<updated>2023-01-22T03:12:38Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed in. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers. When this event is triggered, that element is guaranteed to be physically created as a GTA object.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed in) when said local player spawns, as this is the creation of entity local ped.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ {{Note|This event also triggers for a remote player that dies in front of local player, even if they respawn far away.. the moment they do so, this event will be triggered, and if you'd measure distance between local and said remote player (that spawned far away) it would output the distance at which they died in front of local player, e.g 2 metres. This is bug-prone behavior and likely incorrect, to be fixed in the future, but for now be aware.}}&lt;br /&gt;
&lt;br /&gt;
==Parameters== &lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed in.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed in and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamIn&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed in. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76040</id>
		<title>OnClientElementStreamIn</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76040"/>
		<updated>2023-01-22T03:10:13Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: unexpected behavior note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed in. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers. When this event is triggered, that element is guaranteed to be physically created as a GTA object.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed in) when said local player spawns, as this is the creation of entity local ped.&lt;br /&gt;
It also triggers for a remote player that dies in front of local player, even if they respawn far away.. the moment they do so, this event will be triggered, and if you'd measure distance between local and said remote player (that spawned far away) it would output the distance at which they died in front of local player, e.g 2 metres. This is bug-prone behavior and likely incorrect, to be fixed in the future, but for now be aware.&lt;br /&gt;
&lt;br /&gt;
==Parameters== &lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed in.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed in and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamIn&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed in. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76039</id>
		<title>OnClientElementStreamOut</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamOut&amp;diff=76039"/>
		<updated>2023-01-22T02:58:08Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Add info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed out. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers when the local player is leaving the element. When this event is triggered, that element is no longer physical and is now virtualized by MTA.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed out) when said local player dies and respawns, as this is the removal &amp;amp; recreation of entity local ped.&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed out.&lt;br /&gt;
&lt;br /&gt;
==Remarks==&lt;br /&gt;
This event is not triggered for elements that are streamed-in at the point of a [[destroyElement]] call. Use the [[onClientElementDestroy]] event in combination with the [[isElementStreamedIn]] function to handle such a case.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that a marker was streamed out and the distance between player and the marker.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamOut&amp;quot;, root,&lt;br /&gt;
    function ( )&lt;br /&gt;
        if getElementType( source ) == &amp;quot;marker&amp;quot; then&lt;br /&gt;
            local myPosTab = { getElementPosition( localPlayer ) };&lt;br /&gt;
            local markerPosTab = { getElementPosition( source ) };&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D( unpack( myPosTab ), unpack( markerPosTab ) );&lt;br /&gt;
            outputChatBox( &amp;quot;A marker has just streamed out. Distance to the marker: &amp;quot; .. tostring( distance ) ..&amp;quot;.&amp;quot; );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76038</id>
		<title>OnClientElementStreamIn</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76038"/>
		<updated>2023-01-22T02:56:40Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Add info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed in. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers. When this event is triggered, that element is guaranteed to be physically created as a GTA object.&lt;br /&gt;
&lt;br /&gt;
Be aware that this event triggers for local player (as itself being the element that got streamed in) when said local player spawns, as this is the creation of entity local ped.&lt;br /&gt;
&lt;br /&gt;
==Parameters== &lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed in.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed in and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamIn&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed in. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76037</id>
		<title>OnClientElementStreamIn</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=OnClientElementStreamIn&amp;diff=76037"/>
		<updated>2023-01-22T02:44:53Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Client event}}&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
This event is triggered whenever a physical element is streamed in. This is triggered for all elements that are streamable, such as players, peds, vehicles, objects and markers. When this event is triggered, that element is guaranteed to be physically created as a GTA object.&lt;br /&gt;
&lt;br /&gt;
==Parameters== &lt;br /&gt;
No parameters.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
The [[event system#Event source|source]] of this event is the [[element]] that streamed in.&lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
This example shows you how to tell player that another player was streamed in and the distance between them and said player&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
addEventHandler( &amp;quot;onClientElementStreamIn&amp;quot;, root, &lt;br /&gt;
    function ()&lt;br /&gt;
        if getElementType(source) == &amp;quot;player&amp;quot; then&lt;br /&gt;
            local x, y, z = getElementPosition(localPlayer)&lt;br /&gt;
            local xh, xy, xz = getElementPosition(source)&lt;br /&gt;
            local distance = getDistanceBetweenPoints3D(x, y, z, xh, xy, xz )&lt;br /&gt;
            outputChatBox( &amp;quot;A player has just streamed in. Distance to the player: &amp;quot; .. tostring(distance) ..&amp;quot;.&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
===Client element events===&lt;br /&gt;
{{Client_element_events}}&lt;br /&gt;
===Client event functions===&lt;br /&gt;
{{Client_event_functions}}&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75998</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75998"/>
		<updated>2023-01-11T19:42:10Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
__NOTOC__ {{Note|This is an early version of this page, to be further improved/rewritten}}&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* Important: As of January 2023, you must pull all mtasa-blue commits and sync your fork's codebase in order to use the latest netc version provided at the link above. There are incompatible changes that required updates on both sides&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75730</id>
		<title>Client on Linux using Lutris Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75730"/>
		<updated>2022-12-12T15:35:51Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Removed inappropiate reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning|Before reading this manual, it's advised to have read our main [[Client on Linux Manual|Client on Linux Manual]]. This manual for Lutris is a thing on the side, based on personal preference of individual Linux users. Both manuals can supplement eachother|true}}&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Basic knowledge about the [https://linuxconfig.org/using-wine-prefixes Wine Prefix]&lt;br /&gt;
* [https://lutris.net/downloads/ Lutris]&lt;br /&gt;
* Lutris Wine Runner: latest version of lutris 7.x&lt;br /&gt;
* A prefix with GTA:SA V1.0 installation (Lutris can be used)&lt;br /&gt;
* [https://www.mtasa.com/ MTA Installer]&lt;br /&gt;
* During this tutorial, make sure to only use 32-bit prefix for MTA:SA, or else you will run into a libcef.dll incompatibility issue and performance problems.&lt;br /&gt;
&lt;br /&gt;
==Installing MTA==&lt;br /&gt;
&lt;br /&gt;
# On Lutris, Add a Game:&lt;br /&gt;
#* Game Info -&amp;gt; Name: Multi Theft Auto&lt;br /&gt;
#* Game Options -&amp;gt; Wine Prefix: ''Same as the GTA:SA installation prefix''.&amp;lt;br&amp;gt;&lt;br /&gt;
  '''Make sure all prefixes for MTA/GTA are 64-bit, to avoid running into a plethora of issues.'''&lt;br /&gt;
#* Runner Options -&amp;gt; Wine Version: latest version of lutris 7.x &amp;lt;br&amp;gt; Note: if for any reason it doesn't work, try the latest confirmed working version: 7.2&lt;br /&gt;
#* Runner Options -&amp;gt; Enable DXVK/VKD3D: Disabled&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Winetricks&lt;br /&gt;
#* Select the default wineprefix -&amp;gt; Install a font -&amp;gt; Check Tahoma and Verdana&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Run EXE inside Wine prefix&lt;br /&gt;
#* On the File Manager that appears, find and select the MTA Setup executable that you downloaded&lt;br /&gt;
# Run the setup&lt;br /&gt;
#* Untick &amp;quot;Install DirectX&amp;quot; and &amp;quot;Dedicated server&amp;quot;&lt;br /&gt;
#* Before finishing setup, make sure you untick Run MTA&lt;br /&gt;
# Open this folder in your MTA directory (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/MTA&amp;quot;)&lt;br /&gt;
#* Open your terminal emulator here, run &amp;lt;br&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp libcef.dll chrome_elf.dll icudtl.dat natives_blob.bin v8_context_snapshot.bin snapshot_blob.bin CEF&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;br&amp;gt; (issue workaround source is on [https://github.com/multitheftauto/mtasa-blue/issues/1000 github])&lt;br /&gt;
# On Lutris, right click Multi Theft Auto and select Configure&lt;br /&gt;
#* Game Options -&amp;gt; Executable: Should point to &amp;quot;Multi Theft Auto.exe&amp;quot; inside the Wine Prefix path (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/Multi Theft Auto.exe&amp;quot;)&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* You should be greeted with an &amp;quot;Error serial&amp;quot;, but that's actually a good sign, continue to solve it&lt;br /&gt;
# In order to solve the &amp;quot;Error serial&amp;quot;, [https://wiki.multitheftauto.com/wiki/Server_Manual#Linux_installation download and run the Linux Native MTA Server]&lt;br /&gt;
#* '''After about a minute running the server''', close it&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* MTA should launch without any issues, as well as successfully connect to servers&lt;br /&gt;
&lt;br /&gt;
==Updating MTA==&lt;br /&gt;
&lt;br /&gt;
Updating MTA through the client itself doesn't work. You have to manually download the new version of [https://www.mtasa.com/ MTA Installer], and install it by repeating Steps 2 and 3 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
&lt;br /&gt;
* This setup works with MTA 1.5.9 (tested)&lt;br /&gt;
* There are probably some Lutris Scripts available for installing MTA, but doing it manually should work better (untested)&lt;br /&gt;
* If you want you can ignore any Wine Mono and Wine Gecko installation prompts, as they are not needed for MTA (tested)&lt;br /&gt;
* Instead of using the Lutris one, the latest version of wine-tkg [https://github.com/Frogging-Family/wine-tkg-git/releases/] should work as well if you prefer.&amp;lt;br&amp;gt; If for some reason the latest version doesn't work, try out older versions from that page&lt;br /&gt;
* For audio streaming, installing &amp;quot;wmp10&amp;quot; using Winetricks from Lutris might help (untested)&lt;br /&gt;
* Make sure you also check [[Client on Linux Manual]] for more info&lt;br /&gt;
&lt;br /&gt;
===Known issues===&lt;br /&gt;
* MTA isn't starting (even with fonts installed)&lt;br /&gt;
#Try to start MTA:SA in a virtual desktop&lt;br /&gt;
#:Go to WineConfig, choose the tab &amp;quot;Graphics&amp;quot; and select &amp;quot;Emulate a virtual desktop&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
#Try to delete your gta_sa.set file&lt;br /&gt;
#:which is located in the &amp;quot;GTA San Andreas User Files&amp;quot; folder, which can be found in your home directory.&amp;lt;br&amp;gt;'''(Remember to create a copy, if you're playing San Andreas in singleplayer)'''&lt;br /&gt;
#Try to delete your MTA config file&lt;br /&gt;
#:which is: &amp;quot;MTA San Andreas 1.5/MTA/coreconfig.xml&amp;quot;&amp;lt;br&amp;gt;'''(Also remember to create a copy, if you don't want to lose your edited MTA configuration)'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; MTA crash upon joining servers, or during gameplay (when server uses CEF and your CEF web browser is enabled)&lt;br /&gt;
*:Check step 5 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
* MTA won't start on Ubuntu 12.04 LTS [Temporary fix is available [https://forum.mtasa.com/topic/36206-mta-13-wont-start-on-ubuntu-1204/#comment-366248 here]. Although, just updating away from such an old version of Ubuntu is the recommended way to go]&lt;br /&gt;
* &amp;quot;SD #16 Error&amp;quot; when connecting to a server&lt;br /&gt;
* &amp;quot;No audio card detected&amp;quot; when launching either GTA:SA or MTA&lt;br /&gt;
* Using standard Full-screen mode on MTA might cause some occasional artifacts&lt;br /&gt;
* Enabling DXVK might not break GTA:SA, but it breaks MTA&lt;br /&gt;
* Using Linux brings a higher-than-usual chance for game crashes due to various reasons (sometimes to do with resources &amp;amp; mods on individual servers)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''* Making the mistake of using a 64-bit prefix may ''specifically'' result in:'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; incompatibility =&amp;gt; game crash&lt;br /&gt;
* Even higher chance for instability, lag issues and game crashes&lt;br /&gt;
.. and much more&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Specific issues with workarounds===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash when connecting'''&amp;lt;br&amp;gt;&lt;br /&gt;
Sometimes the audio-server makes problems (could be related to PulseAudio), in this case, you've to go to WineConfig and choose the tab Audio, then deselect &amp;quot;ALSA&amp;quot; and select &amp;quot;EsoundD&amp;quot;. Save the settings and restart MTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash in basswma.dll module while streaming audio'''&amp;lt;br&amp;gt;&lt;br /&gt;
Workaround: Install Windows Media Player 11&amp;lt;br&amp;gt;&lt;br /&gt;
Before carrying this out, [https://wiki.winehq.org/Winetricks install Winetricks]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
winetricks -q wmp11&lt;br /&gt;
&lt;br /&gt;
If that doesnt solve the issue, try an older version:&lt;br /&gt;
winetricks -q wmp10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Closing words'''&amp;lt;br&amp;gt;&lt;br /&gt;
To avoid many of the roadblocks when it comes to Linux/Wine issues in general, just use 32-bit Prefix as suggested. However, if you still run into issues, you can inform yourself better about MTA's Linux/Mac support levels and background by joining the [https://discord.gg/mtasa MTA discord] and going to #help-support channel, to specifically read information at this pinned message: https://discord.com/channels/278474088903606273/278521065435824128/894932698269900830&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We realize that the wiki pages &amp;amp; documentation regarding Linux, macOS support (such as: through Wine, Lutris, PlayOnLinux, Parallels Desktop etc) is far from perfect, and that the list of potential issues you can run into isn't complete. As the MTA discord linked post tries to explain, these platforms are supported on a best-effort basis (in a technical sense, not an user support sense) and even then you'll find others on the MTA discord that are Linux users &amp;amp; play MTA after performing some workarounds, that may be willing to help you. These people are also advised to add any known issue (and workaround for it) to the wiki documentations, so if that sounds like you then feel free to edit this page for instance, and help future users that find themselves in the same situation as you were. Linux/Wine just gives really obscure, hard to fix issues with MTA and other applications/games, including niche ones that individual users happen to resolve somehow.. that's the point.&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75729</id>
		<title>Client on Linux using Lutris Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75729"/>
		<updated>2022-12-12T15:35:33Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: rolled back unverified, contradictory knownledge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning|Before reading this manual, it's advised to have read our main [[Client on Linux Manual|Client on Linux Manual]]. This manual for Lutris is a thing on the side, based on personal preference of individual Linux users. Both manuals can supplement eachother|true}}&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Basic knowledge about the [https://linuxconfig.org/using-wine-prefixes Wine Prefix]&lt;br /&gt;
* [https://lutris.net/downloads/ Lutris]&lt;br /&gt;
* Lutris Wine Runner: latest version of lutris 7.x&lt;br /&gt;
* A prefix with GTA:SA V1.0 installation (Lutris can be used)&lt;br /&gt;
* [https://www.mtasa.com/ MTA Installer]&lt;br /&gt;
* During this tutorial, make sure to only use 32-bit prefix for MTA:SA, or else you will run into a libcef.dll incompatibility issue and performance problems.&lt;br /&gt;
&lt;br /&gt;
==Installing MTA==&lt;br /&gt;
&lt;br /&gt;
# On Lutris, Add a Game:&lt;br /&gt;
#* Game Info -&amp;gt; Name: Multi Theft Auto&lt;br /&gt;
#* Game Options -&amp;gt; Wine Prefix: ''Same as the GTA:SA installation prefix''.&amp;lt;br&amp;gt;&lt;br /&gt;
  '''Make sure all prefixes for MTA/GTA are 64-bit, to avoid running into a plethora of issues.'''&lt;br /&gt;
#* Runner Options -&amp;gt; Wine Version: latest version of lutris 7.x &amp;lt;br&amp;gt; Note: if for any reason it doesn't work, try the latest confirmed working version: 7.2&lt;br /&gt;
#* Runner Options -&amp;gt; Enable DXVK/VKD3D: Disabled&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Winetricks&lt;br /&gt;
#* Select the default wineprefix -&amp;gt; Install a font -&amp;gt; Check Tahoma and Verdana&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Run EXE inside Wine prefix&lt;br /&gt;
#* On the File Manager that appears, find and select the MTA Setup executable that you downloaded&lt;br /&gt;
# Run the setup&lt;br /&gt;
#* Untick &amp;quot;Install DirectX&amp;quot; and &amp;quot;Dedicated server&amp;quot;&lt;br /&gt;
#* Before finishing setup, make sure you untick Run MTA&lt;br /&gt;
# Open this folder in your MTA directory (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/MTA&amp;quot;)&lt;br /&gt;
#* Open your terminal emulator here, run &amp;lt;br&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp libcef.dll chrome_elf.dll icudtl.dat natives_blob.bin v8_context_snapshot.bin snapshot_blob.bin CEF&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;br&amp;gt; (issue workaround source is on [https://github.com/multitheftauto/mtasa-blue/issues/1000 github])&lt;br /&gt;
# On Lutris, right click Multi Theft Auto and select Configure&lt;br /&gt;
#* Game Options -&amp;gt; Executable: Should point to &amp;quot;Multi Theft Auto.exe&amp;quot; inside the Wine Prefix path (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/Multi Theft Auto.exe&amp;quot;)&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* You should be greeted with an &amp;quot;Error serial&amp;quot;, but that's actually a good sign, continue to solve it&lt;br /&gt;
# In order to solve the &amp;quot;Error serial&amp;quot;, [https://wiki.multitheftauto.com/wiki/Server_Manual#Linux_installation download and run the Linux Native MTA Server]&lt;br /&gt;
#* '''After about a minute running the server''', close it&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* MTA should launch without any issues, as well as successfully connect to servers&lt;br /&gt;
&lt;br /&gt;
==Updating MTA==&lt;br /&gt;
&lt;br /&gt;
Updating MTA through the client itself doesn't work. You have to manually download the new version of [https://www.mtasa.com/ MTA Installer], and install it by repeating Steps 2 and 3 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
&lt;br /&gt;
* This setup works with MTA 1.5.9 (tested)&lt;br /&gt;
* There are probably some Lutris Scripts available for installing MTA, but doing it manually should work better (untested)&lt;br /&gt;
* If you want you can ignore any Wine Mono and Wine Gecko installation prompts, as they are not needed for MTA (tested)&lt;br /&gt;
* Instead of using the Lutris one, the latest version of wine-tkg [https://github.com/Frogging-Family/wine-tkg-git/releases/] should work as well if you prefer.&amp;lt;br&amp;gt; If for some reason the latest version doesn't work, try out older versions from that page&lt;br /&gt;
* For audio streaming, installing &amp;quot;wmp10&amp;quot; using Winetricks from Lutris might help (untested)&lt;br /&gt;
* Make sure you also check [[Client on Linux Manual]] for more info&lt;br /&gt;
&lt;br /&gt;
===Known issues===&lt;br /&gt;
* MTA isn't starting (even with fonts installed)&lt;br /&gt;
#Try to start MTA:SA in a virtual desktop&lt;br /&gt;
#:Go to WineConfig, choose the tab &amp;quot;Graphics&amp;quot; and select &amp;quot;Emulate a virtual desktop&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
#Try to delete your gta_sa.set file&lt;br /&gt;
#:which is located in the &amp;quot;GTA San Andreas User Files&amp;quot; folder, which can be found in your home directory.&amp;lt;br&amp;gt;'''(Remember to create a copy, if you're playing San Andreas in singleplayer)'''&lt;br /&gt;
#Try to delete your MTA config file&lt;br /&gt;
#:which is: &amp;quot;MTA San Andreas 1.5/MTA/coreconfig.xml&amp;quot;&amp;lt;br&amp;gt;'''(Also remember to create a copy, if you don't want to lose your edited MTA configuration)'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; MTA crash upon joining servers, or during gameplay (when server uses CEF and your CEF web browser is enabled)&lt;br /&gt;
*:Check step 5 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
* MTA won't start on Ubuntu 12.04 LTS [Temporary fix is available [https://forum.mtasa.com/topic/36206-mta-13-wont-start-on-ubuntu-1204/#comment-366248 here]. Although, just updating away from such an old version of Ubuntu is the recommended way to go]&lt;br /&gt;
* &amp;quot;SD #16 Error&amp;quot; when connecting to a server&lt;br /&gt;
* &amp;quot;No audio card detected&amp;quot; when launching either GTA:SA or MTA&lt;br /&gt;
* Using standard Full-screen mode on MTA might cause some occasional artifacts&lt;br /&gt;
* Enabling DXVK might not break GTA:SA, but it breaks MTA&lt;br /&gt;
* Using Linux brings a higher-than-usual chance for game crashes due to various reasons (sometimes to do with resources &amp;amp; mods on individual servers)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''* Making the mistake of using a 64-bit prefix may ''specifically'' result in:'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; incompatibility =&amp;gt; game crash&lt;br /&gt;
* Even higher chance for instability, lag issues and game crashes&lt;br /&gt;
.. and much more&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Specific issues with workarounds===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash when connecting'''&amp;lt;br&amp;gt;&lt;br /&gt;
Sometimes the audio-server makes problems (could be related to PulseAudio), in this case, you've to go to WineConfig and choose the tab Audio, then deselect &amp;quot;ALSA&amp;quot; and select &amp;quot;EsoundD&amp;quot;. Save the settings and restart MTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash in basswma.dll module while streaming audio'''&amp;lt;br&amp;gt;&lt;br /&gt;
Workaround: Install Windows Media Player 11&amp;lt;br&amp;gt;&lt;br /&gt;
Before carrying this out, [https://wiki.winehq.org/Winetricks install Winetricks]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
winetricks -q wmp11&lt;br /&gt;
&lt;br /&gt;
If that doesnt solve the issue, try an older version:&lt;br /&gt;
winetricks -q wmp10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Closing words'''&amp;lt;br&amp;gt;&lt;br /&gt;
To avoid many of the roadblocks when it comes to Linux/Wine issues in general, just use 32-bit Prefix as suggested. However, if you still run into issues, you can inform yourself better about MTA's Linux/Mac support levels and background by joining the [https://discord.gg/mtasa MTA discord] and going to #help-support channel, to specifically read information at this pinned message: https://discord.com/channels/278474088903606273/278521065435824128/894932698269900830&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contibutor's discord: noRules#6167&amp;lt;br&amp;gt;&lt;br /&gt;
dm me if you have any problems&lt;br /&gt;
&lt;br /&gt;
We realize that the wiki pages &amp;amp; documentation regarding Linux, macOS support (such as: through Wine, Lutris, PlayOnLinux, Parallels Desktop etc) is far from perfect, and that the list of potential issues you can run into isn't complete. As the MTA discord linked post tries to explain, these platforms are supported on a best-effort basis (in a technical sense, not an user support sense) and even then you'll find others on the MTA discord that are Linux users &amp;amp; play MTA after performing some workarounds, that may be willing to help you. These people are also advised to add any known issue (and workaround for it) to the wiki documentations, so if that sounds like you then feel free to edit this page for instance, and help future users that find themselves in the same situation as you were. Linux/Wine just gives really obscure, hard to fix issues with MTA and other applications/games, including niche ones that individual users happen to resolve somehow.. that's the point.&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75728</id>
		<title>Client on Linux using Lutris Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Client_on_Linux_using_Lutris_Manual&amp;diff=75728"/>
		<updated>2022-12-12T15:34:32Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning|Before reading this manual, it's advised to have read our main [[Client on Linux Manual|Client on Linux Manual]]. This manual for Lutris is a thing on the side, based on personal preference of individual Linux users. Both manuals can supplement eachother|true}}&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
* Basic knowledge about the [https://linuxconfig.org/using-wine-prefixes Wine Prefix]&lt;br /&gt;
* [https://lutris.net/downloads/ Lutris]&lt;br /&gt;
* Lutris Wine Runner: latest version of lutris 7.x&lt;br /&gt;
* A prefix with GTA:SA V1.0 installation (Lutris can be used)&lt;br /&gt;
* [https://www.mtasa.com/ MTA Installer]&lt;br /&gt;
* During this tutorial, make sure to only use 64-bit prefix for MTA:SA, or else you will run into a libcef.dll incompatibility issue and performance problems.&lt;br /&gt;
&lt;br /&gt;
==Installing MTA==&lt;br /&gt;
&lt;br /&gt;
# On Lutris, Add a Game:&lt;br /&gt;
#* Game Info -&amp;gt; Name: Multi Theft Auto&lt;br /&gt;
#* Game Options -&amp;gt; Wine Prefix: ''Same as the GTA:SA installation prefix''.&amp;lt;br&amp;gt;&lt;br /&gt;
  '''Make sure all prefixes for MTA/GTA are 64-bit, to avoid running into a plethora of issues.'''&lt;br /&gt;
#* Runner Options -&amp;gt; Wine Version: latest version of lutris 7.x &amp;lt;br&amp;gt; Note: if for any reason it doesn't work, try the latest confirmed working version: 7.2&lt;br /&gt;
#* Runner Options -&amp;gt; Enable DXVK/VKD3D: Disabled&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Winetricks&lt;br /&gt;
#* Select the default wineprefix -&amp;gt; Install a font -&amp;gt; Check Tahoma and Verdana&lt;br /&gt;
# On Lutris, click on Multi Theft Auto and on the bottom bar, click on the Wine popup menu and select Run EXE inside Wine prefix&lt;br /&gt;
#* On the File Manager that appears, find and select the MTA Setup executable that you downloaded&lt;br /&gt;
# Run the setup&lt;br /&gt;
#* Untick &amp;quot;Install DirectX&amp;quot; and &amp;quot;Dedicated server&amp;quot;&lt;br /&gt;
#* Before finishing setup, make sure you untick Run MTA&lt;br /&gt;
# Open this folder in your MTA directory (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/MTA&amp;quot;)&lt;br /&gt;
#* Open your terminal emulator here, run &amp;lt;br&amp;gt; &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp libcef.dll chrome_elf.dll icudtl.dat natives_blob.bin v8_context_snapshot.bin snapshot_blob.bin CEF&amp;lt;/syntaxhighlight&amp;gt; &amp;lt;br&amp;gt; (issue workaround source is on [https://github.com/multitheftauto/mtasa-blue/issues/1000 github])&lt;br /&gt;
# On Lutris, right click Multi Theft Auto and select Configure&lt;br /&gt;
#* Game Options -&amp;gt; Executable: Should point to &amp;quot;Multi Theft Auto.exe&amp;quot; inside the Wine Prefix path (eg. &amp;quot;{Wine Prefix path}/drive_c/Program Files (x86)/MTA San Andreas 1.5/Multi Theft Auto.exe&amp;quot;)&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* You should be greeted with an &amp;quot;Error serial&amp;quot;, but that's actually a good sign, continue to solve it&lt;br /&gt;
# In order to solve the &amp;quot;Error serial&amp;quot;, [https://wiki.multitheftauto.com/wiki/Server_Manual#Linux_installation download and run the Linux Native MTA Server]&lt;br /&gt;
#* '''After about a minute running the server''', close it&lt;br /&gt;
# On Lutris, launch Multi Theft Auto&lt;br /&gt;
#* MTA should launch without any issues, as well as successfully connect to servers&lt;br /&gt;
&lt;br /&gt;
==Updating MTA==&lt;br /&gt;
&lt;br /&gt;
Updating MTA through the client itself doesn't work. You have to manually download the new version of [https://www.mtasa.com/ MTA Installer], and install it by repeating Steps 2 and 3 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
&lt;br /&gt;
* This setup works with MTA 1.5.9 (tested)&lt;br /&gt;
* There are probably some Lutris Scripts available for installing MTA, but doing it manually should work better (untested)&lt;br /&gt;
* If you want you can ignore any Wine Mono and Wine Gecko installation prompts, as they are not needed for MTA (tested)&lt;br /&gt;
* Instead of using the Lutris one, the latest version of wine-tkg [https://github.com/Frogging-Family/wine-tkg-git/releases/] should work as well if you prefer.&amp;lt;br&amp;gt; If for some reason the latest version doesn't work, try out older versions from that page&lt;br /&gt;
* For audio streaming, installing &amp;quot;wmp10&amp;quot; using Winetricks from Lutris might help (untested)&lt;br /&gt;
* Make sure you also check [[Client on Linux Manual]] for more info&lt;br /&gt;
&lt;br /&gt;
===Known issues===&lt;br /&gt;
* MTA isn't starting (even with fonts installed)&lt;br /&gt;
#Try to start MTA:SA in a virtual desktop&lt;br /&gt;
#:Go to WineConfig, choose the tab &amp;quot;Graphics&amp;quot; and select &amp;quot;Emulate a virtual desktop&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
#Try to delete your gta_sa.set file&lt;br /&gt;
#:which is located in the &amp;quot;GTA San Andreas User Files&amp;quot; folder, which can be found in your home directory.&amp;lt;br&amp;gt;'''(Remember to create a copy, if you're playing San Andreas in singleplayer)'''&lt;br /&gt;
#Try to delete your MTA config file&lt;br /&gt;
#:which is: &amp;quot;MTA San Andreas 1.5/MTA/coreconfig.xml&amp;quot;&amp;lt;br&amp;gt;'''(Also remember to create a copy, if you don't want to lose your edited MTA configuration)'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; MTA crash upon joining servers, or during gameplay (when server uses CEF and your CEF web browser is enabled)&lt;br /&gt;
*:Check step 5 on [[#Installing MTA|Installing MTA]] section&lt;br /&gt;
* MTA won't start on Ubuntu 12.04 LTS [Temporary fix is available [https://forum.mtasa.com/topic/36206-mta-13-wont-start-on-ubuntu-1204/#comment-366248 here]. Although, just updating away from such an old version of Ubuntu is the recommended way to go]&lt;br /&gt;
* &amp;quot;SD #16 Error&amp;quot; when connecting to a server&lt;br /&gt;
* &amp;quot;No audio card detected&amp;quot; when launching either GTA:SA or MTA&lt;br /&gt;
* Using standard Full-screen mode on MTA might cause some occasional artifacts&lt;br /&gt;
* Enabling DXVK might not break GTA:SA, but it breaks MTA&lt;br /&gt;
* Using Linux brings a higher-than-usual chance for game crashes due to various reasons (sometimes to do with resources &amp;amp; mods on individual servers)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''* Making the mistake of using a 32-bit prefix may ''specifically'' result in:'''&lt;br /&gt;
* &amp;quot;libcef.dll&amp;quot; incompatibility =&amp;gt; game crash&lt;br /&gt;
* Even higher chance for instability, lag issues and game crashes&lt;br /&gt;
.. and much more&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Specific issues with workarounds===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash when connecting'''&amp;lt;br&amp;gt;&lt;br /&gt;
Sometimes the audio-server makes problems (could be related to PulseAudio), in this case, you've to go to WineConfig and choose the tab Audio, then deselect &amp;quot;ALSA&amp;quot; and select &amp;quot;EsoundD&amp;quot;. Save the settings and restart MTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Crash in basswma.dll module while streaming audio'''&amp;lt;br&amp;gt;&lt;br /&gt;
Workaround: Install Windows Media Player 11&amp;lt;br&amp;gt;&lt;br /&gt;
Before carrying this out, [https://wiki.winehq.org/Winetricks install Winetricks]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
winetricks -q wmp11&lt;br /&gt;
&lt;br /&gt;
If that doesnt solve the issue, try an older version:&lt;br /&gt;
winetricks -q wmp10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Closing words'''&amp;lt;br&amp;gt;&lt;br /&gt;
To avoid many of the roadblocks when it comes to Linux/Wine issues in general, just use 64-bit Prefix as suggested. However, if you still run into issues, you can inform yourself better about MTA's Linux/Mac support levels and background by joining the [https://discord.gg/mtasa MTA discord] and going to #help-support channel, to specifically read information at this pinned message: https://discord.com/channels/278474088903606273/278521065435824128/894932698269900830&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contibutor's discord: noRules#6167&amp;lt;br&amp;gt;&lt;br /&gt;
dm me if you have any problems&lt;br /&gt;
&lt;br /&gt;
We realize that the wiki pages &amp;amp; documentation regarding Linux, macOS support (such as: through Wine, Lutris, PlayOnLinux, Parallels Desktop etc) is far from perfect, and that the list of potential issues you can run into isn't complete. As the MTA discord linked post tries to explain, these platforms are supported on a best-effort basis (in a technical sense, not an user support sense) and even then you'll find others on the MTA discord that are Linux users &amp;amp; play MTA after performing some workarounds, that may be willing to help you. These people are also advised to add any known issue (and workaround for it) to the wiki documentations, so if that sounds like you then feel free to edit this page for instance, and help future users that find themselves in the same situation as you were. Linux/Wine just gives really obscure, hard to fix issues with MTA and other applications/games, including niche ones that individual users happen to resolve somehow.. that's the point.&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=RU/Forks_Full_AC&amp;diff=75727</id>
		<title>RU/Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/Forks_Full_AC&amp;diff=75727"/>
		<updated>2022-12-12T15:21:53Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Dutchman101 moved page RU/Forks Full AC to RU/Полный античит MTA для форк-проектов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[RU/Полный античит MTA для форк-проектов]]&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=RU/%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B8%D1%82_MTA_%D0%B4%D0%BB%D1%8F_%D1%84%D0%BE%D1%80%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=75726</id>
		<title>RU/Полный античит MTA для форк-проектов</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B8%D1%82_MTA_%D0%B4%D0%BB%D1%8F_%D1%84%D0%BE%D1%80%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=75726"/>
		<updated>2022-12-12T15:21:52Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Dutchman101 moved page RU/Forks Full AC to RU/Полный античит MTA для форк-проектов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Полный античит МТА для форков.&lt;br /&gt;
&lt;br /&gt;
Source: English wiki page at https://wiki.multitheftauto.com/wiki/Forks_Full_AC&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ {{Примечание|Информация на этой странице не относится к официальным сборкам MTA.}}&lt;br /&gt;
__NOTOC__ {{Примечание|Это не окончательная версия этой страницы, она будет улучшаться/дополняться/переписываться.}}&lt;br /&gt;
&lt;br /&gt;
Примечание: Информация на этой странице не относится к официальным сборкам MTA.&lt;br /&gt;
Примечание: Это не окончательная версия этой страницы, она будет улучшаться/дополняться/переписываться.&lt;br /&gt;
&lt;br /&gt;
''Форкам MTA недостаточно для использования &amp;quot;обычного netc для форков&amp;quot; (из bdata/netc.dll ) как описано на вики-странице Forks, из-за того, что она ограничивает работу AЧ (Античита). Теперь можно испытать возможности использования нового варианта netc: &amp;quot;forks full AC&amp;quot;. Это, однако, имеет свои ограничения, связанные с характером вашего проекта и реализаций, и также с вопросами, которые нелегко объяснить, но эта страница стремится сделать это как можно точнее.''&lt;br /&gt;
&lt;br /&gt;
Эта операция превратит ваш форк в проект с &amp;quot;правильным AЧ, основанным на исправлении метода&amp;quot;, как описано в официальном MTA в спойлере в этом разделе: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta -  не более 15% AЧ на основе подписи, согласно описанию обычных AЧ/netc на странице [[Forks]] wiki.&lt;br /&gt;
&lt;br /&gt;
Основная идея:&lt;br /&gt;
&lt;br /&gt;
* Модуль netc &amp;quot;forks full AC&amp;quot; будет обеспечивать 95% функций AЧ, найденных в официальном MTA (multitheftauto.com &amp;gt; Кнопка &amp;quot;Загрузить&amp;quot;).&lt;br /&gt;
* Чем больше несовместимых функций / реализаций (пользовательских изменений) есть в вашем форк-проекте, которые вы можете &amp;quot;отключить&amp;quot; (добавив их в массив detection # whitelist: disableac в mtaserver.conf, как описано в руководстве по борьбе с мошенничеством: DISABLEAC), тем ниже будет указанный показатель защиты в процентах.&lt;br /&gt;
&lt;br /&gt;
** Например, если вам нужно отключить 3 различных типа обнаружения (скажем, для российских форков, учитывая внешнюю загрузку модов за пределами MTA API / limit adjusters, наиболее распространенными являются: 5, 6, 21), вы получите 85% защиты от работоспособности античита. Хотя это число относительно, поскольку оно предоставляет разработчикам читов возможность использовать именно &amp;quot;урезанные&amp;quot; категории обнаружения для выполнения своей хакерской работы, например, эти 3 кода уже предоставляют некоторые конкретные возможности для записи в память GTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можете ли вы определить, в каком направлении это происходит? Позже в этой статье появится ссылка на &amp;quot;forks full AC&amp;quot;, и то, что вы будете делать с ней, - это метод проб и ошибок. Попытка интегрировать полную поддержку AЧ в ваш форк - это вопрос &amp;quot;Мы можем попробовать, и если это в конечном итоге сработает, это будет хорошо,  если нам придется отключить некоторые обнаружения, процент защиты от чего-либо станет ниже, чем у обычных форков AC: 15% - это уже огромный выигрыш&amp;quot; и в высшей степени, на основе наилучших усилий. Потому что причина, по которой мы отделили форки netc (от bdata/netc.dll ) к тому, в котором отсутствует большинство функций AC, может быть ясно любому опытному разработчику: модуль netc (AC) не предназначен для ожидания всех типов настроек, которые разработчик форка может добавить в свою кодовую базу, это было сделано в духе обеспечения максимальной свободы и гибкости. Тем более, что во многих форках нет хороших разработчиков, которые не знают, почему им лучше следовать рекомендациям по кодированию MTA (mtasa-blue), структуры проекта и максимально приближать свои пользовательские реализации к тому, как это обычно делает участник MTA, прошедший проверку кода. Таким образом, здесь &amp;quot;чистые&amp;quot; изменения отделяются от &amp;quot;грязного моддинга&amp;quot;, который также часто встречается в российских форках, '''использующих один или несколько из следующих подходов к кодовой базе своего проекта:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Реализация проектов моддинга GTA SA внешним &amp;quot;грязным&amp;quot; способом, таким как limit adjuster (fastman92 и т.д.)&lt;br /&gt;
&lt;br /&gt;
* Необработанная загрузка модифицированных данных GTA SA &amp;amp; .Файлы IMG, посредством распространения предварительно модифицированных папок установки GTA для игроков-клиентов форка, тем самым полностью игнорируя MTA API для замены моделей и различных игровых процессов&lt;br /&gt;
&lt;br /&gt;
* Разная грязь, в широком смысле того, что описано в параграфе выше этого также включает в себя несоблюдение рекомендаций MTA по &amp;quot;необработанному доступу к памяти&amp;quot;, найденных здесь: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips что является значительным фактором риска для сценария, которого не ожидают netc.dll (AC), как будто он защищает от изменений памяти, зная источник, и вы просто помещаете грязный 'WriteProcessMemory' или memcpy в случайном порядке.файл cpp, это приведет к нарушению. Это еще не все и не плохой пример, но просто для того, чтобы вы получили основную идею о том, почему существуют несовместимости.&lt;br /&gt;
&lt;br /&gt;
=== Получение максимальной отдачи от защиты от АЧ % ===&lt;br /&gt;
&lt;br /&gt;
Поняв вышесказанное, а также то, что мы приложили все усилия, поскольку такое использование как &amp;quot;полный AC&amp;quot; для форков никогда не входило в наши намерения, и то, как было бы трудно поддерживать пользовательские модификации каждого пользователя, вы можете понять, что мы не можем помочь вам выяснить, что несовместимо сразу после того, как вы начнете тестировать &amp;quot;полный AC&amp;quot; netc “ на вашем проекте. Поэтому вы должны либо отключить столько обнаружений, сколько требуется (если вы не можете их исправить - где &amp;quot;невозможно&amp;quot; является показателем отсутствия технического надзора), либо, что еще лучше, придумать исправления, которые позволят вам избежать отключения слишком большого количества или любых типов обнаружения, тем самым максимизируя ваши потенциальные возможности переменного тока %.&lt;br /&gt;
&lt;br /&gt;
Это означает, что без поддержки команды MTA вам предстоит выяснить, какие настройки / интеграции / несоблюдение MTA API / примеры проблем, описанные ранее в этой статье .. являются причиной каждого конкретного типа обнаружения, который отправляет вам пинки AC после установки netc &amp;quot;full AC&amp;quot; в ваш форк для целей тестирования. Мы советуем вам очистить свои интеграции, чтобы избежать необходимости много копаться вручную / размышлять о виновнике. Для этого позаботьтесь о записях из маркированного списка из предыдущего абзаца. Однако, если был найден прямой виновник, приложив все наши усилия, вы должны без каких-либо указаний MTA придумать альтернативу (более чистую, более соответствующую рекомендациям MTA по кодированию, API и структуре проекта.. следовательно, менее вероятно, что несовместимые с полным AC и тем, что он ожидает) реализации проблемной настройки, найденной в кодовой базе вашего форка. Вы можете видеть, где возможность использовать &amp;quot;полный AC для форков&amp;quot; становится скорее благосклонностью, чем данностью, особенно с учетом состояния кодовой базы, в которое превратились многие форки, не начиная свою разработку в сценарии &amp;quot;полного AC&amp;quot;, просто написав то, что работает для них, не рассматривая такие аспекты. Теперь должна быть ясна общая картина того, почему мы не будем поддерживать процесс реинжиниринга. Если вы не можете с этим справиться, либо наймите кого-нибудь с большим инженерным опытом (CS), либо отключите больше типов обнаружения переменного тока и соглашайтесь на все, что превышает 15% обычного netc для форков, лучше что-то, чем ничего. Но мы, естественно, не сможем протянуть руку помощи. Любое непонимание этих концепций указывает на недостаточную завершенность разработчика (индивидуальные навыки, возможности для роста) и не может быть отражено на разработчиках MTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Давайте перейдем к делу&lt;br /&gt;
Если вы считаете, что понимаете все концепции, описанные в этой статье, вы можете начать внедрять &amp;quot;полный АЧ для форков&amp;quot;.:&lt;br /&gt;
&lt;br /&gt;
'''СКАЧАТЬ: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (поэтому ''вместо'' использования &amp;quot;bdata/netc.dll &amp;quot; из стандартного mtasa-blue buildactions/install_data.lua) Обратите внимание, что версия netc.dll ссылка выше будет регулярно обновляться, чтобы предоставить форкам все улучшения AC, также представленные в официальном MTA. Поэтому рекомендуется регулярно получать обновления для вашего форка для обеспечения оптимальной безопасности и надежности Антчита для форков&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Замените netc.dll в вашем проекте с вышеуказанной &amp;quot;поддержкой форков&amp;quot; полный AЧ netc. - Убедитесь, что эта версия.тип сборки h установлен на НЕСТАБИЛЬНЫЙ, в соответствии с рекомендациями для форков&amp;quot;массовое потребление&amp;quot; в комментариях: Shared/sdk/version.h. Если это не так, вы сведете на нет все усилия по получению полной защиты от переменного тока.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Убедитесь, что вы обновили кодовую базу вашего форка до активной основной версии (для которой netc.dll ) основная фиксация mtasa-blue, по крайней мере, версия &amp;quot;По умолчанию&amp;quot;, указанная в [1] как &amp;quot;Автоматическое обновление по умолчанию&amp;quot; для последней основной версии, затем сопоставление указанной ревизии с фиксацией Хэш SHA1 с помощью этого инструмента: https://buildinfo.mtasa.com/index.php - это означает, что не следует использовать тег выпуска основной версии на github, потому что MTA использует модель &amp;quot;MTA как услуга&amp;quot;, когда игроки получают регулярные обновления, содержащие все основные изменения для оптимального качества и использования новых функций. Последний netc.dll выпуски основаны на этом и могут потребовать присутствия основных изменений.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Столкнитесь с некоторыми изменениями в вашем клиенте, здесь начинается этап проб и ошибок. Теперь используйте предыдущие части этого руководства, чтобы либо отключить типы обнаружения переменного тока с помощью disableac в mtaserver.conf, либо, что еще лучше, потратьте больше времени на их правильное исправление и очистку ваших пользовательских реализаций, как советовалось ранее, чтобы сохранить как можно больше % защиты от переменного тока. Мы советуем не опускаться ниже 85% (как в примере с кодами 'disableac': 5, 6, 21 упоминалось как относительно 85%, и это то, что требуется большинству российских мод-тяжелых форков для немедленного запуска и предоставления вам возможности подключиться)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Заключительные слова: всегда будет лучше не быть форком в первую очередь. Чтобы использовать официальный клиент MTA и просто создать сервер, в конечном итоге с пользовательским лаунчером, который подключается непосредственно к вашему массиву серверов. Чтобы просто внести все настройки, которые вам понадобятся (причина для того, чтобы вместо этого стать форком) &amp;quot;вверх по течению&amp;quot;, что означает в PR, запрос на извлечение, в официальный репозиторий MTA по адресу https://github.com/multitheftauto/mtasa-blue таким образом, все выигрывают, и вы соблюдаете лицензию и не сталкиваетесь с препятствиями, включая AC и приток новых игроков, из быть вилкой. MTA обычно имеет 30 000 игроков онлайн одновременно, что также является огромным притоком новых игроков для знакомства с вашим сообществом. Лучше просто не быть форком, но если вам действительно нужно, эта страница является нашей активной поддержкой форков, чтобы получить лучшую степень защиты от обмана (AЧ).&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=RU/%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B8%D1%82_MTA_%D0%B4%D0%BB%D1%8F_%D1%84%D0%BE%D1%80%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=75725</id>
		<title>RU/Полный античит MTA для форк-проектов</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=RU/%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B8%D1%82_MTA_%D0%B4%D0%BB%D1%8F_%D1%84%D0%BE%D1%80%D0%BA-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2&amp;diff=75725"/>
		<updated>2022-12-12T15:12:29Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Полный античит МТА для форков: Russian page of &amp;quot;forks full AC&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Полный античит МТА для форков.&lt;br /&gt;
&lt;br /&gt;
Source: English wiki page at https://wiki.multitheftauto.com/wiki/Forks_Full_AC&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ {{Примечание|Информация на этой странице не относится к официальным сборкам MTA.}}&lt;br /&gt;
__NOTOC__ {{Примечание|Это не окончательная версия этой страницы, она будет улучшаться/дополняться/переписываться.}}&lt;br /&gt;
&lt;br /&gt;
Примечание: Информация на этой странице не относится к официальным сборкам MTA.&lt;br /&gt;
Примечание: Это не окончательная версия этой страницы, она будет улучшаться/дополняться/переписываться.&lt;br /&gt;
&lt;br /&gt;
''Форкам MTA недостаточно для использования &amp;quot;обычного netc для форков&amp;quot; (из bdata/netc.dll ) как описано на вики-странице Forks, из-за того, что она ограничивает работу AЧ (Античита). Теперь можно испытать возможности использования нового варианта netc: &amp;quot;forks full AC&amp;quot;. Это, однако, имеет свои ограничения, связанные с характером вашего проекта и реализаций, и также с вопросами, которые нелегко объяснить, но эта страница стремится сделать это как можно точнее.''&lt;br /&gt;
&lt;br /&gt;
Эта операция превратит ваш форк в проект с &amp;quot;правильным AЧ, основанным на исправлении метода&amp;quot;, как описано в официальном MTA в спойлере в этом разделе: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta -  не более 15% AЧ на основе подписи, согласно описанию обычных AЧ/netc на странице [[Forks]] wiki.&lt;br /&gt;
&lt;br /&gt;
Основная идея:&lt;br /&gt;
&lt;br /&gt;
* Модуль netc &amp;quot;forks full AC&amp;quot; будет обеспечивать 95% функций AЧ, найденных в официальном MTA (multitheftauto.com &amp;gt; Кнопка &amp;quot;Загрузить&amp;quot;).&lt;br /&gt;
* Чем больше несовместимых функций / реализаций (пользовательских изменений) есть в вашем форк-проекте, которые вы можете &amp;quot;отключить&amp;quot; (добавив их в массив detection # whitelist: disableac в mtaserver.conf, как описано в руководстве по борьбе с мошенничеством: DISABLEAC), тем ниже будет указанный показатель защиты в процентах.&lt;br /&gt;
&lt;br /&gt;
** Например, если вам нужно отключить 3 различных типа обнаружения (скажем, для российских форков, учитывая внешнюю загрузку модов за пределами MTA API / limit adjusters, наиболее распространенными являются: 5, 6, 21), вы получите 85% защиты от работоспособности античита. Хотя это число относительно, поскольку оно предоставляет разработчикам читов возможность использовать именно &amp;quot;урезанные&amp;quot; категории обнаружения для выполнения своей хакерской работы, например, эти 3 кода уже предоставляют некоторые конкретные возможности для записи в память GTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можете ли вы определить, в каком направлении это происходит? Позже в этой статье появится ссылка на &amp;quot;forks full AC&amp;quot;, и то, что вы будете делать с ней, - это метод проб и ошибок. Попытка интегрировать полную поддержку AЧ в ваш форк - это вопрос &amp;quot;Мы можем попробовать, и если это в конечном итоге сработает, это будет хорошо,  если нам придется отключить некоторые обнаружения, процент защиты от чего-либо станет ниже, чем у обычных форков AC: 15% - это уже огромный выигрыш&amp;quot; и в высшей степени, на основе наилучших усилий. Потому что причина, по которой мы отделили форки netc (от bdata/netc.dll ) к тому, в котором отсутствует большинство функций AC, может быть ясно любому опытному разработчику: модуль netc (AC) не предназначен для ожидания всех типов настроек, которые разработчик форка может добавить в свою кодовую базу, это было сделано в духе обеспечения максимальной свободы и гибкости. Тем более, что во многих форках нет хороших разработчиков, которые не знают, почему им лучше следовать рекомендациям по кодированию MTA (mtasa-blue), структуры проекта и максимально приближать свои пользовательские реализации к тому, как это обычно делает участник MTA, прошедший проверку кода. Таким образом, здесь &amp;quot;чистые&amp;quot; изменения отделяются от &amp;quot;грязного моддинга&amp;quot;, который также часто встречается в российских форках, '''использующих один или несколько из следующих подходов к кодовой базе своего проекта:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Реализация проектов моддинга GTA SA внешним &amp;quot;грязным&amp;quot; способом, таким как limit adjuster (fastman92 и т.д.)&lt;br /&gt;
&lt;br /&gt;
* Необработанная загрузка модифицированных данных GTA SA &amp;amp; .Файлы IMG, посредством распространения предварительно модифицированных папок установки GTA для игроков-клиентов форка, тем самым полностью игнорируя MTA API для замены моделей и различных игровых процессов&lt;br /&gt;
&lt;br /&gt;
* Разная грязь, в широком смысле того, что описано в параграфе выше этого также включает в себя несоблюдение рекомендаций MTA по &amp;quot;необработанному доступу к памяти&amp;quot;, найденных здесь: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips что является значительным фактором риска для сценария, которого не ожидают netc.dll (AC), как будто он защищает от изменений памяти, зная источник, и вы просто помещаете грязный 'WriteProcessMemory' или memcpy в случайном порядке.файл cpp, это приведет к нарушению. Это еще не все и не плохой пример, но просто для того, чтобы вы получили основную идею о том, почему существуют несовместимости.&lt;br /&gt;
&lt;br /&gt;
=== Получение максимальной отдачи от защиты от АЧ % ===&lt;br /&gt;
&lt;br /&gt;
Поняв вышесказанное, а также то, что мы приложили все усилия, поскольку такое использование как &amp;quot;полный AC&amp;quot; для форков никогда не входило в наши намерения, и то, как было бы трудно поддерживать пользовательские модификации каждого пользователя, вы можете понять, что мы не можем помочь вам выяснить, что несовместимо сразу после того, как вы начнете тестировать &amp;quot;полный AC&amp;quot; netc “ на вашем проекте. Поэтому вы должны либо отключить столько обнаружений, сколько требуется (если вы не можете их исправить - где &amp;quot;невозможно&amp;quot; является показателем отсутствия технического надзора), либо, что еще лучше, придумать исправления, которые позволят вам избежать отключения слишком большого количества или любых типов обнаружения, тем самым максимизируя ваши потенциальные возможности переменного тока %.&lt;br /&gt;
&lt;br /&gt;
Это означает, что без поддержки команды MTA вам предстоит выяснить, какие настройки / интеграции / несоблюдение MTA API / примеры проблем, описанные ранее в этой статье .. являются причиной каждого конкретного типа обнаружения, который отправляет вам пинки AC после установки netc &amp;quot;full AC&amp;quot; в ваш форк для целей тестирования. Мы советуем вам очистить свои интеграции, чтобы избежать необходимости много копаться вручную / размышлять о виновнике. Для этого позаботьтесь о записях из маркированного списка из предыдущего абзаца. Однако, если был найден прямой виновник, приложив все наши усилия, вы должны без каких-либо указаний MTA придумать альтернативу (более чистую, более соответствующую рекомендациям MTA по кодированию, API и структуре проекта.. следовательно, менее вероятно, что несовместимые с полным AC и тем, что он ожидает) реализации проблемной настройки, найденной в кодовой базе вашего форка. Вы можете видеть, где возможность использовать &amp;quot;полный AC для форков&amp;quot; становится скорее благосклонностью, чем данностью, особенно с учетом состояния кодовой базы, в которое превратились многие форки, не начиная свою разработку в сценарии &amp;quot;полного AC&amp;quot;, просто написав то, что работает для них, не рассматривая такие аспекты. Теперь должна быть ясна общая картина того, почему мы не будем поддерживать процесс реинжиниринга. Если вы не можете с этим справиться, либо наймите кого-нибудь с большим инженерным опытом (CS), либо отключите больше типов обнаружения переменного тока и соглашайтесь на все, что превышает 15% обычного netc для форков, лучше что-то, чем ничего. Но мы, естественно, не сможем протянуть руку помощи. Любое непонимание этих концепций указывает на недостаточную завершенность разработчика (индивидуальные навыки, возможности для роста) и не может быть отражено на разработчиках MTA.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Давайте перейдем к делу&lt;br /&gt;
Если вы считаете, что понимаете все концепции, описанные в этой статье, вы можете начать внедрять &amp;quot;полный АЧ для форков&amp;quot;.:&lt;br /&gt;
&lt;br /&gt;
'''СКАЧАТЬ: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (поэтому ''вместо'' использования &amp;quot;bdata/netc.dll &amp;quot; из стандартного mtasa-blue buildactions/install_data.lua) Обратите внимание, что версия netc.dll ссылка выше будет регулярно обновляться, чтобы предоставить форкам все улучшения AC, также представленные в официальном MTA. Поэтому рекомендуется регулярно получать обновления для вашего форка для обеспечения оптимальной безопасности и надежности Антчита для форков&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Замените netc.dll в вашем проекте с вышеуказанной &amp;quot;поддержкой форков&amp;quot; полный AЧ netc. - Убедитесь, что эта версия.тип сборки h установлен на НЕСТАБИЛЬНЫЙ, в соответствии с рекомендациями для форков&amp;quot;массовое потребление&amp;quot; в комментариях: Shared/sdk/version.h. Если это не так, вы сведете на нет все усилия по получению полной защиты от переменного тока.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Убедитесь, что вы обновили кодовую базу вашего форка до активной основной версии (для которой netc.dll ) основная фиксация mtasa-blue, по крайней мере, версия &amp;quot;По умолчанию&amp;quot;, указанная в [1] как &amp;quot;Автоматическое обновление по умолчанию&amp;quot; для последней основной версии, затем сопоставление указанной ревизии с фиксацией Хэш SHA1 с помощью этого инструмента: https://buildinfo.mtasa.com/index.php - это означает, что не следует использовать тег выпуска основной версии на github, потому что MTA использует модель &amp;quot;MTA как услуга&amp;quot;, когда игроки получают регулярные обновления, содержащие все основные изменения для оптимального качества и использования новых функций. Последний netc.dll выпуски основаны на этом и могут потребовать присутствия основных изменений.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Столкнитесь с некоторыми изменениями в вашем клиенте, здесь начинается этап проб и ошибок. Теперь используйте предыдущие части этого руководства, чтобы либо отключить типы обнаружения переменного тока с помощью disableac в mtaserver.conf, либо, что еще лучше, потратьте больше времени на их правильное исправление и очистку ваших пользовательских реализаций, как советовалось ранее, чтобы сохранить как можно больше % защиты от переменного тока. Мы советуем не опускаться ниже 85% (как в примере с кодами 'disableac': 5, 6, 21 упоминалось как относительно 85%, и это то, что требуется большинству российских мод-тяжелых форков для немедленного запуска и предоставления вам возможности подключиться)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Заключительные слова: всегда будет лучше не быть форком в первую очередь. Чтобы использовать официальный клиент MTA и просто создать сервер, в конечном итоге с пользовательским лаунчером, который подключается непосредственно к вашему массиву серверов. Чтобы просто внести все настройки, которые вам понадобятся (причина для того, чтобы вместо этого стать форком) &amp;quot;вверх по течению&amp;quot;, что означает в PR, запрос на извлечение, в официальный репозиторий MTA по адресу https://github.com/multitheftauto/mtasa-blue таким образом, все выигрывают, и вы соблюдаете лицензию и не сталкиваетесь с препятствиями, включая AC и приток новых игроков, из быть вилкой. MTA обычно имеет 30 000 игроков онлайн одновременно, что также является огромным притоком новых игроков для знакомства с вашим сообществом. Лучше просто не быть форком, но если вам действительно нужно, эта страница является нашей активной поддержкой форков, чтобы получить лучшую степень защиты от обмана (AЧ).&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks&amp;diff=75724</id>
		<title>Forks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks&amp;diff=75724"/>
		<updated>2022-12-12T08:38:19Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
Multi Theft Auto is open-source software, freely available on [https://github.com/multitheftauto/mtasa-blue GitHub multitheftauto/mtasa-blue].&lt;br /&gt;
Anyone is free to fork the project as long as they abide by the terms of our license, The GNU General Public License v3.&lt;br /&gt;
&lt;br /&gt;
You can find explanations of the GNU GPL v3 here: [https://choosealicense.com/licenses/gpl-3.0/ choosealicense.com] and [https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3) tldrlegal.com]. Our [https://github.com/multitheftauto/mtasa-blue/blob/master/LICENSE license] takes precedence, but this generally means that you must:&lt;br /&gt;
&lt;br /&gt;
* state significant changes made to the software&lt;br /&gt;
* disclose the source code &lt;br /&gt;
* share your code under the same license&lt;br /&gt;
* include the original copyright notice&lt;br /&gt;
&lt;br /&gt;
If you are working on a fork, we ask that you include a link to your homepage and where we can find the source code. This allows us to keep up to date on projects and even introduce improvements to the vast majority of MTA players. Adding your Discord name is not compulsory, but if you ask for development help on our GitHub, forum or Discord, it helps us know what project you are from and that you are abiding by the license.&lt;br /&gt;
&lt;br /&gt;
== Forks and anti-cheat==&lt;br /&gt;
&lt;br /&gt;
(from https://wiki.multitheftauto.com/wiki/Anti-cheat_support_for_custom_builds)&lt;br /&gt;
&lt;br /&gt;
=== '''// UPDATE (December 2022)''' ===&lt;br /&gt;
You can now leverage &amp;quot;full Anticheat for forks&amp;quot; as well. For more information, visit this article: '''[[Forks Full AC]]'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. But otherwise&lt;br /&gt;
&lt;br /&gt;
Custom MTA builds and forked projects will face some challenges relating to anti-cheat (AC). Due to the fact that many forks and custom builds perform in ways that the anti-cheat module does not expect, we were forced to remove plenty of advanced detections and protections from the anti-cheat, in order to create and provide a separate module (the one from https://mirror.mtasa.com/bdata/netc.dll) that, simply put, is a much weaker anti-cheat than the 'real' MTA has. So, unless you take measures of your own, your forked project can (and will) easily become infested with cheaters. This can be sidestepped with [[Forks Full AC]] (click for article). But in the standard scenario, reading the below information helps.&lt;br /&gt;
&lt;br /&gt;
The anti-cheat and netcode components (netc.dll, net.dll, FairplayKD.sys) are, unlike MTA itself, closed-source, and therefore without informing yourself it would be hard to overcome the challenges.&lt;br /&gt;
&lt;br /&gt;
AC is generally unsupported for forked projects and may be dropped entirely in the future. This means that you generally ''cannot'' rely on the MTA anti-cheat for your fork. '''We strongly advise that you write and implement your own AC.'''&lt;br /&gt;
&lt;br /&gt;
If you cannot write your own AC, here are steps you can follow to get the most out of our (unsupported) AC:&lt;br /&gt;
&lt;br /&gt;
* Always use the version of our net modules (e.g [https://mirror.mtasa.com/bdata/netc.dll netc.dll] and [https://mirror.mtasa.com/bdata/net.dll net.dll]) that matches our commit on master that your fork is based on&lt;br /&gt;
** To be specific, you can use the latest module that is bitstream version compatible&lt;br /&gt;
** You can fetch these modules by running https://github.com/multitheftauto/mtasa-blue/blob/master/win-build.bat&lt;br /&gt;
* Never block any MTA traffic (client and server communicates with official MTAHQ servers) in your project&lt;br /&gt;
'''* Make sure to use 'unstable' build type and not 'custom', or else the 15% AC features for &amp;quot;bdata forks netc&amp;quot; goes down to 1%. See build type documentation at [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h mtasa-blue/Shared/sdk/version.h] for details and proper configuration'''&lt;br /&gt;
&lt;br /&gt;
=== AC features missing in custom builds === &lt;br /&gt;
* No detection of changes to gta_sa code section&lt;br /&gt;
* No detection of changes to certain gta_sa variables&lt;br /&gt;
* No detection against memory modification&lt;br /&gt;
* No detection against various Lua injection methods&lt;br /&gt;
* SetElementData not protected against external changes by hacks&lt;br /&gt;
* Much fewer AC heuristics and protection of internals&lt;br /&gt;
* Continuous updates for all patched methods and vulnerabilities to write cheats based on aren't guaranteed (occasionally, they are cherry-picked; one of the reasons why updating netc.dll to the latest offered version is beneficial). This is the biggest (and most important) part of the original anti-cheat.&lt;br /&gt;
* MTA modules aren't checked for modifications or remote hooking/manipulation&lt;br /&gt;
* and much more&lt;br /&gt;
&lt;br /&gt;
Generally, most of what will work are some signature-based detections. No heuristics, patched methods, and patched vulnerabilities. Signature-based detections are the weakest kind, and the mainstream anti-cheat tackles the actual problem rather than being signature-based. Note that certain forks (e.g the russian &amp;quot;MTA Province&amp;quot;) have even less MTA anti-cheat support, so not even the minimal amount that most other forks enjoy. This is due to fork developers having the ability to completely block or break client &amp;gt; MTAHQ communication traffic (something we heavily rely on to help forks counteract cheating, as most regular AC features and protections aren't available), or do and change other things that from a technical perspective will cause AC features not to work as intended or fail immediately. If you don't want your fork to even become cheater-infested as much as &amp;quot;MTA Province&amp;quot; and how they call it, &amp;quot;their clones&amp;quot; (of Province).. in addition to having set buildtype to &amp;quot;custom&amp;quot; whereas it should be &amp;quot;unstable&amp;quot;. Then now you hopefully know what to watch out for as fork developer. Also, it would be nice if this message reaches the developers of cheater-heavy forks like Province.&lt;br /&gt;
&lt;br /&gt;
Additionally, MTA anti-cheat team does some additional, manual work to break up cheating on forks, e.g by causing occasional banwaves of known forks cheats using way too simple detection methods, on a best effort basis (without any guarantees). It is only meant as a courtesy from MTA, done when we feel like it, or maybe when you reach out to us.. and you cannot rely on it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The aforementioned banwaves are known to result in bans with reasons that look similar to, and are known by cheaters as, &amp;quot;BAN: RPBOX / NEXTRP / PROVINCE CHEAT&amp;quot; (depending on the names of forks affected by a certain cheat) so please do not refer these users to MTA for ban appeals either.&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks&amp;diff=75723</id>
		<title>Forks</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks&amp;diff=75723"/>
		<updated>2022-12-12T08:36:43Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: added reference to &amp;quot;Forks Full AC&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
&lt;br /&gt;
Multi Theft Auto is open-source software, freely available on [https://github.com/multitheftauto/mtasa-blue GitHub multitheftauto/mtasa-blue].&lt;br /&gt;
Anyone is free to fork the project as long as they abide by the terms of our license, The GNU General Public License v3.&lt;br /&gt;
&lt;br /&gt;
You can find explanations of the GNU GPL v3 here: [https://choosealicense.com/licenses/gpl-3.0/ choosealicense.com] and [https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3) tldrlegal.com]. Our [https://github.com/multitheftauto/mtasa-blue/blob/master/LICENSE license] takes precedence, but this generally means that you must:&lt;br /&gt;
&lt;br /&gt;
* state significant changes made to the software&lt;br /&gt;
* disclose the source code &lt;br /&gt;
* share your code under the same license&lt;br /&gt;
* include the original copyright notice&lt;br /&gt;
&lt;br /&gt;
If you are working on a fork, we ask that you include a link to your homepage and where we can find the source code. This allows us to keep up to date on projects and even introduce improvements to the vast majority of MTA players. Adding your Discord name is not compulsory, but if you ask for development help on our GitHub, forum or Discord, it helps us know what project you are from and that you are abiding by the license.&lt;br /&gt;
&lt;br /&gt;
== Forks and anti-cheat==&lt;br /&gt;
&lt;br /&gt;
(from https://wiki.multitheftauto.com/wiki/Anti-cheat_support_for_custom_builds)&lt;br /&gt;
&lt;br /&gt;
=== '''// UPDATE (December 2022)''' ===&lt;br /&gt;
You can now leverage &amp;quot;full Anticheat for forks&amp;quot; as well. For more information, visit this article: '''[[Forks Full AC]]'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. But otherwise&lt;br /&gt;
&lt;br /&gt;
Custom MTA builds and forked projects will face some challenges relating to anti-cheat (AC). Due to the fact that many forks and custom builds perform in ways that the anti-cheat module does not expect, we were forced to remove plenty of advanced detections and protections from the anti-cheat, in order to create and provide a separate module (the one from https://mirror.mtasa.com/bdata/netc.dll) that, simply put, is a much weaker anti-cheat than the 'real' MTA has. So, unless you take measures of your own, your forked project can (and will) easily become infested with cheaters. Therefore reading the below information can help.&lt;br /&gt;
&lt;br /&gt;
The anti-cheat and netcode components (netc.dll, net.dll, FairplayKD.sys) are, unlike MTA itself, closed-source, and therefore without informing yourself it would be hard to overcome the challenges.&lt;br /&gt;
&lt;br /&gt;
AC is generally unsupported for forked projects and may be dropped entirely in the future. This means that you generally ''cannot'' rely on the MTA anti-cheat for your fork. '''We strongly advise that you write and implement your own AC.'''&lt;br /&gt;
&lt;br /&gt;
If you cannot write your own AC, here are steps you can follow to get the most out of our (unsupported) AC:&lt;br /&gt;
&lt;br /&gt;
* Always use the version of our net modules (e.g [https://mirror.mtasa.com/bdata/netc.dll netc.dll] and [https://mirror.mtasa.com/bdata/net.dll net.dll]) that matches our commit on master that your fork is based on&lt;br /&gt;
** To be specific, you can use the latest module that is bitstream version compatible&lt;br /&gt;
** You can fetch these modules by running https://github.com/multitheftauto/mtasa-blue/blob/master/win-build.bat&lt;br /&gt;
* Never block any MTA traffic (client and server communicates with official MTAHQ servers) in your project&lt;br /&gt;
'''* Make sure to use 'unstable' build type and not 'custom', or else the 15% AC features for &amp;quot;bdata forks netc&amp;quot; goes down to 1%. See build type documentation at [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h mtasa-blue/Shared/sdk/version.h] for details and proper configuration'''&lt;br /&gt;
&lt;br /&gt;
=== AC features missing in custom builds === &lt;br /&gt;
* No detection of changes to gta_sa code section&lt;br /&gt;
* No detection of changes to certain gta_sa variables&lt;br /&gt;
* No detection against memory modification&lt;br /&gt;
* No detection against various Lua injection methods&lt;br /&gt;
* SetElementData not protected against external changes by hacks&lt;br /&gt;
* Much fewer AC heuristics and protection of internals&lt;br /&gt;
* Continuous updates for all patched methods and vulnerabilities to write cheats based on aren't guaranteed (occasionally, they are cherry-picked; one of the reasons why updating netc.dll to the latest offered version is beneficial). This is the biggest (and most important) part of the original anti-cheat.&lt;br /&gt;
* MTA modules aren't checked for modifications or remote hooking/manipulation&lt;br /&gt;
* and much more&lt;br /&gt;
&lt;br /&gt;
Generally, most of what will work are some signature-based detections. No heuristics, patched methods, and patched vulnerabilities. Signature-based detections are the weakest kind, and the mainstream anti-cheat tackles the actual problem rather than being signature-based. Note that certain forks (e.g the russian &amp;quot;MTA Province&amp;quot;) have even less MTA anti-cheat support, so not even the minimal amount that most other forks enjoy. This is due to fork developers having the ability to completely block or break client &amp;gt; MTAHQ communication traffic (something we heavily rely on to help forks counteract cheating, as most regular AC features and protections aren't available), or do and change other things that from a technical perspective will cause AC features not to work as intended or fail immediately. If you don't want your fork to even become cheater-infested as much as &amp;quot;MTA Province&amp;quot; and how they call it, &amp;quot;their clones&amp;quot; (of Province).. in addition to having set buildtype to &amp;quot;custom&amp;quot; whereas it should be &amp;quot;unstable&amp;quot;. Then now you hopefully know what to watch out for as fork developer. Also, it would be nice if this message reaches the developers of cheater-heavy forks like Province.&lt;br /&gt;
&lt;br /&gt;
Additionally, MTA anti-cheat team does some additional, manual work to break up cheating on forks, e.g by causing occasional banwaves of known forks cheats using way too simple detection methods, on a best effort basis (without any guarantees). It is only meant as a courtesy from MTA, done when we feel like it, or maybe when you reach out to us.. and you cannot rely on it.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The aforementioned banwaves are known to result in bans with reasons that look similar to, and are known by cheaters as, &amp;quot;BAN: RPBOX / NEXTRP / PROVINCE CHEAT&amp;quot; (depending on the names of forks affected by a certain cheat) so please do not refer these users to MTA for ban appeals either.&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75722</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75722"/>
		<updated>2022-12-12T08:07:10Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Protected &amp;quot;Forks Full AC&amp;quot;: only AC &amp;amp; MTA team are authorized to supply this information ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
__NOTOC__ {{Note|This is an early version of this page, to be further improved/rewritten}}&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75721</id>
		<title>Forks Full AC</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Forks_Full_AC&amp;diff=75721"/>
		<updated>2022-12-12T08:02:31Z</updated>

		<summary type="html">&lt;p&gt;Dutchman101: Added page: &amp;quot;forks full AC&amp;quot; netc.dll version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ {{Note|Information on this page does not apply to the official builds of MTA.}}&lt;br /&gt;
__NOTOC__ {{Note|This is an early version of this page, to be further improved/rewritten}}&lt;br /&gt;
&lt;br /&gt;
MTA forks that don't suffice to use &amp;quot;forks regular netc&amp;quot; (from bdata/netc.dll) as described in the [[Forks]] wiki page, due to it only offering a very limited AC (Anti-Cheat) protection, can explore the possibilities for using a new flavour of netc: &amp;quot;forks full AC&amp;quot;. This however, comes with its own limitations pertaining to the nature of your forked project and implementations, matters that aren't easy to explain, but this page strives to do it as accurately as possible.&lt;br /&gt;
&lt;br /&gt;
''This operation will turn your fork into a project with a &amp;quot;proper, method patching-based AC&amp;quot; as official MTA is described to have at the spoiler in this topic: https://forum.multitheftauto.com/topic/66858-bounty-for-finding-security-flaws-and-working-cheats-in-mta/ rather than at most 15% 'signature based' AC per the [[Forks]] wiki page's description of regular forks AC/netc.''&lt;br /&gt;
&lt;br /&gt;
Basic idea:&lt;br /&gt;
* &amp;quot;forks full AC&amp;quot; netc module starts off providing 95% of AC features found in official MTA (multitheftauto.com &amp;gt; &amp;quot;Download&amp;quot; button) builds&lt;br /&gt;
* The more incompatible features/implementations (custom changes) your forked project has, which '''you''' may opt to 'silence' (by adding them to a detection # whitelist: '''disableac''' array in '''mtaserver.conf''' as documented in [https://wiki.multitheftauto.com/wiki/Anti-cheat_guide#%3Cdisableac%3E%3C/disableac%3E Anti-cheat guide: DISABLEAC]), the lower said protection number in percentage will become.&lt;br /&gt;
** '''For example''', if you have to disable 3 different detection types (let's say for russian forks, given external mod loading outside of MTA API/limit adjusters the most common ones are: 5, 6, 21) you would get a 85% of AC protection left. Although this number is relative, as it provides opportunities for cheat developers to use exactly the 'stripped' detection categories for making their hack work, like these 3 codes would already provide some specific avenues for writing to GTA memory.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Can you spot in which direction this is going? Later in this article a link to &amp;quot;forks full AC&amp;quot; will appear, and what you'll do with it is trial and error. Trying to integrate full AC support into your fork is a matter of &amp;quot;We can try, and if it ends up working, it's nice to have.. if we have to disable some detections, a protection percentage of anything higher than regular forks AC: 15% is already a huge gain..&amp;quot; and highly on a best effort basis. Because the reason we separated forks netc (from bdata/netc.dll) to one that lacks most AC features can be clear to any skilled developer: netc module (the AC) isn't designed to expect all types of customisations that a fork developer may add to their codebase, it was in the spirit of providing maximum freedom and flexibility. Especially as a lot of forks don't have the best developers, not knowing why they are better off following MTA (mtasa-blue) coding guidelines, project structure, and matching their custom inplementations as closely to how an MTA contributor that passes code review, would typically do it. So this is where 'clean' changes are separated from 'dirty modding', which is also often seen in Russian forks '''that use one or more of the following approaches to their project's codebase:&lt;br /&gt;
'''&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implementation of GTA SA modding projects in an external 'dirty' way, like limit adjuster (fastman92 etc)&lt;br /&gt;
* Raw loading of GTA SA modded data &amp;amp; .IMG files, through distribution of pre-modded GTA install folders to fork client players. Thereby completely ignoring the MTA API for replacing models and various game processes&lt;br /&gt;
* Miscellaneous dirty patches, in the broad sense of what is described in the paragraph above this. Also includes not following MTA &amp;quot;Raw memory access&amp;quot; guidelines found here: https://github.com/multitheftauto/mtasa-blue/wiki/Dev-Tips which is a significant risk factor to scenario's not expected by netc.dll (the AC), as if it protects against memory modifications by knowing the origin, and you just put a dirty 'writeProcessMemory' or memcpy in a random .cpp file, it will cause a violation. This isn't all that's to it and a bad example, but just so you get the basic idea of why incompatibilities exist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting the most out of AC protection % ===&lt;br /&gt;
&lt;br /&gt;
After understanding the above, and also our best-effort basis as such usage as a &amp;quot;full AC&amp;quot; for forks was never our intention and how it would be hard to support everyone's custom modification, you can figure that we cannot help you to investigate what is incompatible right after you start testing &amp;quot;full AC&amp;quot; netc in your fork. Therefore it is up to you to either disable as many detections as required (if you cannot fix them - where the 'cannot' is an indicator of lack of engineering oversight) or better yet, come up with fixes that allow you to avoid disabling too many, or any, detection types, thereby maximizing your potential AC features %.&lt;br /&gt;
&lt;br /&gt;
This means that without MTA team's support, you are to figure out which customisations/integrations/not following MTA APIs/example problems as described earlier in this article.. are the culprit for each specific detection type that sends you AC kicks after putting &amp;quot;full AC&amp;quot; netc into your fork for testing purposes. We advise you clean up your integrations to avoid having to do a lot of manual digging/speculating on the culprit. For that, take care of entries from the bulleted list from the earlier paragraph. If a direct culprit was found however, on our best effort basis, you should without any guidance by MTA, come up with alternative (cleaner, more following MTA coding guidelines, APIs and project structure.. hence less likely incompatible with full AC and what it expects) implementations of the problematic customisation found in your fork's codebase. You can see where being able to use 'full AC for forks' becomes a favour rather than a given fact, especially with the state of codebase that a lot of forks, without starting their development in a 'full AC' scenario, have grown into by just writing what works for them without considering such aspects. The big picture of why we wouldn't support re-engineering process should now be clear. If you cannot deal with it, either get someone with a lot of engineering (CS) experience, or disable more AC detection types, and settle for anything that's higher than the 15% regular forks netc, better something than nothing. '''But we will pertinently not be able to lend a hand.''' Any misunderstanding of these concepts indicates a lack of developer completeness (individual skills, room to grow) and cannot be reflected upon the MTA devs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Let's get to the point''' =&lt;br /&gt;
&lt;br /&gt;
If you think that you understand all concepts described in this article, you can begin to implement &amp;quot;full AC for forks&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
'''DOWNLOAD: https://mirror-cdn.multitheftauto.com/bdata/fork-support/netc.dll''' (so ''instead'' of using &amp;quot;bdata/netc.dll&amp;quot; from default mtasa-blue buildactions/install_data.lua)&lt;br /&gt;
Note that the version of netc.dll at the above link will be regularly updated to provide forks with all AC improvements delivered in official MTA as well. So it's recommended to fetch updates to your fork for optimal security &amp;amp; AC strength, on a regular basis&lt;br /&gt;
&lt;br /&gt;
- Replace netc.dll in your forked project with the above &amp;quot;forks-support&amp;quot; full AC netc.&lt;br /&gt;
- Make sure that version.h build type is set to UNSTABLE, as per the forks &amp;quot;mass consumption&amp;quot; recommendations in its comments: [https://github.com/multitheftauto/mtasa-blue/blob/master/Shared/sdk/version.h Shared/sdk/version.h]. If not the case, you will nullify the entire effort of getting full AC protection.&lt;br /&gt;
&lt;br /&gt;
- Make sure that you upgraded the codebase of your fork to the active major version's (for which netc.dll) '''master''' commit of mtasa-blue, at least the &amp;quot;Default&amp;quot; version listed at [https://nightly.mtasa.com/ver/] as &amp;quot;Auto-update default&amp;quot; for the latest major version, then matching said revision to commit SHA1 hash with this tool: https://buildinfo.mtasa.com/index.php - this means not to use the github release tag of a major version, because MTA is using &amp;quot;MTA-as-a-service&amp;quot; model, where players receive regular updates that contain all master changes for optimal quality and experience of new features. Latest netc.dll releases are based on this and may require master changes to be present.&lt;br /&gt;
&lt;br /&gt;
- Face some AC kicks in your forked client, the trial and error stage begins here. Now use the earlier parts of this guide to either disable AC detection types by disableac in mtaserver.conf, or better yet, spend more development manpower on properly fixing them &amp;amp; cleaning up your custom implementations, as advised earlier as well, to keep as much AC protection % as possible. We advise not going below 85% (as in the example of 'disableac' codes: 5, 6, 21 was mentioned to be relatively 85% and what most russian, mod-heavy forks would require to immediately run and let you connect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Closing words: it will always be better to not be a fork in the first place. To use the official MTA client and simply create a server, eventually with a custom launcher that connects straight to your array of servers. To just contribute all customisations that you'll need (reason for becoming a fork instead) &amp;quot;upstream&amp;quot;, which means in a PR, Pull request, to the official MTA repository at https://github.com/multitheftauto/mtasa-blue so everyone benefits and you honour the license &amp;amp; not deal with the roadblocks, AC and new player influx included, of being a fork. MTA usually has 30,000 players online at the same time, which is also a huge pool of new player influx to discover your community. Better just don't be a fork, but if you really need to, this page is our active outreach towards forks to get a better degree of Anti-Cheat (AC) protection.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We created this &amp;quot;full AC for forks&amp;quot; flavour of netc.dll in November/December 2022, and trialed the practical results and some specific patches to it for better support, with 2 of the biggest Russian MTA forks, both of which are preparing to release an update incorporating this in the coming few months. We also did an outreach to smaller fork developers that however chose to abuse it (and with that our trust) by immediately becoming toxic and trying to sell the &amp;quot;full AC&amp;quot; netc module we gave them, prompting this wiki article to be written and published in a hurry. Not nice, and please don't fall for any offers from said circle of toxic fork developers trying to sell you such an &amp;quot;full AC&amp;quot; netc, when you can get a newer version from the official source, from us in this article. The work on this article has in the context of said incident, been discussed in MTA development discord (invite: https://discord.gg/GNN6PRtTnu) at this post: https://discord.com/channels/801330706252038164/801330706252038170/1044757943071023155 and its equivalent in the main, official MTA discord (invite: https://discord.gg/mtasa) at this post: https://discord.com/channels/278474088903606273/278521065435824128/1044758439357849661&lt;/div&gt;</summary>
		<author><name>Dutchman101</name></author>
	</entry>
</feed>