<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.gtaconnected.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vortrex</id>
	<title>GTA Connected - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gtaconnected.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vortrex"/>
	<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/Special:Contributions/Vortrex"/>
	<updated>2026-05-12T03:43:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11443</id>
		<title>OnAddIVNetworkEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11443"/>
		<updated>2026-03-22T22:31:43Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|name = OnAddIVNetworkEvent&lt;br /&gt;
|side = shared&lt;br /&gt;
|type = event&lt;br /&gt;
|games = iv&lt;br /&gt;
|desc = when a built-in event is sent in GTA IV&lt;br /&gt;
|arg1 = Client client The client that sent the event&lt;br /&gt;
|arg2 = Type integer The type of event sent&lt;br /&gt;
|arg3 = Name string The name of the client&lt;br /&gt;
|arg4 = Data1 integer The 1st data arg&lt;br /&gt;
|arg5 = Data2 integer The 2nd data arg&lt;br /&gt;
|cancel = true&lt;br /&gt;
|notes = See [[Resources/GTAIV/Events|the IV events page]] for a list of event types, and [[SyncDamageOnGTAIV|this page for an example on how to sync player damage]]&lt;br /&gt;
|ExampleSSJS = addEventHandler(&amp;quot;OnAddIVNetworkEvent&amp;quot;, (event, fromClient, type, name, data1, data2) =&amp;gt; {&lt;br /&gt;
    triggerNetworkEvent(&amp;quot;iv-event&amp;quot;, null, fromClient, type, name, data1, data2); // Use null as second arg to send to everybody&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ScriptingExamples&amp;diff=11442</id>
		<title>ScriptingExamples</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ScriptingExamples&amp;diff=11442"/>
		<updated>2026-03-22T21:57:37Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Scripting Examples}}&lt;br /&gt;
