<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.rage.mp/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NoBrain</id>
	<title>RAGE Multiplayer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rage.mp/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NoBrain"/>
	<link rel="alternate" type="text/html" href="https://wiki.rage.mp/wiki/Special:Contributions/NoBrain"/>
	<updated>2026-06-24T12:30:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Events::callRemoteProc&amp;diff=20157</id>
		<title>Events::callRemoteProc</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Events::callRemoteProc&amp;diff=20157"/>
		<updated>2020-12-06T09:19:36Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This function calls a previously registered event on the server using [[Events::addProc|mp.events.addProc(String eventName [, ...args])]].&lt;br /&gt;
&lt;br /&gt;
Эта функция вызывает ранее зарегистрированное событие на сервере с помощью [[Events::addProc|mp.events.addProc(String eventName [, ...args])]].&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.callRemoteProc(String eventName [, ...args])&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Example== &lt;br /&gt;
In this example, we will send an RPC request from the client to the server in which we will transmit the number 1. We will wait for the response and process it.&lt;br /&gt;
On the server, if number is 1, return true, otherwise false.&lt;br /&gt;
P.S. Note that await can only be used in an async function.&lt;br /&gt;
&lt;br /&gt;
В данном примере мы отправим RPC запрос с клиента на сервер в котором передадим число 1. Дождёмся ответа и обработаем его.&lt;br /&gt;
На сервере, если number равен 1 вернём true, в остальных случаях false.&lt;br /&gt;
P.S. Обратите внимание, что использовать await можно лишь в async функции.&lt;br /&gt;
&lt;br /&gt;
{{ClientsideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const number = 1;&lt;br /&gt;
const response = await mp.events.callRemoteProc(&amp;quot;testEvent&amp;quot;, number);&lt;br /&gt;
if (response.result === true) mp.console.logInfo(&amp;quot;Result is true&amp;quot;, true, true);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ServersideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//player object is always the first param and it&#039;s the player who requested this RPC&lt;br /&gt;
mp.events.addProc(&amp;quot;testEvent&amp;quot;, (player, number) =&amp;gt; {&lt;br /&gt;
    return {&lt;br /&gt;
        result: number === 1 ? true : false&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Event_functions}}&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20147</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20147"/>
		<updated>2020-12-02T19:43:17Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable AFK Cam&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
    mp.game.invoke(&amp;quot;0xF4F2C0D4EE209E20&amp;quot;); //Invalidate Camera 0xF4F2C0D4EE209E20&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bind and manage player crouch to ctrl button&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var CommonActions_Crouched = false;&lt;br /&gt;
mp.keys.bind(0xA2, true, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    if(CommonActions_Crouched)&lt;br /&gt;
    {&lt;br /&gt;
        ResetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = false;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        SetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetPlayerCrouch() {&lt;br /&gt;
    if (!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) &lt;br /&gt;
    {&lt;br /&gt;
        mp.game.streaming.requestClipSet(&#039;move_ped_crouched&#039;);&lt;br /&gt;
        while(!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) mp.game.wait(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mp.players.local.setMovementClipset(&#039;move_ped_crouched&#039;, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ResetPlayerCrouch()&lt;br /&gt;
{&lt;br /&gt;
    mp.players.local.resetMovementClipset(0.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Custom Wait function&#039;&#039;&#039;&lt;br /&gt;
useful when you are using shared data and you start using it on player join where the data might not have been synced yet (wait for it to become defined)&lt;br /&gt;
usable in async function use with await&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const GameWait = (variable) =&amp;gt; {&lt;br /&gt;
    &lt;br /&gt;
    return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;
        var interval = setInterval(() =&amp;gt; {&lt;br /&gt;
            if(variable != undefined)&lt;br /&gt;
            {&lt;br /&gt;
                clearInterval(interval);&lt;br /&gt;
                resolve(variable)&lt;br /&gt;
            }&lt;br /&gt;
        }, 10);&lt;br /&gt;
    })&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable street names/car classname etc&#039;&#039;&#039;&lt;br /&gt;
Must be called inside render&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(6); // car name&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(8); // car class&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(7); // area name &lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(9); // street name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20146</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20146"/>
		<updated>2020-12-02T19:42:56Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable AFK Cam&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
    mp.game.invoke(&amp;quot;0xF4F2C0D4EE209E20&amp;quot;); //Invalidate Camera 0xF4F2C0D4EE209E20&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bind and manage player crouch to ctrl button&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var CommonActions_Crouched = false;&lt;br /&gt;
mp.keys.bind(0xA2, true, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    if(CommonActions_Crouched)&lt;br /&gt;
    {&lt;br /&gt;
        ResetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = false;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        SetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetPlayerCrouch() {&lt;br /&gt;
    if (!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) &lt;br /&gt;
    {&lt;br /&gt;
        mp.game.streaming.requestClipSet(&#039;move_ped_crouched&#039;);&lt;br /&gt;
        while(!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) mp.game.wait(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mp.players.local.setMovementClipset(&#039;move_ped_crouched&#039;, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ResetPlayerCrouch()&lt;br /&gt;
{&lt;br /&gt;
    mp.players.local.resetMovementClipset(0.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Custom Wait function&#039;&#039;&#039;&lt;br /&gt;
useful when you are using shared data and you start using it on player join where the data might not have been synced yet (wait for it to become defined)&lt;br /&gt;
usable in async function use with await&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const GameWait = (variable) =&amp;gt; {&lt;br /&gt;
    &lt;br /&gt;
    return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;
        var interval = setInterval(() =&amp;gt; {&lt;br /&gt;
            if(variable != undefined)&lt;br /&gt;
            {&lt;br /&gt;
                clearInterval(interval);&lt;br /&gt;
                resolve(variable)&lt;br /&gt;
            }&lt;br /&gt;
        }, 10);&lt;br /&gt;
    })&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable street names/car classname etc&#039;&#039;&#039;&lt;br /&gt;
Must be called inside render&lt;br /&gt;
usable in async function use with await&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(6); // car name&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(8); // car class&lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(7); // area name &lt;br /&gt;
mp.game.ui.hideHudComponentThisFrame(9); // street name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20144</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20144"/>
		<updated>2020-12-01T10:45:42Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable AFK Cam&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
    mp.game.invoke(&amp;quot;0xF4F2C0D4EE209E20&amp;quot;); //Invalidate Camera 0xF4F2C0D4EE209E20&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bind and manage player crouch to ctrl button&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var CommonActions_Crouched = false;&lt;br /&gt;
mp.keys.bind(0xA2, true, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    if(CommonActions_Crouched)&lt;br /&gt;
    {&lt;br /&gt;
        ResetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = false;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        SetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetPlayerCrouch() {&lt;br /&gt;
    if (!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) &lt;br /&gt;
    {&lt;br /&gt;
        mp.game.streaming.requestClipSet(&#039;move_ped_crouched&#039;);&lt;br /&gt;
        while(!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) mp.game.wait(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mp.players.local.setMovementClipset(&#039;move_ped_crouched&#039;, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ResetPlayerCrouch()&lt;br /&gt;
{&lt;br /&gt;
    mp.players.local.resetMovementClipset(0.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Custom Wait function&#039;&#039;&#039;&lt;br /&gt;
useful when you are using shared data and you start using it on player join where the data might not have been synced yet (wait for it to become defined)&lt;br /&gt;
usable in async function use with await&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const GameWait = (variable) =&amp;gt; {&lt;br /&gt;
    &lt;br /&gt;
    return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;
        var interval = setInterval(() =&amp;gt; {&lt;br /&gt;
            if(variable != undefined)&lt;br /&gt;
            {&lt;br /&gt;
                clearInterval(interval);&lt;br /&gt;
                resolve(variable)&lt;br /&gt;
            }&lt;br /&gt;
        }, 10);&lt;br /&gt;
    })&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20143</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20143"/>
		<updated>2020-12-01T10:43:15Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable AFK Cam&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
    mp.game.invoke(&amp;quot;0xF4F2C0D4EE209E20&amp;quot;); //Invalidate Camera 0xF4F2C0D4EE209E20&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bind and manage player crouch to ctrl button&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var CommonActions_Crouched = false;&lt;br /&gt;
mp.keys.bind(0xA2, true, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    if(CommonActions_Crouched)&lt;br /&gt;
    {&lt;br /&gt;
        ResetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = false;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        SetPlayerCrouch();&lt;br /&gt;
        CommonActions_Crouched = true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function SetPlayerCrouch() {&lt;br /&gt;
    if (!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) &lt;br /&gt;
    {&lt;br /&gt;
        mp.game.streaming.requestClipSet(&#039;move_ped_crouched&#039;);&lt;br /&gt;
        while(!mp.game.streaming.hasClipSetLoaded(&#039;move_ped_crouched&#039;)) mp.game.wait(0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mp.players.local.setMovementClipset(&#039;move_ped_crouched&#039;, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ResetPlayerCrouch()&lt;br /&gt;
{&lt;br /&gt;
    mp.players.local.resetMovementClipset(0.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Player::setStealthMovement&amp;diff=20142</id>
		<title>Player::setStealthMovement</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Player::setStealthMovement&amp;diff=20142"/>
		<updated>2020-12-01T10:40:32Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This function will disable stealth movement ability (ustually ctrl button)&lt;br /&gt;
&lt;br /&gt;
p1 is usually 0 in the scripts. action is either 0 or a pointer to &#039;DEFAULT_ACTION&#039;.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;player.setStealthMovement(p1, action);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;p1:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;action:&#039;&#039;&#039; String&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Disable Stealth Movement&lt;br /&gt;
mp.players.local.setStealthMovement(false, &#039;0&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Player_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20141</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20141"/>
		<updated>2020-12-01T10:31:03Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disable AFK Cam&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
    mp.game.invoke(&amp;quot;0xF4F2C0D4EE209E20&amp;quot;); //Invalidate Camera 0xF4F2C0D4EE209E20&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20140</id>
		<title>Clientside JS Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Clientside_JS_Snippets&amp;diff=20140"/>
		<updated>2020-12-01T10:27:44Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Client-side Javascript - Helpful Code Snippets/Examples =&lt;br /&gt;
=== These should not be limited to one existing function. If they are, simply propose the edit on the function as an example ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotate Recentangle&#039;&#039;&#039;&lt;br /&gt;
The rotate rectangle allows you to get the Vehicle size and rotate it to get the correct X and Y from the Game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rotateRect(angle, ox, oy, x, y, w, h) {&lt;br /&gt;
        const xAx = Math.cos(angle);  // x axis x&lt;br /&gt;
        const xAy = Math.sin(angle);  // x axis y&lt;br /&gt;
        x -= ox;  // move rectangle onto origin&lt;br /&gt;
        y -= oy;&lt;br /&gt;
        return [[ // return array holding the resulting points&lt;br /&gt;
            x * xAx - y * xAy + ox,   // Get the top left rotated position&lt;br /&gt;
            x * xAy + y * xAx + oy,   // and move it back to the origin&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - y * xAy + ox,   // Get the top right rotated position&lt;br /&gt;
            (x + w) * xAy + y * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            (x + w) * xAx - (y + h) * xAy + ox,   // Get the bottom right rotated position&lt;br /&gt;
            (x + w) * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ], [&lt;br /&gt;
            x * xAx - (y + h) * xAy + ox,   // Get the bottom left rotated position&lt;br /&gt;
            x * xAy + (y + h) * xAx + oy,&lt;br /&gt;
        ]&lt;br /&gt;
        ];&lt;br /&gt;
    }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Get Vehicle Layout (Sizings and Location in Game)&#039;&#039;&#039;&lt;br /&gt;
This function allows you to get the full layout of the vehicle such as front, rear, roof. &lt;br /&gt;
&amp;lt;pre&amp;gt;vehicleLayout(Vehicle) {&lt;br /&gt;
        const sizeofVehicle = mp.game.gameplay.getModelDimensions(Vehicle.model);&lt;br /&gt;
        const vehicleRotation = Vehicle.getRotation(2);&lt;br /&gt;
        const Xwidth = (0 - sizeofVehicle.min.x) + (sizeofVehicle.max.x);&lt;br /&gt;
        const Ywidth = (0 - sizeofVehicle.min.y) + (sizeofVehicle.max.y);&lt;br /&gt;
        const degree = (vehicleRotation.z + 180) * Math.PI / 180;&lt;br /&gt;
        const newDegrees = this.rotateRect(degree, Vehicle.position.x, Vehicle.position.y, Vehicle.position.x - sizeofVehicle.max.x, Vehicle.position.y - sizeofVehicle.max.y, Xwidth, Ywidth);&lt;br /&gt;
        const frontX = newDegrees[0][0] + ((newDegrees[1][0] - newDegrees[0][0]) / 2);&lt;br /&gt;
        const frontY = newDegrees[0][1] + ((newDegrees[1][1] - newDegrees[0][1]) / 2);&lt;br /&gt;
        const bottomX = newDegrees[2][0] + ((newDegrees[3][0] - newDegrees[2][0]) / 2);&lt;br /&gt;
        const bottomY = newDegrees[2][1] + ((newDegrees[3][1] - newDegrees[2][1]) / 2);&lt;br /&gt;
        return {&lt;br /&gt;
            front: {x: frontX, y: frontY},&lt;br /&gt;
            back: {x: bottomX, y: bottomY},&lt;br /&gt;
            center: {x: Vehicle.position.x, y: Vehicle.position.y},&lt;br /&gt;
            size: {&lt;br /&gt;
                lengthX: Xwidth,&lt;br /&gt;
                lengthY: Ywidth,&lt;br /&gt;
                min: {x: sizeofVehicle.min.x, y: sizeofVehicle.min.y},&lt;br /&gt;
                max: {x: sizeofVehicle.max.x, y: sizeofVehicle.max.y},&lt;br /&gt;
                z: sizeofVehicle.min.z&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perform async loop in CEF&#039;&#039;&#039;&lt;br /&gt;
This function will allow you to process large arrays that you have and want to process them inside your html file which using normal ones will block your UI and crash your client&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @description perform an async loop in CEF for large arrays to prevent UI block and client crash&lt;br /&gt;
 * @param array Array you want to do loop on&lt;br /&gt;
 * @param callback callback containing (item, index, array)&lt;br /&gt;
 * @param end will be called when the async loop is finished&lt;br /&gt;
 */&lt;br /&gt;
const asyncLoop = (array, callback, end) =&amp;gt; {&lt;br /&gt;
  // Index which is going to be proccessed&lt;br /&gt;
  var index = 0;&lt;br /&gt;
  function doLoop() {&lt;br /&gt;
&lt;br /&gt;
      // Check if it&#039;s the end of the array&lt;br /&gt;
      if (index &amp;lt; array.length) &lt;br /&gt;
      {&lt;br /&gt;
          callback(array[index], index, array);&lt;br /&gt;
          ++index;&lt;br /&gt;
          // Do async wait for 1 ms&lt;br /&gt;
          setTimeout(doLoop, 1);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        // calls when the loop is finished&lt;br /&gt;
        end()&lt;br /&gt;
      }&lt;br /&gt;
  }    &lt;br /&gt;
  doLoop();    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Player::setMovementClipset&amp;diff=20049</id>
		<title>Player::setMovementClipset</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Player::setMovementClipset&amp;diff=20049"/>
		<updated>2020-10-09T20:16:59Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;p2 is usually 1.0f&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;EDIT 12/24/16: &amp;lt;br&amp;gt;p2 does absolutely nothing no matter what the value is. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;- sollaholla&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Edit: p2 is transition to the clipSet, 1.0 means 1 second (tested with crouch clipSet) - &#039;&#039;&#039;noBrain&#039;&#039;&#039;&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;player.setMovementClipset(clipSet, p2);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;clipSet:&#039;&#039;&#039; String&lt;br /&gt;
*&#039;&#039;&#039;p2:&#039;&#039;&#039; float&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Player_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Player::voiceVolume&amp;diff=20048</id>
		<title>Player::voiceVolume</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Player::voiceVolume&amp;diff=20048"/>
		<updated>2020-10-09T17:36:03Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: Created page with &amp;quot; After voice is unmuted, this function &amp;#039;&amp;#039;&amp;#039;sets&amp;#039;&amp;#039;&amp;#039; other player&amp;#039;s voice volume for the local player  * Volume is between &amp;#039;&amp;#039;&amp;#039; 0.0 - 1.0 &amp;#039;&amp;#039;&amp;#039;  ==Example== * Using this example we...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
After voice is unmuted, this function &#039;&#039;&#039;sets&#039;&#039;&#039; other player&#039;s voice volume for the local player&lt;br /&gt;
&lt;br /&gt;
* Volume is between &#039;&#039;&#039; 0.0 - 1.0 &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
* Using this example we set player volume based on their distant from the local player&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const local = mp.players.local;&lt;br /&gt;
mp.players.forEach(player =&amp;gt; {&lt;br /&gt;
    var PlayerDist = mp.game.gameplay.getDistanceBetweenCoords(local.position.x, local.position.y, local.position.z, player.position.x, player.position.y, player.position.z, true);&lt;br /&gt;
    if(PlayerDist &amp;lt; 0.5)&lt;br /&gt;
    {&lt;br /&gt;
        player.voiceVolume = 1.0;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        player.voiceVolume = 0.5;&lt;br /&gt;
    }&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Player::taskPlayAnim&amp;diff=20047</id>
		<title>Player::taskPlayAnim</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Player::taskPlayAnim&amp;diff=20047"/>
		<updated>2020-10-09T17:27:33Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
Plays an animation on the targetted ped.&lt;br /&gt;
&lt;br /&gt;
CLIENTSIDE: You must always preload the dictionary (use [https://wiki.rage.mp/index.php?title=Streaming::requestAnimDict Streaming::requestAnimDict] to preload an animation), serverside will have some loaded but not all.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[Animations|Animations Dictionary]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed&#039;&#039;&#039;:&lt;br /&gt;
*Normal speed is &lt;br /&gt;
&amp;lt;pre&amp;gt;8.0f&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speed Multiplier&#039;&#039;&#039;: Multiply the playback speed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Duration&#039;&#039;&#039;: &lt;br /&gt;
*-1 (Default)&lt;br /&gt;
* 0 (No Animation at all)&lt;br /&gt;
* Small value (Slows the animation)&lt;br /&gt;
* Other values (Freezes  the player till ms was passed) (No effect if flag is set to be controllable.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Animation Flags &#039;&#039;&#039;: &lt;br /&gt;
*NORMAL = 0,&lt;br /&gt;
*REPEAT = 1,&lt;br /&gt;
*STOP_LAST_FRAME = 2,&lt;br /&gt;
*UPPERBODY = 16,&lt;br /&gt;
*ENABLE_PLAYER_CONTROL = 32,&lt;br /&gt;
*CANCELABLE = 128,&lt;br /&gt;
&lt;br /&gt;
*Odd number : loop infinitely&lt;br /&gt;
*Even number : Freeze at last frame&lt;br /&gt;
*Multiple of 4: Freeze at last frame but controllable&lt;br /&gt;
*01 to 15 : Full body&lt;br /&gt;
*10 to 31 : Upper body&lt;br /&gt;
*32 to 47 : Full body &amp;gt; Controllable&lt;br /&gt;
*48 to 63 : Upper body &amp;gt; Controllable&lt;br /&gt;
*001 to 255 : Normal&lt;br /&gt;
*256 to 511 : Garbled&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
* You can sum flags together to works for example if you want an upper body controllable animation with last frame you just do 48+2 which is flag 50 (Correct me if i&#039;m wrong)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PlaybackRate&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*values are between 0.0 and 1.0&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;pre&amp;gt;player.taskPlayAnim(animDictionary, animationName, blendInSpeed, blendOutSpeed, duration, flag, playbackRate, lockX, lockY, lockZ);&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;animDictionary:&#039;&#039;&#039; String&lt;br /&gt;
*&#039;&#039;&#039;animationName:&#039;&#039;&#039; String&lt;br /&gt;
*&#039;&#039;&#039;blendInSpeed:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;blendOutSpeed:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;duration:&#039;&#039;&#039; int&lt;br /&gt;
*&#039;&#039;&#039;flag:&#039;&#039;&#039; int&lt;br /&gt;
*&#039;&#039;&#039;playbackRate:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;lockX:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;lockY:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;lockZ:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
The example below preloads an animation and applies it into the local player.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.game.streaming.requestAnimDict(&amp;quot;random@shop_robbery&amp;quot;);//preload the animation&lt;br /&gt;
mp.players.local.taskPlayAnim(&amp;quot;random@shop_robbery&amp;quot;, &amp;quot;robbery_action_f&amp;quot;, 8.0, 1.0, -1, 1, 1.0, false, false, false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*&#039;&#039;&#039;[[Animations|Animations Dictionary]]&#039;&#039;&#039;&lt;br /&gt;
{{Player_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Gui.takeScreenshot&amp;diff=20046</id>
		<title>Gui.takeScreenshot</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Gui.takeScreenshot&amp;diff=20046"/>
		<updated>2020-10-09T08:23:49Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: /* Screenshot to Base64 To Save */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Takes screenshot of game screen and puts at /screenshots/ip_port folder. Accessible in CEF via screenshots:// scheme. (Will be available in 0.4)&lt;br /&gt;
&lt;br /&gt;
Edit: You can also use &#039;&#039;&#039;http://screenshots/name.png&#039;&#039;&#039; as a fetcher for your screen shot in CEF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;gui.takeScreenshot(name, type, quality, compQuality);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;name:&#039;&#039;&#039; String&lt;br /&gt;
*&#039;&#039;&#039;type:&#039;&#039;&#039; Type of screenshot (0 - JPG, 1 - PNG, 2 - BMP)&lt;br /&gt;
*&#039;&#039;&#039;quality:&#039;&#039;&#039; Quality (0 - 100)&lt;br /&gt;
*&#039;&#039;&#039;compressionQuality:&#039;&#039;&#039; Compression quality (0 - 100)&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
mp.gui.takeScreenshot(&amp;quot;random.png&amp;quot;, 1, 100, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot to Base64==&lt;br /&gt;
Use this code in CEF to get your image as base64 code and transfer it to server-side to save for future usage&lt;br /&gt;
*&#039;&#039;&#039;URL must be http based format as i mentioned above&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function toDataUrl(url, callback) {&lt;br /&gt;
    &lt;br /&gt;
    var xhr = new XMLHttpRequest();&lt;br /&gt;
    xhr.onload = function() {&lt;br /&gt;
        var reader = new FileReader();&lt;br /&gt;
        reader.onloadend = function() {&lt;br /&gt;
            callback(reader.result);&lt;br /&gt;
        }&lt;br /&gt;
        reader.readAsDataURL(xhr.response);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    xhr.open(&#039;GET&#039;, url);&lt;br /&gt;
    xhr.responseType = &#039;blob&#039;;&lt;br /&gt;
    xhr.send();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Usage:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
toDataUrl(url, (dataURL) =&amp;gt; {&lt;br /&gt;
    alert(`DataURL IS: ${dataURL}`)&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Gui_definition_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Gui.takeScreenshot&amp;diff=20045</id>
		<title>Gui.takeScreenshot</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Gui.takeScreenshot&amp;diff=20045"/>
		<updated>2020-10-09T08:20:01Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Takes screenshot of game screen and puts at /screenshots/ip_port folder. Accessible in CEF via screenshots:// scheme. (Will be available in 0.4)&lt;br /&gt;
&lt;br /&gt;
Edit: You can also use &#039;&#039;&#039;http://screenshots/name.png&#039;&#039;&#039; as a fetcher for your screen shot in CEF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;gui.takeScreenshot(name, type, quality, compQuality);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;name:&#039;&#039;&#039; String&lt;br /&gt;
*&#039;&#039;&#039;type:&#039;&#039;&#039; Type of screenshot (0 - JPG, 1 - PNG, 2 - BMP)&lt;br /&gt;
*&#039;&#039;&#039;quality:&#039;&#039;&#039; Quality (0 - 100)&lt;br /&gt;
*&#039;&#039;&#039;compressionQuality:&#039;&#039;&#039; Compression quality (0 - 100)&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
mp.gui.takeScreenshot(&amp;quot;random.png&amp;quot;, 1, 100, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Screenshot to Base64 To Save==&lt;br /&gt;
Use this code in CEF to get your image as base64 code and transfer it to server-side to save for future usage&lt;br /&gt;
*&#039;&#039;&#039;URL must be http based format as i mentioned above&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function toDataUrl(url, callback) {&lt;br /&gt;
    &lt;br /&gt;
    var xhr = new XMLHttpRequest();&lt;br /&gt;
    xhr.onload = function() {&lt;br /&gt;
        var reader = new FileReader();&lt;br /&gt;
        reader.onloadend = function() {&lt;br /&gt;
            callback(reader.result);&lt;br /&gt;
        }&lt;br /&gt;
        reader.readAsDataURL(xhr.response);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    xhr.open(&#039;GET&#039;, url);&lt;br /&gt;
    xhr.responseType = &#039;blob&#039;;&lt;br /&gt;
    xhr.send();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Usage:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
toDataUrl(url, (dataURL) =&amp;gt; {&lt;br /&gt;
    alert(`DataURL IS: ${dataURL}`)&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Gui_definition_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::getModSlotName&amp;diff=19657</id>
		<title>Vehicle::getModSlotName</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::getModSlotName&amp;diff=19657"/>
		<updated>2020-05-30T11:29:36Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Returns the name for the type of vehicle mod(Armour, engine etc)&amp;lt;br&amp;gt;&lt;br /&gt;
Seems like it returns undefined for upgrades (noBrain)&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.getModSlotName(modType);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;modType:&#039;&#039;&#039; int&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::setGravity&amp;diff=19600</id>
		<title>Vehicle::setGravity</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::setGravity&amp;diff=19600"/>
		<updated>2020-05-17T14:27:11Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;if you set this to false the vehicle will no longer move and will not have any gravity (vehicles with parachute will no longer go up when the parachute is open)&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.setGravity(toggle);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;toggle:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::setGravity&amp;diff=19599</id>
		<title>Vehicle::setGravity</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::setGravity&amp;diff=19599"/>
		<updated>2020-05-17T14:26:56Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;if you set this to false the vehicle will no longer move and will be not have any gravity (vehicles with parachute will no longer go up when the parachute is open)&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.setGravity(toggle);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;toggle:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::setFixed&amp;diff=19598</id>
		<title>Vehicle::setFixed</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::setFixed&amp;diff=19598"/>
		<updated>2020-05-17T14:24:51Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Repairs the vehicle as it says (synced)&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.setFixed();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::setDoorBroken&amp;diff=19597</id>
		<title>Vehicle::setDoorBroken</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::setDoorBroken&amp;diff=19597"/>
		<updated>2020-05-17T14:23:17Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;doorIndex:&amp;lt;br&amp;gt;0 = Front Right Door&amp;lt;br&amp;gt;1 = Front Left Door&amp;lt;br&amp;gt;2 = Back Right Door&amp;lt;br&amp;gt;3 = Back Left Door&amp;lt;br&amp;gt;4 = Hood&amp;lt;br&amp;gt;5 = Trunk&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Changed last paramater from CreateDoorObject To NoDoorOnTheFloor because when on false, the door object is created,and not created when on true...the former parameter name was counter intuitive...(by Calderon)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Calderon is a moron.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; On 1.1 DP#1 the object will not be created for your self, it will be created for others though&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.setDoorBroken(doorIndex, createDoorObject);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;doorIndex:&#039;&#039;&#039; int&lt;br /&gt;
*&#039;&#039;&#039;createDoorObject:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::setDeformationFixed&amp;diff=19596</id>
		<title>Vehicle::setDeformationFixed</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::setDeformationFixed&amp;diff=19596"/>
		<updated>2020-05-17T14:21:38Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If the vehicle has been hit and it has some deformations this function does some smoothing on vehicle&#039;s body&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.setDeformationFixed();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Vehicle::removeWindow&amp;diff=19595</id>
		<title>Vehicle::removeWindow</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Vehicle::removeWindow&amp;diff=19595"/>
		<updated>2020-05-17T14:17:45Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;windowIndex:&amp;lt;br&amp;gt;0 = Front Right Window&amp;lt;br&amp;gt;1 = Front Left Window&amp;lt;br&amp;gt;2 = Back Right Window&amp;lt;br&amp;gt;3 = Back Left Window&amp;lt;br&amp;gt;-1 = Front Glass&amp;lt;br&amp;gt;7 = Behind Glass&amp;lt;br&amp;gt; the missing ones might be sun roof glass or other types of glassess, tried in a regular 4 door vehicle&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;vehicle.removeWindow(windowIndex);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;windowIndex:&#039;&#039;&#039; int&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Vehicle_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Entity::setCoords&amp;diff=19594</id>
		<title>Entity::setCoords</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Entity::setCoords&amp;diff=19594"/>
		<updated>2020-05-17T14:13:50Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;p7 is always 1 in the scripts. Set to 1, an area around the destination coords for the moved entity is cleared from other entities. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;Often ends with 1, 0, 0, 1); in the scripts. It works. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Axis - Invert Axis Flags&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;entity.setCoords(xPos, yPos, zPos, xAxis, yAxis, zAxis, clearArea);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;xPos:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;yPos:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;zPos:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;xAxis:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;yAxis:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;zAxis:&#039;&#039;&#039; Boolean&lt;br /&gt;
*&#039;&#039;&#039;clearArea:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
{{ClientsideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Set your ped off in to the sky&lt;br /&gt;
mp.players.local.setCoords(mp.players.local.getCoords(true).x, mp.players.local.getCoords(true).y, mp.players.local.getCoords(true).z + 500.0, true, false, false, false);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
==See also==&lt;br /&gt;
{{Entity_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Entity::setHeading&amp;diff=19593</id>
		<title>Entity::setHeading</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Entity::setHeading&amp;diff=19593"/>
		<updated>2020-05-17T14:10:56Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set heading of your entity in degrees&lt;br /&gt;
min 0.0 - max 360.0&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;entity.setHeading(heading);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;heading:&#039;&#039;&#039; float&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// todo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Entity_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Blip::setRoute&amp;diff=19592</id>
		<title>Blip::setRoute</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Blip::setRoute&amp;diff=19592"/>
		<updated>2020-05-17T14:06:55Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enable / disable showing route for the Blip-object.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;blip.setRoute(enabled);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;enabled:&#039;&#039;&#039; Boolean&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
{{ClientsideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var policeStation = mp.blips.new(526, new mp.Vector3(433.25567626953125,-981.8964233398438, 30.710012435913086),&lt;br /&gt;
{&lt;br /&gt;
    color: 5,&lt;br /&gt;
    shortRange: false,&lt;br /&gt;
    dimension: mp.players.local.dimension&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
policeStation.setRoute(true) // SetRoute for police station&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
==See also==&lt;br /&gt;
{{Blip_s_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:Blip API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Entity::getModel&amp;diff=19591</id>
		<title>Entity::getModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Entity::getModel&amp;diff=19591"/>
		<updated>2020-05-17T11:03:00Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Returns the model hash from the entity&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;entity.getModel();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Model hash or name&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
{{ClientsideCode|&lt;br /&gt;
    &amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    //Get first spawned vehicle&lt;br /&gt;
    var vehicleObject = mp.vehicles.atRemoteId(0);&lt;br /&gt;
    //Check if the object is valid&lt;br /&gt;
    if(vehicleObject)&lt;br /&gt;
    {&lt;br /&gt;
        //Get vehicle distant and if under 4 show the model name&lt;br /&gt;
        var vehicleDistant = LastVehicleDistant =  mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicleObject.position.x, vehicleObject.position.y, vehicleObject.position.z, false);&lt;br /&gt;
        if(vehicleDistant &amp;lt; 4.0)&lt;br /&gt;
        {&lt;br /&gt;
            //Display it&#039;s name&lt;br /&gt;
            var vehicleModel = vehicleObject.getModel(); // this is same as vehicle.model&lt;br /&gt;
            mp.game.graphics.drawText(`Interact With ~b~[${mp.game.vehicle.getDisplayNameFromVehicleModel(vehicleModel)}]`, [vehicleObject.position.x, vehicleObject.position.y, vehicleObject.position.z], { &lt;br /&gt;
                font: 0,&lt;br /&gt;
                scale: [0.4, 0.4],&lt;br /&gt;
                color: [255, 255, 255, 185],&lt;br /&gt;
                outline: false&lt;br /&gt;
                });&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
    &amp;lt;/pre&amp;gt;&lt;br /&gt;
    }}&lt;br /&gt;
==See also==&lt;br /&gt;
{{Entity_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Player::taskPlaneLand&amp;diff=19590</id>
		<title>Player::taskPlaneLand</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Player::taskPlaneLand&amp;diff=19590"/>
		<updated>2020-05-17T10:54:18Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Function.Call(Hash.TASK_PLANE_LAND, pilot, selectedAirplane, runwayStartPoint.X, runwayStartPoint.Y, runwayStartPoint.Z, runwayEndPoint.X, runwayEndPoint.Y, runwayEndPoint.Z); &lt;br /&gt;
&lt;br /&gt;
Using this you can task the ped to land (This will only task the ped to land the plane if already in air)&lt;br /&gt;
You need to turn the engines on manually because the ped will not&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;player.taskPlaneLand(plane, runwayStartX, runwayStartY, runwayStartZ, runwayEndX, runwayEndY, runwayEndZ);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
*&#039;&#039;&#039;plane:&#039;&#039;&#039; Vehicle handle or object&lt;br /&gt;
*&#039;&#039;&#039;runwayStartX:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;runwayStartY:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;runwayStartZ:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;runwayEndX:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;runwayEndY:&#039;&#039;&#039; float&lt;br /&gt;
*&#039;&#039;&#039;runwayEndZ:&#039;&#039;&#039; float&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Undefined&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// This will task the ped to land in Sandy Shore airport&lt;br /&gt;
Ped.taskPlaneLand(VehicleOfPed.handle, 1060.688232421875, 3077.2314453125, 40.273826599121094, 1667.779541015625, 3240.7724609375, 39.652400970458984);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Player_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Entity::getModel&amp;diff=19589</id>
		<title>Entity::getModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Entity::getModel&amp;diff=19589"/>
		<updated>2020-05-17T10:49:44Z</updated>

		<summary type="html">&lt;p&gt;NoBrain: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Returns the model hash from the entity&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;entity.getModel();&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Required Arguments ===&lt;br /&gt;
===Return value===&lt;br /&gt;
*&#039;&#039;&#039;Model hash or name&#039;&#039;&#039;&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
mp.events.add(&#039;render&#039;, () =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    //Get first spawned vehicle&lt;br /&gt;
    var vehicleObject = mp.vehicles.atRemoteId(0);&lt;br /&gt;
    //Check if the object is valid&lt;br /&gt;
    if(vehicleObject)&lt;br /&gt;
    {&lt;br /&gt;
        //Get vehicle distant and if under 4 show the model name&lt;br /&gt;
        var vehicleDistant = LastVehicleDistant =  mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicleObject.position.x, vehicleObject.position.y, vehicleObject.position.z, false);&lt;br /&gt;
        if(vehicleDistant &amp;lt; 4.0)&lt;br /&gt;
        {&lt;br /&gt;
            //Display it&#039;s name&lt;br /&gt;
            var vehicleModel = vehicleObject.getModel(); // this is same as vehicle.model&lt;br /&gt;
            mp.game.graphics.drawText(`Interact With ~b~[${mp.game.vehicle.getDisplayNameFromVehicleModel(vehicleModel)}]`, [vehicleObject.position.x, vehicleObject.position.y, vehicleObject.position.z], { &lt;br /&gt;
                font: 0,&lt;br /&gt;
                scale: [0.4, 0.4],&lt;br /&gt;
                color: [255, 255, 255, 185],&lt;br /&gt;
                outline: false&lt;br /&gt;
                });&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
{{Entity_function_c}}&lt;br /&gt;
[[Category:Clientside API]]&lt;br /&gt;
[[Category:TODO: Example]]&lt;/div&gt;</summary>
		<author><name>NoBrain</name></author>
	</entry>
</feed>