<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://rage.grandroleplay.ru/index.php?action=history&amp;feed=atom&amp;title=Getting_Started_with_Events</id>
	<title>Getting Started with Events - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://rage.grandroleplay.ru/index.php?action=history&amp;feed=atom&amp;title=Getting_Started_with_Events"/>
	<link rel="alternate" type="text/html" href="https://rage.grandroleplay.ru/index.php?title=Getting_Started_with_Events&amp;action=history"/>
	<updated>2026-07-24T17:37:48Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://rage.grandroleplay.ru/index.php?title=Getting_Started_with_Events&amp;diff=10150&amp;oldid=prev</id>
		<title>imported&gt;Shr0x в 00:42, 7 апреля 2026</title>
		<link rel="alternate" type="text/html" href="https://rage.grandroleplay.ru/index.php?title=Getting_Started_with_Events&amp;diff=10150&amp;oldid=prev"/>
		<updated>2026-04-07T00:42:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;max-width:1200px; margin:0 auto; font-family:system-ui, -apple-system, BlinkMacSystemFont, &amp;#039;Segoe UI&amp;#039;, sans-serif; line-height:1.65;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(135deg, #0f172a 0%, #1e293b 100%); border:1px solid #334155; border-radius:18px; padding:28px 30px; margin:16px 0 24px 0; color:#f8fafc;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px; font-weight:700; letter-spacing:0.08em; text-transform:uppercase; color:#93c5fd; margin-bottom:10px;&amp;quot;&amp;gt;&lt;br /&gt;