The examples listed on this page work with GTAC versions &amp;lt;code&amp;gt;1.0.72&amp;lt;/code&amp;gt; and newer.&lt;br /&gt;
== Command-Based ==&lt;br /&gt;
==== General ====&lt;br /&gt;
[[ScriptingExamples/BasicCommand|Show Message in Chat Box]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Player ====&lt;br /&gt;
[[ScriptingExamples/PlayerSetPositionNativeMP|Set Own Player&#039;s Position (GTA IV, Native MP Mode)]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/PlayerKillCommand|Kill Own Player]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/PlayerWeapon|Give Own Player Weapon]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/PlayerJumpCommands|Raise Own Player&#039;s Z Coordinate]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/ShowTargetPlayerName|Show Target Player&#039;s Name]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/GameCommand|Show Own Player&#039;s Current Game Being Played]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/GameCommandTargetPlayer|Show Target Player&#039;s Current Game Being Played]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Vehicle ====&lt;br /&gt;
[[ScriptingExamples/AddVehicle|Add a Vehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/ToggleTyresBurst|Vehicle Tyres Toggle Burst/Inflated Command]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/SetWheelStatus|Vehicle Wheel Status Command]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Object ====&lt;br /&gt;
[[ScriptingExamples/AddObject|Add an Object]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Player &amp;amp; Vehicle ====&lt;br /&gt;
[[ScriptingExamples/HealAndFixInOne|Player Heal and Vehicle Fix Command]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/PlayerDelayedHeal|Player Delayed Heal and Vehicle Fix Command]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Event-Based ==&lt;br /&gt;
[[ScriptingExamples/SyncDamageOnGTAIV|Sync Damage on GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/BasicEvent|Basic Chat Message Event]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/LogChatMessagesToFile|Log Chat Messages to File]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/CustomCheatsWithoutTimeRestriction|Use Custom Cheats]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timer-Based ==&lt;br /&gt;
[[ScriptingExamples/BasicTimer|Basic Chat Message Timer]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/EnterVehicleAsPassenger|Enter Vehicle as a Passenger]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/VehicleAutoFlipperAndFixer|Vehicle Auto Flipper &amp;amp; Fixer]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/VehicleBounceAndFixer|Vehicle Bounce &amp;amp; Fixer with Command]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility Code ==&lt;br /&gt;
[[ScriptingExamples/getClientFromText|getClientFromText]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[ScriptingExamples/getNearestVehicleInRange|getNearestVehicleInRange]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
[[ScriptingExamples/PedAttackPlayer|Make Ped Attack Players]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Third Party Code ==&lt;br /&gt;
[[ScriptingExamples/split|split]]&lt;br /&gt;
&lt;br /&gt;
== Previous GTAC Versions ==&lt;br /&gt;
[[OldScriptingExamples|Scripting examples for previous versions of GTAC]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Functions/Ped&amp;diff=11424</id>
		<title>Template:Client/Functions/Ped</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Functions/Ped&amp;diff=11424"/>
		<updated>2026-03-04T16:58:38Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[getPedCount|getPedCount]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[getPeds|getPeds]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[gta.clearThreatForPedType|gta.clearThreatForPedType]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[gta.createPed|gta.createPed]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[gta.forceRandomPedType|gta.forceRandomPedType]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[gta.pedDensity|gta.pedDensity]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[gta.setThreatForPedType|gta.setThreatForPedType]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[gta.setZonePedInfo|gta.setZonePedInfo]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[gta.tommyFatness|gta.tommyFatness]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.addAnimation|ped.addAnimation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[physical.affectedByGravity|ped.affectedByGravity]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[entity.alpha|ped.alpha]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.armour|ped.armour]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.bleeding|ped.bleeding]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.blendAnimation|ped.blendAnimation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.boundingCentre|ped.boundingCentre]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.boundingMax|ped.boundingMax]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.boundingMin|ped.boundingMin]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.boundingRadius|ped.boundingRadius]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.buyIceCream|ped.buyIceCream]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.canBeKnockedOffBike|ped.canBeKnockedOffBike]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.canExitVehicle|ped.canExitVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[physical.centerOfMass|ped.centerOfMass]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.changeBodyPart|ped.changeBodyPart]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.children|ped.children]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.clearAnimations|ped.clearAnimations]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.clearExistsFor|ped.clearExistsFor]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} [[ped.clearObjective|ped.clearObjective]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.clearPointGunAt|ped.clearPointGunAt]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.clearThreatSearch|ped.clearThreatSearch]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.clearWeapons|ped.clearWeapons]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionBoxCount|ped.collisionBoxCount]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionBoxes|ped.collisionBoxes]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionLineCount|ped.collisionLineCount]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionLines|ped.collisionLines]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[physical.collisionPower|ped.collisionPower]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionsEnabled|ped.collisionsEnabled]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionSphereCount|ped.collisionSphereCount]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionSpheres|ped.collisionSpheres]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionVertexCount|ped.collisionVertexCount]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.collisionVertices|ped.collisionVertices]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.contactEntity|ped.contactEntity]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.contactEntityOffset|ped.contactEntityOffset]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.crouching|ped.crouching]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.crouchingTime|ped.crouchingTime]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.dimension|ped.dimension]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.distanceFromCentreOfMassToBaseOfModel|ped.distanceFromCentreOfMassToBaseOfModel]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.dropObject|ped.dropObject]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.duck|ped.duck]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.enterVehicle|ped.enterVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.existsFor|ped.existsFor]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.exitVehicle|ped.exitVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getComponentOffset|ped.getComponentOffset]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getComponentPosition|ped.getComponentPosition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.getData|ped.getData]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.getNearestDoorPosition|ped.getNearestDoorPosition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.getNearestPassengerDoorPosition|ped.getNearestPassengerDoorPosition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.getPositionToOpenVehicleDoor|ped.getPositionToOpenVehicleDoor]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.getRotation|ped.getRotation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getWeaponAmmunition|ped.getWeaponAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getWeaponClipAmmunition|ped.getWeaponClipAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getWeaponSlotAmmunition|ped.getWeaponSlotAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.getWeaponSlotClipAmmunition|ped.getWeaponSlotClipAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.giveHelmet|ped.giveHelmet]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.giveWeapon|ped.giveWeapon]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.hailTaxi|ped.hailTaxi]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[entity.heading|ped.heading]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.health|ped.health]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[physical.health|ped.health]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.heedThreats|ped.heedThreats]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.holdObject|ped.holdObject]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.id|ped.id]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.instantVehicleExit|ped.instantVehicleExit]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.instantVehicleJack|ped.instantVehicleJack]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.interior|ped.interior]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.invincible|ped.invincible]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[physical.inWater|ped.inWater]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.isCreatedFor|ped.isCreatedFor]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.isEnteringVehicle|ped.isEnteringVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.isExitingVehicle|ped.isExitingVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.isInVehicle|ped.isInVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[physical.island|ped.island]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.isLocal|ped.isLocal]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.isOnScreen|ped.isOnScreen]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.isOwner|ped.isOwner]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.isSyncer|ped.isSyncer]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.isType|ped.isType]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.jumping|ped.jumping]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-sa}} {{icon-iv}} [[ped.lookAt|ped.lookAt]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.markAsNoLongerNeeded|ped.markAsNoLongerNeeded]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[physical.mass|ped.mass]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[entity.matrix|ped.matrix]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.maxArmour|ped.maxArmour]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.maxHealth|ped.maxHealth]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.maxStamina|ped.maxStamina]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.model|ped.model]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[entity.modelIndex|ped.modelIndex]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.money|ped.money]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.name|ped.name]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.netFlags|ped.netFlags]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[ped.objective|ped.objective]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.onScreen|ped.onScreen]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.parent|ped.parent]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.pedType|ped.pedType]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.pointGunAt|ped.pointGunAt]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.pointGunAtPosition|ped.pointGunAtPosition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.position|ped.position]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.removeAllData|ped.removeAllData]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.removeBodyPart|ped.removeBodyPart]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.removeData|ped.removeData]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.removeFromVehicle|ped.removeFromVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.removeHelmet|ped.removeHelmet]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.removeNametag|ped.removeNametag]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.resource|ped.resource]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.resurrect|ped.resurrect]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.roomToBeVehicleJacked|ped.roomToBeVehicleJacked]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.rotation|ped.rotation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.runTo|ped.runTo]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.say|ped.say]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.seat|ped.seat]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.setData|ped.setData]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.setExistsFor|ped.setExistsFor]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} {{icon-iv}} [[ped.setNametag|ped.setNametag]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.setPedStats|ped.setPedStats]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.setProofs|ped.setProofs]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.setRotation|ped.setRotation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[ped.setSeek|ped.setSeek]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.setSyncer|ped.setSyncer]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.setThreatSearch|ped.setThreatSearch]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[ped.setWaitState|ped.setWaitState]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-placeholder}} {{icon-placeholder}} [[ped.setWanderPath|ped.setWanderPath]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.setWeaponAmmunition|ped.setWeaponAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.setWeaponClipAmmunition|ped.setWeaponClipAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.setWeaponSlotAmmunition|ped.setWeaponSlotAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.setWeaponSlotClipAmmunition|ped.setWeaponSlotClipAmmunition]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.skin|ped.skin]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-placeholder}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.sprintTo|ped.sprintTo]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.stamina|ped.stamina]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.staminaDuration|ped.staminaDuration]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[ped.state|ped.state]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.status|ped.status]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.stayInSamePlace|ped.stayInSamePlace]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.streamInDistance|ped.streamInDistance]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.streamOutDistance|ped.streamOutDistance]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.syncer|ped.syncer]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.syncerId|ped.syncerId]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[physical.turnVelocity|ped.turnVelocity]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[element.type|ped.type]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.upperTorsoRotation|ped.upperTorsoRotation]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.vehicle|ped.vehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[physical.velocity|ped.velocity]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[entity.visible|ped.visible]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-placeholder}} {{icon-placeholder}} {{icon-placeholder}} [[ped.waitState|ped.waitState]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.walkStyle|ped.walkStyle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.walkTo|ped.walkTo]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.warpIntoVehicle|ped.warpIntoVehicle]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-iv}} [[ped.weapon|ped.weapon]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.weapons|ped.weapons]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.weaponSlot|ped.weaponSlot]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.weaponSlots|ped.weaponSlots]]&amp;lt;br&amp;gt;&lt;br /&gt;
{{icon-iii}} {{icon-vc}} {{icon-sa}} {{icon-placeholder}} [[ped.weaponState|ped.weaponState]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.clearAnimations&amp;diff=11423</id>
		<title>ped.clearAnimations</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.clearAnimations&amp;diff=11423"/>
		<updated>2026-03-04T16:57:07Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|games = vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = clearAnimations&lt;br /&gt;
|parameters = void&lt;br /&gt;
|usage = makes the ped stop playing all animations&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = Play an animation with [[ped.clearAnimations|ped.addAnimation]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;stopanim&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.clearAnimations(); // Make your player ped stop using their animations&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.clearAnimations&amp;diff=11422</id>
		<title>ped.clearAnimations</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.clearAnimations&amp;diff=11422"/>
		<updated>2026-03-04T16:56:53Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{ScriptItem |endpoint = client |games = vc sa |type = method |class = Ped |name = clearAnimations |parameters = void |usage = makes the ped stop playing all animations |return1 = void |returnFail1 = void |notes = Play an animation with ped.addAnimation |exampleJSCS = addCommandHandler(&amp;quot;stopanim&amp;quot;, function(command, params) {     localPlayer.clearAnimations(); // GTA Vice City, make your player ped stop using their animations }); }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|games = vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = clearAnimations&lt;br /&gt;
|parameters = void&lt;br /&gt;
|usage = makes the ped stop playing all animations&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = Play an animation with [[ped.clearAnimations|ped.addAnimation]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;stopanim&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.clearAnimations(); // GTA Vice City, make your player ped stop using their animations&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11421</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11421"/>
		<updated>2026-03-04T16:54:08Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = int groupId, int animId&lt;br /&gt;
|parameter1 = int groupId the ID of the animation group&lt;br /&gt;
|parameter2 = int animId the ID of the animation itself&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;talk&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.addAnimation(0, 11); // GTA Vice City, make your player ped use a talking animation&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11420</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11420"/>
		<updated>2026-03-04T16:53:31Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Integer groupId, Integer animId&lt;br /&gt;
|parameter1 = Integer groupId the ID of the animation group&lt;br /&gt;
|parameter2 = Integer animId the ID of the animation itself&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;talk&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.addAnimation(0, 11); // GTA Vice City, make your player ped use a talking animation&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11419</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11419"/>
		<updated>2026-03-04T16:52:32Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Integer groupId, Integer animId&lt;br /&gt;
|parameter1 = Integer groupId the ID of the animation group&lt;br /&gt;
|parameter2 = Integer animId = the ID of the animation itself&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;talk&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.addAnimation(0, 11); // GTA Vice City, make your player ped use a talking animation&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11418</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11418"/>
		<updated>2026-03-04T16:50:52Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;talk&amp;quot;, function(command, params) {&lt;br /&gt;
    localPlayer.addAnimation(0, 11); // GTA Vice City, make your player ped use a talking animation&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11417</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11417"/>
		<updated>2026-03-04T16:50:32Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;sit&amp;quot;, function(command, params, client) {&lt;br /&gt;
    localPlayer.addAnimation(0, 11); // GTA Vice City, make your player ped use a talking animation&lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11416</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11416"/>
		<updated>2026-03-04T16:36:30Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[natives.taskPlayAnimWithFlags|natives.taskPlayAnimWithFlags]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11415</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11415"/>
		<updated>2026-03-04T16:36:07Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|games = iii vc sa&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&amp;lt;br&amp;gt;&lt;br /&gt;
For GTA IV, use an animation native such as [[natives.taskPlayAnimNonInterruptable|natives.taskPlayAnimNonInterruptable]] or [[https://wiki.gtaconnected.com/natives.taskPlayAnimWithFlags|https://wiki.gtaconnected.com/natives.taskPlayAnimWithFlags]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11414</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11414"/>
		<updated>2026-03-04T16:34:00Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTA3/Animations|GTA III]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11413</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11413"/>
		<updated>2026-03-04T16:33:30Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|side = client&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. &lt;br /&gt;
This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[Resources/GTAIII/Animations|GTA 3]], [[Resources/GTAVC/Animations|GTA Vice City]], [[Resources/GTASA/Animations|GTA SA]], and [[Resources/GTAIV/Animations|GTA IV]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11412</id>
		<title>ped.addAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ped.addAnimation&amp;diff=11412"/>
		<updated>2026-03-04T16:31:27Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{ScriptItem2 |endpoint = client |type = method |class = Ped |name = addAnimation |parameters = Int groupId, Int animId |usage = makes the ped play an animation |return1 = void |returnFail1 = void |notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = method&lt;br /&gt;
|class = Ped&lt;br /&gt;
|name = addAnimation&lt;br /&gt;
|parameters = Int groupId, Int animId&lt;br /&gt;
|usage = makes the ped play an animation&lt;br /&gt;
|return1 = void&lt;br /&gt;
|returnFail1 = void&lt;br /&gt;
|notes = More than one animation can be applied, which is why the function is called &amp;quot;add animation&amp;quot; instead of &amp;quot;play animation&amp;quot;. This usually leads to undesired results as most animation were not designed to be played together. If you want to reset the current animation(s) to play another, use [[ped.clearAnimations|ped.clearAnimations]] on GTA VC and SA, [[ped.clearObjective|ped.clearObjective]] on GTA III.&amp;lt;br&amp;gt;&lt;br /&gt;
Animation lists for [[https://wiki.gtaconnected.com/Resources/GTAIII/Animations|GTA 3]], [[https://wiki.gtaconnected.com/Resources/GTAVC/Animations|GTA Vice City]], [[https://wiki.gtaconnected.com/Resources/GTASA/Animations|GTA SA]], and [[https://wiki.gtaconnected.com/Resources/GTAIV/Animations|GTA IV]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11390</id>
		<title>graphics.loadPNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11390"/>
		<updated>2026-02-19T13:30:04Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = function&lt;br /&gt;
|name = graphics.loadPNG&lt;br /&gt;
|usage = create a texture/surface object from a PNG image [[openFile|file stream]]&lt;br /&gt;
|returnTypes = Texture&lt;br /&gt;
|returnInfo = the texture object&lt;br /&gt;
|parameters = Stream stream OR String url&lt;br /&gt;
|parameter1 = Stream stream The [[openFile|file stream]] of the image, or String with a URL to a PNG file&lt;br /&gt;
|returnFail1 = bool false&lt;br /&gt;
|notes = The first parameter can be either a [[openFile|image file]], or a URL to an image on the internet.&amp;lt;br&amp;gt;&lt;br /&gt;
When using a URL, the file must be accessible by the &#039;&#039;&#039;client&#039;&#039;&#039;. The client will use it&#039;s own connection to grab the file and it must be publicly available.&amp;lt;br&amp;gt;&lt;br /&gt;
The texture object created by this function is sometimes referred to as a &amp;quot;surface&amp;quot; like in [[graphics.drawRectangle|graphics.drawRectangle]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11389</id>
		<title>graphics.loadPNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11389"/>
		<updated>2026-02-19T13:29:49Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = function&lt;br /&gt;
|name = graphics.loadPNG&lt;br /&gt;
|usage = create a texture/surface object from a PNG image [[openFile|file stream]]&lt;br /&gt;
|returnTypes = Texture&lt;br /&gt;
|returnInfo = the texture object&lt;br /&gt;
|parameters = Stream stream OR String url&lt;br /&gt;
|parameter1 = Stream stream The [[openFile|file stream]] of the image, or String with a URL to a PNG file&lt;br /&gt;
|returnFail1 = bool false&lt;br /&gt;
|notes = The first parameter can be either a [[openFile|image file]], or a URL to a file on the internet.&amp;lt;br&amp;gt;&lt;br /&gt;
When using a URL, the file must be accessible by the &#039;&#039;&#039;client&#039;&#039;&#039;. The client will use it&#039;s own connection to grab the file and it must be publicly available.&amp;lt;br&amp;gt;&lt;br /&gt;
The texture object created by this function is sometimes referred to as a &amp;quot;surface&amp;quot; like in [[graphics.drawRectangle|graphics.drawRectangle]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=OnDrawnHUD&amp;diff=11388</id>
		<title>OnDrawnHUD</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=OnDrawnHUD&amp;diff=11388"/>
		<updated>2026-02-19T13:28:47Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{AlertInformationBox|This event is called many times per second. It is not recommended to run heavy code in this event}}&lt;br /&gt;
&lt;br /&gt;
{{ScriptItem2&lt;br /&gt;
|name = onDrawnHUD&lt;br /&gt;
|side = client&lt;br /&gt;
|type = event&lt;br /&gt;
|games = iii vc sa iv&lt;br /&gt;
|desc = the HUD is drawn, after it is drawn&lt;br /&gt;
|cancel = false&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Servers/GettingStarted&amp;diff=11387</id>
		<title>Servers/GettingStarted</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Servers/GettingStarted&amp;diff=11387"/>
		<updated>2026-02-19T13:27:02Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Getting Started}}&lt;br /&gt;
{{BlueInformationBox|1=This guide is for &#039;&#039;&#039;creating a server.&#039;&#039;&#039; If you just want to join a server and play, this guide is not for you. }}&lt;br /&gt;
== General Stages ==&lt;br /&gt;
&lt;br /&gt;
- Download the server files on the [https://gtaconnected.com/downloads Downloads] page.&amp;lt;br&amp;gt;&lt;br /&gt;
- Unzip/extract the server files to an empty folder.&amp;lt;br&amp;gt;&lt;br /&gt;
- Change settings in server.xml ([[ServerConfiguration|available settings]])&amp;lt;br&amp;gt;&lt;br /&gt;
- Run the server executable. For Windows, this will be &#039;&#039;Server.exe&#039;&#039;. For Linux, there are several options to do this, see the [[LinuxServer|linux server]] manual page.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GTA IV (Rockstar Modes) ==&lt;br /&gt;
First, remove the freeroam resource that comes with the server, by deleting the freeroam folder in resources. Then remove the &amp;lt;code&amp;gt;&amp;lt;resource src=&amp;quot;freeroam&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; line in [[ServerConfiguration|server config]]. The server should launch normally now, and connecting will place you into a generic rendezvous lobby, which uses party mode. You and other players who connect can use the phone in-game to start and join sessions.&lt;br /&gt;
&lt;br /&gt;
== GTA III, VC, SA, and IV (Custom Modes/Scripted) ==&lt;br /&gt;
There are some example scripts [https://github.com/VortrexFTW/v-essentials here]. If you&#039;re making your own scripts, at the very minimum you&#039;ll need to fade in the camera using [[gta.fadeCamera|gta.fadeCamera]] in a logical event such as in the [[OnPlayerJoined|onPlayerJoined]] event. The default resource provided with the server called &amp;quot;freeroam&amp;quot;, includes spawning the player and fading the camera, but is designed for GTA 3 only. &lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
Check the [[ServerManual|Server Manual]] page.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Check the [[Resources|resources]] page for information on how to use resources.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules extend the server with things like MySQL, SQlite, ini, etc. Check the [[Modules|modules]] page for information on how to use modules. There are some basic modules [https://forum.gtaconnected.com/index.php?board=24.0 on the forum]. Anybody with C/C++ skills can create a module using the [https://gtaconnected.com/downloads/ModuleSDK.7z module SDK].&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Servers/GettingStarted&amp;diff=11386</id>
		<title>Servers/GettingStarted</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Servers/GettingStarted&amp;diff=11386"/>
		<updated>2026-02-19T13:26:51Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Getting Started}}&lt;br /&gt;
{{YellowInformationBox|1=This guide is for &#039;&#039;&#039;creating a server.&#039;&#039;&#039; If you just want to join a server and play, this guide is not for you. }}&lt;br /&gt;
== General Stages ==&lt;br /&gt;
&lt;br /&gt;
- Download the server files on the [https://gtaconnected.com/downloads Downloads] page.&amp;lt;br&amp;gt;&lt;br /&gt;
- Unzip/extract the server files to an empty folder.&amp;lt;br&amp;gt;&lt;br /&gt;
- Change settings in server.xml ([[ServerConfiguration|available settings]])&amp;lt;br&amp;gt;&lt;br /&gt;
- Run the server executable. For Windows, this will be &#039;&#039;Server.exe&#039;&#039;. For Linux, there are several options to do this, see the [[LinuxServer|linux server]] manual page.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GTA IV (Rockstar Modes) ==&lt;br /&gt;
First, remove the freeroam resource that comes with the server, by deleting the freeroam folder in resources. Then remove the &amp;lt;code&amp;gt;&amp;lt;resource src=&amp;quot;freeroam&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; line in [[ServerConfiguration|server config]]. The server should launch normally now, and connecting will place you into a generic rendezvous lobby, which uses party mode. You and other players who connect can use the phone in-game to start and join sessions.&lt;br /&gt;
&lt;br /&gt;
== GTA III, VC, SA, and IV (Custom Modes/Scripted) ==&lt;br /&gt;
There are some example scripts [https://github.com/VortrexFTW/v-essentials here]. If you&#039;re making your own scripts, at the very minimum you&#039;ll need to fade in the camera using [[gta.fadeCamera|gta.fadeCamera]] in a logical event such as in the [[OnPlayerJoined|onPlayerJoined]] event. The default resource provided with the server called &amp;quot;freeroam&amp;quot;, includes spawning the player and fading the camera, but is designed for GTA 3 only. &lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
Check the [[ServerManual|Server Manual]] page.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Check the [[Resources|resources]] page for information on how to use resources.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
Modules extend the server with things like MySQL, SQlite, ini, etc. Check the [[Modules|modules]] page for information on how to use modules. There are some basic modules [https://forum.gtaconnected.com/index.php?board=24.0 on the forum]. Anybody with C/C++ skills can create a module using the [https://gtaconnected.com/downloads/ModuleSDK.7z module SDK].&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:AlertBox&amp;diff=11385</id>
		<title>Template:AlertBox</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:AlertBox&amp;diff=11385"/>
		<updated>2026-02-19T13:26:26Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:code|{{{1|undocumented-information}}}|id={{{id|unknownendpoint}}}|style=border: 1px solid black; background-color: {{{colour|rgba(255,255,0,0.3)}}}; padding: 5px;}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:icon-iii&amp;diff=11381</id>
		<title>Template:icon-iii</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:icon-iii&amp;diff=11381"/>
		<updated>2026-02-02T16:25:48Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:GTAIII_Logo.png|16px]]&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=entity.alpha&amp;diff=11380</id>
		<title>entity.alpha</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=entity.alpha&amp;diff=11380"/>
		<updated>2026-02-02T16:25:00Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|name = alpha&lt;br /&gt;
|side = client&lt;br /&gt;
|type = property&lt;br /&gt;
|class = Entity&lt;br /&gt;
|games = iii&lt;br /&gt;
|desc = fetch or set the alpha (transparency) for the entity&lt;br /&gt;
|return = int the alpha for the entity&lt;br /&gt;
|readonly = false&lt;br /&gt;
|notes = Alpha/Transparency values are 0-255, 0 being completely transparent and 255 being completely opaque.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:JSCode&amp;diff=11379</id>
		<title>Template:JSCode</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:JSCode&amp;diff=11379"/>
		<updated>2026-02-02T16:23:02Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:syntaxhighlight|{{{1|undocumented-javascript-code}}}|copy|lang=javascript|style=border-left: 3px solid #098C00; padding-left:5px;}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:LuaCode&amp;diff=11378</id>
		<title>Template:LuaCode</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:LuaCode&amp;diff=11378"/>
		<updated>2026-02-02T16:22:04Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:syntaxhighlight|{{{1|undocumented-lua-code}}}|copy|lang=lua|style=border-left: 3px solid blue; padding-left:5px;}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11377</id>
		<title>OnAddIVNetworkEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11377"/>
		<updated>2026-02-02T16:14:45Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|name = OnAddIVNetworkEvent&lt;br /&gt;
|side = shared&lt;br /&gt;
|type = event&lt;br /&gt;
|games = iv&lt;br /&gt;
|desc = when a built-in event is sent in GTA IV&lt;br /&gt;
|arg1 = Client client The client that sent the event&lt;br /&gt;
|arg2 = Type integer The type of event sent&lt;br /&gt;
|arg3 = Name string The name of the client&lt;br /&gt;
|arg4 = Data1 integer The 1st data arg&lt;br /&gt;
|arg5 = Data2 integer The 2nd data arg&lt;br /&gt;
|cancel = true&lt;br /&gt;
|notes = See [[Resources/GTAIV/Events|the IV events page]] for a list of event types&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11376</id>
		<title>Resources/GTAIV/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11376"/>
		<updated>2026-02-02T16:13:06Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:GTA IV Network Events}}&lt;br /&gt;
To be used with [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0 - REQUEST_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
1 - GIVE_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
2 - OBJECT_ID_FREED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
3 - WEAPON_DAMAGE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
4 - REQUEST_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
5 - GAME_CLOCK_AND_WEATHER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
6 - RESURRECT_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
7 - RESURRECTED_LOCAL_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
8 - GIVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
9 - REMOVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
10 - REMOVE_ALL_WEAPONS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
11 - VEHICLE_COMPONENT_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
12 - REQUEST_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
13 - START_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
14 - REQUEST_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
15 - START_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
16 - START_PROJECTILE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
17 - SESSION_SETTINGS_CHANGED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
18 - ALTER_WANTED_LEVEL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
19 - CREATE_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
20 - CHANGE_RADIO_STATION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
21 - UPDATE_GPS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
22 - RAGDOLL_REQUEST_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
23 - MARK_AS_NO_LONGER_NEEDED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
24 - PLAYER_TAUNT_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
25 - DOOR_BREAK_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
26 - HOST_VARIABLES_VERIFY_EVENT&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11375</id>
		<title>Resources/GTAIV/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11375"/>
		<updated>2026-02-02T16:12:54Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:GTA IV Network Events}}&lt;br /&gt;
To be used with [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0 - REQUEST_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
1 - GIVE_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
2 - OBJECT_ID_FREED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
3 - WEAPON_DAMAGE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
4 - REQUEST_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
5 - GAME_CLOCK_AND_WEATHER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
6 - RESURRECT_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
7 - RESURRECTED_LOCAL_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
8 - GIVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
9 - REMOVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
10 - REMOVE_ALL_WEAPONS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
11 - VEHICLE_COMPONENT_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
12 - REQUEST_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
13 - START_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
14 - REQUEST_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
15 - START_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
16 - START_PROJECTILE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
17 - SESSION_SETTINGS_CHANGED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
18 - ALTER_WANTED_LEVEL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
19 - CREATE_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
20 - CHANGE_RADIO_STATION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
21 - UPDATE_GPS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
22 - RAGDOLL_REQUEST_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
23 - MARK_AS_NO_LONGER_NEEDED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
24 - PLAYER_TAUNT_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
25 - DOOR_BREAK_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
26 - HOST_VARIABLES_VERIFY_EVENT&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11374</id>
		<title>Resources/GTAIV/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11374"/>
		<updated>2026-02-02T16:12:46Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:GTA IV Network Events}}&lt;br /&gt;
To be used with [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0 - REQUEST_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
1 - GIVE_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
2 - OBJECT_ID_FREED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
3 - WEAPON_DAMAGE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
4 - REQUEST_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
5 - GAME_CLOCK_AND_WEATHER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
6 - RESURRECT_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
7 - RESURRECTED_LOCAL_PLAYER_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
8 - GIVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
9 - REMOVE_WEAPON_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
10 - REMOVE_ALL_WEAPONS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
11 - VEHICLE_COMPONENT_CONTROL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
12 - REQUEST_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
13 - START_FIRE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
14 - REQUEST_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
15 - START_EXPLOSION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
16 - START_PROJECTILE_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
17 - SESSION_SETTINGS_CHANGED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
18 - ALTER_WANTED_LEVEL_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
19 - CREATE_PICKUP_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
20 - CHANGE_RADIO_STATION_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
21 - UPDATE_GPS_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
22 - RAGDOLL_REQUEST_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
23 - MARK_AS_NO_LONGER_NEEDED_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
24 - PLAYER_TAUNT_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
25 - DOOR_BREAK_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
26 - HOST_VARIABLES_VERIFY_EVENT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11373</id>
		<title>Resources/GTAIV/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11373"/>
		<updated>2026-02-02T16:11:54Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:GTA IV Network Events}}&lt;br /&gt;
To be used with [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
0 - REQUEST_CONTROL_EVENT&lt;br /&gt;
1 - GIVE_CONTROL_EVENT&lt;br /&gt;
2 - OBJECT_ID_FREED_EVENT&lt;br /&gt;
3 - WEAPON_DAMAGE_EVENT&lt;br /&gt;
4 - REQUEST_PICKUP_EVENT&lt;br /&gt;
5 - GAME_CLOCK_AND_WEATHER_EVENT&lt;br /&gt;
6 - RESURRECT_PLAYER_EVENT&lt;br /&gt;
7 - RESURRECTED_LOCAL_PLAYER_EVENT&lt;br /&gt;
8 - GIVE_WEAPON_EVENT&lt;br /&gt;
9 - REMOVE_WEAPON_EVENT&lt;br /&gt;
10 - REMOVE_ALL_WEAPONS_EVENT&lt;br /&gt;
11 - VEHICLE_COMPONENT_CONTROL_EVENT&lt;br /&gt;
12 - REQUEST_FIRE_EVENT&lt;br /&gt;
13 - START_FIRE_EVENT&lt;br /&gt;
14 - REQUEST_EXPLOSION_EVENT&lt;br /&gt;
15 - START_EXPLOSION_EVENT&lt;br /&gt;
16 - START_PROJECTILE_EVENT&lt;br /&gt;
17 - SESSION_SETTINGS_CHANGED_EVENT&lt;br /&gt;
18 - ALTER_WANTED_LEVEL_EVENT&lt;br /&gt;
19 - CREATE_PICKUP_EVENT&lt;br /&gt;
20 - CHANGE_RADIO_STATION_EVENT&lt;br /&gt;
21 - UPDATE_GPS_EVENT&lt;br /&gt;
22 - RAGDOLL_REQUEST_EVENT&lt;br /&gt;
23 - MARK_AS_NO_LONGER_NEEDED_EVENT&lt;br /&gt;
24 - PLAYER_TAUNT_EVENT&lt;br /&gt;
25 - DOOR_BREAK_EVENT&lt;br /&gt;
26 - HOST_VARIABLES_VERIFY_EVENT&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11372</id>
		<title>Resources/GTAIV/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Resources/GTAIV/Events&amp;diff=11372"/>
		<updated>2026-02-02T16:10:55Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;0 - REQUEST_CONTROL_EVENT 1 - GIVE_CONTROL_EVENT 2 - OBJECT_ID_FREED_EVENT 3 - WEAPON_DAMAGE_EVENT 4 - REQUEST_PICKUP_EVENT 5 - GAME_CLOCK_AND_WEATHER_EVENT 6 - RESURRECT_PLAYER_EVENT 7 - RESURRECTED_LOCAL_PLAYER_EVENT 8 - GIVE_WEAPON_EVENT 9 - REMOVE_WEAPON_EVENT 10 - REMOVE_ALL_WEAPONS_EVENT 11 - VEHICLE_COMPONENT_CONTROL_EVENT 12 - REQUEST_FIRE_EVENT 13 - START_FIRE_EVENT 14 - REQUEST_EXPLOSION_EVENT 15 - START_EXPLOSION_EVENT 16 - START_PROJECTILE_EVENT 17 - SESSION_...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;0 - REQUEST_CONTROL_EVENT&lt;br /&gt;
1 - GIVE_CONTROL_EVENT&lt;br /&gt;
2 - OBJECT_ID_FREED_EVENT&lt;br /&gt;
3 - WEAPON_DAMAGE_EVENT&lt;br /&gt;
4 - REQUEST_PICKUP_EVENT&lt;br /&gt;
5 - GAME_CLOCK_AND_WEATHER_EVENT&lt;br /&gt;
6 - RESURRECT_PLAYER_EVENT&lt;br /&gt;
7 - RESURRECTED_LOCAL_PLAYER_EVENT&lt;br /&gt;
8 - GIVE_WEAPON_EVENT&lt;br /&gt;
9 - REMOVE_WEAPON_EVENT&lt;br /&gt;
10 - REMOVE_ALL_WEAPONS_EVENT&lt;br /&gt;
11 - VEHICLE_COMPONENT_CONTROL_EVENT&lt;br /&gt;
12 - REQUEST_FIRE_EVENT&lt;br /&gt;
13 - START_FIRE_EVENT&lt;br /&gt;
14 - REQUEST_EXPLOSION_EVENT&lt;br /&gt;
15 - START_EXPLOSION_EVENT&lt;br /&gt;
16 - START_PROJECTILE_EVENT&lt;br /&gt;
17 - SESSION_SETTINGS_CHANGED_EVENT&lt;br /&gt;
18 - ALTER_WANTED_LEVEL_EVENT&lt;br /&gt;
19 - CREATE_PICKUP_EVENT&lt;br /&gt;
20 - CHANGE_RADIO_STATION_EVENT&lt;br /&gt;
21 - UPDATE_GPS_EVENT&lt;br /&gt;
22 - RAGDOLL_REQUEST_EVENT&lt;br /&gt;
23 - MARK_AS_NO_LONGER_NEEDED_EVENT&lt;br /&gt;
24 - PLAYER_TAUNT_EVENT&lt;br /&gt;
25 - DOOR_BREAK_EVENT&lt;br /&gt;
26 - HOST_VARIABLES_VERIFY_EVENT&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:Server/Events/GTAIV&amp;diff=11371</id>
		<title>Template:Server/Events/GTAIV</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:Server/Events/GTAIV&amp;diff=11371"/>
		<updated>2026-02-02T16:09:40Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{icon-iv}} OnAddIVNetworkEvent&amp;lt;br&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{icon-iv}} [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Module:ScriptItem2&amp;diff=11370</id>
		<title>Module:ScriptItem2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Module:ScriptItem2&amp;diff=11370"/>
		<updated>2026-01-31T02:46:27Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- settings&lt;br /&gt;
p.categoryItems = {&lt;br /&gt;
	-- Category Name		= table. (Fully resolved item name(s), case-sensitive.) (Event names must start with a capital letter &amp;quot;O&amp;quot;, to match the dumpdoc XML.)&lt;br /&gt;
	[&#039;Audio&#039;]				= {&#039;gta.addOneOffSound&#039;, &#039;gta.playFrontEndSound&#039;, &#039;gta.playSuspectLastSeen&#039;},&lt;br /&gt;
	[&#039;Camera&#039;]				= {&#039;gta.fading&#039;},&lt;br /&gt;
	[&#039;Chatbox&#039;]				= {&#039;message&#039;, &#039;messageClient&#039;, &#039;messageAllExcept&#039;, &#039;setChatWindowEnabled&#039;, &#039;OnChatOutput&#039;},&lt;br /&gt;
	[&#039;Cursor&#039;]				= {&#039;gta.getMouseSpeed&#039;},&lt;br /&gt;
	[&#039;CustomText&#039;]			= {&#039;gta.setCustomText&#039;, &#039;gta.setCustomText&#039;, &#039;gta.clearCustomText&#039;, &#039;gta.printBig&#039;},&lt;br /&gt;
	[&#039;Drawing&#039;]				= {&#039;gta.drawRectangle&#039;},&lt;br /&gt;
	[&#039;Effect&#039;]				= {&#039;gta.addParticleEffect&#039;, &#039;addParticleEffect&#039;, &#039;gta.addMovingParticleEffect&#039;, &#039;addMovingParticleEffect&#039;, &#039;gta.createSingleParticle&#039;, &#039;createSingleParticle&#039;},&lt;br /&gt;
	[&#039;Font&#039;]				= {&#039;font.render&#039;},&lt;br /&gt;
	[&#039;GarbageCollection&#039;]	= {&#039;collectAllGarbage&#039;},&lt;br /&gt;
	[&#039;Game&#039;]				= {&#039;gta.game&#039;, &#039;gta.standardControls&#039;, &#039;gta.gameSpeed&#039;, &#039;gta.loadDFF&#039;, &#039;gta.loadTXD&#039;, &#039;gta.loadCOL&#039;},&lt;br /&gt;
	[&#039;GameStat&#039;]			= {&#039;gta.setGameStat&#039;, &#039;gta.getGameStat&#039;},&lt;br /&gt;
    [&#039;GTAIV&#039;]				= {&#039;OnAddIVNetworkEvent&#039;},&lt;br /&gt;
	[&#039;GUI&#039;]					= {&#039;OnGUIClick&#039;},&lt;br /&gt;
	[&#039;Key&#039;]					= {&#039;isScancodePressed&#039;, &#039;OnCharacter&#039;},&lt;br /&gt;
	[&#039;KillFrenzy&#039;]			= {&#039;gta.startKillFrenzy&#039;},&lt;br /&gt;
	[&#039;Message&#039;]				= {&#039;gta.clearMessages&#039;, &#039;gta.smallMessage&#039;, &#039;gta.bigMessage&#039;, &#039;gta.pagerMessage&#039;},&lt;br /&gt;
	[&#039;Miscellaneous&#039;]		= {&#039;platform&#039;, &#039;toColour&#039;, &#039;gta.tickCount&#039;, &#039;getRandomSkin&#039;, &#039;gta.getRandomSkin&#039;, &#039;gta.processLineOfSight&#039;, &#039;processLineOfSight&#039;, &#039;gta.setIsland&#039;, &#039;gta.setDefaultInteriors&#039;},&lt;br /&gt;
	[&#039;Network&#039;]				= {&#039;isConnected&#039;, &#039;isConnecting&#039;, &#039;connect&#039;, &#039;disconnect&#039;, &#039;triggerNetworkEvent&#039;, &#039;OnDisconnect&#039;},&lt;br /&gt;
	[&#039;Path&#039;]				= {&#039;gta.trafficDensity&#039;, &#039;gta.setTrafficEnabled&#039;, &#039;setTrafficEnabled&#039;, &#039;gta.setCiviliansEnabled&#039;, &#039;setCiviliansEnabled&#039;},&lt;br /&gt;
	[&#039;Ped&#039;]					= {&#039;gta.tommyFatness&#039;},&lt;br /&gt;
	[&#039;Radio&#039;]				= {&#039;gta.setRadioChannel&#039;, &#039;gta.forceRadioChannel&#039;},&lt;br /&gt;
	[&#039;Reflection&#039;]			= {&#039;exportFunction&#039;, &#039;setErrorMode&#039;},&lt;br /&gt;
	[&#039;Renderware&#039;]			= {&#039;gta.rwRenderStateSet&#039;},&lt;br /&gt;
	[&#039;SaveGame&#039;]			= {&#039;gta.saveGame&#039;},&lt;br /&gt;
	[&#039;Screen&#039;]				= {&#039;gta.aspectRatio&#039;, &#039;gta.width&#039;, &#039;gta.height&#039;},&lt;br /&gt;
	[&#039;Script&#039;]				= {&#039;gta.terminateScript&#039;, &#039;gta.getActiveScripts&#039;, &#039;gta.scriptCommand&#039;},&lt;br /&gt;
	[&#039;Timer&#039;]				= {&#039;setImmediate&#039;, &#039;clearImmediate&#039;, &#039;setInterval&#039;, &#039;clearInterval&#039;, &#039;setTimeout&#039;, &#039;clearTimeout&#039;},&lt;br /&gt;
	[&#039;Weather&#039;]				= {&#039;snowing&#039;, &#039;forceSnowing&#039;},&lt;br /&gt;
	[&#039;Window&#039;]				= {&#039;OnFocus&#039;, &#039;OnLostFocus&#039;},&lt;br /&gt;
	[&#039;World&#039;]				= {&#039;gta.ssvBridgeEnabled&#039;, &#039;gta.planesEnabled&#039;, &#039;gta.trainsEnabled&#039;, &#039;setPlanesEnabled&#039;, &#039;setTrainsEnabled&#039;, &#039;world&#039;, &#039;gta.findGroundZForCoord&#039;, &#039;findGroundZForCoord&#039;, &#039;gta.setTrainsEnabled&#039;, &#039;gta.setPlanesEnabled&#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p.categoryWords = {&lt;br /&gt;
	-- Category Names. (String(s) to look for in an item name, case-INsensitive.)&lt;br /&gt;
	&#039;Blip&#039;, &#039;Building&#039;, &#039;Camera&#039;, &#039;Chatbox&#039;, &#039;Cheat&#039;, &#039;Client&#039;, &#039;Command&#039;, &#039;Cursor&#039;, &#039;Debug&#039;, &#039;Dodo&#039;,&lt;br /&gt;
	&#039;Element&#039;, &#039;Entity&#039;, &#039;Event&#039;, &#039;File&#039;, &#039;Font&#039;, &#039;Garage&#039;, &#039;GTAIV&#039;, &#039;HTTP&#039;, &#039;HUD&#039;, &#039;Key&#039;, &#039;Mission&#039;, &#039;Mouse&#039;, &#039;NetFlags&#039;, &#039;Network&#039;, &#039;Object&#039;,&lt;br /&gt;
	&#039;Pause&#039;, &#039;Ped&#039;, &#039;Pickup&#039;, &#039;Player&#039;, &#039;Process&#039;, &#039;Render&#039;, &#039;Resource&#039;, &#039;Screen&#039;, &#039;Socket&#039;, &#039;Sphere&#039;, &#039;Time&#039;, &#039;Vehicle&#039;, &#039;Weather&#039;, &#039;World&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- entry point&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;variable&#039; then&lt;br /&gt;
		return p.showVariablePage(frame)&lt;br /&gt;
	elseif args.type == &#039;function&#039; then&lt;br /&gt;
		return p.showFunctionPage(frame)&lt;br /&gt;
	elseif args.type == &#039;property&#039; then&lt;br /&gt;
		return p.showPropertyPage(frame)&lt;br /&gt;
	elseif args.type == &#039;method&#039; then&lt;br /&gt;
		return p.showMethodPage(frame)&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		return p.showEventPage(frame)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;This page has been documented incorrectly, &#039;&#039;&#039;type&#039;&#039;&#039; is missing.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item page types&lt;br /&gt;
function p.showVariablePage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Value&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showFunctionPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Return&amp;quot;, &amp;quot;Callbacks&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showPropertyPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Value&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showMethodPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Return&amp;quot;, &amp;quot;Callbacks&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showEventPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Attributes&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item page&lt;br /&gt;
function p.showPage(frame, parts)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.type ~= &#039;event&#039; then&lt;br /&gt;
		table.insert(parts, &amp;quot;Types&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	--table.insert(parts, &amp;quot;Symbols&amp;quot;)&lt;br /&gt;
	local lines = p.getPageTopLines(frame)&lt;br /&gt;
	for i,part in ipairs({&amp;quot;Notes&amp;quot;, &amp;quot;Examples&amp;quot;, &amp;quot;Compatibility&amp;quot;, &amp;quot;Related&amp;quot;}) do&lt;br /&gt;
		table.insert(parts, part)&lt;br /&gt;
	end&lt;br /&gt;
	for i,part in ipairs(parts) do&lt;br /&gt;
		local data = p[part:lower() == &#039;return&#039; and &#039;returns&#039; or part:lower()](frame)&lt;br /&gt;
		if data and #data &amp;gt; 0 then&lt;br /&gt;
			if part == &#039;Settable&#039; then&lt;br /&gt;
				part = args.readonly == &#039;true&#039; and &#039;Read-Only&#039; or &#039;Read and Set&#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, &#039;== &#039;..part..&#039; ==&#039;)&lt;br /&gt;
			table.insert(lines, data)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(lines, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageTopLines(frame)&lt;br /&gt;
	local lines = {}&lt;br /&gt;
	table.insert(lines, frame:preprocess(&amp;quot;{{DISPLAYTITLE:&amp;quot;..p.getDisplayedName(frame)..&amp;quot;}}&amp;quot;))&lt;br /&gt;
	table.insert(lines, &amp;quot;__NOTOC__&amp;quot;..p.getPageTopBoxes(frame)..&amp;quot;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;Available since &amp;quot;..p.since(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 6px;&#039;&amp;gt;\n&amp;quot;..p.syntax(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;\n&amp;quot;..p.description(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	return lines&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageTopBoxes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local topBoxes = { &amp;quot;type&amp;quot;, &amp;quot;side&amp;quot;, &amp;quot;games&amp;quot;, &amp;quot;online&amp;quot; }&lt;br /&gt;
	if args.type == &#039;variable&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		table.insert(topBoxes, &amp;quot;settable&amp;quot;)&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		table.insert(topBoxes, &amp;quot;cancellable&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local outBoxes = {}&lt;br /&gt;
	for i,topBox in ipairs(topBoxes) do&lt;br /&gt;
		table.insert(outBoxes, p[topBox..&amp;quot;Box&amp;quot;](frame))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(outBoxes, &#039; &#039;)..&amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- template arguments&lt;br /&gt;
function p.getArgs(frame)&lt;br /&gt;
	if p.argsCache then&lt;br /&gt;
		return p.argsCache&lt;br /&gt;
	else&lt;br /&gt;
		local args = frame:getParent().args&lt;br /&gt;
		p.copyOldToNewForTemplateArguments(frame, args)&lt;br /&gt;
		p.copyNonIndexedToIndexedTemplateArguments(frame, args)&lt;br /&gt;
		p.populateTypeSpecificTemplateArguments(frame, args)&lt;br /&gt;
		p.populateDefaultTemplateArguments(frame, args)&lt;br /&gt;
		p.argsCache = args&lt;br /&gt;
		return args&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyOldToNewForTemplateArguments(frame, args)&lt;br /&gt;
	--[[&lt;br /&gt;
	if args.parameters then&lt;br /&gt;
		args.syntax = args.parameters&lt;br /&gt;
	end&lt;br /&gt;
	if args.parametersSS then&lt;br /&gt;
		args.syntaxSS = args.parametersSS&lt;br /&gt;
	end&lt;br /&gt;
	if args.parametersCS then&lt;br /&gt;
		args.syntaxCS = args.parametersCS&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackParameters then&lt;br /&gt;
		args.callbackSyntax = args.callbackParameters&lt;br /&gt;
	end&lt;br /&gt;
	if args.callbackParametersSS then&lt;br /&gt;
		args.callbackSyntaxSS = args.callbackParametersSS&lt;br /&gt;
	end&lt;br /&gt;
	if args.callbackParametersCS then&lt;br /&gt;
		args.callbackSyntaxCS = args.callbackParametersCS&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;event&#039; then&lt;br /&gt;
		if args.callbackParameters then&lt;br /&gt;
			args.syntax = args.callbackParameters&lt;br /&gt;
		end&lt;br /&gt;
		if args.callbackParametersSS then&lt;br /&gt;
			args.syntaxSS = args.callbackParametersSS&lt;br /&gt;
		end&lt;br /&gt;
		if args.callbackParametersCS then&lt;br /&gt;
			args.syntaxCS = args.callbackParametersCS&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.returnType or args.returnTypes then&lt;br /&gt;
		local returnType = args.returnType and args.returnType or args.returnTypes&lt;br /&gt;
		if args.returnInfo then&lt;br /&gt;
			args.return1 = returnType..&amp;quot; &amp;quot;..args.returnInfo&lt;br /&gt;
			args.value = returnType..&amp;quot; &amp;quot;..args.returnInfo&lt;br /&gt;
		else&lt;br /&gt;
			args.return1 = returnType&lt;br /&gt;
			args.value = returnType&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	if args[&#039;return&#039;] then&lt;br /&gt;
		args.value = args[&#039;return&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.usage then&lt;br /&gt;
		args.desc = args.usage&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.notes then&lt;br /&gt;
		local notes = p.splitLines(args.notes)&lt;br /&gt;
		for i,note in ipairs(notes) do&lt;br /&gt;
			args[&#039;note&#039;..i] = note&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local exampleKeys = {&lt;br /&gt;
		&#039;example&#039;, &#039;exampleSS&#039;, &#039;exampleCS&#039;, &#039;exampleJS&#039;, &#039;exampleLua&#039;, &#039;exampleSquirrel&#039;,&lt;br /&gt;
		&#039;exampleJSSS&#039;, &#039;exampleJSCS&#039;, &#039;exampleLuaSS&#039;, &#039;exampleLuaCS&#039;, &#039;exampleSquirrelSS&#039;, &#039;exampleSquirrelCS&#039;&lt;br /&gt;
	}&lt;br /&gt;
	for i,exampleKey in ipairs(exampleKeys) do&lt;br /&gt;
		if args[exampleKey] then&lt;br /&gt;
			local examples = p.split(args[exampleKey], &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
			for i,example in ipairs(examples) do&lt;br /&gt;
				args[exampleKey..i] = example&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.bcName and args.bcMaxVersion then&lt;br /&gt;
		args.previous1 = args.bcName..&amp;quot; &amp;quot;..args.bcMaxVersion&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyNonIndexedToIndexedTemplateArguments(frame, args)&lt;br /&gt;
	if args.description then&lt;br /&gt;
		args.description1 = args.description&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.populateTypeSpecificTemplateArguments(frame, args)&lt;br /&gt;
	if args.type == &#039;variable&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		if args.value then&lt;br /&gt;
			local tokens = p.split(args.value, &#039; &#039;)&lt;br /&gt;
			local type = tokens[1]&lt;br /&gt;
			&lt;br /&gt;
			local name&lt;br /&gt;
			if args.type == &#039;property&#039; then&lt;br /&gt;
				name = args.class..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
			else&lt;br /&gt;
				name = args.name&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			args.syntax = type..&amp;quot; &amp;quot;..name&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.populateDefaultTemplateArguments(frame, args)&lt;br /&gt;
	if not args.since then&lt;br /&gt;
		args.since = &amp;quot;1.0.0 1.0.0&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.syntax and args.syntax:lower() == &amp;quot;void&amp;quot; then&lt;br /&gt;
		args.parameter1 = &amp;quot;void&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item top boxes&lt;br /&gt;
function p.typeBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local typeText = p.getType(args.type)&lt;br /&gt;
	return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {typeText,id=&#039;type&#039;});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sideBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local sideText, isShared = p.getSide(args.side)&lt;br /&gt;
	if isShared then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {sideText,id=&#039;side&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {sideText,id=&#039;side&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.gamesBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local gamesText = p.getGames(args.games)&lt;br /&gt;
&lt;br /&gt;
	local games2 = { &#039;iii&#039;, &#039;vc&#039;, &#039;sa&#039;, &#039;iv&#039; }&lt;br /&gt;
	local counter = 0&lt;br /&gt;
	for i2,game2 in ipairs(games2) do&lt;br /&gt;
		if gamesText:lower():find(game2) then&lt;br /&gt;
			counter = counter + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if counter == #games2 or gamesText == &amp;quot;All Games&amp;quot; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {table.concat({&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-iii&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-vc&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-sa&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-iv&#039;)&lt;br /&gt;
		}, &#039; &#039;), id=&#039;games&#039;})&lt;br /&gt;
	else&lt;br /&gt;
		local games = { &#039;iii&#039;, &#039;vc&#039;, &#039;sa&#039;, &#039;iv&#039; }&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for i,game in ipairs(games) do&lt;br /&gt;
			if gamesText:lower():find(game) then&lt;br /&gt;
				table.insert(out, p.loadTemplate(frame, &#039;icon-&#039;..game, {}))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {table.concat(out, &#039; &#039;), id=&#039;games&#039;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.onlineBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.sp == &#039;true&#039; or args.online == &#039;false&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Offline Only&#039;,id=&#039;online&#039;});&lt;br /&gt;
	elseif args.sp == &#039;false&#039; or args.offline == &#039;false&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Online Only&#039;,id=&#039;online&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Online and Offline&#039;,id=&#039;online&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.settableBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Read-Only&#039;,id=&#039;settable&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Read and Set&#039;,id=&#039;settable&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.cancellableBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isCancellable(frame)then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Cancellable&#039;,id=&#039;cancellable&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Not Cancellable&#039;,id=&#039;cancellable&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item parts&lt;br /&gt;
function p.since(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if not args.since then&lt;br /&gt;
		return p.documentationMissing(frame, &amp;quot;Available since&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local sideVersions = p.getSideVersions(args.since, args.side)&lt;br /&gt;
		if #sideVersions == 2 then&lt;br /&gt;
			return &amp;quot;&#039;&#039;&#039;Server &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;Client &amp;quot;..sideVersions[2]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			if args.side == &#039;server&#039; then&lt;br /&gt;
				return &amp;quot;&#039;&#039;&#039;Server &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
			elseif args.side == &#039;client&#039; then&lt;br /&gt;
				return &amp;quot;&#039;&#039;&#039;Client &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				return p.documentationMissing(frame, &amp;quot;Available since (Both server and client version is needed for shared items)&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.syntax(frame)&lt;br /&gt;
	--[[&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.syntax then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntax),id=&#039;syntax&#039;})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.syntaxSS and args.syntaxCS then&lt;br /&gt;
		local rows = {}&lt;br /&gt;
		rows[1] = { &amp;quot;&#039;&#039;&#039;Server:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntaxSS),id=&#039;syntaxss&#039;}) }&lt;br /&gt;
		rows[2] = { &amp;quot;&#039;&#039;&#039;Client:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntaxCS),id=&#039;syntaxcs&#039;}) }&lt;br /&gt;
		return p.table(false, rows, { 100 }, false)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.documentationMissing(frame, &amp;quot;Syntax&amp;quot;)&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local isEvent = args.type == &#039;event&#039;&lt;br /&gt;
&lt;br /&gt;
	local returnType = &#039;void&#039;&lt;br /&gt;
	local argsText = {}&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
&lt;br /&gt;
		if #entries == 0 then&lt;br /&gt;
		else&lt;br /&gt;
			local tokens = p.split(entries[1], &#039; &#039;)&lt;br /&gt;
			&lt;br /&gt;
			returnType = tokens[1]&lt;br /&gt;
			returnType = p.standardizeNullType(returnType)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
&lt;br /&gt;
		if isEvent then&lt;br /&gt;
			table.insert(entries, 1, &#039;Event event&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if isEvent and args.syntax and args.syntax:lower() == &#039;event event&#039; then&lt;br /&gt;
		elseif #entries == 0 or entries[1] == &amp;quot;void&amp;quot; then&lt;br /&gt;
		else&lt;br /&gt;
			for i,arg in ipairs(entries) do&lt;br /&gt;
                table.insert(argsText, p.getArgSyntaxText(p.getArgParts(arg)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			p.getDisplayedName(frame)&lt;br /&gt;
			..&#039;(&#039;..(#argsText == 0 and &#039;void&#039; or table.concat(argsText, &#039;, &#039;))..&#039;)&#039;&lt;br /&gt;
		})&lt;br /&gt;
	elseif args.type == &#039;property&#039; or args.type == &#039;variable&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			returnType..&#039; &#039;..p.getDisplayedName(frame)&lt;br /&gt;
		})&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			returnType&lt;br /&gt;
			..&#039; &#039;..p.getDisplayedName(frame)&lt;br /&gt;
			..&#039;(&#039;..(#argsText == 0 and &#039;void&#039; or table.concat(argsText, &#039;, &#039;))..&#039;)&#039;&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getArgParts(text)&lt;br /&gt;
	--[[&lt;br /&gt;
        INPUT EXAMPLES (str)&lt;br /&gt;
        Vec3 pos The 3D position&lt;br /&gt;
        [Vec3 pos] The 3D position.&lt;br /&gt;
        [ Vec3 pos ] The 3D position&lt;br /&gt;
        [ Vec3 pos = new Vec3(0.0, 0.0, 0.0) ] The 3D position.&lt;br /&gt;
&lt;br /&gt;
        OUTPUT (table)&lt;br /&gt;
        bool parts.optional&lt;br /&gt;
        bool parts.defaultValueIsSpecified&lt;br /&gt;
		str parts.type&lt;br /&gt;
		str parts.name&lt;br /&gt;
		str parts.defaultValue&lt;br /&gt;
		str parts.description&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
&lt;br /&gt;
	text = p.trim(text)&lt;br /&gt;
&lt;br /&gt;
    parts.optional = false&lt;br /&gt;
	local isProbablyOptional = text:sub(1, 1) == &#039;[&#039;&lt;br /&gt;
	if isProbablyOptional then&lt;br /&gt;
		local optionalEndIndex = p.rfind(text, &#039;]&#039;)&lt;br /&gt;
		if optionalEndIndex then&lt;br /&gt;
            parts.optional = true&lt;br /&gt;
            local syntaxPart = p.trim(text:sub(2, optionalEndIndex - 1))&lt;br /&gt;
            parts.description = p.trim(text:sub(optionalEndIndex + 1, #text))&lt;br /&gt;
            local tokens = p.split(syntaxPart, &#039; &#039;)&lt;br /&gt;
            parts.type = tokens[1]&lt;br /&gt;
            parts.name = tokens[2]&lt;br /&gt;
            parts.defaultValueIsSpecified = tokens[3] == &#039;=&#039; and #tokens &amp;gt;= 4&lt;br /&gt;
            parts.defaultValue = table.concat(tokens, &#039; &#039;, 4, #tokens)&lt;br /&gt;
            return parts&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local tokens = p.split(text, &#039; &#039;)&lt;br /&gt;
    parts.type = tokens[1]&lt;br /&gt;
    parts.name = tokens[2]&lt;br /&gt;
    parts.description = p.trim(table.concat(tokens, &#039; &#039;, 3, #tokens))&lt;br /&gt;
    return parts&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getArgSyntaxText(parts)&lt;br /&gt;
    if parts.optional then&lt;br /&gt;
        if parts.defaultValueIsSpecified then&lt;br /&gt;
            return &#039;[ &#039;..parts.type..&#039; &#039;..parts.name..&#039; = &#039;..parts.defaultValue..&#039; ]&#039;&lt;br /&gt;
        else&lt;br /&gt;
            return &#039;[ &#039;..parts.type..&#039; &#039;..parts.name..&#039; ]&#039;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return parts.type..&#039; &#039;..parts.name&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.description(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;desc&#039;)&lt;br /&gt;
	&lt;br /&gt;
	local startTextFirstLine = &amp;quot;The &amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace;\&amp;quot;&amp;gt;&amp;quot;..p.getDisplayedNameColoured(frame)..&amp;quot;&amp;lt;/span&amp;gt; &amp;quot;..args.type:lower()..&amp;quot; is &amp;quot;..(args.type == &amp;quot;event&amp;quot; and &amp;quot;invoked when&amp;quot; or &amp;quot;used to&amp;quot;)..&amp;quot; &amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		if i == 1 then&lt;br /&gt;
			entry = startTextFirstLine..entry&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		entries[i] = p.formatDescription(entry)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(entries, &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parameters(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	local isEvent = args.type == &#039;event&#039;&lt;br /&gt;
	&lt;br /&gt;
	if isEvent and args.syntax and args.syntax:lower() == &#039;event event&#039; then&lt;br /&gt;
	elseif #entries == 0 or entries[1] == &amp;quot;void&amp;quot; then&lt;br /&gt;
		local headers = nil&lt;br /&gt;
		local rows = { { p.formatType(&amp;quot;void&amp;quot;, frame), &amp;quot;This &amp;quot;..args.type..&amp;quot; doesn&#039;t take any parameters.&amp;quot; } }&lt;br /&gt;
		local widths = { 120, 400 }&lt;br /&gt;
		return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		for i,arg in ipairs(entries) do&lt;br /&gt;
			local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
			if isEvent then&lt;br /&gt;
				rows[i] = { (i + 1)..&amp;quot;) &amp;quot;, p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), p.formatDescription(table.concat(tokens, &#039; &#039;, 3, #tokens)) }&lt;br /&gt;
			else&lt;br /&gt;
				local parts = p.getArgParts(arg)&lt;br /&gt;
&lt;br /&gt;
				if parts.optional then&lt;br /&gt;
					if parts.defaultValueIsSpecified then&lt;br /&gt;
						rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), &amp;quot;Optional, defaults to &amp;quot;..p.formatDefaultValue(parts.defaultValue, frame)..&amp;quot;. &amp;quot;..p.formatDescription(parts.description) }&lt;br /&gt;
					else&lt;br /&gt;
						rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), &amp;quot;Optional, the default value has not been documented here yet. &amp;quot;..p.formatDescription(parts.description) }&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), p.formatDescription(parts.description) }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		table.insert(rows, 1, { &amp;quot;1) &amp;quot;, p.formatType(&amp;quot;Event&amp;quot;, frame), p.formatName(&amp;quot;event&amp;quot;, frame), &amp;quot;The event object for this event.&amp;quot; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local headers, widths&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 30, 80, 110, 400 }&lt;br /&gt;
	else&lt;br /&gt;
		headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Presence&amp;quot;, &amp;quot;Default Value&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 30, 80, 110, 400 }&lt;br /&gt;
	end&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-parameters wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.returns(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local text = &amp;quot;&amp;quot;&lt;br /&gt;
	local entries&lt;br /&gt;
	local rows&lt;br /&gt;
	local headers&lt;br /&gt;
	local widths&lt;br /&gt;
	local isVoidReturn = false&lt;br /&gt;
	&lt;br /&gt;
	rows = {}&lt;br /&gt;
	entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		text = text..p.documentationMissing(frame, &amp;quot;Returns&amp;quot;)..&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		for i,arg in ipairs(entries) do&lt;br /&gt;
			local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
			&lt;br /&gt;
			local type = tokens[1]&lt;br /&gt;
			type = p.standardizeNullType(type)&lt;br /&gt;
			&lt;br /&gt;
			local description&lt;br /&gt;
			if type:lower() == &amp;quot;void&amp;quot; then&lt;br /&gt;
				isVoidReturn = true&lt;br /&gt;
				description = &amp;quot;This &amp;quot;..args.type..&amp;quot; doesn&#039;t return a value.&amp;quot;&lt;br /&gt;
			elseif tokens[2] then&lt;br /&gt;
				description = p.formatDescription(table.concat(tokens, &#039; &#039;, 2))&lt;br /&gt;
			else&lt;br /&gt;
				description = p.documentationMissing(frame, &amp;quot;Description for return value&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			rows[i] = { p.formatType(tokens[1], frame), description }&lt;br /&gt;
		end&lt;br /&gt;
		headers = nil-- { &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 120, 400 }&lt;br /&gt;
		text = text..p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	-- commented out as failure returns are not currently implemented in GTAC.&lt;br /&gt;
	if not isVoidReturn then&lt;br /&gt;
		rows = {}&lt;br /&gt;
		entries = p.getIndexedArgs(frame, &#039;freturn&#039;)&lt;br /&gt;
		text = text..&amp;quot;&#039;&#039;&#039;Failure Return:&#039;&#039;&#039;\n\n&amp;quot;&lt;br /&gt;
		if #entries == 0 then&lt;br /&gt;
			text = text..p.documentationMissing(frame, &amp;quot;Failure returns&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			for i,arg in ipairs(entries) do&lt;br /&gt;
				local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
				&lt;br /&gt;
				local type = tokens[1]&lt;br /&gt;
				type = p.standardizeNullType(type)&lt;br /&gt;
				&lt;br /&gt;
				local value&lt;br /&gt;
				if type:lower() == &#039;void&#039; then&lt;br /&gt;
					value = &amp;quot;n/a&amp;quot;&lt;br /&gt;
				elseif tokens[2] then&lt;br /&gt;
					value = p.formatSource(table.concat(tokens, &#039; &#039;, 2), frame)&lt;br /&gt;
				else&lt;br /&gt;
					value = p.formatSource(p.documentationMissing(frame, &amp;quot;Description for failure return value&amp;quot;), frame)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				rows[i] = { p.formatType(tokens[1], frame), value }&lt;br /&gt;
			end&lt;br /&gt;
			headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Value&amp;quot; }&lt;br /&gt;
			widths = { 120, 400 }&lt;br /&gt;
			text = text..p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.callbacks(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local suffixes = {&lt;br /&gt;
		{ &#039;&#039;, &#039;&#039; },&lt;br /&gt;
		{ &#039;SS&#039;, &#039;Server-Side Callbacks&#039; },&lt;br /&gt;
		{ &#039;CS&#039;, &#039;Client-Side Callbacks&#039; }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local html = {}&lt;br /&gt;
	&lt;br /&gt;
	for i3,suffixData in ipairs(suffixes) do&lt;br /&gt;
		local suffix = suffixData[1]&lt;br /&gt;
		&lt;br /&gt;
		local parameters = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
		for i=1, #parameters do&lt;br /&gt;
			local callbackSyntax = {}&lt;br /&gt;
			local callbackText = args[&#039;cb&#039;..i..&#039;Text&#039;..suffix]&lt;br /&gt;
			local callbackNParameters = p.getIndexedArgs(frame, &#039;cb&#039;..i..&#039;arg&#039;..suffix)&lt;br /&gt;
			&lt;br /&gt;
			if #callbackNParameters &amp;gt; 0 then&lt;br /&gt;
				if suffixData[1] ~= &#039;&#039; then&lt;br /&gt;
					table.insert(html, &amp;quot;&#039;&#039;&#039;&amp;quot;..suffixData[2]..&amp;quot;&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local parameterTokens = p.split(parameters[i], &#039; &#039;)&lt;br /&gt;
				local rows = {}&lt;br /&gt;
				&lt;br /&gt;
				for i2,callbackNParameter in ipairs(callbackNParameters) do&lt;br /&gt;
					local callbackTokens = p.split(callbackNParameter, &#039; &#039;)&lt;br /&gt;
					&lt;br /&gt;
					local parameterType = callbackTokens[1]&lt;br /&gt;
					local parameterName = callbackTokens[2]&lt;br /&gt;
					local description = p.formatDescription(table.concat(callbackTokens, &#039; &#039;, 3))&lt;br /&gt;
					&lt;br /&gt;
					do&lt;br /&gt;
						if parameterType == &amp;quot;void&amp;quot; then&lt;br /&gt;
							table.insert(callbackSyntax, &#039;void&#039;)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(callbackSyntax, parameterType..&#039; &#039;..parameterName)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					rows[i2] = { i2..&#039;) &#039;, p.formatType(parameterType, frame), p.formatName(parameterName, frame), description }&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				local callbackSyntax2 = #callbackSyntax == 0 and &#039;void&#039; or table.concat(callbackSyntax, &#039;, &#039;)&lt;br /&gt;
&lt;br /&gt;
				if #parameterTokens &amp;gt; 0 then&lt;br /&gt;
					local syntaxLine = parameterTokens[1]..&#039; &#039;..parameterTokens[2]..&#039;(&#039;..callbackSyntax2..&#039;)&#039;&lt;br /&gt;
					syntaxLine = p.loadTemplate(frame, &#039;CodeSyntax&#039;, {syntaxLine})&lt;br /&gt;
					table.insert(html, syntaxLine)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if callbackText and #callbackText &amp;gt; 0 then&lt;br /&gt;
					table.insert(html, callbackText)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local headers, widths&lt;br /&gt;
				headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
				widths = { 30, 80, 110, 400 }&lt;br /&gt;
				local table2 = &amp;quot;\n&amp;quot;..p.table(headers, rows, widths, &#039;wikitable-callback wikitable&#039;)&lt;br /&gt;
				table.insert(html, table2)&lt;br /&gt;
				&lt;br /&gt;
				if i ~= #parameters then&lt;br /&gt;
					table.insert(html, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackSyntax then&lt;br /&gt;
		table.concat(html, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntax, true),id=&#039;callbacks&#039;}))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackSyntaxSS and args.callbackSyntaxCS then&lt;br /&gt;
		local rows = {}&lt;br /&gt;
		rows[1] = { &amp;quot;&#039;&#039;&#039;Server:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntaxSS, true),id=&#039;callbacks&#039;}) }&lt;br /&gt;
		rows[2] = { &amp;quot;&#039;&#039;&#039;Client:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntaxCS, true),id=&#039;callbacks&#039;}) }&lt;br /&gt;
		table.concat(html, p.table(false, rows, { 100 }, false, &#039;wikitable-callback wikitable&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return #html &amp;gt; 0 and table.concat(html, &#039;&#039;) or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	if p.isCancellable(frame) then&lt;br /&gt;
		rows[1] = { &#039;cancellable&#039;, &#039;This &#039;..args.type..&#039; can be cancelled, by using [[event.preventDefault|event.preventDefault]]().&#039; }&lt;br /&gt;
	else&lt;br /&gt;
		rows[1] = { p.formatType(&#039;const&#039;, frame), &#039;This &#039;..args.type..&#039; cannot be cancelled.&#039; }&lt;br /&gt;
	end&lt;br /&gt;
	local widths = { 120, 400 }&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.value(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if not args.value then&lt;br /&gt;
		return p.documentationMissing(frame, &amp;quot;Value type and description&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local arg = args.value&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local description = p.formatDescription(table.concat(tokens, &#039; &#039;, 2))&lt;br /&gt;
	&lt;br /&gt;
	local headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	rows[1] = { p.formatType(tokens[1], frame), description }&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		rows[2] = { p.formatType(&#039;readonly&#039;, frame), &#039;This &#039;..args.type..&#039; cannot be changed.&#039; }&lt;br /&gt;
	else&lt;br /&gt;
		rows[2] = { &#039;read/set&#039;, &#039;This &#039;..args.type..&#039; can be changed, as well as read.&#039; }&lt;br /&gt;
	end&lt;br /&gt;
	local widths = { 120, 400 }&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.settable(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		return &amp;quot;This &amp;quot;..args.type..&amp;quot; is read-only.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;This &amp;quot;..args.type..&amp;quot; can be read and set.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.types(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return p.getTypesText(frame, args.class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.symbols(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return p.getSymbolsText(frame, args.class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.notes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;note&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		return &amp;quot;There aren&#039;t any notes for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		entries[i] = p.dot(entry)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;* &amp;quot;..table.concat(entries, &amp;quot;\n* &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.examples(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local data = {&lt;br /&gt;
		{ &amp;quot;example&amp;quot;, &amp;quot;&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleSS&amp;quot;, &amp;quot;Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleCS&amp;quot;, &amp;quot;Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleJS&amp;quot;, &amp;quot;JavaScript&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleLua&amp;quot;, &amp;quot;Lua&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleSquirrel&amp;quot;, &amp;quot;Squirrel&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleJSSS&amp;quot;, &amp;quot;JavaScript - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleJSCS&amp;quot;, &amp;quot;JavaScript - Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleLuaSS&amp;quot;, &amp;quot;Lua - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleLuaCS&amp;quot;, &amp;quot;Lua - Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleSquirrelSS&amp;quot;, &amp;quot;Squirrel - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleSquirrelCS&amp;quot;, &amp;quot;Squirrel - Client-Side&amp;quot; }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local examples = {}&lt;br /&gt;
	local exampleIndex = 1&lt;br /&gt;
	for i,data2 in ipairs(data) do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, data2[1])&lt;br /&gt;
		for i2, entry in ipairs(entries) do&lt;br /&gt;
			local entry2 = &amp;quot;&#039;&#039;&#039;Example &amp;quot;..exampleIndex..&amp;quot; - &amp;quot;..data2[2]..&amp;quot;:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;quot;..p.loadTemplate(frame, &#039;CodeSyntax&#039;, {entry,id=&#039;example_&#039;..exampleIndex})&lt;br /&gt;
			table.insert(examples, entry2)&lt;br /&gt;
			exampleIndex = exampleIndex + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #examples == 0 then&lt;br /&gt;
		return &amp;quot;There aren&#039;t any examples for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(examples, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.compatibility(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries1 = p.getIndexedArgs(frame, &#039;previous&#039;)&lt;br /&gt;
	local entries2 = p.getIndexedArgs(frame, &#039;compat&#039;)&lt;br /&gt;
	if #entries1 == 0 and #entries2 == 0 then&lt;br /&gt;
		return &amp;quot;There isn&#039;t any compatibility information for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		local entriesOut = {}&lt;br /&gt;
		for i,arg in ipairs(entries1) do&lt;br /&gt;
			local versionsText, tokens = p.getVersionsText(arg, args.side, 2)&lt;br /&gt;
			entriesOut[i] = &amp;quot;This &amp;quot;..args.type..&amp;quot; was previously named &amp;lt;code&amp;gt;&amp;quot;..tokens[1]..&amp;quot;&amp;lt;/code&amp;gt; in &amp;quot;..versionsText..&amp;quot;.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		local offset = #entriesOut&lt;br /&gt;
		for i,arg in ipairs(entries2) do&lt;br /&gt;
			entriesOut[i + offset] = p.dot(arg)&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;quot;* &amp;quot;..table.concat(entriesOut, &amp;quot;\n* &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.related(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local categoryTitle = p.getItemCategory(frame)&lt;br /&gt;
	if categoryTitle and categoryTitle:len() &amp;gt; 0 then&lt;br /&gt;
		local shared = args.side:lower() == &#039;shared&#039;&lt;br /&gt;
		local server = args.side:lower() == &#039;shared&#039; or args.side:lower() == &#039;server&#039;&lt;br /&gt;
		local client = args.side:lower() == &#039;shared&#039; or args.side:lower() == &#039;client&#039;&lt;br /&gt;
		local pageName = args.type:lower() == &#039;event&#039; and &#039;Event&#039; or &#039;Function&#039;&lt;br /&gt;
		&lt;br /&gt;
		local parts = {}&lt;br /&gt;
		&lt;br /&gt;
		local name&lt;br /&gt;
		if args.type == &#039;property&#039; then&lt;br /&gt;
			name = args.class..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
		else&lt;br /&gt;
			name = args.name&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if server then&lt;br /&gt;
			local title = &#039;Server/&#039;..pageName..&#039;s/&#039;..categoryTitle&lt;br /&gt;
			local t = p.loadTemplate(frame, title, args)&lt;br /&gt;
			&lt;br /&gt;
			--t = p.remove(t, &amp;quot;[[&amp;quot;..name..&amp;quot;|&amp;quot;..name..&amp;quot;]]&amp;lt;br&amp;gt;\n&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			--[[&lt;br /&gt;
			t = p.replace(t, &amp;quot;  &amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\t&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\r&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\n&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;&amp;lt;a class=\&amp;quot;mw-selflink selflink\&amp;quot;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
			]]&lt;br /&gt;
			&lt;br /&gt;
			table.insert(parts, &amp;quot;&#039;&#039;&#039;Server Related&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;..t)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if client then&lt;br /&gt;
			local title = &#039;Client/&#039;..pageName..&#039;s/&#039;..categoryTitle&lt;br /&gt;
			local t = p.loadTemplate(frame, title, args)&lt;br /&gt;
			&lt;br /&gt;
			--t = p.remove(t, &amp;quot;[[&amp;quot;..name..&amp;quot;|&amp;quot;..name..&amp;quot;]]&amp;lt;br&amp;gt;\n&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			--[[&lt;br /&gt;
			t = p.replace(t, &amp;quot;  &amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\t&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\r&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\n&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;&amp;lt;a class=\&amp;quot;mw-selflink selflink\&amp;quot;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
			]]&lt;br /&gt;
			&lt;br /&gt;
			table.insert(parts, &amp;quot;&#039;&#039;&#039;Client Related&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;..t)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return table.concat(parts, &#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item category&lt;br /&gt;
function p.getItemCategory(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local resolvedNameLower = p.getDisplayedName(frame):lower()&lt;br /&gt;
	&lt;br /&gt;
	for categoryTitle,categoryData in pairs(p.categoryItems) do&lt;br /&gt;
		for i2,resolvedItemName in ipairs(categoryData) do&lt;br /&gt;
			if resolvedNameLower == resolvedItemName:lower() then&lt;br /&gt;
				return categoryTitle&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i,categoryTitle in ipairs(p.categoryWords) do&lt;br /&gt;
		if resolvedNameLower:find(categoryTitle:lower(), 1, true) then&lt;br /&gt;
			return categoryTitle&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item part utility&lt;br /&gt;
function p.getType(text)&lt;br /&gt;
	local finds = { &amp;quot;variable&amp;quot;, &amp;quot;function&amp;quot;, &amp;quot;property&amp;quot;, &amp;quot;method&amp;quot;, &amp;quot;event&amp;quot;, &amp;quot;define&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;Variable&amp;quot;, &amp;quot;Function&amp;quot;, &amp;quot;Property&amp;quot;, &amp;quot;Method&amp;quot;, &amp;quot;Event&amp;quot;, &amp;quot;Define&amp;quot; }&lt;br /&gt;
	local defaults = {}&lt;br /&gt;
	return p.findText(text, finds, replaces, defaults, &amp;quot;&#039;&#039;&#039;undocumented type&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getGames(text)&lt;br /&gt;
	local finds = { &amp;quot;iii&amp;quot;, &amp;quot;vc&amp;quot;, &amp;quot;sa&amp;quot;, &amp;quot;iv&amp;quot;, &amp;quot;ug&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;GTA III&amp;quot;, &amp;quot;GTA VC&amp;quot;, &amp;quot;GTA SA&amp;quot;, &amp;quot;GTA IV&amp;quot;, &amp;quot;GTA UG&amp;quot; }&lt;br /&gt;
	local defaults = { &amp;quot;all&amp;quot;, &amp;quot;all games&amp;quot; }&lt;br /&gt;
	return p.findText(text, finds, replaces, defaults, &amp;quot;All Games&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSide(text)&lt;br /&gt;
	local finds = { &amp;quot;shared&amp;quot;, &amp;quot;server&amp;quot;, &amp;quot;client&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;Server and Client&amp;quot;, &amp;quot;Server Only&amp;quot;, &amp;quot;Client Only&amp;quot; }&lt;br /&gt;
	local defaults = {}&lt;br /&gt;
	local result = p.findText(text, finds, replaces, defaults, &amp;quot;&#039;&#039;&#039;undocumented side&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
	local isShared = result == replaces[1]&lt;br /&gt;
	return result, isShared&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDisplayedName(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isOOP(frame) then&lt;br /&gt;
		return p.lowerFirstCharCase(args.class)..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
	else&lt;br /&gt;
		return args.name&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTypeRgb()&lt;br /&gt;
	return &#039;#009106&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNameRgb()&lt;br /&gt;
	return &#039;#0645ad&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDisplayedNameColoured(frame)&lt;br /&gt;
	local typeRgb = p.getTypeRgb()&lt;br /&gt;
	local nameRgb = p.getNameRgb()&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isOOP(frame) then&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&#039;color:&amp;quot;..typeRgb..&amp;quot;;&#039;&amp;gt;&amp;quot;..p.lowerFirstCharCase(args.class)..&amp;quot;&amp;lt;/span&amp;gt;.&amp;lt;span style=&#039;color:&amp;quot;..nameRgb..&amp;quot;&#039;;&amp;gt;&amp;quot;..args.name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&#039;color:&amp;quot;..nameRgb..&amp;quot;&#039;;&amp;gt;&amp;quot;..args.name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSuccessReturnTypes(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		return &amp;quot;unknown&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		local tokens = p.split(entry, &#039; &#039;)&lt;br /&gt;
		entries[i] = tokens[1]&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(entries, &amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isOOP(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return args.type == &amp;quot;property&amp;quot; or args.type == &amp;quot;method&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.warning(frame, text)&lt;br /&gt;
	return p.loadTemplate(frame, &#039;BlueInformationBox&#039;, {text})..&#039;\n&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.documentationMissing(frame, text)&lt;br /&gt;
	return p.warning(frame, &amp;quot;Documentation Missing: &amp;quot;..text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildSyntax(frame, parameters, isCallback)&lt;br /&gt;
	if isCallback == nil then&lt;br /&gt;
		isCallback = false;&lt;br /&gt;
	end&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if not isCallback and (args.type == &#039;variable&#039; or args.type == &#039;property&#039;) then&lt;br /&gt;
		return p.getSuccessReturnTypes(frame)..&amp;quot; &amp;quot;..p.getDisplayedName(frame)&lt;br /&gt;
	elseif isCallback or args.type == &#039;event&#039; then&lt;br /&gt;
		return &amp;quot;function(&amp;quot;..parameters..&amp;quot;)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return p.getSuccessReturnTypes(frame)..&amp;quot; &amp;quot;..p.getDisplayedName(frame)..&amp;quot;(&amp;quot;..parameters..&amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTypesText(frame, baseType)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local derivedTypes = {&lt;br /&gt;
		ped			    = {&#039;Player&#039;},&lt;br /&gt;
		physical		= {&#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		entity			= {&#039;Building&#039;, &#039;Physical&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		element			= {&#039;Blip&#039;, &#039;Entity&#039;, &#039;Marker&#039;, &#039;Building&#039;, &#039;Physical&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		vehicle			= {&#039;Train&#039;},&lt;br /&gt;
		event			= {&#039;CancellableEvent&#039;, &#039;KeyEvent&#039;},&lt;br /&gt;
		surface			= {&#039;RenderTarget&#039;, &#039;Texture&#039;}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local serverTypes = {}&lt;br /&gt;
	local sharedTypes = {&lt;br /&gt;
		&#039;Building&#039;, &#039;Client&#039;, &#039;Effect&#039;, &#039;Event&#039;, &#039;Timer&#039;, &#039;ReflectedFunction&#039;, &#039;Resource&#039;, &#039;Stream&#039;, &#039;Vec2&#039;, &#039;Vec3&#039;, &#039;Matrix4x4&#039;,&lt;br /&gt;
		&#039;Element&#039;, &#039;Blip&#039;, &#039;Pickup&#039;, &#039;Entity&#039;, &#039;Physical&#039;,&#039;Vehicle&#039;, &#039;Train&#039;, &#039;XmlDocument&#039;, &#039;XmlElement&#039;,&lt;br /&gt;
		&#039;CancellableEvent&#039;, &#039;KeyEvent&#039;, &#039;Marker&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Player&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local out = {}&lt;br /&gt;
	&lt;br /&gt;
	local getTypeSide = function(type)&lt;br /&gt;
		for i2,type2 in ipairs(serverTypes) do&lt;br /&gt;
			if type:lower() == type2:lower() then&lt;br /&gt;
				return &#039;server&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for i2,type2 in ipairs(sharedTypes) do&lt;br /&gt;
			if type:lower() == type2:lower() then&lt;br /&gt;
				return &#039;shared&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return &#039;client&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if baseType then&lt;br /&gt;
		local baseTypeLower = baseType:lower()&lt;br /&gt;
		local allTypes&lt;br /&gt;
		if derivedTypes[baseTypeLower] then&lt;br /&gt;
			allTypes = p.copyTable(derivedTypes[baseTypeLower])&lt;br /&gt;
			table.insert(allTypes, 1, baseType)&lt;br /&gt;
		else&lt;br /&gt;
			allTypes = { baseType }&lt;br /&gt;
		end&lt;br /&gt;
		local types = {}&lt;br /&gt;
		for i,type in ipairs(allTypes) do&lt;br /&gt;
			types[i] = type&lt;br /&gt;
		end&lt;br /&gt;
		p.sortTable(types)&lt;br /&gt;
		for i,type in ipairs(types) do&lt;br /&gt;
			types[i] = p.loadTemplate(frame, &#039;Side&#039;, {[getTypeSide(type)]=&#039;1&#039;})..&amp;quot; &amp;quot;..&amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace;\&amp;quot;&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		--table.insert(out, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;)&lt;br /&gt;
		table.insert(out, &amp;quot;\n&amp;quot;..table.concat(types, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(out, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSymbolsText(frame, baseType)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local out = {}&lt;br /&gt;
	&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;function&#039; or args.type == &#039;variable&#039; then&lt;br /&gt;
		local parts = p.split(p.getDisplayedName(frame), &amp;quot;.&amp;quot;)&lt;br /&gt;
		for i=1,(#parts)-1,1 do&lt;br /&gt;
			rows[i] = {}&lt;br /&gt;
			rows[i][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[i]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
			rows[i][2] = &#039;Namespace&#039;&lt;br /&gt;
			rows[i][3] = i == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[i-1]&lt;br /&gt;
			rows[i][4] = i == 1 and parts[i]..&#039; is a namespace, which exists in the global namespace.&#039; or parts[i]..&#039; is a namespace, which exists in the &#039;..parts[i-1]..&#039; namespace.&#039;&lt;br /&gt;
		end&lt;br /&gt;
		rows[#parts] = {}&lt;br /&gt;
		rows[#parts][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[#parts]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[#parts][2] = p.properCase(args.type)&lt;br /&gt;
		rows[#parts][3] = #parts == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[#parts-1]&lt;br /&gt;
		rows[#parts][4] = #parts == 1 and parts[1]..&#039; is a &#039;..p.properCase(args.type)..&#039;, which exists in the global namespace.&#039; or parts[#parts]..&#039; is a &#039;..p.properCase(args.type)..&#039;, which exists in the &#039;..parts[#parts-1]..&#039; namespace.&#039;&lt;br /&gt;
	elseif args.type == &#039;method&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		local parts = p.split(p.getDisplayedName(frame), &amp;quot;.&amp;quot;)&lt;br /&gt;
		rows[1] = {}&lt;br /&gt;
		rows[1][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[1]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[1][2] = &#039;Object&#039;&lt;br /&gt;
		rows[1][3] = &#039;n/a&#039;&lt;br /&gt;
		rows[1][4] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[1]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;..&#039; is an object.&#039;&lt;br /&gt;
		&lt;br /&gt;
		rows[2] = {}&lt;br /&gt;
		rows[2][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[2]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[2][2] = p.properCase(args.type)&lt;br /&gt;
		rows[2][3] = #parts == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[#parts-1]&lt;br /&gt;
		rows[2][4] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[2]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;..&#039; is a &#039;..p.properCase(args.type)..&#039;, which is used on objects of type &#039;..parts[1]&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		rows[1] = {}&lt;br /&gt;
		rows[1][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..p.getDisplayedName(frame)..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[1][2] = &#039;String&#039;&lt;br /&gt;
		rows[1][3] = &#039;n/a&#039;&lt;br /&gt;
		rows[1][4] = &#039;Events are referenced by name. Event names use data type String.&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--table.insert(out, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;)&lt;br /&gt;
	local headers = { &#039;Symbol Name&#039;, &#039;Symbol Type&#039;, &#039;Container&#039;, &#039;Description&#039; }&lt;br /&gt;
	table.insert(out, &amp;quot;\n&amp;quot;..p.table(headers, rows, { 120, 120, 400 }, false))&lt;br /&gt;
	&lt;br /&gt;
	if args.type ~= &#039;event&#039; then&lt;br /&gt;
		local languages = { &#039;JS&#039;, &#039;Lua&#039;, &#039;Squirrel&#039; }&lt;br /&gt;
		local languageSymbols = {&lt;br /&gt;
			[&#039;JS&#039;]			= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;dot&#039;,		[&#039;property&#039;] = &#039;dot&#039; },&lt;br /&gt;
			[&#039;Lua&#039;]			= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;colon&#039;,	[&#039;property&#039;] = &#039;dot&#039; },&lt;br /&gt;
			[&#039;Squirrel&#039;]	= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;dot&#039;,		[&#039;property&#039;] = &#039;dot&#039; }&lt;br /&gt;
		}&lt;br /&gt;
		for i,language in ipairs(languages) do&lt;br /&gt;
			local line&lt;br /&gt;
			if args.type == &#039;function&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to call a function.&#039;&lt;br /&gt;
			elseif args.type == &#039;variable&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to get or set a variable.&#039;&lt;br /&gt;
			elseif args.type == &#039;method&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to call a method.&#039;&lt;br /&gt;
			elseif args.type == &#039;property&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to get or set a property.&#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(out, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;..line)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(out, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isCancellable(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return (args.cancel and args.cancel == &#039;true&#039;) or (args.cancel and args.cancel == &#039;true&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatType(type, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getTypeRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatName(name, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDefaultValue(value, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..value..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSource(type, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatCode(code)&lt;br /&gt;
	return &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..code..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDescription(description)&lt;br /&gt;
	description = p.capital(description)&lt;br /&gt;
	description = p.dot(description)&lt;br /&gt;
	return description&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.standardizeNullType(type)&lt;br /&gt;
	local type2 = type:lower()&lt;br /&gt;
	if type2 == &#039;void&#039; or type2 == &#039;null&#039; or type2 == &#039;undefined&#039; or type2 == &#039;n/a&#039; then&lt;br /&gt;
		return &#039;void&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return type&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- general utility&lt;br /&gt;
function p.split(str, sep, limit)&lt;br /&gt;
   if not sep or sep == &amp;quot;&amp;quot; then&lt;br /&gt;
      return false&lt;br /&gt;
   end&lt;br /&gt;
   if not str then&lt;br /&gt;
      return false&lt;br /&gt;
   end&lt;br /&gt;
   limit = limit or math.huge&lt;br /&gt;
   if limit == 0 or limit == 1 then&lt;br /&gt;
      return {str}, 1&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local r = {}&lt;br /&gt;
   local n, init = 0, 1&lt;br /&gt;
&lt;br /&gt;
   while true do&lt;br /&gt;
      local s,e = str:find(sep, init, true)&lt;br /&gt;
      if not s then&lt;br /&gt;
         break&lt;br /&gt;
      end&lt;br /&gt;
      r[#r+1] = str:sub(init, s - 1)&lt;br /&gt;
      init = e + 1&lt;br /&gt;
      n = n + 1&lt;br /&gt;
      if n == limit - 1 then&lt;br /&gt;
         break&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if init &amp;lt;= str:len() then&lt;br /&gt;
      r[#r+1] = str:sub(init)&lt;br /&gt;
   else&lt;br /&gt;
      r[#r+1] = &amp;quot;&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
   n = n + 1&lt;br /&gt;
&lt;br /&gt;
   if limit &amp;lt; 0 then&lt;br /&gt;
      for i=n, n + limit + 1, -1 do r[i] = nil end&lt;br /&gt;
      n = n + limit&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   return r, n&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.rfind(s, find)&lt;br /&gt;
	local index = s:reverse():find(find)&lt;br /&gt;
	if not index then return end&lt;br /&gt;
	return #s - index + 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.trim(s)&lt;br /&gt;
	return (string.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitLines(text)&lt;br /&gt;
	text = p.remove(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	text = p.remove(text, &amp;quot;\r&amp;quot;)&lt;br /&gt;
	return p.split(text, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.remove(text, remove)&lt;br /&gt;
	return p.replace(text, remove, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.replace(text, find, replace)&lt;br /&gt;
	return text:gsub(find, replace)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getIndexedArgs(frame, name)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	local out = {}&lt;br /&gt;
	if args[name] then&lt;br /&gt;
		out[i] = args[name]&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	while args[name..i] do&lt;br /&gt;
		out[i] = args[name..i]&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.loadTemplate(frame, title, args)&lt;br /&gt;
	return frame:expandTemplate{ title = title, args = args }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSideVersions(arg, side, start)&lt;br /&gt;
	if not start then start = 1 end&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local sideVersions = {}&lt;br /&gt;
	if side == &#039;shared&#039; then&lt;br /&gt;
		if tokens[start+1] then&lt;br /&gt;
			sideVersions[1] = tokens[start]&lt;br /&gt;
			sideVersions[2] = tokens[start+1]&lt;br /&gt;
		else&lt;br /&gt;
			sideVersions[1] = tokens[start]&lt;br /&gt;
		end&lt;br /&gt;
	elseif side == &#039;server&#039; then&lt;br /&gt;
		sideVersions[1] = tokens[start]&lt;br /&gt;
	elseif side == &#039;client&#039; then&lt;br /&gt;
		sideVersions[1] = tokens[start]&lt;br /&gt;
	end&lt;br /&gt;
	return sideVersions, tokens&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getVersionsText(arg, side, start)&lt;br /&gt;
	if not start then start = 1 end&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local text&lt;br /&gt;
	if side == &#039;shared&#039; then&lt;br /&gt;
		if tokens[start+1] then&lt;br /&gt;
			text = &amp;quot;server version &amp;quot;..tokens[start]..&amp;quot; and client version &amp;quot;..tokens[start+1]&lt;br /&gt;
		else&lt;br /&gt;
			text = &amp;quot;version &amp;quot;..tokens[start]&lt;br /&gt;
		end&lt;br /&gt;
	elseif side == &#039;server&#039; then&lt;br /&gt;
		text = &amp;quot;server version &amp;quot;..tokens[start]&lt;br /&gt;
	elseif side == &#039;client&#039; then&lt;br /&gt;
		text = &amp;quot;client version &amp;quot;..tokens[start]&lt;br /&gt;
	end&lt;br /&gt;
	return text, tokens&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.properCase(text)&lt;br /&gt;
	return text:sub(1,1):upper()..text:sub(2):lower()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.lowerFirstCharCase(text)&lt;br /&gt;
	return text:sub(1,1):lower()..text:sub(2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.findText(text, finds, replaces, defaults, default)&lt;br /&gt;
	if not text then return default end&lt;br /&gt;
	local textLower = text:lower()&lt;br /&gt;
	&lt;br /&gt;
	for i,default2 in ipairs(defaults) do&lt;br /&gt;
		if textLower == default2 then&lt;br /&gt;
			return default&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local items = {}&lt;br /&gt;
	for i,find in ipairs(finds) do&lt;br /&gt;
		if textLower:find(find, 1, true) then&lt;br /&gt;
			table.insert(items, replaces[i])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p.getListText(items)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getListText(items)&lt;br /&gt;
	local count = #items&lt;br /&gt;
	&lt;br /&gt;
	if count == 1 then&lt;br /&gt;
		return items[1]&lt;br /&gt;
	elseif count == 2 then&lt;br /&gt;
		return items[1]..&amp;quot; and &amp;quot;..items[2]&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat(items, &amp;quot;, &amp;quot;, 1, count - 1)..&amp;quot; and &amp;quot;..items[count]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.dot(text)&lt;br /&gt;
	local i = #text&lt;br /&gt;
	while i &amp;gt; 0 and text:sub(i, i) == &amp;quot;.&amp;quot; do&lt;br /&gt;
		i = i - 1&lt;br /&gt;
	end&lt;br /&gt;
	return text:sub(1,i)..&amp;quot;.&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.capital(text)&lt;br /&gt;
	return text:sub(1,1):upper()..text:sub(2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyTable(t)&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for k,v in pairs(t) do&lt;br /&gt;
		out[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortTable(t)&lt;br /&gt;
	table.sort(t, function(a,b)&lt;br /&gt;
		return a:lower() &amp;lt; b:lower()&lt;br /&gt;
	end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(headers, rows, widths, tableCssClass)&lt;br /&gt;
	if tableCssClass == nil then tableCssClass = &#039;wikitable&#039; end&lt;br /&gt;
	rows = p.copyTable(rows)&lt;br /&gt;
	if not widths then widths = {} end&lt;br /&gt;
	&lt;br /&gt;
	if headers then&lt;br /&gt;
		headers = p.copyTable(headers)&lt;br /&gt;
		&lt;br /&gt;
		for i,header in ipairs(headers) do&lt;br /&gt;
			local width = widths[i]&lt;br /&gt;
			if width and width &amp;gt; 0 then&lt;br /&gt;
				headers[i] = &amp;quot;id=&#039;th_&amp;quot;..i..&amp;quot;&#039; style=&#039;text-align:left;&amp;quot;..(i==#headers and &#039;min-width&#039; or &#039;width&#039;)..&amp;quot;:&amp;quot;..width..&amp;quot;px;&#039;| &amp;quot;..header&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for i,cell in ipairs(rows[1]) do&lt;br /&gt;
			local width = widths[i]&lt;br /&gt;
			if width and width &amp;gt; 0 then&lt;br /&gt;
				rows[1][i] = &amp;quot;id=&#039;td_&amp;quot;..i..&amp;quot;&#039; style=&#039;text-align:left;&amp;quot;..(i==#rows[1] and &#039;min-width&#039; or &#039;width&#039;)..&amp;quot;:&amp;quot;..width..&amp;quot;px;&#039;| &amp;quot;..cell&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i,row in ipairs(rows) do&lt;br /&gt;
		rows[i] = &#039;|&#039;..table.concat(row, &#039;\n|&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &#039;{|&#039;..(tableCssClass and &#039; class=&amp;quot;&#039;..tableCssClass..&#039;&amp;quot;&#039; or &#039;&#039;)..(headers and &amp;quot; id=&#039;headers&#039; &amp;quot; and &#039;\n!&#039;..table.concat(headers, &#039;\n!&#039;)..&#039;\n|-&#039; or &#039;&#039;)..&#039;\n&#039;..table.concat(rows, &#039;\n|-\n&#039;)..&#039;\n|}&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- return the module&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Module:ScriptItem2&amp;diff=11369</id>
		<title>Module:ScriptItem2</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Module:ScriptItem2&amp;diff=11369"/>
		<updated>2026-01-31T02:44:21Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- settings&lt;br /&gt;
p.categoryItems = {&lt;br /&gt;
	-- Category Name		= table. (Fully resolved item name(s), case-sensitive.) (Event names must start with a capital letter &amp;quot;O&amp;quot;, to match the dumpdoc XML.)&lt;br /&gt;
	[&#039;Audio&#039;]				= {&#039;gta.addOneOffSound&#039;, &#039;gta.playFrontEndSound&#039;, &#039;gta.playSuspectLastSeen&#039;},&lt;br /&gt;
	[&#039;Camera&#039;]				= {&#039;gta.fading&#039;},&lt;br /&gt;
	[&#039;Chatbox&#039;]				= {&#039;message&#039;, &#039;messageClient&#039;, &#039;messageAllExcept&#039;, &#039;setChatWindowEnabled&#039;, &#039;OnChatOutput&#039;},&lt;br /&gt;
	[&#039;Cursor&#039;]				= {&#039;gta.getMouseSpeed&#039;},&lt;br /&gt;
	[&#039;CustomText&#039;]			= {&#039;gta.setCustomText&#039;, &#039;gta.setCustomText&#039;, &#039;gta.clearCustomText&#039;, &#039;gta.printBig&#039;},&lt;br /&gt;
	[&#039;Drawing&#039;]				= {&#039;gta.drawRectangle&#039;},&lt;br /&gt;
	[&#039;Effect&#039;]				= {&#039;gta.addParticleEffect&#039;, &#039;addParticleEffect&#039;, &#039;gta.addMovingParticleEffect&#039;, &#039;addMovingParticleEffect&#039;, &#039;gta.createSingleParticle&#039;, &#039;createSingleParticle&#039;},&lt;br /&gt;
	[&#039;Font&#039;]				= {&#039;font.render&#039;},&lt;br /&gt;
	[&#039;GarbageCollection&#039;]	= {&#039;collectAllGarbage&#039;},&lt;br /&gt;
	[&#039;Game&#039;]				= {&#039;gta.game&#039;, &#039;gta.standardControls&#039;, &#039;gta.gameSpeed&#039;, &#039;gta.loadDFF&#039;, &#039;gta.loadTXD&#039;, &#039;gta.loadCOL&#039;},&lt;br /&gt;
	[&#039;GameStat&#039;]			= {&#039;gta.setGameStat&#039;, &#039;gta.getGameStat&#039;},&lt;br /&gt;
    [&#039;GTAIV&#039;]				= {&#039;OnAddIVNetworkEvent&#039;},&lt;br /&gt;
	[&#039;GUI&#039;]					= {&#039;OnGUIClick&#039;},&lt;br /&gt;
	[&#039;Key&#039;]					= {&#039;isScancodePressed&#039;, &#039;OnCharacter&#039;},&lt;br /&gt;
	[&#039;KillFrenzy&#039;]			= {&#039;gta.startKillFrenzy&#039;},&lt;br /&gt;
	[&#039;Message&#039;]				= {&#039;gta.clearMessages&#039;, &#039;gta.smallMessage&#039;, &#039;gta.bigMessage&#039;, &#039;gta.pagerMessage&#039;},&lt;br /&gt;
	[&#039;Miscellaneous&#039;]		= {&#039;platform&#039;, &#039;toColour&#039;, &#039;gta.tickCount&#039;, &#039;getRandomSkin&#039;, &#039;gta.getRandomSkin&#039;, &#039;gta.processLineOfSight&#039;, &#039;processLineOfSight&#039;, &#039;gta.setIsland&#039;, &#039;gta.setDefaultInteriors&#039;},&lt;br /&gt;
	[&#039;Network&#039;]				= {&#039;isConnected&#039;, &#039;isConnecting&#039;, &#039;connect&#039;, &#039;disconnect&#039;, &#039;triggerNetworkEvent&#039;, &#039;OnDisconnect&#039;},&lt;br /&gt;
	[&#039;Path&#039;]				= {&#039;gta.trafficDensity&#039;, &#039;gta.setTrafficEnabled&#039;, &#039;setTrafficEnabled&#039;, &#039;gta.setCiviliansEnabled&#039;, &#039;setCiviliansEnabled&#039;},&lt;br /&gt;
	[&#039;Ped&#039;]					= {&#039;gta.tommyFatness&#039;},&lt;br /&gt;
	[&#039;Radio&#039;]				= {&#039;gta.setRadioChannel&#039;, &#039;gta.forceRadioChannel&#039;},&lt;br /&gt;
	[&#039;Reflection&#039;]			= {&#039;exportFunction&#039;, &#039;setErrorMode&#039;},&lt;br /&gt;
	[&#039;Renderware&#039;]			= {&#039;gta.rwRenderStateSet&#039;},&lt;br /&gt;
	[&#039;SaveGame&#039;]			= {&#039;gta.saveGame&#039;},&lt;br /&gt;
	[&#039;Screen&#039;]				= {&#039;gta.aspectRatio&#039;, &#039;gta.width&#039;, &#039;gta.height&#039;},&lt;br /&gt;
	[&#039;Script&#039;]				= {&#039;gta.terminateScript&#039;, &#039;gta.getActiveScripts&#039;, &#039;gta.scriptCommand&#039;},&lt;br /&gt;
	[&#039;Timer&#039;]				= {&#039;setImmediate&#039;, &#039;clearImmediate&#039;, &#039;setInterval&#039;, &#039;clearInterval&#039;, &#039;setTimeout&#039;, &#039;clearTimeout&#039;},&lt;br /&gt;
	[&#039;Weather&#039;]				= {&#039;snowing&#039;, &#039;forceSnowing&#039;},&lt;br /&gt;
	[&#039;Window&#039;]				= {&#039;OnFocus&#039;, &#039;OnLostFocus&#039;},&lt;br /&gt;
	[&#039;World&#039;]				= {&#039;gta.ssvBridgeEnabled&#039;, &#039;gta.planesEnabled&#039;, &#039;gta.trainsEnabled&#039;, &#039;setPlanesEnabled&#039;, &#039;setTrainsEnabled&#039;, &#039;world&#039;, &#039;gta.findGroundZForCoord&#039;, &#039;findGroundZForCoord&#039;, &#039;gta.setTrainsEnabled&#039;, &#039;gta.setPlanesEnabled&#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p.categoryWords = {&lt;br /&gt;
	-- Category Names. (String(s) to look for in an item name, case-INsensitive.)&lt;br /&gt;
	&#039;Blip&#039;, &#039;Building&#039;, &#039;Camera&#039;, &#039;Chatbox&#039;, &#039;Cheat&#039;, &#039;Client&#039;, &#039;Command&#039;, &#039;Cursor&#039;, &#039;Debug&#039;, &#039;Dodo&#039;,&lt;br /&gt;
	&#039;Element&#039;, &#039;Entity&#039;, &#039;Event&#039;, &#039;File&#039;, &#039;Font&#039;, &#039;Garage&#039;, &#039;HTTP&#039;, &#039;HUD&#039;, &#039;Key&#039;, &#039;Mission&#039;, &#039;Mouse&#039;, &#039;NetFlags&#039;, &#039;Network&#039;, &#039;Object&#039;,&lt;br /&gt;
	&#039;Pause&#039;, &#039;Ped&#039;, &#039;Pickup&#039;, &#039;Player&#039;, &#039;Process&#039;, &#039;Render&#039;, &#039;Resource&#039;, &#039;Screen&#039;, &#039;Socket&#039;, &#039;Sphere&#039;, &#039;Time&#039;, &#039;Vehicle&#039;, &#039;Weather&#039;, &#039;World&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- entry point&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;variable&#039; then&lt;br /&gt;
		return p.showVariablePage(frame)&lt;br /&gt;
	elseif args.type == &#039;function&#039; then&lt;br /&gt;
		return p.showFunctionPage(frame)&lt;br /&gt;
	elseif args.type == &#039;property&#039; then&lt;br /&gt;
		return p.showPropertyPage(frame)&lt;br /&gt;
	elseif args.type == &#039;method&#039; then&lt;br /&gt;
		return p.showMethodPage(frame)&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		return p.showEventPage(frame)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;This page has been documented incorrectly, &#039;&#039;&#039;type&#039;&#039;&#039; is missing.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item page types&lt;br /&gt;
function p.showVariablePage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Value&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showFunctionPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Return&amp;quot;, &amp;quot;Callbacks&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showPropertyPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Value&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showMethodPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Return&amp;quot;, &amp;quot;Callbacks&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showEventPage(frame)&lt;br /&gt;
	return p.showPage(frame, { &amp;quot;Parameters&amp;quot;, &amp;quot;Attributes&amp;quot; })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item page&lt;br /&gt;
function p.showPage(frame, parts)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.type ~= &#039;event&#039; then&lt;br /&gt;
		table.insert(parts, &amp;quot;Types&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	--table.insert(parts, &amp;quot;Symbols&amp;quot;)&lt;br /&gt;
	local lines = p.getPageTopLines(frame)&lt;br /&gt;
	for i,part in ipairs({&amp;quot;Notes&amp;quot;, &amp;quot;Examples&amp;quot;, &amp;quot;Compatibility&amp;quot;, &amp;quot;Related&amp;quot;}) do&lt;br /&gt;
		table.insert(parts, part)&lt;br /&gt;
	end&lt;br /&gt;
	for i,part in ipairs(parts) do&lt;br /&gt;
		local data = p[part:lower() == &#039;return&#039; and &#039;returns&#039; or part:lower()](frame)&lt;br /&gt;
		if data and #data &amp;gt; 0 then&lt;br /&gt;
			if part == &#039;Settable&#039; then&lt;br /&gt;
				part = args.readonly == &#039;true&#039; and &#039;Read-Only&#039; or &#039;Read and Set&#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(lines, &#039;== &#039;..part..&#039; ==&#039;)&lt;br /&gt;
			table.insert(lines, data)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(lines, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageTopLines(frame)&lt;br /&gt;
	local lines = {}&lt;br /&gt;
	table.insert(lines, frame:preprocess(&amp;quot;{{DISPLAYTITLE:&amp;quot;..p.getDisplayedName(frame)..&amp;quot;}}&amp;quot;))&lt;br /&gt;
	table.insert(lines, &amp;quot;__NOTOC__&amp;quot;..p.getPageTopBoxes(frame)..&amp;quot;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;Available since &amp;quot;..p.since(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 6px;&#039;&amp;gt;\n&amp;quot;..p.syntax(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	table.insert(lines, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;\n&amp;quot;..p.description(frame)..&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;)&lt;br /&gt;
	return lines&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageTopBoxes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local topBoxes = { &amp;quot;type&amp;quot;, &amp;quot;side&amp;quot;, &amp;quot;games&amp;quot;, &amp;quot;online&amp;quot; }&lt;br /&gt;
	if args.type == &#039;variable&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		table.insert(topBoxes, &amp;quot;settable&amp;quot;)&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		table.insert(topBoxes, &amp;quot;cancellable&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local outBoxes = {}&lt;br /&gt;
	for i,topBox in ipairs(topBoxes) do&lt;br /&gt;
		table.insert(outBoxes, p[topBox..&amp;quot;Box&amp;quot;](frame))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(outBoxes, &#039; &#039;)..&amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- template arguments&lt;br /&gt;
function p.getArgs(frame)&lt;br /&gt;
	if p.argsCache then&lt;br /&gt;
		return p.argsCache&lt;br /&gt;
	else&lt;br /&gt;
		local args = frame:getParent().args&lt;br /&gt;
		p.copyOldToNewForTemplateArguments(frame, args)&lt;br /&gt;
		p.copyNonIndexedToIndexedTemplateArguments(frame, args)&lt;br /&gt;
		p.populateTypeSpecificTemplateArguments(frame, args)&lt;br /&gt;
		p.populateDefaultTemplateArguments(frame, args)&lt;br /&gt;
		p.argsCache = args&lt;br /&gt;
		return args&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyOldToNewForTemplateArguments(frame, args)&lt;br /&gt;
	--[[&lt;br /&gt;
	if args.parameters then&lt;br /&gt;
		args.syntax = args.parameters&lt;br /&gt;
	end&lt;br /&gt;
	if args.parametersSS then&lt;br /&gt;
		args.syntaxSS = args.parametersSS&lt;br /&gt;
	end&lt;br /&gt;
	if args.parametersCS then&lt;br /&gt;
		args.syntaxCS = args.parametersCS&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackParameters then&lt;br /&gt;
		args.callbackSyntax = args.callbackParameters&lt;br /&gt;
	end&lt;br /&gt;
	if args.callbackParametersSS then&lt;br /&gt;
		args.callbackSyntaxSS = args.callbackParametersSS&lt;br /&gt;
	end&lt;br /&gt;
	if args.callbackParametersCS then&lt;br /&gt;
		args.callbackSyntaxCS = args.callbackParametersCS&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;event&#039; then&lt;br /&gt;
		if args.callbackParameters then&lt;br /&gt;
			args.syntax = args.callbackParameters&lt;br /&gt;
		end&lt;br /&gt;
		if args.callbackParametersSS then&lt;br /&gt;
			args.syntaxSS = args.callbackParametersSS&lt;br /&gt;
		end&lt;br /&gt;
		if args.callbackParametersCS then&lt;br /&gt;
			args.syntaxCS = args.callbackParametersCS&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.returnType or args.returnTypes then&lt;br /&gt;
		local returnType = args.returnType and args.returnType or args.returnTypes&lt;br /&gt;
		if args.returnInfo then&lt;br /&gt;
			args.return1 = returnType..&amp;quot; &amp;quot;..args.returnInfo&lt;br /&gt;
			args.value = returnType..&amp;quot; &amp;quot;..args.returnInfo&lt;br /&gt;
		else&lt;br /&gt;
			args.return1 = returnType&lt;br /&gt;
			args.value = returnType&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	if args[&#039;return&#039;] then&lt;br /&gt;
		args.value = args[&#039;return&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.usage then&lt;br /&gt;
		args.desc = args.usage&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.notes then&lt;br /&gt;
		local notes = p.splitLines(args.notes)&lt;br /&gt;
		for i,note in ipairs(notes) do&lt;br /&gt;
			args[&#039;note&#039;..i] = note&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local exampleKeys = {&lt;br /&gt;
		&#039;example&#039;, &#039;exampleSS&#039;, &#039;exampleCS&#039;, &#039;exampleJS&#039;, &#039;exampleLua&#039;, &#039;exampleSquirrel&#039;,&lt;br /&gt;
		&#039;exampleJSSS&#039;, &#039;exampleJSCS&#039;, &#039;exampleLuaSS&#039;, &#039;exampleLuaCS&#039;, &#039;exampleSquirrelSS&#039;, &#039;exampleSquirrelCS&#039;&lt;br /&gt;
	}&lt;br /&gt;
	for i,exampleKey in ipairs(exampleKeys) do&lt;br /&gt;
		if args[exampleKey] then&lt;br /&gt;
			local examples = p.split(args[exampleKey], &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
			for i,example in ipairs(examples) do&lt;br /&gt;
				args[exampleKey..i] = example&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.bcName and args.bcMaxVersion then&lt;br /&gt;
		args.previous1 = args.bcName..&amp;quot; &amp;quot;..args.bcMaxVersion&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyNonIndexedToIndexedTemplateArguments(frame, args)&lt;br /&gt;
	if args.description then&lt;br /&gt;
		args.description1 = args.description&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.populateTypeSpecificTemplateArguments(frame, args)&lt;br /&gt;
	if args.type == &#039;variable&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		if args.value then&lt;br /&gt;
			local tokens = p.split(args.value, &#039; &#039;)&lt;br /&gt;
			local type = tokens[1]&lt;br /&gt;
			&lt;br /&gt;
			local name&lt;br /&gt;
			if args.type == &#039;property&#039; then&lt;br /&gt;
				name = args.class..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
			else&lt;br /&gt;
				name = args.name&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			args.syntax = type..&amp;quot; &amp;quot;..name&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.populateDefaultTemplateArguments(frame, args)&lt;br /&gt;
	if not args.since then&lt;br /&gt;
		args.since = &amp;quot;1.0.0 1.0.0&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.syntax and args.syntax:lower() == &amp;quot;void&amp;quot; then&lt;br /&gt;
		args.parameter1 = &amp;quot;void&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item top boxes&lt;br /&gt;
function p.typeBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local typeText = p.getType(args.type)&lt;br /&gt;
	return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {typeText,id=&#039;type&#039;});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sideBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local sideText, isShared = p.getSide(args.side)&lt;br /&gt;
	if isShared then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {sideText,id=&#039;side&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {sideText,id=&#039;side&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.gamesBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local gamesText = p.getGames(args.games)&lt;br /&gt;
&lt;br /&gt;
	local games2 = { &#039;iii&#039;, &#039;vc&#039;, &#039;sa&#039;, &#039;iv&#039; }&lt;br /&gt;
	local counter = 0&lt;br /&gt;
	for i2,game2 in ipairs(games2) do&lt;br /&gt;
		if gamesText:lower():find(game2) then&lt;br /&gt;
			counter = counter + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if counter == #games2 or gamesText == &amp;quot;All Games&amp;quot; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {table.concat({&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-iii&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-vc&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-sa&#039;),&lt;br /&gt;
			p.loadTemplate(frame, &#039;icon-iv&#039;)&lt;br /&gt;
		}, &#039; &#039;), id=&#039;games&#039;})&lt;br /&gt;
	else&lt;br /&gt;
		local games = { &#039;iii&#039;, &#039;vc&#039;, &#039;sa&#039;, &#039;iv&#039; }&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for i,game in ipairs(games) do&lt;br /&gt;
			if gamesText:lower():find(game) then&lt;br /&gt;
				table.insert(out, p.loadTemplate(frame, &#039;icon-&#039;..game, {}))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {table.concat(out, &#039; &#039;), id=&#039;games&#039;})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.onlineBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.sp == &#039;true&#039; or args.online == &#039;false&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Offline Only&#039;,id=&#039;online&#039;});&lt;br /&gt;
	elseif args.sp == &#039;false&#039; or args.offline == &#039;false&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Online Only&#039;,id=&#039;online&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Online and Offline&#039;,id=&#039;online&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.settableBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Read-Only&#039;,id=&#039;settable&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Read and Set&#039;,id=&#039;settable&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.cancellableBox(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isCancellable(frame)then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;GreenInformationBox&#039;, {&#039;Cancellable&#039;,id=&#039;cancellable&#039;});&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;RedInformationBox&#039;, {&#039;Not Cancellable&#039;,id=&#039;cancellable&#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item parts&lt;br /&gt;
function p.since(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if not args.since then&lt;br /&gt;
		return p.documentationMissing(frame, &amp;quot;Available since&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local sideVersions = p.getSideVersions(args.since, args.side)&lt;br /&gt;
		if #sideVersions == 2 then&lt;br /&gt;
			return &amp;quot;&#039;&#039;&#039;Server &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;Client &amp;quot;..sideVersions[2]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			if args.side == &#039;server&#039; then&lt;br /&gt;
				return &amp;quot;&#039;&#039;&#039;Server &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
			elseif args.side == &#039;client&#039; then&lt;br /&gt;
				return &amp;quot;&#039;&#039;&#039;Client &amp;quot;..sideVersions[1]..&amp;quot;&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				return p.documentationMissing(frame, &amp;quot;Available since (Both server and client version is needed for shared items)&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.syntax(frame)&lt;br /&gt;
	--[[&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.syntax then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntax),id=&#039;syntax&#039;})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.syntaxSS and args.syntaxCS then&lt;br /&gt;
		local rows = {}&lt;br /&gt;
		rows[1] = { &amp;quot;&#039;&#039;&#039;Server:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntaxSS),id=&#039;syntaxss&#039;}) }&lt;br /&gt;
		rows[2] = { &amp;quot;&#039;&#039;&#039;Client:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.syntaxCS),id=&#039;syntaxcs&#039;}) }&lt;br /&gt;
		return p.table(false, rows, { 100 }, false)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.documentationMissing(frame, &amp;quot;Syntax&amp;quot;)&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local isEvent = args.type == &#039;event&#039;&lt;br /&gt;
&lt;br /&gt;
	local returnType = &#039;void&#039;&lt;br /&gt;
	local argsText = {}&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
&lt;br /&gt;
		if #entries == 0 then&lt;br /&gt;
		else&lt;br /&gt;
			local tokens = p.split(entries[1], &#039; &#039;)&lt;br /&gt;
			&lt;br /&gt;
			returnType = tokens[1]&lt;br /&gt;
			returnType = p.standardizeNullType(returnType)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
&lt;br /&gt;
		if isEvent then&lt;br /&gt;
			table.insert(entries, 1, &#039;Event event&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if isEvent and args.syntax and args.syntax:lower() == &#039;event event&#039; then&lt;br /&gt;
		elseif #entries == 0 or entries[1] == &amp;quot;void&amp;quot; then&lt;br /&gt;
		else&lt;br /&gt;
			for i,arg in ipairs(entries) do&lt;br /&gt;
                table.insert(argsText, p.getArgSyntaxText(p.getArgParts(arg)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			p.getDisplayedName(frame)&lt;br /&gt;
			..&#039;(&#039;..(#argsText == 0 and &#039;void&#039; or table.concat(argsText, &#039;, &#039;))..&#039;)&#039;&lt;br /&gt;
		})&lt;br /&gt;
	elseif args.type == &#039;property&#039; or args.type == &#039;variable&#039; then&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			returnType..&#039; &#039;..p.getDisplayedName(frame)&lt;br /&gt;
		})&lt;br /&gt;
	else&lt;br /&gt;
		return p.loadTemplate(frame, &#039;CodeSyntax&#039;, {&lt;br /&gt;
			returnType&lt;br /&gt;
			..&#039; &#039;..p.getDisplayedName(frame)&lt;br /&gt;
			..&#039;(&#039;..(#argsText == 0 and &#039;void&#039; or table.concat(argsText, &#039;, &#039;))..&#039;)&#039;&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getArgParts(text)&lt;br /&gt;
	--[[&lt;br /&gt;
        INPUT EXAMPLES (str)&lt;br /&gt;
        Vec3 pos The 3D position&lt;br /&gt;
        [Vec3 pos] The 3D position.&lt;br /&gt;
        [ Vec3 pos ] The 3D position&lt;br /&gt;
        [ Vec3 pos = new Vec3(0.0, 0.0, 0.0) ] The 3D position.&lt;br /&gt;
&lt;br /&gt;
        OUTPUT (table)&lt;br /&gt;
        bool parts.optional&lt;br /&gt;
        bool parts.defaultValueIsSpecified&lt;br /&gt;
		str parts.type&lt;br /&gt;
		str parts.name&lt;br /&gt;
		str parts.defaultValue&lt;br /&gt;
		str parts.description&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
&lt;br /&gt;
	text = p.trim(text)&lt;br /&gt;
&lt;br /&gt;
    parts.optional = false&lt;br /&gt;
	local isProbablyOptional = text:sub(1, 1) == &#039;[&#039;&lt;br /&gt;
	if isProbablyOptional then&lt;br /&gt;
		local optionalEndIndex = p.rfind(text, &#039;]&#039;)&lt;br /&gt;
		if optionalEndIndex then&lt;br /&gt;
            parts.optional = true&lt;br /&gt;
            local syntaxPart = p.trim(text:sub(2, optionalEndIndex - 1))&lt;br /&gt;
            parts.description = p.trim(text:sub(optionalEndIndex + 1, #text))&lt;br /&gt;
            local tokens = p.split(syntaxPart, &#039; &#039;)&lt;br /&gt;
            parts.type = tokens[1]&lt;br /&gt;
            parts.name = tokens[2]&lt;br /&gt;
            parts.defaultValueIsSpecified = tokens[3] == &#039;=&#039; and #tokens &amp;gt;= 4&lt;br /&gt;
            parts.defaultValue = table.concat(tokens, &#039; &#039;, 4, #tokens)&lt;br /&gt;
            return parts&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local tokens = p.split(text, &#039; &#039;)&lt;br /&gt;
    parts.type = tokens[1]&lt;br /&gt;
    parts.name = tokens[2]&lt;br /&gt;
    parts.description = p.trim(table.concat(tokens, &#039; &#039;, 3, #tokens))&lt;br /&gt;
    return parts&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getArgSyntaxText(parts)&lt;br /&gt;
    if parts.optional then&lt;br /&gt;
        if parts.defaultValueIsSpecified then&lt;br /&gt;
            return &#039;[ &#039;..parts.type..&#039; &#039;..parts.name..&#039; = &#039;..parts.defaultValue..&#039; ]&#039;&lt;br /&gt;
        else&lt;br /&gt;
            return &#039;[ &#039;..parts.type..&#039; &#039;..parts.name..&#039; ]&#039;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return parts.type..&#039; &#039;..parts.name&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.description(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;desc&#039;)&lt;br /&gt;
	&lt;br /&gt;
	local startTextFirstLine = &amp;quot;The &amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace;\&amp;quot;&amp;gt;&amp;quot;..p.getDisplayedNameColoured(frame)..&amp;quot;&amp;lt;/span&amp;gt; &amp;quot;..args.type:lower()..&amp;quot; is &amp;quot;..(args.type == &amp;quot;event&amp;quot; and &amp;quot;invoked when&amp;quot; or &amp;quot;used to&amp;quot;)..&amp;quot; &amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		if i == 1 then&lt;br /&gt;
			entry = startTextFirstLine..entry&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		entries[i] = p.formatDescription(entry)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(entries, &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parameters(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	local isEvent = args.type == &#039;event&#039;&lt;br /&gt;
	&lt;br /&gt;
	if isEvent and args.syntax and args.syntax:lower() == &#039;event event&#039; then&lt;br /&gt;
	elseif #entries == 0 or entries[1] == &amp;quot;void&amp;quot; then&lt;br /&gt;
		local headers = nil&lt;br /&gt;
		local rows = { { p.formatType(&amp;quot;void&amp;quot;, frame), &amp;quot;This &amp;quot;..args.type..&amp;quot; doesn&#039;t take any parameters.&amp;quot; } }&lt;br /&gt;
		local widths = { 120, 400 }&lt;br /&gt;
		return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		for i,arg in ipairs(entries) do&lt;br /&gt;
			local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
			if isEvent then&lt;br /&gt;
				rows[i] = { (i + 1)..&amp;quot;) &amp;quot;, p.formatType(tokens[1], frame), p.formatName(tokens[2], frame), p.formatDescription(table.concat(tokens, &#039; &#039;, 3, #tokens)) }&lt;br /&gt;
			else&lt;br /&gt;
				local parts = p.getArgParts(arg)&lt;br /&gt;
&lt;br /&gt;
				if parts.optional then&lt;br /&gt;
					if parts.defaultValueIsSpecified then&lt;br /&gt;
						rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), &amp;quot;Optional, defaults to &amp;quot;..p.formatDefaultValue(parts.defaultValue, frame)..&amp;quot;. &amp;quot;..p.formatDescription(parts.description) }&lt;br /&gt;
					else&lt;br /&gt;
						rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), &amp;quot;Optional, the default value has not been documented here yet. &amp;quot;..p.formatDescription(parts.description) }&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					rows[i] = { i..&amp;quot;) &amp;quot;, p.formatType(parts.type, frame), p.formatName(parts.name, frame), p.formatDescription(parts.description) }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		table.insert(rows, 1, { &amp;quot;1) &amp;quot;, p.formatType(&amp;quot;Event&amp;quot;, frame), p.formatName(&amp;quot;event&amp;quot;, frame), &amp;quot;The event object for this event.&amp;quot; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local headers, widths&lt;br /&gt;
	if isEvent then&lt;br /&gt;
		headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 30, 80, 110, 400 }&lt;br /&gt;
	else&lt;br /&gt;
		headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Presence&amp;quot;, &amp;quot;Default Value&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 30, 80, 110, 400 }&lt;br /&gt;
	end&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-parameters wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.returns(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local text = &amp;quot;&amp;quot;&lt;br /&gt;
	local entries&lt;br /&gt;
	local rows&lt;br /&gt;
	local headers&lt;br /&gt;
	local widths&lt;br /&gt;
	local isVoidReturn = false&lt;br /&gt;
	&lt;br /&gt;
	rows = {}&lt;br /&gt;
	entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		text = text..p.documentationMissing(frame, &amp;quot;Returns&amp;quot;)..&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		for i,arg in ipairs(entries) do&lt;br /&gt;
			local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
			&lt;br /&gt;
			local type = tokens[1]&lt;br /&gt;
			type = p.standardizeNullType(type)&lt;br /&gt;
			&lt;br /&gt;
			local description&lt;br /&gt;
			if type:lower() == &amp;quot;void&amp;quot; then&lt;br /&gt;
				isVoidReturn = true&lt;br /&gt;
				description = &amp;quot;This &amp;quot;..args.type..&amp;quot; doesn&#039;t return a value.&amp;quot;&lt;br /&gt;
			elseif tokens[2] then&lt;br /&gt;
				description = p.formatDescription(table.concat(tokens, &#039; &#039;, 2))&lt;br /&gt;
			else&lt;br /&gt;
				description = p.documentationMissing(frame, &amp;quot;Description for return value&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			rows[i] = { p.formatType(tokens[1], frame), description }&lt;br /&gt;
		end&lt;br /&gt;
		headers = nil-- { &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
		widths = { 120, 400 }&lt;br /&gt;
		text = text..p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	-- commented out as failure returns are not currently implemented in GTAC.&lt;br /&gt;
	if not isVoidReturn then&lt;br /&gt;
		rows = {}&lt;br /&gt;
		entries = p.getIndexedArgs(frame, &#039;freturn&#039;)&lt;br /&gt;
		text = text..&amp;quot;&#039;&#039;&#039;Failure Return:&#039;&#039;&#039;\n\n&amp;quot;&lt;br /&gt;
		if #entries == 0 then&lt;br /&gt;
			text = text..p.documentationMissing(frame, &amp;quot;Failure returns&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			for i,arg in ipairs(entries) do&lt;br /&gt;
				local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
				&lt;br /&gt;
				local type = tokens[1]&lt;br /&gt;
				type = p.standardizeNullType(type)&lt;br /&gt;
				&lt;br /&gt;
				local value&lt;br /&gt;
				if type:lower() == &#039;void&#039; then&lt;br /&gt;
					value = &amp;quot;n/a&amp;quot;&lt;br /&gt;
				elseif tokens[2] then&lt;br /&gt;
					value = p.formatSource(table.concat(tokens, &#039; &#039;, 2), frame)&lt;br /&gt;
				else&lt;br /&gt;
					value = p.formatSource(p.documentationMissing(frame, &amp;quot;Description for failure return value&amp;quot;), frame)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				rows[i] = { p.formatType(tokens[1], frame), value }&lt;br /&gt;
			end&lt;br /&gt;
			headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Value&amp;quot; }&lt;br /&gt;
			widths = { 120, 400 }&lt;br /&gt;
			text = text..p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.callbacks(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local suffixes = {&lt;br /&gt;
		{ &#039;&#039;, &#039;&#039; },&lt;br /&gt;
		{ &#039;SS&#039;, &#039;Server-Side Callbacks&#039; },&lt;br /&gt;
		{ &#039;CS&#039;, &#039;Client-Side Callbacks&#039; }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local html = {}&lt;br /&gt;
	&lt;br /&gt;
	for i3,suffixData in ipairs(suffixes) do&lt;br /&gt;
		local suffix = suffixData[1]&lt;br /&gt;
		&lt;br /&gt;
		local parameters = p.getIndexedArgs(frame, &#039;arg&#039;)&lt;br /&gt;
		for i=1, #parameters do&lt;br /&gt;
			local callbackSyntax = {}&lt;br /&gt;
			local callbackText = args[&#039;cb&#039;..i..&#039;Text&#039;..suffix]&lt;br /&gt;
			local callbackNParameters = p.getIndexedArgs(frame, &#039;cb&#039;..i..&#039;arg&#039;..suffix)&lt;br /&gt;
			&lt;br /&gt;
			if #callbackNParameters &amp;gt; 0 then&lt;br /&gt;
				if suffixData[1] ~= &#039;&#039; then&lt;br /&gt;
					table.insert(html, &amp;quot;&#039;&#039;&#039;&amp;quot;..suffixData[2]..&amp;quot;&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local parameterTokens = p.split(parameters[i], &#039; &#039;)&lt;br /&gt;
				local rows = {}&lt;br /&gt;
				&lt;br /&gt;
				for i2,callbackNParameter in ipairs(callbackNParameters) do&lt;br /&gt;
					local callbackTokens = p.split(callbackNParameter, &#039; &#039;)&lt;br /&gt;
					&lt;br /&gt;
					local parameterType = callbackTokens[1]&lt;br /&gt;
					local parameterName = callbackTokens[2]&lt;br /&gt;
					local description = p.formatDescription(table.concat(callbackTokens, &#039; &#039;, 3))&lt;br /&gt;
					&lt;br /&gt;
					do&lt;br /&gt;
						if parameterType == &amp;quot;void&amp;quot; then&lt;br /&gt;
							table.insert(callbackSyntax, &#039;void&#039;)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(callbackSyntax, parameterType..&#039; &#039;..parameterName)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					rows[i2] = { i2..&#039;) &#039;, p.formatType(parameterType, frame), p.formatName(parameterName, frame), description }&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				local callbackSyntax2 = #callbackSyntax == 0 and &#039;void&#039; or table.concat(callbackSyntax, &#039;, &#039;)&lt;br /&gt;
&lt;br /&gt;
				if #parameterTokens &amp;gt; 0 then&lt;br /&gt;
					local syntaxLine = parameterTokens[1]..&#039; &#039;..parameterTokens[2]..&#039;(&#039;..callbackSyntax2..&#039;)&#039;&lt;br /&gt;
					syntaxLine = p.loadTemplate(frame, &#039;CodeSyntax&#039;, {syntaxLine})&lt;br /&gt;
					table.insert(html, syntaxLine)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if callbackText and #callbackText &amp;gt; 0 then&lt;br /&gt;
					table.insert(html, callbackText)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local headers, widths&lt;br /&gt;
				headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Name&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
				widths = { 30, 80, 110, 400 }&lt;br /&gt;
				local table2 = &amp;quot;\n&amp;quot;..p.table(headers, rows, widths, &#039;wikitable-callback wikitable&#039;)&lt;br /&gt;
				table.insert(html, table2)&lt;br /&gt;
				&lt;br /&gt;
				if i ~= #parameters then&lt;br /&gt;
					table.insert(html, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackSyntax then&lt;br /&gt;
		table.concat(html, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntax, true),id=&#039;callbacks&#039;}))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.callbackSyntaxSS and args.callbackSyntaxCS then&lt;br /&gt;
		local rows = {}&lt;br /&gt;
		rows[1] = { &amp;quot;&#039;&#039;&#039;Server:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntaxSS, true),id=&#039;callbacks&#039;}) }&lt;br /&gt;
		rows[2] = { &amp;quot;&#039;&#039;&#039;Client:&#039;&#039;&#039;&amp;quot;, p.loadTemplate(frame, &#039;CodeSyntax&#039;, {p.buildSyntax(frame, args.callbackSyntaxCS, true),id=&#039;callbacks&#039;}) }&lt;br /&gt;
		table.concat(html, p.table(false, rows, { 100 }, false, &#039;wikitable-callback wikitable&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return #html &amp;gt; 0 and table.concat(html, &#039;&#039;) or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	if p.isCancellable(frame) then&lt;br /&gt;
		rows[1] = { &#039;cancellable&#039;, &#039;This &#039;..args.type..&#039; can be cancelled, by using [[event.preventDefault|event.preventDefault]]().&#039; }&lt;br /&gt;
	else&lt;br /&gt;
		rows[1] = { p.formatType(&#039;const&#039;, frame), &#039;This &#039;..args.type..&#039; cannot be cancelled.&#039; }&lt;br /&gt;
	end&lt;br /&gt;
	local widths = { 120, 400 }&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.value(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if not args.value then&lt;br /&gt;
		return p.documentationMissing(frame, &amp;quot;Value type and description&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local arg = args.value&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local description = p.formatDescription(table.concat(tokens, &#039; &#039;, 2))&lt;br /&gt;
	&lt;br /&gt;
	local headers = nil--{ &amp;quot;Type&amp;quot;, &amp;quot;Description&amp;quot; }&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	rows[1] = { p.formatType(tokens[1], frame), description }&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		rows[2] = { p.formatType(&#039;readonly&#039;, frame), &#039;This &#039;..args.type..&#039; cannot be changed.&#039; }&lt;br /&gt;
	else&lt;br /&gt;
		rows[2] = { &#039;read/set&#039;, &#039;This &#039;..args.type..&#039; can be changed, as well as read.&#039; }&lt;br /&gt;
	end&lt;br /&gt;
	local widths = { 120, 400 }&lt;br /&gt;
	return p.table(headers, rows, widths, &#039;wikitable-returns wikitable&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.settable(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if args.readonly == &#039;true&#039; then&lt;br /&gt;
		return &amp;quot;This &amp;quot;..args.type..&amp;quot; is read-only.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;This &amp;quot;..args.type..&amp;quot; can be read and set.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.types(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return p.getTypesText(frame, args.class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.symbols(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return p.getSymbolsText(frame, args.class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.notes(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;note&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		return &amp;quot;There aren&#039;t any notes for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		entries[i] = p.dot(entry)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;* &amp;quot;..table.concat(entries, &amp;quot;\n* &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.examples(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local data = {&lt;br /&gt;
		{ &amp;quot;example&amp;quot;, &amp;quot;&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleSS&amp;quot;, &amp;quot;Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleCS&amp;quot;, &amp;quot;Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleJS&amp;quot;, &amp;quot;JavaScript&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleLua&amp;quot;, &amp;quot;Lua&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleSquirrel&amp;quot;, &amp;quot;Squirrel&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleJSSS&amp;quot;, &amp;quot;JavaScript - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleJSCS&amp;quot;, &amp;quot;JavaScript - Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleLuaSS&amp;quot;, &amp;quot;Lua - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleLuaCS&amp;quot;, &amp;quot;Lua - Client-Side&amp;quot; },&lt;br /&gt;
		&lt;br /&gt;
		{ &amp;quot;exampleSquirrelSS&amp;quot;, &amp;quot;Squirrel - Server-Side&amp;quot; },&lt;br /&gt;
		{ &amp;quot;exampleSquirrelCS&amp;quot;, &amp;quot;Squirrel - Client-Side&amp;quot; }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local examples = {}&lt;br /&gt;
	local exampleIndex = 1&lt;br /&gt;
	for i,data2 in ipairs(data) do&lt;br /&gt;
		local entries = p.getIndexedArgs(frame, data2[1])&lt;br /&gt;
		for i2, entry in ipairs(entries) do&lt;br /&gt;
			local entry2 = &amp;quot;&#039;&#039;&#039;Example &amp;quot;..exampleIndex..&amp;quot; - &amp;quot;..data2[2]..&amp;quot;:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;quot;..p.loadTemplate(frame, &#039;CodeSyntax&#039;, {entry,id=&#039;example_&#039;..exampleIndex})&lt;br /&gt;
			table.insert(examples, entry2)&lt;br /&gt;
			exampleIndex = exampleIndex + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #examples == 0 then&lt;br /&gt;
		return &amp;quot;There aren&#039;t any examples for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(examples, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.compatibility(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local entries1 = p.getIndexedArgs(frame, &#039;previous&#039;)&lt;br /&gt;
	local entries2 = p.getIndexedArgs(frame, &#039;compat&#039;)&lt;br /&gt;
	if #entries1 == 0 and #entries2 == 0 then&lt;br /&gt;
		return &amp;quot;There isn&#039;t any compatibility information for this &amp;quot;..args.type..&amp;quot;.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		local entriesOut = {}&lt;br /&gt;
		for i,arg in ipairs(entries1) do&lt;br /&gt;
			local versionsText, tokens = p.getVersionsText(arg, args.side, 2)&lt;br /&gt;
			entriesOut[i] = &amp;quot;This &amp;quot;..args.type..&amp;quot; was previously named &amp;lt;code&amp;gt;&amp;quot;..tokens[1]..&amp;quot;&amp;lt;/code&amp;gt; in &amp;quot;..versionsText..&amp;quot;.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		local offset = #entriesOut&lt;br /&gt;
		for i,arg in ipairs(entries2) do&lt;br /&gt;
			entriesOut[i + offset] = p.dot(arg)&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;quot;* &amp;quot;..table.concat(entriesOut, &amp;quot;\n* &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.related(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local categoryTitle = p.getItemCategory(frame)&lt;br /&gt;
	if categoryTitle and categoryTitle:len() &amp;gt; 0 then&lt;br /&gt;
		local shared = args.side:lower() == &#039;shared&#039;&lt;br /&gt;
		local server = args.side:lower() == &#039;shared&#039; or args.side:lower() == &#039;server&#039;&lt;br /&gt;
		local client = args.side:lower() == &#039;shared&#039; or args.side:lower() == &#039;client&#039;&lt;br /&gt;
		local pageName = args.type:lower() == &#039;event&#039; and &#039;Event&#039; or &#039;Function&#039;&lt;br /&gt;
		&lt;br /&gt;
		local parts = {}&lt;br /&gt;
		&lt;br /&gt;
		local name&lt;br /&gt;
		if args.type == &#039;property&#039; then&lt;br /&gt;
			name = args.class..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
		else&lt;br /&gt;
			name = args.name&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if server then&lt;br /&gt;
			local title = &#039;Server/&#039;..pageName..&#039;s/&#039;..categoryTitle&lt;br /&gt;
			local t = p.loadTemplate(frame, title, args)&lt;br /&gt;
			&lt;br /&gt;
			--t = p.remove(t, &amp;quot;[[&amp;quot;..name..&amp;quot;|&amp;quot;..name..&amp;quot;]]&amp;lt;br&amp;gt;\n&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			--[[&lt;br /&gt;
			t = p.replace(t, &amp;quot;  &amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\t&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\r&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\n&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;&amp;lt;a class=\&amp;quot;mw-selflink selflink\&amp;quot;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
			]]&lt;br /&gt;
			&lt;br /&gt;
			table.insert(parts, &amp;quot;&#039;&#039;&#039;Server Related&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;..t)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if client then&lt;br /&gt;
			local title = &#039;Client/&#039;..pageName..&#039;s/&#039;..categoryTitle&lt;br /&gt;
			local t = p.loadTemplate(frame, title, args)&lt;br /&gt;
			&lt;br /&gt;
			--t = p.remove(t, &amp;quot;[[&amp;quot;..name..&amp;quot;|&amp;quot;..name..&amp;quot;]]&amp;lt;br&amp;gt;\n&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			--[[&lt;br /&gt;
			t = p.replace(t, &amp;quot;  &amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\t&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\r&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;\n&amp;quot;);&lt;br /&gt;
			t = p.remove(t, &amp;quot;&amp;lt;a class=\&amp;quot;mw-selflink selflink\&amp;quot;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;)&lt;br /&gt;
			]]&lt;br /&gt;
			&lt;br /&gt;
			table.insert(parts, &amp;quot;&#039;&#039;&#039;Client Related&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;..t)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return table.concat(parts, &#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item category&lt;br /&gt;
function p.getItemCategory(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local resolvedNameLower = p.getDisplayedName(frame):lower()&lt;br /&gt;
	&lt;br /&gt;
	for categoryTitle,categoryData in pairs(p.categoryItems) do&lt;br /&gt;
		for i2,resolvedItemName in ipairs(categoryData) do&lt;br /&gt;
			if resolvedNameLower == resolvedItemName:lower() then&lt;br /&gt;
				return categoryTitle&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i,categoryTitle in ipairs(p.categoryWords) do&lt;br /&gt;
		if resolvedNameLower:find(categoryTitle:lower(), 1, true) then&lt;br /&gt;
			return categoryTitle&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- item part utility&lt;br /&gt;
function p.getType(text)&lt;br /&gt;
	local finds = { &amp;quot;variable&amp;quot;, &amp;quot;function&amp;quot;, &amp;quot;property&amp;quot;, &amp;quot;method&amp;quot;, &amp;quot;event&amp;quot;, &amp;quot;define&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;Variable&amp;quot;, &amp;quot;Function&amp;quot;, &amp;quot;Property&amp;quot;, &amp;quot;Method&amp;quot;, &amp;quot;Event&amp;quot;, &amp;quot;Define&amp;quot; }&lt;br /&gt;
	local defaults = {}&lt;br /&gt;
	return p.findText(text, finds, replaces, defaults, &amp;quot;&#039;&#039;&#039;undocumented type&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getGames(text)&lt;br /&gt;
	local finds = { &amp;quot;iii&amp;quot;, &amp;quot;vc&amp;quot;, &amp;quot;sa&amp;quot;, &amp;quot;iv&amp;quot;, &amp;quot;ug&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;GTA III&amp;quot;, &amp;quot;GTA VC&amp;quot;, &amp;quot;GTA SA&amp;quot;, &amp;quot;GTA IV&amp;quot;, &amp;quot;GTA UG&amp;quot; }&lt;br /&gt;
	local defaults = { &amp;quot;all&amp;quot;, &amp;quot;all games&amp;quot; }&lt;br /&gt;
	return p.findText(text, finds, replaces, defaults, &amp;quot;All Games&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSide(text)&lt;br /&gt;
	local finds = { &amp;quot;shared&amp;quot;, &amp;quot;server&amp;quot;, &amp;quot;client&amp;quot; }&lt;br /&gt;
	local replaces = { &amp;quot;Server and Client&amp;quot;, &amp;quot;Server Only&amp;quot;, &amp;quot;Client Only&amp;quot; }&lt;br /&gt;
	local defaults = {}&lt;br /&gt;
	local result = p.findText(text, finds, replaces, defaults, &amp;quot;&#039;&#039;&#039;undocumented side&#039;&#039;&#039;&amp;quot;)&lt;br /&gt;
	local isShared = result == replaces[1]&lt;br /&gt;
	return result, isShared&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDisplayedName(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isOOP(frame) then&lt;br /&gt;
		return p.lowerFirstCharCase(args.class)..&amp;quot;.&amp;quot;..args.name&lt;br /&gt;
	else&lt;br /&gt;
		return args.name&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTypeRgb()&lt;br /&gt;
	return &#039;#009106&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNameRgb()&lt;br /&gt;
	return &#039;#0645ad&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDisplayedNameColoured(frame)&lt;br /&gt;
	local typeRgb = p.getTypeRgb()&lt;br /&gt;
	local nameRgb = p.getNameRgb()&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if p.isOOP(frame) then&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&#039;color:&amp;quot;..typeRgb..&amp;quot;;&#039;&amp;gt;&amp;quot;..p.lowerFirstCharCase(args.class)..&amp;quot;&amp;lt;/span&amp;gt;.&amp;lt;span style=&#039;color:&amp;quot;..nameRgb..&amp;quot;&#039;;&amp;gt;&amp;quot;..args.name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&#039;color:&amp;quot;..nameRgb..&amp;quot;&#039;;&amp;gt;&amp;quot;..args.name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSuccessReturnTypes(frame)&lt;br /&gt;
	local entries = p.getIndexedArgs(frame, &#039;return&#039;)&lt;br /&gt;
	if #entries == 0 then&lt;br /&gt;
		return &amp;quot;unknown&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	for i,entry in ipairs(entries) do&lt;br /&gt;
		local tokens = p.split(entry, &#039; &#039;)&lt;br /&gt;
		entries[i] = tokens[1]&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(entries, &amp;quot;, &amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isOOP(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return args.type == &amp;quot;property&amp;quot; or args.type == &amp;quot;method&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.warning(frame, text)&lt;br /&gt;
	return p.loadTemplate(frame, &#039;BlueInformationBox&#039;, {text})..&#039;\n&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.documentationMissing(frame, text)&lt;br /&gt;
	return p.warning(frame, &amp;quot;Documentation Missing: &amp;quot;..text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.buildSyntax(frame, parameters, isCallback)&lt;br /&gt;
	if isCallback == nil then&lt;br /&gt;
		isCallback = false;&lt;br /&gt;
	end&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	if not isCallback and (args.type == &#039;variable&#039; or args.type == &#039;property&#039;) then&lt;br /&gt;
		return p.getSuccessReturnTypes(frame)..&amp;quot; &amp;quot;..p.getDisplayedName(frame)&lt;br /&gt;
	elseif isCallback or args.type == &#039;event&#039; then&lt;br /&gt;
		return &amp;quot;function(&amp;quot;..parameters..&amp;quot;)&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return p.getSuccessReturnTypes(frame)..&amp;quot; &amp;quot;..p.getDisplayedName(frame)..&amp;quot;(&amp;quot;..parameters..&amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTypesText(frame, baseType)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local derivedTypes = {&lt;br /&gt;
		ped			    = {&#039;Player&#039;},&lt;br /&gt;
		physical		= {&#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		entity			= {&#039;Building&#039;, &#039;Physical&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		element			= {&#039;Blip&#039;, &#039;Entity&#039;, &#039;Marker&#039;, &#039;Building&#039;, &#039;Physical&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Vehicle&#039;, &#039;Player&#039;},&lt;br /&gt;
		vehicle			= {&#039;Train&#039;},&lt;br /&gt;
		event			= {&#039;CancellableEvent&#039;, &#039;KeyEvent&#039;},&lt;br /&gt;
		surface			= {&#039;RenderTarget&#039;, &#039;Texture&#039;}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local serverTypes = {}&lt;br /&gt;
	local sharedTypes = {&lt;br /&gt;
		&#039;Building&#039;, &#039;Client&#039;, &#039;Effect&#039;, &#039;Event&#039;, &#039;Timer&#039;, &#039;ReflectedFunction&#039;, &#039;Resource&#039;, &#039;Stream&#039;, &#039;Vec2&#039;, &#039;Vec3&#039;, &#039;Matrix4x4&#039;,&lt;br /&gt;
		&#039;Element&#039;, &#039;Blip&#039;, &#039;Pickup&#039;, &#039;Entity&#039;, &#039;Physical&#039;,&#039;Vehicle&#039;, &#039;Train&#039;, &#039;XmlDocument&#039;, &#039;XmlElement&#039;,&lt;br /&gt;
		&#039;CancellableEvent&#039;, &#039;KeyEvent&#039;, &#039;Marker&#039;, &#039;Object&#039;, &#039;Ped&#039;, &#039;Player&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local out = {}&lt;br /&gt;
	&lt;br /&gt;
	local getTypeSide = function(type)&lt;br /&gt;
		for i2,type2 in ipairs(serverTypes) do&lt;br /&gt;
			if type:lower() == type2:lower() then&lt;br /&gt;
				return &#039;server&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for i2,type2 in ipairs(sharedTypes) do&lt;br /&gt;
			if type:lower() == type2:lower() then&lt;br /&gt;
				return &#039;shared&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return &#039;client&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if baseType then&lt;br /&gt;
		local baseTypeLower = baseType:lower()&lt;br /&gt;
		local allTypes&lt;br /&gt;
		if derivedTypes[baseTypeLower] then&lt;br /&gt;
			allTypes = p.copyTable(derivedTypes[baseTypeLower])&lt;br /&gt;
			table.insert(allTypes, 1, baseType)&lt;br /&gt;
		else&lt;br /&gt;
			allTypes = { baseType }&lt;br /&gt;
		end&lt;br /&gt;
		local types = {}&lt;br /&gt;
		for i,type in ipairs(allTypes) do&lt;br /&gt;
			types[i] = type&lt;br /&gt;
		end&lt;br /&gt;
		p.sortTable(types)&lt;br /&gt;
		for i,type in ipairs(types) do&lt;br /&gt;
			types[i] = p.loadTemplate(frame, &#039;Side&#039;, {[getTypeSide(type)]=&#039;1&#039;})..&amp;quot; &amp;quot;..&amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace;\&amp;quot;&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		--table.insert(out, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;)&lt;br /&gt;
		table.insert(out, &amp;quot;\n&amp;quot;..table.concat(types, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(out, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSymbolsText(frame, baseType)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local out = {}&lt;br /&gt;
	&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	&lt;br /&gt;
	if args.type == &#039;function&#039; or args.type == &#039;variable&#039; then&lt;br /&gt;
		local parts = p.split(p.getDisplayedName(frame), &amp;quot;.&amp;quot;)&lt;br /&gt;
		for i=1,(#parts)-1,1 do&lt;br /&gt;
			rows[i] = {}&lt;br /&gt;
			rows[i][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[i]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
			rows[i][2] = &#039;Namespace&#039;&lt;br /&gt;
			rows[i][3] = i == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[i-1]&lt;br /&gt;
			rows[i][4] = i == 1 and parts[i]..&#039; is a namespace, which exists in the global namespace.&#039; or parts[i]..&#039; is a namespace, which exists in the &#039;..parts[i-1]..&#039; namespace.&#039;&lt;br /&gt;
		end&lt;br /&gt;
		rows[#parts] = {}&lt;br /&gt;
		rows[#parts][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[#parts]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[#parts][2] = p.properCase(args.type)&lt;br /&gt;
		rows[#parts][3] = #parts == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[#parts-1]&lt;br /&gt;
		rows[#parts][4] = #parts == 1 and parts[1]..&#039; is a &#039;..p.properCase(args.type)..&#039;, which exists in the global namespace.&#039; or parts[#parts]..&#039; is a &#039;..p.properCase(args.type)..&#039;, which exists in the &#039;..parts[#parts-1]..&#039; namespace.&#039;&lt;br /&gt;
	elseif args.type == &#039;method&#039; or args.type == &#039;property&#039; then&lt;br /&gt;
		local parts = p.split(p.getDisplayedName(frame), &amp;quot;.&amp;quot;)&lt;br /&gt;
		rows[1] = {}&lt;br /&gt;
		rows[1][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[1]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[1][2] = &#039;Object&#039;&lt;br /&gt;
		rows[1][3] = &#039;n/a&#039;&lt;br /&gt;
		rows[1][4] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[1]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;..&#039; is an object.&#039;&lt;br /&gt;
		&lt;br /&gt;
		rows[2] = {}&lt;br /&gt;
		rows[2][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[2]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[2][2] = p.properCase(args.type)&lt;br /&gt;
		rows[2][3] = #parts == 1 and &#039;Global&#039; or &#039;Namespace: &#039;..parts[#parts-1]&lt;br /&gt;
		rows[2][4] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..parts[2]..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;..&#039; is a &#039;..p.properCase(args.type)..&#039;, which is used on objects of type &#039;..parts[1]&lt;br /&gt;
	elseif args.type == &#039;event&#039; then&lt;br /&gt;
		rows[1] = {}&lt;br /&gt;
		rows[1][1] = &amp;quot;&amp;lt;span style=\&amp;quot;font-family: &#039;Source Code Pro&#039;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&amp;gt;&amp;quot;..p.getDisplayedName(frame)..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		rows[1][2] = &#039;String&#039;&lt;br /&gt;
		rows[1][3] = &#039;n/a&#039;&lt;br /&gt;
		rows[1][4] = &#039;Events are referenced by name. Event names use data type String.&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--table.insert(out, &amp;quot;&amp;lt;div style=&#039;margin-top: 20px;&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;)&lt;br /&gt;
	local headers = { &#039;Symbol Name&#039;, &#039;Symbol Type&#039;, &#039;Container&#039;, &#039;Description&#039; }&lt;br /&gt;
	table.insert(out, &amp;quot;\n&amp;quot;..p.table(headers, rows, { 120, 120, 400 }, false))&lt;br /&gt;
	&lt;br /&gt;
	if args.type ~= &#039;event&#039; then&lt;br /&gt;
		local languages = { &#039;JS&#039;, &#039;Lua&#039;, &#039;Squirrel&#039; }&lt;br /&gt;
		local languageSymbols = {&lt;br /&gt;
			[&#039;JS&#039;]			= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;dot&#039;,		[&#039;property&#039;] = &#039;dot&#039; },&lt;br /&gt;
			[&#039;Lua&#039;]			= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;colon&#039;,	[&#039;property&#039;] = &#039;dot&#039; },&lt;br /&gt;
			[&#039;Squirrel&#039;]	= { [&#039;function&#039;] = &#039;dot&#039;,	[&#039;variable&#039;] = &#039;dot&#039;,	[&#039;method&#039;] = &#039;dot&#039;,		[&#039;property&#039;] = &#039;dot&#039; }&lt;br /&gt;
		}&lt;br /&gt;
		for i,language in ipairs(languages) do&lt;br /&gt;
			local line&lt;br /&gt;
			if args.type == &#039;function&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to call a function.&#039;&lt;br /&gt;
			elseif args.type == &#039;variable&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to get or set a variable.&#039;&lt;br /&gt;
			elseif args.type == &#039;method&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to call a method.&#039;&lt;br /&gt;
			elseif args.type == &#039;property&#039; then&lt;br /&gt;
				line = language..&#039; uses the &#039;..languageSymbols[language][args.type]..&#039; symbol to get or set a property.&#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(out, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;..line)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(out, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isCancellable(frame)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	return (args.cancel and args.cancel == &#039;true&#039;) or (args.cancel and args.cancel == &#039;true&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatType(type, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getTypeRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatName(name, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..name..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDefaultValue(value, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;span style=&#039;font-family: \&amp;quot;Source Code Pro\&amp;quot;, monospace; color: &amp;quot;..p.getNameRgb()..&amp;quot;;\&amp;quot;&#039;&amp;gt;&amp;quot;..value..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSource(type, frame)&lt;br /&gt;
	return &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..type..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatCode(code)&lt;br /&gt;
	return &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..code..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDescription(description)&lt;br /&gt;
	description = p.capital(description)&lt;br /&gt;
	description = p.dot(description)&lt;br /&gt;
	return description&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.standardizeNullType(type)&lt;br /&gt;
	local type2 = type:lower()&lt;br /&gt;
	if type2 == &#039;void&#039; or type2 == &#039;null&#039; or type2 == &#039;undefined&#039; or type2 == &#039;n/a&#039; then&lt;br /&gt;
		return &#039;void&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return type&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- general utility&lt;br /&gt;
function p.split(str, sep, limit)&lt;br /&gt;
   if not sep or sep == &amp;quot;&amp;quot; then&lt;br /&gt;
      return false&lt;br /&gt;
   end&lt;br /&gt;
   if not str then&lt;br /&gt;
      return false&lt;br /&gt;
   end&lt;br /&gt;
   limit = limit or math.huge&lt;br /&gt;
   if limit == 0 or limit == 1 then&lt;br /&gt;
      return {str}, 1&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local r = {}&lt;br /&gt;
   local n, init = 0, 1&lt;br /&gt;
&lt;br /&gt;
   while true do&lt;br /&gt;
      local s,e = str:find(sep, init, true)&lt;br /&gt;
      if not s then&lt;br /&gt;
         break&lt;br /&gt;
      end&lt;br /&gt;
      r[#r+1] = str:sub(init, s - 1)&lt;br /&gt;
      init = e + 1&lt;br /&gt;
      n = n + 1&lt;br /&gt;
      if n == limit - 1 then&lt;br /&gt;
         break&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if init &amp;lt;= str:len() then&lt;br /&gt;
      r[#r+1] = str:sub(init)&lt;br /&gt;
   else&lt;br /&gt;
      r[#r+1] = &amp;quot;&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
   n = n + 1&lt;br /&gt;
&lt;br /&gt;
   if limit &amp;lt; 0 then&lt;br /&gt;
      for i=n, n + limit + 1, -1 do r[i] = nil end&lt;br /&gt;
      n = n + limit&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   return r, n&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.rfind(s, find)&lt;br /&gt;
	local index = s:reverse():find(find)&lt;br /&gt;
	if not index then return end&lt;br /&gt;
	return #s - index + 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.trim(s)&lt;br /&gt;
	return (string.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitLines(text)&lt;br /&gt;
	text = p.remove(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
	text = p.remove(text, &amp;quot;\r&amp;quot;)&lt;br /&gt;
	return p.split(text, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.remove(text, remove)&lt;br /&gt;
	return p.replace(text, remove, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.replace(text, find, replace)&lt;br /&gt;
	return text:gsub(find, replace)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getIndexedArgs(frame, name)&lt;br /&gt;
	local args = p.getArgs(frame)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	local out = {}&lt;br /&gt;
	if args[name] then&lt;br /&gt;
		out[i] = args[name]&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	while args[name..i] do&lt;br /&gt;
		out[i] = args[name..i]&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.loadTemplate(frame, title, args)&lt;br /&gt;
	return frame:expandTemplate{ title = title, args = args }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSideVersions(arg, side, start)&lt;br /&gt;
	if not start then start = 1 end&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local sideVersions = {}&lt;br /&gt;
	if side == &#039;shared&#039; then&lt;br /&gt;
		if tokens[start+1] then&lt;br /&gt;
			sideVersions[1] = tokens[start]&lt;br /&gt;
			sideVersions[2] = tokens[start+1]&lt;br /&gt;
		else&lt;br /&gt;
			sideVersions[1] = tokens[start]&lt;br /&gt;
		end&lt;br /&gt;
	elseif side == &#039;server&#039; then&lt;br /&gt;
		sideVersions[1] = tokens[start]&lt;br /&gt;
	elseif side == &#039;client&#039; then&lt;br /&gt;
		sideVersions[1] = tokens[start]&lt;br /&gt;
	end&lt;br /&gt;
	return sideVersions, tokens&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getVersionsText(arg, side, start)&lt;br /&gt;
	if not start then start = 1 end&lt;br /&gt;
	local tokens = p.split(arg, &#039; &#039;)&lt;br /&gt;
	local text&lt;br /&gt;
	if side == &#039;shared&#039; then&lt;br /&gt;
		if tokens[start+1] then&lt;br /&gt;
			text = &amp;quot;server version &amp;quot;..tokens[start]..&amp;quot; and client version &amp;quot;..tokens[start+1]&lt;br /&gt;
		else&lt;br /&gt;
			text = &amp;quot;version &amp;quot;..tokens[start]&lt;br /&gt;
		end&lt;br /&gt;
	elseif side == &#039;server&#039; then&lt;br /&gt;
		text = &amp;quot;server version &amp;quot;..tokens[start]&lt;br /&gt;
	elseif side == &#039;client&#039; then&lt;br /&gt;
		text = &amp;quot;client version &amp;quot;..tokens[start]&lt;br /&gt;
	end&lt;br /&gt;
	return text, tokens&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.properCase(text)&lt;br /&gt;
	return text:sub(1,1):upper()..text:sub(2):lower()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.lowerFirstCharCase(text)&lt;br /&gt;
	return text:sub(1,1):lower()..text:sub(2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.findText(text, finds, replaces, defaults, default)&lt;br /&gt;
	if not text then return default end&lt;br /&gt;
	local textLower = text:lower()&lt;br /&gt;
	&lt;br /&gt;
	for i,default2 in ipairs(defaults) do&lt;br /&gt;
		if textLower == default2 then&lt;br /&gt;
			return default&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local items = {}&lt;br /&gt;
	for i,find in ipairs(finds) do&lt;br /&gt;
		if textLower:find(find, 1, true) then&lt;br /&gt;
			table.insert(items, replaces[i])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p.getListText(items)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getListText(items)&lt;br /&gt;
	local count = #items&lt;br /&gt;
	&lt;br /&gt;
	if count == 1 then&lt;br /&gt;
		return items[1]&lt;br /&gt;
	elseif count == 2 then&lt;br /&gt;
		return items[1]..&amp;quot; and &amp;quot;..items[2]&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat(items, &amp;quot;, &amp;quot;, 1, count - 1)..&amp;quot; and &amp;quot;..items[count]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.dot(text)&lt;br /&gt;
	local i = #text&lt;br /&gt;
	while i &amp;gt; 0 and text:sub(i, i) == &amp;quot;.&amp;quot; do&lt;br /&gt;
		i = i - 1&lt;br /&gt;
	end&lt;br /&gt;
	return text:sub(1,i)..&amp;quot;.&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.capital(text)&lt;br /&gt;
	return text:sub(1,1):upper()..text:sub(2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.copyTable(t)&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for k,v in pairs(t) do&lt;br /&gt;
		out[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortTable(t)&lt;br /&gt;
	table.sort(t, function(a,b)&lt;br /&gt;
		return a:lower() &amp;lt; b:lower()&lt;br /&gt;
	end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(headers, rows, widths, tableCssClass)&lt;br /&gt;
	if tableCssClass == nil then tableCssClass = &#039;wikitable&#039; end&lt;br /&gt;
	rows = p.copyTable(rows)&lt;br /&gt;
	if not widths then widths = {} end&lt;br /&gt;
	&lt;br /&gt;
	if headers then&lt;br /&gt;
		headers = p.copyTable(headers)&lt;br /&gt;
		&lt;br /&gt;
		for i,header in ipairs(headers) do&lt;br /&gt;
			local width = widths[i]&lt;br /&gt;
			if width and width &amp;gt; 0 then&lt;br /&gt;
				headers[i] = &amp;quot;id=&#039;th_&amp;quot;..i..&amp;quot;&#039; style=&#039;text-align:left;&amp;quot;..(i==#headers and &#039;min-width&#039; or &#039;width&#039;)..&amp;quot;:&amp;quot;..width..&amp;quot;px;&#039;| &amp;quot;..header&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for i,cell in ipairs(rows[1]) do&lt;br /&gt;
			local width = widths[i]&lt;br /&gt;
			if width and width &amp;gt; 0 then&lt;br /&gt;
				rows[1][i] = &amp;quot;id=&#039;td_&amp;quot;..i..&amp;quot;&#039; style=&#039;text-align:left;&amp;quot;..(i==#rows[1] and &#039;min-width&#039; or &#039;width&#039;)..&amp;quot;:&amp;quot;..width..&amp;quot;px;&#039;| &amp;quot;..cell&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i,row in ipairs(rows) do&lt;br /&gt;
		rows[i] = &#039;|&#039;..table.concat(row, &#039;\n|&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &#039;{|&#039;..(tableCssClass and &#039; class=&amp;quot;&#039;..tableCssClass..&#039;&amp;quot;&#039; or &#039;&#039;)..(headers and &amp;quot; id=&#039;headers&#039; &amp;quot; and &#039;\n!&#039;..table.concat(headers, &#039;\n!&#039;)..&#039;\n|-&#039; or &#039;&#039;)..&#039;\n&#039;..table.concat(rows, &#039;\n|-\n&#039;)..&#039;\n|}&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- return the module&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11368</id>
		<title>OnAddIVNetworkEvent</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=OnAddIVNetworkEvent&amp;diff=11368"/>
		<updated>2026-01-31T02:43:15Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{ScriptItem2 |name = OnAddIVNetworkEvent |side = shared |type = event |games = iv |desc = when a built-in event is sent in GTA IV |arg1 = Client client The client that sent the event |arg2 = Int type The type of event sent |arg3 = String string The name of the client |arg4 = Integer data1 The 1st data arg |arg4 = Integer data2 The 2nd data arg |cancel = true |notes = See the IV events page for a list of event types }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem2&lt;br /&gt;
|name = OnAddIVNetworkEvent&lt;br /&gt;
|side = shared&lt;br /&gt;
|type = event&lt;br /&gt;
|games = iv&lt;br /&gt;
|desc = when a built-in event is sent in GTA IV&lt;br /&gt;
|arg1 = Client client The client that sent the event&lt;br /&gt;
|arg2 = Int type The type of event sent&lt;br /&gt;
|arg3 = String string The name of the client&lt;br /&gt;
|arg4 = Integer data1 The 1st data arg&lt;br /&gt;
|arg4 = Integer data2 The 2nd data arg&lt;br /&gt;
|cancel = true&lt;br /&gt;
|notes = See [[Resources/GTAIV/Events|the IV events page]] for a list of event types&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events/GTAIV&amp;diff=11367</id>
		<title>Template:Client/Events/GTAIV</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events/GTAIV&amp;diff=11367"/>
		<updated>2026-01-31T02:37:08Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{icon-iv}} OnAddIVNetworkEvent&amp;lt;br&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{icon-iv}} [[OnAddIVNetworkEvent|OnAddIVNetworkEvent]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events&amp;diff=11366</id>
		<title>Template:Client/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events&amp;diff=11366"/>
		<updated>2026-01-31T02:36:29Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Camera Events ==&lt;br /&gt;
{{Client/Events/Camera}}&lt;br /&gt;
&lt;br /&gt;
== Chat Events ==&lt;br /&gt;
{{Client/Events/Chat}}&lt;br /&gt;
&lt;br /&gt;
== Cursor Events ==&lt;br /&gt;
{{Client/Events/Cursor}}&lt;br /&gt;
&lt;br /&gt;
== Dodo Events ==&lt;br /&gt;
{{Client/Events/Dodo}}&lt;br /&gt;
&lt;br /&gt;
== Element Events ==&lt;br /&gt;
{{Client/Events/Element}}&lt;br /&gt;
&lt;br /&gt;
== Entity Events ==&lt;br /&gt;
{{Client/Events/Entity}}&lt;br /&gt;
&lt;br /&gt;
== Focus Events ==&lt;br /&gt;
{{Client/Events/Focus}}&lt;br /&gt;
&lt;br /&gt;
== GUI Events ==&lt;br /&gt;
{{Client/Events/GUI}}&lt;br /&gt;
&lt;br /&gt;
== HUD Events ==&lt;br /&gt;
{{Client/Events/HUD}}&lt;br /&gt;
&lt;br /&gt;
== GTA IV Events ==&lt;br /&gt;
{{Client/Events/GTAIV}}&lt;br /&gt;
&lt;br /&gt;
== Key Events ==&lt;br /&gt;
{{Client/Events/Key}}&lt;br /&gt;
&lt;br /&gt;
== Mouse Events ==&lt;br /&gt;
{{Client/Events/Mouse}}&lt;br /&gt;
&lt;br /&gt;
== Network Events ==&lt;br /&gt;
{{Client/Events/Network}}&lt;br /&gt;
&lt;br /&gt;
== Ped Events ==&lt;br /&gt;
{{Client/Events/Ped}}&lt;br /&gt;
&lt;br /&gt;
== Pickup Events ==&lt;br /&gt;
{{Client/Events/Pickup}}&lt;br /&gt;
&lt;br /&gt;
== Process Events ==&lt;br /&gt;
{{Client/Events/Process}}&lt;br /&gt;
&lt;br /&gt;
== Render Events ==&lt;br /&gt;
{{Client/Events/Render}}&lt;br /&gt;
&lt;br /&gt;
== Resource Events ==&lt;br /&gt;
{{Client/Events/Resource}}&lt;br /&gt;
&lt;br /&gt;
== Streaming Events ==&lt;br /&gt;
{{Client/Events/Streaming}}&lt;br /&gt;
&lt;br /&gt;
== Vehicle Events ==&lt;br /&gt;
{{Client/Events/Vehicle}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events&amp;diff=11365</id>
		<title>Template:Client/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:Client/Events&amp;diff=11365"/>
		<updated>2026-01-31T02:36:05Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Camera Events ==&lt;br /&gt;
{{Client/Events/Camera}}&lt;br /&gt;
&lt;br /&gt;
== Chat Events ==&lt;br /&gt;
{{Client/Events/Chat}}&lt;br /&gt;
&lt;br /&gt;
== Cursor Events ==&lt;br /&gt;
{{Client/Events/Cursor}}&lt;br /&gt;
&lt;br /&gt;
== Dodo Events ==&lt;br /&gt;
{{Client/Events/Dodo}}&lt;br /&gt;
&lt;br /&gt;
== Element Events ==&lt;br /&gt;
{{Client/Events/Element}}&lt;br /&gt;
&lt;br /&gt;
== Entity Events ==&lt;br /&gt;
{{Client/Events/Entity}}&lt;br /&gt;
&lt;br /&gt;
== Focus Events ==&lt;br /&gt;
{{Client/Events/Focus}}&lt;br /&gt;
&lt;br /&gt;
== GUI Events ==&lt;br /&gt;
{{Client/Events/GUI}}&lt;br /&gt;
&lt;br /&gt;
== HUD Events ==&lt;br /&gt;
{{Client/Events/HUD}}&lt;br /&gt;
&lt;br /&gt;
== IV Events ==&lt;br /&gt;
{{Client/Events/IV}}&lt;br /&gt;
&lt;br /&gt;
== Key Events ==&lt;br /&gt;
{{Client/Events/Key}}&lt;br /&gt;
&lt;br /&gt;
== Mouse Events ==&lt;br /&gt;
{{Client/Events/Mouse}}&lt;br /&gt;
&lt;br /&gt;
== Network Events ==&lt;br /&gt;
{{Client/Events/Network}}&lt;br /&gt;
&lt;br /&gt;
== Ped Events ==&lt;br /&gt;
{{Client/Events/Ped}}&lt;br /&gt;
&lt;br /&gt;
== Pickup Events ==&lt;br /&gt;
{{Client/Events/Pickup}}&lt;br /&gt;
&lt;br /&gt;
== Process Events ==&lt;br /&gt;
{{Client/Events/Process}}&lt;br /&gt;
&lt;br /&gt;
== Render Events ==&lt;br /&gt;
{{Client/Events/Render}}&lt;br /&gt;
&lt;br /&gt;
== Resource Events ==&lt;br /&gt;
{{Client/Events/Resource}}&lt;br /&gt;
&lt;br /&gt;
== Streaming Events ==&lt;br /&gt;
{{Client/Events/Streaming}}&lt;br /&gt;
&lt;br /&gt;
== Vehicle Events ==&lt;br /&gt;
{{Client/Events/Vehicle}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11364</id>
		<title>ServerRules</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11364"/>
		<updated>2026-01-29T03:55:20Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Server Rules}}&lt;br /&gt;
== General Information ==&lt;br /&gt;
GTA Connected provides the ability for servers to broadcast custom pieces of information (called &amp;quot;rules&amp;quot;) ... These are shown in launcher in the lower box (if enabled) and in the data returned by the server when queried.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:LauncherServerRules.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Rules ==&lt;br /&gt;
* Rules can be added in two ways: using the [[ServerConfiguration|server.xml]] via the &amp;lt;code&amp;gt;&amp;lt;rule&amp;gt;&amp;lt;/code&amp;gt; tag or using the server-side scripting functions [[server.setRule|server.setRule]] and [[server.getRule|server.getRule]]. &lt;br /&gt;
* Setting a rule&#039;s value to null will delete the rule. Server rules are case sensitive so for example, &amp;quot;test&amp;quot; and &amp;quot;Test&amp;quot; will display as separate rules.&amp;lt;br&amp;gt;&lt;br /&gt;
* Server.xml Example: &amp;lt;code&amp;gt;&amp;lt;rule name=&amp;quot;Owner&amp;quot; value=&amp;quot;Your_Name&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Scripting Example: &amp;lt;code&amp;gt;server.setRule(&amp;quot;Owner&amp;quot;, &amp;quot;Your_Name&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules with Extra Features ==&lt;br /&gt;
There are some rules that can be used to take advantage of extra features:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Rule Name&lt;br /&gt;
!Feature&lt;br /&gt;
|-&lt;br /&gt;
|Website&lt;br /&gt;
|Setting a website will take users to the URL provided in their default browser when they choose &amp;quot;Visit Website&amp;quot; when right-clicking on your server in the launcher&lt;br /&gt;
|-&lt;br /&gt;
|Discord&lt;br /&gt;
|Setting a discord URL will open the invite link in the browser (which will connect to the discord app if it&#039;s installed) by right-clicking on the &#039;&#039;&#039;discord&#039;&#039;&#039; line in the rules section and choosing &amp;quot;Visit Website&amp;quot;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11363</id>
		<title>ServerRules</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11363"/>
		<updated>2026-01-29T03:54:55Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Server Rules}}&lt;br /&gt;
== General Information ==&lt;br /&gt;
GTA Connected provides the ability for servers to broadcast custom pieces of information (called &amp;quot;rules&amp;quot;) ... These are shown in launcher in the lower box (if enabled) and in the data returned by the server when queried.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:LauncherServerRules.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Rules ==&lt;br /&gt;
* Rules can be added in two ways: using the [[ServerConfiguration|server.xml]] via the &amp;lt;code&amp;gt;&amp;lt;rule&amp;gt;&amp;lt;/code&amp;gt; tag or using the server-side scripting functions [[server.setRule|server.setRule]] and [[server.getRule|server.getRule]]. &lt;br /&gt;
* Setting a rule&#039;s value to null will delete the rule. Server rules are case sensitive so for example, &amp;quot;test&amp;quot; and &amp;quot;Test&amp;quot; will display as separate rules.&amp;lt;br&amp;gt;&lt;br /&gt;
* Server.xml Example: &amp;lt;code&amp;gt;&amp;lt;rule name=&amp;quot;Owner&amp;quot; value=&amp;quot;Your_Name&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Scripting Example: &amp;lt;code&amp;gt;server.setRule(&amp;quot;Owner&amp;quot;, &amp;quot;Your_Name&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules with Extra Features ==&lt;br /&gt;
There are some rules that can be used to take advantage of extra features:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Rule Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Website&lt;br /&gt;
|Setting a website will take users to the URL provided in their default browser when they choose &amp;quot;Visit Website&amp;quot; when right-clicking on your server in the launcher&lt;br /&gt;
|-&lt;br /&gt;
|Discord&lt;br /&gt;
|Setting a discord URL will open the invite link in the browser (which will connect to the discord app if it&#039;s installed) by right-clicking on the &#039;&#039;&#039;discord&#039;&#039;&#039; line in the rules section and choosing &amp;quot;Visit Website&amp;quot;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11362</id>
		<title>ServerRules</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11362"/>
		<updated>2026-01-29T03:54:01Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Server Rules}}&lt;br /&gt;
== General Information ==&lt;br /&gt;
GTA Connected provides the ability for servers to broadcast custom pieces of information (called &amp;quot;rules&amp;quot;) ... These are shown in launcher in the lower box (if enabled) and in the data returned by the server when queried.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:LauncherServerRules.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Rules ==&lt;br /&gt;
* Rules can be added in two ways: using the [[ServerConfiguration|server.xml]] via the &amp;lt;code&amp;gt;&amp;lt;rule&amp;gt;&amp;lt;/code&amp;gt; tag or using the server-side scripting functions [[server.setRule|server.setRule]] and [[server.getRule|server.getRule]]. &lt;br /&gt;
* Setting a rule&#039;s value to null will delete the rule. Server rules are case sensitive so for example, &amp;quot;test&amp;quot; and &amp;quot;Test&amp;quot; will display as separate rules.&amp;lt;br&amp;gt;&lt;br /&gt;
* Server.xml Example: &amp;lt;code&amp;gt;&amp;lt;rule name=&amp;quot;Owner&amp;quot; value=&amp;quot;Your_Name&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Scripting Example: &amp;lt;code&amp;gt;server.setRule(&amp;quot;Owner&amp;quot;, &amp;quot;Your_Name&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules with Extra Features ==&lt;br /&gt;
There are a few built-in rules that should be used to take advantage of extra features that GTA Connected provides:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Rule Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Website&lt;br /&gt;
|Setting a website will take users to the URL provided in their default browser when they choose &amp;quot;Visit Website&amp;quot; when right-clicking on your server in the launcher&lt;br /&gt;
|-&lt;br /&gt;
|Discord&lt;br /&gt;
|Setting a discord URL will open the invite link in the browser (which will connect to the discord app if it&#039;s installed) by right-clicking on the &#039;&#039;&#039;discord&#039;&#039;&#039; line in the rules section and choosing &amp;quot;Visit Website&amp;quot;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11361</id>
		<title>ServerRules</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ServerRules&amp;diff=11361"/>
		<updated>2026-01-29T03:51:57Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Server Rules}}&lt;br /&gt;
== General Information ==&lt;br /&gt;
GTA Connected provides the ability for servers to broadcast custom pieces of information (called &amp;quot;rules&amp;quot;) ... These are shown in launcher in the lower box (if enabled) and in the data returned by the server when queried. There are a few rules that should be added to utilize extra features but for the most part any rules set are completely custom and are often used to display a server owner&#039;s name, website, or other information.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:LauncherServerRules.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Rules ==&lt;br /&gt;
* Rules can be added in two ways: using the [[ServerConfiguration|server.xml]] via the &amp;lt;code&amp;gt;&amp;lt;rule&amp;gt;&amp;lt;/code&amp;gt; tag or using the server-side scripting functions [[server.setRule|server.setRule]] and [[server.getRule|server.getRule]]. &lt;br /&gt;
* Setting a rule&#039;s value to null will delete the rule. Server rules are case sensitive so for example, &amp;quot;test&amp;quot; and &amp;quot;Test&amp;quot; will display as separate rules.&amp;lt;br&amp;gt;&lt;br /&gt;
* Server.xml Example: &amp;lt;code&amp;gt;&amp;lt;rule name=&amp;quot;Owner&amp;quot; value=&amp;quot;Your_Name&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Scripting Example: &amp;lt;code&amp;gt;server.setRule(&amp;quot;Owner&amp;quot;, &amp;quot;Your_Name&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules with Extra Features ==&lt;br /&gt;
There are a few built-in rules that should be used to take advantage of extra features that GTA Connected provides:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Rule Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|Website&lt;br /&gt;
|Setting a website will take users to the URL provided in their default browser when they choose &amp;quot;Visit Website&amp;quot; when right-clicking on your server in the launcher&lt;br /&gt;
|-&lt;br /&gt;
|Discord&lt;br /&gt;
|Setting a discord URL will open the invite link in the browser (which will connect to the discord app if it&#039;s installed) by right-clicking on the &#039;&#039;&#039;discord&#039;&#039;&#039; line in the rules section and choosing &amp;quot;Visit Website&amp;quot;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:CodeSyntax&amp;diff=11351</id>
		<title>Template:CodeSyntax</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:CodeSyntax&amp;diff=11351"/>
		<updated>2026-01-04T00:44:17Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:syntaxhighlight|{{{1|undocumented-code}}}|lang=javascript|style=border-left: 3px solid grey; padding-left:5px;}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=Template:CodeSyntax&amp;diff=11350</id>
		<title>Template:CodeSyntax</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=Template:CodeSyntax&amp;diff=11350"/>
		<updated>2026-01-04T00:41:55Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&#039;padding: 0px; border-left: 3px solid #666; padding-left:5px; background-color: rgba(200,200,200, .3); font-family: &amp;quot;Source Code Pro&amp;quot;, monospace;&#039;&amp;gt;&lt;br /&gt;
{{{1|undocumented-code-syntax}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11349</id>
		<title>element.ref</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11349"/>
		<updated>2026-01-04T00:37:34Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = property&lt;br /&gt;
|class = Element&lt;br /&gt;
|name = ref&lt;br /&gt;
|returnTypes = int&lt;br /&gt;
|readonly = true&lt;br /&gt;
|usage = gets the internal GTA reference ID of the element&lt;br /&gt;
|returnInfo = the internal GTA reference ID of the element&lt;br /&gt;
|notes = This is NOT the GTAC [[element.id|element ID]]!&amp;lt;br&amp;gt;The ref ID here is used in GTA natives for [[Client/Natives/III|GTA 3]], [[Client/Natives/VC|Vice City]], and [[Client/Natives/SA|San Andreas]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;taxilight&amp;quot;, (command, params) =&amp;gt; { &lt;br /&gt;
    natives.SET_TAXI_LIGHT(localPlayer.vehicle.ref, 1) &lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11348</id>
		<title>element.ref</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11348"/>
		<updated>2026-01-04T00:37:01Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = property&lt;br /&gt;
|class = Element&lt;br /&gt;
|name = ref&lt;br /&gt;
|returnTypes = int&lt;br /&gt;
|readonly = true&lt;br /&gt;
|usage = gets the internal GTA reference ID of the element&lt;br /&gt;
|returnInfo = the internal GTA reference ID of the element&lt;br /&gt;
|notes = This is NOT the GTAC [[element.id|element ID]]!&amp;lt;br&amp;gt;The ref ID here is used in GTA natives for [[Resources/Natives/III|GTA 3]], [[Resources/Natives/VC|Vice City]], and [[Resources/Natives/SA|San Andreas]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;taxilight&amp;quot;, (command, params) =&amp;gt; { &lt;br /&gt;
    natives.SET_TAXI_LIGHT(localPlayer.vehicle.ref, 1) &lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11347</id>
		<title>element.ref</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=element.ref&amp;diff=11347"/>
		<updated>2026-01-04T00:36:40Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: Created page with &amp;quot;{{ScriptItem |endpoint = client |type = property |class = Element |name = ref |returnTypes = int |readonly = true |usage = gets the internal GTA reference ID of the element |returnInfo = the internal GTA reference ID of the element |notes = This is NOT the GTAC element ID!&amp;lt;br&amp;gt;The ref ID here is used in GTA natives for GTA 3, Vice City, and San Andreas |exampleJSCS = addComma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = property&lt;br /&gt;
|class = Element&lt;br /&gt;
|name = ref&lt;br /&gt;
|returnTypes = int&lt;br /&gt;
|readonly = true&lt;br /&gt;
|usage = gets the internal GTA reference ID of the element&lt;br /&gt;
|returnInfo = the internal GTA reference ID of the element&lt;br /&gt;
|notes = This is NOT the GTAC [[element.id|element ID]]!&amp;lt;br&amp;gt;The ref ID here is used in GTA natives for [[Resources/Natives/GTA3|GTA 3]], [[Resources/Natives/GTAVC|Vice City]], and [[Resources/Natives/GTASA|San Andreas]]&lt;br /&gt;
|exampleJSCS = addCommandHandler(&amp;quot;taxilight&amp;quot;, (command, params) =&amp;gt; { &lt;br /&gt;
    natives.SET_TAXI_LIGHT(localPlayer.vehicle.ref, 1) &lt;br /&gt;
});&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=ScriptingExamples/getNearestVehicleInRange&amp;diff=11331</id>
		<title>ScriptingExamples/getNearestVehicleInRange</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=ScriptingExamples/getNearestVehicleInRange&amp;diff=11331"/>
		<updated>2025-12-06T00:58:21Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:getNearestVehicleInRange}}&lt;br /&gt;
== Description == &lt;br /&gt;
Fetch the nearest vehicle from a position and range&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&#039;&#039;&#039;Lua, Server &amp;amp; Client-Side, GTAC versions 1.1.10 and newer:&#039;&#039;&#039;&lt;br /&gt;
{{LuaCode|1=function getNearestVehicleInRange(position, distance)&lt;br /&gt;
    distance = distance or 5&lt;br /&gt;
    for index, vehicle in pairs(getVehicles()) do&lt;br /&gt;
        if position:distance(vehicle.position) &amp;lt;= distance then&lt;br /&gt;
            return vehicle&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return nil&lt;br /&gt;
end}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;JavaScript, Server &amp;amp; Client-Side:&#039;&#039;&#039;&lt;br /&gt;
{{JSCode|1=function getNearestVehicleInRange(position, distance) {&lt;br /&gt;
	return getElementsByType(ELEMENT_VEHICLE)&lt;br /&gt;
	.filter(vehicle =&amp;gt; vehicle.position.distance(position) &amp;lt;= distance)&lt;br /&gt;
	.reduce((i, j) =&amp;gt; position.distance(i.position) &amp;lt;= position.distance(j.position) ? i : j)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=NetworkEvents&amp;diff=11330</id>
		<title>NetworkEvents</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=NetworkEvents&amp;diff=11330"/>
		<updated>2025-12-06T00:52:58Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Network Events}}&lt;br /&gt;
== What are Network Events? ==&lt;br /&gt;
Custom scripted events between server and client. They allow either side (server or client) to &amp;quot;tell&amp;quot; the other side something.&amp;lt;br /&amp;gt;&lt;br /&gt;
Useful for providing extra sync, telling the other side to call a function, or simply sending data back and forth.&lt;br /&gt;
&lt;br /&gt;
== How do I use them? ==&lt;br /&gt;
Network events are universal, regardless of which side is sending and receiving (server or client). On the &amp;quot;sender&amp;quot; side, use [[triggerNetworkEvent|triggerNetworkEvent]], and on the &amp;quot;receiver&amp;quot; side use a [[addNetworkHandler|network event handler]] to run code when receiving it.&amp;lt;br /&amp;gt;&lt;br /&gt;
The only difference is when receiving a network event on the server, a &#039;&#039;client&#039;&#039; object will be the first arg in the handler function so the script knows which client sent it.&lt;br /&gt;
&lt;br /&gt;
== What are some examples? ==&lt;br /&gt;
* [[ScriptingExamples/PlayerSetPositionNativeMP|Set Own Player&#039;s Position (GTA IV, Native MP Mode)]]&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
	<entry>
		<id>https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11329</id>
		<title>graphics.loadPNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.gtaconnected.com/wiki/index.php?title=graphics.loadPNG&amp;diff=11329"/>
		<updated>2025-12-05T23:26:55Z</updated>

		<summary type="html">&lt;p&gt;Vortrex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ScriptItem&lt;br /&gt;
|endpoint = client&lt;br /&gt;
|type = function&lt;br /&gt;
|name = graphics.loadPNG&lt;br /&gt;
|usage = create a texture/surface object from a PNG image [[openFile|file stream]]&lt;br /&gt;
|returnTypes = Texture&lt;br /&gt;
|returnInfo = the texture object&lt;br /&gt;
|parameters = Stream stream OR String url&lt;br /&gt;
|parameter1 = Stream stream The [[openFile|file stream]] of the image, or String with a URL to a PNG file&lt;br /&gt;
|returnFail1 = bool false&lt;br /&gt;
|notes = The first parameter can be either a [[openFile|image]], or a URL to a file on the internet.&amp;lt;br&amp;gt;&lt;br /&gt;
When using a URL, the file must be accessible by the &#039;&#039;&#039;client&#039;&#039;&#039;. The client will use it&#039;s own connection to grab the file and it must be publicly available.&amp;lt;br&amp;gt;&lt;br /&gt;
The texture object created by this function is sometimes referred to as a &amp;quot;surface&amp;quot; like in [[graphics.drawRectangle|graphics.drawRectangle]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Vortrex</name></author>
	</entry>
</feed>