RAGE:MP Documentation&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:34px; font-weight:800; line-height:1.15; margin-bottom:12px;&amp;quot;&amp;gt;&lt;br /&gt;
Events System&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:16px; color:#cbd5e1; max-width:850px;&amp;quot;&amp;gt;&lt;br /&gt;
Events are the backbone of scripting in RAGE:MP. This page explains what they are, how to register them, how communication works between server, client, and CEF, and how to manage them cleanly.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:14px; margin:0 0 24px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f8fafc; border:1px solid #e2e8f0; border-radius:16px; padding:18px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:700; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Core Idea&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:18px; font-weight:800; color:#0f172a; margin-bottom:6px;&amp;quot;&amp;gt;Events react to things&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; font-size:14px;&amp;quot;&amp;gt;Built-in events react automatically. Custom events react when you trigger them.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f8fafc; border:1px solid #e2e8f0; border-radius:16px; padding:18px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:700; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Communication&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:18px; font-weight:800; color:#0f172a; margin-bottom:6px;&amp;quot;&amp;gt;Know your direction&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; font-size:14px;&amp;quot;&amp;gt;Server, client, and CEF do not all communicate the same way.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f8fafc; border:1px solid #e2e8f0; border-radius:16px; padding:18px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:700; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Rule&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:18px; font-weight:800; color:#0f172a; margin-bottom:6px;&amp;quot;&amp;gt;Register first&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; font-size:14px;&amp;quot;&amp;gt;An event must be registered before you can use or trigger it.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:16px; padding:22px; margin:0 0 20px 0;&amp;quot;&amp;gt;&lt;br /&gt;
Events are the &amp;lt;b&amp;gt;core scripting system&amp;lt;/b&amp;gt; for RAGE:MP.&lt;br /&gt;
&lt;br /&gt;
They are registered by you and triggered when a specific action or situation happens.&lt;br /&gt;
&lt;br /&gt;
For example, [[PlayerEnterCheckpoint|PlayerEnterCheckpoint]] is triggered when a player enters a checkpoint.  &lt;br /&gt;
That event gives you:&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin:10px 0 0 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the &amp;lt;b&amp;gt;Player&amp;lt;/b&amp;gt; that entered it&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the &amp;lt;b&amp;gt;Checkpoint&amp;lt;/b&amp;gt; that was entered&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Event Types ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:16px; margin:0 0 22px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(180deg, #eff6ff 0%, #ffffff 100%); border:1px solid #bfdbfe; border-radius:18px; padding:22px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px; font-weight:800; text-transform:uppercase; color:#1d4ed8; margin-bottom:8px;&amp;quot;&amp;gt;Type 1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:24px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Built-in Events&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#334155; margin-bottom:12px;&amp;quot;&amp;gt;&lt;br /&gt;
These are provided by &amp;lt;b&amp;gt;RAGE:MP&amp;lt;/b&amp;gt; and are triggered automatically in certain situations.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; font-size:14px; margin-bottom:10px;&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin:0 0 12px 20px; color:#475569;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;player entering a checkpoint&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;player quitting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;player spawning&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Lists:&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[Server-side_events|Server-side events]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[Client-side_events|Client-side events]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(180deg, #f0fdf4 0%, #ffffff 100%); border:1px solid #bbf7d0; border-radius:18px; padding:22px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:13px; font-weight:800; text-transform:uppercase; color:#15803d; margin-bottom:8px;&amp;quot;&amp;gt;Type 2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:24px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Custom Events&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#334155; margin-bottom:12px;&amp;quot;&amp;gt;&lt;br /&gt;
These are created by &amp;lt;b&amp;gt;you&amp;lt;/b&amp;gt; and can be triggered whenever you want.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; font-size:14px; margin-bottom:10px;&amp;quot;&amp;gt;Use them to:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin:0 0 0 20px; color:#475569;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;connect systems together&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;trigger your own gameplay logic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;send data between layers&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;create reusable scripting flows&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Registering Events ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#fff7ed; border:1px solid #fdba74; border-radius:16px; padding:16px 18px; margin:0 0 18px 0; color:#9a3412;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Important:&amp;lt;/b&amp;gt; You must register an event before using it anywhere.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server-side Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:16px; padding:18px; margin:0 0 18px 0;&amp;quot;&amp;gt;&lt;br /&gt;
A normal server-side event can be registered like this:&lt;br /&gt;
{{ServersideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&amp;#039;eventName&amp;#039;, (arg1, arg2) =&amp;gt; {&lt;br /&gt;
    // code&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Client → Server Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:16px; padding:18px; margin:0 0 18px 0;&amp;quot;&amp;gt;&lt;br /&gt;
If the event is &amp;lt;b&amp;gt;triggered from client-side&amp;lt;/b&amp;gt; but &amp;lt;b&amp;gt;registered on server-side&amp;lt;/b&amp;gt;, the first argument must be &amp;lt;b&amp;gt;player&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This happens because the client sends the local player together with the event data, allowing the server to know who triggered it.&lt;br /&gt;
{{ServersideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&amp;#039;eventName&amp;#039;, (player, arg1, arg2) =&amp;gt; {&lt;br /&gt;
    // code&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CEF Notes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f8fafc; border:1px solid #cbd5e1; border-radius:16px; padding:18px; margin:0 0 22px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:18px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;CEF behaves differently&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin:0 0 12px 20px; color:#475569;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CEF cannot communicate directly with server-side&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CEF mainly communicates with client-side&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Older documentation often describes CEF more restrictively, but newer support exists in later versions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:14px; font-weight:700; color:#334155; margin-bottom:8px;&amp;quot;&amp;gt;In version 1.1:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#0f172a; color:#e2e8f0; border-radius:14px; padding:16px; overflow:auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;margin:0; white-space:pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
Added: CEF: mp.events.add(string eventName, function handler)&lt;br /&gt;
Added: CEF: mp.events.reset()&lt;br /&gt;
Added: CEF: mp.events.remove(string eventName)&lt;br /&gt;
Added: CEF: mp.events.call(string eventName) (alias to mp.trigger)&lt;br /&gt;
Added: Client-side: Browser.call(eventName, arguments...)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calling Events ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#eef2ff; border:1px solid #c7d2fe; border-radius:16px; padding:18px; margin:0 0 20px 0; color:#3730a3;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Tip:&amp;lt;/b&amp;gt; Most event confusion comes from not knowing which side is calling which side.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid; grid-template-columns:repeat(auto-fit,minmax(360px,1fr)); gap:16px; margin:0 0 24px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Local&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Same Side&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;Use this when you call an event on the same side it exists on.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin-bottom:8px;&amp;quot;&amp;gt;Syntax&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.call(&amp;#039;eventName&amp;#039;, args);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Remote&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Server → Client&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;The server tells one player or multiple players to execute a client-side event.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin-bottom:8px;&amp;quot;&amp;gt;Single player&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
player.call(&amp;#039;eventName&amp;#039;, [arg1, arg2]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin:14px 0 8px 0;&amp;quot;&amp;gt;All players&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.players.call(&amp;#039;eventName&amp;#039;, [arg1, arg2]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin:14px 0 8px 0;&amp;quot;&amp;gt;Filtered players&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.players.call(&lt;br /&gt;
    mp.players.toArray().filter((_player) =&amp;gt; _player.name == &amp;#039;WeirdNewbie&amp;#039;),&lt;br /&gt;
    &amp;#039;eventName&amp;#039;,&lt;br /&gt;
    [args]&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Remote&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Client → Server&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;Use this when the client wants to trigger a server-side event.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin-bottom:8px;&amp;quot;&amp;gt;Syntax&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.callRemote(&amp;#039;eventName&amp;#039;, args);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Bridge&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Client ↔ CEF&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;CEF does not directly talk to server-side. It goes through the client.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin-bottom:8px;&amp;quot;&amp;gt;Client → CEF&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mbrowser.execute(`javascriptFunction(&amp;#039;${variable1}&amp;#039;, &amp;#039;${variable2}&amp;#039;);`);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:700; margin:14px 0 8px 0;&amp;quot;&amp;gt;CEF → Client&amp;lt;/div&amp;gt;&lt;br /&gt;
{{JSContainer|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.trigger(&amp;#039;eventName&amp;#039;, args);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Flow ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:22px; margin:0 0 24px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Server command triggering a client effect&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:18px;&amp;quot;&amp;gt;&lt;br /&gt;
In this example, a player uses a server command, and the server tells that player&amp;#039;s client to start a screen effect.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid; grid-template-columns:repeat(auto-fit,minmax(360px,1fr)); gap:16px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:16px; font-weight:800; color:#0f172a; margin-bottom:8px;&amp;quot;&amp;gt;Server-side&amp;lt;/div&amp;gt;&lt;br /&gt;
{{ServersideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.addCommand(&amp;#039;effect&amp;#039;, (player, fullText, effect) =&amp;gt; {&lt;br /&gt;
    player.call(&amp;#039;startEffectEvent&amp;#039;, [effect]);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:16px; font-weight:800; color:#0f172a; margin-bottom:8px;&amp;quot;&amp;gt;Client-side&amp;lt;/div&amp;gt;&lt;br /&gt;
{{ClientsideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mp.events.add(&amp;#039;startEffectEvent&amp;#039;, (effect) =&amp;gt; {&lt;br /&gt;
    mp.game.graphics.startScreenEffect(effect, 10000, false);&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cancelling and Managing Events ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:grid; grid-template-columns:repeat(auto-fit,minmax(360px,1fr)); gap:16px; margin:0 0 24px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Method 1&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Pause / Destroy&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;&lt;br /&gt;
To control an event instance directly, you can use &amp;lt;b&amp;gt;mp.Event&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ServersideCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let ev = new mp.Event(&amp;quot;playerDeath&amp;quot;, (player, reason, killer) =&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    mp.players.broadcast(&amp;#039;First blood!&amp;#039;);&lt;br /&gt;
    ev.destroy(); // this event handler will not be called anymore&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ev.destroy(); // destroy it before it can execute again&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:18px; padding:20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:12px; font-weight:800; text-transform:uppercase; color:#64748b; margin-bottom:8px;&amp;quot;&amp;gt;Method 2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; color:#0f172a; margin-bottom:10px;&amp;quot;&amp;gt;Remove from Tree&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:#475569; margin-bottom:12px;&amp;quot;&amp;gt;&lt;br /&gt;
You can remove a specific handler, remove all handlers for an event, remove multiple events, or reset the whole tree.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SharedCode|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Remove specified handler of specified event&lt;br /&gt;
function playerJoinHandler(player)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mp.events.add(&amp;quot;playerJoin&amp;quot;, playerJoinHandler);&lt;br /&gt;
mp.events.remove(&amp;quot;playerJoin&amp;quot;, playerJoinHandler);&lt;br /&gt;
&lt;br /&gt;
// Remove handler(s) of specified event(s)&lt;br /&gt;
mp.events.remove(&amp;quot;playerJoin&amp;quot;);&lt;br /&gt;
mp.events.remove([&amp;quot;playerJoin&amp;quot;, &amp;quot;playerQuit&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
// Reset whole event tree&lt;br /&gt;
mp.events.reset();&lt;br /&gt;
&lt;br /&gt;
// Get all handlers of specified event&lt;br /&gt;
mp.events.getAllOf(&amp;quot;playerJoin&amp;quot;).forEach(_ev =&amp;gt; _ev(null));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#0f172a; border:1px solid #334155; border-radius:18px; padding:22px; margin:0 0 24px 0; color:#e2e8f0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:22px; font-weight:800; margin-bottom:14px;&amp;quot;&amp;gt;Cheat Sheet&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%; background:#ffffff; color:#0f172a; border-radius:12px; overflow:hidden;&amp;quot;&lt;br /&gt;
! style=&amp;quot;padding:10px;&amp;quot; | Action&lt;br /&gt;
! style=&amp;quot;padding:10px;&amp;quot; | Method&lt;br /&gt;
|-&lt;br /&gt;
| Register local event&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.events.add(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Call local event&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.events.call(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Client to server&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.events.callRemote(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Server to one client&lt;br /&gt;
| &amp;lt;code&amp;gt;player.call(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Server to all clients&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.players.call(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CEF to client&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.trigger(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Client to CEF&lt;br /&gt;
| &amp;lt;code&amp;gt;browser.execute(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Remove event&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.events.remove(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reset all events&lt;br /&gt;
| &amp;lt;code&amp;gt;mp.events.reset()&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:linear-gradient(180deg, #f8fafc 0%, #ffffff 100%); border:1px solid #e2e8f0; border-radius:18px; padding:22px; margin:0 0 24px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;margin:0 0 0 20px; color:#334155;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Events are the foundation of scripting in RAGE:MP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Built-in events are automatic, custom events are created by you&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Always register events before using them&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Server, client, and CEF each have different communication rules&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can disable, destroy, remove, or reset events when needed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; border:1px solid #e2e8f0; border-radius:16px; padding:18px; margin:0 0 20px 0;&amp;quot;&amp;gt;&lt;br /&gt;
{{ScriptingTutorials}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Shr0x</name></author>
	</entry>
</feed>