Merge branch 'nightly' into organizing
2
.gitignore
vendored
@@ -3,3 +3,5 @@
|
||||
*.code-workspace
|
||||
config/database.json
|
||||
config/email.json
|
||||
config/discord.json
|
||||
locale/*
|
||||
|
||||
5
IDEAS.md
@@ -374,3 +374,8 @@ Obviously this would still be using slashes for commands still. The way this wor
|
||||
* Place item on ground (crate)
|
||||
* Take second beer from crate
|
||||
* Store second beer in trunk
|
||||
---
|
||||
### Animation/emote, action, and message menu wheels
|
||||
So with new Steam Deck being available now, and all the other attempts to use mobile devices that either emulate or stream the older GTA PC games, I figure we'd need a way for players to interact with each other using them. Roleplay is usually a very chat-oriented gamemode, but I can probably make things easier with simple controls. Also customizable messages, animations, and actions for each menu/wheel slot
|
||||
The inventory system is already planned to use a hotbar/wheel but I don't have all the images for it yet
|
||||
---
|
||||
24
TODO.md
@@ -1,5 +1,23 @@
|
||||
* Finish auto-translate
|
||||
* Add /autotranslate to enable/disable automatic chat translations for all languages, or specific ones by short code (RU, ES, etc)
|
||||
* Finish working on the new job route system
|
||||
== TODO
|
||||
* Finish auto-translator
|
||||
* Add ways to acquire drugs. Pot/coke plants, meth labs, etc
|
||||
* Finish setting up the persistent NPC system
|
||||
* Add yes/no prompts for some important things like
|
||||
* (Business owner) Setting item sell price below order price. Will result in losing money.
|
||||
* Giving house, biz, or vehicle to clan. Clan leaders can revoke permissions and you may be screwed and not able to change it!
|
||||
* Deleting character
|
||||
* Make game messages (big message, small message) into array of types
|
||||
* Array of message types in shared
|
||||
* Font, text, duration, etc arrays in client, indexed by type
|
||||
* Fix the item take/put system for items in vehicle trunks, other items, etc
|
||||
---
|
||||
== Planned Features
|
||||
* Named and scripted NPCs
|
||||
* Racing
|
||||
* Fishing
|
||||
* Stock Market
|
||||
* Mapped interiors for GTA 3
|
||||
* Drug growing/manufacturing
|
||||
---
|
||||
== Bug Fixes
|
||||
* Check natives for if player is console (getPlayerPosition, etc)
|
||||
@@ -22,5 +22,6 @@
|
||||
"Estonian",
|
||||
"Sicilian",
|
||||
"Indian",
|
||||
"Rough"
|
||||
"Rough",
|
||||
"Swedish"
|
||||
]
|
||||
112
config/client/locale.json
Normal file
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"englishName": "English",
|
||||
"stringsFile": "english.json",
|
||||
"isoCode": "en",
|
||||
"flagImageFile": "uk.png",
|
||||
"countries": ["gb", "us", "au", "bz", "ca", "ie", "jm", "nz", "za", "tt"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Vortrex"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"englishName": "Russian",
|
||||
"stringsFile": "russian.json",
|
||||
"isoCode": "ru",
|
||||
"flagImageFile": "ru.png",
|
||||
"countries": ["ru", "ua"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "VNDTTS"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"englishName": "Polish",
|
||||
"stringsFile": "polish.json",
|
||||
"isoCode": "pl",
|
||||
"flagImageFile": "pl.png",
|
||||
"countries": ["pl"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Suprise444"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"englishName": "Spanish",
|
||||
"stringsFile": "spanish.json",
|
||||
"isoCode": "es",
|
||||
"flagImageFile": "es.png",
|
||||
"countries": ["es", "ar", "bo", "cl", "co", "cr", "do", "ec", "sv", "gt", "hn", "mx", "ni", "pa", "py", "pe", "pr", "uy", "ve"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "PerikiyoXD"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"englishName": "Chinese",
|
||||
"stringsFile": "chinese.json",
|
||||
"isoCode": "zh",
|
||||
"flagImageFile": "cn.png",
|
||||
"countries": ["cn", "hk", "sg", "tw"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "Renzuko_Ctone"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"englishName": "Arabic",
|
||||
"stringsFile": "arabic.json",
|
||||
"isoCode": "ar",
|
||||
"flagImageFile": "sa.png",
|
||||
"countries": ["dz", "bh", "eg", "iq", "jo", "kw", "lb", "ly", "ma", "om", "qa", "sa", "sy", "tn", "ae", "ye"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "! KASIR"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"englishName": "Slovak",
|
||||
"stringsFile": "slovak.json",
|
||||
"isoCode": "sk",
|
||||
"flagImageFile": "sk.png",
|
||||
"countries": ["sk"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "UAKLAUS"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"englishName": "German",
|
||||
"stringsFile": "german.json",
|
||||
"isoCode": "de",
|
||||
"flagImageFile": "de.png",
|
||||
"countries": ["de", "at", "be", "ch", "li", "lu"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Sladernimo"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"englishName": "French",
|
||||
"stringsFile": "french.json",
|
||||
"isoCode": "fr",
|
||||
"flagImageFile": "fr.png",
|
||||
"countries": ["fr", "cd", "bj", "bf", "cd", "cg", "ga", "gn", "ml", "mc", "ne", "sn"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Cocam"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"englishName": "Japanese",
|
||||
"stringsFile": "japanese.json",
|
||||
"isoCode": "jp",
|
||||
"flagImageFile": "jp.png",
|
||||
"countries": ["jp"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "Cocam"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"englishName": "Finnish",
|
||||
"stringsFile": "finnish.json",
|
||||
"isoCode": "fi",
|
||||
"flagImageFile": "fi.png",
|
||||
"countries": ["fi"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "SIMBA_MEOW"
|
||||
}
|
||||
]
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"host": "localhost",
|
||||
"user": "",
|
||||
"pass": "",
|
||||
"name": "",
|
||||
"port": 3306,
|
||||
"usePersistentConnection": true
|
||||
}
|
||||
13
config/discord.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sendChat": false,
|
||||
"sendEvents": false,
|
||||
"sendConnectEvents": false,
|
||||
"sendVehicleEvents": false,
|
||||
"sendDeathEvents": false,
|
||||
"sendAdmin": false,
|
||||
"webhook": {
|
||||
"enabled": false,
|
||||
"webhookBaseURL": "http://127.0.0.1:8090/discord.php?message={0}&server={1}&type={2}&pass={3}",
|
||||
"pass": "LWb7T3ZyCam7Nzen"
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"enabled": "false",
|
||||
"smtp": {
|
||||
"host":"",
|
||||
"port":"",
|
||||
"username":"",
|
||||
"password":"",
|
||||
"from":"",
|
||||
"fromName":"",
|
||||
"useTLS":"true"
|
||||
},
|
||||
"bodyContent": {
|
||||
"confirmEmail": "Welcome to {SERVERNAME}!\nPlease confirm your email by using the command /verifyemail in-game.\n\nYour verification code is: {VERIFICATIONCODE}",
|
||||
"emailConfirmed": "Your email has been confirmed on {SERVERNAME}!\nYou may now use this email to reset your password, require two-factor authentication on login, receive offline notifications, and more!",
|
||||
"twoFactorAuthentication": "Please enter the following code to continue on {SERVERNAME} for {GAMENAME}: {2FACODE}",
|
||||
"accountAuthSuccessAlert": "You or someone else has successfully logged in to your account on {SERVERNAME} for {GAMENAME}.\n\nIP Address: {IPADDRESS}\nLocation: {LOCATION}\nTimestamp: {TIMESTAMP}\n\nIf you have two-factor authentication enabled (Using /2fa in-game), your account can't be accessed unless a correct 2FA code is entered.",
|
||||
"accountAuthFailAlert": "You or someone else has failed to login to your account on {SERVERNAME} for {GAMENAME}.\nIP Address: {IPADDRESS}\nLocation: {LOCATION}\nTimestamp: {TIMESTAMP}",
|
||||
"offlineMessageAlert": "You have received a private message on {SERVERNAME} for {GAMENAME}. \nYou are receiving this notification because you enabled email message notifications when you're not connected to the server.\nFrom: {FROMNAME}\nTimestamp: {TIMESTAMP}\nMessage: {MESSAGE}",
|
||||
"confirmPasswordReset": "You (or someone else) requested to reset your password on {SERVERNAME}!\nPlease confirm this request by entering the code below into the password reset window in-game.\n\nYour verification code is: {VERIFICATIONCODE}\n\n\nIf you did not request a password reset, then there's nothing to worry about since your password can only be reset with the code above.",
|
||||
"passwordChanged": "Your password on {SERVERNAME} has been changed successfully!"
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,117 @@
|
||||
{
|
||||
"apiEmail": "example@example.com",
|
||||
"defaultLanguage": "en",
|
||||
"defaultLanguageId": 0,
|
||||
"translateURL": "http://api.mymemory.translated.net/get?de={3}&q={0}&langpair={1}|{2}",
|
||||
"locales": [
|
||||
["English", "english", "en"],
|
||||
["Russian", "russian", "ru"],
|
||||
["Polish", "polish", "pl"],
|
||||
["Spanish", "spanish", "es"]
|
||||
{
|
||||
"id": 0,
|
||||
"englishName": "English",
|
||||
"stringsFile": "english.json",
|
||||
"isoCode": "en",
|
||||
"flagImageFile": "uk.png",
|
||||
"countries": ["gb", "us", "au", "bz", "ca", "ie", "jm", "nz", "za", "tt"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Vortrex"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"englishName": "Russian",
|
||||
"stringsFile": "russian.json",
|
||||
"isoCode": "ru",
|
||||
"flagImageFile": "ru.png",
|
||||
"countries": ["ru", "ua"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "VNDTTS"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"englishName": "Polish",
|
||||
"stringsFile": "polish.json",
|
||||
"isoCode": "pl",
|
||||
"flagImageFile": "pl.png",
|
||||
"countries": ["pl"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Suprise444"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"englishName": "Spanish",
|
||||
"stringsFile": "spanish.json",
|
||||
"isoCode": "es",
|
||||
"flagImageFile": "es.png",
|
||||
"countries": ["es", "ar", "bo", "cl", "co", "cr", "do", "ec", "sv", "gt", "hn", "mx", "ni", "pa", "py", "pe", "pr", "uy", "ve"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "PerikiyoXD"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"englishName": "Chinese",
|
||||
"stringsFile": "chinese.json",
|
||||
"isoCode": "zh",
|
||||
"flagImageFile": "cn.png",
|
||||
"countries": ["cn", "hk", "sg", "tw"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "Renzuko_Ctone"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"englishName": "Arabic",
|
||||
"stringsFile": "arabic.json",
|
||||
"isoCode": "ar",
|
||||
"flagImageFile": "sa.png",
|
||||
"countries": ["dz", "bh", "eg", "iq", "jo", "kw", "lb", "ly", "ma", "om", "qa", "sa", "sy", "tn", "ae", "ye"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "! KASIR"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"englishName": "Slovak",
|
||||
"stringsFile": "slovak.json",
|
||||
"isoCode": "sk",
|
||||
"flagImageFile": "sk.png",
|
||||
"countries": ["sk"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "UAKLAUS"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"englishName": "German",
|
||||
"stringsFile": "german.json",
|
||||
"isoCode": "de",
|
||||
"flagImageFile": "de.png",
|
||||
"countries": ["de", "at", "be", "ch", "li", "lu"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Sladernimo"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"englishName": "French",
|
||||
"stringsFile": "french.json",
|
||||
"isoCode": "fr",
|
||||
"flagImageFile": "fr.png",
|
||||
"countries": ["fr", "cd", "bj", "bf", "cd", "cg", "ga", "gn", "ml", "mc", "ne", "sn"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "Cocam"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"englishName": "Japanese",
|
||||
"stringsFile": "japanese.json",
|
||||
"isoCode": "jp",
|
||||
"flagImageFile": "jp.png",
|
||||
"countries": ["jp"],
|
||||
"requiresUnicode": true,
|
||||
"contributor": "Cocam"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"englishName": "Finnish",
|
||||
"stringsFile": "finnish.json",
|
||||
"isoCode": "fi",
|
||||
"flagImageFile": "fi.png",
|
||||
"countries": ["fi"],
|
||||
"requiresUnicode": false,
|
||||
"contributor": "SIMBA_MEOW"
|
||||
}
|
||||
]
|
||||
}
|
||||
18
documentation/gtac/client/gtaiv/Commands.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Commands>
|
||||
<Command Name="gamestats" Hash="3782704029" />
|
||||
<Command Name="say" Hash="4241071205" />
|
||||
<Command Name="exit" Hash="2483651598" />
|
||||
<Command Name="quit" Hash="1135269781" />
|
||||
<Command Name="clear" Hash="3853644038" />
|
||||
<Command Name="connect" Hash="1959786783" />
|
||||
<Command Name="reconnect" Hash="1240758083" />
|
||||
<Command Name="console" Hash="906219446" />
|
||||
<Command Name="cvar" Hash="2588334565" />
|
||||
<Command Name="netstats" Hash="2015089090" />
|
||||
<Command Name="q" Hash="4110462503" />
|
||||
<Command Name="disconnect" Hash="3820433" />
|
||||
<Command Name="fpscounter" Hash="2973827809" />
|
||||
<Command Name="dumpdoc" Hash="3404143852" />
|
||||
<Command Name="chatscale" Hash="402639070" />
|
||||
</Commands>
|
||||
3542
documentation/gtac/client/gtaiv/Defines.xml
Normal file
3159
documentation/gtac/client/gtaiv/Documentation.xml
Normal file
95
documentation/gtac/client/gtaiv/EventTypes.xml
Normal file
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" ?>
|
||||
<EventTypes>
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerEnterSphere" Hash="3890156725" Arguments="1" CanPreventDefault="false" />
|
||||
<!--**UNUSED**-->
|
||||
<EventType Name="OnBeforeProcessCamera" Hash="1763657124" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called right before the hud is drawn, you should draw your HUD here if you want it under the hud-->
|
||||
<EventType Name="OnDrawHUD" Hash="2504546524" Arguments="0" CanPreventDefault="true" />
|
||||
<!--Called when a mouse moves-->
|
||||
<EventType Name="OnMouseMove" Hash="1865196431" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called before the hud is drawn-->
|
||||
<EventType Name="OnBeforeDrawHUD" Hash="3008683449" Arguments="0" CanPreventDefault="true" />
|
||||
<!--Called when a keyboard key is down-->
|
||||
<EventType Name="OnKeyDown" Hash="3091440445" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a resource starts-->
|
||||
<EventType Name="OnResourceStart" Hash="1143708828" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to stream in-->
|
||||
<EventType Name="OnElementStreamIn" Hash="2759455221" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a resource stops-->
|
||||
<EventType Name="OnResourceStop" Hash="1347867548" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called after all the hud is drawn, you should draw your HUD here if you want it over the hud-->
|
||||
<EventType Name="OnDrawnHUD" Hash="1969344644" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called after OnRender2D, usually post processing would be done here-->
|
||||
<EventType Name="OnPostRender2D" Hash="1025891209" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when all the files are downloaded-->
|
||||
<EventType Name="OnResourceReady" Hash="4089924796" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called whenever an entity is processed-->
|
||||
<EventType Name="OnEntityProcess" Hash="850679850" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when a ped is created/spawned-->
|
||||
<EventType Name="OnPedSpawn" Hash="3880839897" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped finished dying or is instantly killed-->
|
||||
<EventType Name="OnPedDead" Hash="3023102245" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the camera is about to be processed-->
|
||||
<EventType Name="OnCameraProcess" Hash="4077277522" Arguments="0" CanPreventDefault="true" />
|
||||
<!--Called when a ped is damaged-->
|
||||
<EventType Name="OnPedInflictDamage" Hash="1391854299" Arguments="5" CanPreventDefault="true" />
|
||||
<!--Called when a ped dies-->
|
||||
<EventType Name="OnPedWasted" Hash="3129373940" Arguments="4" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerExitSphere" Hash="105319985" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a GUIElement is clicked on-->
|
||||
<EventType Name="OnGUIClick" Hash="1620463676" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when dodo flight time ends-->
|
||||
<EventType Name="OnRegisterDodoFlightTime" Hash="3998584707" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to be destroyed-->
|
||||
<EventType Name="OnElementDestroy" Hash="696839637" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when anchor tags are clicked in a GUIHtmlView-->
|
||||
<EventType Name="OnGUIAnchorClick" Hash="1882824246" Arguments="3" CanPreventDefault="true" />
|
||||
<!--Called when the mouse leaves the window-->
|
||||
<EventType Name="OnMouseLeave" Hash="3102340603" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a cursor button is up-->
|
||||
<EventType Name="OnCursorUp" Hash="2031527000" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called every process-->
|
||||
<EventType Name="OnProcess" Hash="3150131130" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called every prerender-->
|
||||
<EventType Name="OnPreRender" Hash="2235820386" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called every render-->
|
||||
<EventType Name="OnRender" Hash="2466144783" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when 2D shit should be rendered-->
|
||||
<EventType Name="OnRender2D" Hash="3260181898" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a line will be output to the chatbox-->
|
||||
<EventType Name="OnChatOutput" Hash="2275472839" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a mouse button is down-->
|
||||
<EventType Name="OnMouseDown" Hash="2632778956" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a mouse button is up-->
|
||||
<EventType Name="OnMouseUp" Hash="3080252785" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a cursor button is down-->
|
||||
<EventType Name="OnCursorDown" Hash="3618352285" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the cursor moves-->
|
||||
<EventType Name="OnCursorMove" Hash="610929630" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the mouse scrolls-->
|
||||
<EventType Name="OnMouseWheel" Hash="1116330591" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a mouse is connected-->
|
||||
<EventType Name="OnMouseConnected" Hash="4137684318" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a mouse is disconnected-->
|
||||
<EventType Name="OnMouseDisconnected" Hash="2332645211" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the window is focused-->
|
||||
<EventType Name="OnFocus" Hash="1989030060" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when the window is defocused-->
|
||||
<EventType Name="OnLostFocus" Hash="1036525539" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a keyboard key is up-->
|
||||
<EventType Name="OnKeyUp" Hash="1763402597" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a key is typed-->
|
||||
<EventType Name="OnCharacter" Hash="318128971" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when an element is about to stream out-->
|
||||
<EventType Name="OnElementStreamOut" Hash="3852636898" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when disconnected from the server-->
|
||||
<EventType Name="OnDisconnect" Hash="3221334991" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerEnteredVehicle" Hash="3395021369" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerExitedVehicle" Hash="1654569001" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerSwitchWeapon" Hash="3670373318" Arguments="2" CanPreventDefault="false" />
|
||||
</EventTypes>
|
||||
14
documentation/gtac/server/Commands.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Commands>
|
||||
<Command Name="dumpdoc" Hash="3404143852" />
|
||||
<Command Name="refresh" Hash="1619108091" />
|
||||
<Command Name="restart" Hash="3891864071" />
|
||||
<Command Name="stop" Hash="3109426870" />
|
||||
<Command Name="cmd" Hash="794565824" />
|
||||
<Command Name="start" Hash="2675529103" />
|
||||
<Command Name="stopall" Hash="1683731152" />
|
||||
<Command Name="exit" Hash="2483651598" />
|
||||
<Command Name="quit" Hash="1135269781" />
|
||||
<Command Name="help" Hash="143088812" />
|
||||
<Command Name="say" Hash="4241071205" />
|
||||
</Commands>
|
||||
1671
documentation/gtac/server/Defines.xml
Normal file
439
documentation/gtac/server/Documentation.xml
Normal file
@@ -0,0 +1,439 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Documentation>
|
||||
<!--
|
||||
Mask Values
|
||||
|
||||
b - bool
|
||||
i - int32
|
||||
f - float
|
||||
s - string
|
||||
c - function/callback
|
||||
x - class/instance
|
||||
z - vector2D
|
||||
v - vector3D
|
||||
t - thiscall
|
||||
| - optional arguments
|
||||
* - infinite arguments
|
||||
. - any type
|
||||
-->
|
||||
<Namespace Name="global">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="thisResource" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localClient" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localPlayer" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="toColour" Mask="iii|i" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="collectAllGarbage" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="inPoly" Mask="z*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEvent" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEventHandler" Mask="sf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeEventHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindEventHandler" Mask="sxf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindEventHandler" Mask="sx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="triggerEvent" Mask="s|x*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addCommandHandler" Mask="sc|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeCommandHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="consoleCommand" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setTimeout" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setInterval" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setImmediate" Mask="c*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearTimeout" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearInterval" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearImmediate" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindKey" Mask="iic" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindKey" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbindAllKeys" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="findResourceByName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getResources" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="exportFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="openFile" Mask="s|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="loadTextFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="saveTextFile" Mask="ss" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addNetworkHandler" Mask="sc" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeNetworkHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="httpGet" Mask="sscc" RequiredArguments="4" Obsolete="false" />
|
||||
<Function Name="message" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="messageClient" Mask="sx|i" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="messageAllExcept" Mask="sx|i" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getConsole" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClients" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClient" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="destroyElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getClientFromPlayerElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementsByType" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromId" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addToWorld" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="triggerNetworkEvent" Mask="sx*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="fadeCamera" Mask="xb|fi" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="spawnPlayer" Mask="xv|fiii" RequiredArguments="2" Obsolete="false" />
|
||||
<Class Name="Stream">
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Property Name="position" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readBytes" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readString" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="true" />
|
||||
<Function Name="writeBytes" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeString" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readFloat" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readDouble" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="writeInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeFloat" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeDouble" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="TextReader">
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="loadText" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readCharacter" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Matrix4x4">
|
||||
<Property Name="m11" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m12" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m13" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m14" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m21" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m22" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m23" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m24" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m31" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m32" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m33" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m34" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m41" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m42" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m43" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m44" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="setIdentity" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setTranslate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setScale" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateX" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateY" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateZ" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setMultiply" Mask="txx*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="multiply" Mask="tx*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setInverse" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="transformCoordinate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElement" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setElement" Mask="tif" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getVector3" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec2">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec3">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="z" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="squaredLength" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Function Name="distance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="squaredDistance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="dotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="absDotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="normalise" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="crossProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="midPoint" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addSpherical" Mask="tfff" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="cartesianToSpherical" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Event">
|
||||
<Class Name="CancellableEvent">
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="Timer" />
|
||||
<Class Name="KeyEvent">
|
||||
<Property Name="keyCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="scanCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="mod" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="repeat" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="down" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlElement">
|
||||
<Property Name="childrenCount" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="parent" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="text" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="attributes" ReadOnly="true" Obsolete="false" />
|
||||
<Function Name="clear" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getStringAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getBoolAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getIntegerAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getFloatAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlDocument">
|
||||
<Property Name="rootElement" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="load" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Resource">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="isStarted" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isStarting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="exports" ReadOnly="true" Obsolete="false" />
|
||||
<Function Name="start" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="stop" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="restart" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getExport" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Client">
|
||||
<Property Name="index" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="gameVersion" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="player" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="administrator" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="console" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="ip" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ping" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="despawnPlayer" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="disconnect" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Element">
|
||||
<Property Name="id" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="type" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="isLocal" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isSyncer" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isOwner" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="syncer" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="owner" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="dimension" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="onAllDimensions" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="parent" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="resource" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Function Name="isType" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setSyncer" Mask="ti|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Transformable">
|
||||
<Property Name="position" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="streamInDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="streamOutDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="getRotation" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setRotation" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Entity">
|
||||
<Property Name="modelIndex" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="interior" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="matrix" ReadOnly="false" Obsolete="false" Type="Matrix4x4" />
|
||||
<Property Name="heading" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Class Name="Physical">
|
||||
<Property Name="velocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="turnVelocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Class Name="Ped">
|
||||
<Property Name="vehicle" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="seat" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="health" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="armour" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="weapon" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="weaponAmmunition" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="weaponClipAmmunition" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="weaponState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="isEnteringVehicle" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isExitingVehicle" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="warpIntoVehicle" Mask="txi" RequiredArguments="2" Obsolete="false" />
|
||||
<Class Name="Player" />
|
||||
</Class>
|
||||
<Class Name="Vehicle">
|
||||
<Property Name="locked" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="carLock" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="engine" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="colour1" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="colour2" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="colour3" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="colour4" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="strongGrip" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Function Name="setColours" Mask="tii" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setRGBColours" Mask="tii" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="randomiseColours" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fix" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getOccupant" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getOccupants" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Class Name="Train">
|
||||
<Property Name="track" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="trackPosition" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="speed" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="derailed" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="headlights" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="taillights" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="Object" />
|
||||
</Class>
|
||||
<Class Name="Building" />
|
||||
</Class>
|
||||
<Class Name="Blip" />
|
||||
<Class Name="Pickup" />
|
||||
<Class Name="Marker" />
|
||||
<Class Name="CarGenerator" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Namespace Name="reflection">
|
||||
<Function Name="clone" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="move" Mask="xx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="tostring" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="call" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Function" />
|
||||
</Namespace>
|
||||
<Namespace Name="module">
|
||||
<Namespace Name="hashing">
|
||||
<Function Name="encodeBase64" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="decodeBase64" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="md5" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha1" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha224" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha256" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha384" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha512" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd128" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd160" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd256" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd320" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="whirlpool" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="geoip">
|
||||
<Function Name="getCountryName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCountryISO" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getContinentName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getContinentCode" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCityName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getPostalCode" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getSubdivisionName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getSubdivisionISO" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getTimeZoneName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="mysql">
|
||||
<Function Name="connect" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Class Name="Connection">
|
||||
<Property Name="ping" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="insertId" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="affectedRows" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="warningCount" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="errorNum" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="error" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Function Name="query" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="close" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="escapeString" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="selectDatabase" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="changeUser" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="info" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Result">
|
||||
<Property Name="numRows" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Function Name="free" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchAssoc" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchAssoc" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchRow" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Namespace>
|
||||
<Namespace Name="smtp">
|
||||
<Function Name="send" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
<Namespace Name="sdl">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="getModState" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="platform">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="modState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
</Namespace>
|
||||
<Namespace Name="server">
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="gameMode" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="port" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="maxClients" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="rcon" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="rconPort" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="listed" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="httpServer" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="httpPort" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="minClientVersion" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="syncInterval" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="syncMethod" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="duplicateNames" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="streamInDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="streamOutDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="pickupStreamInDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="pickupStreamOutDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="logPath" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Function Name="setRule" Mask="ss" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getRule" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="banIP" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbanIP" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbanAllIPs" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isIPBanned" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="shutdown" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCVar" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="gta">
|
||||
<Property Name="weather" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="ssvBridgeEnabled" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Function Name="forceWeather" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createVehicle" Mask="i|v" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createBlipAttachedTo" Mask="xi|iibb" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createBuilding" Mask="i|v" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createObject" Mask="i|v" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createBlip" Mask="iv|ii" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createPickup" Mask="i|vi" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createSphere" Mask="v|f" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createPlayer" Mask="i|v" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createCivilian" Mask="i|v" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="hostSession" Mask="xii" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="joinSession" Mask="xx" RequiredArguments="2" Obsolete="false" />
|
||||
<Class Name="World" />
|
||||
<Namespace Name="time">
|
||||
<Property Name="minuteDuration" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="hour" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="minute" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="second" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="day" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
</Documentation>
|
||||
47
documentation/gtac/server/EventTypes.xml
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" ?>
|
||||
<EventTypes>
|
||||
<!--Called when a pickup is collected-->
|
||||
<EventType Name="OnPickupCollected" Hash="4105239817" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a ped starts uncrouching-->
|
||||
<EventType Name="OnPedUncrouch" Hash="561660263" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped starts jumping-->
|
||||
<EventType Name="OnPedJump" Hash="4272336407" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped starts falling to floor-->
|
||||
<EventType Name="OnPedFall" Hash="2722461453" Arguments="4" CanPreventDefault="false" />
|
||||
<!--Called when a ped starts crouching-->
|
||||
<EventType Name="OnPedCrouch" Hash="1096855702" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped is spawned.-->
|
||||
<EventType Name="OnPedSpawn" Hash="3880839897" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped is wasted (from attacker client).-->
|
||||
<EventType Name="OnWastePed" Hash="1462492871" Arguments="4" CanPreventDefault="false" />
|
||||
<!--Called when a ped is exiting a vehicle.-->
|
||||
<EventType Name="OnPedExitVehicle" Hash="3163626874" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a resource starts-->
|
||||
<EventType Name="OnResourceStart" Hash="1143708828" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when a player types a command-->
|
||||
<EventType Name="OnPlayerCommand" Hash="1638826555" Arguments="3" CanPreventDefault="true" />
|
||||
<!--Called every process-->
|
||||
<EventType Name="OnProcess" Hash="3150131130" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a resource stops-->
|
||||
<EventType Name="OnResourceStop" Hash="1347867548" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to stream in-->
|
||||
<EventType Name="OnElementStreamIn" Hash="2759455221" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a player has connected and is joining-->
|
||||
<EventType Name="OnPlayerJoin" Hash="3624951888" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the player has joined the game-->
|
||||
<EventType Name="OnPlayerJoined" Hash="3833973824" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a player disconnects-->
|
||||
<EventType Name="OnPlayerQuit" Hash="3017502482" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a player is attempting to connect-->
|
||||
<EventType Name="OnPlayerConnect" Hash="2611712496" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when the server finished the start sequence-->
|
||||
<EventType Name="OnServerStart" Hash="3318682471" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a player chats-->
|
||||
<EventType Name="OnPlayerChat" Hash="2515290669" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to be destroyed-->
|
||||
<EventType Name="OnElementDestroy" Hash="696839637" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when a ped is wasted.-->
|
||||
<EventType Name="OnPedWasted" Hash="3129373940" Arguments="4" CanPreventDefault="false" />
|
||||
<!--Called when a ped is entering a vehicle.-->
|
||||
<EventType Name="OnPedEnterVehicle" Hash="2529136464" Arguments="3" CanPreventDefault="false" />
|
||||
</EventTypes>
|
||||
18
documentation/mafiac/client/mafia1/Commands.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Commands>
|
||||
<Command Name="gamestats" Hash="3782704029" />
|
||||
<Command Name="say" Hash="4241071205" />
|
||||
<Command Name="exit" Hash="2483651598" />
|
||||
<Command Name="quit" Hash="1135269781" />
|
||||
<Command Name="clear" Hash="3853644038" />
|
||||
<Command Name="connect" Hash="1959786783" />
|
||||
<Command Name="reconnect" Hash="1240758083" />
|
||||
<Command Name="console" Hash="906219446" />
|
||||
<Command Name="cvar" Hash="2588334565" />
|
||||
<Command Name="q" Hash="4110462503" />
|
||||
<Command Name="disconnect" Hash="3820433" />
|
||||
<Command Name="fpscounter" Hash="2973827809" />
|
||||
<Command Name="dumpdoc" Hash="3404143852" />
|
||||
<Command Name="chatscale" Hash="402639070" />
|
||||
<Command Name="help" Hash="143088812" />
|
||||
</Commands>
|
||||
577
documentation/mafiac/client/mafia1/Defines.xml
Normal file
@@ -0,0 +1,577 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Defines>
|
||||
<Define Name="KEYSTATE_UP" Value="0" />
|
||||
<Define Name="KEYSTATE_DOWN" Value="1" />
|
||||
<Define Name="KEYSTATE_BOTH" Value="2" />
|
||||
<Define Name="SDL_SCANCODE_UNKNOWN" Value="0" />
|
||||
<Define Name="SDL_SCANCODE_A" Value="4" />
|
||||
<Define Name="SDL_SCANCODE_B" Value="5" />
|
||||
<Define Name="SDL_SCANCODE_C" Value="6" />
|
||||
<Define Name="SDL_SCANCODE_D" Value="7" />
|
||||
<Define Name="SDL_SCANCODE_E" Value="8" />
|
||||
<Define Name="SDL_SCANCODE_F" Value="9" />
|
||||
<Define Name="SDL_SCANCODE_G" Value="10" />
|
||||
<Define Name="SDL_SCANCODE_H" Value="11" />
|
||||
<Define Name="SDL_SCANCODE_I" Value="12" />
|
||||
<Define Name="SDL_SCANCODE_J" Value="13" />
|
||||
<Define Name="SDL_SCANCODE_K" Value="14" />
|
||||
<Define Name="SDL_SCANCODE_L" Value="15" />
|
||||
<Define Name="SDL_SCANCODE_M" Value="16" />
|
||||
<Define Name="SDL_SCANCODE_N" Value="17" />
|
||||
<Define Name="SDL_SCANCODE_O" Value="18" />
|
||||
<Define Name="SDL_SCANCODE_P" Value="19" />
|
||||
<Define Name="SDL_SCANCODE_Q" Value="20" />
|
||||
<Define Name="SDL_SCANCODE_R" Value="21" />
|
||||
<Define Name="SDL_SCANCODE_S" Value="22" />
|
||||
<Define Name="SDL_SCANCODE_T" Value="23" />
|
||||
<Define Name="SDL_SCANCODE_U" Value="24" />
|
||||
<Define Name="SDL_SCANCODE_V" Value="25" />
|
||||
<Define Name="SDL_SCANCODE_W" Value="26" />
|
||||
<Define Name="SDL_SCANCODE_X" Value="27" />
|
||||
<Define Name="SDL_SCANCODE_Y" Value="28" />
|
||||
<Define Name="SDL_SCANCODE_Z" Value="29" />
|
||||
<Define Name="SDL_SCANCODE_1" Value="30" />
|
||||
<Define Name="SDL_SCANCODE_2" Value="31" />
|
||||
<Define Name="SDL_SCANCODE_3" Value="32" />
|
||||
<Define Name="SDL_SCANCODE_4" Value="33" />
|
||||
<Define Name="SDL_SCANCODE_5" Value="34" />
|
||||
<Define Name="SDL_SCANCODE_6" Value="35" />
|
||||
<Define Name="SDL_SCANCODE_7" Value="36" />
|
||||
<Define Name="SDL_SCANCODE_8" Value="37" />
|
||||
<Define Name="SDL_SCANCODE_9" Value="38" />
|
||||
<Define Name="SDL_SCANCODE_0" Value="39" />
|
||||
<Define Name="SDL_SCANCODE_RETURN" Value="40" />
|
||||
<Define Name="SDL_SCANCODE_ESCAPE" Value="41" />
|
||||
<Define Name="SDL_SCANCODE_BACKSPACE" Value="42" />
|
||||
<Define Name="SDL_SCANCODE_TAB" Value="43" />
|
||||
<Define Name="SDL_SCANCODE_SPACE" Value="44" />
|
||||
<Define Name="SDL_SCANCODE_MINUS" Value="45" />
|
||||
<Define Name="SDL_SCANCODE_EQUALS" Value="46" />
|
||||
<Define Name="SDL_SCANCODE_LEFTBRACKET" Value="47" />
|
||||
<Define Name="SDL_SCANCODE_RIGHTBRACKET" Value="48" />
|
||||
<Define Name="SDL_SCANCODE_BACKSLASH" Value="49" />
|
||||
<Define Name="SDL_SCANCODE_NONUSHASH" Value="50" />
|
||||
<Define Name="SDL_SCANCODE_SEMICOLON" Value="51" />
|
||||
<Define Name="SDL_SCANCODE_APOSTROPHE" Value="52" />
|
||||
<Define Name="SDL_SCANCODE_GRAVE" Value="53" />
|
||||
<Define Name="SDL_SCANCODE_COMMA" Value="54" />
|
||||
<Define Name="SDL_SCANCODE_PERIOD" Value="55" />
|
||||
<Define Name="SDL_SCANCODE_SLASH" Value="56" />
|
||||
<Define Name="SDL_SCANCODE_CAPSLOCK" Value="57" />
|
||||
<Define Name="SDL_SCANCODE_F1" Value="58" />
|
||||
<Define Name="SDL_SCANCODE_F2" Value="59" />
|
||||
<Define Name="SDL_SCANCODE_F3" Value="60" />
|
||||
<Define Name="SDL_SCANCODE_F4" Value="61" />
|
||||
<Define Name="SDL_SCANCODE_F5" Value="62" />
|
||||
<Define Name="SDL_SCANCODE_F6" Value="63" />
|
||||
<Define Name="SDL_SCANCODE_F7" Value="64" />
|
||||
<Define Name="SDL_SCANCODE_F8" Value="65" />
|
||||
<Define Name="SDL_SCANCODE_F9" Value="66" />
|
||||
<Define Name="SDL_SCANCODE_F10" Value="67" />
|
||||
<Define Name="SDL_SCANCODE_F11" Value="68" />
|
||||
<Define Name="SDL_SCANCODE_F12" Value="69" />
|
||||
<Define Name="SDL_SCANCODE_PRINTSCREEN" Value="70" />
|
||||
<Define Name="SDL_SCANCODE_SCROLLLOCK" Value="71" />
|
||||
<Define Name="SDL_SCANCODE_PAUSE" Value="72" />
|
||||
<Define Name="SDL_SCANCODE_INSERT" Value="73" />
|
||||
<Define Name="SDL_SCANCODE_HOME" Value="74" />
|
||||
<Define Name="SDL_SCANCODE_PAGEUP" Value="75" />
|
||||
<Define Name="SDL_SCANCODE_DELETE" Value="76" />
|
||||
<Define Name="SDL_SCANCODE_END" Value="77" />
|
||||
<Define Name="SDL_SCANCODE_PAGEDOWN" Value="78" />
|
||||
<Define Name="SDL_SCANCODE_RIGHT" Value="79" />
|
||||
<Define Name="SDL_SCANCODE_LEFT" Value="80" />
|
||||
<Define Name="SDL_SCANCODE_DOWN" Value="81" />
|
||||
<Define Name="SDL_SCANCODE_UP" Value="82" />
|
||||
<Define Name="SDL_SCANCODE_NUMLOCKCLEAR" Value="83" />
|
||||
<Define Name="SDL_SCANCODE_KP_DIVIDE" Value="84" />
|
||||
<Define Name="SDL_SCANCODE_KP_MULTIPLY" Value="85" />
|
||||
<Define Name="SDL_SCANCODE_KP_MINUS" Value="86" />
|
||||
<Define Name="SDL_SCANCODE_KP_PLUS" Value="87" />
|
||||
<Define Name="SDL_SCANCODE_KP_ENTER" Value="88" />
|
||||
<Define Name="SDL_SCANCODE_KP_1" Value="89" />
|
||||
<Define Name="SDL_SCANCODE_KP_2" Value="90" />
|
||||
<Define Name="SDL_SCANCODE_KP_3" Value="91" />
|
||||
<Define Name="SDL_SCANCODE_KP_4" Value="92" />
|
||||
<Define Name="SDL_SCANCODE_KP_5" Value="93" />
|
||||
<Define Name="SDL_SCANCODE_KP_6" Value="94" />
|
||||
<Define Name="SDL_SCANCODE_KP_7" Value="95" />
|
||||
<Define Name="SDL_SCANCODE_KP_8" Value="96" />
|
||||
<Define Name="SDL_SCANCODE_KP_9" Value="97" />
|
||||
<Define Name="SDL_SCANCODE_KP_0" Value="98" />
|
||||
<Define Name="SDL_SCANCODE_KP_PERIOD" Value="99" />
|
||||
<Define Name="SDL_SCANCODE_NONUSBACKSLASH" Value="100" />
|
||||
<Define Name="SDL_SCANCODE_APPLICATION" Value="101" />
|
||||
<Define Name="SDL_SCANCODE_POWER" Value="102" />
|
||||
<Define Name="SDL_SCANCODE_KP_EQUALS" Value="103" />
|
||||
<Define Name="SDL_SCANCODE_F13" Value="104" />
|
||||
<Define Name="SDL_SCANCODE_F14" Value="105" />
|
||||
<Define Name="SDL_SCANCODE_F15" Value="106" />
|
||||
<Define Name="SDL_SCANCODE_F16" Value="107" />
|
||||
<Define Name="SDL_SCANCODE_F17" Value="108" />
|
||||
<Define Name="SDL_SCANCODE_F18" Value="109" />
|
||||
<Define Name="SDL_SCANCODE_F19" Value="110" />
|
||||
<Define Name="SDL_SCANCODE_F20" Value="111" />
|
||||
<Define Name="SDL_SCANCODE_F21" Value="112" />
|
||||
<Define Name="SDL_SCANCODE_F22" Value="113" />
|
||||
<Define Name="SDL_SCANCODE_F23" Value="114" />
|
||||
<Define Name="SDL_SCANCODE_F24" Value="115" />
|
||||
<Define Name="SDL_SCANCODE_EXECUTE" Value="116" />
|
||||
<Define Name="SDL_SCANCODE_HELP" Value="117" />
|
||||
<Define Name="SDL_SCANCODE_MENU" Value="118" />
|
||||
<Define Name="SDL_SCANCODE_SELECT" Value="119" />
|
||||
<Define Name="SDL_SCANCODE_STOP" Value="120" />
|
||||
<Define Name="SDL_SCANCODE_AGAIN" Value="121" />
|
||||
<Define Name="SDL_SCANCODE_UNDO" Value="122" />
|
||||
<Define Name="SDL_SCANCODE_CUT" Value="123" />
|
||||
<Define Name="SDL_SCANCODE_COPY" Value="124" />
|
||||
<Define Name="SDL_SCANCODE_PASTE" Value="125" />
|
||||
<Define Name="SDL_SCANCODE_FIND" Value="126" />
|
||||
<Define Name="SDL_SCANCODE_MUTE" Value="127" />
|
||||
<Define Name="SDL_SCANCODE_VOLUMEUP" Value="128" />
|
||||
<Define Name="SDL_SCANCODE_VOLUMEDOWN" Value="129" />
|
||||
<Define Name="SDL_SCANCODE_KP_COMMA" Value="133" />
|
||||
<Define Name="SDL_SCANCODE_KP_EQUALSAS400" Value="134" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL1" Value="135" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL2" Value="136" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL3" Value="137" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL4" Value="138" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL5" Value="139" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL6" Value="140" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL7" Value="141" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL8" Value="142" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL9" Value="143" />
|
||||
<Define Name="SDL_SCANCODE_LANG1" Value="144" />
|
||||
<Define Name="SDL_SCANCODE_LANG2" Value="145" />
|
||||
<Define Name="SDL_SCANCODE_LANG3" Value="146" />
|
||||
<Define Name="SDL_SCANCODE_LANG4" Value="147" />
|
||||
<Define Name="SDL_SCANCODE_LANG5" Value="148" />
|
||||
<Define Name="SDL_SCANCODE_LANG6" Value="149" />
|
||||
<Define Name="SDL_SCANCODE_LANG7" Value="150" />
|
||||
<Define Name="SDL_SCANCODE_LANG8" Value="151" />
|
||||
<Define Name="SDL_SCANCODE_LANG9" Value="152" />
|
||||
<Define Name="SDL_SCANCODE_ALTERASE" Value="153" />
|
||||
<Define Name="SDL_SCANCODE_SYSREQ" Value="154" />
|
||||
<Define Name="SDL_SCANCODE_CANCEL" Value="155" />
|
||||
<Define Name="SDL_SCANCODE_CLEAR" Value="156" />
|
||||
<Define Name="SDL_SCANCODE_PRIOR" Value="157" />
|
||||
<Define Name="SDL_SCANCODE_RETURN2" Value="158" />
|
||||
<Define Name="SDL_SCANCODE_SEPARATOR" Value="159" />
|
||||
<Define Name="SDL_SCANCODE_OUT" Value="160" />
|
||||
<Define Name="SDL_SCANCODE_OPER" Value="161" />
|
||||
<Define Name="SDL_SCANCODE_CLEARAGAIN" Value="162" />
|
||||
<Define Name="SDL_SCANCODE_CRSEL" Value="163" />
|
||||
<Define Name="SDL_SCANCODE_EXSEL" Value="164" />
|
||||
<Define Name="SDL_SCANCODE_KP_00" Value="176" />
|
||||
<Define Name="SDL_SCANCODE_KP_000" Value="177" />
|
||||
<Define Name="SDL_SCANCODE_THOUSANDSSEPARATOR" Value="178" />
|
||||
<Define Name="SDL_SCANCODE_DECIMALSEPARATOR" Value="179" />
|
||||
<Define Name="SDL_SCANCODE_CURRENCYUNIT" Value="180" />
|
||||
<Define Name="SDL_SCANCODE_CURRENCYSUBUNIT" Value="181" />
|
||||
<Define Name="SDL_SCANCODE_KP_LEFTPAREN" Value="182" />
|
||||
<Define Name="SDL_SCANCODE_KP_RIGHTPAREN" Value="183" />
|
||||
<Define Name="SDL_SCANCODE_KP_LEFTBRACE" Value="184" />
|
||||
<Define Name="SDL_SCANCODE_KP_RIGHTBRACE" Value="185" />
|
||||
<Define Name="SDL_SCANCODE_KP_TAB" Value="186" />
|
||||
<Define Name="SDL_SCANCODE_KP_BACKSPACE" Value="187" />
|
||||
<Define Name="SDL_SCANCODE_KP_A" Value="188" />
|
||||
<Define Name="SDL_SCANCODE_KP_B" Value="189" />
|
||||
<Define Name="SDL_SCANCODE_KP_C" Value="190" />
|
||||
<Define Name="SDL_SCANCODE_KP_D" Value="191" />
|
||||
<Define Name="SDL_SCANCODE_KP_E" Value="192" />
|
||||
<Define Name="SDL_SCANCODE_KP_F" Value="193" />
|
||||
<Define Name="SDL_SCANCODE_KP_XOR" Value="194" />
|
||||
<Define Name="SDL_SCANCODE_KP_POWER" Value="195" />
|
||||
<Define Name="SDL_SCANCODE_KP_PERCENT" Value="196" />
|
||||
<Define Name="SDL_SCANCODE_KP_LESS" Value="197" />
|
||||
<Define Name="SDL_SCANCODE_KP_GREATER" Value="198" />
|
||||
<Define Name="SDL_SCANCODE_KP_AMPERSAND" Value="199" />
|
||||
<Define Name="SDL_SCANCODE_KP_DBLAMPERSAND" Value="200" />
|
||||
<Define Name="SDL_SCANCODE_KP_VERTICALBAR" Value="201" />
|
||||
<Define Name="SDL_SCANCODE_KP_DBLVERTICALBAR" Value="202" />
|
||||
<Define Name="SDL_SCANCODE_KP_COLON" Value="203" />
|
||||
<Define Name="SDL_SCANCODE_KP_HASH" Value="204" />
|
||||
<Define Name="SDL_SCANCODE_KP_SPACE" Value="205" />
|
||||
<Define Name="SDL_SCANCODE_KP_AT" Value="206" />
|
||||
<Define Name="SDL_SCANCODE_KP_EXCLAM" Value="207" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMSTORE" Value="208" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMRECALL" Value="209" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMCLEAR" Value="210" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMADD" Value="211" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMSUBTRACT" Value="212" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMMULTIPLY" Value="213" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMDIVIDE" Value="214" />
|
||||
<Define Name="SDL_SCANCODE_KP_PLUSMINUS" Value="215" />
|
||||
<Define Name="SDL_SCANCODE_KP_CLEAR" Value="216" />
|
||||
<Define Name="SDL_SCANCODE_KP_CLEARENTRY" Value="217" />
|
||||
<Define Name="SDL_SCANCODE_KP_BINARY" Value="218" />
|
||||
<Define Name="SDL_SCANCODE_KP_OCTAL" Value="219" />
|
||||
<Define Name="SDL_SCANCODE_KP_DECIMAL" Value="220" />
|
||||
<Define Name="SDL_SCANCODE_KP_HEXADECIMAL" Value="221" />
|
||||
<Define Name="SDL_SCANCODE_LCTRL" Value="224" />
|
||||
<Define Name="SDL_SCANCODE_LSHIFT" Value="225" />
|
||||
<Define Name="SDL_SCANCODE_LALT" Value="226" />
|
||||
<Define Name="SDL_SCANCODE_LGUI" Value="227" />
|
||||
<Define Name="SDL_SCANCODE_RCTRL" Value="228" />
|
||||
<Define Name="SDL_SCANCODE_RSHIFT" Value="229" />
|
||||
<Define Name="SDL_SCANCODE_RALT" Value="230" />
|
||||
<Define Name="SDL_SCANCODE_RGUI" Value="231" />
|
||||
<Define Name="SDL_SCANCODE_MODE" Value="257" />
|
||||
<Define Name="SDL_SCANCODE_AUDIONEXT" Value="258" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOPREV" Value="259" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOSTOP" Value="260" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOPLAY" Value="261" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOMUTE" Value="262" />
|
||||
<Define Name="SDL_SCANCODE_MEDIASELECT" Value="263" />
|
||||
<Define Name="SDL_SCANCODE_WWW" Value="264" />
|
||||
<Define Name="SDL_SCANCODE_MAIL" Value="265" />
|
||||
<Define Name="SDL_SCANCODE_CALCULATOR" Value="266" />
|
||||
<Define Name="SDL_SCANCODE_COMPUTER" Value="267" />
|
||||
<Define Name="SDL_SCANCODE_AC_SEARCH" Value="268" />
|
||||
<Define Name="SDL_SCANCODE_AC_HOME" Value="269" />
|
||||
<Define Name="SDL_SCANCODE_AC_BACK" Value="270" />
|
||||
<Define Name="SDL_SCANCODE_AC_FORWARD" Value="271" />
|
||||
<Define Name="SDL_SCANCODE_AC_STOP" Value="272" />
|
||||
<Define Name="SDL_SCANCODE_AC_REFRESH" Value="273" />
|
||||
<Define Name="SDL_SCANCODE_AC_BOOKMARKS" Value="274" />
|
||||
<Define Name="SDL_SCANCODE_BRIGHTNESSDOWN" Value="275" />
|
||||
<Define Name="SDL_SCANCODE_BRIGHTNESSUP" Value="276" />
|
||||
<Define Name="SDL_SCANCODE_DISPLAYSWITCH" Value="277" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMTOGGLE" Value="278" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMDOWN" Value="279" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMUP" Value="280" />
|
||||
<Define Name="SDL_SCANCODE_EJECT" Value="281" />
|
||||
<Define Name="SDL_SCANCODE_SLEEP" Value="282" />
|
||||
<Define Name="SDL_SCANCODE_APP1" Value="283" />
|
||||
<Define Name="SDL_SCANCODE_APP2" Value="284" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOREWIND" Value="285" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOFASTFORWARD" Value="286" />
|
||||
<Define Name="SDL_NUM_SCANCODES" Value="512" />
|
||||
<Define Name="SDLK_UNKNOWN" Value="0" />
|
||||
<Define Name="SDLK_RETURN" Value="13" />
|
||||
<Define Name="SDLK_ESCAPE" Value="27" />
|
||||
<Define Name="SDLK_BACKSPACE" Value="8" />
|
||||
<Define Name="SDLK_TAB" Value="9" />
|
||||
<Define Name="SDLK_SPACE" Value="32" />
|
||||
<Define Name="SDLK_EXCLAIM" Value="33" />
|
||||
<Define Name="SDLK_QUOTEDBL" Value="34" />
|
||||
<Define Name="SDLK_HASH" Value="35" />
|
||||
<Define Name="SDLK_PERCENT" Value="37" />
|
||||
<Define Name="SDLK_DOLLAR" Value="36" />
|
||||
<Define Name="SDLK_AMPERSAND" Value="38" />
|
||||
<Define Name="SDLK_QUOTE" Value="39" />
|
||||
<Define Name="SDLK_LEFTPAREN" Value="40" />
|
||||
<Define Name="SDLK_RIGHTPAREN" Value="41" />
|
||||
<Define Name="SDLK_ASTERISK" Value="42" />
|
||||
<Define Name="SDLK_PLUS" Value="43" />
|
||||
<Define Name="SDLK_COMMA" Value="44" />
|
||||
<Define Name="SDLK_MINUS" Value="45" />
|
||||
<Define Name="SDLK_PERIOD" Value="46" />
|
||||
<Define Name="SDLK_SLASH" Value="47" />
|
||||
<Define Name="SDLK_0" Value="48" />
|
||||
<Define Name="SDLK_1" Value="49" />
|
||||
<Define Name="SDLK_2" Value="50" />
|
||||
<Define Name="SDLK_3" Value="51" />
|
||||
<Define Name="SDLK_4" Value="52" />
|
||||
<Define Name="SDLK_5" Value="53" />
|
||||
<Define Name="SDLK_6" Value="54" />
|
||||
<Define Name="SDLK_7" Value="55" />
|
||||
<Define Name="SDLK_8" Value="56" />
|
||||
<Define Name="SDLK_9" Value="57" />
|
||||
<Define Name="SDLK_COLON" Value="58" />
|
||||
<Define Name="SDLK_SEMICOLON" Value="59" />
|
||||
<Define Name="SDLK_LESS" Value="60" />
|
||||
<Define Name="SDLK_EQUALS" Value="61" />
|
||||
<Define Name="SDLK_GREATER" Value="62" />
|
||||
<Define Name="SDLK_QUESTION" Value="63" />
|
||||
<Define Name="SDLK_AT" Value="64" />
|
||||
<Define Name="SDLK_LEFTBRACKET" Value="91" />
|
||||
<Define Name="SDLK_BACKSLASH" Value="92" />
|
||||
<Define Name="SDLK_RIGHTBRACKET" Value="93" />
|
||||
<Define Name="SDLK_CARET" Value="94" />
|
||||
<Define Name="SDLK_UNDERSCORE" Value="95" />
|
||||
<Define Name="SDLK_BACKQUOTE" Value="96" />
|
||||
<Define Name="SDLK_a" Value="97" />
|
||||
<Define Name="SDLK_b" Value="98" />
|
||||
<Define Name="SDLK_c" Value="99" />
|
||||
<Define Name="SDLK_d" Value="100" />
|
||||
<Define Name="SDLK_e" Value="101" />
|
||||
<Define Name="SDLK_f" Value="102" />
|
||||
<Define Name="SDLK_g" Value="103" />
|
||||
<Define Name="SDLK_h" Value="104" />
|
||||
<Define Name="SDLK_i" Value="105" />
|
||||
<Define Name="SDLK_j" Value="106" />
|
||||
<Define Name="SDLK_k" Value="107" />
|
||||
<Define Name="SDLK_l" Value="108" />
|
||||
<Define Name="SDLK_m" Value="109" />
|
||||
<Define Name="SDLK_n" Value="110" />
|
||||
<Define Name="SDLK_o" Value="111" />
|
||||
<Define Name="SDLK_p" Value="112" />
|
||||
<Define Name="SDLK_q" Value="113" />
|
||||
<Define Name="SDLK_r" Value="114" />
|
||||
<Define Name="SDLK_s" Value="115" />
|
||||
<Define Name="SDLK_t" Value="116" />
|
||||
<Define Name="SDLK_u" Value="117" />
|
||||
<Define Name="SDLK_v" Value="118" />
|
||||
<Define Name="SDLK_w" Value="119" />
|
||||
<Define Name="SDLK_x" Value="120" />
|
||||
<Define Name="SDLK_y" Value="121" />
|
||||
<Define Name="SDLK_z" Value="122" />
|
||||
<Define Name="SDLK_CAPSLOCK" Value="1073741881" />
|
||||
<Define Name="SDLK_F1" Value="1073741882" />
|
||||
<Define Name="SDLK_F2" Value="1073741883" />
|
||||
<Define Name="SDLK_F3" Value="1073741884" />
|
||||
<Define Name="SDLK_F4" Value="1073741885" />
|
||||
<Define Name="SDLK_F5" Value="1073741886" />
|
||||
<Define Name="SDLK_F6" Value="1073741887" />
|
||||
<Define Name="SDLK_F7" Value="1073741888" />
|
||||
<Define Name="SDLK_F8" Value="1073741889" />
|
||||
<Define Name="SDLK_F9" Value="1073741890" />
|
||||
<Define Name="SDLK_F10" Value="1073741891" />
|
||||
<Define Name="SDLK_F11" Value="1073741892" />
|
||||
<Define Name="SDLK_F12" Value="1073741893" />
|
||||
<Define Name="SDLK_PRINTSCREEN" Value="1073741894" />
|
||||
<Define Name="SDLK_SCROLLLOCK" Value="1073741895" />
|
||||
<Define Name="SDLK_PAUSE" Value="1073741896" />
|
||||
<Define Name="SDLK_INSERT" Value="1073741897" />
|
||||
<Define Name="SDLK_HOME" Value="1073741898" />
|
||||
<Define Name="SDLK_PAGEUP" Value="1073741899" />
|
||||
<Define Name="SDLK_DELETE" Value="127" />
|
||||
<Define Name="SDLK_END" Value="1073741901" />
|
||||
<Define Name="SDLK_PAGEDOWN" Value="1073741902" />
|
||||
<Define Name="SDLK_RIGHT" Value="1073741903" />
|
||||
<Define Name="SDLK_LEFT" Value="1073741904" />
|
||||
<Define Name="SDLK_DOWN" Value="1073741905" />
|
||||
<Define Name="SDLK_UP" Value="1073741906" />
|
||||
<Define Name="SDLK_NUMLOCKCLEAR" Value="1073741907" />
|
||||
<Define Name="SDLK_KP_DIVIDE" Value="1073741908" />
|
||||
<Define Name="SDLK_KP_MULTIPLY" Value="1073741909" />
|
||||
<Define Name="SDLK_KP_MINUS" Value="1073741910" />
|
||||
<Define Name="SDLK_KP_PLUS" Value="1073741911" />
|
||||
<Define Name="SDLK_KP_ENTER" Value="1073741912" />
|
||||
<Define Name="SDLK_KP_1" Value="1073741913" />
|
||||
<Define Name="SDLK_KP_2" Value="1073741914" />
|
||||
<Define Name="SDLK_KP_3" Value="1073741915" />
|
||||
<Define Name="SDLK_KP_4" Value="1073741916" />
|
||||
<Define Name="SDLK_KP_5" Value="1073741917" />
|
||||
<Define Name="SDLK_KP_6" Value="1073741918" />
|
||||
<Define Name="SDLK_KP_7" Value="1073741919" />
|
||||
<Define Name="SDLK_KP_8" Value="1073741920" />
|
||||
<Define Name="SDLK_KP_9" Value="1073741921" />
|
||||
<Define Name="SDLK_KP_0" Value="1073741922" />
|
||||
<Define Name="SDLK_KP_PERIOD" Value="1073741923" />
|
||||
<Define Name="SDLK_APPLICATION" Value="1073741925" />
|
||||
<Define Name="SDLK_POWER" Value="1073741926" />
|
||||
<Define Name="SDLK_KP_EQUALS" Value="1073741927" />
|
||||
<Define Name="SDLK_F13" Value="1073741928" />
|
||||
<Define Name="SDLK_F14" Value="1073741929" />
|
||||
<Define Name="SDLK_F15" Value="1073741930" />
|
||||
<Define Name="SDLK_F16" Value="1073741931" />
|
||||
<Define Name="SDLK_F17" Value="1073741932" />
|
||||
<Define Name="SDLK_F18" Value="1073741933" />
|
||||
<Define Name="SDLK_F19" Value="1073741934" />
|
||||
<Define Name="SDLK_F20" Value="1073741935" />
|
||||
<Define Name="SDLK_F21" Value="1073741936" />
|
||||
<Define Name="SDLK_F22" Value="1073741937" />
|
||||
<Define Name="SDLK_F23" Value="1073741938" />
|
||||
<Define Name="SDLK_F24" Value="1073741939" />
|
||||
<Define Name="SDLK_EXECUTE" Value="1073741940" />
|
||||
<Define Name="SDLK_HELP" Value="1073741941" />
|
||||
<Define Name="SDLK_MENU" Value="1073741942" />
|
||||
<Define Name="SDLK_SELECT" Value="1073741943" />
|
||||
<Define Name="SDLK_STOP" Value="1073741944" />
|
||||
<Define Name="SDLK_AGAIN" Value="1073741945" />
|
||||
<Define Name="SDLK_UNDO" Value="1073741946" />
|
||||
<Define Name="SDLK_CUT" Value="1073741947" />
|
||||
<Define Name="SDLK_COPY" Value="1073741948" />
|
||||
<Define Name="SDLK_PASTE" Value="1073741949" />
|
||||
<Define Name="SDLK_FIND" Value="1073741950" />
|
||||
<Define Name="SDLK_MUTE" Value="1073741951" />
|
||||
<Define Name="SDLK_VOLUMEUP" Value="1073741952" />
|
||||
<Define Name="SDLK_VOLUMEDOWN" Value="1073741953" />
|
||||
<Define Name="SDLK_KP_COMMA" Value="1073741957" />
|
||||
<Define Name="SDLK_KP_EQUALSAS400" Value="1073741958" />
|
||||
<Define Name="SDLK_ALTERASE" Value="1073741977" />
|
||||
<Define Name="SDLK_SYSREQ" Value="1073741978" />
|
||||
<Define Name="SDLK_CANCEL" Value="1073741979" />
|
||||
<Define Name="SDLK_CLEAR" Value="1073741980" />
|
||||
<Define Name="SDLK_PRIOR" Value="1073741981" />
|
||||
<Define Name="SDLK_RETURN2" Value="1073741982" />
|
||||
<Define Name="SDLK_SEPARATOR" Value="1073741983" />
|
||||
<Define Name="SDLK_OUT" Value="1073741984" />
|
||||
<Define Name="SDLK_OPER" Value="1073741985" />
|
||||
<Define Name="SDLK_CLEARAGAIN" Value="1073741986" />
|
||||
<Define Name="SDLK_CRSEL" Value="1073741987" />
|
||||
<Define Name="SDLK_EXSEL" Value="1073741988" />
|
||||
<Define Name="SDLK_KP_00" Value="1073742000" />
|
||||
<Define Name="SDLK_KP_000" Value="1073742001" />
|
||||
<Define Name="SDLK_THOUSANDSSEPARATOR" Value="1073742002" />
|
||||
<Define Name="SDLK_DECIMALSEPARATOR" Value="1073742003" />
|
||||
<Define Name="SDLK_CURRENCYUNIT" Value="1073742004" />
|
||||
<Define Name="SDLK_CURRENCYSUBUNIT" Value="1073742005" />
|
||||
<Define Name="SDLK_KP_LEFTPAREN" Value="1073742006" />
|
||||
<Define Name="SDLK_KP_RIGHTPAREN" Value="1073742007" />
|
||||
<Define Name="SDLK_KP_LEFTBRACE" Value="1073742008" />
|
||||
<Define Name="SDLK_KP_RIGHTBRACE" Value="1073742009" />
|
||||
<Define Name="SDLK_KP_TAB" Value="1073742010" />
|
||||
<Define Name="SDLK_KP_BACKSPACE" Value="1073742011" />
|
||||
<Define Name="SDLK_KP_A" Value="1073742012" />
|
||||
<Define Name="SDLK_KP_B" Value="1073742013" />
|
||||
<Define Name="SDLK_KP_C" Value="1073742014" />
|
||||
<Define Name="SDLK_KP_D" Value="1073742015" />
|
||||
<Define Name="SDLK_KP_E" Value="1073742016" />
|
||||
<Define Name="SDLK_KP_F" Value="1073742017" />
|
||||
<Define Name="SDLK_KP_XOR" Value="1073742018" />
|
||||
<Define Name="SDLK_KP_POWER" Value="1073742019" />
|
||||
<Define Name="SDLK_KP_PERCENT" Value="1073742020" />
|
||||
<Define Name="SDLK_KP_LESS" Value="1073742021" />
|
||||
<Define Name="SDLK_KP_GREATER" Value="1073742022" />
|
||||
<Define Name="SDLK_KP_AMPERSAND" Value="1073742023" />
|
||||
<Define Name="SDLK_KP_DBLAMPERSAND" Value="1073742024" />
|
||||
<Define Name="SDLK_KP_VERTICALBAR" Value="1073742025" />
|
||||
<Define Name="SDLK_KP_DBLVERTICALBAR" Value="1073742026" />
|
||||
<Define Name="SDLK_KP_COLON" Value="1073742027" />
|
||||
<Define Name="SDLK_KP_HASH" Value="1073742028" />
|
||||
<Define Name="SDLK_KP_SPACE" Value="1073742029" />
|
||||
<Define Name="SDLK_KP_AT" Value="1073742030" />
|
||||
<Define Name="SDLK_KP_EXCLAM" Value="1073742031" />
|
||||
<Define Name="SDLK_KP_MEMSTORE" Value="1073742032" />
|
||||
<Define Name="SDLK_KP_MEMRECALL" Value="1073742033" />
|
||||
<Define Name="SDLK_KP_MEMCLEAR" Value="1073742034" />
|
||||
<Define Name="SDLK_KP_MEMADD" Value="1073742035" />
|
||||
<Define Name="SDLK_KP_MEMSUBTRACT" Value="1073742036" />
|
||||
<Define Name="SDLK_KP_MEMMULTIPLY" Value="1073742037" />
|
||||
<Define Name="SDLK_KP_MEMDIVIDE" Value="1073742038" />
|
||||
<Define Name="SDLK_KP_PLUSMINUS" Value="1073742039" />
|
||||
<Define Name="SDLK_KP_CLEAR" Value="1073742040" />
|
||||
<Define Name="SDLK_KP_CLEARENTRY" Value="1073742041" />
|
||||
<Define Name="SDLK_KP_BINARY" Value="1073742042" />
|
||||
<Define Name="SDLK_KP_OCTAL" Value="1073742043" />
|
||||
<Define Name="SDLK_KP_DECIMAL" Value="1073742044" />
|
||||
<Define Name="SDLK_KP_HEXADECIMAL" Value="1073742045" />
|
||||
<Define Name="SDLK_LCTRL" Value="1073742048" />
|
||||
<Define Name="SDLK_LSHIFT" Value="1073742049" />
|
||||
<Define Name="SDLK_LALT" Value="1073742050" />
|
||||
<Define Name="SDLK_LGUI" Value="1073742051" />
|
||||
<Define Name="SDLK_RCTRL" Value="1073742052" />
|
||||
<Define Name="SDLK_RSHIFT" Value="1073742053" />
|
||||
<Define Name="SDLK_RALT" Value="1073742054" />
|
||||
<Define Name="SDLK_RGUI" Value="1073742055" />
|
||||
<Define Name="SDLK_MODE" Value="1073742081" />
|
||||
<Define Name="SDLK_AUDIONEXT" Value="1073742082" />
|
||||
<Define Name="SDLK_AUDIOPREV" Value="1073742083" />
|
||||
<Define Name="SDLK_AUDIOSTOP" Value="1073742084" />
|
||||
<Define Name="SDLK_AUDIOPLAY" Value="1073742085" />
|
||||
<Define Name="SDLK_AUDIOMUTE" Value="1073742086" />
|
||||
<Define Name="SDLK_MEDIASELECT" Value="1073742087" />
|
||||
<Define Name="SDLK_WWW" Value="1073742088" />
|
||||
<Define Name="SDLK_MAIL" Value="1073742089" />
|
||||
<Define Name="SDLK_CALCULATOR" Value="1073742090" />
|
||||
<Define Name="SDLK_COMPUTER" Value="1073742091" />
|
||||
<Define Name="SDLK_AC_SEARCH" Value="1073742092" />
|
||||
<Define Name="SDLK_AC_HOME" Value="1073742093" />
|
||||
<Define Name="SDLK_AC_BACK" Value="1073742094" />
|
||||
<Define Name="SDLK_AC_FORWARD" Value="1073742095" />
|
||||
<Define Name="SDLK_AC_STOP" Value="1073742096" />
|
||||
<Define Name="SDLK_AC_REFRESH" Value="1073742097" />
|
||||
<Define Name="SDLK_AC_BOOKMARKS" Value="1073742098" />
|
||||
<Define Name="SDLK_BRIGHTNESSDOWN" Value="1073742099" />
|
||||
<Define Name="SDLK_BRIGHTNESSUP" Value="1073742100" />
|
||||
<Define Name="SDLK_DISPLAYSWITCH" Value="1073742101" />
|
||||
<Define Name="SDLK_KBDILLUMTOGGLE" Value="1073742102" />
|
||||
<Define Name="SDLK_KBDILLUMDOWN" Value="1073742103" />
|
||||
<Define Name="SDLK_KBDILLUMUP" Value="1073742104" />
|
||||
<Define Name="SDLK_EJECT" Value="1073742105" />
|
||||
<Define Name="SDLK_SLEEP" Value="1073742106" />
|
||||
<Define Name="KMOD_NONE" Value="0" />
|
||||
<Define Name="KMOD_LSHIFT" Value="1" />
|
||||
<Define Name="KMOD_RSHIFT" Value="2" />
|
||||
<Define Name="KMOD_LCTRL" Value="64" />
|
||||
<Define Name="KMOD_RCTRL" Value="128" />
|
||||
<Define Name="KMOD_LALT" Value="256" />
|
||||
<Define Name="KMOD_RALT" Value="512" />
|
||||
<Define Name="KMOD_LGUI" Value="1024" />
|
||||
<Define Name="KMOD_RGUI" Value="2048" />
|
||||
<Define Name="KMOD_NUM" Value="4096" />
|
||||
<Define Name="KMOD_CAPS" Value="8192" />
|
||||
<Define Name="KMOD_MODE" Value="16384" />
|
||||
<Define Name="KMOD_RESERVED" Value="32768" />
|
||||
<Define Name="KMOD_CTRL" Value="192" />
|
||||
<Define Name="KMOD_SHIFT" Value="3" />
|
||||
<Define Name="KMOD_ALT" Value="768" />
|
||||
<Define Name="KMOD_GUI" Value="3072" />
|
||||
<Define Name="SEEK_SET" Value="0" />
|
||||
<Define Name="SEEK_CUR" Value="1" />
|
||||
<Define Name="SEEK_END" Value="2" />
|
||||
<Define Name="LOGTYPE_NONE" Value="0" />
|
||||
<Define Name="LOGTYPE_VERBOSE" Value="1" />
|
||||
<Define Name="LOGTYPE_DEBUG" Value="2" />
|
||||
<Define Name="LOGTYPE_INFO" Value="3" />
|
||||
<Define Name="LOGTYPE_WARN" Value="4" />
|
||||
<Define Name="LOGTYPE_ERROR" Value="5" />
|
||||
<Define Name="LOGTYPE_CRITICAL" Value="6" />
|
||||
<Define Name="COLOUR_TRANSPARENT" Value="0" />
|
||||
<Define Name="COLOUR_WHITE" Value="4294967295" />
|
||||
<Define Name="COLOUR_BLACK" Value="4278190080" />
|
||||
<Define Name="COLOUR_RED" Value="4294901760" />
|
||||
<Define Name="COLOUR_LIME" Value="4278255360" />
|
||||
<Define Name="COLOUR_BLUE" Value="4278190335" />
|
||||
<Define Name="COLOUR_YELLOW" Value="4294967040" />
|
||||
<Define Name="COLOUR_AQUA" Value="4278255615" />
|
||||
<Define Name="COLOUR_FUCHSIA" Value="4294902015" />
|
||||
<Define Name="COLOUR_SKYBLUE" Value="4284927231" />
|
||||
<Define Name="COLOUR_SILVER" Value="4291019715" />
|
||||
<Define Name="COLOUR_GREEN" Value="4278222592" />
|
||||
<Define Name="COLOUR_ORANGE" Value="4294934272" />
|
||||
<Define Name="INVALID_NETWORK_ID" Value="-1" />
|
||||
<Define Name="INVALID_CLIENT_ID" Value="-1" />
|
||||
<Define Name="CHAT_TYPE_NONE" Value="0" />
|
||||
<Define Name="CHAT_TYPE_CHAT" Value="1" />
|
||||
<Define Name="CHAT_TYPE_INFO" Value="2" />
|
||||
<Define Name="CHAT_TYPE_DEBUG" Value="3" />
|
||||
<Define Name="NONE" Value="0" />
|
||||
<Define Name="MAX_PEDS" Value="128" />
|
||||
<Define Name="MAX_VEHICLES" Value="128" />
|
||||
<Define Name="ELEMENT_ELEMENT" Value="0" />
|
||||
<Define Name="ELEMENT_ENTITY" Value="6" />
|
||||
<Define Name="ELEMENT_PED" Value="14" />
|
||||
<Define Name="ELEMENT_PLAYER" Value="30" />
|
||||
<Define Name="ELEMENT_VEHICLE" Value="38" />
|
||||
<Define Name="GAME_UNKNOWN" Value="0" />
|
||||
<Define Name="GAME_MAFIA_ONE" Value="10" />
|
||||
<Define Name="GAME_MAFIA_TWO" Value="11" />
|
||||
<Define Name="GAME_MAFIA_THREE" Value="12" />
|
||||
<Define Name="GAME_MAFIA_ONE_DE" Value="13" />
|
||||
<Define Name="WEAPON_KNUCKLEDUSTER" Value="2" />
|
||||
<Define Name="WEAPON_KNIFE" Value="3" />
|
||||
<Define Name="WEAPON_BASEBALLBAT" Value="4" />
|
||||
<Define Name="WEAPON_MOLOTOV" Value="5" />
|
||||
<Define Name="WEAPON_COLTDETECTIVESPECIAL" Value="6" />
|
||||
<Define Name="WEAPON_SW_MAGNUM" Value="7" />
|
||||
<Define Name="WEAPON_SW_MP" Value="8" />
|
||||
<Define Name="WEAPON_COLT1911" Value="9" />
|
||||
<Define Name="WEAPON_TOMMYGUN" Value="10" />
|
||||
<Define Name="WEAPON_PUMPSHOTGUN" Value="11" />
|
||||
<Define Name="WEAPON_SAWEDOFF" Value="12" />
|
||||
<Define Name="WEAPON_SPRINGFIELD" Value="13" />
|
||||
<Define Name="WEAPON_MOSINNAGANT" Value="13" />
|
||||
<Define Name="WEAPON_GRENADE" Value="15" />
|
||||
<Define Name="WEAPON_BUCKET" Value="17" />
|
||||
<Define Name="WEAPON_STEELBAR" Value="20" />
|
||||
<Define Name="WEAPON_CROWBAR" Value="25" />
|
||||
<Define Name="WEAPON_WOODENPLANK" Value="28" />
|
||||
<Define Name="WEAPON_BOTTLE" Value="29" />
|
||||
<Define Name="WEAPON_SWORD" Value="31" />
|
||||
<Define Name="WEAPON_DOGSHEAD" Value="32" />
|
||||
<Define Name="PEDBEHAVIOR_NOREACT" Value="4" />
|
||||
<Define Name="PEDBEHAVIOR_NOREACT_GUARDPLAYER" Value="2" />
|
||||
<Define Name="PEDBEHAVIOR_REACTALL" Value="0" />
|
||||
<Define Name="PEDBEHAVIOR_REACTTOATTACKS_ATTACK" Value="64" />
|
||||
<Define Name="PEDBEHAVIOR_REACTTOATTACKS_AWAYORATTACK" Value="32" />
|
||||
<Define Name="PEDBEHAVIOR_REACTTOPLAYER_AWAY" Value="16" />
|
||||
<Define Name="PEDBEHAVIOR_REACTTOPLAYERHIT_ATTACK" Value="8" />
|
||||
<Define Name="CLIENT_VERSION_MAJOR" Value="1" />
|
||||
<Define Name="CLIENT_VERSION_MINOR" Value="0" />
|
||||
<Define Name="CLIENT_VERSION_PATCH" Value="0" />
|
||||
<Define Name="CLIENT_VERSION_BUILD" Value="0" />
|
||||
</Defines>
|
||||
459
documentation/mafiac/client/mafia1/Documentation.xml
Normal file
@@ -0,0 +1,459 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Documentation>
|
||||
<!--
|
||||
Mask Values
|
||||
|
||||
b - bool
|
||||
i - int32
|
||||
f - float
|
||||
s - string
|
||||
c - function/callback
|
||||
x - class/instance
|
||||
z - vector2D
|
||||
v - vector3D
|
||||
t - thiscall
|
||||
| - optional arguments
|
||||
* - infinite arguments
|
||||
. - any type
|
||||
-->
|
||||
<Namespace Name="global">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="thisResource" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localClient" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localPlayer" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="isConnected" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isConnecting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="toColour" Mask="iii|i" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="collectAllGarbage" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="inPoly" Mask="z*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEvent" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEventHandler" Mask="sf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeEventHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindEventHandler" Mask="sxf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindEventHandler" Mask="sx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="triggerEvent" Mask="s|x*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addCommandHandler" Mask="sc|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeCommandHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="hasCommandHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="consoleCommand" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setTimeout" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setInterval" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setImmediate" Mask="c*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearTimeout" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearInterval" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearImmediate" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindKey" Mask="iic" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindKey" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbindAllKeys" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="findResourceByName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getResources" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="exportFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="openFile" Mask="s|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="loadTextFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="saveTextFile" Mask="ss" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addNetworkHandler" Mask="sc" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeNetworkHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getConsole" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClients" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClient" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="destroyElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getClientFromPlayerElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementsByType" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromId" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addToWorld" Mask="x" RequiredArguments="1" Obsolete="true" />
|
||||
<Function Name="registerNetObject" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="connect" Mask="si|s" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="disconnect" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="message" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="triggerNetworkEvent" Mask="s*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setChatWindowEnabled" Mask="b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="isScancodePressed" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="isKeyDown" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getPeds" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getPlayers" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getVehicles" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getScreenFromWorldPosition" Mask="v" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Stream">
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Property Name="position" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readBytes" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readString" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="true" />
|
||||
<Function Name="writeBytes" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeString" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readFloat" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readDouble" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="writeInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeFloat" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeDouble" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="TextReader">
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="loadText" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readCharacter" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Matrix4x4">
|
||||
<Property Name="m11" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m12" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m13" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m14" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m21" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m22" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m23" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m24" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m31" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m32" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m33" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m34" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m41" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m42" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m43" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m44" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="setIdentity" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setTranslate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setScale" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateX" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateY" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateZ" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setMultiply" Mask="txx*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="multiply" Mask="tx*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setInverse" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="transformCoordinate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElement" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setElement" Mask="tif" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getVector3" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec2">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec3">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="z" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="squaredLength" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Function Name="distance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="squaredDistance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="dotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="absDotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="normalise" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="crossProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="midPoint" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addSpherical" Mask="tfff" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="cartesianToSpherical" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Event">
|
||||
<Class Name="CancellableEvent">
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="Timer" />
|
||||
<Class Name="KeyEvent">
|
||||
<Property Name="keyCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="scanCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="mod" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="repeat" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="down" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlElement">
|
||||
<Property Name="childrenCount" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="parent" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="text" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="attributes" ReadOnly="true" Obsolete="false" />
|
||||
<Function Name="clear" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getStringAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getBoolAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getIntegerAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getFloatAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlDocument">
|
||||
<Property Name="rootElement" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="load" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Resource">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="isStarted" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isStarting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="exports" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="isReady" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="start" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="stop" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="restart" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getExport" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="GUIElement">
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="left" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="top" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="right" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="bottom" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="width" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="height" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="focusBringsToTop" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="visible" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="useClip" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Function Name="bringToTop" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="invalidate" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setDocked" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Class Name="GUIPage">
|
||||
<Function Name="addElement" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromName" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="GUIWindow">
|
||||
<Property Name="title" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="text" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Function Name="addClientElement" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="GUIButton" />
|
||||
<Class Name="GUIRectangle" />
|
||||
<Class Name="GUIText" />
|
||||
<Class Name="GUIHtmlView">
|
||||
<Property Name="offset" ReadOnly="true" Obsolete="false" Type="Vector2D" />
|
||||
<Property Name="maxOffset" ReadOnly="true" Obsolete="false" Type="Vector2D" />
|
||||
<Property Name="document" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="open" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addOffset" Mask="tz" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="updateLayout" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="GUIHtmlElement">
|
||||
<Property Name="text" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="parent" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="getChild" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="select" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="selectAll" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clear" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="orphan" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setInnerHtml" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Client">
|
||||
<Property Name="index" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="gameVersion" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="player" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="administrator" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="console" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="ip" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ping" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="despawnPlayer" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="disconnect" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Element">
|
||||
<Property Name="id" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="type" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="netFlags" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="isLocal" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isSyncer" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isOwner" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="syncer" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="syncerId" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="dimension" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="parent" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="resource" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="streamInDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="streamOutDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="position" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="rotation" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Function Name="isType" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setSyncer" Mask="tx|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="isCreatedFor" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearExistsFor" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setExistsFor" Mask="txb" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="existsFor" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getRotation" Mask="t" RequiredArguments="0" Obsolete="true" />
|
||||
<Function Name="setRotation" Mask="tv" RequiredArguments="1" Obsolete="true" />
|
||||
<Class Name="Entity">
|
||||
<Property Name="position" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="rotation" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="heading" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="model" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="modelIndex" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Class Name="Ped">
|
||||
<Property Name="vehicle" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="skin" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="health" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="animationState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="animationStateLocal" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="kill" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="respawn" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="clearWeapons" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="giveWeapon" Mask="tiii" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="hasWeapon" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="takeWeapon" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="dropWeapon" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="warpIntoVehicle" Mask="tvi" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeFromVehicle" Mask="tvi" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addAnimation" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setBehavior" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Player" />
|
||||
</Class>
|
||||
<Class Name="Vehicle">
|
||||
<Property Name="siren" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="lights" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="engine" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="speedLimit" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="gear" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="wheelAngle" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="fuel" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="speed" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="turnVelocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="velocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="engineHealth" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="health" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="engineRPM" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="explode" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="repair" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getOccupant" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getOccupants" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="NetObjectFlags">
|
||||
<Property Name="registered" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="deleting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="onAllDimensions" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="forcedSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="findSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="sendSync" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="distanceStreaming" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="alwaysExistForSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="defaultExistance" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="transient" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="onlySyncIfDetached" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
</Class>
|
||||
<Class Name="Surface">
|
||||
<Class Name="Texture" />
|
||||
</Class>
|
||||
<Namespace Name="reflection">
|
||||
<Function Name="clone" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="move" Mask="xx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="tostring" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="call" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Function" />
|
||||
</Namespace>
|
||||
<Namespace Name="module" />
|
||||
<Namespace Name="sdl">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="getModState" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="platform">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="modState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
</Namespace>
|
||||
<Namespace Name="audio">
|
||||
<Function Name="createSound" Mask="xb" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createSoundFromURL" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Sound">
|
||||
<Property Name="position" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="volume" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="play" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="stop" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Namespace>
|
||||
<Namespace Name="lucasFont">
|
||||
<Function Name="createFont" Mask="xf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createDefaultFont" Mask="fs|s" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="enumFontFamilies" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Font">
|
||||
<Property Name="size" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Function Name="render" Mask="tszffffi|bbbb" RequiredArguments="7" Obsolete="false" />
|
||||
<Function Name="measure" Mask="tsffff|bb" RequiredArguments="5" Obsolete="false" />
|
||||
</Class>
|
||||
</Namespace>
|
||||
<Namespace Name="gui">
|
||||
<Property Name="cursorPosition" ReadOnly="true" Obsolete="false" Type="Vector2D" />
|
||||
<Property Name="cursorEnabled" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="addElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="destroyElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="destroyElements" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getElementFromName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="showCursor" Mask="b|b" RequiredArguments="1" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="elements" />
|
||||
<Namespace Name="mafia">
|
||||
<Property Name="mapName" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="width" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="height" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="aspectRatio" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Function Name="createPed" Mask="svf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="createVehicle" Mask="svf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="createExplosion" Mask="vff" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="fadeCamera" Mask="bf|i" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setPlayerControl" Mask="b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setTrafficEnabled" Mask="b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="changeMap" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createPlayer" Mask="svf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="setLocalPlayer" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Namespace Name="hud">
|
||||
<Function Name="message" Mask="si" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="enableMap" Mask="b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="announce" Mask="sf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="showCountdown" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
<Namespace Name="camera">
|
||||
<Property Name="position" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="lookAtPosition" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
</Namespace>
|
||||
<Namespace Name="graphics">
|
||||
<Function Name="loadBMP" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="loadPNG" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="drawRectangle" Mask="xzz|iiiifzzzz" RequiredArguments="3" Obsolete="false" />
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
</Documentation>
|
||||
103
documentation/mafiac/client/mafia1/EventTypes.xml
Normal file
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" ?>
|
||||
<EventTypes>
|
||||
<!--Called right before the hud is drawn, you should draw your HUD here if you want it under the hud-->
|
||||
<EventType Name="OnDrawHUD" Hash="2504546524" Arguments="0" CanPreventDefault="true" />
|
||||
<!--Called when a keyboard key is down-->
|
||||
<EventType Name="OnKeyDown" Hash="3091440445" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a resource starts-->
|
||||
<EventType Name="OnResourceStart" Hash="1143708828" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to stream in-->
|
||||
<EventType Name="OnElementStreamIn" Hash="2759455221" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a resource stops-->
|
||||
<EventType Name="OnResourceStop" Hash="1347867548" Arguments="2" CanPreventDefault="true" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerExitSphere" Hash="105319985" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a GUIElement is clicked on-->
|
||||
<EventType Name="OnGUIClick" Hash="1620463676" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the camera is about to be processed-->
|
||||
<EventType Name="OnCameraProcess" Hash="4077277522" Arguments="0" CanPreventDefault="true" />
|
||||
<!--Called whenever a ped jacks a vehicle-->
|
||||
<EventType Name="OnPedJackVehicle" Hash="3295144583" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called after all the hud is drawn, you should draw your HUD here if you want it over the hud-->
|
||||
<EventType Name="OnDrawnHUD" Hash="1969344644" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called after OnRender2D, usually post processing would be done here-->
|
||||
<EventType Name="OnPostRender2D" Hash="1025891209" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when all the files are downloaded-->
|
||||
<EventType Name="OnResourceReady" Hash="4089924796" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called whenever an entity is processed-->
|
||||
<EventType Name="OnEntityProcess" Hash="850679850" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to be destroyed-->
|
||||
<EventType Name="OnElementDestroy" Hash="696839637" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when anchor tags are clicked in a GUIHtmlView-->
|
||||
<EventType Name="OnGUIAnchorClick" Hash="1882824246" Arguments="3" CanPreventDefault="true" />
|
||||
<!--Called when a key is typed-->
|
||||
<EventType Name="OnCharacter" Hash="318128971" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called whenever something happens-->
|
||||
<EventType Name="OnExampleEvent" Hash="3708674487" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called whenever the map/mission is fully loaded and ready to play-->
|
||||
<EventType Name="OnMapLoaded" Hash="3234142120" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever the key is pressed-->
|
||||
<EventType Name="OnKeyPressed" Hash="694509307" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped has been hit-->
|
||||
<EventType Name="OnPedInflictDamage" Hash="1391854299" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called every render-->
|
||||
<EventType Name="OnRender" Hash="2466144783" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped dies-->
|
||||
<EventType Name="OnPedDeath" Hash="2417618960" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped spawns-->
|
||||
<EventType Name="OnPedSpawn" Hash="3880839897" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped starts entering a vehicle-->
|
||||
<EventType Name="OnPedEnteringVehicle" Hash="3211811326" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a cursor button is down-->
|
||||
<EventType Name="OnCursorDown" Hash="3618352285" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped finishes entering a vehicle-->
|
||||
<EventType Name="OnPedEnteredVehicle" Hash="800199306" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped starts exiting a vehicle-->
|
||||
<EventType Name="OnPedExitingVehicle" Hash="353075125" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when the window is focused-->
|
||||
<EventType Name="OnFocus" Hash="1989030060" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called whenever a ped finishes exited a vehicle-->
|
||||
<EventType Name="OnPedExitedVehicle" Hash="1591215844" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when the mouse leaves the window-->
|
||||
<EventType Name="OnMouseLeave" Hash="3102340603" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a cursor button is up-->
|
||||
<EventType Name="OnCursorUp" Hash="2031527000" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called every process-->
|
||||
<EventType Name="OnProcess" Hash="3150131130" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called every prerender-->
|
||||
<EventType Name="OnPreRender" Hash="2235820386" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when 2D shit should be rendered-->
|
||||
<EventType Name="OnRender2D" Hash="3260181898" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a line will be output to the chatbox-->
|
||||
<EventType Name="OnChatOutput" Hash="2275472839" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a mouse button is down-->
|
||||
<EventType Name="OnMouseDown" Hash="2632778956" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a mouse button is up-->
|
||||
<EventType Name="OnMouseUp" Hash="3080252785" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when the cursor moves-->
|
||||
<EventType Name="OnCursorMove" Hash="610929630" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the mouse scrolls-->
|
||||
<EventType Name="OnMouseWheel" Hash="1116330591" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a mouse moves-->
|
||||
<EventType Name="OnMouseMove" Hash="1865196431" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a mouse is connected-->
|
||||
<EventType Name="OnMouseConnected" Hash="4137684318" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a mouse is disconnected-->
|
||||
<EventType Name="OnMouseDisconnected" Hash="2332645211" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when the window is defocused-->
|
||||
<EventType Name="OnLostFocus" Hash="1036525539" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when a keyboard key is up-->
|
||||
<EventType Name="OnKeyUp" Hash="1763402597" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when an element is about to stream out-->
|
||||
<EventType Name="OnElementStreamOut" Hash="3852636898" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when disconnected from the server-->
|
||||
<EventType Name="OnDisconnect" Hash="3221334991" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerEnterSphere" Hash="3890156725" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerEnteredVehicle" Hash="3395021369" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerExitedVehicle" Hash="1654569001" Arguments="1" CanPreventDefault="false" />
|
||||
<!---->
|
||||
<EventType Name="OnLocalPlayerSwitchWeapon" Hash="3670373318" Arguments="2" CanPreventDefault="false" />
|
||||
</EventTypes>
|
||||
399
documentation/mafiac/server/Commands.xml
Normal file
@@ -0,0 +1,399 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Commands>
|
||||
<Command Name="jobwhitelist" Hash="2189523071" />
|
||||
<Command Name="bizdelflooritems" Hash="158748106" />
|
||||
<Command Name="bizpublic" Hash="2572551879" />
|
||||
<Command Name="returnplr" Hash="2563135004" />
|
||||
<Command Name="additemtype" Hash="1625056830" />
|
||||
<Command Name="say" Hash="4241071205" />
|
||||
<Command Name="freq" Hash="1475614133" />
|
||||
<Command Name="items" Hash="3776899405" />
|
||||
<Command Name="iplogin" Hash="3830114180" />
|
||||
<Command Name="exit" Hash="2483651598" />
|
||||
<Command Name="addjobrouteloc" Hash="2057882151" />
|
||||
<Command Name="houseentrance" Hash="1732577001" />
|
||||
<Command Name="houseclan" Hash="3573514699" />
|
||||
<Command Name="aban" Hash="1063339661" />
|
||||
<Command Name="vw" Hash="4141688848" />
|
||||
<Command Name="autolastchar" Hash="3186897000" />
|
||||
<Command Name="quit" Hash="1135269781" />
|
||||
<Command Name="notips" Hash="3711348993" />
|
||||
<Command Name="help" Hash="143088812" />
|
||||
<Command Name="equip" Hash="4067673008" />
|
||||
<Command Name="ccode" Hash="1323373828" />
|
||||
<Command Name="start" Hash="2675529103" />
|
||||
<Command Name="locale" Hash="1098958488" />
|
||||
<Command Name="restart" Hash="3891864071" />
|
||||
<Command Name="carrespawnclan" Hash="1840990743" />
|
||||
<Command Name="deljobroute" Hash="3139178648" />
|
||||
<Command Name="setemail" Hash="795930342" />
|
||||
<Command Name="reloadcfg" Hash="2937436470" />
|
||||
<Command Name="cmd" Hash="794565824" />
|
||||
<Command Name="vehreloadall" Hash="1958007921" />
|
||||
<Command Name="stopall" Hash="1683731152" />
|
||||
<Command Name="stop" Hash="3109426870" />
|
||||
<Command Name="refresh" Hash="1619108091" />
|
||||
<Command Name="bizjob" Hash="1623679964" />
|
||||
<Command Name="jobcolour" Hash="1906062370" />
|
||||
<Command Name="subnetban" Hash="3446702509" />
|
||||
<Command Name="bizdefaultitems" Hash="492108129" />
|
||||
<Command Name="dumpdoc" Hash="3404143852" />
|
||||
<Command Name="bizclan" Hash="2741917790" />
|
||||
<Command Name="bizdeposit" Hash="4085204187" />
|
||||
<Command Name="accent" Hash="1734464235" />
|
||||
<Command Name="streamnameall" Hash="257040269" />
|
||||
<Command Name="accents" Hash="749835561" />
|
||||
<Command Name="bizfloor" Hash="991723021" />
|
||||
<Command Name="bizowner" Hash="1245269599" />
|
||||
<Command Name="jobrouteenabled" Hash="2783446125" />
|
||||
<Command Name="bizreloadall" Hash="1391182304" />
|
||||
<Command Name="accentlist" Hash="1686860130" />
|
||||
<Command Name="login" Hash="2852702992" />
|
||||
<Command Name="mute" Hash="3434705756" />
|
||||
<Command Name="drop" Hash="1880425762" />
|
||||
<Command Name="register" Hash="1610170388" />
|
||||
<Command Name="bizstore" Hash="2047799380" />
|
||||
<Command Name="gotoveh" Hash="1314378666" />
|
||||
<Command Name="bizname" Hash="1656456532" />
|
||||
<Command Name="changepass" Hash="1379839939" />
|
||||
<Command Name="bizorder" Hash="1886403515" />
|
||||
<Command Name="anims" Hash="3889228819" />
|
||||
<Command Name="scrolllines" Hash="1527443730" />
|
||||
<Command Name="gui" Hash="3573502200" />
|
||||
<Command Name="2fa" Hash="3518788867" />
|
||||
<Command Name="verifyemail" Hash="3201570836" />
|
||||
<Command Name="loginalert" Hash="2359999903" />
|
||||
<Command Name="siren" Hash="3683367432" />
|
||||
<Command Name="mousecam" Hash="3206767913" />
|
||||
<Command Name="bizbuyprice" Hash="655960419" />
|
||||
<Command Name="delstaffflag" Hash="1313026715" />
|
||||
<Command Name="bizexit" Hash="2828107612" />
|
||||
<Command Name="chatautohide" Hash="4051244712" />
|
||||
<Command Name="newchar" Hash="4170498675" />
|
||||
<Command Name="anim" Hash="1739285595" />
|
||||
<Command Name="lights" Hash="951890664" />
|
||||
<Command Name="charban" Hash="994982700" />
|
||||
<Command Name="biztill" Hash="869001970" />
|
||||
<Command Name="an" Hash="2536834118" />
|
||||
<Command Name="e" Hash="4024072794" />
|
||||
<Command Name="addstaffflag" Hash="79289023" />
|
||||
<Command Name="animlist" Hash="2302640798" />
|
||||
<Command Name="vehjob" Hash="3344978244" />
|
||||
<Command Name="clanchat" Hash="3592644293" />
|
||||
<Command Name="stopanim" Hash="423975717" />
|
||||
<Command Name="houseexit" Hash="3741361865" />
|
||||
<Command Name="spawnveh" Hash="4087978827" />
|
||||
<Command Name="acctban" Hash="2579355258" />
|
||||
<Command Name="cban" Hash="2506657286" />
|
||||
<Command Name="delplritem" Hash="2217077700" />
|
||||
<Command Name="saban" Hash="1719006355" />
|
||||
<Command Name="ipban" Hash="2759871306" />
|
||||
<Command Name="delloglevel" Hash="3046139078" />
|
||||
<Command Name="addbiz" Hash="3844119303" />
|
||||
<Command Name="delbiz" Hash="1295584235" />
|
||||
<Command Name="bizlock" Hash="3138871388" />
|
||||
<Command Name="bizlights" Hash="2589891122" />
|
||||
<Command Name="bizbuy" Hash="1419510099" />
|
||||
<Command Name="addtrigresp" Hash="2942770628" />
|
||||
<Command Name="bizfee" Hash="223799185" />
|
||||
<Command Name="bizitemprice" Hash="3432680323" />
|
||||
<Command Name="bizbalance" Hash="3394291228" />
|
||||
<Command Name="bizstock" Hash="3463446083" />
|
||||
<Command Name="bizwithdraw" Hash="4223432723" />
|
||||
<Command Name="buy" Hash="3481502327" />
|
||||
<Command Name="bizdelowner" Hash="3491490727" />
|
||||
<Command Name="bizrank" Hash="3034649527" />
|
||||
<Command Name="bizblip" Hash="688162896" />
|
||||
<Command Name="bizpickup" Hash="3816558887" />
|
||||
<Command Name="bizinfo" Hash="4145138181" />
|
||||
<Command Name="cmdenabletype" Hash="3401887628" />
|
||||
<Command Name="bizflooritems" Hash="3152039807" />
|
||||
<Command Name="bizentrance" Hash="3384296964" />
|
||||
<Command Name="nosave" Hash="3967601367" />
|
||||
<Command Name="bizinttype" Hash="1993387962" />
|
||||
<Command Name="vehrespawnclan" Hash="2839312157" />
|
||||
<Command Name="bizdelstorageitems" Hash="640974901" />
|
||||
<Command Name="bizdealership" Hash="1448970834" />
|
||||
<Command Name="deljobrouteloc" Hash="630262577" />
|
||||
<Command Name="me" Hash="2891092674" />
|
||||
<Command Name="setgui" Hash="2722470096" />
|
||||
<Command Name="do" Hash="2638594197" />
|
||||
<Command Name="radioreloadall" Hash="240903479" />
|
||||
<Command Name="s" Hash="453955339" />
|
||||
<Command Name="shout" Hash="3228108389" />
|
||||
<Command Name="lock" Hash="2274335502" />
|
||||
<Command Name="setjobblips" Hash="3692573588" />
|
||||
<Command Name="talk" Hash="2669991355" />
|
||||
<Command Name="local" Hash="2346092776" />
|
||||
<Command Name="l" Hash="2517025534" />
|
||||
<Command Name="setlang" Hash="80385616" />
|
||||
<Command Name="testguiprompt" Hash="1276898732" />
|
||||
<Command Name="reloademailcfg" Hash="3863532754" />
|
||||
<Command Name="w" Hash="476252946" />
|
||||
<Command Name="gotobiz" Hash="175433282" />
|
||||
<Command Name="whisper" Hash="1339834624" />
|
||||
<Command Name="clan" Hash="2683740940" />
|
||||
<Command Name="jobroutestartmsg" Hash="3050645607" />
|
||||
<Command Name="addclan" Hash="4056447230" />
|
||||
<Command Name="c" Hash="112844655" />
|
||||
<Command Name="adminchat" Hash="1592899621" />
|
||||
<Command Name="admins" Hash="2732594447" />
|
||||
<Command Name="a" Hash="3904355907" />
|
||||
<Command Name="gotospawn" Hash="1617509273" />
|
||||
<Command Name="achat" Hash="648643670" />
|
||||
<Command Name="houseowner" Hash="3391862861" />
|
||||
<Command Name="m" Hash="3775001192" />
|
||||
<Command Name="clans" Hash="304575875" />
|
||||
<Command Name="testguierror" Hash="491890956" />
|
||||
<Command Name="clanranks" Hash="374891081" />
|
||||
<Command Name="clanflags" Hash="3602613223" />
|
||||
<Command Name="clearstaffflags" Hash="1933688633" />
|
||||
<Command Name="delclan" Hash="1490865981" />
|
||||
<Command Name="oldveh" Hash="2876867678" />
|
||||
<Command Name="nearveh" Hash="1881612975" />
|
||||
<Command Name="clanaddrank" Hash="2620943916" />
|
||||
<Command Name="stoproute" Hash="3037172349" />
|
||||
<Command Name="clandelrank" Hash="892131823" />
|
||||
<Command Name="clansetrank" Hash="3351619564" />
|
||||
<Command Name="clanowner" Hash="316548129" />
|
||||
<Command Name="clantag" Hash="3681023611" />
|
||||
<Command Name="clanranktag" Hash="1772177415" />
|
||||
<Command Name="clanmembertag" Hash="959912259" />
|
||||
<Command Name="clanrankname" Hash="3030127040" />
|
||||
<Command Name="clanranklevel" Hash="3892778233" />
|
||||
<Command Name="clanmembertitle" Hash="3517062004" />
|
||||
<Command Name="getplrveh" Hash="3278782420" />
|
||||
<Command Name="clanaddrankflag" Hash="2541715106" />
|
||||
<Command Name="clanrankflags" Hash="2045286736" />
|
||||
<Command Name="clandelrankflag" Hash="2989628358" />
|
||||
<Command Name="clanaddmemberflag" Hash="2650664065" />
|
||||
<Command Name="clandelmemberflag" Hash="2712990392" />
|
||||
<Command Name="armour" Hash="2549936275" />
|
||||
<Command Name="cmddisabletype" Hash="3293268402" />
|
||||
<Command Name="bindkey" Hash="1227425763" />
|
||||
<Command Name="cmdenable" Hash="4119993794" />
|
||||
<Command Name="cmddisable" Hash="4076768664" />
|
||||
<Command Name="jobblip" Hash="2619537769" />
|
||||
<Command Name="settime" Hash="1515686519" />
|
||||
<Command Name="setminuteduration" Hash="3347405783" />
|
||||
<Command Name="jobroutelocarrivemsg" Hash="2806715855" />
|
||||
<Command Name="setweather" Hash="296092028" />
|
||||
<Command Name="setsnow" Hash="54572929" />
|
||||
<Command Name="setlogo" Hash="3511519265" />
|
||||
<Command Name="setguicolours" Hash="1253001477" />
|
||||
<Command Name="newcharspawn" Hash="3561425132" />
|
||||
<Command Name="newcharcash" Hash="1263771093" />
|
||||
<Command Name="addgrounditem" Hash="766381040" />
|
||||
<Command Name="newcharskin" Hash="1335038066" />
|
||||
<Command Name="vehrespawnempty" Hash="37869538" />
|
||||
<Command Name="reloaddbcfg" Hash="2688744694" />
|
||||
<Command Name="reloadlocalecfg" Hash="3323883086" />
|
||||
<Command Name="reloadaccentcfg" Hash="1762311642" />
|
||||
<Command Name="setbizblips" Hash="2208865773" />
|
||||
<Command Name="docmdall" Hash="3550628791" />
|
||||
<Command Name="sethouseblips" Hash="3851708594" />
|
||||
<Command Name="bizstorage" Hash="853459670" />
|
||||
<Command Name="setbizpickups" Hash="2871853734" />
|
||||
<Command Name="sethousepickups" Hash="1540957074" />
|
||||
<Command Name="kick" Hash="517332741" />
|
||||
<Command Name="setjobpickups" Hash="1690177862" />
|
||||
<Command Name="dbquery" Hash="1161190191" />
|
||||
<Command Name="scode" Hash="771850886" />
|
||||
<Command Name="gmx" Hash="1012197459" />
|
||||
<Command Name="rt" Hash="196656302" />
|
||||
<Command Name="saveall" Hash="1031238566" />
|
||||
<Command Name="docmd" Hash="432538647" />
|
||||
<Command Name="addloglevel" Hash="2430402978" />
|
||||
<Command Name="loglevel" Hash="3600896637" />
|
||||
<Command Name="streamurlall" Hash="432433149" />
|
||||
<Command Name="forceresetpass" Hash="2586824369" />
|
||||
<Command Name="fixblips" Hash="3117299078" />
|
||||
<Command Name="fixpickups" Hash="4113146230" />
|
||||
<Command Name="carrespawnbiz" Hash="2668944323" />
|
||||
<Command Name="cars" Hash="2512854292" />
|
||||
<Command Name="resetambience" Hash="2196473743" />
|
||||
<Command Name="testguiinfo" Hash="2560043709" />
|
||||
<Command Name="jobroutefinishmsg" Hash="4059033309" />
|
||||
<Command Name="tax" Hash="2390866550" />
|
||||
<Command Name="wealth" Hash="1012568925" />
|
||||
<Command Name="givemoney" Hash="3084115026" />
|
||||
<Command Name="forcepayday" Hash="152293771" />
|
||||
<Command Name="speak" Hash="4227147363" />
|
||||
<Command Name="testemail" Hash="3217958560" />
|
||||
<Command Name="commands" Hash="2587759404" />
|
||||
<Command Name="enter" Hash="3111174254" />
|
||||
<Command Name="cmds" Hash="2152026535" />
|
||||
<Command Name="info" Hash="3414765911" />
|
||||
<Command Name="pos" Hash="2161764012" />
|
||||
<Command Name="veh" Hash="4108237688" />
|
||||
<Command Name="warpinveh" Hash="1511727410" />
|
||||
<Command Name="v" Hash="1801730948" />
|
||||
<Command Name="car" Hash="2000545437" />
|
||||
<Command Name="spawncar" Hash="1883948718" />
|
||||
<Command Name="skin" Hash="41510942" />
|
||||
<Command Name="vehdelowner" Hash="1446958743" />
|
||||
<Command Name="trigresp" Hash="3910880795" />
|
||||
<Command Name="skins" Hash="3775105792" />
|
||||
<Command Name="addjobloc" Hash="3531129112" />
|
||||
<Command Name="clothes" Hash="813282444" />
|
||||
<Command Name="changeskin" Hash="2654409721" />
|
||||
<Command Name="addhouse" Hash="872977526" />
|
||||
<Command Name="delhouse" Hash="919344075" />
|
||||
<Command Name="take" Hash="937258619" />
|
||||
<Command Name="housereloadall" Hash="2365497957" />
|
||||
<Command Name="getveh" Hash="438514653" />
|
||||
<Command Name="quitjob" Hash="4168778638" />
|
||||
<Command Name="houseinfo" Hash="2155877264" />
|
||||
<Command Name="engine" Hash="3903330957" />
|
||||
<Command Name="addtrigcond" Hash="2950893705" />
|
||||
<Command Name="geoip" Hash="1182365374" />
|
||||
<Command Name="housebuy" Hash="3262448210" />
|
||||
<Command Name="addveh" Hash="2701373167" />
|
||||
<Command Name="housedesc" Hash="1086099091" />
|
||||
<Command Name="cursor" Hash="3313461902" />
|
||||
<Command Name="houselock" Hash="3431381449" />
|
||||
<Command Name="houselights" Hash="1768421772" />
|
||||
<Command Name="drag" Hash="1833282923" />
|
||||
<Command Name="housebuyprice" Hash="2313447822" />
|
||||
<Command Name="up" Hash="1133833840" />
|
||||
<Command Name="houserentprice" Hash="2866086582" />
|
||||
<Command Name="houseblip" Hash="1586844101" />
|
||||
<Command Name="gps" Hash="1424645575" />
|
||||
<Command Name="housepickup" Hash="272986777" />
|
||||
<Command Name="houseinttype" Hash="1526335570" />
|
||||
<Command Name="i" Hash="3865851505" />
|
||||
<Command Name="item" Hash="521872670" />
|
||||
<Command Name="additem" Hash="1898315500" />
|
||||
<Command Name="delgrounditem" Hash="300357065" />
|
||||
<Command Name="delplritems" Hash="2273569865" />
|
||||
<Command Name="itemtypeuseval" Hash="4115341070" />
|
||||
<Command Name="pickup" Hash="1100888573" />
|
||||
<Command Name="put" Hash="2928708052" />
|
||||
<Command Name="inventory" Hash="2972535350" />
|
||||
<Command Name="use" Hash="2494680139" />
|
||||
<Command Name="inv" Hash="4200577949" />
|
||||
<Command Name="houseitems" Hash="3830822780" />
|
||||
<Command Name="buylist" Hash="1273281402" />
|
||||
<Command Name="vehbuyprice" Hash="2705069139" />
|
||||
<Command Name="power" Hash="2877948320" />
|
||||
<Command Name="radio" Hash="3762690831" />
|
||||
<Command Name="r" Hash="1812594589" />
|
||||
<Command Name="itemtypeusetype" Hash="1457290076" />
|
||||
<Command Name="itemtypeorderprice" Hash="1622827053" />
|
||||
<Command Name="itemtyperiskmult" Hash="298256682" />
|
||||
<Command Name="itemtypeenabled" Hash="1424486221" />
|
||||
<Command Name="jobaddplayerbl" Hash="3037502154" />
|
||||
<Command Name="takejob" Hash="2690682686" />
|
||||
<Command Name="startwork" Hash="307130076" />
|
||||
<Command Name="setstars" Hash="3388953278" />
|
||||
<Command Name="stopwork" Hash="765483006" />
|
||||
<Command Name="health" Hash="3470402323" />
|
||||
<Command Name="startjob" Hash="4288994387" />
|
||||
<Command Name="stopjob" Hash="2761630709" />
|
||||
<Command Name="uniform" Hash="4130109879" />
|
||||
<Command Name="passenger" Hash="1005578461" />
|
||||
<Command Name="department" Hash="3441287562" />
|
||||
<Command Name="d" Hash="2564639436" />
|
||||
<Command Name="delveh" Hash="152714755" />
|
||||
<Command Name="fare" Hash="1456298103" />
|
||||
<Command Name="detain" Hash="3221757631" />
|
||||
<Command Name="search" Hash="3035683751" />
|
||||
<Command Name="startroute" Hash="1616395680" />
|
||||
<Command Name="jobbl" Hash="779699388" />
|
||||
<Command Name="addjob" Hash="2919626095" />
|
||||
<Command Name="deljobloc" Hash="1739246254" />
|
||||
<Command Name="addjobroute" Hash="2656138748" />
|
||||
<Command Name="jobtoggle" Hash="2928606311" />
|
||||
<Command Name="jobroutename" Hash="2017870989" />
|
||||
<Command Name="jobroutepay" Hash="1116013836" />
|
||||
<Command Name="jobroutelocnextmsg" Hash="1672851411" />
|
||||
<Command Name="jobroutevehcolours" Hash="1488821428" />
|
||||
<Command Name="jobroutedelays" Hash="1645912336" />
|
||||
<Command Name="jobpickup" Hash="3405408273" />
|
||||
<Command Name="jobwl" Hash="432841384" />
|
||||
<Command Name="jobblacklist" Hash="1922085790" />
|
||||
<Command Name="freeze" Hash="1183970330" />
|
||||
<Command Name="radiostations" Hash="3940254175" />
|
||||
<Command Name="jobaddplayerwl" Hash="2193194206" />
|
||||
<Command Name="jobdelplayerbl" Hash="2420244398" />
|
||||
<Command Name="jobreloadall" Hash="2284567617" />
|
||||
<Command Name="jobinfo" Hash="1110948668" />
|
||||
<Command Name="vehpublic" Hash="3482619154" />
|
||||
<Command Name="joblocinfo" Hash="3048238516" />
|
||||
<Command Name="unbindkey" Hash="1293547552" />
|
||||
<Command Name="keybinds" Hash="839428196" />
|
||||
<Command Name="lang" Hash="822707298" />
|
||||
<Command Name="language" Hash="3571151285" />
|
||||
<Command Name="idea" Hash="176933445" />
|
||||
<Command Name="bug" Hash="898416404" />
|
||||
<Command Name="yes" Hash="1978086825" />
|
||||
<Command Name="no" Hash="1739204639" />
|
||||
<Command Name="stuck" Hash="1518825670" />
|
||||
<Command Name="radiostation" Hash="28088017" />
|
||||
<Command Name="radiovolume" Hash="1214320345" />
|
||||
<Command Name="unmute" Hash="567433405" />
|
||||
<Command Name="infiniterun" Hash="872561642" />
|
||||
<Command Name="unfreeze" Hash="2907185820" />
|
||||
<Command Name="goto" Hash="1382046848" />
|
||||
<Command Name="gethere" Hash="390671735" />
|
||||
<Command Name="vehinfo" Hash="157447745" />
|
||||
<Command Name="gotopos" Hash="978357886" />
|
||||
<Command Name="lastveh" Hash="1130556078" />
|
||||
<Command Name="gotohouse" Hash="2545077731" />
|
||||
<Command Name="gotojob" Hash="1095862314" />
|
||||
<Command Name="gotoloc" Hash="853263374" />
|
||||
<Command Name="fr" Hash="3430272718" />
|
||||
<Command Name="ba" Hash="749160980" />
|
||||
<Command Name="lt" Hash="3757671281" />
|
||||
<Command Name="vehrentprice" Hash="1386181794" />
|
||||
<Command Name="dn" Hash="3930255363" />
|
||||
<Command Name="int" Hash="340908721" />
|
||||
<Command Name="staffflags" Hash="3021358894" />
|
||||
<Command Name="getstaffflags" Hash="3580006325" />
|
||||
<Command Name="nonrpname" Hash="1622484520" />
|
||||
<Command Name="setskin" Hash="934967852" />
|
||||
<Command Name="setname" Hash="1809869876" />
|
||||
<Command Name="setaccent" Hash="2041102865" />
|
||||
<Command Name="plrinfo" Hash="1743625616" />
|
||||
<Command Name="getplrhouse" Hash="2410855153" />
|
||||
<Command Name="getplrbiz" Hash="2269973052" />
|
||||
<Command Name="ip" Hash="2783163181" />
|
||||
<Command Name="plrsync" Hash="2152683965" />
|
||||
<Command Name="switchchar" Hash="925728418" />
|
||||
<Command Name="usechar" Hash="1390554915" />
|
||||
<Command Name="addtrig" Hash="2612767502" />
|
||||
<Command Name="deltrig" Hash="850336973" />
|
||||
<Command Name="deltrigcond" Hash="2326689261" />
|
||||
<Command Name="deltrigresp" Hash="2318039200" />
|
||||
<Command Name="triggers" Hash="248416589" />
|
||||
<Command Name="trigcond" Hash="3919528790" />
|
||||
<Command Name="trigtoggle" Hash="3621806868" />
|
||||
<Command Name="tempveh" Hash="3698377893" />
|
||||
<Command Name="oldcar" Hash="681236923" />
|
||||
<Command Name="lastcar" Hash="3229726539" />
|
||||
<Command Name="unlock" Hash="1793372399" />
|
||||
<Command Name="vehrespawnpublic" Hash="3922930954" />
|
||||
<Command Name="vehowner" Hash="997636202" />
|
||||
<Command Name="vehclan" Hash="1562240026" />
|
||||
<Command Name="vehbiz" Hash="2353348396" />
|
||||
<Command Name="vehrank" Hash="1251127283" />
|
||||
<Command Name="vehpark" Hash="116144677" />
|
||||
<Command Name="vehrespawnall" Hash="4068906615" />
|
||||
<Command Name="vehrespawnjob" Hash="843450194" />
|
||||
<Command Name="vehrespawnplr" Hash="359490131" />
|
||||
<Command Name="vehrespawnbiz" Hash="2036558138" />
|
||||
<Command Name="vehrespawn" Hash="2026210653" />
|
||||
<Command Name="carrespawnall" Hash="351347854" />
|
||||
<Command Name="carrespawnempty" Hash="3796941249" />
|
||||
<Command Name="carrespawnjob" Hash="3560027563" />
|
||||
<Command Name="carrespawnplr" Hash="4078620842" />
|
||||
<Command Name="carrespawnpublic" Hash="1263815958" />
|
||||
<Command Name="carrespawn" Hash="164999966" />
|
||||
<Command Name="carreloadall" Hash="1616522302" />
|
||||
<Command Name="vehrent" Hash="3230862042" />
|
||||
<Command Name="vehstoprent" Hash="3033622543" />
|
||||
<Command Name="vehbuy" Hash="4080743371" />
|
||||
<Command Name="vehcolour" Hash="249087681" />
|
||||
<Command Name="vehlivery" Hash="2590964950" />
|
||||
<Command Name="vehrepair" Hash="2059704110" />
|
||||
</Commands>
|
||||
545
documentation/mafiac/server/Defines.xml
Normal file
@@ -0,0 +1,545 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Defines>
|
||||
<Define Name="KEYSTATE_UP" Value="0" />
|
||||
<Define Name="KEYSTATE_DOWN" Value="1" />
|
||||
<Define Name="KEYSTATE_BOTH" Value="2" />
|
||||
<Define Name="SDL_SCANCODE_UNKNOWN" Value="0" />
|
||||
<Define Name="SDL_SCANCODE_A" Value="4" />
|
||||
<Define Name="SDL_SCANCODE_B" Value="5" />
|
||||
<Define Name="SDL_SCANCODE_C" Value="6" />
|
||||
<Define Name="SDL_SCANCODE_D" Value="7" />
|
||||
<Define Name="SDL_SCANCODE_E" Value="8" />
|
||||
<Define Name="SDL_SCANCODE_F" Value="9" />
|
||||
<Define Name="SDL_SCANCODE_G" Value="10" />
|
||||
<Define Name="SDL_SCANCODE_H" Value="11" />
|
||||
<Define Name="SDL_SCANCODE_I" Value="12" />
|
||||
<Define Name="SDL_SCANCODE_J" Value="13" />
|
||||
<Define Name="SDL_SCANCODE_K" Value="14" />
|
||||
<Define Name="SDL_SCANCODE_L" Value="15" />
|
||||
<Define Name="SDL_SCANCODE_M" Value="16" />
|
||||
<Define Name="SDL_SCANCODE_N" Value="17" />
|
||||
<Define Name="SDL_SCANCODE_O" Value="18" />
|
||||
<Define Name="SDL_SCANCODE_P" Value="19" />
|
||||
<Define Name="SDL_SCANCODE_Q" Value="20" />
|
||||
<Define Name="SDL_SCANCODE_R" Value="21" />
|
||||
<Define Name="SDL_SCANCODE_S" Value="22" />
|
||||
<Define Name="SDL_SCANCODE_T" Value="23" />
|
||||
<Define Name="SDL_SCANCODE_U" Value="24" />
|
||||
<Define Name="SDL_SCANCODE_V" Value="25" />
|
||||
<Define Name="SDL_SCANCODE_W" Value="26" />
|
||||
<Define Name="SDL_SCANCODE_X" Value="27" />
|
||||
<Define Name="SDL_SCANCODE_Y" Value="28" />
|
||||
<Define Name="SDL_SCANCODE_Z" Value="29" />
|
||||
<Define Name="SDL_SCANCODE_1" Value="30" />
|
||||
<Define Name="SDL_SCANCODE_2" Value="31" />
|
||||
<Define Name="SDL_SCANCODE_3" Value="32" />
|
||||
<Define Name="SDL_SCANCODE_4" Value="33" />
|
||||
<Define Name="SDL_SCANCODE_5" Value="34" />
|
||||
<Define Name="SDL_SCANCODE_6" Value="35" />
|
||||
<Define Name="SDL_SCANCODE_7" Value="36" />
|
||||
<Define Name="SDL_SCANCODE_8" Value="37" />
|
||||
<Define Name="SDL_SCANCODE_9" Value="38" />
|
||||
<Define Name="SDL_SCANCODE_0" Value="39" />
|
||||
<Define Name="SDL_SCANCODE_RETURN" Value="40" />
|
||||
<Define Name="SDL_SCANCODE_ESCAPE" Value="41" />
|
||||
<Define Name="SDL_SCANCODE_BACKSPACE" Value="42" />
|
||||
<Define Name="SDL_SCANCODE_TAB" Value="43" />
|
||||
<Define Name="SDL_SCANCODE_SPACE" Value="44" />
|
||||
<Define Name="SDL_SCANCODE_MINUS" Value="45" />
|
||||
<Define Name="SDL_SCANCODE_EQUALS" Value="46" />
|
||||
<Define Name="SDL_SCANCODE_LEFTBRACKET" Value="47" />
|
||||
<Define Name="SDL_SCANCODE_RIGHTBRACKET" Value="48" />
|
||||
<Define Name="SDL_SCANCODE_BACKSLASH" Value="49" />
|
||||
<Define Name="SDL_SCANCODE_NONUSHASH" Value="50" />
|
||||
<Define Name="SDL_SCANCODE_SEMICOLON" Value="51" />
|
||||
<Define Name="SDL_SCANCODE_APOSTROPHE" Value="52" />
|
||||
<Define Name="SDL_SCANCODE_GRAVE" Value="53" />
|
||||
<Define Name="SDL_SCANCODE_COMMA" Value="54" />
|
||||
<Define Name="SDL_SCANCODE_PERIOD" Value="55" />
|
||||
<Define Name="SDL_SCANCODE_SLASH" Value="56" />
|
||||
<Define Name="SDL_SCANCODE_CAPSLOCK" Value="57" />
|
||||
<Define Name="SDL_SCANCODE_F1" Value="58" />
|
||||
<Define Name="SDL_SCANCODE_F2" Value="59" />
|
||||
<Define Name="SDL_SCANCODE_F3" Value="60" />
|
||||
<Define Name="SDL_SCANCODE_F4" Value="61" />
|
||||
<Define Name="SDL_SCANCODE_F5" Value="62" />
|
||||
<Define Name="SDL_SCANCODE_F6" Value="63" />
|
||||
<Define Name="SDL_SCANCODE_F7" Value="64" />
|
||||
<Define Name="SDL_SCANCODE_F8" Value="65" />
|
||||
<Define Name="SDL_SCANCODE_F9" Value="66" />
|
||||
<Define Name="SDL_SCANCODE_F10" Value="67" />
|
||||
<Define Name="SDL_SCANCODE_F11" Value="68" />
|
||||
<Define Name="SDL_SCANCODE_F12" Value="69" />
|
||||
<Define Name="SDL_SCANCODE_PRINTSCREEN" Value="70" />
|
||||
<Define Name="SDL_SCANCODE_SCROLLLOCK" Value="71" />
|
||||
<Define Name="SDL_SCANCODE_PAUSE" Value="72" />
|
||||
<Define Name="SDL_SCANCODE_INSERT" Value="73" />
|
||||
<Define Name="SDL_SCANCODE_HOME" Value="74" />
|
||||
<Define Name="SDL_SCANCODE_PAGEUP" Value="75" />
|
||||
<Define Name="SDL_SCANCODE_DELETE" Value="76" />
|
||||
<Define Name="SDL_SCANCODE_END" Value="77" />
|
||||
<Define Name="SDL_SCANCODE_PAGEDOWN" Value="78" />
|
||||
<Define Name="SDL_SCANCODE_RIGHT" Value="79" />
|
||||
<Define Name="SDL_SCANCODE_LEFT" Value="80" />
|
||||
<Define Name="SDL_SCANCODE_DOWN" Value="81" />
|
||||
<Define Name="SDL_SCANCODE_UP" Value="82" />
|
||||
<Define Name="SDL_SCANCODE_NUMLOCKCLEAR" Value="83" />
|
||||
<Define Name="SDL_SCANCODE_KP_DIVIDE" Value="84" />
|
||||
<Define Name="SDL_SCANCODE_KP_MULTIPLY" Value="85" />
|
||||
<Define Name="SDL_SCANCODE_KP_MINUS" Value="86" />
|
||||
<Define Name="SDL_SCANCODE_KP_PLUS" Value="87" />
|
||||
<Define Name="SDL_SCANCODE_KP_ENTER" Value="88" />
|
||||
<Define Name="SDL_SCANCODE_KP_1" Value="89" />
|
||||
<Define Name="SDL_SCANCODE_KP_2" Value="90" />
|
||||
<Define Name="SDL_SCANCODE_KP_3" Value="91" />
|
||||
<Define Name="SDL_SCANCODE_KP_4" Value="92" />
|
||||
<Define Name="SDL_SCANCODE_KP_5" Value="93" />
|
||||
<Define Name="SDL_SCANCODE_KP_6" Value="94" />
|
||||
<Define Name="SDL_SCANCODE_KP_7" Value="95" />
|
||||
<Define Name="SDL_SCANCODE_KP_8" Value="96" />
|
||||
<Define Name="SDL_SCANCODE_KP_9" Value="97" />
|
||||
<Define Name="SDL_SCANCODE_KP_0" Value="98" />
|
||||
<Define Name="SDL_SCANCODE_KP_PERIOD" Value="99" />
|
||||
<Define Name="SDL_SCANCODE_NONUSBACKSLASH" Value="100" />
|
||||
<Define Name="SDL_SCANCODE_APPLICATION" Value="101" />
|
||||
<Define Name="SDL_SCANCODE_POWER" Value="102" />
|
||||
<Define Name="SDL_SCANCODE_KP_EQUALS" Value="103" />
|
||||
<Define Name="SDL_SCANCODE_F13" Value="104" />
|
||||
<Define Name="SDL_SCANCODE_F14" Value="105" />
|
||||
<Define Name="SDL_SCANCODE_F15" Value="106" />
|
||||
<Define Name="SDL_SCANCODE_F16" Value="107" />
|
||||
<Define Name="SDL_SCANCODE_F17" Value="108" />
|
||||
<Define Name="SDL_SCANCODE_F18" Value="109" />
|
||||
<Define Name="SDL_SCANCODE_F19" Value="110" />
|
||||
<Define Name="SDL_SCANCODE_F20" Value="111" />
|
||||
<Define Name="SDL_SCANCODE_F21" Value="112" />
|
||||
<Define Name="SDL_SCANCODE_F22" Value="113" />
|
||||
<Define Name="SDL_SCANCODE_F23" Value="114" />
|
||||
<Define Name="SDL_SCANCODE_F24" Value="115" />
|
||||
<Define Name="SDL_SCANCODE_EXECUTE" Value="116" />
|
||||
<Define Name="SDL_SCANCODE_HELP" Value="117" />
|
||||
<Define Name="SDL_SCANCODE_MENU" Value="118" />
|
||||
<Define Name="SDL_SCANCODE_SELECT" Value="119" />
|
||||
<Define Name="SDL_SCANCODE_STOP" Value="120" />
|
||||
<Define Name="SDL_SCANCODE_AGAIN" Value="121" />
|
||||
<Define Name="SDL_SCANCODE_UNDO" Value="122" />
|
||||
<Define Name="SDL_SCANCODE_CUT" Value="123" />
|
||||
<Define Name="SDL_SCANCODE_COPY" Value="124" />
|
||||
<Define Name="SDL_SCANCODE_PASTE" Value="125" />
|
||||
<Define Name="SDL_SCANCODE_FIND" Value="126" />
|
||||
<Define Name="SDL_SCANCODE_MUTE" Value="127" />
|
||||
<Define Name="SDL_SCANCODE_VOLUMEUP" Value="128" />
|
||||
<Define Name="SDL_SCANCODE_VOLUMEDOWN" Value="129" />
|
||||
<Define Name="SDL_SCANCODE_KP_COMMA" Value="133" />
|
||||
<Define Name="SDL_SCANCODE_KP_EQUALSAS400" Value="134" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL1" Value="135" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL2" Value="136" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL3" Value="137" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL4" Value="138" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL5" Value="139" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL6" Value="140" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL7" Value="141" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL8" Value="142" />
|
||||
<Define Name="SDL_SCANCODE_INTERNATIONAL9" Value="143" />
|
||||
<Define Name="SDL_SCANCODE_LANG1" Value="144" />
|
||||
<Define Name="SDL_SCANCODE_LANG2" Value="145" />
|
||||
<Define Name="SDL_SCANCODE_LANG3" Value="146" />
|
||||
<Define Name="SDL_SCANCODE_LANG4" Value="147" />
|
||||
<Define Name="SDL_SCANCODE_LANG5" Value="148" />
|
||||
<Define Name="SDL_SCANCODE_LANG6" Value="149" />
|
||||
<Define Name="SDL_SCANCODE_LANG7" Value="150" />
|
||||
<Define Name="SDL_SCANCODE_LANG8" Value="151" />
|
||||
<Define Name="SDL_SCANCODE_LANG9" Value="152" />
|
||||
<Define Name="SDL_SCANCODE_ALTERASE" Value="153" />
|
||||
<Define Name="SDL_SCANCODE_SYSREQ" Value="154" />
|
||||
<Define Name="SDL_SCANCODE_CANCEL" Value="155" />
|
||||
<Define Name="SDL_SCANCODE_CLEAR" Value="156" />
|
||||
<Define Name="SDL_SCANCODE_PRIOR" Value="157" />
|
||||
<Define Name="SDL_SCANCODE_RETURN2" Value="158" />
|
||||
<Define Name="SDL_SCANCODE_SEPARATOR" Value="159" />
|
||||
<Define Name="SDL_SCANCODE_OUT" Value="160" />
|
||||
<Define Name="SDL_SCANCODE_OPER" Value="161" />
|
||||
<Define Name="SDL_SCANCODE_CLEARAGAIN" Value="162" />
|
||||
<Define Name="SDL_SCANCODE_CRSEL" Value="163" />
|
||||
<Define Name="SDL_SCANCODE_EXSEL" Value="164" />
|
||||
<Define Name="SDL_SCANCODE_KP_00" Value="176" />
|
||||
<Define Name="SDL_SCANCODE_KP_000" Value="177" />
|
||||
<Define Name="SDL_SCANCODE_THOUSANDSSEPARATOR" Value="178" />
|
||||
<Define Name="SDL_SCANCODE_DECIMALSEPARATOR" Value="179" />
|
||||
<Define Name="SDL_SCANCODE_CURRENCYUNIT" Value="180" />
|
||||
<Define Name="SDL_SCANCODE_CURRENCYSUBUNIT" Value="181" />
|
||||
<Define Name="SDL_SCANCODE_KP_LEFTPAREN" Value="182" />
|
||||
<Define Name="SDL_SCANCODE_KP_RIGHTPAREN" Value="183" />
|
||||
<Define Name="SDL_SCANCODE_KP_LEFTBRACE" Value="184" />
|
||||
<Define Name="SDL_SCANCODE_KP_RIGHTBRACE" Value="185" />
|
||||
<Define Name="SDL_SCANCODE_KP_TAB" Value="186" />
|
||||
<Define Name="SDL_SCANCODE_KP_BACKSPACE" Value="187" />
|
||||
<Define Name="SDL_SCANCODE_KP_A" Value="188" />
|
||||
<Define Name="SDL_SCANCODE_KP_B" Value="189" />
|
||||
<Define Name="SDL_SCANCODE_KP_C" Value="190" />
|
||||
<Define Name="SDL_SCANCODE_KP_D" Value="191" />
|
||||
<Define Name="SDL_SCANCODE_KP_E" Value="192" />
|
||||
<Define Name="SDL_SCANCODE_KP_F" Value="193" />
|
||||
<Define Name="SDL_SCANCODE_KP_XOR" Value="194" />
|
||||
<Define Name="SDL_SCANCODE_KP_POWER" Value="195" />
|
||||
<Define Name="SDL_SCANCODE_KP_PERCENT" Value="196" />
|
||||
<Define Name="SDL_SCANCODE_KP_LESS" Value="197" />
|
||||
<Define Name="SDL_SCANCODE_KP_GREATER" Value="198" />
|
||||
<Define Name="SDL_SCANCODE_KP_AMPERSAND" Value="199" />
|
||||
<Define Name="SDL_SCANCODE_KP_DBLAMPERSAND" Value="200" />
|
||||
<Define Name="SDL_SCANCODE_KP_VERTICALBAR" Value="201" />
|
||||
<Define Name="SDL_SCANCODE_KP_DBLVERTICALBAR" Value="202" />
|
||||
<Define Name="SDL_SCANCODE_KP_COLON" Value="203" />
|
||||
<Define Name="SDL_SCANCODE_KP_HASH" Value="204" />
|
||||
<Define Name="SDL_SCANCODE_KP_SPACE" Value="205" />
|
||||
<Define Name="SDL_SCANCODE_KP_AT" Value="206" />
|
||||
<Define Name="SDL_SCANCODE_KP_EXCLAM" Value="207" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMSTORE" Value="208" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMRECALL" Value="209" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMCLEAR" Value="210" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMADD" Value="211" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMSUBTRACT" Value="212" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMMULTIPLY" Value="213" />
|
||||
<Define Name="SDL_SCANCODE_KP_MEMDIVIDE" Value="214" />
|
||||
<Define Name="SDL_SCANCODE_KP_PLUSMINUS" Value="215" />
|
||||
<Define Name="SDL_SCANCODE_KP_CLEAR" Value="216" />
|
||||
<Define Name="SDL_SCANCODE_KP_CLEARENTRY" Value="217" />
|
||||
<Define Name="SDL_SCANCODE_KP_BINARY" Value="218" />
|
||||
<Define Name="SDL_SCANCODE_KP_OCTAL" Value="219" />
|
||||
<Define Name="SDL_SCANCODE_KP_DECIMAL" Value="220" />
|
||||
<Define Name="SDL_SCANCODE_KP_HEXADECIMAL" Value="221" />
|
||||
<Define Name="SDL_SCANCODE_LCTRL" Value="224" />
|
||||
<Define Name="SDL_SCANCODE_LSHIFT" Value="225" />
|
||||
<Define Name="SDL_SCANCODE_LALT" Value="226" />
|
||||
<Define Name="SDL_SCANCODE_LGUI" Value="227" />
|
||||
<Define Name="SDL_SCANCODE_RCTRL" Value="228" />
|
||||
<Define Name="SDL_SCANCODE_RSHIFT" Value="229" />
|
||||
<Define Name="SDL_SCANCODE_RALT" Value="230" />
|
||||
<Define Name="SDL_SCANCODE_RGUI" Value="231" />
|
||||
<Define Name="SDL_SCANCODE_MODE" Value="257" />
|
||||
<Define Name="SDL_SCANCODE_AUDIONEXT" Value="258" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOPREV" Value="259" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOSTOP" Value="260" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOPLAY" Value="261" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOMUTE" Value="262" />
|
||||
<Define Name="SDL_SCANCODE_MEDIASELECT" Value="263" />
|
||||
<Define Name="SDL_SCANCODE_WWW" Value="264" />
|
||||
<Define Name="SDL_SCANCODE_MAIL" Value="265" />
|
||||
<Define Name="SDL_SCANCODE_CALCULATOR" Value="266" />
|
||||
<Define Name="SDL_SCANCODE_COMPUTER" Value="267" />
|
||||
<Define Name="SDL_SCANCODE_AC_SEARCH" Value="268" />
|
||||
<Define Name="SDL_SCANCODE_AC_HOME" Value="269" />
|
||||
<Define Name="SDL_SCANCODE_AC_BACK" Value="270" />
|
||||
<Define Name="SDL_SCANCODE_AC_FORWARD" Value="271" />
|
||||
<Define Name="SDL_SCANCODE_AC_STOP" Value="272" />
|
||||
<Define Name="SDL_SCANCODE_AC_REFRESH" Value="273" />
|
||||
<Define Name="SDL_SCANCODE_AC_BOOKMARKS" Value="274" />
|
||||
<Define Name="SDL_SCANCODE_BRIGHTNESSDOWN" Value="275" />
|
||||
<Define Name="SDL_SCANCODE_BRIGHTNESSUP" Value="276" />
|
||||
<Define Name="SDL_SCANCODE_DISPLAYSWITCH" Value="277" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMTOGGLE" Value="278" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMDOWN" Value="279" />
|
||||
<Define Name="SDL_SCANCODE_KBDILLUMUP" Value="280" />
|
||||
<Define Name="SDL_SCANCODE_EJECT" Value="281" />
|
||||
<Define Name="SDL_SCANCODE_SLEEP" Value="282" />
|
||||
<Define Name="SDL_SCANCODE_APP1" Value="283" />
|
||||
<Define Name="SDL_SCANCODE_APP2" Value="284" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOREWIND" Value="285" />
|
||||
<Define Name="SDL_SCANCODE_AUDIOFASTFORWARD" Value="286" />
|
||||
<Define Name="SDL_NUM_SCANCODES" Value="512" />
|
||||
<Define Name="SDLK_UNKNOWN" Value="0" />
|
||||
<Define Name="SDLK_RETURN" Value="13" />
|
||||
<Define Name="SDLK_ESCAPE" Value="27" />
|
||||
<Define Name="SDLK_BACKSPACE" Value="8" />
|
||||
<Define Name="SDLK_TAB" Value="9" />
|
||||
<Define Name="SDLK_SPACE" Value="32" />
|
||||
<Define Name="SDLK_EXCLAIM" Value="33" />
|
||||
<Define Name="SDLK_QUOTEDBL" Value="34" />
|
||||
<Define Name="SDLK_HASH" Value="35" />
|
||||
<Define Name="SDLK_PERCENT" Value="37" />
|
||||
<Define Name="SDLK_DOLLAR" Value="36" />
|
||||
<Define Name="SDLK_AMPERSAND" Value="38" />
|
||||
<Define Name="SDLK_QUOTE" Value="39" />
|
||||
<Define Name="SDLK_LEFTPAREN" Value="40" />
|
||||
<Define Name="SDLK_RIGHTPAREN" Value="41" />
|
||||
<Define Name="SDLK_ASTERISK" Value="42" />
|
||||
<Define Name="SDLK_PLUS" Value="43" />
|
||||
<Define Name="SDLK_COMMA" Value="44" />
|
||||
<Define Name="SDLK_MINUS" Value="45" />
|
||||
<Define Name="SDLK_PERIOD" Value="46" />
|
||||
<Define Name="SDLK_SLASH" Value="47" />
|
||||
<Define Name="SDLK_0" Value="48" />
|
||||
<Define Name="SDLK_1" Value="49" />
|
||||
<Define Name="SDLK_2" Value="50" />
|
||||
<Define Name="SDLK_3" Value="51" />
|
||||
<Define Name="SDLK_4" Value="52" />
|
||||
<Define Name="SDLK_5" Value="53" />
|
||||
<Define Name="SDLK_6" Value="54" />
|
||||
<Define Name="SDLK_7" Value="55" />
|
||||
<Define Name="SDLK_8" Value="56" />
|
||||
<Define Name="SDLK_9" Value="57" />
|
||||
<Define Name="SDLK_COLON" Value="58" />
|
||||
<Define Name="SDLK_SEMICOLON" Value="59" />
|
||||
<Define Name="SDLK_LESS" Value="60" />
|
||||
<Define Name="SDLK_EQUALS" Value="61" />
|
||||
<Define Name="SDLK_GREATER" Value="62" />
|
||||
<Define Name="SDLK_QUESTION" Value="63" />
|
||||
<Define Name="SDLK_AT" Value="64" />
|
||||
<Define Name="SDLK_LEFTBRACKET" Value="91" />
|
||||
<Define Name="SDLK_BACKSLASH" Value="92" />
|
||||
<Define Name="SDLK_RIGHTBRACKET" Value="93" />
|
||||
<Define Name="SDLK_CARET" Value="94" />
|
||||
<Define Name="SDLK_UNDERSCORE" Value="95" />
|
||||
<Define Name="SDLK_BACKQUOTE" Value="96" />
|
||||
<Define Name="SDLK_a" Value="97" />
|
||||
<Define Name="SDLK_b" Value="98" />
|
||||
<Define Name="SDLK_c" Value="99" />
|
||||
<Define Name="SDLK_d" Value="100" />
|
||||
<Define Name="SDLK_e" Value="101" />
|
||||
<Define Name="SDLK_f" Value="102" />
|
||||
<Define Name="SDLK_g" Value="103" />
|
||||
<Define Name="SDLK_h" Value="104" />
|
||||
<Define Name="SDLK_i" Value="105" />
|
||||
<Define Name="SDLK_j" Value="106" />
|
||||
<Define Name="SDLK_k" Value="107" />
|
||||
<Define Name="SDLK_l" Value="108" />
|
||||
<Define Name="SDLK_m" Value="109" />
|
||||
<Define Name="SDLK_n" Value="110" />
|
||||
<Define Name="SDLK_o" Value="111" />
|
||||
<Define Name="SDLK_p" Value="112" />
|
||||
<Define Name="SDLK_q" Value="113" />
|
||||
<Define Name="SDLK_r" Value="114" />
|
||||
<Define Name="SDLK_s" Value="115" />
|
||||
<Define Name="SDLK_t" Value="116" />
|
||||
<Define Name="SDLK_u" Value="117" />
|
||||
<Define Name="SDLK_v" Value="118" />
|
||||
<Define Name="SDLK_w" Value="119" />
|
||||
<Define Name="SDLK_x" Value="120" />
|
||||
<Define Name="SDLK_y" Value="121" />
|
||||
<Define Name="SDLK_z" Value="122" />
|
||||
<Define Name="SDLK_CAPSLOCK" Value="1073741881" />
|
||||
<Define Name="SDLK_F1" Value="1073741882" />
|
||||
<Define Name="SDLK_F2" Value="1073741883" />
|
||||
<Define Name="SDLK_F3" Value="1073741884" />
|
||||
<Define Name="SDLK_F4" Value="1073741885" />
|
||||
<Define Name="SDLK_F5" Value="1073741886" />
|
||||
<Define Name="SDLK_F6" Value="1073741887" />
|
||||
<Define Name="SDLK_F7" Value="1073741888" />
|
||||
<Define Name="SDLK_F8" Value="1073741889" />
|
||||
<Define Name="SDLK_F9" Value="1073741890" />
|
||||
<Define Name="SDLK_F10" Value="1073741891" />
|
||||
<Define Name="SDLK_F11" Value="1073741892" />
|
||||
<Define Name="SDLK_F12" Value="1073741893" />
|
||||
<Define Name="SDLK_PRINTSCREEN" Value="1073741894" />
|
||||
<Define Name="SDLK_SCROLLLOCK" Value="1073741895" />
|
||||
<Define Name="SDLK_PAUSE" Value="1073741896" />
|
||||
<Define Name="SDLK_INSERT" Value="1073741897" />
|
||||
<Define Name="SDLK_HOME" Value="1073741898" />
|
||||
<Define Name="SDLK_PAGEUP" Value="1073741899" />
|
||||
<Define Name="SDLK_DELETE" Value="127" />
|
||||
<Define Name="SDLK_END" Value="1073741901" />
|
||||
<Define Name="SDLK_PAGEDOWN" Value="1073741902" />
|
||||
<Define Name="SDLK_RIGHT" Value="1073741903" />
|
||||
<Define Name="SDLK_LEFT" Value="1073741904" />
|
||||
<Define Name="SDLK_DOWN" Value="1073741905" />
|
||||
<Define Name="SDLK_UP" Value="1073741906" />
|
||||
<Define Name="SDLK_NUMLOCKCLEAR" Value="1073741907" />
|
||||
<Define Name="SDLK_KP_DIVIDE" Value="1073741908" />
|
||||
<Define Name="SDLK_KP_MULTIPLY" Value="1073741909" />
|
||||
<Define Name="SDLK_KP_MINUS" Value="1073741910" />
|
||||
<Define Name="SDLK_KP_PLUS" Value="1073741911" />
|
||||
<Define Name="SDLK_KP_ENTER" Value="1073741912" />
|
||||
<Define Name="SDLK_KP_1" Value="1073741913" />
|
||||
<Define Name="SDLK_KP_2" Value="1073741914" />
|
||||
<Define Name="SDLK_KP_3" Value="1073741915" />
|
||||
<Define Name="SDLK_KP_4" Value="1073741916" />
|
||||
<Define Name="SDLK_KP_5" Value="1073741917" />
|
||||
<Define Name="SDLK_KP_6" Value="1073741918" />
|
||||
<Define Name="SDLK_KP_7" Value="1073741919" />
|
||||
<Define Name="SDLK_KP_8" Value="1073741920" />
|
||||
<Define Name="SDLK_KP_9" Value="1073741921" />
|
||||
<Define Name="SDLK_KP_0" Value="1073741922" />
|
||||
<Define Name="SDLK_KP_PERIOD" Value="1073741923" />
|
||||
<Define Name="SDLK_APPLICATION" Value="1073741925" />
|
||||
<Define Name="SDLK_POWER" Value="1073741926" />
|
||||
<Define Name="SDLK_KP_EQUALS" Value="1073741927" />
|
||||
<Define Name="SDLK_F13" Value="1073741928" />
|
||||
<Define Name="SDLK_F14" Value="1073741929" />
|
||||
<Define Name="SDLK_F15" Value="1073741930" />
|
||||
<Define Name="SDLK_F16" Value="1073741931" />
|
||||
<Define Name="SDLK_F17" Value="1073741932" />
|
||||
<Define Name="SDLK_F18" Value="1073741933" />
|
||||
<Define Name="SDLK_F19" Value="1073741934" />
|
||||
<Define Name="SDLK_F20" Value="1073741935" />
|
||||
<Define Name="SDLK_F21" Value="1073741936" />
|
||||
<Define Name="SDLK_F22" Value="1073741937" />
|
||||
<Define Name="SDLK_F23" Value="1073741938" />
|
||||
<Define Name="SDLK_F24" Value="1073741939" />
|
||||
<Define Name="SDLK_EXECUTE" Value="1073741940" />
|
||||
<Define Name="SDLK_HELP" Value="1073741941" />
|
||||
<Define Name="SDLK_MENU" Value="1073741942" />
|
||||
<Define Name="SDLK_SELECT" Value="1073741943" />
|
||||
<Define Name="SDLK_STOP" Value="1073741944" />
|
||||
<Define Name="SDLK_AGAIN" Value="1073741945" />
|
||||
<Define Name="SDLK_UNDO" Value="1073741946" />
|
||||
<Define Name="SDLK_CUT" Value="1073741947" />
|
||||
<Define Name="SDLK_COPY" Value="1073741948" />
|
||||
<Define Name="SDLK_PASTE" Value="1073741949" />
|
||||
<Define Name="SDLK_FIND" Value="1073741950" />
|
||||
<Define Name="SDLK_MUTE" Value="1073741951" />
|
||||
<Define Name="SDLK_VOLUMEUP" Value="1073741952" />
|
||||
<Define Name="SDLK_VOLUMEDOWN" Value="1073741953" />
|
||||
<Define Name="SDLK_KP_COMMA" Value="1073741957" />
|
||||
<Define Name="SDLK_KP_EQUALSAS400" Value="1073741958" />
|
||||
<Define Name="SDLK_ALTERASE" Value="1073741977" />
|
||||
<Define Name="SDLK_SYSREQ" Value="1073741978" />
|
||||
<Define Name="SDLK_CANCEL" Value="1073741979" />
|
||||
<Define Name="SDLK_CLEAR" Value="1073741980" />
|
||||
<Define Name="SDLK_PRIOR" Value="1073741981" />
|
||||
<Define Name="SDLK_RETURN2" Value="1073741982" />
|
||||
<Define Name="SDLK_SEPARATOR" Value="1073741983" />
|
||||
<Define Name="SDLK_OUT" Value="1073741984" />
|
||||
<Define Name="SDLK_OPER" Value="1073741985" />
|
||||
<Define Name="SDLK_CLEARAGAIN" Value="1073741986" />
|
||||
<Define Name="SDLK_CRSEL" Value="1073741987" />
|
||||
<Define Name="SDLK_EXSEL" Value="1073741988" />
|
||||
<Define Name="SDLK_KP_00" Value="1073742000" />
|
||||
<Define Name="SDLK_KP_000" Value="1073742001" />
|
||||
<Define Name="SDLK_THOUSANDSSEPARATOR" Value="1073742002" />
|
||||
<Define Name="SDLK_DECIMALSEPARATOR" Value="1073742003" />
|
||||
<Define Name="SDLK_CURRENCYUNIT" Value="1073742004" />
|
||||
<Define Name="SDLK_CURRENCYSUBUNIT" Value="1073742005" />
|
||||
<Define Name="SDLK_KP_LEFTPAREN" Value="1073742006" />
|
||||
<Define Name="SDLK_KP_RIGHTPAREN" Value="1073742007" />
|
||||
<Define Name="SDLK_KP_LEFTBRACE" Value="1073742008" />
|
||||
<Define Name="SDLK_KP_RIGHTBRACE" Value="1073742009" />
|
||||
<Define Name="SDLK_KP_TAB" Value="1073742010" />
|
||||
<Define Name="SDLK_KP_BACKSPACE" Value="1073742011" />
|
||||
<Define Name="SDLK_KP_A" Value="1073742012" />
|
||||
<Define Name="SDLK_KP_B" Value="1073742013" />
|
||||
<Define Name="SDLK_KP_C" Value="1073742014" />
|
||||
<Define Name="SDLK_KP_D" Value="1073742015" />
|
||||
<Define Name="SDLK_KP_E" Value="1073742016" />
|
||||
<Define Name="SDLK_KP_F" Value="1073742017" />
|
||||
<Define Name="SDLK_KP_XOR" Value="1073742018" />
|
||||
<Define Name="SDLK_KP_POWER" Value="1073742019" />
|
||||
<Define Name="SDLK_KP_PERCENT" Value="1073742020" />
|
||||
<Define Name="SDLK_KP_LESS" Value="1073742021" />
|
||||
<Define Name="SDLK_KP_GREATER" Value="1073742022" />
|
||||
<Define Name="SDLK_KP_AMPERSAND" Value="1073742023" />
|
||||
<Define Name="SDLK_KP_DBLAMPERSAND" Value="1073742024" />
|
||||
<Define Name="SDLK_KP_VERTICALBAR" Value="1073742025" />
|
||||
<Define Name="SDLK_KP_DBLVERTICALBAR" Value="1073742026" />
|
||||
<Define Name="SDLK_KP_COLON" Value="1073742027" />
|
||||
<Define Name="SDLK_KP_HASH" Value="1073742028" />
|
||||
<Define Name="SDLK_KP_SPACE" Value="1073742029" />
|
||||
<Define Name="SDLK_KP_AT" Value="1073742030" />
|
||||
<Define Name="SDLK_KP_EXCLAM" Value="1073742031" />
|
||||
<Define Name="SDLK_KP_MEMSTORE" Value="1073742032" />
|
||||
<Define Name="SDLK_KP_MEMRECALL" Value="1073742033" />
|
||||
<Define Name="SDLK_KP_MEMCLEAR" Value="1073742034" />
|
||||
<Define Name="SDLK_KP_MEMADD" Value="1073742035" />
|
||||
<Define Name="SDLK_KP_MEMSUBTRACT" Value="1073742036" />
|
||||
<Define Name="SDLK_KP_MEMMULTIPLY" Value="1073742037" />
|
||||
<Define Name="SDLK_KP_MEMDIVIDE" Value="1073742038" />
|
||||
<Define Name="SDLK_KP_PLUSMINUS" Value="1073742039" />
|
||||
<Define Name="SDLK_KP_CLEAR" Value="1073742040" />
|
||||
<Define Name="SDLK_KP_CLEARENTRY" Value="1073742041" />
|
||||
<Define Name="SDLK_KP_BINARY" Value="1073742042" />
|
||||
<Define Name="SDLK_KP_OCTAL" Value="1073742043" />
|
||||
<Define Name="SDLK_KP_DECIMAL" Value="1073742044" />
|
||||
<Define Name="SDLK_KP_HEXADECIMAL" Value="1073742045" />
|
||||
<Define Name="SDLK_LCTRL" Value="1073742048" />
|
||||
<Define Name="SDLK_LSHIFT" Value="1073742049" />
|
||||
<Define Name="SDLK_LALT" Value="1073742050" />
|
||||
<Define Name="SDLK_LGUI" Value="1073742051" />
|
||||
<Define Name="SDLK_RCTRL" Value="1073742052" />
|
||||
<Define Name="SDLK_RSHIFT" Value="1073742053" />
|
||||
<Define Name="SDLK_RALT" Value="1073742054" />
|
||||
<Define Name="SDLK_RGUI" Value="1073742055" />
|
||||
<Define Name="SDLK_MODE" Value="1073742081" />
|
||||
<Define Name="SDLK_AUDIONEXT" Value="1073742082" />
|
||||
<Define Name="SDLK_AUDIOPREV" Value="1073742083" />
|
||||
<Define Name="SDLK_AUDIOSTOP" Value="1073742084" />
|
||||
<Define Name="SDLK_AUDIOPLAY" Value="1073742085" />
|
||||
<Define Name="SDLK_AUDIOMUTE" Value="1073742086" />
|
||||
<Define Name="SDLK_MEDIASELECT" Value="1073742087" />
|
||||
<Define Name="SDLK_WWW" Value="1073742088" />
|
||||
<Define Name="SDLK_MAIL" Value="1073742089" />
|
||||
<Define Name="SDLK_CALCULATOR" Value="1073742090" />
|
||||
<Define Name="SDLK_COMPUTER" Value="1073742091" />
|
||||
<Define Name="SDLK_AC_SEARCH" Value="1073742092" />
|
||||
<Define Name="SDLK_AC_HOME" Value="1073742093" />
|
||||
<Define Name="SDLK_AC_BACK" Value="1073742094" />
|
||||
<Define Name="SDLK_AC_FORWARD" Value="1073742095" />
|
||||
<Define Name="SDLK_AC_STOP" Value="1073742096" />
|
||||
<Define Name="SDLK_AC_REFRESH" Value="1073742097" />
|
||||
<Define Name="SDLK_AC_BOOKMARKS" Value="1073742098" />
|
||||
<Define Name="SDLK_BRIGHTNESSDOWN" Value="1073742099" />
|
||||
<Define Name="SDLK_BRIGHTNESSUP" Value="1073742100" />
|
||||
<Define Name="SDLK_DISPLAYSWITCH" Value="1073742101" />
|
||||
<Define Name="SDLK_KBDILLUMTOGGLE" Value="1073742102" />
|
||||
<Define Name="SDLK_KBDILLUMDOWN" Value="1073742103" />
|
||||
<Define Name="SDLK_KBDILLUMUP" Value="1073742104" />
|
||||
<Define Name="SDLK_EJECT" Value="1073742105" />
|
||||
<Define Name="SDLK_SLEEP" Value="1073742106" />
|
||||
<Define Name="KMOD_NONE" Value="0" />
|
||||
<Define Name="KMOD_LSHIFT" Value="1" />
|
||||
<Define Name="KMOD_RSHIFT" Value="2" />
|
||||
<Define Name="KMOD_LCTRL" Value="64" />
|
||||
<Define Name="KMOD_RCTRL" Value="128" />
|
||||
<Define Name="KMOD_LALT" Value="256" />
|
||||
<Define Name="KMOD_RALT" Value="512" />
|
||||
<Define Name="KMOD_LGUI" Value="1024" />
|
||||
<Define Name="KMOD_RGUI" Value="2048" />
|
||||
<Define Name="KMOD_NUM" Value="4096" />
|
||||
<Define Name="KMOD_CAPS" Value="8192" />
|
||||
<Define Name="KMOD_MODE" Value="16384" />
|
||||
<Define Name="KMOD_RESERVED" Value="32768" />
|
||||
<Define Name="KMOD_CTRL" Value="192" />
|
||||
<Define Name="KMOD_SHIFT" Value="3" />
|
||||
<Define Name="KMOD_ALT" Value="768" />
|
||||
<Define Name="KMOD_GUI" Value="3072" />
|
||||
<Define Name="SEEK_SET" Value="0" />
|
||||
<Define Name="SEEK_CUR" Value="1" />
|
||||
<Define Name="SEEK_END" Value="2" />
|
||||
<Define Name="LOGTYPE_NONE" Value="0" />
|
||||
<Define Name="LOGTYPE_VERBOSE" Value="1" />
|
||||
<Define Name="LOGTYPE_DEBUG" Value="2" />
|
||||
<Define Name="LOGTYPE_INFO" Value="3" />
|
||||
<Define Name="LOGTYPE_WARN" Value="4" />
|
||||
<Define Name="LOGTYPE_ERROR" Value="5" />
|
||||
<Define Name="LOGTYPE_CRITICAL" Value="6" />
|
||||
<Define Name="COLOUR_TRANSPARENT" Value="0" />
|
||||
<Define Name="COLOUR_WHITE" Value="4294967295" />
|
||||
<Define Name="COLOUR_BLACK" Value="4278190080" />
|
||||
<Define Name="COLOUR_RED" Value="4294901760" />
|
||||
<Define Name="COLOUR_LIME" Value="4278255360" />
|
||||
<Define Name="COLOUR_BLUE" Value="4278190335" />
|
||||
<Define Name="COLOUR_YELLOW" Value="4294967040" />
|
||||
<Define Name="COLOUR_AQUA" Value="4278255615" />
|
||||
<Define Name="COLOUR_FUCHSIA" Value="4294902015" />
|
||||
<Define Name="COLOUR_SKYBLUE" Value="4284927231" />
|
||||
<Define Name="COLOUR_SILVER" Value="4291019715" />
|
||||
<Define Name="COLOUR_GREEN" Value="4278222592" />
|
||||
<Define Name="COLOUR_ORANGE" Value="4294934272" />
|
||||
<Define Name="INVALID_NETWORK_ID" Value="-1" />
|
||||
<Define Name="INVALID_CLIENT_ID" Value="-1" />
|
||||
<Define Name="CHAT_TYPE_NONE" Value="0" />
|
||||
<Define Name="CHAT_TYPE_CHAT" Value="1" />
|
||||
<Define Name="CHAT_TYPE_INFO" Value="2" />
|
||||
<Define Name="CHAT_TYPE_DEBUG" Value="3" />
|
||||
<Define Name="SERVER_VERSION_MAJOR" Value="0" />
|
||||
<Define Name="SERVER_VERSION_MINOR" Value="0" />
|
||||
<Define Name="SERVER_VERSION_PATCH" Value="1" />
|
||||
<Define Name="GAME_UNKNOWN" Value="0" />
|
||||
<Define Name="GAME_MAFIA_ONE" Value="10" />
|
||||
<Define Name="GAME_MAFIA_TWO" Value="11" />
|
||||
<Define Name="GAME_MAFIA_THREE" Value="12" />
|
||||
<Define Name="GAME_MAFIA_ONE_DE" Value="13" />
|
||||
<Define Name="ELEMENT_ELEMENT" Value="0" />
|
||||
<Define Name="ELEMENT_ENTITY" Value="6" />
|
||||
<Define Name="ELEMENT_PED" Value="14" />
|
||||
<Define Name="ELEMENT_PLAYER" Value="30" />
|
||||
<Define Name="ELEMENT_VEHICLE" Value="38" />
|
||||
</Defines>
|
||||
424
documentation/mafiac/server/Documentation.xml
Normal file
@@ -0,0 +1,424 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Documentation>
|
||||
<!--
|
||||
Mask Values
|
||||
|
||||
b - bool
|
||||
i - int32
|
||||
f - float
|
||||
s - string
|
||||
c - function/callback
|
||||
x - class/instance
|
||||
z - vector2D
|
||||
v - vector3D
|
||||
t - thiscall
|
||||
| - optional arguments
|
||||
* - infinite arguments
|
||||
. - any type
|
||||
-->
|
||||
<Namespace Name="global">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="thisResource" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localClient" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="localPlayer" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="toColour" Mask="iii|i" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="collectAllGarbage" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="inPoly" Mask="z*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEvent" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addEventHandler" Mask="sf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeEventHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindEventHandler" Mask="sxf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindEventHandler" Mask="sx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="triggerEvent" Mask="s|x*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addCommandHandler" Mask="sc|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeCommandHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="hasCommandHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="consoleCommand" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setTimeout" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setInterval" Mask="ci*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="setImmediate" Mask="c*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearTimeout" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearInterval" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearImmediate" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="bindKey" Mask="iic" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="unbindKey" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbindAllKeys" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="findResourceByName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getResources" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="exportFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="openFile" Mask="s|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="loadTextFile" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="saveTextFile" Mask="ss" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addNetworkHandler" Mask="sc" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeNetworkHandler" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="httpGet" Mask="sscc" RequiredArguments="4" Obsolete="false" />
|
||||
<Function Name="message" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="messageClient" Mask="sx|i" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="messageAllExcept" Mask="sx|i" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getConsole" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClients" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getClient" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="destroyElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getClientFromPlayerElement" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementsByType" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromId" Mask="i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElementFromName" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addToWorld" Mask="x" RequiredArguments="1" Obsolete="true" />
|
||||
<Function Name="registerNetObject" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="triggerNetworkEvent" Mask="sx*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="spawnPlayer" Mask="xsv|f" RequiredArguments="3" Obsolete="false" />
|
||||
<Class Name="Stream">
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Property Name="position" ReadOnly="true" Obsolete="false" Type="int64" />
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readBytes" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readString" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="true" />
|
||||
<Function Name="writeBytes" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeString" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="readInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt8" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt16" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt32" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readUInt64" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readFloat" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readDouble" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="writeInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt8" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt16" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt32" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeUInt64" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeFloat" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="writeDouble" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="TextReader">
|
||||
<Function Name="close" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="loadText" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readLine" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="readCharacter" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Matrix4x4">
|
||||
<Property Name="m11" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m12" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m13" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m14" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m21" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m22" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m23" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m24" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m31" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m32" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m33" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m34" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m41" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m42" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m43" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="m44" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="setIdentity" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setTranslate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setScale" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateX" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateY" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotateZ" Mask="tf" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setRotate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setMultiply" Mask="txx*" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="multiply" Mask="tx*" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setInverse" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="transformCoordinate" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getElement" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setElement" Mask="tif" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getVector3" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec2">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tzf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Vec3">
|
||||
<Property Name="x" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="y" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="z" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="length" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="squaredLength" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Function Name="distance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="squaredDistance" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="dotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="absDotProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="normalise" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="crossProduct" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="midPoint" Mask="tv" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="addPolar" Mask="tff" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="addSpherical" Mask="tfff" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="interpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="extrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalInterpolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="sphericalExtrapolate" Mask="tvf" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="cartesianToPolar" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="cartesianToSpherical" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Event">
|
||||
<Class Name="CancellableEvent">
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="Timer" />
|
||||
<Class Name="KeyEvent">
|
||||
<Property Name="keyCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="scanCode" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="mod" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="repeat" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="down" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="preventDefault" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isDefaultPrevented" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlElement">
|
||||
<Property Name="childrenCount" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="parent" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="text" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="attributes" ReadOnly="true" Obsolete="false" />
|
||||
<Function Name="clear" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getStringAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getBoolAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getIntegerAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getFloatAttribute" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="XmlDocument">
|
||||
<Property Name="rootElement" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Function Name="load" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Resource">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="isStarted" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isStarting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="exports" ReadOnly="true" Obsolete="false" />
|
||||
<Function Name="start" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="stop" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="restart" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getExport" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Client">
|
||||
<Property Name="index" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="gameVersion" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="player" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="administrator" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="console" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="ip" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ping" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="despawnPlayer" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="disconnect" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Element">
|
||||
<Property Name="id" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="type" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="netFlags" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="isLocal" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isSyncer" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isOwner" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="syncer" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="syncerId" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="dimension" ReadOnly="false" Obsolete="false" Type="int" />
|
||||
<Property Name="parent" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="children" ReadOnly="true" Obsolete="false" />
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="resource" ReadOnly="false" Obsolete="false" Type="Object" />
|
||||
<Property Name="streamInDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="streamOutDistance" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="position" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="rotation" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Function Name="isType" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setData" Mask="ts.|b" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="removeData" Mask="ts" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="removeAllData" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setSyncer" Mask="tx|b" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="isCreatedFor" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="clearExistsFor" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="setExistsFor" Mask="txb" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="existsFor" Mask="tx" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getRotation" Mask="t" RequiredArguments="0" Obsolete="true" />
|
||||
<Function Name="setRotation" Mask="tv" RequiredArguments="1" Obsolete="true" />
|
||||
<Class Name="Entity">
|
||||
<Property Name="model" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="heading" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="modelIndex" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="velocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="turnVelocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Property Name="rotationVelocity" ReadOnly="false" Obsolete="false" Type="Vector3D" />
|
||||
<Class Name="Ped">
|
||||
<Property Name="skin" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="vehicle" ReadOnly="true" Obsolete="false" Type="Object" />
|
||||
<Property Name="seat" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="health" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="animationState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="isEnteringVehicle" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="isExitingVehicle" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="giveWeapon" Mask="ti|ii" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Player" />
|
||||
</Class>
|
||||
<Class Name="Vehicle">
|
||||
<Property Name="siren" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="engine" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="lights" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="fuel" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="wheelAngle" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="speedLimit" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="engineRPM" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Property Name="engineHealth" ReadOnly="false" Obsolete="false" Type="number" />
|
||||
<Function Name="fix" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getOccupant" Mask="ti" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="getOccupants" Mask="t" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Class>
|
||||
</Class>
|
||||
<Class Name="NetObjectFlags">
|
||||
<Property Name="registered" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="deleting" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="onAllDimensions" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="forcedSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="findSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="sendSync" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="distanceStreaming" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="alwaysExistForSyncer" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="defaultExistance" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="transient" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
<Property Name="onlySyncIfDetached" ReadOnly="false" Obsolete="false" Type="bool" />
|
||||
</Class>
|
||||
<Namespace Name="reflection">
|
||||
<Function Name="clone" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="move" Mask="xx" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="tostring" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createFunction" Mask="c" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="call" Mask="x" RequiredArguments="1" Obsolete="false" />
|
||||
<Class Name="Function" />
|
||||
</Namespace>
|
||||
<Namespace Name="module">
|
||||
<Namespace Name="hashing">
|
||||
<Function Name="encodeBase64" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="decodeBase64" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="md5" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha1" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha224" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha256" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha384" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="sha512" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd128" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd160" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd256" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="ripemd320" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="whirlpool" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="geoip">
|
||||
<Function Name="getCountryName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCountryISO" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getContinentName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getContinentCode" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCityName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getPostalCode" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getSubdivisionName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getSubdivisionISO" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getTimeZoneName" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="mysql">
|
||||
<Function Name="connect" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Class Name="Connection">
|
||||
<Property Name="ping" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="insertId" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="affectedRows" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="warningCount" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="errorNum" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Property Name="error" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Function Name="query" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="close" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="escapeString" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="selectDatabase" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="changeUser" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="info" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
<Class Name="Result">
|
||||
<Property Name="numRows" ReadOnly="true" Obsolete="false" Type="void" />
|
||||
<Function Name="free" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchAssoc" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchAssoc" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="fetchRow" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Class>
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
<Namespace Name="sdl">
|
||||
<Property Name="platform" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Function Name="getModState" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="platform">
|
||||
<Property Name="name" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="modState" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="ticks" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
</Namespace>
|
||||
<Namespace Name="server">
|
||||
<Property Name="game" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="name" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="gameMode" ReadOnly="false" Obsolete="false" Type="string" />
|
||||
<Property Name="port" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="maxClients" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="rcon" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="rconPort" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="listed" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="httpServer" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="httpPort" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="minClientVersion" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="syncInterval" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="syncMethod" ReadOnly="true" Obsolete="false" Type="int" />
|
||||
<Property Name="duplicateNames" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Property Name="streamInDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="streamOutDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="pickupStreamInDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="pickupStreamOutDistance" ReadOnly="true" Obsolete="false" Type="number" />
|
||||
<Property Name="logPath" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Property Name="syncLocalEntities" ReadOnly="true" Obsolete="false" Type="bool" />
|
||||
<Function Name="setRule" Mask="ss" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="getRule" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="banIP" Mask="s|i" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbanIP" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="unbanAllIPs" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="isIPBanned" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="shutdown" Mask="" RequiredArguments="0" Obsolete="false" />
|
||||
<Function Name="getCVar" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="setPassword" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
</Namespace>
|
||||
<Namespace Name="mafia">
|
||||
<Property Name="mapName" ReadOnly="true" Obsolete="false" Type="string" />
|
||||
<Function Name="changeMap" Mask="s" RequiredArguments="1" Obsolete="false" />
|
||||
<Function Name="createExplosion" Mask="vff" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="createVehicle" Mask="sv|f" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createPlayer" Mask="sv|f" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="createPed" Mask="sv|f" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="fadeScreen" Mask="xbf|i" RequiredArguments="3" Obsolete="false" />
|
||||
<Namespace Name="hud">
|
||||
<Function Name="message" Mask="xsi" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="enableMap" Mask="xb" RequiredArguments="2" Obsolete="false" />
|
||||
<Function Name="announce" Mask="xsf" RequiredArguments="3" Obsolete="false" />
|
||||
<Function Name="showCountdown" Mask="xi" RequiredArguments="2" Obsolete="false" />
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
</Namespace>
|
||||
</Documentation>
|
||||
43
documentation/mafiac/server/EventTypes.xml
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" ?>
|
||||
<EventTypes>
|
||||
<!--Called when a resource starts-->
|
||||
<EventType Name="OnResourceStart" Hash="1143708828" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to stream in-->
|
||||
<EventType Name="OnElementStreamIn" Hash="2759455221" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when a resource stops-->
|
||||
<EventType Name="OnResourceStop" Hash="1347867548" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when the player has joined the game-->
|
||||
<EventType Name="OnPlayerJoined" Hash="3833973824" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a player is attempting to connect-->
|
||||
<EventType Name="OnPlayerConnect" Hash="2611712496" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when a player has connected and is joining-->
|
||||
<EventType Name="OnPlayerJoin" Hash="3624951888" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called every process-->
|
||||
<EventType Name="OnProcess" Hash="3150131130" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a player disconnects-->
|
||||
<EventType Name="OnPlayerQuit" Hash="3017502482" Arguments="2" CanPreventDefault="false" />
|
||||
<!--Called when a player types a command-->
|
||||
<EventType Name="OnPlayerCommand" Hash="1638826555" Arguments="3" CanPreventDefault="true" />
|
||||
<!--Called when a player chats-->
|
||||
<EventType Name="OnPlayerChat" Hash="2515290669" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when the server finished the start sequence-->
|
||||
<EventType Name="OnServerStart" Hash="3318682471" Arguments="0" CanPreventDefault="false" />
|
||||
<!--Called when an element is about to stream out-->
|
||||
<EventType Name="OnElementStreamOut" Hash="3852636898" Arguments="2" CanPreventDefault="true" />
|
||||
<!--Called when an element is about to be destroyed-->
|
||||
<EventType Name="OnElementDestroy" Hash="696839637" Arguments="1" CanPreventDefault="true" />
|
||||
<!--Called when a ped is finished entering a vehicle.-->
|
||||
<EventType Name="OnPedEnteredVehicle" Hash="800199306" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a ped has finished exiting a vehicle.-->
|
||||
<EventType Name="OnPedExitedVehicle" Hash="1591215844" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a ped is started entering a vehicle.-->
|
||||
<EventType Name="OnPedEnteringVehicle" Hash="3211811326" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a ped has started exiting a vehicle.-->
|
||||
<EventType Name="OnPedExitingVehicle" Hash="353075125" Arguments="3" CanPreventDefault="false" />
|
||||
<!--Called when a ped dies.-->
|
||||
<EventType Name="OnPedDeath" Hash="2417618960" Arguments="4" CanPreventDefault="false" />
|
||||
<!--Called when a ped is spawned.-->
|
||||
<EventType Name="OnPedSpawn" Hash="3880839897" Arguments="1" CanPreventDefault="false" />
|
||||
<!--Called when a ped falls.-->
|
||||
<EventType Name="OnPedFall" Hash="2722461453" Arguments="1" CanPreventDefault="false" />
|
||||
</EventTypes>
|
||||
BIN
files/images/asshat-logo.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
files/images/flags/cn.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
files/images/flags/de.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
files/images/flags/es.png
Normal file
|
After Width: | Height: | Size: 289 KiB |
BIN
files/images/flags/fi.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
files/images/flags/fr.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
files/images/flags/jp.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
files/images/flags/pl.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
files/images/flags/ru.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
files/images/flags/sa.png
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
files/images/flags/sk.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
files/images/flags/uk.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
||||
@@ -1,397 +0,0 @@
|
||||
{
|
||||
"TranslationProvidedBy": "Renzuka Ctone",
|
||||
"LocaleEnglishName": "Chinese",
|
||||
"LocaleNativeName": "Chinese",
|
||||
"LocaleOffer": "This server is available in English. Use {1} to use it.",
|
||||
"LocaleChanged1": "Your language is now set to {1}",
|
||||
"LocaleChanged2": "The server will now display messages in {1}",
|
||||
"LocaleChangedNote": "This does not change messages from other players",
|
||||
"AccentsListHeader": "Accents",
|
||||
"HeaderHelpMainList": "Help Categories",
|
||||
"AccentNotFound": "Accent not found",
|
||||
"AccentSet": "You set your accent to {1}",
|
||||
"AnimationNotFound": "That animation doesn't exist",
|
||||
"AnimationCommandTip": "Use {1} to see a list of valid animations",
|
||||
"AnimationInvalidDistance": "The distance must be between 0 and 3",
|
||||
"AnimationStopCommandTip": "Use {1} to stop your animation",
|
||||
"CantBanClient": "You cannot ban this person",
|
||||
"PlayerAccountBanned": "{1} has been account banned",
|
||||
"ClanNotFound": "Clan not found",
|
||||
"ClanNameTaken": "A clan with that name already exists",
|
||||
"PlayerNotFound": "Player not found",
|
||||
"ClanCantRemoveRanks": "You can't remove clan ranks",
|
||||
"ClanCantAddRanks": "You can't add clan ranks",
|
||||
"ClanRankNotFound": "Clan rank not found",
|
||||
"ClanCantChangeMemberTag": "You can not change clan member's tags",
|
||||
"ClanPlayerNotInSameClan": "That player is not in your clan",
|
||||
"ClanCantChangeRankLevel": "You can not change clan rank's level",
|
||||
"ClanCantChangeRankTag": "You can not change clan rank's tags",
|
||||
"NameNotRegistered": "Your name is not registered! Use {1} to make an account.",
|
||||
"AutomaticLoginIPToggle": "Automatic login by IP is now {1}",
|
||||
"CouldNotRegisterAccount": "There was a problem creating your account. Please contact an admin.",
|
||||
"RandomTipsToggle": "Random tips are now {1}",
|
||||
"ActionTipsToggle": "Action tips are now {1}",
|
||||
"AutoSpawnLastCharToggle": "Automatic spawn as last used character is {1}",
|
||||
"AccountGUISettingToggle": "GUI is now {1}",
|
||||
"On": "On",
|
||||
"Off": "Off",
|
||||
"Yes": "Yes",
|
||||
"No": "No",
|
||||
"True": "True",
|
||||
"False": "False",
|
||||
"Locked": "Locked",
|
||||
"Unlocked": "Unlocked",
|
||||
"PasswordNotGoodEnough": "The new password must meet the requirements!",
|
||||
"PasswordNeedsBase": "Passwords must have at least {1}",
|
||||
"PasswordNeedsCapitals": "{1} capital letters",
|
||||
"PasswordNeedsNumbers": "{1} numbers",
|
||||
"PasswordNeedsSymbols": "{1} symbols",
|
||||
"PasswordsDontMatch": "The new password and confirm new password aren't the same!",
|
||||
"PasswordChanged": "Your password has been changed!",
|
||||
"AutoLoggedInIP": "You have been automatically logged in by IP!",
|
||||
"WelcomeBack": "Welcome back to {1}, {2}! Please {3} to continue.",
|
||||
"WelcomeNewPlayer": "Welcome to {1}, {2}! Please {3} to play.",
|
||||
"InvalidPlayer": "Player not found!",
|
||||
"InvalidBusiness": "Business not found!",
|
||||
"InvalidHouse": "House not found!",
|
||||
"InvalidVehicle": "Vehicle not found!",
|
||||
"InvalidClan": "Clan not found!",
|
||||
"InvalidClanRank": "Clan rank not found!",
|
||||
"InvalidJob": "Job not found!",
|
||||
"InvalidItem": "Item not found!",
|
||||
"InvalidItemType": "Item type not found!",
|
||||
"InvalidRadioStation": "Radio station not found!",
|
||||
"InvalidGate": "Gate not found!",
|
||||
"EntersProperty": "opens the door and enters the {1}",
|
||||
"ExitsProperty": "opens the door and exits the {1}",
|
||||
"EnterExitPropertyDoorLocked": "tries to open the {1} door but fails because it's locked",
|
||||
"PropertyNoInterior": "This {1} does not have an interior, but you can still use commands at the door icon.",
|
||||
"NoBusinessWithItemType": "There is no business with that item available",
|
||||
"HeaderKeyBinds": "Key Binds",
|
||||
"HeaderAccountHelp": "Account Help",
|
||||
"HeaderVehicleHelp": "Vehicle Help",
|
||||
"HeaderVehicleDealershipHelp": "Vehicle Dealership Help",
|
||||
"HeaderJobHelp": "Job Help",
|
||||
"HeaderChatHelp": "Chat Help",
|
||||
"HeaderServerRules": "Server Rules",
|
||||
"HeaderWebsiteInfo": "Website",
|
||||
"HeaderDiscordInfo": "Discord",
|
||||
"HeaderAnimationsList": "Animation List",
|
||||
"HeaderPayAndSprayHelp": "Pay and Spray Help",
|
||||
"HeaderAmmunationHelp": "Ammunation Help",
|
||||
"HeaderVehicleTuneupHelp": "Vehicle Tune Help",
|
||||
"HeaderBindableKeysHelp": "Bindable Keys",
|
||||
"HeaderSkinHelp": "Clothes/Skin Help",
|
||||
"HeaderBusinessHelp": "Business Help",
|
||||
"HeaderClanHelp": "Clan Help",
|
||||
"HeaderPlayerVehiclesList": "Player Vehicles ({1})",
|
||||
"HeaderPlayerBusinessesList": "Player Businesses ({1})",
|
||||
"HeaderClansList": "Clan List",
|
||||
"HeaderAdminsList": "Admin List",
|
||||
"HeaderBadgeInfo": "Badge Information",
|
||||
"HeaderAccentsList": "Accent List",
|
||||
"HeaderPlayerInfo": "Player Information ({1})",
|
||||
"HeaderWealthandTaxHelp": "Wealth and Tax Information",
|
||||
"HeaderCommandInfo": "Command Information ({1})",
|
||||
"HeaderRadioHelp": "Radio Help",
|
||||
"HeaderRadioStationsList": "Radio Stations",
|
||||
"HeaderKeyBindsList": "Key Binds List",
|
||||
"RadioVolumeChanged": "{1} You changed your streaming radio volume to {2}%",
|
||||
"VolumeLevelNotNumber": "The volume level must be a number",
|
||||
"RadioStationLocationInvalid": "You must be in a vehicle, house, or business or have a personal device to change the station!",
|
||||
"ActionBusinessRadioStationChange": "changes the business radio station to {1} ({2})",
|
||||
"ActionHouseRadioStationChange": "changes the house radio station to {1} ({2})",
|
||||
"ActionVehicleRadioStationChange": "changes the vehicle radio station to {1} ({2})",
|
||||
"ActionItemRadioStationChange": "changes the {1}'s station to {2} ({3})",
|
||||
"RandomVehicleCommandsDisabled": "This is a random traffic vehicle and commands can't be used for it.",
|
||||
"HouseDoorLock": "House {1} {2}!",
|
||||
"BusinessDoorLock": "Business {1} {2}!",
|
||||
"ServerGameModeRestarting": "The server game mode is restarting!",
|
||||
"HeaderSelfItemList": "Your Inventory",
|
||||
"HeaderPlayerItemList": "Player Inventory ({1})",
|
||||
"HeaderHouseItemList": "House Inventory",
|
||||
"HeaderBusinessFloorItemList": "Business Inventory (For Sale)",
|
||||
"HeaderBusinessStorageItemList": "Business Inventory (Storage)",
|
||||
"HeaderItemItemList": "{1}'s Inventory",
|
||||
"ItemSlotNotNumber": "The item slot must be a number",
|
||||
"ItemSlotMustBeBetween": "The item slot must be between {1} and {2}!",
|
||||
"UseItemBugged": "The item you're trying to use is bugged. A bug report has been sent to the server developers.",
|
||||
"PickupItemBugged": "The item you're trying to pickup is bugged. A bug report has been sent to the server developers.",
|
||||
"DropItemBugged": "The item you're trying to drop is bugged. A bug report has been sent to the server developers.",
|
||||
"HandsBusy": "Your hands are busy",
|
||||
"CantUseItemInSkinChange": "You can't use an item while customizing your appearance",
|
||||
"CantDropItemInSkinChange": "You can't drop an item while customizing your appearance",
|
||||
"CantPickupItemInSkinChange": "You can't pickup an item while customizing your appearance",
|
||||
"CantSwitchItemInSkinChange": "You can't switch an item while customizing your appearance",
|
||||
"CantGiveItemInSkinChange": "You can't give an item while customizing your appearance",
|
||||
"CantTakeItemInSkinChange": "You can't take an item while customizing your appearance",
|
||||
"ItemUnequippableNoAmmo": "The {1} in slot {2} has no ammo, and can't be equipped!",
|
||||
"NoSpaceSelfInventory": "You don't have any more space in your inventory",
|
||||
"Business": "business",
|
||||
"House": "house",
|
||||
"Clan": "clan",
|
||||
"Vehicle": "vehicle",
|
||||
"Item": "item",
|
||||
"ItemType": "item type",
|
||||
"Gate": "gate",
|
||||
"Door": "door",
|
||||
"ClanRank": "clan rank",
|
||||
"JobRank": "job rank",
|
||||
"RadioStation": "radio station",
|
||||
"Months": [
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December"
|
||||
],
|
||||
"WeekDays": [
|
||||
"Sunday",
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday"
|
||||
],
|
||||
"CardinalDirections": [
|
||||
"North",
|
||||
"Northeast",
|
||||
"East",
|
||||
"Southeast",
|
||||
"South",
|
||||
"Southwest",
|
||||
"West",
|
||||
"Northwest"
|
||||
],
|
||||
"NewPlayerReadyToPlay": [
|
||||
"You have been given some cash. Use {1} to find places to buy items.",
|
||||
"If you need money, jobs are the yellow dots on the radar.",
|
||||
"For a car, visit the car dealership. You can also use a rental vehicle near spawn or take the train",
|
||||
"Be sure to read the {1} and use {2} for info."
|
||||
],
|
||||
"YourCurrentVehicleDeleted": "The vehicle you were in was deleted.",
|
||||
"Distance": "Distance",
|
||||
"Meters": "Meters",
|
||||
"Feet": "Feet",
|
||||
"Kilometers": "Kilometers",
|
||||
"Miles": "Miles",
|
||||
"MustBeVehicleDriver": "You must be the driver of the vehicle!",
|
||||
"PlayerJoinedServer": "{1} has joined the game from {1}!",
|
||||
"PlayerLeftServer": "{1} has left the game! ({1})",
|
||||
"DisconnectReasons": [
|
||||
"Lost Connection",
|
||||
"Disconnected",
|
||||
"Unsupported Client",
|
||||
"Wrong Game",
|
||||
"Incorrect Password",
|
||||
"Unsupported Executable",
|
||||
"Disconnected",
|
||||
"Banned",
|
||||
"Failed",
|
||||
"Invalid Name",
|
||||
"Crashed"
|
||||
],
|
||||
"TakeItemFromHouse": "takes a {1} from the house",
|
||||
"TakeItemFromBusinessStorage": "takes a {1} from the business storage",
|
||||
"TakeItemFromBusiness": "takes a {1} from the business",
|
||||
"TakeItemFromItem": "takes a {1} from the {2}",
|
||||
"TakeItemFromVehicleTrunk": "takes a {1} from the trunk",
|
||||
"TakeItemFromVehicleDash": "takes a {1} from the glove compartment",
|
||||
"JobEquipmentInventoryKeyBindTip": "The job equipment is in your inventory. Press {1} to see them.",
|
||||
"JobEquipmentInventoryCommandTip": "The job equipment is in your inventory. Use {1} to see them.",
|
||||
"AccountHelp": [
|
||||
"Do NOT share your password with anybody else. {1} staff will never ask you for your password",
|
||||
"Use {1} to change your password, and {2} if you forgot it",
|
||||
"Some settings you can use: {1}"
|
||||
],
|
||||
"VehicleHelp": [
|
||||
"Your personal vehicles will save wherever you or somebody else leaves them!",
|
||||
"Visit dealerships to buy new vehicles (Use {1} for more information)",
|
||||
"Some commands: {1}",
|
||||
"Visit a mechanic garage to repair, colour, and tune up your car! {1} for info"
|
||||
],
|
||||
"VehicleDealershipHelp": [
|
||||
"Visit a vehicle dealer to buy new vehicles. Use {1} to find one.",
|
||||
"At the dealer, enter a car you want to buy, and the price will be shown to you",
|
||||
"If you want to buy the vehicle, use {1} and you will be given keys to test drive it around the parking lot.",
|
||||
"Drive away from the dealership with the new vehicle to confirm the purchase."
|
||||
],
|
||||
"JobHelp": [
|
||||
"Visit job locations to get a job and earn money. Look for yellow spots on the map",
|
||||
"At a job location, use {1} to get the job. Use {2} to quit your job",
|
||||
"Use {1} to begin working. You can also get a job {2} and {3}",
|
||||
"Most job vehicles are locked. Use {1} near one to enter it.",
|
||||
"When entering a job vehicle, information on how to do the job will be shown to you."
|
||||
],
|
||||
"ChatHelp": [
|
||||
"There are two main types of chat: out-of-character (OOC) and in-character (IC)",
|
||||
"Mixing these two types is not proper roleplay. See {1} for info.",
|
||||
"Some chat commands: {1}",
|
||||
"Some have shorter names available ({1} to talk, {2} to shout, etc)"
|
||||
],
|
||||
"ServerRulesHelp": [
|
||||
"Unrealistic actions (powergaming) are not allowed. You aren't superman.",
|
||||
"No terrorist or terrorism roleplay is allowed.",
|
||||
"Always follow instructions given by moderators and admins.",
|
||||
"Do not mix the chats (metagaming). You can't use info in IC that was received OOC",
|
||||
"Keep English in main chats. If you aren't good at English, use {1}"
|
||||
],
|
||||
"AnimationHelp": [
|
||||
"Animations allow you to enhance roleplay with visual actions",
|
||||
"Use {1} or {2} with a name to use an animation.",
|
||||
"To see a list of animations, use {1}"
|
||||
],
|
||||
"WeaponHelp": [
|
||||
"Visit an gun store to buy weapons. Use {1} to find one.",
|
||||
"Buying a weapon requires a weapon license.",
|
||||
"Weapon licenses are managed by the police department. Apply there to get one.",
|
||||
"Weapons can also be purchased illegally from some businesses, weapon dealers, and clans."
|
||||
],
|
||||
"SkinHelp": [
|
||||
"At a clothing store, use {1} to purchase clothes",
|
||||
"When you have a clothing item, equip and use it like any other item to show the skin selection (check {1} to learn how to use items)",
|
||||
"Some skins are restricted to jobs, clans, or for other reasons."
|
||||
],
|
||||
"KeyBindHelp": [
|
||||
"You can set your own key binds. Use {1} to see your binded keys.",
|
||||
"Use {1} to add a new keybind and {2} to remove one.",
|
||||
"Default keys are: {1} for vehicle engine, {1} for lights, and {3} for lock/unlock",
|
||||
"Press {1} to see your items and {2} to equip an item or {3} to unequip all.",
|
||||
"Press {1} to use the item you're holding, press {2} to drop it, or press {3} to pickup an item from the ground."
|
||||
],
|
||||
"BusinessHelp": [
|
||||
"Use {1} to purchase items or {2} to see a list of what's for sale at any business",
|
||||
"Businesses are shown with blue names above the icon at their entrance.",
|
||||
"Business owner commands: {1}",
|
||||
"A new car for sale will appear when you drive away from the dealer."
|
||||
],
|
||||
"ClanHelp": [
|
||||
"Ask an administrator to create a clan (Similar to factions/groups/families)",
|
||||
"Clan owners have full control over their clan once it's created",
|
||||
"Clan commands: {1}",
|
||||
"More clan commands: {1}"
|
||||
],
|
||||
"RadioStationHelp": [
|
||||
"Use {1} to set the station for your vehicle, house, or business",
|
||||
"Use {2} to see a list of stations",
|
||||
"You can change your radio streaming volume using {1} with 0-100 as the percent"
|
||||
],
|
||||
"WealthAndTaxHelp": [
|
||||
"Your taxes on payday are {1} percent of your calculated wealth.",
|
||||
"Your calculated wealth is a total sum based on how many vehicles, houses, and businesses you have.",
|
||||
"Each vehicle is {1}, each house is {2}, and each business is {3}",
|
||||
"Use {1} to see your current wealth, and {2} to see how much you'll pay in tax each payday"
|
||||
],
|
||||
"MustBeInAVehicle": "You need to be in a vehicle!",
|
||||
"MustBeInOrNearVehicle": "You need to be in or near a vehicle!",
|
||||
"MustBeInVehicleFrontSeat": "You need to be in the vehicle front seats!",
|
||||
"MustBeInVehicleDriverSeat": "You need to be the driver!",
|
||||
"DontHaveVehicleKey": "You don't have a key for this vehicle!",
|
||||
"NoGateAccess": "You don't have access to this gate!",
|
||||
"GateBroken": "This gate is broken!",
|
||||
"GateHacked": "The gate does not respond!",
|
||||
"RadioJammed": "You hear only static from the radio.",
|
||||
"VehicleNotForSale": "This vehicle is not for sale!",
|
||||
"VehicleNotForRent": "This vehicle is not for rent!",
|
||||
"BusinessNotForSale": "This business is not for sale!",
|
||||
"BusinessNotForRent": "This business is not for rent!",
|
||||
"HouseNotForSale": "This house is not for sale!",
|
||||
"HouseNotForRent": "This house is not for rent!",
|
||||
"DealershipPurchaseTestDrive": "Drive the vehicle away from the dealership to buy it, or get out to cancel.",
|
||||
"DealershipPurchaseExitedVehicle": "You canceled the vehicle purchase by exiting the vehicle!",
|
||||
"VehiclePurchaseComplete": "This vehicle is now yours! It will save wherever you leave it.",
|
||||
"VehiclePurchaseNotEnoughMoney": "You don't have enough money to buy this vehicle!",
|
||||
"HousePurchaseNotEnoughMoney": "You don't have enough money to buy this house!",
|
||||
"BusinessPurchaseNotEnoughMoney": "You don't have enough money to buy this business!",
|
||||
"Locales": {
|
||||
"English": "English",
|
||||
"Russian": "Russian",
|
||||
"Spanish": "Spanish",
|
||||
"German": "German",
|
||||
"Dutch": "Dutch",
|
||||
"Polish": "Polish"
|
||||
},
|
||||
|
||||
"ADDED-21JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"HeaderPlayerHousesList": "Player Houses ({1})",
|
||||
"HeaderPlayerStaffFlagsList": "Player Staff Flags ({1})",
|
||||
"HeaderStaffFlagsList": "Staff Flags",
|
||||
"NonRPName": "Non-RP name! Choose a new one:",
|
||||
"InvalidStaffFlag": "Staff flag not found!",
|
||||
"InvalidClanFlag": "Clan flag not found!",
|
||||
"InvalidLocale": "Language not found!",
|
||||
"HeaderJobUniformList": "Job Uniforms ({1})",
|
||||
"HeaderJobEquipmentList": "Job Equipment ({1})",
|
||||
"InvalidJobUniform": "Job uniform not found!",
|
||||
"InvalidJobEquipment": "Job equipment not found!",
|
||||
"HeaderVehiclesInRangeList": "Vehicles within {1}",
|
||||
"NoVehiclesWithInRange": "There are no vehicles within {1}",
|
||||
"AmountNotNumber": "The amount must be a number!",
|
||||
"NeedToBeWorking": "You need to be working! Use {1} at a job location or near a job vehicle.",
|
||||
"NeedToBeOnJobRoute": "You need to be doing a job route! Use {1} in a job vehicle",
|
||||
"CurrentJobRouteDeleted": "The job route you were on has been deleted by an admin",
|
||||
"CurrentJobRouteVehicleColoursChanged": "Your job route's vehicle colours were changed by an admin",
|
||||
"NotYourJob": "This is not your job!",
|
||||
"JobPoints": "You can get a job by going the yellow points on the map.",
|
||||
"QuitJobToTakeAnother": "If you want this job, use {1} to quit your current job.",
|
||||
"NotAJobVehicle": "This is not a job vehicle!",
|
||||
"NotYourJobVehicle": "This is not your job's vehicle!",
|
||||
"JobRouteDisabled": "The job route you were on has been disabled by an admin",
|
||||
"HeaderPickupTypes": "Pickup Types",
|
||||
"HeaderBlipTypes": "Map Icon Types",
|
||||
"InvalidGPSLocation": "There are no locations with that name or type",
|
||||
"HeaderBusinessList": "Businesses",
|
||||
"VehicleForSale": "This {1} is buyable for {2}! Use {3} if you want to buy it",
|
||||
"VehicleForRent": "This {1} is rentable for {2}! Use {3} if you want to rent it",
|
||||
|
||||
"ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"LoginFailedInvalidPassword": "Invalid password! {1} attempts remaining",
|
||||
"LoginFailedNoPassword": "You must enter a password! ! {1} attempts remaining",
|
||||
"RegistrationFailedNoPassword": "You must enter a password!",
|
||||
"RegistrationFailedNoPasswordConfirm": "You must confirm the password!",
|
||||
"RegistrationFailedNoEmail": "You must enter an email!",
|
||||
"AccountNameAlreadyRegistered": "Your name is already registered!",
|
||||
"AlreadyLoggedIn": "You are already logged in!",
|
||||
"RegistrationFailedInvalidEmail": "That email is invalid!",
|
||||
"RegistrationFailedPasswordMismatch": "The passwords don't match!",
|
||||
"RegistrationFailedCreateError": "Your account couldn't be created!",
|
||||
"RegistrationSuccess": "Your account has been created!",
|
||||
"RegistrationEmailVerifyReminder": "Don't forget to verify your email! A verification code has been sent to you.",
|
||||
"RegistrationCreateCharReminder": "To play on the server, you will need to make a character.",
|
||||
"NoCharactersGUIMessage": "You have no characters. Would you like to make one?",
|
||||
"NoCharactersGUIWindowTitle": "No characters",
|
||||
"NoCharactersChatMessage": "You have no characters. Use {1} to make one.",
|
||||
"NeedEmailFor2FA": "You need to add your email to your account to use two-factor authentication.",
|
||||
"NeedEmailVerifiedFor2FA": "You need to verify your email to use two-factor authentication.",
|
||||
"SetEmailHelpTip": "Use {1} to set your email.",
|
||||
"VerifyEmailHelpTip": "Use {1} to verify your email.",
|
||||
|
||||
"ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"NearbyRadio": "Nearby radio",
|
||||
"FromRadio": "From radio",
|
||||
"ToRadio": "To radio",
|
||||
"NeedToEnterPropertyCommand": "You need to enter the {1} first! Use {2} to enter and exit",
|
||||
"NeedToEnterPropertyKeyPress": "You need to enter the {1} first! Press {2} to enter and exit",
|
||||
"InventoryFullCantCarry": "You don't have any space to carry this (full inventory)!",
|
||||
"NotEnoughCashNeedAmountMore": "You don't have enough money! You need {1} more!",
|
||||
"AmountMustBeMoreThan": "The amount must be more than {1}!",
|
||||
"WeaponBanned": "You are not allowed to buy or use weapons!",
|
||||
"TimeNotNumber": "The time must be a number",
|
||||
"HeaderDefaultBusinessItemTypes": "Business Item Templates",
|
||||
"FixingStuck": "Fixing your position and virtual world ...",
|
||||
"CantUseCommandYet": "You must wait before you can use this command again!",
|
||||
"NotATester": "You are not a tester!",
|
||||
"AccessDenied": "AccessDenied",
|
||||
"InvalidSkin": "That skin is invalid!",
|
||||
"HeaderInteriorTypes": "Interiors List",
|
||||
"ViewInventoryKeyPressTip": "Press {1} to see your items",
|
||||
"ViewInventoryCommandTip": "Use {1} to see your items"
|
||||
}
|
||||
@@ -1,397 +0,0 @@
|
||||
{
|
||||
"TranslationProvidedBy": "Vortrex",
|
||||
"LocaleEnglishName": "English",
|
||||
"LocaleNativeName": "English",
|
||||
"LocaleOffer": "This server is available in English. Use {1} to use it.",
|
||||
"LocaleChanged1": "Your language is now set to {1}",
|
||||
"LocaleChanged2": "The server will now display messages in {1}",
|
||||
"LocaleChangedNote": "This does not change messages from other players",
|
||||
"AccentsListHeader": "Accents",
|
||||
"HeaderHelpMainList": "Help Categories",
|
||||
"AccentNotFound": "Accent not found",
|
||||
"AccentSet": "You set your accent to {1}",
|
||||
"AnimationNotFound": "That animation doesn't exist",
|
||||
"AnimationCommandTip": "Use {1} to see a list of valid animations",
|
||||
"AnimationInvalidDistance": "The distance must be between 0 and 3",
|
||||
"AnimationStopCommandTip": "Use {1} to stop your animation",
|
||||
"CantBanClient": "You cannot ban this person",
|
||||
"PlayerAccountBanned": "{1} has been account banned",
|
||||
"ClanNotFound": "Clan not found",
|
||||
"ClanNameTaken": "A clan with that name already exists",
|
||||
"PlayerNotFound": "Player not found",
|
||||
"ClanCantRemoveRanks": "You can't remove clan ranks",
|
||||
"ClanCantAddRanks": "You can't add clan ranks",
|
||||
"ClanRankNotFound": "Clan rank not found",
|
||||
"ClanCantChangeMemberTag": "You can not change clan member's tags",
|
||||
"ClanPlayerNotInSameClan": "That player is not in your clan",
|
||||
"ClanCantChangeRankLevel": "You can not change clan rank's level",
|
||||
"ClanCantChangeRankTag": "You can not change clan rank's tags",
|
||||
"NameNotRegistered": "Your name is not registered! Use {1} to make an account.",
|
||||
"AutomaticLoginIPToggle": "Automatic login by IP is now {1}",
|
||||
"CouldNotRegisterAccount": "There was a problem creating your account. Please contact an admin.",
|
||||
"RandomTipsToggle": "Random tips are now {1}",
|
||||
"ActionTipsToggle": "Action tips are now {1}",
|
||||
"AutoSpawnLastCharToggle": "Automatic spawn as last used character is {1}",
|
||||
"AccountGUISettingToggle": "GUI is now {1}",
|
||||
"On": "On",
|
||||
"Off": "Off",
|
||||
"Yes": "Yes",
|
||||
"No": "No",
|
||||
"True": "True",
|
||||
"False": "False",
|
||||
"Locked": "Locked",
|
||||
"Unlocked": "Unlocked",
|
||||
"PasswordNotGoodEnough": "The new password must meet the requirements!",
|
||||
"PasswordNeedsBase": "Passwords must have at least {1}",
|
||||
"PasswordNeedsCapitals": "{1} capital letters",
|
||||
"PasswordNeedsNumbers": "{1} numbers",
|
||||
"PasswordNeedsSymbols": "{1} symbols",
|
||||
"PasswordsDontMatch": "The new password and confirm new password aren't the same!",
|
||||
"PasswordChanged": "Your password has been changed!",
|
||||
"AutoLoggedInIP": "You have been automatically logged in by IP!",
|
||||
"WelcomeBack": "Welcome back to {1}, {2}! Please {3} to continue.",
|
||||
"WelcomeNewPlayer": "Welcome to {1}, {2}! Please {3} to play.",
|
||||
"InvalidPlayer": "Player not found!",
|
||||
"InvalidBusiness": "Business not found!",
|
||||
"InvalidHouse": "House not found!",
|
||||
"InvalidVehicle": "Vehicle not found!",
|
||||
"InvalidClan": "Clan not found!",
|
||||
"InvalidClanRank": "Clan rank not found!",
|
||||
"InvalidJob": "Job not found!",
|
||||
"InvalidItem": "Item not found!",
|
||||
"InvalidItemType": "Item type not found!",
|
||||
"InvalidRadioStation": "Radio station not found!",
|
||||
"InvalidGate": "Gate not found!",
|
||||
"EntersProperty": "opens the door and enters the {1}",
|
||||
"ExitsProperty": "opens the door and exits the {1}",
|
||||
"EnterExitPropertyDoorLocked": "tries to open the {1} door but fails because it's locked",
|
||||
"PropertyNoInterior": "This {1} does not have an interior, but you can still use commands at the door icon.",
|
||||
"NoBusinessWithItemType": "There is no business with that item available",
|
||||
"HeaderKeyBinds": "Key Binds",
|
||||
"HeaderAccountHelp": "Account Help",
|
||||
"HeaderVehicleHelp": "Vehicle Help",
|
||||
"HeaderVehicleDealershipHelp": "Vehicle Dealership Help",
|
||||
"HeaderJobHelp": "Job Help",
|
||||
"HeaderChatHelp": "Chat Help",
|
||||
"HeaderServerRules": "Server Rules",
|
||||
"HeaderWebsiteInfo": "Website",
|
||||
"HeaderDiscordInfo": "Discord",
|
||||
"HeaderAnimationsList": "Animation List",
|
||||
"HeaderPayAndSprayHelp": "Pay and Spray Help",
|
||||
"HeaderAmmunationHelp": "Ammunation Help",
|
||||
"HeaderVehicleTuneupHelp": "Vehicle Tune Help",
|
||||
"HeaderBindableKeysHelp": "Bindable Keys",
|
||||
"HeaderSkinHelp": "Clothes/Skin Help",
|
||||
"HeaderBusinessHelp": "Business Help",
|
||||
"HeaderClanHelp": "Clan Help",
|
||||
"HeaderPlayerVehiclesList": "Player Vehicles ({1})",
|
||||
"HeaderPlayerBusinessesList": "Player Businesses ({1})",
|
||||
"HeaderClansList": "Clan List",
|
||||
"HeaderAdminsList": "Admin List",
|
||||
"HeaderBadgeInfo": "Badge Information",
|
||||
"HeaderAccentsList": "Accent List",
|
||||
"HeaderPlayerInfo": "Player Information ({1})",
|
||||
"HeaderWealthandTaxHelp": "Wealth and Tax Information",
|
||||
"HeaderCommandInfo": "Command Information ({1})",
|
||||
"HeaderRadioHelp": "Radio Help",
|
||||
"HeaderRadioStationsList": "Radio Stations",
|
||||
"HeaderKeyBindsList": "Key Binds List",
|
||||
"RadioVolumeChanged": "{1} You changed your streaming radio volume to {2}%",
|
||||
"VolumeLevelNotNumber": "The volume level must be a number",
|
||||
"RadioStationLocationInvalid": "You must be in a vehicle, house, or business or have a personal device to change the station!",
|
||||
"ActionBusinessRadioStationChange": "changes the business radio station to {1} ({2})",
|
||||
"ActionHouseRadioStationChange": "changes the house radio station to {1} ({2})",
|
||||
"ActionVehicleRadioStationChange": "changes the vehicle radio station to {1} ({2})",
|
||||
"ActionItemRadioStationChange": "changes the {1}'s station to {2} ({3})",
|
||||
"RandomVehicleCommandsDisabled": "This is a random traffic vehicle and commands can't be used for it.",
|
||||
"HouseDoorLock": "House {1} {2}!",
|
||||
"BusinessDoorLock": "Business {1} {2}!",
|
||||
"ServerGameModeRestarting": "The server game mode is restarting!",
|
||||
"HeaderSelfItemList": "Your Inventory",
|
||||
"HeaderPlayerItemList": "Player Inventory ({1})",
|
||||
"HeaderHouseItemList": "House Inventory",
|
||||
"HeaderBusinessFloorItemList": "Business Inventory (For Sale)",
|
||||
"HeaderBusinessStorageItemList": "Business Inventory (Storage)",
|
||||
"HeaderItemItemList": "{1}'s Inventory",
|
||||
"ItemSlotNotNumber": "The item slot must be a number",
|
||||
"ItemSlotMustBeBetween": "The item slot must be between {1} and {2}!",
|
||||
"UseItemBugged": "The item you're trying to use is bugged. A bug report has been sent to the server developers.",
|
||||
"PickupItemBugged": "The item you're trying to pickup is bugged. A bug report has been sent to the server developers.",
|
||||
"DropItemBugged": "The item you're trying to drop is bugged. A bug report has been sent to the server developers.",
|
||||
"HandsBusy": "Your hands are busy",
|
||||
"CantUseItemInSkinChange": "You can't use an item while customizing your appearance",
|
||||
"CantDropItemInSkinChange": "You can't drop an item while customizing your appearance",
|
||||
"CantPickupItemInSkinChange": "You can't pickup an item while customizing your appearance",
|
||||
"CantSwitchItemInSkinChange": "You can't switch an item while customizing your appearance",
|
||||
"CantGiveItemInSkinChange": "You can't give an item while customizing your appearance",
|
||||
"CantTakeItemInSkinChange": "You can't take an item while customizing your appearance",
|
||||
"ItemUnequippableNoAmmo": "The {1} in slot {2} has no ammo, and can't be equipped!",
|
||||
"NoSpaceSelfInventory": "You don't have any more space in your inventory",
|
||||
"Business": "business",
|
||||
"House": "house",
|
||||
"Clan": "clan",
|
||||
"Vehicle": "vehicle",
|
||||
"Item": "item",
|
||||
"ItemType": "item type",
|
||||
"Gate": "gate",
|
||||
"Door": "door",
|
||||
"ClanRank": "clan rank",
|
||||
"JobRank": "job rank",
|
||||
"RadioStation": "radio station",
|
||||
"Months": [
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December"
|
||||
],
|
||||
"WeekDays": [
|
||||
"Sunday",
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday"
|
||||
],
|
||||
"CardinalDirections": [
|
||||
"North",
|
||||
"Northeast",
|
||||
"East",
|
||||
"Southeast",
|
||||
"South",
|
||||
"Southwest",
|
||||
"West",
|
||||
"Northwest"
|
||||
],
|
||||
"NewPlayerReadyToPlay": [
|
||||
"You have been given some cash. Use {1} to find places to buy items.",
|
||||
"If you need money, jobs are the yellow dots on the radar.",
|
||||
"For a car, visit the car dealership. You can also use a rental vehicle near spawn or take the train",
|
||||
"Be sure to read the {1} and use {2} for info."
|
||||
],
|
||||
"YourCurrentVehicleDeleted": "The vehicle you were in was deleted.",
|
||||
"Distance": "Distance",
|
||||
"Meters": "Meters",
|
||||
"Feet": "Feet",
|
||||
"Kilometers": "Kilometers",
|
||||
"Miles": "Miles",
|
||||
"MustBeVehicleDriver": "You must be the driver of the vehicle!",
|
||||
"PlayerJoinedServer": "{1} has joined the game from {1}!",
|
||||
"PlayerLeftServer": "{1} has left the game! ({1})",
|
||||
"DisconnectReasons": [
|
||||
"Lost Connection",
|
||||
"Disconnected",
|
||||
"Unsupported Client",
|
||||
"Wrong Game",
|
||||
"Incorrect Password",
|
||||
"Unsupported Executable",
|
||||
"Disconnected",
|
||||
"Banned",
|
||||
"Failed",
|
||||
"Invalid Name",
|
||||
"Crashed"
|
||||
],
|
||||
"TakeItemFromHouse": "takes a {1} from the house",
|
||||
"TakeItemFromBusinessStorage": "takes a {1} from the business storage",
|
||||
"TakeItemFromBusiness": "takes a {1} from the business",
|
||||
"TakeItemFromItem": "takes a {1} from the {2}",
|
||||
"TakeItemFromVehicleTrunk": "takes a {1} from the trunk",
|
||||
"TakeItemFromVehicleDash": "takes a {1} from the glove compartment",
|
||||
"JobEquipmentInventoryKeyBindTip": "The job equipment is in your inventory. Press {1} to see them.",
|
||||
"JobEquipmentInventoryCommandTip": "The job equipment is in your inventory. Use {1} to see them.",
|
||||
"AccountHelp": [
|
||||
"Do NOT share your password with anybody else. {1} staff will never ask you for your password",
|
||||
"Use {1} to change your password, and {2} if you forgot it",
|
||||
"Some settings you can use: {1}"
|
||||
],
|
||||
"VehicleHelp": [
|
||||
"Your personal vehicles will save wherever you or somebody else leaves them!",
|
||||
"Visit dealerships to buy new vehicles (Use {1} for more information)",
|
||||
"Some commands: {1}",
|
||||
"Visit a mechanic garage to repair, colour, and tune up your car! {1} for info"
|
||||
],
|
||||
"VehicleDealershipHelp": [
|
||||
"Visit a vehicle dealer to buy new vehicles. Use {1} to find one.",
|
||||
"At the dealer, enter a car you want to buy, and the price will be shown to you",
|
||||
"If you want to buy the vehicle, use {1} and you will be given keys to test drive it around the parking lot.",
|
||||
"Drive away from the dealership with the new vehicle to confirm the purchase."
|
||||
],
|
||||
"JobHelp": [
|
||||
"Visit job locations to get a job and earn money. Look for yellow spots on the map",
|
||||
"At a job location, use {1} to get the job. Use {2} to quit your job",
|
||||
"Use {1} to begin working. You can also get a job {2} and {3}",
|
||||
"Most job vehicles are locked. Use {1} near one to enter it.",
|
||||
"When entering a job vehicle, information on how to do the job will be shown to you."
|
||||
],
|
||||
"ChatHelp": [
|
||||
"There are two main types of chat: out-of-character (OOC) and in-character (IC)",
|
||||
"Mixing these two types is not proper roleplay. See {1} for info.",
|
||||
"Some chat commands: {1}",
|
||||
"Some have shorter names available ({1} to talk, {2} to shout, etc)"
|
||||
],
|
||||
"ServerRulesHelp": [
|
||||
"Unrealistic actions (powergaming) are not allowed. You aren't superman.",
|
||||
"No terrorist or terrorism roleplay is allowed.",
|
||||
"Always follow instructions given by moderators and admins.",
|
||||
"Do not mix the chats (metagaming). You can't use info in IC that was received OOC",
|
||||
"Keep English in main chats. If you aren't good at English, use {1}"
|
||||
],
|
||||
"AnimationHelp": [
|
||||
"Animations allow you to enhance roleplay with visual actions",
|
||||
"Use {1} or {2} with a name to use an animation.",
|
||||
"To see a list of animations, use {1}"
|
||||
],
|
||||
"WeaponHelp": [
|
||||
"Visit an gun store to buy weapons. Use {1} to find one.",
|
||||
"Buying a weapon requires a weapon license.",
|
||||
"Weapon licenses are managed by the police department. Apply there to get one.",
|
||||
"Weapons can also be purchased illegally from some businesses, weapon dealers, and clans."
|
||||
],
|
||||
"SkinHelp": [
|
||||
"At a clothing store, use {1} to purchase clothes",
|
||||
"When you have a clothing item, equip and use it like any other item to show the skin selection (check {1} to learn how to use items)",
|
||||
"Some skins are restricted to jobs, clans, or for other reasons."
|
||||
],
|
||||
"KeyBindHelp": [
|
||||
"You can set your own key binds. Use {1} to see your binded keys.",
|
||||
"Use {1} to add a new keybind and {2} to remove one.",
|
||||
"Default keys are: {1} for vehicle engine, {1} for lights, and {3} for lock/unlock",
|
||||
"Press {1} to see your items and {2} to equip an item or {3} to unequip all.",
|
||||
"Press {1} to use the item you're holding, press {2} to drop it, or press {3} to pickup an item from the ground."
|
||||
],
|
||||
"BusinessHelp": [
|
||||
"Use {1} to purchase items or {2} to see a list of what's for sale at any business",
|
||||
"Businesses are shown with blue names above the icon at their entrance.",
|
||||
"Business owner commands: {1}",
|
||||
"A new car for sale will appear when you drive away from the dealer."
|
||||
],
|
||||
"ClanHelp": [
|
||||
"Ask an administrator to create a clan (Similar to factions/groups/families)",
|
||||
"Clan owners have full control over their clan once it's created",
|
||||
"Clan commands: {1}",
|
||||
"More clan commands: {1}"
|
||||
],
|
||||
"RadioStationHelp": [
|
||||
"Use {1} to set the station for your vehicle, house, or business",
|
||||
"Use {2} to see a list of stations",
|
||||
"You can change your radio streaming volume using {1} with 0-100 as the percent"
|
||||
],
|
||||
"WealthAndTaxHelp": [
|
||||
"Your taxes on payday are {1} percent of your calculated wealth.",
|
||||
"Your calculated wealth is a total sum based on how many vehicles, houses, and businesses you have.",
|
||||
"Each vehicle is {1}, each house is {2}, and each business is {3}",
|
||||
"Use {1} to see your current wealth, and {2} to see how much you'll pay in tax each payday"
|
||||
],
|
||||
"MustBeInAVehicle": "You need to be in a vehicle!",
|
||||
"MustBeInOrNearVehicle": "You need to be in or near a vehicle!",
|
||||
"MustBeInVehicleFrontSeat": "You need to be in the vehicle front seats!",
|
||||
"MustBeInVehicleDriverSeat": "You need to be the driver!",
|
||||
"DontHaveVehicleKey": "You don't have a key for this vehicle!",
|
||||
"NoGateAccess": "You don't have access to this gate!",
|
||||
"GateBroken": "This gate is broken!",
|
||||
"GateHacked": "The gate does not respond!",
|
||||
"RadioJammed": "You hear only static from the radio.",
|
||||
"VehicleNotForSale": "This vehicle is not for sale!",
|
||||
"VehicleNotForRent": "This vehicle is not for rent!",
|
||||
"BusinessNotForSale": "This business is not for sale!",
|
||||
"BusinessNotForRent": "This business is not for rent!",
|
||||
"HouseNotForSale": "This house is not for sale!",
|
||||
"HouseNotForRent": "This house is not for rent!",
|
||||
"DealershipPurchaseTestDrive": "Drive the vehicle away from the dealership to buy it, or get out to cancel.",
|
||||
"DealershipPurchaseExitedVehicle": "You canceled the vehicle purchase by exiting the vehicle!",
|
||||
"VehiclePurchaseComplete": "This vehicle is now yours! It will save wherever you leave it.",
|
||||
"VehiclePurchaseNotEnoughMoney": "You don't have enough money to buy this vehicle!",
|
||||
"HousePurchaseNotEnoughMoney": "You don't have enough money to buy this house!",
|
||||
"BusinessPurchaseNotEnoughMoney": "You don't have enough money to buy this business!",
|
||||
"Locales": {
|
||||
"English": "English",
|
||||
"Russian": "Russian",
|
||||
"Spanish": "Spanish",
|
||||
"German": "German",
|
||||
"Dutch": "Dutch",
|
||||
"Polish": "Polish"
|
||||
},
|
||||
|
||||
"ADDED-21JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"HeaderPlayerHousesList": "Player Houses ({1})",
|
||||
"HeaderPlayerStaffFlagsList": "Player Staff Flags ({1})",
|
||||
"HeaderStaffFlagsList": "Staff Flags",
|
||||
"NonRPName": "Non-RP name! Choose a new one:",
|
||||
"InvalidStaffFlag": "Staff flag not found!",
|
||||
"InvalidClanFlag": "Clan flag not found!",
|
||||
"InvalidLocale": "Language not found!",
|
||||
"HeaderJobUniformList": "Job Uniforms ({1})",
|
||||
"HeaderJobEquipmentList": "Job Equipment ({1})",
|
||||
"InvalidJobUniform": "Job uniform not found!",
|
||||
"InvalidJobEquipment": "Job equipment not found!",
|
||||
"HeaderVehiclesInRangeList": "Vehicles within {1}",
|
||||
"NoVehiclesWithInRange": "There are no vehicles within {1}",
|
||||
"AmountNotNumber": "The amount must be a number!",
|
||||
"NeedToBeWorking": "You need to be working! Use {1} at a job location or near a job vehicle.",
|
||||
"NeedToBeOnJobRoute": "You need to be doing a job route! Use {1} in a job vehicle",
|
||||
"CurrentJobRouteDeleted": "The job route you were on has been deleted by an admin",
|
||||
"CurrentJobRouteVehicleColoursChanged": "Your job route's vehicle colours were changed by an admin",
|
||||
"NotYourJob": "This is not your job!",
|
||||
"JobPoints": "You can get a job by going the yellow points on the map.",
|
||||
"QuitJobToTakeAnother": "If you want this job, use {1} to quit your current job.",
|
||||
"NotAJobVehicle": "This is not a job vehicle!",
|
||||
"NotYourJobVehicle": "This is not your job's vehicle!",
|
||||
"JobRouteDisabled": "The job route you were on has been disabled by an admin",
|
||||
"HeaderPickupTypes": "Pickup Types",
|
||||
"HeaderBlipTypes": "Map Icon Types",
|
||||
"InvalidGPSLocation": "There are no locations with that name or type",
|
||||
"HeaderBusinessList": "Businesses",
|
||||
"VehicleForSale": "This {1} is buyable for {2}! Use {3} if you want to buy it",
|
||||
"VehicleForRent": "This {1} is rentable for {2}! Use {3} if you want to rent it",
|
||||
|
||||
"ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"LoginFailedInvalidPassword": "Invalid password! {1} attempts remaining",
|
||||
"LoginFailedNoPassword": "You must enter a password! ! {1} attempts remaining",
|
||||
"RegistrationFailedNoPassword": "You must enter a password!",
|
||||
"RegistrationFailedNoPasswordConfirm": "You must confirm the password!",
|
||||
"RegistrationFailedNoEmail": "You must enter an email!",
|
||||
"AccountNameAlreadyRegistered": "Your name is already registered!",
|
||||
"AlreadyLoggedIn": "You are already logged in!",
|
||||
"RegistrationFailedInvalidEmail": "That email is invalid!",
|
||||
"RegistrationFailedPasswordMismatch": "The passwords don't match!",
|
||||
"RegistrationFailedCreateError": "Your account couldn't be created!",
|
||||
"RegistrationSuccess": "Your account has been created!",
|
||||
"RegistrationEmailVerifyReminder": "Don't forget to verify your email! A verification code has been sent to you.",
|
||||
"RegistrationCreateCharReminder": "To play on the server, you will need to make a character.",
|
||||
"NoCharactersGUIMessage": "You have no characters. Would you like to make one?",
|
||||
"NoCharactersGUIWindowTitle": "No characters",
|
||||
"NoCharactersChatMessage": "You have no characters. Use {1} to make one.",
|
||||
"NeedEmailFor2FA": "You need to add your email to your account to use two-factor authentication.",
|
||||
"NeedEmailVerifiedFor2FA": "You need to verify your email to use two-factor authentication.",
|
||||
"SetEmailHelpTip": "Use {1} to set your email.",
|
||||
"VerifyEmailHelpTip": "Use {1} to verify your email.",
|
||||
|
||||
"ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"NearbyRadio": "Nearby radio",
|
||||
"FromRadio": "From radio",
|
||||
"ToRadio": "To radio",
|
||||
"NeedToEnterPropertyCommand": "You need to enter the {1} first! Use {2} to enter and exit",
|
||||
"NeedToEnterPropertyKeyPress": "You need to enter the {1} first! Press {2} to enter and exit",
|
||||
"InventoryFullCantCarry": "You don't have any space to carry this (full inventory)!",
|
||||
"NotEnoughCashNeedAmountMore": "You don't have enough money! You need {1} more!",
|
||||
"AmountMustBeMoreThan": "The amount must be more than {1}!",
|
||||
"WeaponBanned": "You are not allowed to buy or use weapons!",
|
||||
"TimeNotNumber": "The time must be a number",
|
||||
"HeaderDefaultBusinessItemTypes": "Business Item Templates",
|
||||
"FixingStuck": "Fixing your position and virtual world ...",
|
||||
"CantUseCommandYet": "You must wait before you can use this command again!",
|
||||
"NotATester": "You are not a tester!",
|
||||
"AccessDenied": "AccessDenied",
|
||||
"InvalidSkin": "That skin is invalid!",
|
||||
"HeaderInteriorTypes": "Interiors List",
|
||||
"ViewInventoryKeyPressTip": "Press {1} to see your items",
|
||||
"ViewInventoryCommandTip": "Use {1} to see your items"
|
||||
}
|
||||
@@ -1,397 +0,0 @@
|
||||
{
|
||||
"TranslationProvidedBy": "Suprise444",
|
||||
"LocaleEnglishName": "Polish",
|
||||
"LocaleNativeName": "Polski",
|
||||
"LocaleOffer": "Ten serwer jest dostępny w języku Polskim. Użyj {1} aby go użyć.",
|
||||
"LocaleChanged1": "Twój język jest ustawiony na {1}",
|
||||
"LocaleChanged2": "Serwer będzie teraz pokazywał wiadomości w języku {1}",
|
||||
"LocaleChangedNote": "To nie zmienia wiadomości od innych graczy",
|
||||
"AccentsListHeader": "Akcenty",
|
||||
"HeaderHelpMainList": "Pomoc - Kategorie",
|
||||
"AccentNotFound": "Akcent nie znaleziony",
|
||||
"AccentSet": "Ustawiłeś swój akcent na {1}",
|
||||
"AnimationNotFound": "Ta animcja nie istnieje",
|
||||
"AnimationCommandTip": "Użyj {1} aby zobaczyć listę działających animacji",
|
||||
"AnimationInvalidDistance": "Dystans musi być między 0 i 3",
|
||||
"AnimationStopCommandTip": "Użyj {1} aby zatrzymać swoją animacje",
|
||||
"CantBanClient": "Nie możesz zbanować tej osoby",
|
||||
"PlayerAccountBanned": "{1} został zbanowany",
|
||||
"ClanNotFound": "Nie znaleziono klanu",
|
||||
"ClanNameTaken": "Klan z taką nazwą już istnieje",
|
||||
"PlayerNotFound": "Nie znaleziono gracza",
|
||||
"ClanCantRemoveRanks": "Nie możesz usuwać rang klanu",
|
||||
"ClanCantAddRanks": "Nie możesz dodawać rang klanu",
|
||||
"ClanRankNotFound": "Nie znaleziono rangi klanu",
|
||||
"ClanCantChangeMemberTag": "Nie możesz zmienić tagu członka klanu",
|
||||
"ClanPlayerNotInSameClan": "Ten gracz nie jest w twoim klanie",
|
||||
"ClanCantChangeRankLevel": "Nie możesz zmienić poziomu rangi klanu",
|
||||
"ClanCantChangeRankTag": "Nie możesz zmienić tagu rangi klanu",
|
||||
"NameNotRegistered": "Twoja nazwa nie jest zarejestrowana! Użyj {1} aby stworzyć konto.",
|
||||
"AutomaticLoginIPToggle": "Automatyczny login przez IP jest teraz {1}",
|
||||
"CouldNotRegisterAccount": "Napotkano problem podczas tworzenia twojego konta. Proszę skontaktuj się z administratorem.",
|
||||
"RandomTipsToggle": "Losowe wskazówki są teraz {1}",
|
||||
"ActionTipsToggle": "Wskazówki akcji są teraz {1}",
|
||||
"AutoSpawnLastCharToggle": "Automatyczny spawn jako ostatnia postać jest teraz {1}",
|
||||
"AccountGUISettingToggle": "GUI jest teraz {1}",
|
||||
"On": "Włączony",
|
||||
"Off": "Wyłączony",
|
||||
"Yes": "Tak",
|
||||
"No": "Nie",
|
||||
"True": "Prawda",
|
||||
"False": "Fałsz",
|
||||
"Locked": "Zamknięty",
|
||||
"Unlocked": "Otwarty",
|
||||
"PasswordNotGoodEnough": "Nowe hasło musi spełniać wymagania!",
|
||||
"PasswordNeedsBase": "Hasło musi mieć przynajmniej {1}",
|
||||
"PasswordNeedsCapitals": "{1} dużych liter",
|
||||
"PasswordNeedsNumbers": "{1} numerów",
|
||||
"PasswordNeedsSymbols": "{1} symboli",
|
||||
"PasswordsDontMatch": "Hasła nie są takie same!",
|
||||
"PasswordChanged": "Twoje hasło zostało zmienione!",
|
||||
"AutoLoggedInIP": "Zostałeś automatycznie zalogowany przez IP!",
|
||||
"WelcomeBack": "Witaj ponownie w {1}, {2}! Użyj {3} aby kontynuować.",
|
||||
"WelcomeNewPlayer": "Witaj w {1}, {2}! Użyj {3} aby zagrać.",
|
||||
"InvalidPlayer": "Praca nie znaleziona!",
|
||||
"InvalidBusiness": "Biznes nie znaleziony!",
|
||||
"InvalidHouse": "Mieszkanie nie znalezione!",
|
||||
"InvalidVehicle": "Pojazd nie znaleziony!",
|
||||
"InvalidClan": "Klan nie znaleziony!",
|
||||
"InvalidClanRank": "Ranga klanu nie znaleziona!",
|
||||
"InvalidJob": "Gracz nie znaleziony!",
|
||||
"InvalidItem": "Przedmiot nie znaleziony!",
|
||||
"InvalidItemType": "Rodzaj przedmiot nie znaleziony!",
|
||||
"InvalidRadioStation": "Stacja radiowa nie znaleziona!",
|
||||
"InvalidGate": "Brama nie znaleziona!",
|
||||
"EntersProperty": "otwiera drzwi i wchodzi do {1}",
|
||||
"ExitsProperty": "otwiera drzwi i wychodzi z {1}",
|
||||
"EnterExitPropertyDoorLocked": "próbuje otworzyć {1} drzwi, ale nie udaje się, ponieważ są zamknięte",
|
||||
"PropertyNoInterior": "Ten {1} nie ma wnętrza, ale dalej możesz używaj komend przy ikonie drzwi.",
|
||||
"NoBusinessWithItemType": "Nie ma biznesu, który posiada ten przedmiot",
|
||||
"HeaderKeyBinds": "Przypisania klawiszy",
|
||||
"HeaderAccountHelp": "Pomoc - Konto",
|
||||
"HeaderVehicleHelp": "Pomoc - Pojazd",
|
||||
"HeaderVehicleDealershipHelp": "Pomoc - Dealer Samochodów",
|
||||
"HeaderJobHelp": "Pomoc - Praca",
|
||||
"HeaderChatHelp": "Pomoc - Czat",
|
||||
"HeaderServerRules": "Zasady serwera",
|
||||
"HeaderWebsiteInfo": "Strona",
|
||||
"HeaderDiscordInfo": "Discord",
|
||||
"HeaderAnimationsList": "Lista Animacji",
|
||||
"HeaderPayAndSprayHelp": "Pomoc - Pay and Spray",
|
||||
"HeaderAmmunationHelp": "Pomoc - Ammunation",
|
||||
"HeaderVehicleTuneupHelp": "Pomoc - Ulepszanie Aut",
|
||||
"HeaderBindableKeysHelp": "Przypisywalne klawisze",
|
||||
"HeaderSkinHelp": "Pomoc - Ubrania/Skóra",
|
||||
"HeaderBusinessHelp": "Pomoc - Biznes",
|
||||
"HeaderClanHelp": "Pomoc - Klan",
|
||||
"HeaderPlayerVehiclesList": "Pojazdy Gracza ({1})",
|
||||
"HeaderPlayerBusinessesList": "Biznesy Gracza ({1})",
|
||||
"HeaderClansList": "Lista Klanów",
|
||||
"HeaderAdminsList": "Lista Administracji",
|
||||
"HeaderBadgeInfo": "Informacje o Odznace",
|
||||
"HeaderAccentsList": "Lista Akcentów",
|
||||
"HeaderPlayerInfo": "Informacje o Graczu ({1})",
|
||||
"HeaderWealthandTaxHelp": "Informacje o Bogactwach i Podatkach",
|
||||
"HeaderCommandInfo": "Informacje o Komendzie ({1})",
|
||||
"HeaderRadioHelp": "Pomoc - Radio",
|
||||
"HeaderRadioStationsList": "Stacje Radiowe",
|
||||
"HeaderKeyBindsList": "Lista przypisań klawiszy",
|
||||
"RadioVolumeChanged": "{1} Zmieniłeś głośność swojego radia na {2}%",
|
||||
"VolumeLevelNotNumber": "Poziom głośności musi być liczbą",
|
||||
"RadioStationLocationInvalid": "Musisz być w aucie, domu, biznesie lub mieć osobite urządzenie by zmienić stacje radiową!",
|
||||
"ActionBusinessRadioStationChange": "zmienia biznesową stacje radiową na {1} ({2})",
|
||||
"ActionHouseRadioStationChange": "zmienia domową stacje radiową na {1} ({2})",
|
||||
"ActionVehicleRadioStationChange": "zmienia samochodową stacje radiową na {1} ({2})",
|
||||
"ActionItemRadioStationChange": "zmienia stacje {1} na {2} ({3})",
|
||||
"RandomVehicleCommandsDisabled": "To losowy pojazd uliczny i komendy nie mogą być na nim użyte.",
|
||||
"HouseDoorLock": "Mieszkanie {1} {2}!",
|
||||
"BusinessDoorLock": "Biznes {1} {2}!",
|
||||
"ServerGameModeRestarting": "Tryb gry serwera się restartuje!",
|
||||
"HeaderSelfItemList": "Twój ekwipunek",
|
||||
"HeaderPlayerItemList": "Ekwipunek gracza ({1})",
|
||||
"HeaderHouseItemList": "Ekwipunek mieszkania",
|
||||
"HeaderBusinessFloorItemList": "Ekwipunek Bizneus (Na sprzedaż)",
|
||||
"HeaderBusinessStorageItemList": "Ekwipunek Bizenus (Magazyn)",
|
||||
"HeaderItemItemList": "Ekwipunek {1}",
|
||||
"ItemSlotNotNumber": "Slot przedmiotu musi być liczbą",
|
||||
"ItemSlotMustBeBetween": "Slot itemu musi być liczbą między {1} i {2}!",
|
||||
"UseItemBugged": "Przedmiot, który próbujesz użyć jest popsuty. Zgłoszenie zostało wysłane do deweloperów serwera.",
|
||||
"PickupItemBugged": "Przedmiot, który próbujesz podnieść jest popsuty. Zgłoszenie zostało wysłane do deweloperów serwera.",
|
||||
"DropItemBugged": "Przedmiot, który próbujesz upuścić jest popsuty. Zgłoszenie zostało wysłane do deweloperów serwera.",
|
||||
"HandsBusy": "Twoje ręce są zajęte",
|
||||
"CantUseItemInSkinChange": "Nie możesz użyć przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"CantDropItemInSkinChange": "Nie możesz upuścić przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"CantPickupItemInSkinChange": "Nie możesz podnieść przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"CantSwitchItemInSkinChange": "Nie możesz zmienić przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"CantGiveItemInSkinChange": "Nie możesz dać przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"CantTakeItemInSkinChange": "Nie możesz wziąć przedmiotu podczas zmieniania swojego wizerunku",
|
||||
"ItemUnequippableNoAmmo": "{1} w slocie {2} nie ma amunicji i nie może zostać użyty!",
|
||||
"NoSpaceSelfInventory": "Nie masz już miesca w ekwipunku",
|
||||
"Business": "biznes",
|
||||
"House": "mieszkanie",
|
||||
"Clan": "klan",
|
||||
"Vehicle": "pojazd",
|
||||
"Item": "przedmiot",
|
||||
"ItemType": "rodzaj przedmiotu",
|
||||
"Gate": "brama",
|
||||
"Door": "drzwi",
|
||||
"ClanRank": "ranga klanu",
|
||||
"JobRank": "praca rangi",
|
||||
"RadioStation": "stacja radiowa",
|
||||
"Months": [
|
||||
"Styczeń",
|
||||
"Luty",
|
||||
"Marzec",
|
||||
"Kwiecień",
|
||||
"Maj",
|
||||
"Czerwiec",
|
||||
"Lipiec",
|
||||
"Sierpień",
|
||||
"Wrzesień",
|
||||
"Październik",
|
||||
"Listopad",
|
||||
"Grudzień"
|
||||
],
|
||||
"WeekDays": [
|
||||
"Niedziela",
|
||||
"Poniedziałek",
|
||||
"Wtorek",
|
||||
"Środa",
|
||||
"Czwartek",
|
||||
"Piątek",
|
||||
"Sobota"
|
||||
],
|
||||
"CardinalDirections": [
|
||||
"Północ",
|
||||
"Północny wschód",
|
||||
"Wschód",
|
||||
"Południowy zachód",
|
||||
"Południe",
|
||||
"Południowy wschód",
|
||||
"Zachód",
|
||||
"Północny zachód"
|
||||
],
|
||||
"NewPlayerReadyToPlay": [
|
||||
"Dostałeś trochę pieniędzy. Użyj {1} aby znaleść miejsca do kupowania przedmiotów.",
|
||||
"Jeżeli potrzebujesz pieniędzy, żółte kropki na mapie to miejsca pracy.",
|
||||
"Aby zdobyć auto musisz odwiedzić dealera samochodów. Możesz też wypożyczyć samochód przy spawnie lub użyć pociągu",
|
||||
"Pamiętaj aby przeczytać {1} i użyć {2} aby zdobyć więcej informacji."
|
||||
],
|
||||
"YourCurrentVehicleDeleted": "Samochód w którym przebywałeś został usunięty.",
|
||||
"Distance": "Odległość",
|
||||
"Meters": "Metry",
|
||||
"Feet": "Stopy",
|
||||
"Kilometers": "Kilometry",
|
||||
"Miles": "Mile",
|
||||
"MustBeVehicleDriver": "Musisz być kierowcą tego pojazdu!",
|
||||
"PlayerJoinedServer": "{1} dołączył do gry z {1}!",
|
||||
"PlayerLeftServer": "{1} wyszedł z gry! ({1})",
|
||||
"DisconnectReasons": [
|
||||
"Utracenie Połączenia",
|
||||
"Odłączenie",
|
||||
"Niewspierana Wersja",
|
||||
"Nieprawidłowa Gra",
|
||||
"Błędne Hasło",
|
||||
"Niewspierany Plik Wykonalny",
|
||||
"Odłączenie",
|
||||
"Zbanowany",
|
||||
"Nie udane",
|
||||
"Nieprawidłowa Nazwa",
|
||||
"Crashed"
|
||||
],
|
||||
"TakeItemFromHouse": "bierze {1} z mieszkania",
|
||||
"TakeItemFromBusinessStorage": "bierze {1} z magazynu biznesu",
|
||||
"TakeItemFromBusiness": "bierze {1} z biznesu",
|
||||
"TakeItemFromItem": "bierze {1} z {2}",
|
||||
"TakeItemFromVehicleTrunk": "bierze {1} z bagażnika",
|
||||
"TakeItemFromVehicleDash": "bierze {1} ze schowka",
|
||||
"JobEquipmentInventoryKeyBindTip": "Wyposażenie służbowe jest w twoim ekwipunku. Naciśnij {1} aby je zobaczyć.",
|
||||
"JobEquipmentInventoryCommandTip": "Wyposażenie służbowe jest w twoim ekwipunku. Użyj {1} aby je zobaczyć.",
|
||||
"AccountHelp": [
|
||||
"NIE PODAWAJ nikomu swojego hasła. {1} nigdy nie zapyta cię o twoje hasło",
|
||||
"Użyj {1} aby zmienić swoje hasło i {2} jeżeli je zapomniałeś",
|
||||
"Kilka ustawień które możesz użyć: {1}"
|
||||
],
|
||||
"VehicleHelp": [
|
||||
"Twoje osobiste auta zapisują się za każdym razem jak ktoś wyjdzie z gry!",
|
||||
"Odwiedź dealera samochodów, aby zakupić pojazd (Użyj {1} po więcej informacji)",
|
||||
"Kilka komend: {1}",
|
||||
"Odwiedź warsztat mechanika aby naprawić, pokolorować i/lub ulepszyć swój pojazd! {1} po więcej informacji"
|
||||
],
|
||||
"VehicleDealershipHelp": [
|
||||
"Odwiedź dealera samochodów, aby zakupić nowy pojazd. Użyj {1} aby jednego zlokalizować.",
|
||||
"Przy dealerze samochodów, wejdź do auta, które chcesz kupić i ukaże ci się jego cena.",
|
||||
"Jeśli chcesz kupić pojazd, użyj {1} i dostanie kluczyki by przetestować je na parkingu.",
|
||||
"Odjedź od dealera samochodów, aby potwierdzić zakup pojazdu."
|
||||
],
|
||||
"JobHelp": [
|
||||
"Odwiedzaj miejsca pracy aby zarabiać pieniądze. Szkuaj zółtych punktów na mapie",
|
||||
"Przy miejscu pracy, użyj {1} aby zdobyć prace. Użyj {2} by opuścić swoją pracę",
|
||||
"Użyj {1} aby zacząć pracę. Możesz też dostać pracę {2} i {3}",
|
||||
"Większość pojazdów służbowych jest zamknięta. Użyj {1} obok niego aby do niego wsiąść.",
|
||||
"Przy wsiadaniu do pojazdu służbowego, dostaniesz informacje jak wykonać podjętą pracę."
|
||||
],
|
||||
"ChatHelp": [
|
||||
"Są 2 główne rodzaje chatów: Poza postacią (OOC) i w postaci (IC)",
|
||||
"Mieszanie tych 2 rodzajów jest nieprawidłowym roleplay'em. Zobacz {1} po więcej informacji.",
|
||||
"Kilka komend na chacie: {1}",
|
||||
"Niektóre mają dostępne krótsze nazwy ({1} by rozmawiać, {2} by krzyczeć, itp.)"
|
||||
],
|
||||
"ServerRulesHelp": [
|
||||
"Nierealistyczne akcje (powergaming) są niedozwolone. Nie jesteś superman'em.",
|
||||
"Roleplay na tle terrorystycznym jest niedozowolony.",
|
||||
"Zawszę słuchaj się administracji.",
|
||||
"Nie mieszaj czatów (metagaming). Nie możesz używać informacji w postaci, jeżeli uzyskałeś je poza nią.",
|
||||
"Używaj języka angielskiego na głównych chatach. Jeżeli nie jestes dobry z angielskiego, użyj {1}"
|
||||
],
|
||||
"AnimationHelp": [
|
||||
"Animacje pozwalają ci bardziej wczuć się w swoją role.",
|
||||
"Używaj {1} lub {2} z nazwą by użyć animacji.",
|
||||
"By zobaczyć liste animacji, użyj {1}"
|
||||
],
|
||||
"WeaponHelp": [
|
||||
"Odwiedź sklep z bronią, aby kupić nową broń. Użyj {1} by znaleźć taki sklep.",
|
||||
"Musisz posiadać licenje na broń, aby takową kupić.",
|
||||
"Licencje broni są wydawanie przez policję. Zaaplikuj się tam, aby taką zdobyć.",
|
||||
"Bronie mogą być też kupowane nielegalnie od niektórych bizensów, dealerów broni i klanów."
|
||||
],
|
||||
"SkinHelp": [
|
||||
"W sklepie z ubraniami, użyj {1} aby kupić ubrania.",
|
||||
"Kiedy masz ubrania, wyposaż się w nie i użyj je jak każdy inny przedmiot by ukazać modyfikacje postaci (sprawdź {1} aby zobaczyć jak używać itemy)",
|
||||
"Niektóre skiny są dostępne tylko dla niektórych osób, klanów lub z innych powodów."
|
||||
],
|
||||
"KeyBindHelp": [
|
||||
"Możesz zmienić przypisania klawiszy. Użyj {1} aby zobaczyć twoje przypisane klawisze.",
|
||||
"Użyj {1} aby dodać nowe przypisanie i {2} aby je usunąć.",
|
||||
"Domyślnymi przyciskami są: {1} aby uruchomić pojazd, {1} aby użyć świateł, and {3} aby otworzyć/zamknąć pojazd",
|
||||
"Naciśnij {1} aby zobaczyć swoje itemy i {2} aby wyposażyć się w jakiś przedmiot lub {3} aby go schować.",
|
||||
"Naciśnij {1} aby użyć przedmiot, który trzymasz, naciśnij {2} aby go upuścić lub naciśnij {3} aby podnieść jakiś przedmiot z ziemi."
|
||||
],
|
||||
"BusinessHelp": [
|
||||
"Użyj {1} aby kupować przedmioty lub {2} aby zobaczyć listę co jest na sprzedaż w jakimkolwiek bizensie.",
|
||||
"Biznesy mają niebieskie nazwy nad ikoną przy ich wejściu.",
|
||||
"Komendy właściciela biznesu: {1}",
|
||||
"Nowe auto na sprzedaż pojawi się po odjechaniu od dealera samochodów."
|
||||
],
|
||||
"ClanHelp": [
|
||||
"Zapytaj administratora o stworzenie klanu (Podobne do fakcji/grup/rodzin)",
|
||||
"Właściciele klanu mają pełną kontrole over nad ich klanem od momentu gdy jest stworzony",
|
||||
"Komendy klanu: {1}",
|
||||
"Więcej komend klanu: {1}"
|
||||
],
|
||||
"RadioStationHelp": [
|
||||
"Użyj {1} by ustawić stację twojego auta, mieszkania lub biznesu",
|
||||
"Użyj {2} by zobaczyć listę stacji",
|
||||
"Możesz zmienić głośność swojego radia używając {1} i liczbą od 0 do 100 jako procenty"
|
||||
],
|
||||
"WealthAndTaxHelp": [
|
||||
"Twoje podatki przy wypłacie są {1} procentami twojego przeliczonego bogactwa.",
|
||||
"Twoja przeliczone bogactwo jest obliczone wliczając twoje pojazdy, mieszkania i biznesy, które posiadasz.",
|
||||
"Każdy pojazd jest {1}, każde mieszkanie jest {2} i każdy biznes jest {3}",
|
||||
"Użyj {1} aby zobaczyć swoje bogactow i {2} zobaczyć ile będziesz musiał zapłacić przy następnej wypłacie"
|
||||
],
|
||||
"MustBeInAVehicle": "Musisz być w pojeździe!",
|
||||
"MustBeInOrNearVehicle": "Musisz być w lub obok pojazdu!",
|
||||
"MustBeInVehicleFrontSeat": "Musisz być w przednim siedzeniu pojazdu!",
|
||||
"MustBeInVehicleDriverSeat": "Musisz być kierowcą pojazdu!",
|
||||
"DontHaveVehicleKey": "Nie masz klucza do tego pojazdu!",
|
||||
"NoGateAccess": "Nie masz dostępu do tej bramy!",
|
||||
"GateBroken": "Ta brama jest popsuta!",
|
||||
"GateHacked": "Ta brama nie odpowiada!",
|
||||
"RadioJammed": "Słysysz tylko szumy z radia.",
|
||||
"VehicleNotForSale": "To auto nie jest na sprzedaż!",
|
||||
"VehicleNotForRent": "Tego pojazdu nie można wypożyczyć!",
|
||||
"BusinessNotForSale": "Ten biznes nie jest na sprzedaż!",
|
||||
"BusinessNotForRent": "Tego biznesu nie można wypożyczyć!",
|
||||
"HouseNotForSale": "This house is not for sale!",
|
||||
"HouseNotForRent": "Tego biznesu nie można wypożyczyć!",
|
||||
"DealershipPurchaseTestDrive": "Odjedź pojazdem od dealera samochodów aby go kupić, lub wysiądź aby anulować zakup.",
|
||||
"DealershipPurchaseExitedVehicle": "Anulowałeś kupno pojazdu, ponieważ wysiadłeś z pojazdu!",
|
||||
"VehiclePurchaseComplete": "Ten pojazd jest teraz twój, zapiszę się nieważne gdzie jest.",
|
||||
"VehiclePurchaseNotEnoughMoney": "Nie masz wystarczająco dużo funduszy aby kupić to auto!",
|
||||
"HousePurchaseNotEnoughMoney": "Nie masz wystarczająco dużo funduszy aby kupić to mieszkanie!",
|
||||
"BusinessPurchaseNotEnoughMoney": "Nie masz wystarczająco dużo funduszy aby kupić ten biznes!",
|
||||
"Locales": {
|
||||
"English": "Angielski",
|
||||
"Russian": "Rosyjski",
|
||||
"Spanish": "Hiszpański",
|
||||
"German": "Niemiecki",
|
||||
"Dutch": "Holenderski",
|
||||
"Polish": "Polski"
|
||||
},
|
||||
|
||||
"ADDED-21JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"HeaderPlayerHousesList": "Mieszkania Gracza ({1})",
|
||||
"HeaderPlayerStaffFlagsList": "Flagi Administracji ({1})",
|
||||
"HeaderStaffFlagsList": "Flagi Administracji",
|
||||
"NonRPName": "Nieprawidłowa nazwa roleplay! Wybierz nową:",
|
||||
"InvalidStaffFlag": "Flaga administracji nie znaleziona!",
|
||||
"InvalidClanFlag": "Flaga klanu nie znaleziona!",
|
||||
"InvalidLocale": "Język nie znaleziony!",
|
||||
"HeaderJobUniformList": "Mundury robocze ({1})",
|
||||
"HeaderJobEquipmentList": "Wyposażenie robocze ({1})",
|
||||
"InvalidJobUniform": "Mundur roboczy nie znaleziony!",
|
||||
"InvalidJobEquipment": "Wyposażenie robocze nie znalezione!",
|
||||
"HeaderVehiclesInRangeList": "Pojazdy w {1}",
|
||||
"NoVehiclesWithInRange": "Nie ma pojazdów w {1}",
|
||||
"AmountNotNumber": "Ilość musi być liczbą!",
|
||||
"NeedToBeWorking": "Musisz być w pracy! Użyj {1} w punkcie pracy lub obok pojazdu służbowego.",
|
||||
"NeedToBeOnJobRoute": "Musisz być w trasie! Użyj {1} w pojeździe służbowym",
|
||||
"CurrentJobRouteDeleted": "Trasa służbowa, którą jechałeś została usunięta przez Administratora",
|
||||
"CurrentJobRouteVehicleColoursChanged": "Kolory pojazdów na twojej trasie zostały zmienione przez Administratora.",
|
||||
"NotYourJob": "To nie twoja praca!",
|
||||
"JobPoints": "Możesz zdobyć pracę udając się do żółtych punktów na mapie.",
|
||||
"QuitJobToTakeAnother": "Jeżeli chcesz tą prace, użyj {1} aby opuścić swoją dotychczasową pracę.",
|
||||
"NotAJobVehicle": "To nie jest pojazd służbowy!",
|
||||
"NotYourJobVehicle": "To nie jest twój pojazd służbowy!",
|
||||
"JobRouteDisabled": "Trasa służbowa, którą jechałeś została usunięta przed Administratora",
|
||||
"HeaderPickupTypes": "Rodzaję Pickup'ów",
|
||||
"HeaderBlipTypes": "Rodzaje Ikon Mapy",
|
||||
"InvalidGPSLocation": "Nie ma lokalizacji z taką nazwą lub rodzajem",
|
||||
"HeaderBusinessList": "Biznesy",
|
||||
"VehicleForSale": "Ten {1} jest do kupienia za {2}! Użyj {3} jeżeli chcesz go kupić",
|
||||
"VehicleForRent": "Ten {1} jest do wynajęcia za {2}! Użyj {3} jeżeli chcesz go wynająć",
|
||||
|
||||
"ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"LoginFailedInvalidPassword": "Invalid password! {1} attempts remaining",
|
||||
"LoginFailedNoPassword": "You must enter a password! ! {1} attempts remaining",
|
||||
"RegistrationFailedNoPassword": "You must enter a password!",
|
||||
"RegistrationFailedNoPasswordConfirm": "You must confirm the password!",
|
||||
"RegistrationFailedNoEmail": "You must enter an email!",
|
||||
"AccountNameAlreadyRegistered": "Your name is already registered!",
|
||||
"AlreadyLoggedIn": "You are already logged in!",
|
||||
"RegistrationFailedInvalidEmail": "That email is invalid!",
|
||||
"RegistrationFailedPasswordMismatch": "The passwords don't match!",
|
||||
"RegistrationFailedCreateError": "Your account couldn't be created!",
|
||||
"RegistrationSuccess": "Your account has been created!",
|
||||
"RegistrationEmailVerifyReminder": "Don't forget to verify your email! A verification code has been sent to you.",
|
||||
"RegistrationCreateCharReminder": "To play on the server, you will need to make a character.",
|
||||
"NoCharactersGUIMessage": "You have no characters. Would you like to make one?",
|
||||
"NoCharactersGUIWindowTitle": "No characters",
|
||||
"NoCharactersChatMessage": "You have no characters. Use {1} to make one.",
|
||||
"NeedEmailFor2FA": "You need to add your email to your account to use two-factor authentication.",
|
||||
"NeedEmailVerifiedFor2FA": "You need to verify your email to use two-factor authentication.",
|
||||
"SetEmailHelpTip": "Use {1} to set your email.",
|
||||
"VerifyEmailHelpTip": "Use {1} to verify your email.",
|
||||
|
||||
"ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"NearbyRadio": "Nearby radio",
|
||||
"FromRadio": "From radio",
|
||||
"ToRadio": "To radio",
|
||||
"NeedToEnterPropertyCommand": "You need to enter the {1} first! Use {2} to enter and exit",
|
||||
"NeedToEnterPropertyKeyPress": "You need to enter the {1} first! Press {2} to enter and exit",
|
||||
"InventoryFullCantCarry": "You don't have any space to carry this (full inventory)!",
|
||||
"NotEnoughCashNeedAmountMore": "You don't have enough money! You need {1} more!",
|
||||
"AmountMustBeMoreThan": "The amount must be more than {1}!",
|
||||
"WeaponBanned": "You are not allowed to buy or use weapons!",
|
||||
"TimeNotNumber": "The time must be a number",
|
||||
"HeaderDefaultBusinessItemTypes": "Business Item Templates",
|
||||
"FixingStuck": "Fixing your position and virtual world ...",
|
||||
"CantUseCommandYet": "You must wait before you can use this command again!",
|
||||
"NotATester": "You are not a tester!",
|
||||
"AccessDenied": "AccessDenied",
|
||||
"InvalidSkin": "That skin is invalid!",
|
||||
"HeaderInteriorTypes": "Interiors List",
|
||||
"ViewInventoryKeyPressTip": "Press {1} to see your items",
|
||||
"ViewInventoryCommandTip": "Use {1} to see your items"
|
||||
}
|
||||
@@ -1,396 +0,0 @@
|
||||
{
|
||||
"TranslationProvidedBy": "VNDTTS",
|
||||
"LocaleEnglishName": "Russian",
|
||||
"LocaleNativeName": "Русский",
|
||||
"LocaleOffer": "Этот сервер доступен на русском. Используйте {1} чтобы его использовать.",
|
||||
"LocaleChanged1": "Ваш язык был установлен на {1}",
|
||||
"LocaleChanged2": "Этот сервер теперь будет показывать сообщения в {1}",
|
||||
"LocaleChangedNote": "Это не влияет на сообщения других игроков",
|
||||
"AccentsListHeader": "Акценты",
|
||||
"HeaderHelpMainList": "Помощь Категории",
|
||||
"AccentNotFound": "Не удалось найти акцент",
|
||||
"AccentSet": "Вы установили свой акцент на {1}",
|
||||
"AnimationNotFound": "Такой анимации не существует",
|
||||
"AnimationCommandTip": "Используйте {1} чтобы просмотреть список доступных анимаций",
|
||||
"AnimationInvalidDistance": "Дистанция должна быть между 0 и 3",
|
||||
"AnimationStopCommandTip": "Используйте {1} чтобы остановить анимацию",
|
||||
"CantBanClient": "Вы не можете забанить этого игрока",
|
||||
"PlayerAccountBanned": "Аккаунт {1} был заблокирован ",
|
||||
"ClanNotFound": "Не удалось найти клан",
|
||||
"ClanNameTaken": "Клан с таким именем уже существует",
|
||||
"PlayerNotFound": "Не удалось найти игрока",
|
||||
"ClanCantRemoveRanks": "Вы не можете убрать ранги клана",
|
||||
"ClanCantAddRanks": "Вы не можете добавить новые ранги клана",
|
||||
"ClanRankNotFound": "Не удалось найти ранг клана",
|
||||
"ClanCantChangeMemberTag": "Вы не можете изменить теги членов клана",
|
||||
"ClanPlayerNotInSameClan": "Игрок не в вашем клане",
|
||||
"ClanCantChangeRankLevel": "Вы не можете изменить уровень ранга клана",
|
||||
"ClanCantChangeRankTag": "Вы не можете изменить теги ранга клана",
|
||||
"NameNotRegistered": "Ваше имя не зарегестрировано! Используйте {1} чтобы создать аккаунт.",
|
||||
"AutomaticLoginIPToggle": "Автоматический вход по IP теперь {1}",
|
||||
"CouldNotRegisterAccount": "Возникла проблема при создании аккаунта. Пожалуйста свяжитесь с администратором.",
|
||||
"RandomTipsToggle": "Случайные подсказки теперь {1}",
|
||||
"ActionTipsToggle": "Местные подсказки теперь {1}",
|
||||
"AutoSpawnLastCharToggle": "Автоматическое возрождение как последний выбраный персонаж теперь {1}",
|
||||
"AccountGUISettingToggle": "GUI теперь {1}",
|
||||
"On": "Включен",
|
||||
"Off": "Выключен",
|
||||
"Yes": "Да",
|
||||
"No": "Нет",
|
||||
"True": "Верно",
|
||||
"False": "Неверно",
|
||||
"Locked": "Закрыто",
|
||||
"Unlocked": "Открыто",
|
||||
"PasswordNotGoodEnough": "Новый пароль должен соответсвовать требованиям !",
|
||||
"PasswordNeedsBase": "Пароль должен местить не меншьше {1}",
|
||||
"PasswordNeedsCapitals": "{1} Заглавные буквы",
|
||||
"PasswordNeedsNumbers": "{1} цифры",
|
||||
"PasswordNeedsSymbols": "{1} символы",
|
||||
"PasswordsDontMatch": "Новый пароль и его подтверджение не совпадают!",
|
||||
"PasswordChanged": "Ваш пароль был изменен!",
|
||||
"AutoLoggedInIP": "Вы автоматически войшли по IP!",
|
||||
"WelcomeBack": "Добро пожаловать {1}, {2}! Используйте {3} чтобы продолжить.",
|
||||
"WelcomeNewPlayer": "Добро пожаловать в {1}, {2}! Используйте {3} чтобы начать играть.",
|
||||
"InvalidPlayer": "Не удалось найти игрока!",
|
||||
"InvalidBusiness": "Не удалось найти бизнес!",
|
||||
"InvalidHouse": "Не удалось найти дом!",
|
||||
"InvalidVehicle": "Не удалось найти транспорт!",
|
||||
"InvalidClan": "Не удалось найти клан!",
|
||||
"InvalidClanRank": "Не удалось найти ранг клана!",
|
||||
"InvalidJob": "Не удалось найти работу!",
|
||||
"InvalidItem": "Не удалось найти предмет!",
|
||||
"InvalidItemType": "Не удалось найти предмет!",
|
||||
"InvalidRadioStation": "Не удалось найти радиостанцию!",
|
||||
"InvalidGate": "Не удалось найти ворота!",
|
||||
"EntersProperty": "открывает дверь и входит в {1}",
|
||||
"ExitsProperty": "открывает дверь и покидает {1}",
|
||||
"EnterExitPropertyDoorLocked": "пытаеться открыть двери {1} но у него не выходить потому-что двери закрыты",
|
||||
"PropertyNoInterior": "У {1} нет доступного интерьера, но вы все еще можете использовать комманды стоя на значке возле входа.",
|
||||
"NoBusinessWithItemType": "Нет бизнесов в которых этот предмет доступен",
|
||||
"HeaderKeyBinds": "Привязки",
|
||||
"HeaderAccountHelp": "Помощь Аккаунт",
|
||||
"HeaderVehicleHelp": "Помощь Транспорт",
|
||||
"HeaderVehicleDealershipHelp": "Помощь Автосалон",
|
||||
"HeaderJobHelp": "Помощь Работа",
|
||||
"HeaderChatHelp": "Помощь Чат",
|
||||
"HeaderServerRules": "Правила Сервера",
|
||||
"HeaderWebsiteInfo": "Сайт",
|
||||
"HeaderDiscordInfo": "Discord",
|
||||
"HeaderAnimationsList": "Список Анимаций",
|
||||
"HeaderPayAndSprayHelp": "Помощь Pay 'n' Spray",
|
||||
"HeaderAmmunationHelp": "Помощь Аммунация",
|
||||
"HeaderVehicleTuneupHelp": "Помощь Тюнинг Автомобиля",
|
||||
"HeaderBindableKeysHelp": "Кнопки которые можно привязать",
|
||||
"HeaderSkinHelp": "Помощь Одежда/Облик",
|
||||
"HeaderBusinessHelp": "Помощь Бизнес",
|
||||
"HeaderClanHelp": "Помощь Клан",
|
||||
"HeaderPlayerVehiclesList": "Транспорт Игрока ({1})",
|
||||
"HeaderPlayerBusinessesList": "Бизнесы Игрока ({1})",
|
||||
"HeaderClansList": "Список кланов",
|
||||
"HeaderAdminsList": "Список администраторов",
|
||||
"HeaderBadgeInfo": "Информация значка",
|
||||
"HeaderAccentsList": "Список акцентов",
|
||||
"HeaderPlayerInfo": "Информация об игроке ({1})",
|
||||
"HeaderWealthandTaxHelp": "Информация о достатке и налогах",
|
||||
"HeaderCommandInfo": "Информация о команде ({1})",
|
||||
"HeaderRadioHelp": "Помощь Радио",
|
||||
"HeaderRadioStationsList": "Радиостанции",
|
||||
"HeaderKeyBindsList": "Список привязок",
|
||||
"RadioVolumeChanged": "{1} Вы сменили громкость звука на {2}%",
|
||||
"VolumeLevelNotNumber": "Уровень звука должен быть в цифрах",
|
||||
"RadioStationLocationInvalid": "Вы должны находится в транспорте, доме, или бизнесе или иметь устройство чтобы сменить радиостанцию!",
|
||||
"ActionBusinessRadioStationChange": "меняет радиостанцию бизнеса на {1} ({2})",
|
||||
"ActionHouseRadioStationChange": "меняет радиостанцию дома на {1} ({2})",
|
||||
"ActionVehicleRadioStationChange": "меняет радиостанцию транспорта на {1} ({2})",
|
||||
"ActionItemRadioStationChange": "переключает станцию {1} на станцию {2} ({3})",
|
||||
"RandomVehicleCommandsDisabled": "Это случайная машина трафика, команды на нее не работают.",
|
||||
"HouseDoorLock": "Дом {1} {2}!",
|
||||
"BusinessDoorLock": "Бизнес {1} {2}!",
|
||||
"ServerGameModeRestarting": "Режим игры сервера перезапускается!",
|
||||
"HeaderSelfItemList": "Ваш инвентарь",
|
||||
"HeaderPlayerItemList": "Инвентарь игрока ({1})",
|
||||
"HeaderHouseItemList": "Инвентарь дома",
|
||||
"HeaderBusinessFloorItemList": "Инвентарь бизнеса (Продажа)",
|
||||
"HeaderBusinessStorageItemList": "Инвертарь бизнеса (Хранилище)",
|
||||
"HeaderItemItemList": "Инвентарь {1}",
|
||||
"ItemSlotNotNumber": "Слот предмета должен быть цифрой",
|
||||
"ItemSlotMustBeBetween": "Слот этого предмета должен находиться между {1} и {2}!",
|
||||
"UseItemBugged": "Предмет который вы пытаетесь использовать забагован. Баг репорт был послан разработчикам сервера.",
|
||||
"PickupItemBugged": "Предмет который вы пытаетесь поднять забагован. Баг репорт был послан разработчикам сервера.",
|
||||
"DropItemBugged": "Предмет который вы пытаетесь выкинуть забагован. Баг репорт был послан разработчикам сервера.",
|
||||
"HandsBusy": "Ваши руки заняты",
|
||||
"CantUseItemInSkinChange": "Вы не можете использовать предметы когда вы меняете свой облик",
|
||||
"CantDropItemInSkinChange": "Вы не можете кидать предметы когда вы меняете свой облик",
|
||||
"CantPickupItemInSkinChange": "Вы не можете подбирать предметы когда вы меняете свой облик",
|
||||
"CantSwitchItemInSkinChange": "Вы не можете переключать предметы когда вы меняете свой облик",
|
||||
"CantGiveItemInSkinChange": "Вы не можете давать предметы когда вы меняете свой облик",
|
||||
"CantTakeItemInSkinChange": "Вы не можете брать предметы когда вы меняете свой облик",
|
||||
"ItemUnequippableNoAmmo": "{1} на слоте {2} не имеет патронов и не может быть экипирован!",
|
||||
"NoSpaceSelfInventory": "У вас не осталось места в инвентаре",
|
||||
"Business": "бизнес",
|
||||
"House": "дом",
|
||||
"Clan": "клан",
|
||||
"Vehicle": "транспорт",
|
||||
"Item": "предмет",
|
||||
"ItemType": "тип предмета",
|
||||
"Gate": "ворота",
|
||||
"Door": "двери",
|
||||
"ClanRank": "Ранг клана",
|
||||
"JobRank": "Ранг работы",
|
||||
"RadioStation": "радиостанция",
|
||||
"Months": [
|
||||
"Январь",
|
||||
"Февраль",
|
||||
"Март",
|
||||
"Апрель",
|
||||
"Май",
|
||||
"Июнь",
|
||||
"Июль",
|
||||
"Август",
|
||||
"Сентябрь",
|
||||
"Октябрь",
|
||||
"Ноябрь",
|
||||
"Декабрь"
|
||||
],
|
||||
"WeekDays": [
|
||||
"Воскресенье",
|
||||
"Понедельник",
|
||||
"Вторник",
|
||||
"Среда",
|
||||
"Четверг",
|
||||
"Пятница",
|
||||
"Субота"
|
||||
],
|
||||
"CardinalDirections": [
|
||||
"Север",
|
||||
"Северо-восток",
|
||||
"Восток",
|
||||
"Юго-восток",
|
||||
"Юг",
|
||||
"Юго-запад",
|
||||
"Запад",
|
||||
"Северо-запад"
|
||||
],
|
||||
"NewPlayerReadyToPlay": [
|
||||
"Вам было надано немного денег. Используйте {1} чтобы найти места в которых можно купить предметы.",
|
||||
"Если вам нужны деньги, желтые точки это места работы на карте.",
|
||||
"Если вам нужен транспорт, посетите автосалон. Вы также можете использовать орендовочный транспорт возле начальной зоны или сесть на поезд",
|
||||
"Не забудьте ознакомиться с {1} и использовать {2} для информации."
|
||||
],
|
||||
"YourCurrentVehicleDeleted": "Транспорт в котором вы находились было удалено.",
|
||||
"Distance": "Дистанция",
|
||||
"Meters": "Метров",
|
||||
"Feet": "Футов",
|
||||
"Kilometers": "Километры",
|
||||
"Miles": "Мили",
|
||||
"MustBeVehicleDriver": "Вы можете быть только водителем!",
|
||||
"PlayerJoinedServer": "{1} присоеденился к игре из {1}!",
|
||||
"PlayerLeftServer": "{1} покинул игру! ({1})",
|
||||
"DisconnectReasons": [
|
||||
"Потеряно соединение",
|
||||
"Отключен",
|
||||
"Неподерживаемый клинт",
|
||||
"Неправильная игра",
|
||||
"Неправильный пароль",
|
||||
"Неподдерживаемый Exe",
|
||||
"Disconnected",
|
||||
"Забанен",
|
||||
"Не удалось",
|
||||
"Не правильное имя",
|
||||
"Вылетел"
|
||||
],
|
||||
"TakeItemFromHouse": "Берет {1} из дома",
|
||||
"TakeItemFromBusinessStorage": "Берет {1} из хранилища",
|
||||
"TakeItemFromBusiness": "Берет {1} из бизнеса",
|
||||
"TakeItemFromItem": "Достает {1} из {2}",
|
||||
"TakeItemFromVehicleTrunk": "Достает {1} из багажника",
|
||||
"TakeItemFromVehicleDash": "Достает {1} из бардачка",
|
||||
"JobEquipmentInventoryKeyBindTip": "Рабочее снаряжение у вас в инвентаре. Нажмите {1} чтобы его просмотреть.",
|
||||
"JobEquipmentInventoryCommandTip": "Рабочее снаряжение у вас в инвентаре. Используйте {1} чтобы его просмотреть.",
|
||||
"AccountHelp": [
|
||||
"Не предоставляйте свой пароль никому. {1} персонал никогда не будет спрашивать у вас пароль ",
|
||||
"Используйте {1} чтобы изменить ваш пароль, и {2} если вы его забыли",
|
||||
"Некоторые опции: {1}"
|
||||
],
|
||||
"VehicleHelp": [
|
||||
"Ваш личный транспорт будет сохранен в любом месте где вы, или кто-либо другой его оставит!",
|
||||
"Посетите автосалон чтобы приобрести новый транспорт (Используйте {1} чтобы увидеть больше информации)",
|
||||
"Некоторые комманды: {1}",
|
||||
"Посетите гараж механика чтобы починить, изменить цвет, и затюнинговать ваш автомобиль! {1} для информации"
|
||||
],
|
||||
"VehicleDealershipHelp": [
|
||||
"Посетите автосалон чтобы приобрести новый транспорт. Используйте {1} чтобы найти его.",
|
||||
"Ввойдите в транспорт который вы хотите приобрести, и цена на него будет вам показана",
|
||||
"Если хотите приобрести транспорт, используйте {1} и вам дадут ключи чтобы провести тест-драйв на парковке.",
|
||||
"Покиньте автосалон на вашем новом транспорте чтобы подвердить покупку."
|
||||
],
|
||||
"JobHelp": [
|
||||
"Посетите места работы, получите работу и зарабатывайте деньги. Ищите желтые точки на карте",
|
||||
"На месте работы, используйте {1} чтобы получить работу. Используйте {2} чтобы оставить работу",
|
||||
"Используйте {1} чтобы начать работать. Вы также можете получить работу {2} и {3}",
|
||||
"Большинство рабочего транспорта изначально закрыто. Используйте {1} находясь возле него чтобы войти.",
|
||||
"Во время входа в рабочий транспорт, информация о том, как работать будет вам предоставлена."
|
||||
],
|
||||
"ChatHelp": [
|
||||
"Существуют два основных типов чата: внутри персонажа и вне его",
|
||||
"Смешивать их не считается полноценной ролевой игрой. Просмотрите {1} для информации.",
|
||||
"Некоторые комманды чата: {1}",
|
||||
"Некоторые имеют укороченые версии ({1} чтобы говорить, {2} чтобы выкрикивать, и так далее)"
|
||||
],
|
||||
"ServerRulesHelp": [
|
||||
"Нереалистичные действия запрещены. Вы не супермен.",
|
||||
"Ролевая игра за террориста и терроризм запрещены.",
|
||||
"Всегда следуйте соблюдайте инструкии даные модератором или администратором.",
|
||||
"Вам не позволяется использовать информацию полученую вне персонажа, персонажем ",
|
||||
"Пожалуйста придерживаетесь английского в главном чате, если вы плохо знаете английский, используйте {1}"
|
||||
],
|
||||
"AnimationHelp": [
|
||||
"Анимации позволяют вам улучшить составляющую ролевой игры с помощью визуальных действий",
|
||||
"Используте {1} или {2} с названием тобы применить анимацию.",
|
||||
"Чтобы просмотреть список доступных анимаций, используйте {1}"
|
||||
],
|
||||
"WeaponHelp": [
|
||||
"Посетите магазин оружия что-бы приобрести оружие. Используйте {1} чтобы найти.",
|
||||
"Оружие невозможно купить без лицензии.",
|
||||
"Лицензиями на оружие занимается отделение полиции. Обратитесь туда чтобы заполучить лицензию.",
|
||||
"Оружие также может быть приобретено нелегально от некоторых бизнесов, торговцев оружием, и кланов."
|
||||
],
|
||||
"SkinHelp": [
|
||||
"В магазине одежды используйте {1} чтобы купить одежду",
|
||||
"Когда у вас есть предмет одежды, экипируйте его и используйте его как любой другой предмет чтобы просмотреть меню выбора облика персонажа (Просмотрите {1} чтобы научиться использовать предметы)",
|
||||
"Некоторые облики ограничены только для некоторых работ, кланов, или по каким-то другим причинам."
|
||||
],
|
||||
"KeyBindHelp": [
|
||||
"Вы можете сами создавать ваши привязки на кнопки. Используйте {1} чтобы просмотреть ваши привязки.",
|
||||
"Используйте {1} чтобы добавить новую приязку или {2} чтобы убрать ее.",
|
||||
"Стандартные привязки: {1} для мотора, {1} для фар, и {3} для открытия/закрытия",
|
||||
"Используйте {1} чтобы просмотреть ваши предметы {2} чтобы экипировать предмет или {3} чтобы убрать.",
|
||||
"Используйте {1} чтобы использвать предмет который вы держите в руках, используйте {2} чтобы его выбростить, или используйте {3} чтобы подобрать предмет."
|
||||
],
|
||||
"BusinessHelp": [
|
||||
"Используйте {1} чтобы покупать предметы или {2} чтобы просмотреть список того, что продаеться в любом бизнесе",
|
||||
"Бизнесы имеют их названия синим цветом над иконкой возле входа.",
|
||||
"Комманды владельца бизнеса: {1}",
|
||||
"Новый автомобиль появится после того как вы уедете из автосалона."
|
||||
],
|
||||
"ClanHelp": [
|
||||
"Попросите администратора чтобы основать клан",
|
||||
"Владельцы клана имеют полный контроль над ихним кланом после его основания",
|
||||
"Комманды клана: {1}",
|
||||
"Больше комманд клана: {1}"
|
||||
],
|
||||
"RadioStationHelp": [
|
||||
"Используйте {1} чтобы выбрать радиостанцию для вашего траспорта, дома, или бизнеса",
|
||||
"Используйте {2} чтобы просмотреть список радиостанций",
|
||||
"Вы можете изменить громкость радио используя {1} с 0-100 в качестве процентов"
|
||||
],
|
||||
"WealthAndTaxHelp": [
|
||||
"Вы платите {1} процентов от вашего расчетного уровня достатка.",
|
||||
"Ваш расчетный уровень достатка зависит от того, сколько вам принадлежит транспорта, домов и бизнесов.",
|
||||
"Каждый транспорт это {1}, каждый дом это {2}, И каждый бизнес это {3}",
|
||||
"Используйте {1} чтобы просмотреть ваш текущий достаток, и {2} чтобы просмотреть сколько вы платите налогов с каждой зарплаты"
|
||||
],
|
||||
"MustBeInAVehicle": "Вы должны быть внутри транспорта!",
|
||||
"MustBeInOrNearVehicle": "Вы должны быть возле транспорта!",
|
||||
"MustBeInVehicleFrontSeat": "Вы можете сидеть только спереди!",
|
||||
"MustBeInVehicleDriverSeat": "Вы можете быть только водителем!",
|
||||
"DontHaveVehicleKey": "У вас нет ключей к этому транспорту!",
|
||||
"NoGateAccess": "У вас нет доступа к воротам!",
|
||||
"GateBroken": "Эти ворота сломаны!",
|
||||
"GateHacked": "Ворота не отвечают!",
|
||||
"RadioJammed": "Из радио доносится лишь шум.",
|
||||
"VehicleNotForSale": "Этот транспорт не продается!",
|
||||
"VehicleNotForRent": "Этот транспорт не сдается в оренду! ",
|
||||
"BusinessNotForSale": "Этот бизнес не продается!",
|
||||
"BusinessNotForRent": "Этот бизнес не сдается в оренду!",
|
||||
"HouseNotForSale": "Этот дом не продаеться!",
|
||||
"HouseNotForRent": "Этот дом не сдаеться в оренду!",
|
||||
"DealershipPurchaseTestDrive": "Уедьте из автосалона чтобы подтвердить покупку транспорта, или выйдете из него чтобы отменить.",
|
||||
"DealershipPurchaseExitedVehicle": "Вы отменили покупку транспорта покинув его!",
|
||||
"VehiclePurchaseComplete": "Этот транспорт теперь принадлежит вам! Он останется там где вы его оставили.",
|
||||
"VehiclePurchaseNotEnoughMoney": "у вас недостаточно денег для покупки этого транспорта!",
|
||||
"HousePurchaseNotEnoughMoney": "У вас недостаточно денег для покупки этого дома!",
|
||||
"BusinessPurchaseNotEnoughMoney": "У вас недостаточно денег для покупки этого бизнеса!",
|
||||
"Locales": {
|
||||
"English": "Английский",
|
||||
"Russian": "Русский",
|
||||
"Spanish": "Испанский",
|
||||
"German": "Немецкий",
|
||||
"Dutch": "Нидерландский"
|
||||
},
|
||||
|
||||
"ADDED-21JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"HeaderPlayerHousesList": "Дома Игрока ({1})",
|
||||
"HeaderPlayerStaffFlagsList": "Флаги игрока персонала ({1})",
|
||||
"HeaderStaffFlagsList": "Флаги персонала",
|
||||
"NonRPName": "Ваше имя не подходит для ролевой игры! Выберете другое:",
|
||||
"InvalidStaffFlag": "Не удалось найти флаг персонала!",
|
||||
"InvalidClanFlag": "Не удалось найти флаг клана!",
|
||||
"InvalidLocale": "Не удалось найти язык!",
|
||||
"HeaderJobUniformList": "Рабочие униформы ({1})",
|
||||
"HeaderJobEquipmentList": "Рабочие снаряжение ({1})",
|
||||
"InvalidJobUniform": "Не удалось найти рабочую униформу!",
|
||||
"InvalidJobEquipment": "Не удалось найти рабочее снаряжение!",
|
||||
"HeaderVehiclesInRangeList": "Транспорт в пределах {1}",
|
||||
"NoVehiclesWithInRange": "Нет транспорта в пределах {1}",
|
||||
"AmountNotNumber": "Количество должно быть введено цифрой!",
|
||||
"NeedToBeWorking": "Вы должны быть на работе! Используйте {1} на месте работы или возле рабочего транспорта.",
|
||||
"NeedToBeOnJobRoute": "Вы должны быть на рабочем маршруте! Используйте {1} в рабочем транспорте",
|
||||
"CurrentJobRouteDeleted": "Рабочий маршрут на котором вы находились был удален администратором",
|
||||
"CurrentJobRouteVehicleColoursChanged": "Цвет транспорта на маршруте был изменен администратором",
|
||||
"NotYourJob": "Это работа пренадлежит не вам!",
|
||||
"JobPoints": "Вы можете устроиться на работу ориентируясь по желтым значкам на карте.",
|
||||
"QuitJobToTakeAnother": "Если хотите покинуть работу, ипользуйте {1}.",
|
||||
"NotAJobVehicle": "Это не рабочий транспорт!",
|
||||
"NotYourJobVehicle": "Этот транспорт пренадлежит не вашей работе!",
|
||||
"JobRouteDisabled": "Рабочий маршрут на котором вы были был удален администратором",
|
||||
"HeaderPickupTypes": "Типы подбираемых предметов",
|
||||
"HeaderBlipTypes": "Типы иконок карты",
|
||||
"InvalidGPSLocation": "Не существует локаций с таки именем или такого типа",
|
||||
"HeaderBusinessList": "Бизнесы",
|
||||
"VehicleForSale": "Этот {1} можно купить за {2}! Используйте {3} если хотите его купить",
|
||||
"VehicleForRent": "Этот {1} может быть орендован за {2}! Используйте {3} если хотите его орендовать",
|
||||
|
||||
"ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"LoginFailedInvalidPassword": "Неправельный пароль! Осталось {1} попыток",
|
||||
"LoginFailedNoPassword": "Вы должны ввести пароль! Осталось {1} попыток",
|
||||
"RegistrationFailedNoPassword": "Вы должны ввести пароль!",
|
||||
"RegistrationFailedNoPasswordConfirm": "Вы должны подтвердить пароль!",
|
||||
"RegistrationFailedNoEmail": "Вы должны ввести адрес электронной почты!",
|
||||
"AccountNameAlreadyRegistered": "Ваше имя уже зарегистрировано!",
|
||||
"AlreadyLoggedIn": "Вы уже вошли!",
|
||||
"RegistrationFailedInvalidEmail": "Такого адреса не существует!",
|
||||
"RegistrationFailedPasswordMismatch": "Пароли не совпадают!",
|
||||
"RegistrationFailedCreateError": "Не удалось создать аккаунт!",
|
||||
"RegistrationSuccess": "Ваш аккаунт был успешно создан!",
|
||||
"RegistrationEmailVerifyReminder": "Не забудьте подтвердить ваш электронный адрес, код подверждения был послан вам на электронную почту.",
|
||||
"RegistrationCreateCharReminder": "Чтобы играть на сервере, вам нужно будет создать персонажа.",
|
||||
"NoCharactersGUIMessage": "У вас нет персонажей. Не хотите создать?",
|
||||
"NoCharactersGUIWindowTitle": "Нет персонажей",
|
||||
"NoCharactersChatMessage": "У вас нет персонажей. Используйте {1} чтобы создать.",
|
||||
"NeedEmailFor2FA": "Вам нужно добавить ваш адрес электронной почты чтобы использовать двухфакторную аунтентификацию.",
|
||||
"NeedEmailVerifiedFor2FA": "Вам нужно подтвердить вашу электронную почту чтобы использовать двухфакторную аунтентификацию.",
|
||||
"SetEmailHelpTip": "Используйте {1} чтобы установить ваш адрес электронной почты.",
|
||||
"VerifyEmailHelpTip": "Используйте {1} чтобы подтвердить ваш адрес электронной почты.",
|
||||
|
||||
"ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"NearbyRadio": "Ближайшее радио",
|
||||
"FromRadio": "Из радио",
|
||||
"ToRadio": "В радио",
|
||||
"NeedToEnterPropertyCommand": "Вам нужно сначало ввести {1}! Используйте {2} чтобы выйти",
|
||||
"NeedToEnterPropertyKeyPress": "Вам нужно сначало ввести {1}! Используйте {2} чтобы выйти",
|
||||
"InventoryFullCantCarry": "У вас недостаточно места в инвентаре(Инвентарь заполнен)!",
|
||||
"NotEnoughCashNeedAmountMore": "У вас недостаточно денег! У вас не хватает {1}!",
|
||||
"AmountMustBeMoreThan": "Количество должно быть больше {1}!",
|
||||
"WeaponBanned": "Вам нельзя покупать оружие!",
|
||||
"TimeNotNumber": "Время должно быть назначено цифрой",
|
||||
"HeaderDefaultBusinessItemTypes": "Шаблоны предметов бизнеса",
|
||||
"FixingStuck": "Исправляет вашу текущую позицию и виртуальный мир ...",
|
||||
"CantUseCommandYet": "Подождите некоторое время перед тем как использовать комманду снова!",
|
||||
"NotATester": "Вы не тестировщик!",
|
||||
"AccessDenied": "Доступ запрещен",
|
||||
"InvalidSkin": "That skin is invalid!",
|
||||
"HeaderInteriorTypes": "Interiors List",
|
||||
"ViewInventoryKeyPressTip": "Press {1} to see your items",
|
||||
"ViewInventoryCommandTip": "Use {1} to see your items"
|
||||
}
|
||||
@@ -1,401 +0,0 @@
|
||||
{
|
||||
"TranslationProvidedBy": "PerikiyoXD",
|
||||
"LocaleEnglishName": "Español",
|
||||
"LocaleNativeName": "Inglés",
|
||||
"LocaleOffer": "Este servidor se encuentra disponible en Español. Utilice {1} para usarlo",
|
||||
"LocaleChanged1": "El idioma se ha configurado a {1}",
|
||||
"LocaleChanged2": "El servidor mostrará los mensajes en {1}",
|
||||
"LocaleChangedNote": "Esto no cambia los mensajes de otros jugadores",
|
||||
"AccentsListHeader": "Acentos",
|
||||
"HelpListHeader": "Categorías de ayuda",
|
||||
"HelpSkinHeader": "Ayuda de personajes",
|
||||
"HelpVehicleHeader": "Ayuda de vehículos",
|
||||
"HelpBusinessHeader": "Ayuda de negocios",
|
||||
"HelpHouseHeader": "Ayuda de casas",
|
||||
"HelpRadioHeader": "Ayuda de radio",
|
||||
"HelpAnimationHeader": "Ayuda de animaciones",
|
||||
"AccentNotFound": "Acento no encontrado",
|
||||
"AccentSet": "Acento establecido como {1}",
|
||||
"AnimationNotFound": "Esa animación no existe",
|
||||
"AnimationCommandTip": "Usa {1} para ver la lista de animaciones",
|
||||
"AnimationInvalidDistance": "La distancia debe ser un numero entre el 0 y el 3",
|
||||
"AnimationStopCommandTip": "Usa {1} para detener la animación actual",
|
||||
"CantBanClient": "No se puede vetar a esta persona",
|
||||
"PlayerAccountBanned": "La cuenta de {1} ha sido vetada",
|
||||
"ClanNotFound": "Clan no encontrado",
|
||||
"ClanNameTaken": "Ya existe un clan con ese nombre",
|
||||
"PlayerNotFound": "Jugador no encontrado",
|
||||
"ClanCantRemoveRanks": "No puedes eliminar rangos del clan",
|
||||
"ClanCantAddRanks": "No puedes añadir rangos del clan",
|
||||
"ClanRankNotFound": "No se encontró el rango del clan indicado",
|
||||
"ClanCantChangeMemberTag": "No puedes cambiar las etiquetas del miembro del clan",
|
||||
"ClanPlayerNotInSameClan": "El jugador indicado no está en tu clan",
|
||||
"ClanCantChangeRankLevel": "No puedes cambiar el nivel del rango del clan",
|
||||
"ClanCantChangeRankTag": "No puedes cambiar la etiqueta del rango del clan",
|
||||
"NameNotRegistered": "¡Tu nombre no está registrado! Usa {1} para crear una cuenta",
|
||||
"AutomaticLoginIPToggle": "Se ha {1} el inicio de sesión automático por IP",
|
||||
"CouldNotRegisterAccount": "Hubo un problema al crear su cuenta. Por favor, póngase en contacto con un administrador",
|
||||
"RandomTipsToggle": "Se han {1} los Consejos aleatorios",
|
||||
"ActionTipsToggle": "Se han {1} los Consejos de acción",
|
||||
"AutoSpawnLastCharToggle": "Se ha {1} reaparecer con el ultimo personaje usado",
|
||||
"AccountGUISettingToggle": "Se ha {1} la Interfaz de Usuario",
|
||||
"On": "Encendido",
|
||||
"Off": "Apagado",
|
||||
"Yes": "Si",
|
||||
"No": "No",
|
||||
"True": "True",
|
||||
"False": "False",
|
||||
"Locked": "Locked",
|
||||
"Unlocked": "Unlocked",
|
||||
"PasswordNotGoodEnough": "La nueva contraseña debe cumplir los requisitos",
|
||||
"PasswordNeedsBase": "Las contraseñas deben tener al menos {1}",
|
||||
"PasswordNeedsCapitals": "{1} letras mayúsculas",
|
||||
"PasswordNeedsNumbers": "{1} números",
|
||||
"PasswordNeedsSymbols": "{1} símbolos",
|
||||
"PasswordsDontMatch": "La nueva contraseña y la confirmación de la nueva contraseña no son iguales.",
|
||||
"PasswordChanged": "Su contraseña ha sido cambiada",
|
||||
"AutoLoggedInIP": "Ha iniciado la sesion automáticamente por su IP",
|
||||
"WelcomeBack": "¡Bienvenidos de nuevo a {1}, {2}! Por favor, {3} para continuar",
|
||||
"WelcomeNewPlayer": "¡Bienvenido a {1}, {2}! Por favor, {3} para jugar",
|
||||
"InvalidPlayer": "Jugador no encontrado",
|
||||
"InvalidBusiness": "Negocio no encontrada",
|
||||
"InvalidHouse": "Casa no encontrada",
|
||||
"InvalidVehicle": "Vehículo no encontrado",
|
||||
"InvalidClan": "Clan no encontrado",
|
||||
"InvalidClanRank": "Rango del clan no encontrado",
|
||||
"InvalidJob": "Trabajo no encontrado",
|
||||
"InvalidItem": "Objeto no encontrado",
|
||||
"InvalidItemType": "Tipo de objeto no encontrado",
|
||||
"InvalidRadioStation": "Estación de radio no encontrada",
|
||||
"InvalidGate": "Puerta no encontrada",
|
||||
"EntersProperty": "abre la puerta y entra en el {1}",
|
||||
"ExitsProperty": "abre la puerta y sale del {1}",
|
||||
"EnterExitPropertyDoorLocked": "intenta abrir la puerta {1} pero no lo consigue porque está cerrada",
|
||||
"PropertyNoInterior": "Este {1} no tiene un interior, pero todavía puede utilizar los comandos en el icono de la puerta",
|
||||
"NoBusinessWithItemType": "No hay ningun negocio con ese objeto disponible",
|
||||
"HeaderKeyBinds": "Atajos de teclado",
|
||||
"HeaderAccountHelp": "Account Help",
|
||||
"HeaderVehicleHelp": "Vehicle Help",
|
||||
"HeaderVehicleDealerships": "Ayuda del Concesionario de Vehiculos",
|
||||
"HeaderJobHelp": "Ayuda del Trabajo",
|
||||
"HeaderChatHelp": "Ayuda del Chat",
|
||||
"HeaderServerRules": "Reglas del Servidor",
|
||||
"HeaderWebsiteInfo": "Sitio Web",
|
||||
"HeaderDiscordInfo": "Discord",
|
||||
"HeaderAnimationsList": "Lista de animaciones",
|
||||
"HeaderPayAndSprayHelp": "Ayuda de 'Pay and Spray'",
|
||||
"HeaderAmmunationHelp": "Ayuda de 'Ammunation'",
|
||||
"HeaderVehicleTuneupHelp": "Ayuda de Puesta a punto del vehículo",
|
||||
"HeaderBindableKeysHelp": "Atajos de teclado",
|
||||
"HeaderSkinHelp": "Ayuda de Ropa/Personaje",
|
||||
"HeaderBusinessHelp": "Ayuda del negocio",
|
||||
"HeaderClanHelp": "Ayuda del clan",
|
||||
"HeaderPlayerVehiclesList": "Vehiculos del jugador ({1})",
|
||||
"HeaderPlayerBusinessesList": "Negocios del jugador ({1})",
|
||||
"HeaderClansList": "Lista de clanes",
|
||||
"HeaderAdminsList": "Lista de administradores",
|
||||
"HeaderBadgeInfo": "Información de la placa",
|
||||
"HeaderAccentsList": "Lista de acentos",
|
||||
"HeaderPlayerInfo": "Información del jugador ({1})",
|
||||
"HeaderWealthandTaxHelp": "Información sobre el patrimonio y los impuestos",
|
||||
"HeaderCommandInfo": "Información de comando ({1})",
|
||||
"HeaderRadioHelp": "Ayuda para la radio",
|
||||
"HeaderRadioStationsList": "Emisoras de radio",
|
||||
"HeaderKeyBindsList": "Lista de atajos de teclado",
|
||||
"RadioVolumeChanged": "{1} Has cambiado el volumen de tu radio en directo a {2}%",
|
||||
"VolumeLevelNotNumber": "El volumen debe ser un número",
|
||||
"RadioStationLocationInvalid": "Debe estar en un vehículo, casa o negocio o tener un dispositivo personal para cambiar la emisora",
|
||||
"ActionBusinessRadioStationChange": "cambia la emisora de la radio del negocio a {1} ({2})",
|
||||
"ActionHouseRadioStationChange": "cambia la emisora de la radio de la casa a {1} ({2})",
|
||||
"ActionVehicleRadioStationChange": "cambia la emisora de la radio del vehículo a {1} ({2})",
|
||||
"ActionItemRadioStationChange": "cambia la estación de {1} a {2} ({3})",
|
||||
"RandomVehicleCommandsDisabled": "Este es un vehículo de tráfico aleatorio y los comandos no se pueden utilizar en él",
|
||||
"HouseDoorLock": "Casa {1} {2}!",
|
||||
"BusinessDoorLock": "Negocio {1} {2}!",
|
||||
"ServerGameModeRestarting": "El modo de juego del servidor se reinicia",
|
||||
"HeaderSelfItemList": "Su inventario",
|
||||
"HeaderPlayerItemList": "Inventario del jugador ({1})",
|
||||
"HeaderHouseItemList": "Inventario de la casa",
|
||||
"HeaderBusinessFloorItemList": "Inventario del negocio (En venta)",
|
||||
"HeaderBusinessStorageItemList": "Inventario del negocio (Almacén)",
|
||||
"HeaderItemItemList": "Inventario de {1}",
|
||||
"ItemSlotNotNumber": "La ranura del objeto debe ser un número",
|
||||
"ItemSlotMustBeBetween": "La ranura del objeto debe ser un número entre {1} y {2}!",
|
||||
"UseItemBugged": "El objeto que intentas utilizar tiene un error. Se ha enviado un informe de error a los desarrolladores del servidor",
|
||||
"PickupItemBugged": "El objeto que intentas recoger tiene un error. Se ha enviado un informe de error a los desarrolladores del servidor",
|
||||
"DropItemBugged": "El objeto que intentas soltar tiene un error. Se ha enviado un informe de error a los desarrolladores del servidor",
|
||||
"HandsBusy": "Tus manos están ocupadas",
|
||||
"CantUseItemInSkinChange": "No puedes usar un objeto mientras personalizas tu apariencia",
|
||||
"CantDropItemInSkinChange": "No puedes soltar un objeto mientras personalizas tu apariencia",
|
||||
"CantPickupItemInSkinChange": "No puedes recoger un objeto mientras personalizas tu apariencia",
|
||||
"CantSwitchItemInSkinChange": "No puedes cambiar de objeto mientras se personaliza la apariencia",
|
||||
"CantGiveItemInSkinChange": "No puedes dar un objeto mientras personalizas tu apariencia",
|
||||
"CantTakeItemInSkinChange": "No puedes coger un objeto mientras personalizas tu apariencia",
|
||||
"ItemUnequippableNoAmmo": "{1} (ranura {2}) no tiene munición y no puede equiparse",
|
||||
"NoSpaceSelfInventory": "No tienes más espacio en tu inventario",
|
||||
"Business": "negocio",
|
||||
"House": "casa",
|
||||
"Clan": "clan",
|
||||
"Vehicle": "vehiculo",
|
||||
"Item": "objeto",
|
||||
"ItemType": "tipo de objeto",
|
||||
"Gate": "portón",
|
||||
"Door": "puerta",
|
||||
"ClanRank": "rango del clan",
|
||||
"JobRank": "rango del trabajo",
|
||||
"RadioStation": "estación de radio",
|
||||
"Months": [
|
||||
"Enero",
|
||||
"Febrero",
|
||||
"Marzo",
|
||||
"Abril",
|
||||
"Mayo",
|
||||
"Junio",
|
||||
"Julio",
|
||||
"Agosto",
|
||||
"Septiembre",
|
||||
"Octubre",
|
||||
"Noviembre",
|
||||
"Diciembre"
|
||||
],
|
||||
"WeekDays": [
|
||||
"Domingo",
|
||||
"Lunes",
|
||||
"Martes",
|
||||
"Miércoles",
|
||||
"Jueves",
|
||||
"Viernes",
|
||||
"Sábado"
|
||||
],
|
||||
"CardinalDirections": [
|
||||
"Norte",
|
||||
"Noreste",
|
||||
"Este",
|
||||
"Sureste",
|
||||
"Sur",
|
||||
"Suroeste",
|
||||
"Oeste",
|
||||
"Noroeste"
|
||||
],
|
||||
"NewPlayerReadyToPlay": [
|
||||
"Te han dado algo de dinero. Usa {1} para encontrar lugares donde comprar artículos",
|
||||
"Si necesitas dinero, los trabajos son los puntos amarillos del radar",
|
||||
"Para conseguir un coche, visita el concesionario de coches. También puedes utilizar un vehículo de alquiler cerca del punto de aparición o tomar el tren",
|
||||
"Asegúrese de leer el {1} y utilizar el {2} para obtener información"
|
||||
],
|
||||
"YourCurrentVehicleDeleted": "El vehículo en el que estabas fue eliminado",
|
||||
"Distance": "Distancia",
|
||||
"Meters": "Metros",
|
||||
"Feet": "Pies",
|
||||
"Kilometers": "Kilómetros",
|
||||
"Miles": "Millas",
|
||||
"MustBeVehicleDriver": "¡Debes ser el conductor del vehículo!",
|
||||
"PlayerJoinedServer": "¡{1} se unió al juego desde {1}!",
|
||||
"PlayerLeftServer": "¡{1} ha abandonado el juego! ({1})",
|
||||
"DisconnectReasons": [
|
||||
"Conexión perdida",
|
||||
"Desconectado",
|
||||
"Cliente no admitido",
|
||||
"Juego incorrecto",
|
||||
"Contraseña incorrecta",
|
||||
"Ejecutable no admitidos",
|
||||
"Desconectado",
|
||||
"Vetado",
|
||||
"Fallido",
|
||||
"Nombre inválido",
|
||||
"Fallo del programa"
|
||||
],
|
||||
"TakeItemFromHouse": "saca {1} de la casa",
|
||||
"TakeItemFromBusinessStorage": "saca {1} del almacén del negocio",
|
||||
"TakeItemFromBusiness": "saca {1} del negocio",
|
||||
"TakeItemFromItem": "saca {1} del {2}",
|
||||
"TakeItemFromVehicleTrunk": "saca {1} del maletero",
|
||||
"TakeItemFromVehicleDash": "saca {1} de la guantera",
|
||||
"JobEquipmentInventoryKeyBindTip": "El equipo de trabajo está en su inventario. Pulse {1} para verlas",
|
||||
"JobEquipmentInventoryCommandTip": "El equipo de trabajo está en su inventario. Utilice {1} para verlos",
|
||||
"AccountHelp": [
|
||||
"NO comparta su contraseña con nadie más. El personal de {1} nunca le pedirá su contraseña",
|
||||
"Utilice {1} para cambiar su contraseña, y {2} si la ha olvidado",
|
||||
"Algunos comandos: {1}"
|
||||
],
|
||||
"VehicleHelp": [
|
||||
"Sus vehículos personales se guardarán donde usted u otra persona los deje",
|
||||
"Visite un concesionario para comprar vehículos nuevos. {1} para más información)",
|
||||
"Algunos comandos: {1}",
|
||||
"Visita un taller mecánico para reparar, colorear y poner a punto tu coche. {1} para más información"
|
||||
],
|
||||
"VehicleDealershipHelp": [
|
||||
"Visite un concesionario para comprar vehículos nuevos. {1} para encontrar uno",
|
||||
"En el concesionario, introduce el coche que quieres comprar, y se te mostrará el precio",
|
||||
"Si quieres comprar el vehículo, utiliza {1} y te darán las llaves para que lo pruebes en el aparcamiento",
|
||||
"Salga del concesionario con el vehículo nuevo para confirmar la compra"
|
||||
],
|
||||
"JobHelp": [
|
||||
"Visita los lugares de trabajo para conseguir un empleo y ganar dinero. Busca puntos amarillos en el mapa",
|
||||
"En un lugar de trabajo, usa {1} para conseguir el trabajo. Utiliza {2} para dejar el trabajo",
|
||||
"Usa {1} para empezar a trabajar. También puedes conseguir un trabajo {2} y {3}",
|
||||
"La mayoría de los vehículos de trabajo están cerrados. Usa {1} cerca de uno para entrar en él",
|
||||
"Al entrar en un vehículo de trabajo, se le mostrará información sobre cómo hacer el trabajo"
|
||||
],
|
||||
"ChatHelp": [
|
||||
"Hay dos tipos principales de chat: fuera del personaje (OOC) y dentro del personaje (IC)",
|
||||
"Mezclar estos dos tipos no resulta en un juego de rol apropiado. Vea {1} para más información",
|
||||
"Algunos comandos del chat: {1}",
|
||||
"Algunos tienen nombres más cortos disponibles ({1} para hablar, {2} para gritar, etc)"
|
||||
],
|
||||
"ServerRulesHelp": [
|
||||
"Las acciones irreales (powergaming) no están permitidas. No eres Superman",
|
||||
"No se permite ningún juego de rol terrorista o de terrorismo",
|
||||
"Siga siempre las instrucciones de los moderadores y administradores",
|
||||
"No mezcles los chats (metagaming). No puedes usar información en IC que fue recibida OOC",
|
||||
"Mantén el inglés en los chats principales. Si no se te da bien el inglés, utiliza {1}"
|
||||
],
|
||||
"AnimationHelp": [
|
||||
"Las animaciones permiten mejorar el juego de rol con acciones visuales",
|
||||
"Utilice {1} o {2} con un nombre para utilizar una animación",
|
||||
"Para ver una lista de animaciones, utilice {1}"
|
||||
],
|
||||
"WeaponHelp": [
|
||||
"Visita una armería para comprar armas. Usa {1} para encontrar una",
|
||||
"La compra de un arma requiere una licencia de armas",
|
||||
"Las licencias de armas son gestionadas por el departamento de policía. Solicítela allí para obtenerla",
|
||||
"Las armas también pueden comprarse ilegalmente en algunos negocios, vendedores de armas y clanes"
|
||||
],
|
||||
"SkinHelp": [
|
||||
"En una tienda de ropa, usa {1} para comprar ropa",
|
||||
"Cuando tengas un objeto de ropa, equípalo y úsalo como cualquier otro objeto para mostrar la selección de personajes (revisa {1} para aprender a usar objetos)",
|
||||
"Algunas pieles están restringidas a trabajos, clanes o por otras razones"
|
||||
],
|
||||
"KeyBindHelp": [
|
||||
"Puedes establecer tus propias combinaciones de teclas. Utilice {1} para ver sus teclas vinculadas",
|
||||
"Utilice {1} para añadir una nueva combinación de teclas y {2} para eliminar una",
|
||||
"Las teclas por defecto son: {1} para el motor del vehículo, {1} para las luces y {3} para el bloqueo/desbloqueo",
|
||||
"Pulsa {1} para ver tus objetos y {2} para equipar un objeto o {3} para desequipar todos",
|
||||
"Pulsa {1} para usar el objeto que tienes en la mano, pulsa {2} para dejarlo caer o pulsa {3} para recoger un objeto del suelo"
|
||||
],
|
||||
"BusinessHelp": [
|
||||
"Utilice {1} para comprar artículos o {2} para ver una lista de lo que está a la venta en cualquier negocio",
|
||||
"Las empresas aparecen con nombres azules sobre el icono de su entrada",
|
||||
"Comandos del dueño del negocio: {1}",
|
||||
"Un coche nuevo en venta aparecerá cuando salgas del concesionario"
|
||||
],
|
||||
"ClanHelp": [
|
||||
"Pedir a un administrador que cree un clan (similar a las facciones/grupos/familias)",
|
||||
"Los propietarios de clanes tienen pleno control sobre su clan una vez creado",
|
||||
"Comandos de clan: {1}",
|
||||
"Más comandos del clan: {1}"
|
||||
],
|
||||
"RadioStationHelp": [
|
||||
"Utilice {1} para fijar la estación de su vehículo, casa o negocio",
|
||||
"Utilice {2} para ver una lista de estaciones",
|
||||
"Puedes cambiar el volumen de tu radio usando {1} con 0-100 como porcentaje"
|
||||
],
|
||||
"WealthAndTaxHelp": [
|
||||
"Sus impuestos en el día de pago son el {1} por ciento de su riqueza calculada",
|
||||
"Su riqueza calculada es una suma total basada en cuántos vehículos, casas y negocios tiene",
|
||||
"Cada vehículo es {1}, cada casa es {2}, y cada negocio es {3}",
|
||||
"Utilice {1} para ver su patrimonio actual, y {2} para ver cuánto pagará de impuestos cada día de pago"
|
||||
],
|
||||
"MustBeInAVehicle": "Necesitas estar en un vehículo",
|
||||
"MustBeInOrNearVehicle": "Tienes que estar dentro o cerca de un vehículo",
|
||||
"MustBeInVehicleFrontSeat": "Tienes que estar en los asientos delanteros del vehículo",
|
||||
"MustBeInVehicleDriverSeat": "Tienes que ser el conductor",
|
||||
"DontHaveVehicleKey": "No tiene una llave para este vehículo",
|
||||
"NoGateAccess": "No tienes acceso a esta puerta",
|
||||
"GateBroken": "Esta puerta está rota",
|
||||
"GateHacked": "La puerta no funciona",
|
||||
"RadioJammed": "Sólo se oye la estática de la radio",
|
||||
"VehicleNotForSale": "Este vehículo no está en venta",
|
||||
"VehicleNotForRent": "Este vehículo no se alquila",
|
||||
"BusinessNotForSale": "Este negocio no está en venta",
|
||||
"BusinessNotForRent": "Este negocio no se alquila",
|
||||
"HouseNotForSale": "Esta casa no está en venta",
|
||||
"HouseNotForRent": "Esta casa no está en alquiler",
|
||||
"DealershipPurchaseTestDrive": "Conduzca fuera del concesionario para comprar el vehículo, o salga del vehículo para cancelar",
|
||||
"DealershipPurchaseExitedVehicle": "Has cancelado la compra del vehículo al salir de él",
|
||||
"VehiclePurchaseComplete": "¡Este vehículo es ahora tuyo! Se guardará donde quiera que lo dejes",
|
||||
"VehiclePurchaseNotEnoughMoney": "No tienes suficiente dinero para comprar este vehículo",
|
||||
"HousePurchaseNotEnoughMoney": "No tienes suficiente dinero para comprar esta casa",
|
||||
"BusinessPurchaseNotEnoughMoney": "No tienes suficiente dinero para comprar este negocio",
|
||||
"Locales": {
|
||||
"English": "Inglés",
|
||||
"Russian": "Ruso",
|
||||
"Spanish": "Español",
|
||||
"German": "Alemán",
|
||||
"Dutch": "Holandés",
|
||||
"Polish": "Polaco"
|
||||
},
|
||||
"HeaderPlayerHousesList": "Casas del jugador ({1})",
|
||||
"HeaderPlayerStaffFlagsList": "Banderas administrativas del jugador ({1})",
|
||||
"HeaderStaffFlagsList": "Banderas administrativas",
|
||||
"NonRPName": "¡Nombre no RP! Elige uno nuevo:",
|
||||
"InvalidStaffFlag": "Bandera administrativa no encontrada",
|
||||
"InvalidClanFlag": "Bandera del clan no encontrada",
|
||||
"InvalidLocale": "Language not found!",
|
||||
"HeaderJobUniformList": "Job Uniforms ({1})",
|
||||
"HeaderJobEquipmentList": "Job Equipment ({1})",
|
||||
"InvalidJobUniform": "Job uniform not found!",
|
||||
"InvalidJobEquipment": "Job equipment not found!",
|
||||
"HeaderVehiclesInRangeList": "Vehicles within {1}",
|
||||
"NoVehiclesWithInRange": "There are no vehicles within {1}",
|
||||
"AmountNotNumber": "The amount must be a number!",
|
||||
"NeedToBeWorking": "You need to be working! Use {1} at a job location or near a job vehicle.",
|
||||
"NeedToBeOnJobRoute": "You need to be doing a job route! Use {1} in a job vehicle",
|
||||
"CurrentJobRouteDeleted": "The job route you were on has been deleted by an admin",
|
||||
"CurrentJobRouteVehicleColoursChanged": "Your job route's vehicle colours were changed by an admin",
|
||||
"NotYourJob": "This is not your job!",
|
||||
"JobPoints": "You can get a job by going the yellow points on the map.",
|
||||
"QuitJobToTakeAnother": "If you want this job, use {1} to quit your current job.",
|
||||
"NotAJobVehicle": "This is not a job vehicle!",
|
||||
"NotYourJobVehicle": "This is not your job's vehicle!",
|
||||
"JobRouteDisabled": "The job route you were on has been disabled by an admin",
|
||||
"HeaderPickupTypes": "Pickup Types",
|
||||
"HeaderBlipTypes": "Map Icon Types",
|
||||
"InvalidGPSLocation": "There are no locations with that name or type",
|
||||
"HeaderBusinessList": "Businesses",
|
||||
"VehicleForSale": "This {1} is buyable for {2}! Use {3} if you want to buy it",
|
||||
"VehicleForRent": "This {1} is rentable for {2}! Use {3} if you want to rent it",
|
||||
|
||||
"ADDED-31JAN2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"LoginFailedInvalidPassword": "Invalid password! {1} attempts remaining",
|
||||
"LoginFailedNoPassword": "You must enter a password! ! {1} attempts remaining",
|
||||
"RegistrationFailedNoPassword": "You must enter a password!",
|
||||
"RegistrationFailedNoPasswordConfirm": "You must confirm the password!",
|
||||
"RegistrationFailedNoEmail": "You must enter an email!",
|
||||
"AccountNameAlreadyRegistered": "Your name is already registered!",
|
||||
"AlreadyLoggedIn": "You are already logged in!",
|
||||
"RegistrationFailedInvalidEmail": "That email is invalid!",
|
||||
"RegistrationFailedPasswordMismatch": "The passwords don't match!",
|
||||
"RegistrationFailedCreateError": "Your account couldn't be created!",
|
||||
"RegistrationSuccess": "Your account has been created!",
|
||||
"RegistrationEmailVerifyReminder": "Don't forget to verify your email! A verification code has been sent to you.",
|
||||
"RegistrationCreateCharReminder": "To play on the server, you will need to make a character.",
|
||||
"NoCharactersGUIMessage": "You have no characters. Would you like to make one?",
|
||||
"NoCharactersGUIWindowTitle": "No characters",
|
||||
"NoCharactersChatMessage": "You have no characters. Use {1} to make one.",
|
||||
"NeedEmailFor2FA": "You need to add your email to your account to use two-factor authentication.",
|
||||
"NeedEmailVerifiedFor2FA": "You need to verify your email to use two-factor authentication.",
|
||||
"SetEmailHelpTip": "Use {1} to set your email.",
|
||||
"VerifyEmailHelpTip": "Use {1} to verify your email.",
|
||||
|
||||
"ADDED-13FEB2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations.",
|
||||
"NearbyRadio": "Nearby radio",
|
||||
"FromRadio": "From radio",
|
||||
"ToRadio": "To radio",
|
||||
"NeedToEnterPropertyCommand": "You need to enter the {1} first! Use {2} to enter and exit",
|
||||
"NeedToEnterPropertyKeyPress": "You need to enter the {1} first! Press {2} to enter and exit",
|
||||
"InventoryFullCantCarry": "You don't have any space to carry this (full inventory)!",
|
||||
"NotEnoughCashNeedAmountMore": "You don't have enough money! You need {1} more!",
|
||||
"AmountMustBeMoreThan": "The amount must be more than {1}!",
|
||||
"WeaponBanned": "You are not allowed to buy or use weapons!",
|
||||
"TimeNotNumber": "The time must be a number",
|
||||
"HeaderDefaultBusinessItemTypes": "Business Item Templates",
|
||||
"FixingStuck": "Fixing your position and virtual world ...",
|
||||
"CantUseCommandYet": "You must wait before you can use this command again!",
|
||||
"NotATester": "You are not a tester!",
|
||||
"AccessDenied": "AccessDenied",
|
||||
"InvalidSkin": "That skin is invalid!",
|
||||
"HeaderInteriorTypes": "Interiors List",
|
||||
"ViewInventoryKeyPressTip": "Press {1} to see your items",
|
||||
"ViewInventoryCommandTip": "Use {1} to see your items"
|
||||
}
|
||||
15
meta.xml
@@ -9,8 +9,8 @@
|
||||
<script src="scripts/shared/gamedata.js" type="server" language="javascript" />
|
||||
<script src="scripts/shared/gamedata.js" type="client" language="javascript" />
|
||||
|
||||
|
||||
<!-- Multiplayer Mod (Wrapped Natives) -->
|
||||
<!-- The goal is to just swap only these out when I port the script to a new mod, like Oakwood -->
|
||||
<script src="scripts/server/native/connected.js" type="server" language="javascript" />
|
||||
<script src="scripts/client/native/connected.js" type="client" language="javascript" />
|
||||
|
||||
@@ -47,9 +47,11 @@
|
||||
<script src="scripts/server/messaging.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/misc.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/npc.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/staff.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/race.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/radio.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/radio.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/security.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/staff.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/subaccount.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/timers.js" type="server" language="javascript" />
|
||||
<script src="scripts/server/trigger.js" type="server" language="javascript" />
|
||||
@@ -82,9 +84,7 @@
|
||||
<file type="client" src="files/fonts/roboto-regular.ttf" />
|
||||
<file type="client" src="files/fonts/pricedown.ttf" />
|
||||
<file type="client" src="files/images/skins/none.png" />
|
||||
<!--<file type="client" src="files/images/mafiac-logo.png" />-->
|
||||
<!--<file type="client" src="files/images/gtac-logo.png" />-->
|
||||
<file type="client" src="files/images/server-logo.png" />
|
||||
<file type="client" src="files/images/server-logo.png" />
|
||||
|
||||
<!-- GUI -->
|
||||
<script src="scripts/client/gui/2fa.js" type="client" language="javascript" />
|
||||
@@ -101,6 +101,7 @@
|
||||
<script src="scripts/client/gui/register.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/gui/resetpass.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/gui/yesno.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/gui/localechooser.js" type="client" language="javascript" />
|
||||
|
||||
<!-- Client Scripts -->
|
||||
<script src="scripts/client/afk.js" type="client" language="javascript" />
|
||||
@@ -109,22 +110,26 @@
|
||||
<script src="scripts/client/chatbox.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/event.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/gui.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/gps.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/house.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/item.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/job.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/keybind.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/label.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/locale.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/logo.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/main.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/messaging.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/mousecam.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/nametag.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/npc.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/radio.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/scoreboard.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/server.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/skin-select.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/sync.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/utilities.js" type="client" language="javascript" />
|
||||
<script src="scripts/client/vehicle.js" type="client" language="javascript" />
|
||||
|
||||
<!-- MexUI -->
|
||||
<file type="client" src="third-party/mexui/Images/down-arrow.png" />
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
// Init AFK script
|
||||
function initAFKScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.AFK]: Initializing AFK script ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.AFK]: AFK script initialized!");
|
||||
@@ -14,14 +15,16 @@ function initAFKScript() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
// Process stuff when game loses focus
|
||||
function processLostFocusAFK(event) {
|
||||
sendServerNewAFKStatus(true);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
// Process stuff when game gains focus
|
||||
function processFocusAFK(event) {
|
||||
sendServerNewAFKStatus(false);
|
||||
sendServerNewAFKStatus(false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -7,69 +7,142 @@
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
function makePedPlayAnimation(pedId, animGroup, animId, animType, animSpeed, loop, loopNoControl, freezeLastFrame, returnToOriginalPosition, freezePlayer) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Animation] Playing animation ${animGroup}/${animId} for ped ${pedId}`);
|
||||
if(getGame() < VRR_GAME_GTA_IV) {
|
||||
if(animType == VRR_ANIMTYPE_NORMAL || animType == VRR_ANIMTYPE_SURRENDER) {
|
||||
if(getGame() == VRR_GAME_GTA_VC || getGame() == VRR_GAME_GTA_SA) {
|
||||
getElementFromId(pedId).clearAnimations();
|
||||
} else {
|
||||
getElementFromId(pedId).clearObjective();
|
||||
}
|
||||
getElementFromId(pedId).addAnimation(animGroup, animId);
|
||||
function makePedPlayAnimation(pedId, animationSlot, positionOffset) {
|
||||
let ped = getElementFromId(pedId);
|
||||
|
||||
if(getElementFromId(pedId) == localPlayer && freezePlayer == true) {
|
||||
inAnimation = true;
|
||||
setLocalPlayerControlState(false, false);
|
||||
localPlayer.collisionsEnabled = false;
|
||||
}
|
||||
} else if(animType == VRR_ANIMTYPE_BLEND) {
|
||||
getElementFromId(pedId).position = getElementFromId(pedId).position;
|
||||
getElementFromId(pedId).blendAnimation(animGroup, animId, animSpeed);
|
||||
}
|
||||
} else {
|
||||
natives.requestAnims(animGroup);
|
||||
natives.taskPlayAnimNonInterruptable(getElementFromId(pedId), animId, animGroup, animSpeed, loop, loopNoControl, freezeLastFrame, returnToOriginalPosition, -1);
|
||||
}
|
||||
if(ped == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let animationData = getAnimationData(animationSlot);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Animation] Playing animation ${animationData[0]} for ped ${pedId}`);
|
||||
|
||||
let freezePlayer = false;
|
||||
switch(animationData.moveType) {
|
||||
case VRR_ANIMMOVE_FORWARD: {
|
||||
setElementCollisionsEnabled(ped, false);
|
||||
if(ped.isSyncer) {
|
||||
setElementPosition(ped, getPosInFrontOfPos(getElementPosition(pedId), fixAngle(getElementHeading(pedId)), positionOffset));
|
||||
}
|
||||
freezePlayer = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_ANIMMOVE_BACK: {
|
||||
setElementCollisionsEnabled(pedId, false);
|
||||
if(ped.isSyncer) {
|
||||
setElementPosition(pedId, getPosBehindPos(getElementPosition(pedId), fixAngle(getElementHeading(pedId)), positionOffset));
|
||||
}
|
||||
freezePlayer = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_ANIMMOVE_LEFT: {
|
||||
setElementCollisionsEnabled(pedId, false);
|
||||
if(ped.isSyncer) {
|
||||
setElementPosition(pedId, getPosToLeftOfPos(getElementPosition(pedId), fixAngle(getElementHeading(pedId)), positionOffset));
|
||||
}
|
||||
freezePlayer = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_ANIMMOVE_RIGHT: {
|
||||
setElementCollisionsEnabled(pedId, false);
|
||||
if(ped.isSyncer) {
|
||||
setElementPosition(pedId, getPosToRightOfPos(getElementPosition(pedId), fixAngle(getElementHeading(pedId)), positionOffset));
|
||||
}
|
||||
freezePlayer = true;
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() < VRR_GAME_GTA_IV) {
|
||||
if(animationData.animType == VRR_ANIMTYPE_NORMAL || animationData.animType == VRR_ANIMTYPE_SURRENDER) {
|
||||
if(getGame() == VRR_GAME_GTA_VC || getGame() == VRR_GAME_GTA_SA) {
|
||||
ped.clearAnimations();
|
||||
} else {
|
||||
ped.clearObjective();
|
||||
}
|
||||
ped.addAnimation(animationData.groupId, animationData.animId);
|
||||
|
||||
if(ped == localPlayer && freezePlayer == true) {
|
||||
inAnimation = true;
|
||||
setLocalPlayerControlState(false, false);
|
||||
localPlayer.collisionsEnabled = false;
|
||||
}
|
||||
} else if(animationData.animType == VRR_ANIMTYPE_BLEND) {
|
||||
ped.position = ped.position;
|
||||
ped.blendAnimation(animationData.groupId, animationData.animId, animationData.animSpeed);
|
||||
}
|
||||
} else {
|
||||
natives.requestAnims(animationData.groupId);
|
||||
natives.taskPlayAnimNonInterruptable(ped, animationData.groupId, animationData.animId, animationData.animSpeed, boolToInt(animationData.infiniteLoop), boolToInt(animationData.infiniteLoopNoMovement), boolToInt(animationData.dontReturnToStartCoords), boolToInt(animationData.freezeLastFrame), -1);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forcePedAnimation(pedId, animGroup, animId, animType, animSpeed, loop, loopNoControl, freezeLastFrame, returnToOriginalPosition) {
|
||||
if(getGame() < VRR_GAME_GTA_IV) {
|
||||
forcedAnimation = [animGroup, animId];
|
||||
getElementFromId(pedId).position = getElementFromId(pedId).position;
|
||||
getElementFromId(pedId).addAnimation(animGroup, animId);
|
||||
function forcePedAnimation(pedId, animSlot) {
|
||||
let ped = getElementFromId(pedId);
|
||||
|
||||
if(getElementFromId(pedId) == localPlayer) {
|
||||
inAnimation = true;
|
||||
setLocalPlayerControlState(false, false);
|
||||
localPlayer.collisionsEnabled = false;
|
||||
}
|
||||
}
|
||||
if(ped == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let animationData = getAnimationData(animSlot);
|
||||
|
||||
if(getGame() < VRR_GAME_GTA_IV) {
|
||||
ped.position = ped.position;
|
||||
ped.addAnimation(animationData.groupId, animationData.animId);
|
||||
|
||||
if(ped == localPlayer) {
|
||||
inAnimation = true;
|
||||
setLocalPlayerControlState(false, false);
|
||||
localPlayer.collisionsEnabled = false;
|
||||
}
|
||||
} else {
|
||||
natives.requestAnims(animationData.groupId);
|
||||
natives.taskPlayAnimNonInterruptable(ped, animationData.groupId, animationData.animId, animationData.animSpeed, boolToInt(animationData.infiniteLoop), boolToInt(animationData.infiniteLoopNoMovement), boolToInt(animationData.dontReturnToStartCoords), boolToInt(animationData.freezeLastFrame), -1);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function makePedStopAnimation(pedId) {
|
||||
if(getElementFromId(pedId) == null) {
|
||||
return false;
|
||||
}
|
||||
let ped = getElementFromId(pedId);
|
||||
|
||||
if(getGame() != VRR_GAME_GTA_IV) {
|
||||
if(getGame() == VRR_GAME_GTA_VC || getGame() == VRR_GAME_GTA_SA) {
|
||||
getElementFromId(pedId).clearAnimations();
|
||||
} else {
|
||||
getElementFromId(pedId).clearObjective();
|
||||
}
|
||||
}
|
||||
if(ped == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getElementFromId(pedId) == localPlayer) {
|
||||
if(getGame() != VRR_GAME_GTA_IV) {
|
||||
localPlayer.collisionsEnabled = true;
|
||||
}
|
||||
setLocalPlayerControlState(true, false);
|
||||
}
|
||||
if(getGame() != VRR_GAME_GTA_IV) {
|
||||
if(getGame() == VRR_GAME_GTA_VC || getGame() == VRR_GAME_GTA_SA) {
|
||||
ped.clearAnimations();
|
||||
} else {
|
||||
ped.clearObjective();
|
||||
}
|
||||
}
|
||||
|
||||
if(ped == localPlayer) {
|
||||
if(getGame() != VRR_GAME_GTA_IV) {
|
||||
localPlayer.collisionsEnabled = true;
|
||||
}
|
||||
setLocalPlayerControlState(true, false);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {number} animationSlot - The slot index of the animation
|
||||
* @return {AnimationData} The animation's data (array)
|
||||
*/
|
||||
function getAnimationData(animationSlot, gameId = getGame()) {
|
||||
return getGameConfig().animations[gameId][animationSlot];
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,85 +8,84 @@
|
||||
// ===========================================================================
|
||||
|
||||
class BusinessData {
|
||||
constructor(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) {
|
||||
this.index = -1;
|
||||
this.businessId = businessId;
|
||||
this.name = name;
|
||||
this.entrancePosition = entrancePosition;
|
||||
this.blipModel = blipModel;
|
||||
this.pickupModel = pickupModel;
|
||||
this.hasInterior = hasInterior;
|
||||
this.hasItems = hasItems;
|
||||
this.blipId = -1;
|
||||
}
|
||||
constructor(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) {
|
||||
this.index = -1;
|
||||
this.businessId = businessId;
|
||||
this.name = name;
|
||||
this.entrancePosition = entrancePosition;
|
||||
this.blipModel = blipModel;
|
||||
this.pickupModel = pickupModel;
|
||||
this.hasInterior = hasInterior;
|
||||
this.hasItems = hasItems;
|
||||
this.blipId = -1;
|
||||
this.labelInfoType = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Received business ${businessId} (${name}) from server`);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Received business ${businessId} (${name}) from server`);
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(getBusinessData(businessId) != false) {
|
||||
let businessData = getBusinessData(businessId);
|
||||
businessData.name = name;
|
||||
businessData.entrancePosition = entrancePosition;
|
||||
businessData.blipModel = blipModel;
|
||||
businessData.pickupModel = pickupModel;
|
||||
businessData.hasInterior = hasInterior;
|
||||
businessData.hasItems = hasItems;
|
||||
if(!areServerElementsSupported()) {
|
||||
if(getBusinessData(businessId) != false) {
|
||||
let businessData = getBusinessData(businessId);
|
||||
businessData.name = name;
|
||||
businessData.entrancePosition = entrancePosition;
|
||||
businessData.blipModel = blipModel;
|
||||
businessData.pickupModel = pickupModel;
|
||||
businessData.hasInterior = hasInterior;
|
||||
businessData.hasItems = hasItems;
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} already exists. Checking blip ...`);
|
||||
if(blipModel == -1) {
|
||||
if(businessData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been removed by the server`);
|
||||
natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId);
|
||||
businessData.blipId = -1;
|
||||
//businesses.splice(businessData.index, 1);
|
||||
//setAllBusinessDataIndexes();
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip is unchanged`);
|
||||
}
|
||||
} else {
|
||||
if(businessData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been changed by the server`);
|
||||
natives.setBlipCoordinates(businessData.blipId, businessData.entrancePosition);
|
||||
natives.changeBlipSprite(businessData.blipId, businessData.blipModel);
|
||||
natives.setBlipMarkerLongDistance(businessData.blipId, false);
|
||||
natives.setBlipAsShortRange(tempBusinessData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`);
|
||||
} else {
|
||||
let blipId = natives.addBlipForCoord(entrancePosition);
|
||||
if(blipId) {
|
||||
businessData.blipId = blipId;
|
||||
natives.changeBlipSprite(businessData.blipId, businessData.blipModel);
|
||||
natives.setBlipMarkerLongDistance(businessData.blipId, false);
|
||||
natives.setBlipAsShortRange(tempBusinessData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} doesn't exist. Adding ...`);
|
||||
let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
|
||||
if(blipModel != -1) {
|
||||
let blipId = natives.addBlipForCoord(entrancePosition);
|
||||
if(blipId) {
|
||||
tempBusinessData.blipId = blipId;
|
||||
natives.changeBlipSprite(tempBusinessData.blipId, blipModel);
|
||||
natives.setBlipMarkerLongDistance(tempBusinessData.blipId, false);
|
||||
natives.setBlipAsShortRange(tempBusinessData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(tempBusinessData.blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} has no blip.`);
|
||||
}
|
||||
businesses.push(tempBusinessData);
|
||||
setAllBusinessDataIndexes();
|
||||
}
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} already exists. Checking blip ...`);
|
||||
if(blipModel == -1) {
|
||||
if(businessData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been removed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId);
|
||||
} else {
|
||||
destroyElement(getElementFromId(blipId));
|
||||
}
|
||||
businessData.blipId = -1;
|
||||
//businesses.splice(businessData.index, 1);
|
||||
//setAllBusinessDataIndexes();
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip is unchanged`);
|
||||
}
|
||||
} else {
|
||||
if(businessData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been changed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.setBlipCoordinates(businessData.blipId, businessData.entrancePosition);
|
||||
natives.changeBlipSprite(businessData.blipId, businessData.blipModel);
|
||||
natives.setBlipMarkerLongDistance(businessData.blipId, false);
|
||||
natives.setBlipAsShortRange(tempBusinessData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
} else {
|
||||
let blipId = createGameBlip(tempBusinessData.blipModel, tempBusinessData.entrancePosition, tempBusinessData.name);
|
||||
if(blipId != -1) {
|
||||
tempBusinessData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} doesn't exist. Adding ...`);
|
||||
let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
|
||||
if(blipModel != -1) {
|
||||
let blipId = createGameBlip(tempBusinessData.blipModel, tempBusinessData.entrancePosition, tempBusinessData.name);
|
||||
if(blipId != -1) {
|
||||
tempBusinessData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} has no blip.`);
|
||||
}
|
||||
getServerData().businesses.push(tempBusinessData);
|
||||
setAllBusinessDataIndexes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -96,23 +95,26 @@ function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel
|
||||
* @return {BusinessData} The business's data (class instance)
|
||||
*/
|
||||
function getBusinessData(businessId) {
|
||||
//let tempBusinessData = businesses.find((b) => b.businessId == businessId);
|
||||
//return (typeof tempBusinessData != "undefined") ? tempBusinessData[0] : false;
|
||||
for(let i in businesses) {
|
||||
if(businesses[i].businessId == businessId) {
|
||||
return businesses[i];
|
||||
}
|
||||
}
|
||||
//let tempBusinessData = businesses.find((b) => b.businessId == businessId);
|
||||
//return (typeof tempBusinessData != "undefined") ? tempBusinessData[0] : false;
|
||||
|
||||
return false;
|
||||
let businesses = getServerData().businesses;
|
||||
|
||||
for(let i in businesses) {
|
||||
if(businesses[i].businessId == businessId) {
|
||||
return businesses[i];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setAllBusinessDataIndexes() {
|
||||
for(let i in businesses) {
|
||||
businesses[i].index = i;
|
||||
}
|
||||
for(let i in getServerData().businesses) {
|
||||
getServerData().businesses[i].index = i;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -16,92 +16,156 @@ let maxChatBoxHistory = 500;
|
||||
let scrollAmount = 1;
|
||||
let maxChatBoxLines = 6;
|
||||
|
||||
let chatAutoHideDelay = 0;
|
||||
let chatLastUse = 0;
|
||||
|
||||
let scrollUpKey = false;
|
||||
let scrollDownKey = false;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initChatBoxScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Initializing chatbox script ...");
|
||||
scrollUpKey = getKeyIdFromParams("pageup");
|
||||
scrollDownKey = getKeyIdFromParams("pagedown");
|
||||
bindChatBoxKeys();
|
||||
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Chatbox script initialized!");
|
||||
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Initializing chatbox script ...");
|
||||
scrollUpKey = getKeyIdFromParams("pageup");
|
||||
scrollDownKey = getKeyIdFromParams("pagedown");
|
||||
bindChatBoxKeys();
|
||||
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Chatbox script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function bindChatBoxKeys() {
|
||||
bindKey(toInteger(scrollUpKey), KEYSTATE_DOWN, chatBoxScrollUp);
|
||||
bindKey(toInteger(scrollDownKey), KEYSTATE_DOWN, chatBoxScrollDown);
|
||||
bindKey(toInteger(scrollUpKey), KEYSTATE_DOWN, chatBoxScrollUp);
|
||||
bindKey(toInteger(scrollDownKey), KEYSTATE_DOWN, chatBoxScrollDown);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unBindChatBoxKeys() {
|
||||
unbindKey(toInteger(scrollUpKey));
|
||||
unbindKey(toInteger(scrollDownKey));
|
||||
unbindKey(toInteger(scrollUpKey));
|
||||
unbindKey(toInteger(scrollDownKey));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveChatBoxMessageFromServer(messageString, colour) {
|
||||
if(bottomMessageIndex => chatBoxHistory.length-1) {
|
||||
message(messageString, colour);
|
||||
bottomMessageIndex = chatBoxHistory.length-1;
|
||||
}
|
||||
addToChatBoxHistory(messageString, colour);
|
||||
logToConsole(LOG_DEBUG, `[VRR.ChatBox]: Received chatbox message from server: ${messageString}`);
|
||||
|
||||
// Just in case it's hidden by auto hide
|
||||
//setChatWindowEnabled(true);
|
||||
|
||||
let colouredString = replaceColoursInMessage(messageString);
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.ChatBox]: Changed colours in string: ${colouredString}`);
|
||||
|
||||
addToChatBoxHistory(colouredString, colour);
|
||||
//if(bottomMessageIndex >= chatBoxHistory.length-1) {
|
||||
message(colouredString, colour);
|
||||
bottomMessageIndex = chatBoxHistory.length-1;
|
||||
//}
|
||||
|
||||
chatLastUse = getCurrentUnixTimestamp();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setChatScrollLines(amount) {
|
||||
scrollAmount = amount;
|
||||
scrollAmount = amount;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setChatAutoHideDelay(delay) {
|
||||
chatAutoHideDelay = delay*1000;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addToChatBoxHistory(messageString, colour) {
|
||||
chatBoxHistory.push([messageString, colour]);
|
||||
chatBoxHistory.push([messageString, colour]);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function chatBoxScrollUp() {
|
||||
if(bottomMessageIndex > maxChatBoxLines) {
|
||||
bottomMessageIndex = bottomMessageIndex-scrollAmount;
|
||||
updateChatBox();
|
||||
}
|
||||
if(bottomMessageIndex > maxChatBoxLines) {
|
||||
bottomMessageIndex = bottomMessageIndex-scrollAmount;
|
||||
updateChatBox();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function chatBoxScrollDown() {
|
||||
if(bottomMessageIndex < chatBoxHistory.length-1) {
|
||||
bottomMessageIndex = bottomMessageIndex+scrollAmount;
|
||||
updateChatBox();
|
||||
}
|
||||
if(bottomMessageIndex < chatBoxHistory.length-1) {
|
||||
bottomMessageIndex = bottomMessageIndex+scrollAmount;
|
||||
updateChatBox();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function clearChatBox() {
|
||||
for(let i = 0 ; i <= maxChatBoxLines ; i++) {
|
||||
message("", COLOUR_WHITE);
|
||||
}
|
||||
for(let i = 0 ; i <= maxChatBoxLines ; i++) {
|
||||
message("", COLOUR_WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function updateChatBox() {
|
||||
clearChatBox();
|
||||
for(let i = bottomMessageIndex-maxChatBoxLines ; i <= bottomMessageIndex ; i++) {
|
||||
if(typeof chatBoxHistory[i] != "undefined") {
|
||||
message(chatBoxHistory[i][0], chatBoxHistory[i][1]);
|
||||
} else {
|
||||
message("", COLOUR_WHITE);
|
||||
}
|
||||
}
|
||||
clearChatBox();
|
||||
for(let i = bottomMessageIndex-maxChatBoxLines ; i <= bottomMessageIndex ; i++) {
|
||||
if(typeof chatBoxHistory[i] != "undefined") {
|
||||
message(chatBoxHistory[i][0], chatBoxHistory[i][1]);
|
||||
} else {
|
||||
message("", COLOUR_WHITE);
|
||||
}
|
||||
}
|
||||
chatLastUse = getCurrentUnixTimestamp();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processMouseWheelForChatBox(mouseId, deltaCoordinates, flipped) {
|
||||
// There isn't a way to detect whether chat input is active, but mouse cursor is forced shown when typing so ¯\_(ツ)_/¯
|
||||
if(!gui.cursorEnabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!flipped) {
|
||||
if(deltaCoordinates.y > 0) {
|
||||
chatBoxScrollUp();
|
||||
} else {
|
||||
chatBoxScrollDown();
|
||||
}
|
||||
} else {
|
||||
if(deltaCoordinates.y > 0) {
|
||||
chatBoxScrollDown();
|
||||
} else {
|
||||
chatBoxScrollUp();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function checkChatAutoHide() {
|
||||
return false;
|
||||
|
||||
// Make sure chat input isn't active
|
||||
if(gui.cursorEnabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Don't process auto-hide if it's disabled
|
||||
if(chatAutoHideDelay == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getCurrentUnixTimestamp()-chatLastUse >= chatAutoHideDelay) {
|
||||
setChatWindowEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,58 +8,58 @@
|
||||
// ===========================================================================
|
||||
|
||||
function getCustomImage(imageName) {
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let image = contentResource.exports.getCustomImage(imageName);
|
||||
if(image != null) {
|
||||
return image;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let image = contentResource.exports.getCustomImage(imageName);
|
||||
if(image != null) {
|
||||
return image;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getCustomFont(fontName) {
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let font = contentResource.exports.getCustomFont(fontName);
|
||||
if(font != null) {
|
||||
return font;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let font = contentResource.exports.getCustomFont(fontName);
|
||||
if(font != null) {
|
||||
return font;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getCustomAudio(audioName) {
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let audioFile = contentResource.exports.getCustomAudio(audioName);
|
||||
if(audioFile != null) {
|
||||
return audioFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
let audioFile = contentResource.exports.getCustomAudio(audioName);
|
||||
if(audioFile != null) {
|
||||
return audioFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function playCustomAudio(audioName, volume = 0.5, loop = false) {
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
contentResource.exports.playCustomAudio(audioName, volume, loop);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
let contentResource = findResourceByName(getGameConfig().extraContentResource[getGame()]);
|
||||
if(contentResource != null) {
|
||||
if(contentResource.isStarted) {
|
||||
contentResource.exports.playCustomAudio(audioName, volume, loop);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,222 +8,248 @@
|
||||
// ===========================================================================
|
||||
|
||||
function initEventScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Event]: Initializing event script ...");
|
||||
addCustomEvents();
|
||||
addAllEventHandlers();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Event]: Event script initialized!");
|
||||
logToConsole(LOG_DEBUG, "[VRR.Event]: Initializing event script ...");
|
||||
addCustomEvents();
|
||||
addAllEventHandlers();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Event]: Event script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addCustomEvents() {
|
||||
addEvent("OnLocalPlayerEnterSphere", 1);
|
||||
addEvent("OnLocalPlayerExitSphere", 1);
|
||||
addEvent("OnLocalPlayerEnteredVehicle", 1);
|
||||
addEvent("OnLocalPlayerExitedVehicle", 1);
|
||||
addEvent("OnLocalPlayerSwitchWeapon", 2);
|
||||
addEvent("OnLocalPlayerEnterSphere", 1);
|
||||
addEvent("OnLocalPlayerExitSphere", 1);
|
||||
addEvent("OnLocalPlayerEnteredVehicle", 1);
|
||||
addEvent("OnLocalPlayerExitedVehicle", 1);
|
||||
addEvent("OnLocalPlayerSwitchWeapon", 2);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addAllEventHandlers() {
|
||||
bindEventHandler("OnResourceStart", thisResource, onResourceStart);
|
||||
bindEventHandler("OnResourceReady", thisResource, onResourceReady);
|
||||
bindEventHandler("OnResourceStop", thisResource, onResourceStop);
|
||||
bindEventHandler("OnResourceStart", thisResource, onResourceStart);
|
||||
bindEventHandler("OnResourceReady", thisResource, onResourceReady);
|
||||
bindEventHandler("OnResourceStop", thisResource, onResourceStop);
|
||||
|
||||
addEventHandler("OnProcess", onProcess);
|
||||
addEventHandler("OnKeyUp", onKeyUp);
|
||||
addEventHandler("OnDrawnHUD", onDrawnHUD);
|
||||
addEventHandler("OnProcess", onProcess);
|
||||
addEventHandler("OnKeyUp", onKeyUp);
|
||||
addEventHandler("OnDrawnHUD", onDrawnHUD);
|
||||
|
||||
addEventHandler("OnPedWasted", onPedWasted);
|
||||
addEventHandler("OnPedWasted", onPedWasted);
|
||||
|
||||
addEventHandler("OnElementStreamIn", onElementStreamIn);
|
||||
addEventHandler("OnElementStreamIn", onElementStreamIn);
|
||||
|
||||
addEventHandler("OnLocalPlayerEnteredVehicle", onLocalPlayerEnteredVehicle);
|
||||
addEventHandler("OnLocalPlayerExitedVehicle", onLocalPlayerExitedVehicle);
|
||||
addEventHandler("OnLocalPlayerEnterSphere", onLocalPlayerEnterSphere);
|
||||
addEventHandler("OnLocalPlayerExitSphere", onLocalPlayerExitSphere);
|
||||
addEventHandler("OnLocalPlayerSwitchWeapon", onLocalPlayerSwitchWeapon);
|
||||
addEventHandler("OnLocalPlayerEnteredVehicle", onLocalPlayerEnteredVehicle);
|
||||
addEventHandler("OnLocalPlayerExitedVehicle", onLocalPlayerExitedVehicle);
|
||||
addEventHandler("OnLocalPlayerEnterSphere", onLocalPlayerEnterSphere);
|
||||
addEventHandler("OnLocalPlayerExitSphere", onLocalPlayerExitSphere);
|
||||
addEventHandler("OnLocalPlayerSwitchWeapon", onLocalPlayerSwitchWeapon);
|
||||
|
||||
addEventHandler("OnPedInflictDamage", onPedInflictDamage);
|
||||
addEventHandler("OnPedInflictDamage", onPedInflictDamage);
|
||||
|
||||
addEventHandler("OnLostFocus", onLostFocus);
|
||||
addEventHandler("OnFocus", onFocus);
|
||||
addEventHandler("OnLostFocus", onLostFocus);
|
||||
addEventHandler("OnFocus", onFocus);
|
||||
|
||||
addEventHandler("OnCameraProcess", onCameraProcess);
|
||||
addEventHandler("OnCameraProcess", onCameraProcess);
|
||||
|
||||
addEventHandler("OnMouseWheel", onMouseWheel);
|
||||
|
||||
addEventHandler("OnEntityProcess", onEntityProcess);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onResourceStart(event, resource) {
|
||||
sendResourceStartedSignalToServer();
|
||||
setUpInitialGame();
|
||||
garbageCollectorInterval = setInterval(collectAllGarbage, 1000*60);
|
||||
sendResourceStartedSignalToServer();
|
||||
//garbageCollectorInterval = setInterval(collectAllGarbage, 1000*60);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onResourceStop(event, resource) {
|
||||
sendResourceStoppedSignalToServer();
|
||||
sendResourceStoppedSignalToServer();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onResourceReady(event, resource) {
|
||||
sendResourceReadySignalToServer();
|
||||
sendResourceReadySignalToServer();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onProcess(event, deltaTime) {
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if (localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isSpawned) {
|
||||
return false;
|
||||
}
|
||||
if (!isSpawned) {
|
||||
return false;
|
||||
}
|
||||
|
||||
processSync();
|
||||
processLocalPlayerControlState();
|
||||
processLocalPlayerVehicleControlState();
|
||||
processLocalPlayerSphereEntryExitHandling();
|
||||
processLocalPlayerVehicleEntryExitHandling();
|
||||
processJobRouteSphere();
|
||||
forceLocalPlayerEquippedWeaponItem();
|
||||
processWantedLevelReset();
|
||||
processGameSpecifics();
|
||||
processNearbyPickups();
|
||||
processVehiclePurchasing();
|
||||
processVehicleBurning();
|
||||
//checkChatBoxAutoHide(); // Will be uncommented on 1.4.0 GTAC update
|
||||
//processVehicleFires();
|
||||
|
||||
processSync();
|
||||
processLocalPlayerControlState();
|
||||
processLocalPlayerVehicleControlState();
|
||||
processLocalPlayerSphereEntryExitHandling();
|
||||
processLocalPlayerVehicleEntryExitHandling();
|
||||
processJobRouteSphere();
|
||||
forceLocalPlayerEquippedWeaponItem();
|
||||
processWantedLevelReset();
|
||||
processGameSpecifics();
|
||||
processNearbyPickups();
|
||||
processVehiclePurchasing();
|
||||
//processVehicleFires();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onKeyUp(event, keyCode, scanCode, keyModifiers) {
|
||||
processSkinSelectKeyPress(keyCode);
|
||||
//processKeyDuringAnimation();
|
||||
processGUIKeyPress(keyCode);
|
||||
processToggleGUIKeyPress(keyCode);
|
||||
processSkinSelectKeyPress(keyCode);
|
||||
//processKeyDuringAnimation();
|
||||
processGUIKeyPress(keyCode);
|
||||
processToggleGUIKeyPress(keyCode);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onDrawnHUD(event) {
|
||||
if(!renderHUD) {
|
||||
return false;
|
||||
}
|
||||
if (!renderHUD) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if (localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
processSmallGameMessageRendering();
|
||||
processScoreBoardRendering();
|
||||
processLabelRendering();
|
||||
processLogoRendering();
|
||||
processItemActionRendering();
|
||||
processSkinSelectRendering();
|
||||
processNameTagRendering();
|
||||
processInteriorLightsRendering();
|
||||
processSmallGameMessageRendering();
|
||||
processScoreBoardRendering();
|
||||
processLabelRendering();
|
||||
processLogoRendering();
|
||||
processItemActionRendering();
|
||||
processSkinSelectRendering();
|
||||
processNameTagRendering();
|
||||
processInteriorLightsRendering();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onPedWasted(event, wastedPed, killerPed, weapon, pedPiece) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Ped ${wastedPed.name} died`);
|
||||
wastedPed.clearWeapons();
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Ped ${wastedPed.name} died`);
|
||||
wastedPed.clearWeapons();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onElementStreamIn(event, element) {
|
||||
syncElementProperties(element);
|
||||
syncElementProperties(element);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLocalPlayerExitedVehicle(event, vehicle, seat) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited vehicle`);
|
||||
sendNetworkEventToServer("vrr.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited vehicle`);
|
||||
sendNetworkEventToServer("vrr.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||
|
||||
if(inVehicleSeat) {
|
||||
parkedVehiclePosition = false;
|
||||
parkedVehicleHeading = false;
|
||||
}
|
||||
if (inVehicleSeat) {
|
||||
parkedVehiclePosition = false;
|
||||
parkedVehicleHeading = false;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLocalPlayerEnteredVehicle(event, vehicle, seat) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player entered vehicle`);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player entered vehicle`);
|
||||
|
||||
sendNetworkEventToServer("vrr.onPlayerEnterVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||
sendNetworkEventToServer("vrr.onPlayerEnterVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||
|
||||
if(areServerElementsSupported()) {
|
||||
if(inVehicleSeat == 0) {
|
||||
inVehicle.engine = false;
|
||||
if(!inVehicle.engine) {
|
||||
parkedVehiclePosition = inVehicle.position;
|
||||
parkedVehicleHeading = inVehicle.heading;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (areServerElementsSupported()) {
|
||||
//if(inVehicleSeat == 0) {
|
||||
//setVehicleEngine(vehicle, false);
|
||||
//if(!inVehicle.engine) {
|
||||
// parkedVehiclePosition = inVehicle.position;
|
||||
// parkedVehicleHeading = inVehicle.heading;
|
||||
//}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onPedInflictDamage(event, damagedEntity, damagerEntity, weaponId, healthLoss, pedPiece) {
|
||||
//let damagerEntityString = (!isNull(damagedEntity)) ? `${damagerEntity.name} (${damagerEntity.name}, ${damagerEntity.type} - ${typeof damagerEntity})` : `Unknown ped`;
|
||||
//let damagedEntityString = (!isNull(damagedEntity)) ? `${damagedEntity.name} (${damagedEntity.name}, ${damagedEntity.type} - ${typeof damagedEntity})` : `Unknown ped`;
|
||||
//logToConsole(LOG_DEBUG, `[VRR.Event] ${damagerEntityString} damaged ${damagedEntityString}'s '${pedPiece} with weapon ${weaponId}`);
|
||||
if(!isNull(damagedEntity) && !isNull(damagerEntity)) {
|
||||
if(damagedEntity.isType(ELEMENT_PLAYER)) {
|
||||
if(damagedEntity == localPlayer) {
|
||||
//if(!weaponDamageEnabled[damagerEntity.name]) {
|
||||
event.preventDefault();
|
||||
sendNetworkEventToServer("vrr.weaponDamage", damagerEntity.name, weaponId, pedPiece, healthLoss);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
//let damagerEntityString = (!isNull(damagedEntity)) ? `${damagerEntity.name} (${damagerEntity.name}, ${damagerEntity.type} - ${typeof damagerEntity})` : `Unknown ped`;
|
||||
//let damagedEntityString = (!isNull(damagedEntity)) ? `${damagedEntity.name} (${damagedEntity.name}, ${damagedEntity.type} - ${typeof damagedEntity})` : `Unknown ped`;
|
||||
//logToConsole(LOG_DEBUG, `[VRR.Event] ${damagerEntityString} damaged ${damagedEntityString}'s '${pedPiece} with weapon ${weaponId}`);
|
||||
if (!isNull(damagedEntity) && !isNull(damagerEntity)) {
|
||||
if (damagedEntity.isType(ELEMENT_PLAYER)) {
|
||||
if (damagedEntity == localPlayer) {
|
||||
//if(!weaponDamageEnabled[damagerEntity.name]) {
|
||||
preventDefaultEventAction(event);
|
||||
sendNetworkEventToServer("vrr.weaponDamage", damagerEntity.name, weaponId, pedPiece, healthLoss);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLocalPlayerEnterSphere(event, sphere) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player entered sphere`);
|
||||
if(sphere == jobRouteLocationSphere) {
|
||||
enteredJobRouteSphere();
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player entered sphere`);
|
||||
if (sphere == jobRouteLocationSphere) {
|
||||
enteredJobRouteSphere();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLocalPlayerExitSphere(event, sphere) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited sphere`);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited sphere`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLostFocus(event) {
|
||||
processLostFocusAFK();
|
||||
processLostFocusAFK();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onFocus(event) {
|
||||
processFocusAFK();
|
||||
processFocusAFK();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onLocalPlayerSwitchWeapon(oldWeapon, newWeapon) {
|
||||
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onCameraProcess(event) {
|
||||
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onMouseWheel(event, mouseId, deltaCoordinates, flipped) {
|
||||
processMouseWheelForChatBox(mouseId, deltaCoordinates, flipped);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onEntityProcess(event, entity) {
|
||||
if (!isSpawned) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//if(entity.isType(ELEMENT_PED) && !entity.isType(ELEMENT_PLAYER)) {
|
||||
// processNPCMovement(entity);
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
65
scripts/client/gps.js
Normal file
@@ -0,0 +1,65 @@
|
||||
// ===========================================================================
|
||||
// Vortrex's Roleplay Resource
|
||||
// https://github.com/VortrexFTW/gtac_roleplay
|
||||
// ===========================================================================
|
||||
// FILE: gps.js
|
||||
// DESC: Provides GPS functions and usage
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let gpsBlip = null;
|
||||
let gpsBlipBlinkTimes = 0;
|
||||
let gpsBlipBlinkAmount = 0;
|
||||
let gpsBlipBlinkInterval = 500;
|
||||
let gpsBlipBlinkTimer = null;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showGPSLocation(position, colour) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GPS] Showing gps location`);
|
||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
// Server-side spheres don't show in GTA SA for some reason.
|
||||
gpsSphere = game.createPickup(1318, position, 1);
|
||||
} else {
|
||||
gpsSphere = game.createSphere(position, 3);
|
||||
gpsSphere.colour = colour;
|
||||
}
|
||||
|
||||
if(gpsBlip != null) {
|
||||
destroyElement(gpsBlip);
|
||||
}
|
||||
|
||||
// Blinking is bugged if player hit the spot before it stops blinking.
|
||||
blinkGPSBlip(10, position, colour);
|
||||
gpsBlip = game.createBlip(position, 0, 2, colour);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function blinkGPSBlip(times, position, colour) {
|
||||
gpsBlipBlinkTimes = times;
|
||||
gpsBlipBlinkTimer = setInterval(function() {
|
||||
if(gpsBlip != null) {
|
||||
destroyElement(gpsBlip);
|
||||
gpsBlip = null;
|
||||
} else {
|
||||
gpsBlip = game.createBlip(position, 0, 2, colour);
|
||||
}
|
||||
|
||||
if(gpsBlipBlinkAmount >= gpsBlipBlinkTimes) {
|
||||
if(gpsBlip != null) {
|
||||
destroyElement(gpsBlip);
|
||||
gpsBlip = null;
|
||||
}
|
||||
|
||||
gpsBlipBlinkAmount = 0;
|
||||
gpsBlipBlinkTimes = 0;
|
||||
gpsBlip = game.createBlip(position, 0, 2, colour);
|
||||
clearInterval(gpsBlipBlinkTimer);
|
||||
}
|
||||
}, gpsBlipBlinkInterval);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -12,7 +12,7 @@ var app = {};
|
||||
let mainFont = "Roboto"; // "Arial"
|
||||
|
||||
//let mainLogoPath = (typeof gta == "undefined") ? "files/images/mafiac-logo.png" : "files/images/gtac-logo.png";
|
||||
let mainLogoPath = "files/images/server-logo.png";
|
||||
let mainLogoPath = "files/images/asshat-logo.png";
|
||||
|
||||
let primaryColour = [200, 200, 200];
|
||||
let secondaryColour = [16, 16, 16];
|
||||
@@ -29,27 +29,6 @@ let textInputAlpha = 180;
|
||||
|
||||
let guiReady = false;
|
||||
|
||||
let guiSubmitKey = false;
|
||||
let guiLeftKey = false;
|
||||
let guiRightKey = false;
|
||||
let guiUpKey = false;
|
||||
let guiDownKey = false;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let placesOfOrigin = [
|
||||
"Liberty City",
|
||||
"Vice City",
|
||||
"Los Santos",
|
||||
"San Fierro",
|
||||
"Las Venturas",
|
||||
"San Andreas",
|
||||
"Blaine County",
|
||||
"Red County",
|
||||
"Bone County",
|
||||
"Other",
|
||||
];
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let characterData = [];
|
||||
@@ -81,11 +60,19 @@ function initGUI() {
|
||||
initListGUI();
|
||||
initResetPasswordGUI();
|
||||
initChangePasswordGUI();
|
||||
initLocaleChooserGUI();
|
||||
|
||||
closeAllWindows();
|
||||
guiReady = true;
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] All GUI created successfully!`);
|
||||
|
||||
loadLocaleConfig();
|
||||
loadAllLocaleStrings();
|
||||
|
||||
resetGUIStrings();
|
||||
resetLocaleChooserOptions();
|
||||
|
||||
sendNetworkEventToServer("vrr.guiReady", true);
|
||||
};
|
||||
|
||||
@@ -102,8 +89,9 @@ function closeAllWindows() {
|
||||
characterSelect.window.shown = false;
|
||||
twoFactorAuth.window.shown = false;
|
||||
listDialog.window.shown = false;
|
||||
resetPassword.window.shown = false;
|
||||
passwordReset.window.shown = false;
|
||||
passwordChange.window.shown = false;
|
||||
localeChooser.window.shown = false;
|
||||
|
||||
mexui.setInput(false);
|
||||
mexui.focusedControl = false;
|
||||
@@ -113,56 +101,62 @@ function closeAllWindows() {
|
||||
guiRightKey = false;
|
||||
guiUpKey = false;
|
||||
guiDownKey = false;
|
||||
|
||||
setChatWindowEnabled(true);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isAnyGUIActive() {
|
||||
if(!guiReady) {
|
||||
if (!guiReady) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(infoDialog.window.shown == true) {
|
||||
if (infoDialog.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(yesNoDialog.window.shown == true) {
|
||||
if (yesNoDialog.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(errorDialog.window.shown == true) {
|
||||
if (errorDialog.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(register.window.shown == true) {
|
||||
if (register.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(login.window.shown == true) {
|
||||
if (login.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(newCharacter.window.shown == true) {
|
||||
if (newCharacter.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(characterSelect.window.shown == true) {
|
||||
if (characterSelect.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(twoFactorAuth.window.shown == true) {
|
||||
if (twoFactorAuth.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(listDialog.window.shown == true) {
|
||||
if (listDialog.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(resetPassword.window.shown == true) {
|
||||
if (passwordReset.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(passwordChange.window.shown == true) {
|
||||
if (passwordChange.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (localeChooser.window.shown == true) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -171,150 +165,63 @@ function isAnyGUIActive() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.showCharacterSelect", function(firstName, lastName, cash, clan, lastPlayed, skinId) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received request from server to show character selection window`);
|
||||
showCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, skinId);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.switchCharacterSelect", function(firstName, lastName, cash, clan, lastPlayed, skinId) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received request from server to update character selection window with new info`);
|
||||
switchCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, skinId);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.showError", function(errorMessage, errorTitle) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received request from server to show error window`);
|
||||
showError(errorMessage, errorTitle);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.showPrompt", function(promptMessage, promptTitle) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received request from server to show prompt window`);
|
||||
showYesNoPromptGUI(promptMessage, promptTitle);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.showInfo", function(infoMessage) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received request from server to show info dialog`);
|
||||
showInfo(infoMessage);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.loginSuccess", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of successful login from server`);
|
||||
loginSuccess();
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.characterSelectSuccess", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of successful character selection from server`);
|
||||
characterSelectSuccess();
|
||||
setChatWindowEnabled(true);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.loginFailed", function(remainingAttempts) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of failed login from server`);
|
||||
loginFailed(remainingAttempts);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.registrationSuccess", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of successful registration from server`);
|
||||
registrationSuccess();
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.registrationFailed", function(errorMessage) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of failed registration from server`);
|
||||
registrationFailed(errorMessage);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.newCharacterFailed", function(errorMessage) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal of failed registration from server`);
|
||||
newCharacterFailed(errorMessage);
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.changePassword", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal to change password from server`);
|
||||
showChangePasswordGUI();
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.showResetPasswordCodeInput", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received signal to input reset password code from server`);
|
||||
resetPasswordCodeInputGUI();
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.guiColour", function(red1, green1, blue1, red2, green2, blue2, red3, green3, blue3) {
|
||||
function setGUIColours(red1, green1, blue1, red2, green2, blue2, red3, green3, blue3) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Received new GUI colours from server: ${red1}, ${green1}, ${blue1} / ${red2}, ${green2}, ${blue2} / ${red3}, ${green3}, ${blue3}`);
|
||||
primaryColour = [red1, green1, blue1];
|
||||
secondaryColour = [red2, green2, blue2];
|
||||
primaryTextColour = [red3, green3, blue3];
|
||||
focusedColour = [red1+focusedColourOffset, green1+focusedColourOffset, blue1+focusedColourOffset];
|
||||
focusedColour = [red1 + focusedColourOffset, green1 + focusedColourOffset, blue1 + focusedColourOffset];
|
||||
|
||||
initGUI();
|
||||
});
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
addNetworkEventHandler("vrr.guiInit", function() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Initializing MexUI app`);
|
||||
//initGUI();
|
||||
sendNetworkEventToServer("vrr.guiReady", true);
|
||||
});
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function hideAllGUI() {
|
||||
closeAllWindows();
|
||||
setChatWindowEnabled(true);
|
||||
closeAllWindows();
|
||||
setChatWindowEnabled(true);
|
||||
guiSubmitKey = false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processGUIKeyPress(keyCode) {
|
||||
if(!isAnyGUIActive()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Processing key press: ${keyCode}`);
|
||||
|
||||
if (!isAnyGUIActive()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] GUI is not active. Cancelling keypress processing.`);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(keyCode == SDLK_RETURN || keyCode == SDLK_RETURN2) {
|
||||
if(guiSubmitKey != false) {
|
||||
guiSubmitKey();
|
||||
if (keyCode == SDLK_RETURN || keyCode == SDLK_RETURN2) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is submit (${guiSubmitKey})`);
|
||||
if (guiSubmitKey != false) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling submit key function`);
|
||||
guiSubmitKey.call();
|
||||
}
|
||||
} else if(keyCode == getKeyIdFromParams("left") || keyCode == getKeyIdFromParams("a")) {
|
||||
if(guiLeftKey != false) {
|
||||
guiLeftKey();
|
||||
} else if (keyCode == getKeyIdFromParams("left") || keyCode == getKeyIdFromParams("a")) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is left (${guiLeftKey})`);
|
||||
if (guiLeftKey != false) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling left key function`);
|
||||
guiLeftKey.call();
|
||||
}
|
||||
} else if(keyCode == getKeyIdFromParams("right") || keyCode == getKeyIdFromParams("d")) {
|
||||
if(guiRightKey != false) {
|
||||
guiRightKey();
|
||||
} else if (keyCode == getKeyIdFromParams("right") || keyCode == getKeyIdFromParams("d")) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is right (${guiRightKey})`);
|
||||
if (guiRightKey != false) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling right key function`);
|
||||
guiRightKey.call();
|
||||
}
|
||||
} else if(keyCode == getKeyIdFromParams("down") || keyCode == getKeyIdFromParams("s")) {
|
||||
if(guiDownKey != false) {
|
||||
guiDownKey();
|
||||
} else if (keyCode == getKeyIdFromParams("down") || keyCode == getKeyIdFromParams("s")) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is down (${guiDownKey})`);
|
||||
if (guiDownKey != false) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling down key function`);
|
||||
guiDownKey.call();
|
||||
}
|
||||
} else if(keyCode == getKeyIdFromParams("up") || keyCode == getKeyIdFromParams("w")) {
|
||||
if(guiUpKey != false) {
|
||||
guiUpKey();
|
||||
} else if (keyCode == getKeyIdFromParams("up") || keyCode == getKeyIdFromParams("w")) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is up (${guiUpKey})`);
|
||||
if (guiUpKey != false) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling up key function`);
|
||||
guiUpKey.call();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -322,9 +229,55 @@ function processGUIKeyPress(keyCode) {
|
||||
// ===========================================================================
|
||||
|
||||
function processToggleGUIKeyPress(keyCode) {
|
||||
if(keyCode == disableGUIKey) {
|
||||
if (keyCode == disableGUIKey) {
|
||||
sendNetworkEventToServer("vrr.toggleGUI");
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function resetGUIStrings() {
|
||||
// Login GUI
|
||||
login.messageLabel.text = getLocaleString("GUILoginWindowLabelEnterPassword");
|
||||
login.passwordInput.placeholder = getLocaleString("GUILoginWindowPasswordPlaceholder");
|
||||
login.loginButton.text = toUpperCase(getLocaleString("GUILoginWindowSubmitButton"));
|
||||
login.forgotPasswordButton.text = toUpperCase(getLocaleString("GUILoginWindowResetPasswordButton"));
|
||||
login.resetPasswordLabel.text = getLocaleString("GUILoginWindowForgotPasswordLabel");
|
||||
|
||||
// Register GUI
|
||||
register.messageLabel.text = getLocaleString("GUIRegisterWindowLabelCreateAccount");
|
||||
register.passwordInput.placeholder = getLocaleString("GUIRegisterWindowPasswordPlaceholder");
|
||||
register.confirmPasswordInput.placeholder = getLocaleString("GUIRegisterWindowConfirmPasswordPlaceholder");
|
||||
register.emailInput.placeholder = getLocaleString("GUIRegisterWindowEmailPlaceholder");
|
||||
register.registerButton.text = toUpperCase(getLocaleString("GUIRegisterWindowSubmitButton"));
|
||||
|
||||
// Change Password GUI
|
||||
passwordChange.window.title = toUpperCase(getLocaleString("GUIChangePasswordWindowTitle"));
|
||||
passwordChange.messageLabel.text = getLocaleString("GUIChangePasswordPasswordLabel");
|
||||
passwordChange.passwordInput.placeholder = getLocaleString("GUIChangePasswordPasswordPlaceholder");
|
||||
passwordChange.confirmPasswordInput.placeholder = getLocaleString("GUIChangePasswordConfirmPasswordPlaceholder");
|
||||
passwordChange.submitButton.text = toUpperCase(getLocaleString("GUIChangePasswordSubmitButton"));
|
||||
|
||||
// Reset Password GUI
|
||||
passwordReset.messageLabel.text = toUpperCase(getLocaleString("GUIResetPasswordConfirmEmailLabel"));
|
||||
passwordReset.emailInput.placeholder = getLocaleString("GUIResetPasswordEmailPlaceholder");
|
||||
passwordReset.resetPasswordButton.text = toUpperCase(getLocaleString("GUIResetPasswordSubmitButton"));
|
||||
passwordReset.backToLoginButton.text = toUpperCase(getLocaleString("GUIResetPasswordLoginButton"));
|
||||
passwordReset.backToLoginLabel.text = getLocaleString("GUIResetPasswordRememberMessage");
|
||||
|
||||
// Character Selection GUI
|
||||
characterSelect.window.title = toUpperCase(getLocaleString("GUICharacterSelectWindowTitle"));
|
||||
characterSelect.cashText.text = getLocaleString("GUICharacterSelectMoneyLabel", "0");
|
||||
characterSelect.clanText.text = getLocaleString("GUICharacterSelectClanLabel", "None");
|
||||
characterSelect.lastPlayedText.text = getLocaleString("GUICharacterSelectLastPlayedLabel", "Never");
|
||||
characterSelect.previousCharacterButton.text = toUpperCase(getLocaleString("GUIPreviousCharacterButton"));
|
||||
characterSelect.nextCharacterButton.text = toUpperCase(getLocaleString("GUINextCharacterButton"));
|
||||
characterSelect.selectCharacterButton.text = toUpperCase(getLocaleString("GUIPlayAsCharacterButton"));
|
||||
characterSelect.newCharacterButton.text = toUpperCase(getLocaleString("GUINewCharacterButton"));
|
||||
|
||||
// Character Creation GUI
|
||||
newCharacter.messageLabel.text = getLocaleString("GUINewCharacterMessageLabel");
|
||||
newCharacter.firstNameInput.placeholder = getLocaleString("GUINewCharacterFirstNamePlaceholder");
|
||||
newCharacter.lastNameInput.placeholder = getLocaleString("GUINewCharacterLastNamePlaceholder");
|
||||
newCharacter.createCharacterButton.text = toUpperCase(getLocaleString("GUINewCharacterSubmitButton"));
|
||||
}
|
||||
@@ -19,8 +19,8 @@ let passwordChange = {
|
||||
// ===========================================================================
|
||||
|
||||
function initChangePasswordGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating password change GUI ...`);
|
||||
passwordChange.window = mexui.window(game.width/2-130, game.height/2-125, 300, 250, 'Change Password', {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating password change GUI ...`);
|
||||
passwordChange.window = mexui.window(game.width / 2 - 130, game.height / 2 - 125, 300, 250, 'Change Password', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
@@ -36,16 +36,17 @@ function initChangePasswordGUI() {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
}
|
||||
});
|
||||
passwordChange.window.titleBarIconSize = toVector2(0,0);
|
||||
passwordChange.window.titleBarIconSize = toVector2(0, 0);
|
||||
passwordChange.window.titleBarHeight = 0;
|
||||
passwordChange.window.titleBarShown = false;
|
||||
|
||||
passwordChange.window.image(85, -10, 140, 140, mainLogoPath, {
|
||||
passwordChange.window.image(100, 20, 75, 75, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
passwordChange.messageLabel = passwordChange.window.text(20, 75, 260, 20, 'Enter a new password', {
|
||||
passwordChange.messageLabel = passwordChange.window.text(20, 95, 260, 20, 'Enter a new password', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
@@ -132,14 +133,17 @@ function checkChangePassword() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showChangePasswordGUI() {
|
||||
function showChangePasswordGUI(errorMessage) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing change password window`);
|
||||
closeAllWindows();
|
||||
setChatWindowEnabled(false);
|
||||
mexui.setInput(true);
|
||||
passwordChange.window.shown = true;
|
||||
passwordChange.messageLabel = errorMessage;
|
||||
mexui.focusedControl = passwordChange.passwordInput;
|
||||
guiSubmitKey = checkChangePassword;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth() / 2 - (localeChooser.window.size.x / 2), passwordChange.window.position.y + passwordChange.window.size.y + 20));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -24,23 +24,26 @@ let characterSelect = {
|
||||
|
||||
function initCharacterSelectGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating character select GUI ...`);
|
||||
characterSelect.window = mexui.window(game.width/2-215, game.height/2-83, 430, 190, 'Select Character', {
|
||||
characterSelect.window = mexui.window(game.width/2-215, game.height/2-83, 430, 190, 'SELECT CHARACTER', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
},
|
||||
title: {
|
||||
textSize: 12.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
textSize: 12.0,
|
||||
textFont: mainFont,
|
||||
textColour: toColour(0, 0, 0, 255),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 12.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
textColour: toColour(0, 0, 0, 255),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
}
|
||||
});
|
||||
characterSelect.window.titleBarIconSize = toVector2(0,0);
|
||||
characterSelect.window.titleBarHeight = 0;
|
||||
characterSelect.window.titleBarIconSize = toVector2(0, 0);
|
||||
characterSelect.window.titleBarIconShown = false;
|
||||
characterSelect.window.titleBarHeight = 30;
|
||||
|
||||
characterSelect.nameText = characterSelect.window.text(5, 40, 200, 25, 'Lastname, Firstname', {
|
||||
main: {
|
||||
@@ -163,6 +166,12 @@ function showCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, ski
|
||||
characterSelect.lastPlayedText.text = `Last Played: ${lastPlayed}`;
|
||||
characterSelect.skinImage = characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png");
|
||||
characterSelect.window.shown = true;
|
||||
|
||||
guiSubmitKey = selectThisCharacter;
|
||||
guiLeftKey = selectPreviousCharacter;
|
||||
guiRightKey = selectNextCharacter;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth()/2-(localeChooser.window.size.x/2), characterSelect.window.position.y+characterSelect.window.size.y+20));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -211,6 +220,7 @@ function switchCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, s
|
||||
characterSelect.skinImage = (getGame() == VRR_GAME_GTA_III) ? characterSelect.window.image(310, 32, 100, 90, `files/images/skins/gta3/${getSkinImage(skinId)}.png`) : characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png");
|
||||
|
||||
characterSelect.window.shown = true;
|
||||
|
||||
guiSubmitKey = selectThisCharacter;
|
||||
guiLeftKey = selectPreviousCharacter;
|
||||
guiRightKey = selectNextCharacter;
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
// ===========================================================================
|
||||
|
||||
let clanManager = {
|
||||
window: null,
|
||||
generalTab: null,
|
||||
ranksTab: null,
|
||||
membersTab: null,
|
||||
vehiclesTab: null,
|
||||
businessesTab: null,
|
||||
housesTab: null,
|
||||
window: null,
|
||||
generalTab: null,
|
||||
ranksTab: null,
|
||||
membersTab: null,
|
||||
vehiclesTab: null,
|
||||
businessesTab: null,
|
||||
housesTab: null,
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -16,59 +16,61 @@ let errorDialog = {
|
||||
// ===========================================================================
|
||||
|
||||
function initErrorDialogGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating error GUI ...`);
|
||||
errorDialog.window = mexui.window(game.width/2-200, game.height/2-70, 500, 140, 'ERROR', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
},
|
||||
title: {
|
||||
textSize: 11.0,
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating error GUI ...`);
|
||||
errorDialog.window = mexui.window(getScreenWidth()/2-200, getScreenHeight()/2-70, 400, 140, 'ERROR', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
},
|
||||
title: {
|
||||
textSize: 11.0,
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
errorDialog.messageLabel = errorDialog.window.text(15, 50, 470, 75, 'Error Message', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
textColour: toColour(255, 255, 255, 255),
|
||||
textFont: mainFont,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
errorDialog.messageLabel = errorDialog.window.text(15, 50, 370, 20, 'Error Message', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
textColour: toColour(255, 255, 255, 255),
|
||||
textFont: mainFont,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
errorDialog.okayButton = errorDialog.window.button(5, 105, 390, 30, 'OK', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
textAlign: 0.5,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
||||
},
|
||||
}, closeErrorDialog);
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created error GUI ...`);
|
||||
errorDialog.okayButton = errorDialog.window.button(5, 105, 390, 30, 'OK', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
textAlign: 0.5,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
||||
},
|
||||
}, closeErrorDialog);
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created error GUI ...`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showErrorGUI(errorMessage, errorTitle) {
|
||||
function showErrorGUI(errorMessage, errorTitle, buttonText) {
|
||||
closeAllWindows();
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing error window. Error: ${errorTitle} - ${errorMessage}`);
|
||||
setChatWindowEnabled(false);
|
||||
mexui.setInput(true);
|
||||
errorDialog.messageLabel.text = errorMessage;
|
||||
errorDialog.okayButton.text = buttonText;
|
||||
errorDialog.window.title = errorTitle;
|
||||
errorDialog.window.shown = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ let infoDialog = {
|
||||
|
||||
function initInfoDialogGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating info dialog GUI ...`);
|
||||
infoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Information', {
|
||||
infoDialog.window = mexui.window(getScreenWidth()/2-200, getScreenHeight()/2-70, 400, 140, 'Information', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
},
|
||||
@@ -70,11 +70,13 @@ function closeInfoDialog() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showInfo(infoMessage, infoTitle) {
|
||||
function showInfoGUI(infoMessage, infoTitle, buttonText) {
|
||||
closeAllWindows();
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing info dialog window. Info: ${infoTitle} - ${infoMessage}`);
|
||||
mexui.setInput(true);
|
||||
infoDialog.messageLabel.text = infoMessage;
|
||||
infoDialog.okayButton.text = buttonText;
|
||||
infoDialog.window.title = infoTitle;
|
||||
infoDialog.window.shown = true;
|
||||
}
|
||||
|
||||
|
||||
116
scripts/client/gui/localechooser.js
Normal file
@@ -0,0 +1,116 @@
|
||||
// ===========================================================================
|
||||
// Vortrex's Roleplay Resource
|
||||
// https://github.com/VortrexFTW/gtac_roleplay
|
||||
// ===========================================================================
|
||||
// FILE: localechooser.js
|
||||
// DESC: Provides locale chooser GUI
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let localeChooser = {
|
||||
window: null,
|
||||
flagImages: [],
|
||||
activeRingImages: [],
|
||||
};
|
||||
|
||||
let flagImageSize = toVector2(30, 30);
|
||||
let flagImageGap = toVector2(5, 5);
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initLocaleChooserGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating locale chooser GUI ...`);
|
||||
localeChooser.window = mexui.window(game.width/2-200, game.height-150, 60, 60, 'Choose a language', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], 0),
|
||||
},
|
||||
title: {
|
||||
textSize: 11.0,
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
localeChooser.window.titleBarShown = false;
|
||||
|
||||
loadLocaleConfig();
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created locale chooser GUI`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function closeLocaleChooserGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Closing locale chooser window`);
|
||||
localeChooser.window.shown = false;
|
||||
mexui.setInput(false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showLocaleChooserGUI(position = toVector2(0.0, 0.0)) {
|
||||
if(position.x != 0.0 && position.y != 0.0) {
|
||||
localeChooser.window.position = position;
|
||||
} else {
|
||||
localeChooser.window.position = toVector2((getScreenWidth()/2)-(localeChooser.window.size.x/2), getScreenHeight()-100);
|
||||
}
|
||||
|
||||
//closeAllWindows();
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing locale chooser window`);
|
||||
mexui.setInput(true);
|
||||
localeChooser.window.shown = true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function toggleLocaleChooserGUI() {
|
||||
if(localeChooser.window.shown) {
|
||||
closeLocaleChooserGUI();
|
||||
} else {
|
||||
showLocaleChooserGUI();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function localeChooserSetLocale(localeId) {
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, `[VRR.GUI] Asking server to change locale to ${localeId}`);
|
||||
sendLocaleSelectToServer(localeId);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function resetLocaleChooserOptions() {
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, `[VRR.GUI] Resetting locale chooser options`);
|
||||
|
||||
// let tempLocaleOptions = getServerData().localeOptions; // getAvailableLocaleOptions();
|
||||
let tempLocaleOptions = getAvailableLocaleOptions();
|
||||
|
||||
localeChooser.window.size = toVector2((tempLocaleOptions.length*(flagImageSize.x+flagImageGap.x))+flagImageGap.x, flagImageSize.y+flagImageGap.y*2);
|
||||
localeChooser.window.position = toVector2((getScreenWidth()/2)-(localeChooser.window.size.x/2), getScreenHeight()-100);
|
||||
|
||||
for(let i in localeChooser.flagImages) {
|
||||
localeChooser.flagImages[i].remove();
|
||||
}
|
||||
|
||||
for(let i in tempLocaleOptions) {
|
||||
let imagePath = `files/images/flags/${tempLocaleOptions[i].flagImageFile}`;
|
||||
localeChooser.flagImages[i] = localeChooser.window.image((i*(flagImageSize.x+flagImageGap.x))+flagImageGap.x, flagImageGap.y, flagImageSize.x, flagImageSize.y, imagePath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
}, function() {
|
||||
localeChooserSetLocale(tempLocaleOptions[i].id);
|
||||
});
|
||||
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, `[VRR.GUI] Created locale chooser option ${tempLocaleOptions[i].englishName} with image ${imagePath}`);
|
||||
|
||||
//localeChooser.activeRingImages.push(activeRingImage);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -11,7 +11,6 @@ let login = {
|
||||
window: null,
|
||||
logoImage: null,
|
||||
messageLabel: null,
|
||||
passwordLabel: null,
|
||||
passwordInput: null,
|
||||
loginButton: null,
|
||||
forgotPasswordButton: null,
|
||||
@@ -20,9 +19,31 @@ let login = {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let loginHTML =
|
||||
`<html>
|
||||
<head>
|
||||
<title>Asshat Gaming Roleplay: Login</title>
|
||||
<style type="text/css" rel="stylesheet">
|
||||
.input-box
|
||||
{
|
||||
font-family: "Roboto";
|
||||
font-size: 14px;
|
||||
border-style: solid;
|
||||
border-colour: #0066AA;
|
||||
border-radius: 2px;
|
||||
color: #0066AA;
|
||||
};
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>`;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initLoginGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating login GUI ...`);
|
||||
login.window = mexui.window(game.width/2-150, game.height/2-135, 300, 275, 'LOGIN', {
|
||||
login.window = mexui.window(getScreenWidth()/2-150, getScreenHeight()/2-135, 300, 275, 'LOGIN', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
@@ -41,8 +62,9 @@ function initLoginGUI() {
|
||||
});
|
||||
login.window.titleBarIconSize = toVector2(0,0);
|
||||
login.window.titleBarHeight = 0;
|
||||
login.window.titleBarShown = false;
|
||||
|
||||
login.logoImage = login.window.image(5, 20, 290, 100, mainLogoPath, {
|
||||
login.logoImage = login.window.image(100, 20, 100, 100, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
@@ -96,7 +118,7 @@ function initLoginGUI() {
|
||||
},
|
||||
}, checkLogin);
|
||||
|
||||
login.forgotPasswordButton = login.window.button(200, 240, 80, 15, 'RESET PASS', {
|
||||
login.forgotPasswordButton = login.window.button(180, 240, 100, 15, 'RESET PASS', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(0, 0, 0, 255),
|
||||
@@ -109,7 +131,7 @@ function initLoginGUI() {
|
||||
},
|
||||
}, switchToPasswordResetGUI);
|
||||
|
||||
login.resetPasswordLabel = login.window.text(125, 240, 60, 15, 'Forgot your password?', {
|
||||
login.resetPasswordLabel = login.window.text(110, 240, 60, 15, 'Forgot your password?', {
|
||||
main: {
|
||||
textSize: 8.0,
|
||||
textAlign: 1.0,
|
||||
@@ -134,6 +156,8 @@ function showLoginGUI() {
|
||||
login.window.shown = true;
|
||||
mexui.focusedControl = login.passwordInput;
|
||||
guiSubmitKey = checkLogin;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth()/2-(localeChooser.window.size.x/2), login.window.position.y+login.window.size.y+20));
|
||||
//showSmallGameMessage(`If you don't have a mouse cursor, press ${toUpperCase(getKeyNameFromId(disableGUIKey))} to disable GUI`, COLOUR_WHITE, 7500);
|
||||
}
|
||||
|
||||
@@ -164,9 +188,10 @@ function loginSuccess() {
|
||||
// ===========================================================================
|
||||
|
||||
function switchToPasswordResetGUI() {
|
||||
closeAllWindows();
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing password reset dialog window`);
|
||||
showResetPasswordGUI();
|
||||
//closeAllWindows();
|
||||
//logToConsole(LOG_DEBUG, `[VRR.GUI] Showing password reset dialog window`);
|
||||
//showResetPasswordGUI();
|
||||
sendNetworkEventToServer("vrr.checkResetPassword", "");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,106 +9,108 @@
|
||||
|
||||
let newCharacter = {
|
||||
window: null,
|
||||
messageLabel: null,
|
||||
firstNameInput: null,
|
||||
lastNameInput: null,
|
||||
skinDropDown: null,
|
||||
spawnAreaDropDown: null,
|
||||
createButton: null,
|
||||
mainLogoImage: null,
|
||||
createCharacterButton: null,
|
||||
mainLogoImage: null,
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initNewCharacterGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating new character GUI ...`);
|
||||
newCharacter.window = mexui.window(game.width/2-130, game.height/2-115, 300, 230, 'New Character', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
},
|
||||
title: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
}
|
||||
});
|
||||
newCharacter.window.titleBarIconSize = toVector2(0,0);
|
||||
newCharacter.window.titleBarHeight = 0;
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating new character GUI ...`);
|
||||
newCharacter.window = mexui.window(getScreenWidth()/2-130, getScreenHeight()/2-115, 300, 230, 'NEW CHARACTER', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
},
|
||||
title: {
|
||||
textSize: 12.0,
|
||||
textFont: mainFont,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
},
|
||||
icon: {
|
||||
textSize: 0.0,
|
||||
textColour: toColour(0, 0, 0, 0),
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
||||
}
|
||||
});
|
||||
newCharacter.window.titleBarIconSize = toVector2(0, 0);
|
||||
newCharacter.window.titleBarIconShown = false;
|
||||
newCharacter.window.titleBarShown = false;
|
||||
newCharacter.window.titleBarHeight = 30;
|
||||
|
||||
newCharacter.mainLogoImage = newCharacter.window.image(5, 20, 290, 80, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
newCharacter.mainLogoImage = newCharacter.window.image(80, 20, 80, 80, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
newCharacter.messageLabel = newCharacter.window.text(20, 100, 260, 20, 'Name your character', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textFont: mainFont,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
newCharacter.messageLabel = newCharacter.window.text(20, 100, 260, 20, 'Name your character', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textFont: mainFont,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
newCharacter.firstNameInput = newCharacter.window.textInput(20, 125, 260, 25, '', {
|
||||
main: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
},
|
||||
caret: {
|
||||
lineColour: toColour(255, 255, 255, 255),
|
||||
},
|
||||
placeholder: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 200),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
}
|
||||
});
|
||||
newCharacter.firstNameInput.placeholder = "First Name";
|
||||
newCharacter.firstNameInput = newCharacter.window.textInput(20, 125, 260, 25, '', {
|
||||
main: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
},
|
||||
caret: {
|
||||
lineColour: toColour(255, 255, 255, 255),
|
||||
},
|
||||
placeholder: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 200),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
}
|
||||
});
|
||||
newCharacter.firstNameInput.placeholder = "First Name";
|
||||
|
||||
newCharacter.lastNameInput = newCharacter.window.textInput(20, 155, 260, 25, '', {
|
||||
main: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
},
|
||||
caret: {
|
||||
lineColour: toColour(255, 255, 255, 255),
|
||||
},
|
||||
placeholder: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(150, 150, 150, 200),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
}
|
||||
});
|
||||
newCharacter.lastNameInput.placeholder = "Last Name";
|
||||
newCharacter.lastNameInput = newCharacter.window.textInput(20, 155, 260, 25, '', {
|
||||
main: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(200, 200, 200, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
},
|
||||
caret: {
|
||||
lineColour: toColour(255, 255, 255, 255),
|
||||
},
|
||||
placeholder: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
textColour: toColour(150, 150, 150, 200),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
}
|
||||
});
|
||||
newCharacter.lastNameInput.placeholder = "Last Name";
|
||||
|
||||
newCharacter.createCharacterButton = newCharacter.window.button(20, 185, 260, 25, 'CREATE CHARACTER', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(255, 255, 255, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
textAlign: 0.5,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
},
|
||||
}, checkNewCharacter);
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created new character GUI`);
|
||||
newCharacter.createCharacterButton = newCharacter.window.button(20, 185, 260, 25, 'CREATE CHARACTER', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(255, 255, 255, 255),
|
||||
textSize: 10.0,
|
||||
textFont: mainFont,
|
||||
textAlign: 0.5,
|
||||
},
|
||||
focused: {
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
},
|
||||
}, checkNewCharacter);
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created new character GUI`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -133,8 +135,6 @@ function newCharacterFailed(errorMessage) {
|
||||
|
||||
function checkNewCharacter() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking new character with server ...`);
|
||||
let skinId = false;
|
||||
|
||||
if(newCharacter.firstNameInput.lines[0].length < 2) {
|
||||
return false;
|
||||
}
|
||||
@@ -157,8 +157,10 @@ function showNewCharacterGUI() {
|
||||
setChatWindowEnabled(false);
|
||||
mexui.setInput(true);
|
||||
newCharacter.window.shown = true;
|
||||
mexui.focusedInput = newCharacter.firstNameInput;
|
||||
guiSubmitButton = checkNewCharacter;
|
||||
mexui.focusedInput = newCharacter.firstNameInput;
|
||||
guiSubmitKey = checkNewCharacter;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth()/2-(localeChooser.window.size.x/2), newCharacter.window.position.y+newCharacter.window.size.y+20));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -21,7 +21,7 @@ let register = {
|
||||
|
||||
function initRegisterGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating register GUI ...`);
|
||||
register.window = mexui.window(game.width/2-150, game.height/2-150, 300, 300, 'Register', {
|
||||
register.window = mexui.window(getScreenWidth()/2-150, getScreenHeight()/2-150, 300, 300, 'Register', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
@@ -39,8 +39,9 @@ function initRegisterGUI() {
|
||||
});
|
||||
register.window.titleBarIconSize = toVector2(0,0);
|
||||
register.window.titleBarHeight = 0;
|
||||
register.window.titleBarShown = false;
|
||||
|
||||
register.window.image(5, 20, 290, 80, mainLogoPath, {
|
||||
register.window.image(100, 20, 100, 100, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
@@ -160,6 +161,9 @@ function showRegistrationGUI() {
|
||||
register.window.shown = true;
|
||||
mexui.focusedControl = register.passwordInput;
|
||||
guiSubmitKey = checkRegistration;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth()/2-(localeChooser.window.size.x/2), register.window.position.y+register.window.size.y+20));
|
||||
|
||||
//showSmallGameMessage(`If you don't have a mouse cursor, press ${toUpperCase(getKeyNameFromId(disableGUIKey))} to disable GUI`, COLOUR_WHITE, 7500);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,10 @@
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let resetPassword = {
|
||||
let passwordReset = {
|
||||
window: null,
|
||||
logoImage: null,
|
||||
messageLabel: null,
|
||||
emailLabel: null,
|
||||
emailInput: null,
|
||||
resetPasswordButton: null,
|
||||
backToLoginButton: null,
|
||||
@@ -21,8 +20,8 @@ let resetPassword = {
|
||||
// ===========================================================================
|
||||
|
||||
function initResetPasswordGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating password reset GUI ...`);
|
||||
resetPassword.window = mexui.window(game.width/2-150, game.height/2-130, 300, 260, 'RESET PASSWORD', {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating password reset GUI ...`);
|
||||
passwordReset.window = mexui.window(getScreenWidth() / 2 - 150, getScreenHeight() / 2 - 135, 300, 275, 'RESET PASSWORD', {
|
||||
main: {
|
||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
||||
transitionTime: 500,
|
||||
@@ -39,16 +38,17 @@ function initResetPasswordGUI() {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
resetPassword.window.titleBarIconSize = toVector2(0,0);
|
||||
resetPassword.window.titleBarHeight = 0;
|
||||
passwordReset.window.titleBarIconSize = toVector2(0, 0);
|
||||
passwordReset.window.titleBarHeight = 0;
|
||||
passwordReset.window.titleBarShown = false;
|
||||
|
||||
resetPassword.logoImage = resetPassword.window.image(5, 20, 290, 80, mainLogoPath, {
|
||||
passwordReset.logoImage = passwordReset.window.image(100, 20, 100, 100, mainLogoPath, {
|
||||
focused: {
|
||||
borderColour: toColour(0, 0, 0, 0),
|
||||
},
|
||||
});
|
||||
|
||||
resetPassword.messageLabel = resetPassword.window.text(20, 135, 260, 20, 'Please confirm your email', {
|
||||
passwordReset.messageLabel = passwordReset.window.text(20, 135, 260, 20, 'Please confirm your email', {
|
||||
main: {
|
||||
textSize: 10.0,
|
||||
textAlign: 0.5,
|
||||
@@ -60,7 +60,7 @@ function initResetPasswordGUI() {
|
||||
},
|
||||
});
|
||||
|
||||
resetPassword.emailInput = resetPassword.window.textInput(20, 170, 260, 25, '', {
|
||||
passwordReset.emailInput = passwordReset.window.textInput(20, 170, 260, 25, '', {
|
||||
main: {
|
||||
backgroundColour: toColour(0, 0, 0, 120),
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], textInputAlpha),
|
||||
@@ -80,9 +80,9 @@ function initResetPasswordGUI() {
|
||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
||||
},
|
||||
});
|
||||
resetPassword.emailInput.placeholder = "Email";
|
||||
passwordReset.emailInput.placeholder = "Email";
|
||||
|
||||
resetPassword.resetPasswordButton = resetPassword.window.button(20, 205, 260, 30, 'RESET PASSWORD', {
|
||||
passwordReset.resetPasswordButton = passwordReset.window.button(20, 205, 260, 30, 'RESET PASSWORD', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
@@ -95,7 +95,7 @@ function initResetPasswordGUI() {
|
||||
},
|
||||
}, checkResetPassword);
|
||||
|
||||
resetPassword.backToLoginButton = resetPassword.window.button(200, 240, 80, 15, 'LOGIN', {
|
||||
passwordReset.backToLoginButton = passwordReset.window.button(200, 240, 80, 15, 'LOGIN', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
@@ -108,7 +108,7 @@ function initResetPasswordGUI() {
|
||||
},
|
||||
}, switchToLoginGUI);
|
||||
|
||||
resetPassword.backToLoginLabel = resetPassword.window.text(125, 240, 60, 15, 'Remember your password?', {
|
||||
passwordReset.backToLoginLabel = passwordReset.window.text(110, 240, 60, 15, 'Remember your password?', {
|
||||
main: {
|
||||
textSize: 8.0,
|
||||
textAlign: 1.0,
|
||||
@@ -130,48 +130,66 @@ function showResetPasswordGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing password reset window`);
|
||||
setChatWindowEnabled(false);
|
||||
mexui.setInput(true);
|
||||
resetPassword.window.shown = true;
|
||||
mexui.focusedControl = resetPassword.emailInput;
|
||||
guiSubmitButton = checkResetPassword;
|
||||
passwordReset.window.shown = true;
|
||||
mexui.focusedControl = passwordReset.emailInput;
|
||||
guiSubmitKey = checkResetPassword;
|
||||
|
||||
showLocaleChooserGUI(new Vec2(getScreenWidth() / 2 - (localeChooser.window.size.x / 2), passwordReset.window.position.y + passwordReset.window.size.y + 20));
|
||||
//showSmallGameMessage(`If you don't have a mouse cursor, press ${toUpperCase(getKeyNameFromId(disableGUIKey))} to disable GUI`, COLOUR_WHITE, 7500);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function checkResetPassword() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking password reset with server ...`);
|
||||
sendNetworkEventToServer("vrr.checkResetPassword", resetPassword.emailInput.lines[0]);
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking password reset with server (${passwordReset.emailInput.lines[0]}) ...`);
|
||||
sendNetworkEventToServer("vrr.checkResetPassword", passwordReset.emailInput.lines[0]);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function resetPasswordFailed(errorMessage) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports password reset failed`);
|
||||
resetPassword.messageLabel.text = errorMessage;
|
||||
resetPassword.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
||||
resetPassword.emailInput.text = "";
|
||||
passwordReset.messageLabel.text = errorMessage;
|
||||
passwordReset.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
||||
passwordReset.emailInput.text = "";
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function resetPasswordCodeInputGUI() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports password reset was successful`);
|
||||
|
||||
resetPassword.messageLabel.text = "Check your email for a verification code";
|
||||
resetPassword.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
||||
resetPassword.emailInput.text = "";
|
||||
resetPassword.emailInput.placeholder = "Verification Code";
|
||||
|
||||
guiSubmitButton = checkResetPassword;
|
||||
logToConsole(LOG_DEBUG | LOG_WARN, `[VRR.GUI] Server reports password reset email confirmation was successful. Asking for code ...`);
|
||||
closeAllWindows();
|
||||
|
||||
passwordReset.messageLabel.text = getLocaleString("GUIResetPasswordCodeInputLabel");
|
||||
//passwordReset.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
||||
passwordReset.emailInput.lines[0] = "";
|
||||
passwordReset.emailInput.placeholder = getLocaleString("GUIResetPasswordCodePlaceholder");
|
||||
|
||||
guiSubmitKey = checkResetPassword;
|
||||
showResetPasswordGUI();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function resetPasswordEmailInputGUI() {
|
||||
logToConsole(LOG_DEBUG | LOG_WARN, `[VRR.GUI] Server reports password reset request was approved. Asking for email ...`);
|
||||
closeAllWindows();
|
||||
|
||||
passwordReset.messageLabel.text = getLocaleString("GUIResetPasswordConfirmEmailLabel");
|
||||
//passwordReset.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
||||
passwordReset.emailInput.text = "";
|
||||
passwordReset.emailInput.placeholder = getLocaleString("GUIResetPasswordEmailPlaceholder");
|
||||
|
||||
guiSubmitKey = checkResetPassword;
|
||||
showResetPasswordGUI();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function switchToLoginGUI() {
|
||||
guiSubmitKey = false;
|
||||
closeAllWindows();
|
||||
showLoginGUI();
|
||||
closeAllWindows();
|
||||
showLoginGUI();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -48,7 +48,7 @@ function initYesNoDialogGUI() {
|
||||
},
|
||||
});
|
||||
|
||||
yesNoDialog.yesButton = yesNoDialog.window.button(5, 100, 197, 25, 'YES', {
|
||||
yesNoDialog.yesButton = yesNoDialog.window.button(5, 105, 193, 30, 'YES', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
@@ -61,7 +61,7 @@ function initYesNoDialogGUI() {
|
||||
},
|
||||
}, yesNoDialogAnswerYes);
|
||||
|
||||
yesNoDialog.noButton = yesNoDialog.window.button(202, 105, 197, 25, 'NO', {
|
||||
yesNoDialog.noButton = yesNoDialog.window.button(203, 105, 192, 30, 'NO', {
|
||||
main: {
|
||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
||||
@@ -78,11 +78,21 @@ function initYesNoDialogGUI() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showYesNoPromptGUI(promptMessage, promptTitle) {
|
||||
function showYesNoPromptGUI(promptMessage, promptTitle, yesButtonText, noButtonText) {
|
||||
closeAllWindows();
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing prompt window. Prompt: ${promptTitle} - ${promptMessage}`);
|
||||
mexui.setInput(true);
|
||||
|
||||
yesNoDialog.messageLabel.text = "";
|
||||
yesNoDialog.yesButton.text = "";
|
||||
yesNoDialog.noButton.text = "";
|
||||
yesNoDialog.window.title = "";
|
||||
|
||||
yesNoDialog.messageLabel.text = promptMessage;
|
||||
yesNoDialog.yesButton.text = yesButtonText;
|
||||
yesNoDialog.noButton.text = noButtonText;
|
||||
yesNoDialog.window.title = promptTitle;
|
||||
|
||||
yesNoDialog.window.shown = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,56 +8,79 @@
|
||||
// ===========================================================================
|
||||
|
||||
class HouseData {
|
||||
constructor(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||
this.index = -1;
|
||||
this.houseId = houseId;
|
||||
this.entrancePosition = entrancePosition;
|
||||
this.blipModel = blipModel;
|
||||
this.pickupModel = pickupModel;
|
||||
this.hasInterior = hasInterior;
|
||||
this.blipId = -1;
|
||||
}
|
||||
constructor(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||
this.index = -1;
|
||||
this.houseId = houseId;
|
||||
this.description = description;
|
||||
this.entrancePosition = entrancePosition;
|
||||
this.blipModel = blipModel;
|
||||
this.pickupModel = pickupModel;
|
||||
this.hasInterior = hasInterior;
|
||||
this.blipId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(getHouseData(houseId) != false) {
|
||||
if(blipModel == -1) {
|
||||
natives.removeBlipAndClearIndex(getHouseData(houseId).blipId);
|
||||
getHouseData(houseId).blipId = -1;
|
||||
//houses.splice(getHouseData(houseId).index, 1);
|
||||
//setAllHouseDataIndexes();
|
||||
} else {
|
||||
if(getHouseData(houseId).blipId != -1) {
|
||||
natives.setBlipCoordinates(getHouseData(houseId).blipId, getHouseData(houseId).entrancePosition);
|
||||
natives.changeBlipSprite(getHouseData(houseId).blipId, getHouseData(houseId).blipModel);
|
||||
//natives.changeBlipNameFromAscii(getHouseData(houseId).blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
|
||||
} else {
|
||||
let blipId = natives.addBlipForCoord(entrancePosition);
|
||||
if(blipId) {
|
||||
getHouseData(houseId).blipId = blipId;
|
||||
natives.changeBlipSprite(blipId, blipModel);
|
||||
natives.setBlipMarkerLongDistance(blipId, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let tempHouseData = new HouseData(houseId, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
|
||||
if(blipModel != -1) {
|
||||
let blipId = natives.addBlipForCoord(entrancePosition);
|
||||
if(blipId) {
|
||||
tempHouseData.blipId = blipId;
|
||||
natives.changeBlipSprite(blipId, blipModel);
|
||||
natives.setBlipMarkerLongDistance(blipId, false);
|
||||
//natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
}
|
||||
houses.push(tempHouseData);
|
||||
setAllHouseDataIndexes();
|
||||
}
|
||||
}
|
||||
function receiveHouseFromServer(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] Received house ${houseId} (${name}) from server`);
|
||||
|
||||
if(!areServerElementsSupported()) {
|
||||
if(getHouseData(houseId) != false) {
|
||||
let houseData = getHouseData(houseId);
|
||||
houseData.description = description;
|
||||
houseData.entrancePosition = entrancePosition;
|
||||
houseData.blipModel = blipModel;
|
||||
houseData.pickupModel = pickupModel;
|
||||
houseData.hasInterior = hasInterior;
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId} already exists. Checking blip ...`);
|
||||
if(blipModel == -1) {
|
||||
if(houseData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId}'s blip has been removed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.removeBlipAndClearIndex(getHouseData(houseId).blipId);
|
||||
} else {
|
||||
destroyElement(getElementFromId(blipId));
|
||||
}
|
||||
houseData.blipId = -1;
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId}'s blip is unchanged`);
|
||||
}
|
||||
} else {
|
||||
if(houseData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId}'s blip has been changed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.setBlipCoordinates(houseData.blipId, houseData.entrancePosition);
|
||||
natives.changeBlipSprite(houseData.blipId, houseData.blipModel);
|
||||
natives.setBlipMarkerLongDistance(houseData.blipId, false);
|
||||
natives.setBlipAsShortRange(houseData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(houseData.blipId, `${houseData.name.substr(0, 24)}${(houseData.name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
} else {
|
||||
let blipId = createGameBlip(houseData.blipModel, houseData.entrancePosition, houseData.name);
|
||||
if(blipId != -1) {
|
||||
houseData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId} doesn't exist. Adding ...`);
|
||||
let tempHouseData = new HouseData(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior);
|
||||
if(blipModel != -1) {
|
||||
let blipId = createGameBlip(tempHouseData.blipModel, tempHouseData.entrancePosition, "House");
|
||||
if(blipId != -1) {
|
||||
tempHouseData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.House] House ${houseId} has no blip.`);
|
||||
}
|
||||
getServerData().houses.push(tempHouseData);
|
||||
setAllHouseDataIndexes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -66,17 +89,23 @@ function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupMode
|
||||
* @param {number} houseId - The ID of the house (initially provided by server)
|
||||
* @return {HouseData} The house's data (class instance)
|
||||
*/
|
||||
function getHouseData(houseId) {
|
||||
let tempHouseData = houses.find((h) => h.houseId == houseId);
|
||||
return (typeof tempHouseData != "undefined") ? tempHouseData : false;
|
||||
function getHouseData(houseId) {
|
||||
let houses = getServerData().houses;
|
||||
for(let i in houses) {
|
||||
if(houses[i].houseId == houseId) {
|
||||
return houses[i];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setAllHouseDataIndexes() {
|
||||
for(let i in houses) {
|
||||
houses[i].index = i;
|
||||
}
|
||||
for(let i in getServerData().houses) {
|
||||
getServerData().houses[i].index = i;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1,34 +0,0 @@
|
||||
// For RAGEMP only
|
||||
|
||||
// Shared Scripts
|
||||
require("../scripts/shared/const.js");
|
||||
require("../scripts/shared/utilities.js");
|
||||
require("../scripts/shared/gamedata.js");
|
||||
|
||||
// Multiplayer Mod (Wrapped Natives)
|
||||
require("scripts/client/native/ragemp.js");
|
||||
|
||||
// Client Scripts
|
||||
require("scripts/client/gui.js");
|
||||
require("scripts/client/main.js");
|
||||
require("scripts/client/nametag.js");
|
||||
require("scripts/client/sync.js");
|
||||
require("scripts/client/scoreboard.js");
|
||||
require("scripts/client/keybind.js");
|
||||
require("scripts/client/chatbox.js");
|
||||
require("scripts/client/label.js");
|
||||
require("scripts/client/skin-select.js");
|
||||
require("scripts/client/server.js");
|
||||
require("scripts/client/job.js");
|
||||
require("scripts/client/event.js");
|
||||
require("scripts/client/item.js");
|
||||
require("scripts/client/utilities.js");
|
||||
require("scripts/client/messaging.js");
|
||||
require("scripts/client/logo.js");
|
||||
require("scripts/client/afk.js");
|
||||
require("scripts/client/mousecam.js");
|
||||
require("scripts/client/radio.js");
|
||||
require("scripts/client/animation.js");
|
||||
|
||||
// Startup
|
||||
require("scripts/client/startup.js");
|
||||
@@ -23,40 +23,40 @@ function initItemScript() {
|
||||
// ===========================================================================
|
||||
|
||||
function processItemActionRendering() {
|
||||
if(renderItemActionDelay) {
|
||||
if(itemActionDelayEnabled) {
|
||||
let finishTime = itemActionDelayStart+itemActionDelayDuration;
|
||||
if(sdl.ticks >= finishTime) {
|
||||
itemActionDelayEnabled = false;
|
||||
itemActionDelayDuration = 0;
|
||||
itemActionDelayStart = 0;
|
||||
tellServerItemActionDelayComplete();
|
||||
} else {
|
||||
let currentTick = sdl.ticks-itemActionDelayStart;
|
||||
let progressPercent = Math.ceil(currentTick*100/itemActionDelayDuration);
|
||||
let width = Math.ceil(getPercentage(itemActionDelaySize.x, progressPercent));
|
||||
if(renderItemActionDelay) {
|
||||
if(itemActionDelayEnabled) {
|
||||
let finishTime = itemActionDelayStart+itemActionDelayDuration;
|
||||
if(sdl.ticks >= finishTime) {
|
||||
itemActionDelayEnabled = false;
|
||||
itemActionDelayDuration = 0;
|
||||
itemActionDelayStart = 0;
|
||||
tellServerItemActionDelayComplete();
|
||||
} else {
|
||||
let currentTick = sdl.ticks-itemActionDelayStart;
|
||||
let progressPercent = Math.ceil(currentTick*100/itemActionDelayDuration);
|
||||
let width = Math.ceil(getPercentage(itemActionDelaySize.x, progressPercent));
|
||||
|
||||
let backgroundColour = toColour(0, 0, 0, 255);
|
||||
graphics.drawRectangle(null, [itemActionDelayPosition.x-(itemActionDelaySize.x/2)-1, itemActionDelayPosition.y-(itemActionDelaySize.y/2)-1], [itemActionDelaySize.x+2, itemActionDelaySize.y+2], backgroundColour, backgroundColour, backgroundColour, backgroundColour);
|
||||
graphics.drawRectangle(null, [itemActionDelayPosition.x-(itemActionDelaySize.x/2), itemActionDelayPosition.y-(itemActionDelaySize.y/2)-2], [width, itemActionDelaySize.y], COLOUR_LIME, COLOUR_LIME, COLOUR_LIME, COLOUR_LIME);
|
||||
}
|
||||
}
|
||||
}
|
||||
let backgroundColour = toColour(0, 0, 0, 255);
|
||||
graphics.drawRectangle(null, [itemActionDelayPosition.x-(itemActionDelaySize.x/2)-1, itemActionDelayPosition.y-(itemActionDelaySize.y/2)-1], [itemActionDelaySize.x+2, itemActionDelaySize.y+2], backgroundColour, backgroundColour, backgroundColour, backgroundColour);
|
||||
graphics.drawRectangle(null, [itemActionDelayPosition.x-(itemActionDelaySize.x/2), itemActionDelayPosition.y-(itemActionDelaySize.y/2)-2], [width, itemActionDelaySize.y], COLOUR_LIME, COLOUR_LIME, COLOUR_LIME, COLOUR_LIME);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function updatePlayerHotBar(activeSlot, itemsArray) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Updating hotbar`);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Updating hotbar`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showItemActionDelay(duration) {
|
||||
itemActionDelayDuration = duration;
|
||||
itemActionDelayStart = sdl.ticks;
|
||||
itemActionDelayEnabled = true;
|
||||
logToConsole(LOG_DEBUG, `Item action delay started. Duration: ${itemActionDelayDuration}, Start: ${itemActionDelayStart}, Rendering Enabled: ${renderItemActionDelay}`);
|
||||
itemActionDelayDuration = duration;
|
||||
itemActionDelayStart = sdl.ticks;
|
||||
itemActionDelayEnabled = true;
|
||||
logToConsole(LOG_DEBUG, `Item action delay started. Duration: ${itemActionDelayDuration}, Start: ${itemActionDelayStart}, Rendering Enabled: ${renderItemActionDelay}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -12,6 +12,26 @@ let localPlayerWorking = false;
|
||||
let jobRouteLocationBlip = null;
|
||||
let jobRouteLocationSphere = null;
|
||||
|
||||
let jobBlipBlinkAmount = 0;
|
||||
let jobBlipBlinkTimes = 10;
|
||||
let jobBlipBlinkInterval = 500;
|
||||
let jobBlipBlinkTimer = null;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
class JobData {
|
||||
constructor(jobId, jobLocationId, name, position, blipModel, pickupModel) {
|
||||
this.index = -1;
|
||||
this.jobId = jobId;
|
||||
this.jobLocationId = jobLocationId;
|
||||
this.name = name;
|
||||
this.position = position;
|
||||
this.blipModel = blipModel;
|
||||
this.pickupModel = pickupModel;
|
||||
this.blipId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initJobScript() {
|
||||
@@ -22,74 +42,182 @@ function initJobScript() {
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerJobType(tempJobType) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Set local player job type to ${tempJobType}`);
|
||||
localPlayerJobType = tempJobType;
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Set local player job type to ${tempJobType}`);
|
||||
localPlayerJobType = tempJobType;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerWorkingState(tempWorking) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Setting working state to ${tempWorking}`);
|
||||
localPlayerWorking = tempWorking;
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Setting working state to ${tempWorking}`);
|
||||
localPlayerWorking = tempWorking;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showJobRouteLocation(position, colour) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Showing job route location`);
|
||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
||||
if(game.game == VRR_GAME_GTA_SA) {
|
||||
jobRouteLocationSphere = game.createPickup(1318, position, 1);
|
||||
} else {
|
||||
jobRouteLocationSphere = game.createSphere(position, 3);
|
||||
jobRouteLocationSphere.colour = colour;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Showing job route location`);
|
||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
// Server-side spheres don't show in GTA SA for some reason.
|
||||
jobRouteLocationSphere = game.createPickup(1318, position, 1);
|
||||
} else {
|
||||
jobRouteLocationSphere = game.createSphere(position, 3);
|
||||
jobRouteLocationSphere.colour = colour;
|
||||
}
|
||||
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
}
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
}
|
||||
|
||||
blinkJobRouteLocationBlip(10, position, colour);
|
||||
}
|
||||
// Blinking is bugged if player hit the spot before it stops blinking.
|
||||
blinkJobRouteLocationBlip(10, position, colour);
|
||||
jobRouteLocationBlip = game.createBlip(position, 0, 2, colour);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function enteredJobRouteSphere() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Entered job route sphere`);
|
||||
tellServerPlayerArrivedAtJobRouteLocation();
|
||||
destroyElement(jobRouteLocationSphere);
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationSphere = null;
|
||||
jobRouteLocationBlip = null;
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Entered job route sphere`);
|
||||
|
||||
clearInterval(jobBlipBlinkTimer);
|
||||
jobBlipBlinkAmount = 0;
|
||||
jobBlipBlinkTimes = 0;
|
||||
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationBlip = null;
|
||||
}
|
||||
|
||||
if(jobRouteLocationSphere != null) {
|
||||
destroyElement(jobRouteLocationSphere);
|
||||
jobRouteLocationSphere = null;
|
||||
}
|
||||
|
||||
tellServerPlayerArrivedAtJobRouteLocation();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function blinkJobRouteLocationBlip(times, position, colour) {
|
||||
for(let i = 1 ; i <= times ; i++) {
|
||||
setTimeout(function() {
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationBlip = null;
|
||||
} else {
|
||||
jobRouteLocationBlip = game.createBlip(position, 0, 2, colour);
|
||||
}
|
||||
}, 500*i);
|
||||
}
|
||||
jobBlipBlinkTimes = times;
|
||||
jobBlipBlinkTimer = setInterval(function() {
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationBlip = null;
|
||||
} else {
|
||||
jobRouteLocationBlip = game.createBlip(position, 0, 2, colour);
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
jobRouteLocationBlip = game.createBlip(position, 0, 2, colour);
|
||||
}, 500*times+1);
|
||||
if(jobBlipBlinkAmount >= jobBlipBlinkTimes) {
|
||||
if(jobRouteLocationBlip != null) {
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationBlip = null;
|
||||
}
|
||||
|
||||
jobBlipBlinkAmount = 0;
|
||||
jobBlipBlinkTimes = 0;
|
||||
jobRouteLocationBlip = game.createBlip(position, 0, 2, colour);
|
||||
clearInterval(jobBlipBlinkTimer);
|
||||
}
|
||||
}, jobBlipBlinkInterval);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function hideJobRouteLocation() {
|
||||
destroyElement(jobRouteLocationSphere);
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationSphere = null;
|
||||
jobRouteLocationBlip = null;
|
||||
destroyElement(jobRouteLocationSphere);
|
||||
destroyElement(jobRouteLocationBlip);
|
||||
jobRouteLocationSphere = null;
|
||||
jobRouteLocationBlip = null;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveJobFromServer(jobId, jobLocationId, name, position, blipModel, pickupModel) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Received job ${jobId} (${name}) from server`);
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(getJobData(jobId) != false) {
|
||||
let jobData = getJobData(jobId);
|
||||
jobData.jobLocationId = jobLocationId;
|
||||
jobData.name = name;
|
||||
jobData.position = position;
|
||||
jobData.blipModel = blipModel;
|
||||
jobData.pickupModel = pickupModel;
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId} already exists. Checking blip ...`);
|
||||
if(blipModel == -1) {
|
||||
if(jobData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId}'s blip has been removed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.removeBlipAndClearIndex(getJobData(jobId).blipId);
|
||||
} else {
|
||||
destroyElement(getElementFromId(blipId));
|
||||
}
|
||||
jobData.blipId = -1;
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId}'s blip is unchanged`);
|
||||
}
|
||||
} else {
|
||||
if(jobData.blipId != -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId}'s blip has been changed by the server`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.setBlipCoordinates(jobData.blipId, jobData.position);
|
||||
natives.changeBlipSprite(jobData.blipId, jobData.blipModel);
|
||||
natives.setBlipMarkerLongDistance(jobData.blipId, false);
|
||||
natives.setBlipAsShortRange(jobData.blipId, true);
|
||||
natives.changeBlipNameFromAscii(jobData.blipId, `${jobData.name.substr(0, 24)}${(jobData.name.length > 24) ? " ...": ""}`);
|
||||
}
|
||||
} else {
|
||||
let blipId = createGameBlip(jobData.blipModel, jobData.position, jobData.name);
|
||||
if(blipId != -1) {
|
||||
jobData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId} doesn't exist. Adding ...`);
|
||||
let tempJobData = new JobData(jobId, jobLocationId, name, position, blipModel, pickupModel);
|
||||
if(blipModel != -1) {
|
||||
let blipId = createGameBlip(blipModel, tempJobData.position, tempJobData.name);
|
||||
if(blipId != -1) {
|
||||
tempJobData.blipId = blipId;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId} has no blip.`);
|
||||
}
|
||||
getServerData().jobs.push(tempJobData);
|
||||
setAllJobDataIndexes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {number} job - The ID of the job (initially provided by server)
|
||||
* @return {JobData} The job's data (class instance)
|
||||
*/
|
||||
function getJobData(jobId) {
|
||||
for(let i in getServerData().jobs) {
|
||||
if(getServerData().jobs[i].jobId == jobId) {
|
||||
return getServerData().jobs[i];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setAllJobDataIndexes() {
|
||||
for(let i in getServerData().jobs) {
|
||||
jobs[i].index = i;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"moduleResolution": "classic"
|
||||
},
|
||||
"include": [
|
||||
"*.js",
|
||||
"gui/*.js",
|
||||
"native/*.js",
|
||||
"../shared/*.js",
|
||||
"../third-party/mexui/*"
|
||||
]
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"moduleResolution": "classic"
|
||||
},
|
||||
"include": [
|
||||
"*.js",
|
||||
"gui/*.js",
|
||||
"native/*.js",
|
||||
"../shared/*.js",
|
||||
"../third-party/mexui/*"
|
||||
]
|
||||
}
|
||||
@@ -23,71 +23,71 @@ function initKeyBindScript() {
|
||||
// ===========================================================================
|
||||
|
||||
function bindAccountKey(key, keyState) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Binded key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
keyBinds.push(toInteger(key));
|
||||
bindKey(toInteger(key), keyState, function(event) {
|
||||
if(isAnyGUIActive()) {
|
||||
return false;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Binded key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
keyBinds.push(toInteger(key));
|
||||
bindKey(toInteger(key), keyState, function(event) {
|
||||
if(isAnyGUIActive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(hasKeyBindDelayElapsed()) {
|
||||
if(canLocalPlayerUseKeyBinds()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Using keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
lastKeyBindUse = sdl.ticks;
|
||||
tellServerPlayerUsedKeyBind(key);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Failed to use keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key}) - Not allowed to use keybinds!`);
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Failed to use keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key}) - Not enough time has passed since last keybind use!`);
|
||||
}
|
||||
});
|
||||
if(hasKeyBindDelayElapsed()) {
|
||||
if(canLocalPlayerUseKeyBinds()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Using keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
lastKeyBindUse = sdl.ticks;
|
||||
tellServerPlayerUsedKeyBind(key);
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Failed to use keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key}) - Not allowed to use keybinds!`);
|
||||
}
|
||||
} else {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Failed to use keybind for key ${toUpperCase(getKeyNameFromId(key))} (${key}) - Not enough time has passed since last keybind use!`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unBindAccountKey(key) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Unbinded key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
unbindKey(key);
|
||||
keyBinds.splice(keyBinds.indexOf(key), 1);
|
||||
return true;
|
||||
logToConsole(LOG_DEBUG, `[VRR.KeyBind]: Unbinded key ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
||||
unbindKey(key);
|
||||
keyBinds.splice(keyBinds.indexOf(key), 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function hasKeyBindDelayElapsed() {
|
||||
if(sdl.ticks-lastKeyBindUse >= keyBindDelayTime) {
|
||||
return true;
|
||||
}
|
||||
if(sdl.ticks-lastKeyBindUse >= keyBindDelayTime) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function canLocalPlayerUseKeyBinds() {
|
||||
if(isAnyGUIActive()) {
|
||||
return false;
|
||||
}
|
||||
if(isAnyGUIActive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isSpawned) {
|
||||
return false;
|
||||
}
|
||||
if(!isSpawned) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(itemActionDelayEnabled) {
|
||||
return false;
|
||||
}
|
||||
if(itemActionDelayEnabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function clearKeyBinds() {
|
||||
for(let i in keyBinds) {
|
||||
unbindKey(keyBinds[i]);
|
||||
}
|
||||
keyBinds = [];
|
||||
for(let i in keyBinds) {
|
||||
unbindKey(keyBinds[i]);
|
||||
}
|
||||
keyBinds = [];
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -42,268 +42,343 @@ function initLabelScript() {
|
||||
// ===========================================================================
|
||||
|
||||
function initLabelPropertyNameFont() {
|
||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initLabelPropertyLockedFont() {
|
||||
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
||||
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initLabelJobNameFont() {
|
||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initLabelJobHelpFont() {
|
||||
return lucasFont.createDefaultFont(10.0, "Roboto", "Light");
|
||||
return lucasFont.createDefaultFont(10.0, "Roboto", "Light");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function renderPropertyEntranceLabel(name, position, locked, isBusiness, price, rentPrice, labelInfoType) {
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(propertyLabelNameFont == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(propertyLabelLockedFont == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let text = "";
|
||||
if(price > "0") {
|
||||
text = `For sale: $${price}`;
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(200, 200, 200, 255), false, true, false, true);
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = new Vec3(0.0, 0.0, 0.0);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
screenPosition = natives.getViewportPositionOfCoord(tempPosition, natives.getGameViewportId());
|
||||
} else {
|
||||
screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
}
|
||||
|
||||
screenPosition.y -= propertyLabelPriceOffset;
|
||||
}
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
|
||||
text = "";
|
||||
if(rentPrice != "0") {
|
||||
text = `For rent: $${rentPrice} every payday`;
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(200, 200, 200, 255), false, true, false, true);
|
||||
let text = "";
|
||||
if(price > "0") {
|
||||
text = getLocaleString("PropertyForSaleLabel", price);
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(200, 200, 200, 255), false, true, false, true);
|
||||
|
||||
screenPosition.y -= propertyLabelPriceOffset;
|
||||
}
|
||||
screenPosition.y -= propertyLabelPriceOffset;
|
||||
}
|
||||
|
||||
text = "";
|
||||
if(rentPrice != "0") {
|
||||
text = getLocaleString("PropertyForRentLabel", rentPrice);
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(200, 200, 200, 255), false, true, false, true);
|
||||
|
||||
if(isBusiness) {
|
||||
text = (locked) ? "CLOSED" : "OPEN";
|
||||
} else {
|
||||
text = (locked) ? "LOCKED" : "UNLOCKED";
|
||||
}
|
||||
screenPosition.y -= propertyLabelPriceOffset;
|
||||
}
|
||||
|
||||
if(!locked && labelInfoType != VRR_PROPLABEL_INFO_NONE) {
|
||||
let infoText = "";
|
||||
switch(labelInfoType) {
|
||||
case VRR_PROPLABEL_INFO_ENTER:
|
||||
if(enterPropertyKey) {
|
||||
infoText = `Press ${toUpperCase(getKeyNameFromId(enterPropertyKey))} to enter`;
|
||||
} else {
|
||||
infoText = `Use /enter to enter`;
|
||||
}
|
||||
break;
|
||||
if(isBusiness) {
|
||||
text = (locked) ? toUpperCase(getLocaleString("Closed")) : toUpperCase(getLocaleString("Open"));
|
||||
} else {
|
||||
text = (locked) ? toUpperCase(getLocaleString("Locked")) : toUpperCase(getLocaleString("Unlocked"));
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_BUY:
|
||||
infoText = `Use /buy to purchase items`;
|
||||
break;
|
||||
if(!locked && labelInfoType != VRR_PROPLABEL_INFO_NONE) {
|
||||
let infoText = "";
|
||||
switch(labelInfoType) {
|
||||
case VRR_PROPLABEL_INFO_ENTER: {
|
||||
if(enterPropertyKey) {
|
||||
infoText = getLocaleString("PropertyEnterKeyPressLabel", toUpperCase(getKeyNameFromId(enterPropertyKey)));
|
||||
} else {
|
||||
infoText = getLocaleString("PropertyEnterCommandLabel", "/enter");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_BUYBIZ:
|
||||
infoText = `Use /buy to purchase items`;
|
||||
break;
|
||||
case VRR_PROPLABEL_INFO_BUY: {
|
||||
infoText = getLocaleString("BusinessBuyItemsLabel", "/buy");
|
||||
break;
|
||||
}
|
||||
|
||||
//case VRR_PROPLABEL_INFO_RENTBIZ:
|
||||
// infoText = `Use /bizrent to buy this business`;
|
||||
// break;
|
||||
case VRR_PROPLABEL_INFO_BUYBIZ: {
|
||||
infoText = getLocaleString("BuyBusinessLabel", "/bizbuy");
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_BUYHOUSE:
|
||||
infoText = `Use /housebuy to buy this house`;
|
||||
break;
|
||||
case VRR_PROPLABEL_INFO_BUYHOUSE: {
|
||||
infoText = getLocaleString("BuyHouseLabel", "/housebuy");
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_RENTHOUSE:
|
||||
infoText = `Use /houserent to rent this house`;
|
||||
break;
|
||||
case VRR_PROPLABEL_INFO_RENTHOUSE: {
|
||||
infoText = getLocaleString("RentHouseLabel", "/houserent");
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_ENTERVEH:
|
||||
infoText = "Enter a vehicle in the parking lot to buy it";
|
||||
break;
|
||||
case VRR_PROPLABEL_INFO_ENTERVEHICLE: {
|
||||
infoText = getLocaleString("VehicleDealershipLabel");
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_PROPLABEL_INFO_NONE:
|
||||
default:
|
||||
infoText = "";
|
||||
break;
|
||||
}
|
||||
if(getDistance(localPlayer.position, position) <= renderLabelDistance-2) {
|
||||
let size = propertyLabelLockedFont.measure(infoText, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(infoText, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(234, 198, 126, 255), false, true, false, true);
|
||||
screenPosition.y -= propertyLabelLockedOffset;
|
||||
}
|
||||
}
|
||||
default: {
|
||||
if(enterPropertyKey) {
|
||||
infoText = getLocaleString("PropertyEnterKeyPressLabel", toUpperCase(getKeyNameFromId(enterPropertyKey)));
|
||||
} else {
|
||||
infoText = getLocaleString("PropertyEnterCommandLabel", "/enter");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(getDistance(localPlayer.position, position) <= renderLabelDistance-2) {
|
||||
let size = propertyLabelLockedFont.measure(infoText, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(infoText, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, toColour(234, 198, 126, 255), false, true, false, true);
|
||||
screenPosition.y -= propertyLabelLockedOffset;
|
||||
}
|
||||
}
|
||||
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, (locked) ? lockedColour : unlockedColour, false, true, false, true);
|
||||
let size = propertyLabelLockedFont.measure(text, game.width, 0.0, 0.0, propertyLabelLockedFont.size, true, true);
|
||||
propertyLabelLockedFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelLockedFont.size, (locked) ? lockedColour : unlockedColour, false, true, false, true);
|
||||
|
||||
screenPosition.y -= propertyLabelNameOffset;
|
||||
screenPosition.y -= propertyLabelNameOffset;
|
||||
|
||||
text = name || " ";
|
||||
size = propertyLabelNameFont.measure(text, game.width, 0.0, 0.0, propertyLabelNameFont.size, true, true);
|
||||
propertyLabelNameFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelNameFont.size, (isBusiness) ? toColour(0, 153, 255, 255) : toColour(17, 204, 17, 255), false, true, false, true);
|
||||
text = name || " ";
|
||||
size = propertyLabelNameFont.measure(text, game.width, 0.0, 0.0, propertyLabelNameFont.size, true, true);
|
||||
propertyLabelNameFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelNameFont.size, (isBusiness) ? toColour(0, 153, 255, 255) : toColour(17, 204, 17, 255), false, true, false, true);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
function renderPropertyExitLabel(position) {
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(propertyLabelNameFont == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(propertyLabelLockedFont == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let text = "EXIT";
|
||||
let size = propertyLabelNameFont.measure(text, game.width, 0.0, 0.0, propertyLabelNameFont.size, true, true);
|
||||
propertyLabelNameFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelNameFont.size, COLOUR_WHITE, false, true, false, true);
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = new Vec3(0.0, 0.0, 0.0);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
screenPosition = natives.getViewportPositionOfCoord(tempPosition, natives.getGameViewportId());
|
||||
} else {
|
||||
screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
}
|
||||
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let text = "EXIT";
|
||||
let size = propertyLabelNameFont.measure(text, game.width, 0.0, 0.0, propertyLabelNameFont.size, true, true);
|
||||
propertyLabelNameFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, propertyLabelNameFont.size, COLOUR_WHITE, false, true, false, true);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
function renderJobLabel(name, position, jobType) {
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
if(localPlayer == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(jobNameLabelFont == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(jobHelpLabelFont == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let text = "";
|
||||
if(jobType == localPlayerJobType) {
|
||||
if(localPlayerWorking) {
|
||||
text = "Use /uniform and /equip for job stuff, or /stopwork to go off duty";
|
||||
} else {
|
||||
text = "Use /startwork to go on duty";
|
||||
}
|
||||
} else {
|
||||
if(localPlayerJobType == 0) {
|
||||
text = "Use /takejob to work here";
|
||||
} else {
|
||||
text = "You already have a job. Use /quitjob if you want this one";
|
||||
}
|
||||
}
|
||||
let tempPosition = position;
|
||||
tempPosition.z = tempPosition.z + propertyLabelHeight;
|
||||
let screenPosition = new Vec3(0.0, 0.0, 0.0);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
screenPosition = natives.getViewportPositionOfCoord(tempPosition, natives.getGameViewportId());
|
||||
} else {
|
||||
screenPosition = getScreenFromWorldPosition(tempPosition);
|
||||
}
|
||||
|
||||
let size = jobHelpLabelFont.measure(text, game.width, 0.0, 0.0, jobHelpLabelFont.size, true, true);
|
||||
jobHelpLabelFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, jobHelpLabelFont.size, COLOUR_YELLOW, false, true, false, true);
|
||||
if(screenPosition.x < 0 || screenPosition.x > game.width) {
|
||||
return false;
|
||||
}
|
||||
|
||||
screenPosition.y -= 18;
|
||||
let text = "";
|
||||
if(jobType == localPlayerJobType) {
|
||||
if(localPlayerWorking) {
|
||||
text = getLocaleString("JobEquipAndUniformLabel", "/equip", "/uniform", "/stopwork");
|
||||
} else {
|
||||
text = getLocaleString("StartWorkLabel", "/startwork");
|
||||
}
|
||||
} else {
|
||||
if(localPlayerJobType == 0) {
|
||||
text = getLocaleString("TakeJobLabel", "/takejob");
|
||||
} else {
|
||||
text = getLocaleString("NotYourJobLabel", "/quitjob");
|
||||
}
|
||||
}
|
||||
|
||||
text = name + " Job";
|
||||
size = jobNameLabelFont.measure(text, game.width, 0.0, 0.0, jobNameLabelFont.size, true, true);
|
||||
jobNameLabelFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, jobNameLabelFont.size, COLOUR_WHITE, false, true, false, true);
|
||||
let size = jobHelpLabelFont.measure(text, game.width, 0.0, 0.0, jobHelpLabelFont.size, true, true);
|
||||
jobHelpLabelFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, jobHelpLabelFont.size, COLOUR_YELLOW, false, true, false, true);
|
||||
|
||||
screenPosition.y -= 18;
|
||||
|
||||
text = getLocaleString("JobLabel", name);
|
||||
size = jobNameLabelFont.measure(text, game.width, 0.0, 0.0, jobNameLabelFont.size, true, true);
|
||||
jobNameLabelFont.render(text, [screenPosition.x-size[0]/2, screenPosition.y-size[1]/2], game.width, 0.0, 0.0, jobNameLabelFont.size, COLOUR_WHITE, false, true, false, true);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
function processLabelRendering() {
|
||||
if(renderLabels) {
|
||||
if(!areServerElementsSupported()) {
|
||||
if(localPlayer != null) {
|
||||
for(let i in businesses) {
|
||||
if(getDistance(localPlayer.position, businesses[i].entrancePosition) <= 75.0) {
|
||||
natives.drawColouredCylinder(getPosBelowPos(businesses[i].entrancePosition, 1.0), 0.0, 0.0, 0, 153, 255, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(renderLabels) {
|
||||
if(!areServerElementsSupported()) {
|
||||
if(localPlayer != null) {
|
||||
getServerData().businesses.forEach((business) => {
|
||||
if(getDistance(localPlayer.position, business.entrancePosition) <= 75.0) {
|
||||
natives.drawColouredCylinder(getPosBelowPos(business.entrancePosition, 1.0), 0.0, 0.0, 0, 153, 255, 255);
|
||||
//renderPropertyEntranceLabel(business.name, business.entrancePosition, business.locked, true, makeLargeNumberReadable(business.price), makeLargeNumberReadable(business.rentPrice), business.labelInfoType);
|
||||
}
|
||||
});
|
||||
|
||||
if(areWorldLabelsSupported()) {
|
||||
if(localPlayer != null) {
|
||||
let pickups = getElementsByType(ELEMENT_PICKUP);
|
||||
for(let i in pickups) {
|
||||
if(pickups[i].getData("vrr.label.type") != null) {
|
||||
if(getDistance(localPlayer.position, pickups[i].position) <= renderLabelDistance) {
|
||||
if(!pickups[i].isOnScreen) {
|
||||
let price = "0";
|
||||
let rentPrice = "0";
|
||||
let labelInfoType = VRR_PROPLABEL_INFO_NONE;
|
||||
if(pickups[i].getData("vrr.label.price") != null) {
|
||||
price = makeLargeNumberReadable(pickups[i].getData("vrr.label.price"));
|
||||
}
|
||||
getServerData().houses.forEach((house) => {
|
||||
if(getDistance(localPlayer.position, house.entrancePosition) <= 75.0) {
|
||||
natives.drawColouredCylinder(getPosBelowPos(house.entrancePosition, 1.0), 0.0, 0.0, 0, 200, 0, 255);
|
||||
//renderPropertyEntranceLabel("House", house.entrancePosition, house.locked, true, makeLargeNumberReadable(house.price), makeLargeNumberReadable(house.rentPrice), 0);
|
||||
}
|
||||
});
|
||||
|
||||
if(pickups[i].getData("vrr.label.rentprice") != null) {
|
||||
rentPrice = makeLargeNumberReadable(pickups[i].getData("vrr.label.rentprice"));
|
||||
}
|
||||
getServerData().jobs.forEach((job) => {
|
||||
if(getDistance(localPlayer.position, job.position) <= 75.0) {
|
||||
natives.drawColouredCylinder(getPosBelowPos(job.position, 1.0), 0.0, 0.0, 255, 255, 0, 255);
|
||||
//renderJobLabel(job.name, job.position, job.jobType);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(pickups[i].getData("vrr.label.help") != null) {
|
||||
labelInfoType = pickups[i].getData("vrr.label.help");
|
||||
}
|
||||
if(areWorldLabelsSupported()) {
|
||||
if(localPlayer != null) {
|
||||
let pickups = getElementsByType(ELEMENT_PICKUP);
|
||||
for(let i in pickups) {
|
||||
if(pickups[i].getData("vrr.label.type") != null) {
|
||||
if(getDistance(localPlayer.position, pickups[i].position) <= renderLabelDistance) {
|
||||
if(!pickups[i].isOnScreen) {
|
||||
let price = "0";
|
||||
let rentPrice = "0";
|
||||
let labelInfoType = VRR_PROPLABEL_INFO_NONE;
|
||||
if(pickups[i].getData("vrr.label.price") != null) {
|
||||
price = makeLargeNumberReadable(pickups[i].getData("vrr.label.price"));
|
||||
}
|
||||
|
||||
switch(pickups[i].getData("vrr.label.type")) {
|
||||
case VRR_LABEL_BUSINESS:
|
||||
renderPropertyEntranceLabel(pickups[i].getData("vrr.label.name"), pickups[i].position, pickups[i].getData("vrr.label.locked"), true, price, rentPrice, labelInfoType);
|
||||
break;
|
||||
if(pickups[i].getData("vrr.label.rentprice") != null) {
|
||||
rentPrice = makeLargeNumberReadable(pickups[i].getData("vrr.label.rentprice"));
|
||||
}
|
||||
|
||||
case VRR_LABEL_HOUSE:
|
||||
renderPropertyEntranceLabel("House", pickups[i].position, pickups[i].getData("vrr.label.locked"), false, price, rentPrice, labelInfoType);
|
||||
break;
|
||||
if(pickups[i].getData("vrr.label.help") != null) {
|
||||
labelInfoType = pickups[i].getData("vrr.label.help");
|
||||
}
|
||||
|
||||
case VRR_LABEL_JOB:
|
||||
renderJobLabel(pickups[i].getData("vrr.label.name"), pickups[i].position, pickups[i].getData("vrr.label.jobType"));
|
||||
break;
|
||||
switch(pickups[i].getData("vrr.label.type")) {
|
||||
case VRR_LABEL_BUSINESS: {
|
||||
renderPropertyEntranceLabel(pickups[i].getData("vrr.label.name"), pickups[i].position, pickups[i].getData("vrr.label.locked"), true, price, rentPrice, labelInfoType);
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_LABEL_EXIT:
|
||||
renderPropertyExitLabel(pickups[i].position);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case VRR_LABEL_HOUSE: {
|
||||
renderPropertyEntranceLabel(pickups[i].getData("vrr.label.name"), pickups[i].position, pickups[i].getData("vrr.label.locked"), false, price, rentPrice, labelInfoType);
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_LABEL_JOB: {
|
||||
renderJobLabel(pickups[i].getData("vrr.label.name"), pickups[i].position, pickups[i].getData("vrr.label.jobType"));
|
||||
break;
|
||||
}
|
||||
|
||||
case VRR_LABEL_EXIT: {
|
||||
renderPropertyExitLabel(pickups[i].position);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
62
scripts/client/locale.js
Normal file
@@ -0,0 +1,62 @@
|
||||
// ===========================================================================
|
||||
// Vortrex's Roleplay Resource
|
||||
// https://github.com/VortrexFTW/gtac_roleplay
|
||||
// ===========================================================================
|
||||
// FILE: locale.js
|
||||
// DESC: Provides locale functions and usage
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
function getLocaleString(stringName, ...args) {
|
||||
if(typeof getServerData().localeStrings[localLocaleId][stringName] == undefined) {
|
||||
return "";
|
||||
}
|
||||
|
||||
let tempString = getServerData().localeStrings[localLocaleId][stringName];
|
||||
|
||||
if(tempString == "" || tempString == null || tempString == undefined) {
|
||||
return "";
|
||||
}
|
||||
|
||||
for(let i = 1; i <= args.length; i++) {
|
||||
tempString = tempString.replace(`{${i}}`, args[i-1]);
|
||||
}
|
||||
|
||||
return tempString;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getAvailableLocaleOptions() {
|
||||
return getServerData().localeOptions.filter(localeOption => localeOption.requiresUnicode == false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadLocaleConfig() {
|
||||
let configFile = loadTextFile("config/client/locale.json");
|
||||
getServerData().localeOptions = JSON.parse(configFile);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadAllLocaleStrings() {
|
||||
let localeOptions = getServerData().localeOptions;
|
||||
for(let i in localeOptions) {
|
||||
logToConsole(LOG_INFO, `[VRR.Locale] Loading locale strings for ${localeOptions[i].englishName} (${i})`);
|
||||
let localeFile = loadTextFile(`locale/${localeOptions[i].stringsFile}`);
|
||||
let localeData = JSON.parse(localeFile);
|
||||
|
||||
getServerData().localeStrings[i] = localeData;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocale(tempLocaleId) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Locale] Setting locale to ${tempLocaleId} (${getServerData().localeOptions[tempLocaleId].englishName})`);
|
||||
localLocaleId = tempLocaleId;
|
||||
resetGUIStrings();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -15,38 +15,38 @@ let logoSize = toVector2(128, 128);
|
||||
|
||||
function initLogoScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Logo]: Initializing logo script ...");
|
||||
//logoImage = loadLogoImage();
|
||||
//logoImage = loadLogoImage();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Logo]: Logo script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadLogoImage() {
|
||||
let logoStream = openFile(mainLogoPath);
|
||||
let tempLogoImage = null;
|
||||
if(logoStream != null) {
|
||||
tempLogoImage = graphics.loadPNG(logoStream);
|
||||
logoStream.close();
|
||||
}
|
||||
let logoStream = openFile(mainLogoPath);
|
||||
let tempLogoImage = null;
|
||||
if(logoStream != null) {
|
||||
tempLogoImage = graphics.loadPNG(logoStream);
|
||||
logoStream.close();
|
||||
}
|
||||
|
||||
return tempLogoImage;
|
||||
return tempLogoImage;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processLogoRendering() {
|
||||
if(renderLogo) {
|
||||
if(logoImage != null) {
|
||||
graphics.drawRectangle(logoImage, logoPos, logoSize);
|
||||
}
|
||||
}
|
||||
if(renderLogo) {
|
||||
if(logoImage != null) {
|
||||
graphics.drawRectangle(logoImage, logoPos, logoSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setServerLogoRenderState(state) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Server logo ${(state) ? "enabled" : "disabled"}`);
|
||||
renderLogo = state;
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Server logo ${(state) ? "enabled" : "disabled"}`);
|
||||
renderLogo = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -7,6 +7,9 @@
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let resourceReady = false;
|
||||
let resourceStarted = false;
|
||||
|
||||
let inSphere = false;
|
||||
let inVehicle = false;
|
||||
let inVehicleSeat = false;
|
||||
@@ -27,7 +30,7 @@ let renderHotBar = true;
|
||||
let renderItemActionDelay = true;
|
||||
let renderInteriorLights = true;
|
||||
|
||||
let logLevel = LOG_ERROR|LOG_WARN|LOG_INFO;
|
||||
let logLevel = LOG_INFO|LOG_DEBUG|LOG_VERBOSE;
|
||||
|
||||
let weaponDamageEnabled = {};
|
||||
let weaponDamageEvent = {};
|
||||
@@ -66,12 +69,24 @@ let vehiclePurchasePosition = null;
|
||||
|
||||
let forceWantedLevel = 0;
|
||||
|
||||
let guiSubmitKey = false;
|
||||
let guiLeftKey = false;
|
||||
let guiRightKey = false;
|
||||
let guiUpKey = false;
|
||||
let guiDownKey = false;
|
||||
|
||||
// Pre-cache all allowed skins
|
||||
let allowedSkins = getAllowedSkins(getGame());
|
||||
|
||||
let businesses = [];
|
||||
let houses = [];
|
||||
let jobs = [];
|
||||
let vehicles = [];
|
||||
let localLocaleId = 0;
|
||||
|
||||
let serverData = {
|
||||
houses: [],
|
||||
businesses: [],
|
||||
localeStrings: [],
|
||||
localeOptions: [],
|
||||
vehicles: [],
|
||||
jobs: [],
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -7,7 +7,14 @@
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let smallGameMessageFont = null;
|
||||
let bigGameMessageFonts = {};
|
||||
let bigGameMessageFontName = "";
|
||||
let bigGameMessageText = "";
|
||||
let bigGameMessageColour = COLOUR_WHITE;
|
||||
let bigGameMessageTimer = null;
|
||||
|
||||
let smallGameMessageFonts = {};
|
||||
let smallGameMessageFontName = "";
|
||||
let smallGameMessageText = "";
|
||||
let smallGameMessageColour = COLOUR_WHITE;
|
||||
let smallGameMessageTimer = null;
|
||||
@@ -16,64 +23,73 @@ let smallGameMessageTimer = null;
|
||||
|
||||
function initMessagingScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Messaging]: Initializing messaging script ...");
|
||||
smallGameMessageFont = loadSmallGameMessageFont();
|
||||
smallGameMessageFonts = loadSmallGameMessageFonts();
|
||||
bigGameMessageFonts = loadSmallGameMessageFonts();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Messaging]: Messaging script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadSmallGameMessageFont() {
|
||||
let tempSmallGameMessageFont = null;
|
||||
let fontStream = openFile("files/fonts/pricedown.ttf");
|
||||
if(fontStream != null) {
|
||||
tempSmallGameMessageFont = lucasFont.createFont(fontStream, 20.0);
|
||||
fontStream.close();
|
||||
}
|
||||
function loadSmallGameMessageFonts() {
|
||||
let tempSmallGameMessageFonts = {};
|
||||
let fontStream = openFile("files/fonts/pricedown.ttf");
|
||||
if(fontStream != null) {
|
||||
tempSmallGameMessageFonts["Pricedown"] = lucasFont.createFont(fontStream, 20.0);
|
||||
fontStream.close();
|
||||
}
|
||||
|
||||
return tempSmallGameMessageFont;
|
||||
tempSmallGameMessageFonts["Roboto"] = lucasFont.createDefaultFont(20.0, "Roboto");
|
||||
tempSmallGameMessageFonts["RobotoLight"] = lucasFont.createDefaultFont(20.0, "Roboto", "Light");
|
||||
|
||||
return tempSmallGameMessageFonts;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadBigGameMessageFont() {
|
||||
let tempBigGameMessageFont = null;
|
||||
let fontStream = openFile("files/fonts/pricedown.ttf");
|
||||
if(fontStream != null) {
|
||||
tempBigGameMessageFont = lucasFont.createFont(fontStream, 28.0);
|
||||
fontStream.close();
|
||||
}
|
||||
let tempBigGameMessageFonts = {};
|
||||
let fontStream = openFile("files/fonts/pricedown.ttf");
|
||||
if(fontStream != null) {
|
||||
tempBigGameMessageFonts["Pricedown"] = lucasFont.createFont(fontStream, 28.0);
|
||||
fontStream.close();
|
||||
}
|
||||
|
||||
return tempBigGameMessageFont;
|
||||
tempBigGameMessageFonts["Roboto"] = lucasFont.createDefaultFont(28.0, "Roboto");
|
||||
tempBigGameMessageFonts["RobotoLight"] = lucasFont.createDefaultFont(28.0, "Roboto", "Light");
|
||||
|
||||
return tempBigGameMessageFonts;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processSmallGameMessageRendering() {
|
||||
if(renderSmallGameMessage) {
|
||||
if(smallGameMessageFont != null) {
|
||||
if(smallGameMessageFont != "") {
|
||||
smallGameMessageFont.render(smallGameMessageText, [0, game.height-90], game.width, 0.5, 0.0, smallGameMessageFont.size, smallGameMessageColour, true, true, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(renderSmallGameMessage) {
|
||||
if(smallGameMessageText != "") {
|
||||
if(smallGameMessageFonts[smallGameMessageFontName] != null) {
|
||||
smallGameMessageFonts[smallGameMessageFontName].render(smallGameMessageText, [0, game.height-90], game.width, 0.5, 0.0, smallGameMessageFonts[smallGameMessageFontName].size, smallGameMessageColour, true, true, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showSmallGameMessage(text, colour, duration) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Messaging] Showing small game message '${text}' for ${duration}ms`);
|
||||
if(smallGameMessageText != "") {
|
||||
clearTimeout(smallGameMessageTimer);
|
||||
}
|
||||
function showSmallGameMessage(text, colour, duration, fontName) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Messaging] Showing small game message '${text}' using font ${fontName} for ${duration}ms`);
|
||||
if(smallGameMessageText != "") {
|
||||
clearTimeout(smallGameMessageTimer);
|
||||
}
|
||||
|
||||
smallGameMessageColour = colour;
|
||||
smallGameMessageText = text;
|
||||
smallGameMessageFontName = fontName;
|
||||
smallGameMessageColour = colour;
|
||||
smallGameMessageText = text;
|
||||
|
||||
smallGameMessageTimer = setTimeout(function() {
|
||||
smallGameMessageText = "";
|
||||
smallGameMessageColour = COLOUR_WHITE;
|
||||
smallGameMessageTimer = null;
|
||||
}, duration);
|
||||
smallGameMessageTimer = setTimeout(function() {
|
||||
smallGameMessageText = "";
|
||||
smallGameMessageColour = COLOUR_WHITE;
|
||||
smallGameMessageTimer = null;
|
||||
smallGameMessageFontName = "";
|
||||
}, duration);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -20,7 +20,7 @@ function SetStandardControlsEnabled(bEnabled)
|
||||
|
||||
if (game.standardControls === undefined)
|
||||
{
|
||||
console.warn("game.standardControls not implemented");
|
||||
logToConsole(LOG_WARN, "game.standardControls not implemented");
|
||||
return;
|
||||
}
|
||||
game.standardControls = bEnabled;
|
||||
@@ -93,7 +93,7 @@ function GetMouseSensitivity()
|
||||
{
|
||||
if (game.getMouseSensitivity === undefined)
|
||||
{
|
||||
//console.error("game.getMouseSensitivity not implemented");
|
||||
//logToConsole(LOG_ERROR, "game.getMouseSensitivity not implemented");
|
||||
return [0.0025,0.003];
|
||||
}
|
||||
let MouseSensitivity = game.getMouseSensitivity();
|
||||
@@ -124,7 +124,7 @@ function ProcessLineOfSight(vecStartX, vecStartY, vecStartZ, vecEndX, vecEndY, v
|
||||
{
|
||||
if (game.processLineOfSight === undefined)
|
||||
{
|
||||
console.warn("game.processLineOfSight not implemented");
|
||||
logToConsole(LOG_WARN, "game.processLineOfSight not implemented");
|
||||
return [null];
|
||||
}
|
||||
let Result = game.processLineOfSight([vecStartX, vecStartY, vecStartZ], [vecEndX, vecEndY, vecEndZ], bCheckBuildings, bCheckVehicles, bCheckPeds, bCheckObjects, bCheckDummies, bCheckSeeThroughStuff, bIgnoreSomeObjectsForCamera);
|
||||
@@ -632,10 +632,10 @@ function update()
|
||||
|
||||
addEventHandler("OnCameraProcess", (event) =>
|
||||
{
|
||||
if(mouseCameraEnabled) {
|
||||
update();
|
||||
event.preventDefault();
|
||||
}
|
||||
if(mouseCameraEnabled) {
|
||||
update();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
function toggleMouseCamera() {
|
||||
|
||||
@@ -48,11 +48,11 @@ function updatePlayerNameTag(clientName, characterName, colour, paused, ping) {
|
||||
playerPaused[clientName] = paused;
|
||||
playerPing[clientName] = ping;
|
||||
|
||||
if(game.game == VRR_GAME_GTA_IV) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
let client = getPlayerFromParams(clientName);
|
||||
if(client != false) {
|
||||
if(client.player != null) {
|
||||
client.player.setNametag(characterName, colour);
|
||||
if(getPlayerPed(client) != null) {
|
||||
getPlayerPed(client).setNametag(characterName, colour);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,14 +74,14 @@ function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour,
|
||||
alpha *= 0.75;
|
||||
let width = nametagWidth;
|
||||
health = Math.max(0.0, Math.min(1.0, health));
|
||||
armour = Math.max(0.0, Math.min(1.0, armour));
|
||||
armour = Math.max(0.0, Math.min(1.0, armour));
|
||||
|
||||
// Starts at bottom and works it's way up
|
||||
// -------------------------------------------
|
||||
// Health Bar
|
||||
// Starts at bottom and works it's way up
|
||||
// -------------------------------------------
|
||||
// Health Bar
|
||||
|
||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
||||
if(game.game == VRR_GAME_GTA_III) {
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
// Mickey Hamfists is ridiculously tall. Raise the nametag for him a bit
|
||||
if(skin == 109) {
|
||||
y -= 20;
|
||||
@@ -104,7 +104,7 @@ function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour,
|
||||
graphics.drawRectangle(null, [hx+2, hy+2], [(width-4)*health, 10-6], colour, colour, colour, colour);
|
||||
}
|
||||
|
||||
// Armour Bar
|
||||
// Armour Bar
|
||||
if (armour > 0.0)
|
||||
{
|
||||
// Go up 10 pixels to draw the next part
|
||||
@@ -119,16 +119,16 @@ function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour,
|
||||
|
||||
y -= 20;
|
||||
|
||||
// Nametag
|
||||
// Nametag
|
||||
if(nametagFont != null) {
|
||||
let size = nametagFont.measure(text, game.width, 0.0, 0.0, nametagFont.size, false, false);
|
||||
nametagFont.render(text, [x-size[0]/2, y-size[1]/2], game.width, 0.0, 0.0, nametagFont.size, colour, false, false, false, true);
|
||||
}
|
||||
|
||||
// Go up another 10 pixels for the next part
|
||||
y -= 20;
|
||||
// Go up another 10 pixels for the next part
|
||||
y -= 20;
|
||||
|
||||
// AFK Status
|
||||
// AFK Status
|
||||
if(afkStatusFont != null) {
|
||||
if(afk) {
|
||||
let size = afkStatusFont.measure("PAUSED", game.width, 0.0, 0.0, afkStatusFont.size, false, false);
|
||||
@@ -139,7 +139,7 @@ function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour,
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function updateNametags(element) {
|
||||
function updateNametag(element) {
|
||||
if(!areWorldLabelsSupported()) {
|
||||
return false;
|
||||
}
|
||||
@@ -147,10 +147,11 @@ function updateNametags(element) {
|
||||
if(localPlayer != null) {
|
||||
let playerPos = localPlayer.position;
|
||||
let elementPos = element.position;
|
||||
let client = getClientFromPlayerElement(element);
|
||||
|
||||
elementPos[2] += 0.9;
|
||||
|
||||
//if(typeof element.getComponentPosition()) {
|
||||
|
||||
let screenPos = getScreenFromWorldPosition(elementPos);
|
||||
if (screenPos[2] >= 0.0) {
|
||||
let health = element.health/100.0;
|
||||
@@ -173,27 +174,29 @@ function updateNametags(element) {
|
||||
}
|
||||
|
||||
if(element.type == ELEMENT_PLAYER) {
|
||||
let name = element.name;
|
||||
let colour = COLOUR_WHITE;
|
||||
let name = element.name;
|
||||
let colour = COLOUR_WHITE;
|
||||
let paused = false;
|
||||
let ping = -1;
|
||||
|
||||
if(typeof playerNames[element.name] != "undefined") {
|
||||
name = playerNames[element.name];
|
||||
}
|
||||
if(element.isType(ELEMENT_PLAYER)) {
|
||||
if(typeof playerNames[element.name] != "undefined") {
|
||||
name = playerNames[element.name];
|
||||
}
|
||||
|
||||
if(typeof playerPaused[element.name] != "undefined") {
|
||||
paused = playerPaused[element.name];
|
||||
}
|
||||
if(typeof playerPaused[element.name] != "undefined") {
|
||||
paused = playerPaused[element.name];
|
||||
}
|
||||
|
||||
if(typeof playerColours[element.name] != "undefined") {
|
||||
colour = playerColours[element.name];
|
||||
if(typeof playerColours[element.name] != "undefined") {
|
||||
colour = playerColours[element.name];
|
||||
}
|
||||
|
||||
if(typeof playerPing[element.name] != "undefined") {
|
||||
ping = playerPing[element.name];
|
||||
}
|
||||
}
|
||||
|
||||
if(typeof playerPing[element.name] != "undefined") {
|
||||
ping = playerPing[element.name];
|
||||
}
|
||||
|
||||
drawNametag(screenPos[0], screenPos[1], health, armour, name, ping, 1.0-distance/nametagDistance, distance, colour, paused, element.skin);
|
||||
}
|
||||
}
|
||||
@@ -205,7 +208,7 @@ function updateNametags(element) {
|
||||
|
||||
function getClientFromPlayer(player) {
|
||||
getClients().forEach(function(client) {
|
||||
if(client.player == player) {
|
||||
if(getPlayerPed(client) == player) {
|
||||
return client;
|
||||
}
|
||||
});
|
||||
@@ -214,13 +217,13 @@ function getClientFromPlayer(player) {
|
||||
// ===========================================================================
|
||||
|
||||
function processNameTagRendering(event) {
|
||||
//if(game.game >= GAME_GTA_IV) {
|
||||
//if(getGame() >= GAME_GTA_IV) {
|
||||
// return false;
|
||||
//}
|
||||
|
||||
getElementsByType(ELEMENT_PLAYER).forEach(function(player) {
|
||||
if(player != localPlayer) {
|
||||
updateNametags(player);
|
||||
getElementsByType(ELEMENT_PED).forEach(function(ped) {
|
||||
if(ped != localPlayer) {
|
||||
updateNametag(ped);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -232,3 +235,9 @@ function createColour(alpha, red, green, blue) {
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setNameTagDistance(distance) {
|
||||
nametagDistance = distance;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -7,58 +7,89 @@
|
||||
// TYPE: Server (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let disconnectReasons = [
|
||||
"Lost Connection",
|
||||
"Disconnected",
|
||||
"Unsupported Client",
|
||||
"Wrong Game",
|
||||
"Incorrect Password",
|
||||
"Unsupported Executable",
|
||||
"Disconnected",
|
||||
"Banned",
|
||||
"Failed",
|
||||
"Invalid Name",
|
||||
"Crashed",
|
||||
"Modified Game"
|
||||
];
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendNetworkEventToPlayer(networkEvent, client, ...args) {
|
||||
triggerNetworkEvent.apply(null, networkEvent, client, args);
|
||||
triggerNetworkEvent.apply(null, networkEvent, client, args);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerPosition() {
|
||||
return localPlayer.position;
|
||||
return localPlayer.position;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayerPosition(position) {
|
||||
localPlayer.position = position;
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.setCharCoordinates(localPlayer, position);
|
||||
} else {
|
||||
localPlayer.position = position;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getElementPosition(element) {
|
||||
return element.position;
|
||||
function getElementPosition(elementId) {
|
||||
return getElementFromId(elementId).position;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementPosition(element, position) {
|
||||
if(!element.isSyncer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
element.position = position;
|
||||
function getElementHeading(elementId) {
|
||||
return getElementFromId(elementId).heading;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function deleteGameElement(element, position) {
|
||||
if(!element.isOwner) {
|
||||
return false;
|
||||
}
|
||||
function setElementPosition(elementId, position) {
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
destroyGameElement(element);
|
||||
if(!getElementFromId(elementId).isSyncer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getElementFromId(elementId).position = position;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function deleteGameElement(elementId, position) {
|
||||
if(!getElementFromId(elementId).isOwner) {
|
||||
return false;
|
||||
}
|
||||
|
||||
destroyGameElement(getElementFromId(elementId));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createGameVehicle(modelIndex, position, heading) {
|
||||
return game.createVehicle(getGameConfig().vehicles[getGame()][modelIndex][0], position, heading);
|
||||
return game.createVehicle(getGameConfig().vehicles[getGame()][modelIndex][0], position, heading);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addNetworkEventHandler(eventName, handlerFunction) {
|
||||
addNetworkHandler(eventName, handlerFunction);
|
||||
addNetworkHandler(eventName, handlerFunction);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -101,7 +132,7 @@ function getClientsInRange(position, distance) {
|
||||
// ===========================================================================
|
||||
|
||||
function getCiviliansInRange(position, distance) {
|
||||
return getElementsByType(ELEMENT_PED).filter(x => !x.isType(ELEMENT_PLAYER) && getElementPosition(x).position.distance(position) <= distance);
|
||||
return getElementsByType(ELEMENT_PED).filter(x => !x.isType(ELEMENT_PLAYER) && x.position.distance(position) <= distance);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -113,7 +144,7 @@ function getPlayersInRange(position, distance) {
|
||||
// ===========================================================================
|
||||
|
||||
function getElementsByTypeInRange(elementType, position, distance) {
|
||||
return getElementsByType(elementType).filter(x => getElementPosition(x).position.distance(position) <= distance);
|
||||
return getElementsByType(elementType).filter(x => x.position.distance(position) <= distance);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -124,6 +155,12 @@ function getClosestCivilian(position) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getClosestPlayer(position) {
|
||||
return getElementsByType(ELEMENT_PLAYER).reduce((i, j) => ((i.position.distance(position) <= j.position.distance(position)) ? i : j));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function is2dPositionOnScreen(pos2d) {
|
||||
return pos2d.x >= 0 && pos2d.y >= 0 && pos2d.x <= game.width && pos2d.y <= game.height;
|
||||
}
|
||||
@@ -142,3 +179,522 @@ function getVehiclesInRange(position, range) {
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createGameBlip(blipModel, position, name = "") {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
let blipId = natives.addBlipForCoord(position);
|
||||
if(blipId) {
|
||||
natives.changeBlipSprite(blipId, blipModel);
|
||||
natives.setBlipMarkerLongDistance(blipId, false);
|
||||
natives.setBlipAsShortRange(blipId, true);
|
||||
natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
|
||||
return blipId;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
||||
if(entity != null) {
|
||||
return entity.setData(dataName, dataValue);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleEngine(vehicleId, state) {
|
||||
getElementFromId(vehicleId).engine = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleLights(vehicleId, state) {
|
||||
getElementFromId(vehicleId).lights = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function repairVehicle(syncId) {
|
||||
getVehicleFromSyncId(syncId).fix();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncVehicleProperties(vehicle) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
||||
vehicle.lights = lightStatus;
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.invincible")) {
|
||||
let invincible = getEntityData(vehicle, "vrr.invincible");
|
||||
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
||||
let panelsStatus = getEntityData(vehicle, "vrr.panelStatus");
|
||||
for(let i in panelsStatus) {
|
||||
vehicle.setPanelStatus(i, panelsStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) {
|
||||
let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus");
|
||||
for(let i in wheelsStatus) {
|
||||
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.lightStatus")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lightStatus");
|
||||
for(let i in lightStatus) {
|
||||
vehicle.setLightStatus(i, lightStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) {
|
||||
let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight");
|
||||
vehicle.setSuspensionHeight(suspensionHeight);
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
||||
for(let i in allUpgrades) {
|
||||
vehicle.removeUpgrade(i);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
||||
for(let i in upgrades) {
|
||||
if(upgrades[i] != 0) {
|
||||
vehicle.addUpgrade(upgrades[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.livery")) {
|
||||
let livery = getEntityData(vehicle, "vrr.livery");
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
vehicle.setPaintJob(livery);
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
vehicle.livery = livery;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function removeEntityData(entity, dataName) {
|
||||
if(entity != null) {
|
||||
return entity.removeData(dataName);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesEntityDataExist(entity, dataName) {
|
||||
if(entity != null) {
|
||||
return (entity.getData(dataName) != null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncCivilianProperties(civilian) {
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(civilian, "vrr.scale");
|
||||
let tempMatrix = civilian.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = civilian.position;
|
||||
civilian.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
civilian.position = tempPosition;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(civilian, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(civilian, "vrr.fightStyle");
|
||||
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.walkStyle")) {
|
||||
let walkStyle = getEntityData(civilian, "vrr.walkStyle");
|
||||
civilian.walkStyle = walkStyle;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair");
|
||||
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead");
|
||||
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes");
|
||||
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand");
|
||||
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand");
|
||||
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist");
|
||||
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip");
|
||||
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot");
|
||||
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot");
|
||||
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.anim")) {
|
||||
let animData = getEntityData(vehicle, "vrr.anim");
|
||||
civilian.addAnimation(animData[0], animData[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function preventDefaultEventAction(event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncPlayerProperties(player) {
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(player, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(player, "vrr.scale");
|
||||
let tempMatrix = player.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = player.position;
|
||||
player.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
player.position = tempPosition;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(player, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(player, "vrr.fightStyle");
|
||||
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//if(getGame() == VRR_GAME_GTA_SA) {
|
||||
// if(doesEntityDataExist(player, "vrr.walkStyle")) {
|
||||
// let walkStyle = getEntityData(player, "vrr.walkStyle");
|
||||
// player.walkStyle = walkStyle;
|
||||
// }
|
||||
//}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHair")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHair");
|
||||
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHead")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHead");
|
||||
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartUpper")) {
|
||||
let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper");
|
||||
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartLower")) {
|
||||
let bodyPartLower = getEntityData(player, "vrr.bodyPartLower");
|
||||
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(player, "vrr.bodyPropHair");
|
||||
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(player, "vrr.bodyPropHead");
|
||||
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes");
|
||||
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand");
|
||||
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand");
|
||||
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist");
|
||||
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(player, "vrr.bodyPropHip");
|
||||
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot");
|
||||
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot");
|
||||
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncObjectProperties(object) {
|
||||
if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||
if(doesEntityDataExist(object, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(object, "vrr.scale");
|
||||
let tempMatrix = object.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = object.position;
|
||||
object.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
object.position = tempPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function consolePrint(text) {
|
||||
console.log(text);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function consoleWarn(text) {
|
||||
console.warn(text);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function consoleError(text) {
|
||||
console.error(text);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerName(client) {
|
||||
return client.name;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getGame() {
|
||||
return game.game;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerId(client) {
|
||||
return client.index;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncElementProperties(element) {
|
||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
||||
if(typeof element.interior != "undefined") {
|
||||
element.interior = getEntityData(element, "vrr.interior");
|
||||
}
|
||||
}
|
||||
|
||||
switch(element.type) {
|
||||
case ELEMENT_VEHICLE:
|
||||
syncVehicleProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PED:
|
||||
syncCivilianProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PLAYER:
|
||||
syncPlayerProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_OBJECT:
|
||||
syncObjectProperties(element);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerPed(client) {
|
||||
return client.player;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getScreenWidth() {
|
||||
return game.width;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getScreenHeight() {
|
||||
return game.height;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function openAllGarages() {
|
||||
switch(getGame()) {
|
||||
case VRR_GAME_GTA_III:
|
||||
for(let i=0;i<=26;i++) {
|
||||
openGarage(i);
|
||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||
}
|
||||
break;
|
||||
|
||||
case VRR_GAME_GTA_VC:
|
||||
for(let i=0;i<=32;i++) {
|
||||
openGarage(i);
|
||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||
}
|
||||
break;
|
||||
|
||||
case VRR_GAME_GTA_SA:
|
||||
for(let i=0;i<=44;i++) {
|
||||
openGarage(i);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function closeAllGarages() {
|
||||
switch(getGame()) {
|
||||
case VRR_GAME_GTA_III:
|
||||
for(let i=0;i<=26;i++) {
|
||||
closeGarage(i);
|
||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||
}
|
||||
break;
|
||||
|
||||
case VRR_GAME_GTA_VC:
|
||||
for(let i=0;i<=32;i++) {
|
||||
closeGarage(i);
|
||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||
}
|
||||
break;
|
||||
|
||||
case VRR_GAME_GTA_SA:
|
||||
for(let i=0;i<=44;i++) {
|
||||
closeGarage(i);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPedInvincible(ped, state) {
|
||||
ped.invincible = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPedLookAt(ped, position) {
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
ped.lookAt(position, 10000);
|
||||
return true;
|
||||
} else {
|
||||
setElementHeading(ped.id, getHeadingFromPosToPos(getElementPosition(ped.id), position));
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementHeading(elementId, heading) {
|
||||
getElementFromId(elementId).heading = heading;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
19
scripts/client/npc.js
Normal file
@@ -0,0 +1,19 @@
|
||||
// ===========================================================================
|
||||
// Vortrex's Roleplay Resource
|
||||
// https://github.com/VortrexFTW/gtac_roleplay
|
||||
// ===========================================================================
|
||||
// FILE: npc.js
|
||||
// DESC: Provides NPC functions and processing
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
function processNPCMovement(npc) {
|
||||
//if(npc.isSyncer == true) {
|
||||
if(getEntityData(npc, "vrr.lookAtClosestPlayer") == true) {
|
||||
let closestPlayer = getClosestPlayer(getElementPosition(npc.id));
|
||||
setPedLookAt(npc, getElementPosition(closestPlayer.id));
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,39 +8,39 @@
|
||||
// ===========================================================================
|
||||
|
||||
function playStreamingRadio(url, loop, volume, element = false) {
|
||||
if(streamingRadio != null) {
|
||||
streamingRadio.stop();
|
||||
}
|
||||
if(streamingRadio != null) {
|
||||
streamingRadio.stop();
|
||||
}
|
||||
|
||||
streamingRadioVolume = volume;
|
||||
streamingRadioVolume = volume;
|
||||
|
||||
streamingRadio = audio.createSoundFromURL(url, loop);
|
||||
streamingRadio.volume = volume/100;
|
||||
streamingRadio.play();
|
||||
streamingRadio = audio.createSoundFromURL(url, loop);
|
||||
streamingRadio.volume = volume/100;
|
||||
streamingRadio.play();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function stopStreamingRadio() {
|
||||
if(streamingRadio != null) {
|
||||
streamingRadio.stop();
|
||||
}
|
||||
streamingRadio = null;
|
||||
if(streamingRadio != null) {
|
||||
streamingRadio.stop();
|
||||
}
|
||||
streamingRadio = null;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setStreamingRadioVolume(volume) {
|
||||
if(streamingRadio != null) {
|
||||
streamingRadioVolume = volume;
|
||||
streamingRadio.volume = volume/100;
|
||||
}
|
||||
if(streamingRadio != null) {
|
||||
streamingRadioVolume = volume;
|
||||
streamingRadio.volume = volume/100;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function playAudioFile(audioName, loop, volume) {
|
||||
playCustomAudio(audioName, volume/100, loop);
|
||||
findResourceByName("connectedrp-extra").exports.playCustomAudio(audioName, volume/100, loop);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -43,7 +43,7 @@ function processScoreBoardRendering() {
|
||||
}
|
||||
|
||||
if(renderScoreBoard) {
|
||||
if(isKeyDown(SDLK_TAB)) {
|
||||
if(isKeyDown(SDLK_TAB)) {
|
||||
if(scoreBoardListFont != null && scoreBoardTitleFont != null) {
|
||||
let scoreboardStart = (game.height/2)-(Math.floor(getClients().length/2)*20);
|
||||
let titleSize = scoreBoardTitleFont.measure("PLAYERS", game.width, 0.0, 1.0, 10, false, false);
|
||||
|
||||
@@ -8,197 +8,251 @@
|
||||
// ===========================================================================
|
||||
|
||||
function initServerScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Initializing server script ...");
|
||||
addAllNetworkHandlers();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Server script initialized!");
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Initializing server script ...");
|
||||
addAllNetworkHandlers();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Server script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addAllNetworkHandlers() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Adding network handlers ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Adding network handlers ...");
|
||||
|
||||
addNetworkEventHandler("vrr.smallGameMessage", showSmallGameMessage);
|
||||
addNetworkEventHandler("vrr.working", setLocalPlayerWorkingState);
|
||||
addNetworkEventHandler("vrr.jobType", setLocalPlayerJobType);
|
||||
addNetworkEventHandler("vrr.passenger", enterVehicleAsPassenger);
|
||||
// Chat history
|
||||
addNetworkEventHandler("m", receiveChatBoxMessageFromServer); // Not prefixed with VRR to make it as small as possible
|
||||
addNetworkEventHandler("vrr.chatScrollLines", setChatScrollLines);
|
||||
addNetworkEventHandler("vrr.chatAutoHideDelay", setChatAutoHideDelay);
|
||||
|
||||
addNetworkEventHandler("vrr.freeze", setLocalPlayerFrozenState);
|
||||
addNetworkEventHandler("vrr.control", setLocalPlayerControlState);
|
||||
addNetworkEventHandler("vrr.fadeCamera", fadeLocalCamera);
|
||||
addNetworkEventHandler("vrr.removeFromVehicle", removeLocalPlayerFromVehicle);
|
||||
addNetworkEventHandler("vrr.clearPeds", clearLocalPlayerOwnedPeds);
|
||||
addNetworkEventHandler("vrr.restoreCamera", restoreLocalCamera);
|
||||
addNetworkEventHandler("vrr.cameraLookAt", setLocalCameraLookAt);
|
||||
addNetworkEventHandler("vrr.logo", setServerLogoRenderState);
|
||||
addNetworkEventHandler("vrr.ambience", setCityAmbienceState);
|
||||
addNetworkEventHandler("vrr.runCode", runClientCode);
|
||||
addNetworkEventHandler("vrr.clearWeapons", clearLocalPlayerWeapons);
|
||||
addNetworkEventHandler("vrr.giveWeapon", giveLocalPlayerWeapon);
|
||||
addNetworkEventHandler("vrr.position", setLocalPlayerPosition);
|
||||
addNetworkEventHandler("vrr.heading", setLocalPlayerHeading);
|
||||
addNetworkEventHandler("vrr.interior", setLocalPlayerInterior);
|
||||
addNetworkEventHandler("vrr.minuteDuration", setMinuteDuration);
|
||||
addNetworkEventHandler("vrr.showJobRouteLocation", showJobRouteLocation);
|
||||
addNetworkEventHandler("vrr.hideJobRouteLocation", hideJobRouteLocation);
|
||||
addNetworkEventHandler("vrr.snow", setSnowState);
|
||||
addNetworkEventHandler("vrr.health", setLocalPlayerHealth);
|
||||
addNetworkEventHandler("vrr.enterPropertyKey", setEnterPropertyKey);
|
||||
addNetworkEventHandler("vrr.skinSelect", toggleSkinSelect);
|
||||
addNetworkEventHandler("vrr.hotbar", updatePlayerHotBar);
|
||||
addNetworkEventHandler("vrr.pedSpeech", playPedSpeech);
|
||||
addNetworkEventHandler("vrr.clearPedState", clearLocalPedState);
|
||||
addNetworkEventHandler("vrr.drunkEffect", setLocalPlayerDrunkEffect);
|
||||
addNetworkEventHandler("vrr.showItemActionDelay", showItemActionDelay);
|
||||
addNetworkEventHandler("vrr.set2DRendering", setPlayer2DRendering);
|
||||
addNetworkEventHandler("vrr.mouseCursor", toggleMouseCursor);
|
||||
addNetworkEventHandler("vrr.mouseCamera", toggleMouseCamera);
|
||||
addNetworkEventHandler("vrr.mouseCameraForce", setMouseCameraState);
|
||||
addNetworkEventHandler("vrr.weaponDamageEnabled", setPlayerWeaponDamageEnabled);
|
||||
addNetworkEventHandler("vrr.weaponDamageEvent", setPlayerWeaponDamageEvent);
|
||||
addNetworkEventHandler("vrr.spawned", onServerSpawnedPlayer);
|
||||
addNetworkEventHandler("vrr.money", setLocalPlayerCash);
|
||||
addNetworkEventHandler("vrr.armour", setLocalPlayerArmour);
|
||||
addNetworkEventHandler("vrr.wantedLevel", forceLocalPlayerWantedLevel);
|
||||
// Messaging (like textdraws and stuff)
|
||||
addNetworkEventHandler("vrr.smallGameMessage", showSmallGameMessage);
|
||||
|
||||
addNetworkEventHandler("vrr.delKeyBind", unBindAccountKey);
|
||||
addNetworkEventHandler("vrr.addKeyBind", bindAccountKey);
|
||||
addNetworkEventHandler("vrr.clearKeyBinds", clearKeyBinds);
|
||||
// Job
|
||||
addNetworkEventHandler("vrr.job", receiveJobFromServer);
|
||||
addNetworkEventHandler("vrr.working", setLocalPlayerWorkingState);
|
||||
addNetworkEventHandler("vrr.jobType", setLocalPlayerJobType);
|
||||
addNetworkEventHandler("vrr.showJobRouteLocation", showJobRouteLocation);
|
||||
addNetworkEventHandler("vrr.hideJobRouteLocation", hideJobRouteLocation);
|
||||
|
||||
addNetworkEventHandler("vrr.nametag", updatePlayerNameTag);
|
||||
addNetworkEventHandler("vrr.ping", updatePlayerPing);
|
||||
// Local player states and values
|
||||
addNetworkEventHandler("vrr.restoreCamera", restoreLocalCamera);
|
||||
addNetworkEventHandler("vrr.cameraLookAt", setLocalCameraLookAt);
|
||||
addNetworkEventHandler("vrr.freeze", setLocalPlayerFrozenState);
|
||||
addNetworkEventHandler("vrr.control", setLocalPlayerControlState);
|
||||
addNetworkEventHandler("vrr.fadeCamera", fadeLocalCamera);
|
||||
addNetworkEventHandler("vrr.removeFromVehicle", removeLocalPlayerFromVehicle);
|
||||
addNetworkEventHandler("vrr.clearWeapons", clearLocalPlayerWeapons);
|
||||
addNetworkEventHandler("vrr.giveWeapon", giveLocalPlayerWeapon);
|
||||
addNetworkEventHandler("vrr.position", setLocalPlayerPosition);
|
||||
addNetworkEventHandler("vrr.heading", setLocalPlayerHeading);
|
||||
addNetworkEventHandler("vrr.interior", setLocalPlayerInterior);
|
||||
addNetworkEventHandler("vrr.spawned", onServerSpawnedLocalPlayer);
|
||||
addNetworkEventHandler("vrr.money", setLocalPlayerCash);
|
||||
addNetworkEventHandler("vrr.armour", setLocalPlayerArmour);
|
||||
addNetworkEventHandler("vrr.localPlayerSkin", setLocalPlayerSkin);
|
||||
addNetworkEventHandler("vrr.pedSpeak", makeLocalPlayerPedSpeak);
|
||||
addNetworkEventHandler("vrr.infiniteRun", setLocalPlayerInfiniteRun);
|
||||
addNetworkEventHandler("vrr.playerCop", setLocalPlayerAsCopState);
|
||||
addNetworkEventHandler("vrr.health", setLocalPlayerHealth);
|
||||
addNetworkEventHandler("vrr.wantedLevel", setLocalPlayerWantedLevel);
|
||||
addNetworkEventHandler("vrr.playerPedId", sendLocalPlayerNetworkIdToServer);
|
||||
addNetworkEventHandler("vrr.ped", setLocalPlayerPedPartsAndProps);
|
||||
addNetworkEventHandler("vrr.spawn", serverRequestedLocalPlayerSpawn);
|
||||
addNetworkEventHandler("vrr.clearPedState", clearLocalPedState);
|
||||
addNetworkEventHandler("vrr.drunkEffect", setLocalPlayerDrunkEffect);
|
||||
|
||||
addNetworkEventHandler("vrr.m", receiveChatBoxMessageFromServer);
|
||||
addNetworkEventHandler("vrr.chatScrollLines", setChatScrollLines);
|
||||
// Vehicle
|
||||
addNetworkEventHandler("vrr.vehicle", receiveVehicleFromServer);
|
||||
addNetworkEventHandler("vrr.veh.lights", setVehicleLights);
|
||||
addNetworkEventHandler("vrr.veh.engine", setVehicleEngine);
|
||||
addNetworkEventHandler("vrr.veh.repair", repairVehicle);
|
||||
|
||||
addNetworkEventHandler("vrr.radioStream", playStreamingRadio);
|
||||
addNetworkEventHandler("vrr.audioFileStream", playAudioFile);
|
||||
addNetworkEventHandler("vrr.stopRadioStream", stopStreamingRadio);
|
||||
addNetworkEventHandler("vrr.radioVolume", setStreamingRadioVolume);
|
||||
// Radio
|
||||
addNetworkEventHandler("vrr.radioStream", playStreamingRadio);
|
||||
addNetworkEventHandler("vrr.audioFileStream", playAudioFile);
|
||||
addNetworkEventHandler("vrr.stopRadioStream", stopStreamingRadio);
|
||||
addNetworkEventHandler("vrr.radioVolume", setStreamingRadioVolume);
|
||||
|
||||
addNetworkEventHandler("vrr.veh.lights", setVehicleLights);
|
||||
addNetworkEventHandler("vrr.veh.engine", setVehicleEngine);
|
||||
addNetworkEventHandler("vrr.veh.repair", repairVehicle);
|
||||
// Key Bindings
|
||||
addNetworkEventHandler("vrr.delKeyBind", unBindAccountKey);
|
||||
addNetworkEventHandler("vrr.addKeyBind", bindAccountKey);
|
||||
addNetworkEventHandler("vrr.clearKeyBinds", clearKeyBinds);
|
||||
|
||||
addNetworkEventHandler("vrr.pedAnim", makePedPlayAnimation);
|
||||
addNetworkEventHandler("vrr.pedStopAnim", makePedStopAnimation);
|
||||
addNetworkEventHandler("vrr.localPlayerSkin", setLocalPlayerSkin);
|
||||
addNetworkEventHandler("vrr.forcePedAnim", forcePedAnimation);
|
||||
addNetworkEventHandler("vrr.hideAllGUI", hideAllGUI);
|
||||
addNetworkEventHandler("vrr.clientInfo", serverRequestedClientInfo);
|
||||
addNetworkEventHandler("vrr.interiorLights", updateInteriorLightsState);
|
||||
// Weapon Damage
|
||||
addNetworkEventHandler("vrr.weaponDamageEnabled", setPlayerWeaponDamageEnabled);
|
||||
addNetworkEventHandler("vrr.weaponDamageEvent", setPlayerWeaponDamageEvent);
|
||||
|
||||
addNetworkEventHandler("vrr.syncElement", forceSyncElementProperties);
|
||||
addNetworkEventHandler("vrr.elementPosition", setElementPosition);
|
||||
addNetworkEventHandler("vrr.elementCollisions", setElementCollisionsEnabled);
|
||||
// GUI
|
||||
addNetworkEventHandler("vrr.showRegistration", showRegistrationGUI);
|
||||
addNetworkEventHandler("vrr.showNewCharacter", showNewCharacterGUI);
|
||||
addNetworkEventHandler("vrr.showLogin", showLoginGUI);
|
||||
addNetworkEventHandler("vrr.2fa", showTwoFactorAuthGUI);
|
||||
addNetworkEventHandler("vrr.showResetPasswordCodeInput", resetPasswordCodeInputGUI);
|
||||
addNetworkEventHandler("vrr.showResetPasswordEmailInput", resetPasswordEmailInputGUI);
|
||||
addNetworkEventHandler("vrr.showChangePassword", showChangePasswordGUI);
|
||||
addNetworkEventHandler("vrr.showCharacterSelect", showCharacterSelectGUI);
|
||||
addNetworkEventHandler("vrr.switchCharacterSelect", switchCharacterSelectGUI);
|
||||
addNetworkEventHandler("vrr.showError", showErrorGUI);
|
||||
addNetworkEventHandler("vrr.showInfo", showInfoGUI);
|
||||
addNetworkEventHandler("vrr.showPrompt", showYesNoPromptGUI);
|
||||
addNetworkEventHandler("vrr.loginSuccess", loginSuccess);
|
||||
addNetworkEventHandler("vrr.characterSelectSuccess", characterSelectSuccess);
|
||||
addNetworkEventHandler("vrr.loginFailed", loginFailed);
|
||||
addNetworkEventHandler("vrr.registrationSuccess", registrationSuccess);
|
||||
addNetworkEventHandler("vrr.registrationFailed", registrationFailed);
|
||||
addNetworkEventHandler("vrr.newCharacterFailed", newCharacterFailed);
|
||||
addNetworkEventHandler("vrr.changePassword", showChangePasswordGUI);
|
||||
addNetworkEventHandler("vrr.showLocaleChooser", showLocaleChooserGUI);
|
||||
addNetworkEventHandler("vrr.guiColour", setGUIColours);
|
||||
|
||||
addNetworkEventHandler("vrr.vehBuyState", setVehiclePurchaseState);
|
||||
// Business
|
||||
addNetworkEventHandler("vrr.business", receiveBusinessFromServer);
|
||||
|
||||
addNetworkEventHandler("vrr.showRegistration", showRegistrationGUI);
|
||||
addNetworkEventHandler("vrr.showNewCharacter", showNewCharacterGUI);
|
||||
addNetworkEventHandler("vrr.showLogin", showLoginGUI);
|
||||
// House
|
||||
addNetworkEventHandler("vrr.house", receiveHouseFromServer);
|
||||
|
||||
addNetworkEventHandler("vrr.logLevel", setLogLevel);
|
||||
addNetworkEventHandler("vrr.infiniteRun", setLocalPlayerInfiniteRun);
|
||||
// GPS
|
||||
addNetworkEventHandler("vrr.showGPSBlip", showGPSLocation);
|
||||
|
||||
addNetworkEventHandler("vrr.business", receiveBusinessFromServer);
|
||||
addNetworkEventHandler("vrr.house", receiveHouseFromServer);
|
||||
// Locale
|
||||
addNetworkEventHandler("vrr.locale", setLocale);
|
||||
addNetworkEventHandler("vrr.localeChooser", toggleLocaleChooserGUI);
|
||||
|
||||
addNetworkEventHandler("vrr.holdObject", makePedHoldObject);
|
||||
|
||||
addNetworkEventHandler("vrr.playerPedId", sendLocalPlayerNetworkIdToServer);
|
||||
|
||||
addNetworkEventHandler("vrr.ped", setLocalPlayerPedPartsAndProps);
|
||||
// Misc
|
||||
addNetworkEventHandler("vrr.mouseCursor", toggleMouseCursor);
|
||||
addNetworkEventHandler("vrr.mouseCamera", toggleMouseCamera);
|
||||
addNetworkEventHandler("vrr.clearPeds", clearLocalPlayerOwnedPeds);
|
||||
addNetworkEventHandler("vrr.passenger", enterVehicleAsPassenger);
|
||||
addNetworkEventHandler("vrr.logo", setServerLogoRenderState);
|
||||
addNetworkEventHandler("vrr.ambience", setCityAmbienceState);
|
||||
addNetworkEventHandler("vrr.runCode", runClientCode);
|
||||
addNetworkEventHandler("vrr.minuteDuration", setMinuteDuration);
|
||||
addNetworkEventHandler("vrr.snow", setSnowState);
|
||||
addNetworkEventHandler("vrr.enterPropertyKey", setEnterPropertyKey);
|
||||
addNetworkEventHandler("vrr.skinSelect", toggleSkinSelect);
|
||||
addNetworkEventHandler("vrr.hotbar", updatePlayerHotBar);
|
||||
addNetworkEventHandler("vrr.showItemActionDelay", showItemActionDelay);
|
||||
addNetworkEventHandler("vrr.set2DRendering", set2DRendering);
|
||||
addNetworkEventHandler("vrr.mouseCameraForce", setMouseCameraState);
|
||||
addNetworkEventHandler("vrr.logLevel", setLogLevel);
|
||||
addNetworkEventHandler("vrr.hideAllGUI", hideAllGUI);
|
||||
addNetworkEventHandler("vrr.nametag", updatePlayerNameTag);
|
||||
addNetworkEventHandler("vrr.nametagDistance", setNameTagDistance);
|
||||
addNetworkEventHandler("vrr.ping", updatePlayerPing);
|
||||
addNetworkEventHandler("vrr.anim", makePedPlayAnimation);
|
||||
addNetworkEventHandler("vrr.stopAnim", makePedStopAnimation);
|
||||
addNetworkEventHandler("vrr.forceAnim", forcePedAnimation);
|
||||
addNetworkEventHandler("vrr.clientInfo", serverRequestedClientInfo);
|
||||
addNetworkEventHandler("vrr.interiorLights", updateInteriorLightsState);
|
||||
addNetworkEventHandler("vrr.cutsceneInterior", setCutsceneInterior);
|
||||
addNetworkEventHandler("vrr.syncElement", forceSyncElementProperties);
|
||||
addNetworkEventHandler("vrr.elementPosition", setElementPosition);
|
||||
addNetworkEventHandler("vrr.elementCollisions", setElementCollisionsEnabled);
|
||||
addNetworkEventHandler("vrr.vehBuyState", setVehiclePurchaseState);
|
||||
addNetworkEventHandler("vrr.holdObject", makePedHoldObject);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendResourceReadySignalToServer() {
|
||||
sendNetworkEventToServer("vrr.clientReady");
|
||||
sendNetworkEventToServer("vrr.clientReady");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendResourceStartedSignalToServer() {
|
||||
sendNetworkEventToServer("vrr.clientStarted");
|
||||
sendNetworkEventToServer("vrr.clientStarted");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendResourceStoppedSignalToServer() {
|
||||
if(isConnected) {
|
||||
sendNetworkEventToServer("vrr.clientStopped");
|
||||
}
|
||||
if(isConnected) {
|
||||
sendNetworkEventToServer("vrr.clientStopped");
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayer2DRendering(hudState, labelState, smallGameMessageState, scoreboardState, hotBarState, itemActionDelayState) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Updating render states (HUD: ${hudState}, Labels: ${labelState}, Bottom Text: ${smallGameMessageState}, Scoreboard: ${scoreboardState}, HotBar: ${hotBarState}, Item Action Delay: ${itemActionDelayState})`);
|
||||
renderHUD = hudState;
|
||||
function set2DRendering(hudState, labelState, smallGameMessageState, scoreboardState, hotBarState, itemActionDelayState) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Updating render states (HUD: ${hudState}, Labels: ${labelState}, Bottom Text: ${smallGameMessageState}, Scoreboard: ${scoreboardState}, HotBar: ${hotBarState}, Item Action Delay: ${itemActionDelayState})`);
|
||||
renderHUD = hudState;
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.displayCash(hudState);
|
||||
natives.displayAmmo(hudState);
|
||||
natives.displayHud(hudState);
|
||||
natives.displayRadar(hudState);
|
||||
natives.displayAreaName(hudState);
|
||||
} else {
|
||||
if(typeof setHUDEnabled != "undefined") {
|
||||
setHUDEnabled(hudState);
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.displayCash(hudState);
|
||||
natives.displayAmmo(hudState);
|
||||
natives.displayHud(hudState);
|
||||
natives.displayRadar(hudState);
|
||||
natives.displayAreaName(hudState);
|
||||
} else {
|
||||
if(typeof setHUDEnabled != "undefined") {
|
||||
setHUDEnabled(hudState);
|
||||
}
|
||||
}
|
||||
|
||||
renderLabels = labelState;
|
||||
renderSmallGameMessage = smallGameMessageState;
|
||||
renderScoreBoard = scoreboardState;
|
||||
renderHotBar = hotBarState;
|
||||
renderItemActionDelay = itemActionDelayState;
|
||||
renderLabels = labelState;
|
||||
renderSmallGameMessage = smallGameMessageState;
|
||||
renderScoreBoard = scoreboardState;
|
||||
renderHotBar = hotBarState;
|
||||
renderItemActionDelay = itemActionDelayState;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function onServerSpawnedPlayer(state) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Setting spawned state to ${state}`);
|
||||
isSpawned = state;
|
||||
if(state) {
|
||||
setUpInitialGame();
|
||||
calledDeathEvent = false;
|
||||
}
|
||||
function onServerSpawnedLocalPlayer(state) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Main] Setting spawned state to ${state}`);
|
||||
isSpawned = state;
|
||||
setUpInitialGame();
|
||||
if(state) {
|
||||
setTimeout(function() {
|
||||
calledDeathEvent = false;
|
||||
}, 1000);
|
||||
|
||||
getElementsByType(ELEMENT_PED).filter(ped => !ped.isType(ELEMENT_PLAYER)).forEach(ped => {
|
||||
syncCivilianProperties(ped);
|
||||
});
|
||||
|
||||
getElementsByType(ELEMENT_PLAYER).forEach(player => {
|
||||
syncPlayerProperties(player);
|
||||
});
|
||||
|
||||
getElementsByType(ELEMENT_VEHICLE).forEach(vehicle => {
|
||||
syncVehicleProperties(vehicle);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function tellServerPlayerUsedKeyBind(key) {
|
||||
sendNetworkEventToServer("vrr.useKeyBind", key);
|
||||
sendNetworkEventToServer("vrr.useKeyBind", key);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function tellServerPlayerArrivedAtJobRouteLocation() {
|
||||
sendNetworkEventToServer("vrr.arrivedAtJobRouteLocation");
|
||||
sendNetworkEventToServer("vrr.arrivedAtJobRouteLocation");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function tellServerItemActionDelayComplete() {
|
||||
sendNetworkEventToServer("vrr.itemActionDelayComplete");
|
||||
sendNetworkEventToServer("vrr.itemActionDelayComplete");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendServerClientInfo() {
|
||||
let clientVersion = "0.0.0.0";
|
||||
if(typeof CLIENT_VERSION_MAJOR != "undefined") {
|
||||
clientVersion = `${CLIENT_VERSION_MAJOR}.${CLIENT_VERSION_MINOR}.${CLIENT_VERSION_PATCH}.${CLIENT_VERSION_BUILD}`;
|
||||
}
|
||||
sendNetworkEventToServer("vrr.clientInfo", clientVersion, game.width, game.height);
|
||||
let clientVersion = "0.0.0.0";
|
||||
if(typeof CLIENT_VERSION_MAJOR != "undefined") {
|
||||
clientVersion = `${CLIENT_VERSION_MAJOR}.${CLIENT_VERSION_MINOR}.${CLIENT_VERSION_PATCH}.${CLIENT_VERSION_BUILD}`;
|
||||
}
|
||||
sendNetworkEventToServer("vrr.clientInfo", clientVersion, game.width, game.height);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendServerNewAFKStatus(state) {
|
||||
sendNetworkEventToServer("vrr.afk", state);
|
||||
sendNetworkEventToServer("vrr.afk", state);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -210,109 +264,153 @@ function anchorBoat(vehicleId) {
|
||||
// ===========================================================================
|
||||
|
||||
function setEnterPropertyKey(key) {
|
||||
enterPropertyKey = key;
|
||||
enterPropertyKey = key;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function serverRequestedClientInfo() {
|
||||
sendServerClientInfo();
|
||||
sendServerClientInfo();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function updateInteriorLightsState(state) {
|
||||
interiorLightsEnabled = state;
|
||||
interiorLightsEnabled = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forceSyncElementProperties(elementId) {
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
syncElementProperties(getElementFromId(elementId));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementPosition(elementId, position) {
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!getElementFromId(elementId).isSyncer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getElementFromId(elementId).position = position;
|
||||
syncElementProperties(getElementFromId(elementId));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementCollisionsEnabled(elementId, state) {
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
if(getElementFromId(elementId) == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getElementFromId(elementId).collisionsEnabled = state;
|
||||
getElementFromId(elementId).collisionsEnabled = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerArmour(armour) {
|
||||
if(typeof localPlayer.armour != "undefined") {
|
||||
localPlayer.armour = armour;
|
||||
}
|
||||
if(typeof localPlayer.armour != "undefined") {
|
||||
localPlayer.armour = armour;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function forceLocalPlayerWantedLevel(wantedLevel) {
|
||||
forceWantedLevel = toInteger(wantedLevel);
|
||||
function setLocalPlayerWantedLevel(wantedLevel) {
|
||||
forceWantedLevel = toInteger(wantedLevel);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLogLevel(level) {
|
||||
logLevel = level;
|
||||
logLevel = level;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerInfiniteRun(state) {
|
||||
if(localPlayer != null) {
|
||||
if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), boolToInt(state));
|
||||
}
|
||||
}
|
||||
if(localPlayer != null) {
|
||||
if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), boolToInt(state));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerSkin(skinId) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||
//localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
//localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
|
||||
} else {
|
||||
localPlayer.skin = skinId;
|
||||
}
|
||||
logToConsole(LOG_INFO, `[VRR.Server] Setting locale player skin to ${skinId}`);
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||
} else {
|
||||
localPlayer.skin = skinId;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function makePedHoldObject(pedId, modelIndex) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.givePedAmbientObject(natives.getPedFromNetworkId(pedId), getGameConfig().objects[getGame()][modelIndex][1])
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.givePedAmbientObject(natives.getPedFromNetworkId(pedId), getGameConfig().objects[getGame()][modelIndex][1])
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendLocalPlayerNetworkIdToServer() {
|
||||
sendNetworkEventToServer("vrr.playerPedId", natives.getNetworkIdFromPed(localPlayer));
|
||||
sendNetworkEventToServer("vrr.playerPedId", natives.getNetworkIdFromPed(localPlayer));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setCutsceneInterior(cutsceneName) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(cutsceneName == "") {
|
||||
natives.clearCutscene();
|
||||
} else {
|
||||
if(natives.isInteriorScene()) {
|
||||
natives.clearCutscene();
|
||||
}
|
||||
natives.initCutscene(cutsceneName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function makeLocalPlayerPedSpeak(speechName) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
// if player is in vehicle, allow megaphone (if last arg is "1", it will cancel megaphone echo)
|
||||
// Only speeches with _MEGAPHONE will have the bullhorn effect
|
||||
// Afaik it only works on police voices anyway
|
||||
if(localPlayer.vehicle != null) {
|
||||
natives.sayAmbientSpeech(localPlayer, speechName, true, false, 0);
|
||||
} else {
|
||||
natives.sayAmbientSpeech(localPlayer, speechName, true, false, 1);
|
||||
}
|
||||
} else if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||
// Don't have a way to get the ped ref ID and can't use ped in arg
|
||||
//game.SET_CHAR_SAY(game.GET_PLAYER_ID(), int);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerAsCopState(state) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.setPlayerAsCop(natives.getPlayerId(), state);
|
||||
natives.setPoliceIgnorePlayer(natives.getPlayerId(), state);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function serverRequestedLocalPlayerSpawn(skinId, position) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.createPlayer(skinId, position);
|
||||
//if(isCustomCameraSupported()) {
|
||||
// game.restoreCamera(true);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendLocaleSelectToServer(localeId) {
|
||||
sendNetworkEventToServer("vrr.localeSelect", localeId);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -45,95 +45,111 @@ function loadSkinSelectMessageFontBottom() {
|
||||
|
||||
function processSkinSelectKeyPress(keyCode) {
|
||||
if(usingSkinSelector) {
|
||||
if(keyCode == SDLK_PAGEUP) {
|
||||
if(skinSelectorIndex >= allowedSkins.length-1) {
|
||||
skinSelectorIndex = 1;
|
||||
} else {
|
||||
skinSelectorIndex = skinSelectorIndex + 1;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
//natives.changePlayerModel(natives.getPlayerId(), allowedSkins[skinSelectorIndex][0]);
|
||||
//localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
//localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
} else if(keyCode == SDLK_PAGEDOWN) {
|
||||
if(skinSelectorIndex <= 0) {
|
||||
skinSelectorIndex = allowedSkins.length-1;
|
||||
} else {
|
||||
skinSelectorIndex = skinSelectorIndex - 1;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
//natives.changePlayerModel(natives.getPlayerId(), allowedSkins[skinSelectorIndex][0]);
|
||||
//localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
//localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
} else if(keyCode == SDLK_RETURN) {
|
||||
sendNetworkEventToServer("vrr.skinSelected", skinSelectorIndex);
|
||||
toggleSkinSelect(false);
|
||||
return true;
|
||||
} else if(keyCode == SDLK_BACKSPACE) {
|
||||
sendNetworkEventToServer("vrr.skinSelected", -1);
|
||||
toggleSkinSelect(false);
|
||||
return true;
|
||||
}
|
||||
localPlayer.heading = skinSelectHeading;
|
||||
}
|
||||
if(keyCode == SDLK_PAGEUP) {
|
||||
if(skinSelectorIndex >= allowedSkins.length-1) {
|
||||
skinSelectorIndex = 1;
|
||||
} else {
|
||||
skinSelectorIndex = skinSelectorIndex + 1;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||
if(natives.isModelInCdimage(skinId)) {
|
||||
natives.requestModel(skinId);
|
||||
natives.loadAllObjectsNow();
|
||||
if(natives.hasModelLoaded(skinId)) {
|
||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
} else if(keyCode == SDLK_PAGEDOWN) {
|
||||
if(skinSelectorIndex <= 0) {
|
||||
skinSelectorIndex = allowedSkins.length-1;
|
||||
} else {
|
||||
skinSelectorIndex = skinSelectorIndex - 1;
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||
if(natives.isModelInCdimage(skinId)) {
|
||||
natives.requestModel(skinId);
|
||||
natives.loadAllObjectsNow();
|
||||
if(natives.hasModelLoaded(skinId)) {
|
||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
} else if(keyCode == SDLK_RETURN) {
|
||||
sendNetworkEventToServer("vrr.skinSelected", skinSelectorIndex);
|
||||
toggleSkinSelect(false);
|
||||
return true;
|
||||
} else if(keyCode == SDLK_BACKSPACE) {
|
||||
sendNetworkEventToServer("vrr.skinSelected", -1);
|
||||
toggleSkinSelect(false);
|
||||
return true;
|
||||
}
|
||||
localPlayer.heading = skinSelectHeading;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processSkinSelectRendering() {
|
||||
if(usingSkinSelector) {
|
||||
if(skinSelectMessageFontTop != null && skinSelectMessageFontBottom != null) {
|
||||
if(skinSelectMessageTextTop != "" && skinSelectMessageTextBottom != "") {
|
||||
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, game.height-100], game.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
|
||||
skinSelectMessageFontBottom.render(skinSelectMessageTextBottom, [0, game.height-65], game.width, 0.5, 0.0, skinSelectMessageFontBottom.size, skinSelectMessageColourBottom, true, true, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(skinSelectMessageFontTop != null && skinSelectMessageFontBottom != null) {
|
||||
if(skinSelectMessageTextTop != "" && skinSelectMessageTextBottom != "") {
|
||||
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, game.height-100], game.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
|
||||
skinSelectMessageFontBottom.render(skinSelectMessageTextBottom, [0, game.height-65], game.width, 0.5, 0.0, skinSelectMessageFontBottom.size, skinSelectMessageColourBottom, true, true, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function toggleSkinSelect(state) {
|
||||
if(state) {
|
||||
skinSelectorIndex = getAllowedSkinIndexFromSkin(localPlayer.skin);
|
||||
if(!skinSelectorIndex) {
|
||||
skinSelectorIndex = 0;
|
||||
}
|
||||
if(state) {
|
||||
skinSelectorIndex = getAllowedSkinIndexFromSkin(localPlayer.skin);
|
||||
if(!skinSelectorIndex) {
|
||||
skinSelectorIndex = 0;
|
||||
}
|
||||
|
||||
usingSkinSelector = true;
|
||||
skinSelectPosition = localPlayer.position;
|
||||
skinSelectHeading = localPlayer.heading;
|
||||
usingSkinSelector = true;
|
||||
skinSelectPosition = localPlayer.position;
|
||||
skinSelectHeading = localPlayer.heading;
|
||||
|
||||
if(isCustomCameraSupported()) {
|
||||
let tempPosition = localPlayer.position;
|
||||
tempPosition.z += 0.5;
|
||||
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
|
||||
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
|
||||
}
|
||||
if(isCustomCameraSupported()) {
|
||||
let tempPosition = localPlayer.position;
|
||||
tempPosition.z += 0.5;
|
||||
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
|
||||
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
//natives.changePlayerModel(natives.getPlayerId(), allowedSkins[skinSelectorIndex][0]);
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||
if(natives.isModelInCdimage(skinId)) {
|
||||
natives.requestModel(skinId);
|
||||
natives.loadAllObjectsNow();
|
||||
if(natives.hasModelLoaded(skinId)) {
|
||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||
}
|
||||
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
setLocalPlayerControlState(false, false);
|
||||
} else {
|
||||
usingSkinSelector = false;
|
||||
setLocalPlayerControlState(false, false);
|
||||
}
|
||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||
setLocalPlayerControlState(false, false);
|
||||
} else {
|
||||
usingSkinSelector = false;
|
||||
setLocalPlayerControlState(false, false);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,158 +8,188 @@
|
||||
// ===========================================================================
|
||||
|
||||
function initClientScripts() {
|
||||
initGUIScript();
|
||||
initNameTagScript();
|
||||
initScoreBoardScript();
|
||||
initMessagingScript();
|
||||
initServerScript();
|
||||
initLogoScript();
|
||||
initLabelScript();
|
||||
initChatBoxScript();
|
||||
initAFKScript();
|
||||
initKeyBindScript();
|
||||
initEventScript();
|
||||
initSkinSelectScript();
|
||||
initGUIScript();
|
||||
initNameTagScript();
|
||||
initScoreBoardScript();
|
||||
initMessagingScript();
|
||||
initServerScript();
|
||||
initLogoScript();
|
||||
initLabelScript();
|
||||
initChatBoxScript();
|
||||
initAFKScript();
|
||||
initKeyBindScript();
|
||||
initEventScript();
|
||||
initSkinSelectScript();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setUpInitialGame() {
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||
game.setGameStat(STAT_PROGRESSMADE, 9999);
|
||||
game.setGameStat(STAT_TOTALPROGRESSINGAME, 9999);
|
||||
game.SET_CAR_DENSITY_MULTIPLIER(3.0);
|
||||
game.SET_PED_DENSITY_MULTIPLIER(3.0);
|
||||
game.onMission = true;
|
||||
SetStandardControlsEnabled(true);
|
||||
return true;
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA III ...");
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_VC) {
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||
game.setGameStat(STAT_PROGRESSMADE, 9999);
|
||||
game.setGameStat(STAT_TOTALPROGRESSINGAME, 9999);
|
||||
game.SET_CAR_DENSITY_MULTIPLIER(3.0);
|
||||
game.SET_PED_DENSITY_MULTIPLIER(3.0);
|
||||
// Turn off unlimited sprint
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||
|
||||
game.REQUEST_ANIMATION("bikev");
|
||||
game.REQUEST_ANIMATION("bikeh");
|
||||
game.REQUEST_ANIMATION("biked");
|
||||
game.REQUEST_ANIMATION("knife");
|
||||
game.REQUEST_ANIMATION("python");
|
||||
game.REQUEST_ANIMATION("shotgun");
|
||||
game.REQUEST_ANIMATION("buddy");
|
||||
game.REQUEST_ANIMATION("tec");
|
||||
game.REQUEST_ANIMATION("uzi");
|
||||
game.REQUEST_ANIMATION("rifle");
|
||||
game.REQUEST_ANIMATION("m60");
|
||||
game.REQUEST_ANIMATION("sniper");
|
||||
game.REQUEST_ANIMATION("grenade");
|
||||
game.REQUEST_ANIMATION("flame");
|
||||
game.REQUEST_ANIMATION("medic");
|
||||
game.REQUEST_ANIMATION("sunbathe");
|
||||
//game.REQUEST_ANIMATION("playidles");
|
||||
game.REQUEST_ANIMATION("riot");
|
||||
game.REQUEST_ANIMATION("strip");
|
||||
game.REQUEST_ANIMATION("lance");
|
||||
game.REQUEST_ANIMATION("skate");
|
||||
// Set completed game progress
|
||||
game.setGameStat(STAT_PROGRESSMADE, 9999);
|
||||
game.setGameStat(STAT_TOTALPROGRESSINGAME, 9999);
|
||||
|
||||
game.LOAD_ALL_MODELS_NOW();
|
||||
game.onMission = true;
|
||||
SetStandardControlsEnabled(true);
|
||||
return true;
|
||||
}
|
||||
// Traffic and ped density
|
||||
//game.SET_CAR_DENSITY_MULTIPLIER(3.0); // No visual effect. Needs tweaking and testing.
|
||||
//game.SET_PED_DENSITY_MULTIPLIER(3.0); // No visual effect. Needs tweaking and testing.
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SILENCED_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_DESERT_EAGLE_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SAWNOFF_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SPAS12_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_MICRO_UZI_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_MP5_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_AK47_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_M4_SKILL, 400);
|
||||
game.setGameStat(STAT_DRIVING_SKILL, 9999);
|
||||
game.setGameStat(STAT_FAT, 9999);
|
||||
game.setGameStat(STAT_ENERGY, 9999);
|
||||
game.setGameStat(STAT_CYCLE_SKILL, 9999);
|
||||
game.setGameStat(STAT_BIKE_SKILL, 9999);
|
||||
game.setGameStat(STAT_GAMBLING, 9999);
|
||||
game.setGameStat(STAT_PROGRESS_MADE, 9999);
|
||||
game.setGameStat(STAT_RESPECT, 0);
|
||||
game.setGameStat(STAT_RESPECT_TOTAL, 0);
|
||||
game.setGameStat(STAT_SEX_APPEAL, 0);
|
||||
game.setGameStat(STAT_STAMINA, 9999);
|
||||
game.setGameStat(STAT_TOTAL_PROGRESS, 9999);
|
||||
game.setGameStat(STAT_UNDERWATER_STAMINA, 9999);
|
||||
game.setGameStat(STAT_BODY_MUSCLE, 9999);
|
||||
// Disables taxi/vigilante/etc and other start mission triggers
|
||||
game.onMission = true;
|
||||
|
||||
game.setDefaultInteriors(false);
|
||||
game.onMission = true;
|
||||
return true;
|
||||
}
|
||||
// Provided by mouse camera script (mousecam.js)
|
||||
SetStandardControlsEnabled(true);
|
||||
} else if(getGame() == VRR_GAME_GTA_VC) {
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA Vice City ...");
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.allowEmergencyServices(false);
|
||||
natives.setCreateRandomCops(true);
|
||||
natives.setMaxWantedLevel(0);
|
||||
natives.setWantedMultiplier(0.0);
|
||||
natives.allowPlayerToCarryNonMissionObjects(natives.getPlayerId(), true);
|
||||
natives.setPlayerTeam(natives.getPlayerId(), 0);
|
||||
natives.loadAllObjectsNow();
|
||||
natives.setCellphoneRanked(false);
|
||||
natives.setOverrideNoSprintingOnPhoneInMultiplayer(false);
|
||||
natives.setSyncWeatherAndGameTime(false);
|
||||
natives.usePlayerColourInsteadOfTeamColour(true);
|
||||
natives.disablePauseMenu(true);
|
||||
natives.allowReactionAnims(localPlayer, true);
|
||||
natives.allowGameToPauseForStreaming(false);
|
||||
natives.allowStuntJumpsToTrigger(false);
|
||||
natives.setPickupsFixCars(false);
|
||||
// Turn off unlimited sprint
|
||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||
|
||||
// HUD and Display
|
||||
//natives.displayCash(false);
|
||||
//natives.displayAmmo(false);
|
||||
//natives.displayHud(false);
|
||||
//natives.displayRadar(false);
|
||||
//natives.displayAreaName(false);
|
||||
//natives.displayPlayerNames(false);
|
||||
natives.setPoliceRadarBlips(false);
|
||||
natives.removeTemporaryRadarBlipsForPickups();
|
||||
natives.displayNonMinigameHelpMessages(false);
|
||||
natives.setDisplayPlayerNameAndIcon(natives.getPlayerId(), false);
|
||||
// Set completed game progress
|
||||
game.setGameStat(STAT_PROGRESSMADE, 99999);
|
||||
game.setGameStat(STAT_TOTALPROGRESSINGAME, 99999);
|
||||
|
||||
// Item/Money Dropping
|
||||
natives.setMoneyCarriedByAllNewPeds(0);
|
||||
natives.setDeadPedsDropWeapons(false);
|
||||
natives.setPlayersDropMoneyInNetworkGame(false);
|
||||
// Traffic and ped density
|
||||
//game.SET_CAR_DENSITY_MULTIPLIER(3.0); // No visual effect. Needs tweaking and testing.
|
||||
//game.SET_PED_DENSITY_MULTIPLIER(3.0); // No visual effect. Needs tweaking and testing.
|
||||
|
||||
// Population
|
||||
//natives.dontSuppressAnyCarModels(5.0);
|
||||
//natives.dontSuppressAnyPedModels(5.0);
|
||||
//natives.forceGenerateParkedCarsTooCloseToOthers(true);
|
||||
//natives.setParkedCarDensityMultiplier(5.0);
|
||||
//natives.setRandomCarDensityMultiplier(5.0);
|
||||
//natives.setPedDensityMultiplier(5.0);
|
||||
//natives.setCarDensityMultiplier(5.0);
|
||||
//natives.setScenarioPedDensityMultiplier(5.0, 5.0);
|
||||
natives.switchRandomTrains(true);
|
||||
natives.switchRandomBoats(true);
|
||||
natives.switchAmbientPlanes(true);
|
||||
natives.switchMadDrivers(false);
|
||||
// Load all anim libs
|
||||
game.REQUEST_ANIMATION("bikev");
|
||||
game.REQUEST_ANIMATION("bikeh");
|
||||
game.REQUEST_ANIMATION("biked");
|
||||
game.REQUEST_ANIMATION("knife");
|
||||
game.REQUEST_ANIMATION("python");
|
||||
game.REQUEST_ANIMATION("shotgun");
|
||||
game.REQUEST_ANIMATION("buddy");
|
||||
game.REQUEST_ANIMATION("tec");
|
||||
game.REQUEST_ANIMATION("uzi");
|
||||
game.REQUEST_ANIMATION("rifle");
|
||||
game.REQUEST_ANIMATION("m60");
|
||||
game.REQUEST_ANIMATION("sniper");
|
||||
game.REQUEST_ANIMATION("grenade");
|
||||
game.REQUEST_ANIMATION("flame");
|
||||
game.REQUEST_ANIMATION("medic");
|
||||
game.REQUEST_ANIMATION("sunbathe");
|
||||
//game.REQUEST_ANIMATION("playidles");
|
||||
game.REQUEST_ANIMATION("riot");
|
||||
game.REQUEST_ANIMATION("strip");
|
||||
game.REQUEST_ANIMATION("lance");
|
||||
game.REQUEST_ANIMATION("skate");
|
||||
|
||||
natives.requestAnims("DANCING");
|
||||
return true;
|
||||
}
|
||||
//game.LOAD_ALL_MODELS_NOW();
|
||||
// Disables taxi/vigilante/etc and other start mission triggers
|
||||
game.onMission = true;
|
||||
|
||||
if(getGame() == VRR_GAME_MAFIA_ONE) {
|
||||
game.mapEnabled = false;
|
||||
game.setTrafficEnabled(false);
|
||||
return true;
|
||||
}
|
||||
// Provided by mouse camera script (mousecam.js)
|
||||
SetStandardControlsEnabled(true);
|
||||
} else if(getGame() == VRR_GAME_GTA_SA) {
|
||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA San Andreas ...");
|
||||
// Turn weapon skills down a bit
|
||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SILENCED_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_DESERT_EAGLE_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SAWNOFF_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_SPAS12_SHOTGUN_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_MICRO_UZI_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_MP5_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_AK47_SKILL, 400);
|
||||
game.setGameStat(STAT_WEAPONTYPE_M4_SKILL, 400);
|
||||
|
||||
// Pro driving skill
|
||||
game.setGameStat(STAT_DRIVING_SKILL, 9999);
|
||||
|
||||
// Only visual for CJ, but affects all peds fight speed, bicycle hop, etc
|
||||
game.setGameStat(STAT_FAT, 9999);
|
||||
game.setGameStat(STAT_ENERGY, 9999);
|
||||
game.setGameStat(STAT_CYCLE_SKILL, 9999);
|
||||
game.setGameStat(STAT_BIKE_SKILL, 9999);
|
||||
game.setGameStat(STAT_GAMBLING, 9999);
|
||||
game.setGameStat(STAT_PROGRESS_MADE, 9999);
|
||||
game.setGameStat(STAT_RESPECT, 0);
|
||||
game.setGameStat(STAT_RESPECT_TOTAL, 0);
|
||||
game.setGameStat(STAT_SEX_APPEAL, 0);
|
||||
game.setGameStat(STAT_STAMINA, 9999);
|
||||
game.setGameStat(STAT_TOTAL_PROGRESS, 9999);
|
||||
game.setGameStat(STAT_UNDERWATER_STAMINA, 9999);
|
||||
game.setGameStat(STAT_BODY_MUSCLE, 9999);
|
||||
|
||||
// Disables default yellow cone at doors for entering places in singleplayer
|
||||
game.setDefaultInteriors(false);
|
||||
|
||||
// Disables taxi/vigilante/etc and other start mission triggers
|
||||
game.onMission = true;
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
natives.allowEmergencyServices(false);
|
||||
natives.setCreateRandomCops(true);
|
||||
natives.setMaxWantedLevel(0);
|
||||
natives.setWantedMultiplier(0.0);
|
||||
natives.allowPlayerToCarryNonMissionObjects(natives.getPlayerId(), true);
|
||||
natives.setPlayerTeam(natives.getPlayerId(), 0);
|
||||
natives.loadAllObjectsNow();
|
||||
natives.setCellphoneRanked(false);
|
||||
natives.setOverrideNoSprintingOnPhoneInMultiplayer(false);
|
||||
natives.setSyncWeatherAndGameTime(false);
|
||||
natives.usePlayerColourInsteadOfTeamColour(true);
|
||||
natives.disablePauseMenu(true);
|
||||
//natives.allowReactionAnims(localPlayer, false);
|
||||
natives.allowGameToPauseForStreaming(false);
|
||||
natives.allowStuntJumpsToTrigger(false);
|
||||
natives.setPickupsFixCars(false);
|
||||
natives.forceFullVoice(localPlayer);
|
||||
|
||||
// HUD and Display
|
||||
//natives.displayCash(false);
|
||||
//natives.displayAmmo(false);
|
||||
//natives.displayHud(false);
|
||||
//natives.displayRadar(false);
|
||||
//natives.displayAreaName(false);
|
||||
natives.displayPlayerNames(true);
|
||||
natives.setPoliceRadarBlips(false);
|
||||
natives.removeTemporaryRadarBlipsForPickups();
|
||||
natives.displayNonMinigameHelpMessages(false);
|
||||
natives.setDisplayPlayerNameAndIcon(natives.getPlayerId(), true);
|
||||
|
||||
// Item/Money Dropping
|
||||
natives.setMoneyCarriedByAllNewPeds(0);
|
||||
natives.setDeadPedsDropWeapons(false);
|
||||
natives.setPlayersDropMoneyInNetworkGame(false);
|
||||
|
||||
// Population
|
||||
//natives.dontSuppressAnyCarModels(5.0);
|
||||
//natives.dontSuppressAnyPedModels(5.0);
|
||||
//natives.forceGenerateParkedCarsTooCloseToOthers(true);
|
||||
//natives.setParkedCarDensityMultiplier(5.0);
|
||||
//natives.setRandomCarDensityMultiplier(5.0);
|
||||
//natives.setPedDensityMultiplier(5.0);
|
||||
//natives.setCarDensityMultiplier(5.0);
|
||||
//natives.setScenarioPedDensityMultiplier(5.0, 5.0);
|
||||
natives.switchRandomTrains(true);
|
||||
natives.switchRandomBoats(true);
|
||||
natives.switchAmbientPlanes(true);
|
||||
natives.switchMadDrivers(false);
|
||||
|
||||
// Singleplayer Cellphone
|
||||
//natives.requestScript("spcellphone");
|
||||
//natives.startNewScript("spcellphone", 0);
|
||||
// Script "v-blockedscripts" blocks the mpcellphone scripts
|
||||
natives.setMessagesWaiting(false); // Seems to have no effect
|
||||
natives.setMobilePhoneRadioState(false);
|
||||
|
||||
// Animation libraries
|
||||
natives.requestAnims("DANCING");
|
||||
|
||||
// Some last steps
|
||||
//natives.loadAllObjectsNow();
|
||||
} else if(getGame() == VRR_GAME_MAFIA_ONE) {
|
||||
game.mapEnabled = false;
|
||||
game.setTrafficEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -8,430 +8,432 @@
|
||||
// ===========================================================================
|
||||
|
||||
function processSync(event, deltaTime) {
|
||||
if(localPlayer != null) {
|
||||
if(!areServerElementsSupported()) {
|
||||
sendNetworkEventToServer("vrr.plr.pos", localPlayer.position);
|
||||
sendNetworkEventToServer("vrr.plr.rot", localPlayer.heading);
|
||||
if(localPlayer != null) {
|
||||
if(!areServerElementsSupported()) {
|
||||
sendNetworkEventToServer("vrr.plr.pos", (localPlayer.vehicle != null) ? localPlayer.vehicle.position : localPlayer.position);
|
||||
sendNetworkEventToServer("vrr.plr.rot", (localPlayer.vehicle != null) ? localPlayer.vehicle.heading : localPlayer.heading);
|
||||
|
||||
//if(localPlayer.vehicle != null) {
|
||||
// sendNetworkEventToServer("vrr.veh.pos", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.position);
|
||||
// sendNetworkEventToServer("vrr.veh.rot", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.heading);
|
||||
//}
|
||||
}
|
||||
//if(localPlayer.vehicle != null) {
|
||||
// sendNetworkEventToServer("vrr.veh.pos", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.position);
|
||||
// sendNetworkEventToServer("vrr.veh.rot", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.heading);
|
||||
//}
|
||||
}
|
||||
|
||||
if(localPlayer.health <= 0) {
|
||||
if(!calledDeathEvent) {
|
||||
logToConsole(LOG_DEBUG, `Local player died`);
|
||||
localPlayer.clearWeapons();
|
||||
calledDeathEvent = true;
|
||||
sendNetworkEventToServer("vrr.playerDeath");
|
||||
}
|
||||
}
|
||||
if(localPlayer.health <= 0) {
|
||||
if(!calledDeathEvent) {
|
||||
logToConsole(LOG_DEBUG, `Local player died`);
|
||||
localPlayer.clearWeapons();
|
||||
calledDeathEvent = true;
|
||||
sendNetworkEventToServer("vrr.playerDeath");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(streamingRadioElement) {
|
||||
streamingRadio.position = getElementPosition(streamingRadioElement);
|
||||
//streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position);
|
||||
}
|
||||
}
|
||||
if(localPlayer.health <= 0) {
|
||||
if(!calledDeathEvent) {
|
||||
logToConsole(LOG_DEBUG, `Local player died`);
|
||||
localPlayer.clearWeapons();
|
||||
calledDeathEvent = true;
|
||||
sendNetworkEventToServer("vrr.playerDeath");
|
||||
}
|
||||
}
|
||||
|
||||
if(streamingRadioElement) {
|
||||
streamingRadio.position = getElementPosition(streamingRadioElement.id);
|
||||
//streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleEngine(vehicleId, state) {
|
||||
getElementFromId(vehicleId).engine = state;
|
||||
getElementFromId(vehicleId).engine = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleLights(vehicleId, state) {
|
||||
|
||||
|
||||
if(getGame() != VRR_GAME_MAFIA_ONE) {
|
||||
if(!state) {
|
||||
getElementFromId(vehicleId).lightStatus = 2;
|
||||
} else {
|
||||
getElementFromId(vehicleId).lightStatus = 1;
|
||||
}
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(!state) {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
||||
} else {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
||||
}
|
||||
} else {
|
||||
if(!state) {
|
||||
getElementFromId(vehicleId).lights = false;
|
||||
} else {
|
||||
getElementFromId(vehicleId).lights = true;
|
||||
}
|
||||
}
|
||||
if(getGame() != VRR_GAME_MAFIA_ONE) {
|
||||
if(!state) {
|
||||
getElementFromId(vehicleId).lightStatus = 2;
|
||||
} else {
|
||||
getElementFromId(vehicleId).lightStatus = 1;
|
||||
}
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(!state) {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
||||
} else {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
||||
}
|
||||
} else {
|
||||
if(!state) {
|
||||
getElementFromId(vehicleId).lights = false;
|
||||
} else {
|
||||
getElementFromId(vehicleId).lights = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function repairVehicle(syncId) {
|
||||
getVehicleFromSyncId(syncId).fix();
|
||||
getVehicleFromSyncId(syncId).fix();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncVehicleProperties(vehicle) {
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
||||
if(!lightStatus) {
|
||||
vehicle.lightStatus = 2;
|
||||
} else {
|
||||
vehicle.lightStatus = 1;
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
||||
if(!lightStatus) {
|
||||
vehicle.lightStatus = 2;
|
||||
} else {
|
||||
vehicle.lightStatus = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.invincible")) {
|
||||
let invincible = getEntityData(vehicle, "vrr.invincible");
|
||||
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.invincible")) {
|
||||
let invincible = getEntityData(vehicle, "vrr.invincible");
|
||||
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
||||
let panelsStatus = getEntityData(vehicle, "vrr.panelStatus");
|
||||
for(let i in panelsStatus) {
|
||||
vehicle.setPanelStatus(i, panelsStatus[i]);
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
||||
let panelsStatus = getEntityData(vehicle, "vrr.panelStatus");
|
||||
for(let i in panelsStatus) {
|
||||
vehicle.setPanelStatus(i, panelsStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) {
|
||||
let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus");
|
||||
for(let i in wheelsStatus) {
|
||||
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) {
|
||||
let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus");
|
||||
for(let i in wheelsStatus) {
|
||||
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.lightStatus")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lightStatus");
|
||||
for(let i in lightStatus) {
|
||||
vehicle.setLightStatus(i, lightStatus[i]);
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.lightStatus")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lightStatus");
|
||||
for(let i in lightStatus) {
|
||||
vehicle.setLightStatus(i, lightStatus[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) {
|
||||
let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight");
|
||||
vehicle.setSuspensionHeight(suspensionHeight);
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) {
|
||||
let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight");
|
||||
vehicle.setSuspensionHeight(suspensionHeight);
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
||||
for(let i in allUpgrades) {
|
||||
vehicle.removeUpgrade(i);
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
//let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
||||
//for(let i in allUpgrades) {
|
||||
// vehicle.removeUpgrade(i);
|
||||
//}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
||||
for(let i in upgrades) {
|
||||
if(upgrades[i] != 0) {
|
||||
vehicle.addUpgrade(upgrades[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
||||
for(let i in upgrades) {
|
||||
if(upgrades[i] != 0) {
|
||||
vehicle.addUpgrade(upgrades[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.livery")) {
|
||||
let livery = getEntityData(vehicle, "vrr.livery");
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
vehicle.setPaintJob(livery);
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
vehicle.livery = livery;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.livery")) {
|
||||
let livery = getEntityData(vehicle, "vrr.livery");
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
vehicle.setPaintJob(livery);
|
||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
||||
vehicle.livery = livery;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncCivilianProperties(civilian) {
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(civilian, "vrr.scale");
|
||||
let tempMatrix = civilian.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = civilian.position;
|
||||
civilian.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
civilian.position = tempPosition;
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(civilian, "vrr.scale");
|
||||
let tempMatrix = civilian.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = civilian.position;
|
||||
civilian.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
civilian.position = tempPosition;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(civilian, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(civilian, "vrr.fightStyle");
|
||||
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(civilian, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(civilian, "vrr.fightStyle");
|
||||
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.walkStyle")) {
|
||||
let walkStyle = getEntityData(civilian, "vrr.walkStyle");
|
||||
civilian.walkStyle = walkStyle;
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(civilian, "vrr.walkStyle")) {
|
||||
let walkStyle = getEntityData(civilian, "vrr.walkStyle");
|
||||
civilian.walkStyle = walkStyle;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair");
|
||||
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair");
|
||||
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead");
|
||||
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead");
|
||||
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes");
|
||||
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes");
|
||||
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand");
|
||||
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand");
|
||||
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand");
|
||||
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand");
|
||||
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist");
|
||||
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist");
|
||||
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip");
|
||||
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip");
|
||||
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot");
|
||||
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot");
|
||||
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot");
|
||||
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot");
|
||||
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(civilian, "vrr.anim")) {
|
||||
let animData = getEntityData(vehicle, "vrr.anim");
|
||||
civilian.addAnimation(animData[0], animData[1]);
|
||||
}
|
||||
if(doesEntityDataExist(civilian, "vrr.anim")) {
|
||||
let animationSlot = getEntityData(civilian, "vrr.anim");
|
||||
let animationData = getAnimationData(animationSlot);
|
||||
civilian.addAnimation(animationData.groupId, animationData.animId);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncPlayerProperties(player) {
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(player, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(player, "vrr.scale");
|
||||
let tempMatrix = player.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = player.position;
|
||||
player.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
player.position = tempPosition;
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_III) {
|
||||
if(doesEntityDataExist(player, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(player, "vrr.scale");
|
||||
let tempMatrix = player.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = player.position;
|
||||
player.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
player.position = tempPosition;
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(player, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(player, "vrr.fightStyle");
|
||||
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_SA) {
|
||||
if(doesEntityDataExist(player, "vrr.fightStyle")) {
|
||||
let fightStyle = getEntityData(player, "vrr.fightStyle");
|
||||
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||
}
|
||||
}
|
||||
|
||||
//if(getGame() == VRR_GAME_GTA_SA) {
|
||||
// if(doesEntityDataExist(player, "vrr.walkStyle")) {
|
||||
// let walkStyle = getEntityData(player, "vrr.walkStyle");
|
||||
// player.walkStyle = walkStyle;
|
||||
// }
|
||||
//}
|
||||
//if(getGame() == VRR_GAME_GTA_SA) {
|
||||
// if(doesEntityDataExist(player, "vrr.walkStyle")) {
|
||||
// let walkStyle = getEntityData(player, "vrr.walkStyle");
|
||||
// player.walkStyle = walkStyle;
|
||||
// }
|
||||
//}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHair")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHair");
|
||||
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHair")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHair");
|
||||
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHead")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHead");
|
||||
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartHead")) {
|
||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHead");
|
||||
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartUpper")) {
|
||||
let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper");
|
||||
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartUpper")) {
|
||||
let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper");
|
||||
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartLower")) {
|
||||
let bodyPartLower = getEntityData(player, "vrr.bodyPartLower");
|
||||
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPartLower")) {
|
||||
let bodyPartLower = getEntityData(player, "vrr.bodyPartLower");
|
||||
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(player, "vrr.bodyPropHair");
|
||||
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHair")) {
|
||||
let bodyPropHair = getEntityData(player, "vrr.bodyPropHair");
|
||||
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(player, "vrr.bodyPropHead");
|
||||
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHead")) {
|
||||
let bodyPropHead = getEntityData(player, "vrr.bodyPropHead");
|
||||
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes");
|
||||
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropEyes")) {
|
||||
let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes");
|
||||
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand");
|
||||
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) {
|
||||
let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand");
|
||||
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand");
|
||||
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) {
|
||||
let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand");
|
||||
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist");
|
||||
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) {
|
||||
let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist");
|
||||
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(player, "vrr.bodyPropHip");
|
||||
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropHip")) {
|
||||
let bodyPropHip = getEntityData(player, "vrr.bodyPropHip");
|
||||
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot");
|
||||
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) {
|
||||
let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot");
|
||||
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot");
|
||||
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncObjectProperties(object) {
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||
if(doesEntityDataExist(object, "vrr.scale")) {
|
||||
let scaleFactor = getEntityData(object, "vrr.scale");
|
||||
let tempMatrix = object.matrix;
|
||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||
let tempPosition = object.position;
|
||||
object.matrix = tempMatrix;
|
||||
tempPosition.z += scaleFactor.z;
|
||||
object.position = tempPosition;
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) {
|
||||
let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot");
|
||||
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function syncElementProperties(element) {
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
if(!areServerElementsSupported()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
||||
if(typeof element.interior != "undefined") {
|
||||
element.interior = getEntityData(element, "vrr.interior");
|
||||
}
|
||||
}
|
||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
||||
if(typeof element.interior != "undefined") {
|
||||
element.interior = getEntityData(element, "vrr.interior");
|
||||
}
|
||||
}
|
||||
|
||||
switch(element.type) {
|
||||
case ELEMENT_VEHICLE:
|
||||
syncVehicleProperties(element);
|
||||
break;
|
||||
if(getGame() == VRR_GAME_MAFIA_ONE) {
|
||||
switch(element.type) {
|
||||
case ELEMENT_VEHICLE:
|
||||
syncVehicleProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PED:
|
||||
syncCivilianProperties(element);
|
||||
break;
|
||||
case ELEMENT_PED:
|
||||
syncCivilianProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PLAYER:
|
||||
syncPlayerProperties(element);
|
||||
break;
|
||||
case ELEMENT_PLAYER:
|
||||
syncPlayerProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_OBJECT:
|
||||
syncObjectProperties(element);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch(element.type) {
|
||||
case ELEMENT_VEHICLE:
|
||||
syncVehicleProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PED:
|
||||
syncCivilianProperties(element);
|
||||
break;
|
||||
|
||||
case ELEMENT_PLAYER:
|
||||
syncPlayerProperties(element);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
if(getGame() == VRR_GAME_GTA_IV) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerPedPartsAndProps(parts, props) {
|
||||
for(let i in parts) {
|
||||
localPlayer.changeBodyPart(parts[i][0], parts[i][1], parts[i][2]);
|
||||
}
|
||||
for(let i in parts) {
|
||||
localPlayer.changeBodyPart(parts[i][0], parts[i][1], parts[i][2]);
|
||||
}
|
||||
|
||||
for(let j in props) {
|
||||
localPlayer.changeBodyProp(props[j][0], props[j][1]);
|
||||
}
|
||||
for(let j in props) {
|
||||
localPlayer.changeBodyProp(props[j][0], props[j][1]);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
131
scripts/client/vehicle.js
Normal file
@@ -0,0 +1,131 @@
|
||||
// ===========================================================================
|
||||
// Vortrex's Roleplay Resource
|
||||
// https://github.com/VortrexFTW/gtac_roleplay
|
||||
// ===========================================================================
|
||||
// FILE: vehicle.js
|
||||
// DESC: Provides vehicle functions and arrays with data
|
||||
// TYPE: Client (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
class VehicleData {
|
||||
constructor(vehicleId, model, position, heading, colour1, colour2, colour3, colour4, locked, lights, engine, licensePlate) {
|
||||
this.index = -1;
|
||||
this.vehicleId = vehicleId;
|
||||
this.model = model;
|
||||
this.position = position;
|
||||
this.heading = heading;
|
||||
this.colour1 = colour1;
|
||||
this.colour2 = colour2;
|
||||
this.colour3 = colour3;
|
||||
this.colour4 = colour4;
|
||||
this.pickupModel = pickupModel;
|
||||
this.locked = locked;
|
||||
this.lights = lights;
|
||||
this.engine = engine;
|
||||
this.licensePlate = licensePlate;
|
||||
this.ivNetworkId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveVehicleFromServer(vehicleId, position, model, colour1, colour2, colour3 = 0, colour4 = 0, locked = false, lights = false, engine = false, licensePlate = "") {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Vehicle] Received vehicle ${vehicleId} (${getVehicleNameFromModel(model, getGame())}) from server`);
|
||||
|
||||
if(getGame() != VRR_GAME_GTA_IV) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getVehicleData(vehicleId) != false) {
|
||||
let vehicleData = getVehicleData(vehicleId);
|
||||
//vehicleData.position = position;
|
||||
//vehicleData.heading = heading;
|
||||
//vehicleData.model
|
||||
vehicleData.colour1 = colour1;
|
||||
vehicleData.colour2 = colour2;
|
||||
vehicleData.colour3 = colour3;
|
||||
vehicleData.colour4 = colour4;
|
||||
vehicleData.engine = engine;
|
||||
vehicleData.lights = lights;
|
||||
vehicleData.locked = locked;
|
||||
vehicleData.licensePlate = "";
|
||||
|
||||
let vehicle = natives.getVehicleFromNetworkId(vehicleId.ivNetworkId);
|
||||
} else {
|
||||
//logToConsole(LOG_DEBUG, `[VRR.Vehicle] Vehicle ${vehicleId} doesn't exist. Adding ...`);
|
||||
//let tempVehicleData = new VehicleData(vehicleId, name, position, blipModel, pickupModel);
|
||||
|
||||
//vehicles.push(tempVehicleData);
|
||||
//setAllJobDataIndexes();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processVehiclePurchasing() {
|
||||
if(vehiclePurchaseState == VRR_VEHBUYSTATE_TESTDRIVE) {
|
||||
if(getLocalPlayerVehicle() == false) {
|
||||
vehiclePurchaseState = VRR_VEHBUYSTATE_EXITVEH;
|
||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_EXITVEH);
|
||||
return false;
|
||||
} else {
|
||||
if(vehiclePurchasing == getLocalPlayerVehicle()) {
|
||||
if(getDistance(getLocalPlayerVehicle().position, vehiclePurchasePosition) >= 25) {
|
||||
vehiclePurchaseState = VRR_VEHBUYSTATE_FARENOUGH;
|
||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_FARENOUGH);
|
||||
}
|
||||
} else {
|
||||
vehiclePurchaseState = VRR_VEHBUYSTATE_WRONGVEH;
|
||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_WRONGVEH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function processVehicleBurning() {
|
||||
getElementsByType(ELEMENT_VEHICLE).filter(vehicle => vehicle.isSyncer && vehicle.health < 250).forEach((vehicle) => {
|
||||
vehicle.health = 250;
|
||||
});
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehiclePurchaseState(state, vehicleId, position) {
|
||||
vehiclePurchaseState = state;
|
||||
|
||||
if(vehicleId != null) {
|
||||
vehiclePurchasing = getElementFromId(vehicleId);
|
||||
} else {
|
||||
vehiclePurchasing = null;
|
||||
}
|
||||
|
||||
vehiclePurchasePosition = position;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {number} vehicleId - The ID of the job (initially provided by server)
|
||||
* @return {VehicleData} The vehicle's data (class instance)
|
||||
*/
|
||||
function getVehicleData(vehicleId) {
|
||||
for(let i in getServerData().vehicles) {
|
||||
if(getServerData().vehicles[i].vehicleId == vehicleId) {
|
||||
return getServerData().vehicles[i];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setAllVehicleDataIndexes() {
|
||||
for(let i in getServerData().vehicles) {
|
||||
getServerData().vehicles[i].index = i;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -8,30 +8,30 @@
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerAccentText(client) {
|
||||
return getPlayerCurrentSubAccount(client).accent;
|
||||
return getPlayerCurrentSubAccount(client).accent;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayerAccentText(client, text) {
|
||||
getPlayerCurrentSubAccount(client).accent = text;
|
||||
getPlayerCurrentSubAccount(client).accent = text;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesPlayerHaveAccent(client) {
|
||||
return (getPlayerCurrentSubAccount(client).accent != "");
|
||||
return (getPlayerCurrentSubAccount(client).accent != "");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerAccentInlineOutput(client) {
|
||||
let outputText = "";
|
||||
if(doesPlayerHaveAccent(client)) {
|
||||
outputText = `[${getPlayerAccentText(client)}] `;
|
||||
}
|
||||
let outputText = "";
|
||||
if(doesPlayerHaveAccent(client)) {
|
||||
outputText = `[${getPlayerAccentText(client)}] `;
|
||||
}
|
||||
|
||||
return outputText;
|
||||
return outputText;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -63,7 +63,7 @@ function listAccentsCommand(command, params, client) {
|
||||
|
||||
let chunkedList = splitArrayIntoChunks(accentList, 8);
|
||||
|
||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "AccentList")));
|
||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "AccentsListHeader")));
|
||||
for(let i in chunkedList) {
|
||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||
}
|
||||
@@ -91,7 +91,7 @@ function getAccentFromParams(params) {
|
||||
|
||||
function reloadAccentConfigurationCommand(command, params, client) {
|
||||
getGlobalConfig().accents = loadAccentConfig();
|
||||
messageAdmins(`${client.name} {MAINCOLOUR}has reloaded the accent list`);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)} {MAINCOLOUR}has reloaded the accent list`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -111,7 +111,7 @@ function addAccentCommand(command, params, client) {
|
||||
|
||||
getGlobalConfig().accents.push(newAccentName);
|
||||
saveAccentConfig();
|
||||
messageAdmins(`${client.name}{MAINCOLOUR} added a new accent: ${newAccentName}`);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} added a new accent: {ALTCOLOUR}${newAccentName}{MAINCOLOUR}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -131,7 +131,7 @@ function removeAccentCommand(command, params, client) {
|
||||
|
||||
getGlobalConfig().accents.push(newAccentName);
|
||||
saveAccentConfig();
|
||||
messageAdmins(`${client.name}{MAINCOLOUR} added a new accent: ${newAccentName}`);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} removed an accent: {ALTCOLOUR}${newAccentName}{MAINCOLOUR}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -20,17 +20,17 @@ function playPlayerAnimationCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
||||
let animationPositionOffset = 1;
|
||||
let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
||||
let animationPositionOffset = 1;
|
||||
|
||||
if(!animationSlot) {
|
||||
messagePlayerError(client, getLocaleString(client, "AnimationNotFound"));
|
||||
messagePlayerInfo(client, getLocaleString(client, "AnimationHelpTip"), `{ALTCOLOUR}/animlist{MAINCOLOUR}`);
|
||||
messagePlayerError(client, getLocaleString(client, "InvalidAnimation"));
|
||||
messagePlayerInfo(client, getLocaleString(client, "AnimationCommandTip", `{ALTCOLOUR}/animlist{MAINCOLOUR}`));
|
||||
return false;
|
||||
}
|
||||
|
||||
if(toInteger(animationPositionOffset) < 0 || toInteger(animationPositionOffset) > 3) {
|
||||
messagePlayerError(client, getLocaleString(client, "AnimationInvalidDistance"));
|
||||
messagePlayerError(client, getLocaleString(client, "InvalidAnimationDistance"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
||||
}
|
||||
|
||||
if(isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
||||
messagePlayerError(client, `You aren't able to do that`);
|
||||
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -51,26 +51,26 @@ let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
||||
|
||||
function stopPlayerAnimationCommand(command, params, client) {
|
||||
if(isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
||||
messagePlayerError(client, `You aren't able to do that`);
|
||||
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
setPlayerPosition(client, getPlayerData(client).currentAnimationPositionReturnTo);
|
||||
makePedStopAnimation(getPlayerData(client).ped);
|
||||
makePedStopAnimation(getPlayerPed(client));
|
||||
|
||||
getPlayerData(client).currentAnimation = -1;
|
||||
getPlayerData(client).currentAnimationPositionOffset = false;
|
||||
getPlayerData(client).currentAnimationPositionReturnTo = false;
|
||||
getPlayerData(client).animationStart = 0;
|
||||
getPlayerData(client).animationStart = 0;
|
||||
getPlayerData(client).animationForced = false;
|
||||
|
||||
setPlayerMouseCameraState(client, false);
|
||||
//setPlayerMouseCameraState(client, false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function showAnimationListCommand(command, params, client) {
|
||||
let animList = getGameConfig().animations[getServerGame()].map(function(x) { return x[0]; });
|
||||
let animList = getGameConfig().animations[getGame()].map(function(x) { return x.name; });
|
||||
|
||||
let chunkedList = splitArrayIntoChunks(animList, 10);
|
||||
|
||||
@@ -87,8 +87,8 @@ function showAnimationListCommand(command, params, client) {
|
||||
* @param {number} animationSlot - The slot index of the animation
|
||||
* @return {Array} The animation's data (array)
|
||||
*/
|
||||
function getAnimationData(animationSlot, gameId = getServerGame()) {
|
||||
return getGameConfig().animations[gameId][animationSlot];
|
||||
function getAnimationData(animationSlot, gameId = getGame()) {
|
||||
return getGameConfig().animations[gameId][animationSlot];
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -100,14 +100,14 @@ function isPlayerInForcedAnimation(client) {
|
||||
// ===========================================================================
|
||||
|
||||
function makePlayerPlayAnimation(client, animationSlot, offsetPosition = 1) {
|
||||
getPlayerData(client).currentAnimation = animationSlot;
|
||||
getPlayerData(client).currentAnimation = animationSlot;
|
||||
getPlayerData(client).currentAnimationPositionOffset = offsetPosition;
|
||||
getPlayerData(client).currentAnimationPositionReturnTo = getPlayerPosition(client);
|
||||
getPlayerData(client).animationStart = getCurrentUnixTimestamp();
|
||||
getPlayerData(client).animationStart = getCurrentUnixTimestamp();
|
||||
getPlayerData(client).animationForced = false;
|
||||
|
||||
makePedPlayAnimation(getPlayerData(client).ped, animationSlot, offsetPosition);
|
||||
|
||||
makePedPlayAnimation(getPlayerPed(client), animationSlot, offsetPosition);
|
||||
setEntityData(getPlayerPed(client), "vrr.anim", animationSlot, true);
|
||||
//if(getAnimationData(animationSlot)[9] != VRR_ANIMMOVE_NONE) {
|
||||
// if(getGame() < VRR_GAME_GTA_SA) {
|
||||
// setPlayerMouseCameraState(client, true);
|
||||
@@ -118,40 +118,41 @@ function makePlayerPlayAnimation(client, animationSlot, offsetPosition = 1) {
|
||||
// ===========================================================================
|
||||
|
||||
function forcePlayerPlayAnimation(client, animationSlot, offsetPosition = 1) {
|
||||
getPlayerData(client).currentAnimation = animationSlot;
|
||||
getPlayerData(client).currentAnimation = animationSlot;
|
||||
getPlayerData(client).currentAnimationPositionOffset = offsetPosition;
|
||||
getPlayerData(client).currentAnimationPositionReturnTo = getPlayerPosition(client);
|
||||
getPlayerData(client).animationStart = getCurrentUnixTimestamp();
|
||||
getPlayerData(client).animationStart = getCurrentUnixTimestamp();
|
||||
getPlayerData(client).animationForced = true;
|
||||
|
||||
setPlayerControlState(client, false);
|
||||
forcePedAnimation(getPlayerData(client).ped, animationSlot, offsetPosition);
|
||||
forcePedAnimation(getPlayerPed(client), animationSlot, offsetPosition);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function makePlayerStopAnimation(client) {
|
||||
//setPlayerPosition(client, getPlayerData(client).currentAnimationPositionReturnTo);
|
||||
makePedStopAnimation(getPlayerData(client).ped);
|
||||
makePedStopAnimation(getPlayerPed(client));
|
||||
|
||||
getPlayerData(client).currentAnimation = -1;
|
||||
getPlayerData(client).currentAnimationPositionOffset = false;
|
||||
getPlayerData(client).currentAnimationPositionReturnTo = false;
|
||||
getPlayerData(client).animationStart = 0;
|
||||
getPlayerData(client).animationStart = 0;
|
||||
getPlayerData(client).animationForced = false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getAnimationFromParams(params) {
|
||||
let animations = getGameConfig().animations[getGame()];
|
||||
if(isNaN(params)) {
|
||||
for(let i in getGameConfig().animations[getServerGame()]) {
|
||||
if(toLowerCase(getGameConfig().animations[getServerGame()][i][0]).indexOf(toLowerCase(params)) != -1) {
|
||||
for(let i in animations) {
|
||||
if(toLowerCase(animations[i].name).indexOf(toLowerCase(params)) != -1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(typeof getGameConfig().animations[getServerGame()][params] != "undefined") {
|
||||
if(typeof getGameConfig().animations[getGame()][params] != "undefined") {
|
||||
return toInteger(params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
// ===========================================================================
|
||||
|
||||
function initAntiCheatScript() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.AntiCheat]: Initializing anticheat script ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.AntiCheat]: Initializing anticheat script ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.AntiCheat]: Anticheat script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function clearPlayerStateToEnterExitProperty(client) {
|
||||
if(getPlayerData(client).pedState != VRR_PEDSTATE_READY) {
|
||||
if(getPlayerData(client).pedState != VRR_PEDSTATE_READY) {
|
||||
if(getPlayerData(client).pedState == VRR_PEDSTATE_ENTERINGVEHICLE) {
|
||||
sendPlayerClearPedState(client);
|
||||
getPlayerData(client).pedState = VRR_PEDSTATE_READY;
|
||||
|
||||
@@ -25,7 +25,7 @@ class BanData {
|
||||
this.name = "";
|
||||
this.reason = "";
|
||||
|
||||
if(dbAssoc) {
|
||||
if (dbAssoc) {
|
||||
this.databaseId = toInteger(dbAssoc["ban_id"]);
|
||||
this.type = dbAssoc["ban_type"];
|
||||
this.detail = toInteger(dbAssoc["ban_detail"]);
|
||||
@@ -38,291 +38,283 @@ class BanData {
|
||||
// ===========================================================================
|
||||
|
||||
function initBanScript() {
|
||||
logToConsole(LOG_INFO, "[VRR.Ban]: Initializing ban script ...");
|
||||
logToConsole(LOG_INFO, "[VRR.Ban]: Ban script initialized!");
|
||||
logToConsole(LOG_INFO, "[VRR.Ban]: Initializing ban script ...");
|
||||
logToConsole(LOG_INFO, "[VRR.Ban]: Ban script initialized!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function accountBanCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
|
||||
if(!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent banning admins with really high permissions
|
||||
if(doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
messagePlayerError(client, getLocaleString(client, "CantBanPlayer"));
|
||||
return false;
|
||||
if (!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
|
||||
logToConsole(LOG_WARN, `[VRR.Ban]: ${getPlayerDisplayForConsole(targetClient)} (${getPlayerData(targetClient).accountData.name}) account was banned by ${getPlayerDisplayForConsole(client)}. Reason: ${reason}`);
|
||||
// Prevent banning admins with really high permissions
|
||||
if (doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
messagePlayerError(client, getLocaleString(client, "CantBanPlayer"));
|
||||
return false;
|
||||
}
|
||||
|
||||
messageAdminAction(`{ALTCOLOUR}${getPlayerData(targetClient).currentSubAccountData.name} {MAINCOLOUR}has been account banned.`);
|
||||
logToConsole(LOG_WARN, `[VRR.Ban]: ${getPlayerDisplayForConsole(targetClient)} (${getPlayerData(targetClient).accountData.name}) account was banned by ${getPlayerDisplayForConsole(client)}. Reason: ${reason}`);
|
||||
|
||||
announceAdminAction(`PlayerAccountBanned`, `{ALTCOLOUR}${getPlayerName(targetClient)}{MAINCOLOUR}`);
|
||||
banAccount(getPlayerData(targetClient).accountData.databaseId, getPlayerData(client).accountData.databaseId, reason);
|
||||
disconnectPlayer(client);
|
||||
|
||||
getPlayerData(targetClient).customDisconnectReason = `Banned - ${reason}`;
|
||||
disconnectPlayer(targetClient);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function subAccountBanCommand(command, params, client, fromDiscord) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
|
||||
if(!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
if (!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent banning admins with really high permissions
|
||||
if(doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
if (doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
messagePlayerError(client, getLocaleString(client, "CantBanPlayer"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
logToConsole(LOG_WARN, `[VRR.Ban]: ${getPlayerDisplayForConsole(targetClient)} (${getPlayerData(targetClient).accountData.name})'s subaccount was banned by ${getPlayerDisplayForConsole(client)}. Reason: ${reason}`);
|
||||
logToConsole(LOG_WARN, `[VRR.Ban]: ${getPlayerDisplayForConsole(targetClient)} (${getPlayerData(targetClient).accountData.name})'s subaccount was banned by ${getPlayerDisplayForConsole(client)}. Reason: ${reason}`);
|
||||
|
||||
messageAdminAction(`{ALTCOLOUR}${getPlayerData(targetClient).currentSubAccountData.name} {MAINCOLOUR}has been character banned.`);
|
||||
banSubAccount(getPlayerData(targetClient).currentSubAccountData.databaseId, getPlayerData(client).accountData.databaseId, reason);
|
||||
announceAdminAction(`PlayerCharacterBanned`, `{ALTCOLOUR}${getPlayerName(targetClient)}{MAINCOLOUR}`);
|
||||
banSubAccount(getPlayerData(targetClient).currentSubAccountData.databaseId, getPlayerData(client).accountData.databaseId, reason);
|
||||
|
||||
disconnectPlayer(client);
|
||||
getPlayerData(targetClient).customDisconnectReason = `Banned - ${reason}`;
|
||||
disconnectPlayer(targetClient);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function ipBanCommand(command, params, client, fromDiscord) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let reason = splitParams.slice(1).join(" ");
|
||||
|
||||
if(!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
if (!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent banning admins with really high permissions
|
||||
if(doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
if (doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
messagePlayerError(client, getLocaleString(client, "CantBanPlayer"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
messageAdminAction(`{ALTCOLOUR}${getPlayerData(targetClient).currentSubAccountData.name} {MAINCOLOUR}has been IP banned.`);
|
||||
banIPAddress(targetClient.ip, getPlayerData(client).accountData.databaseId, reason);
|
||||
announceAdminAction(`PlayerIPBanned`, `{ALTCOLOUR}${getPlayerName(targetClient)}{MAINCOLOUR}`);
|
||||
banIPAddress(getPlayerIP(targetClient), getPlayerData(client).accountData.databaseId, reason);
|
||||
|
||||
server.banIP(targetClient.ip);
|
||||
targetClient.disconnect();
|
||||
getPlayerData(targetClient).customDisconnectReason = `IP Banned - ${reason}`;
|
||||
serverBanIP(getPlayerIP(targetClient));
|
||||
disconnectPlayer(targetClient);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function subNetBanCommand(command, params, client, fromDiscord) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let octetAmount = Number(getParam(params, " ", 2));
|
||||
let reason = splitParams.slice(2).join(" ");
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
|
||||
let octetAmount = Number(getParam(params, " ", 2));
|
||||
let reason = splitParams.slice(2).join(" ");
|
||||
|
||||
if(!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
if (!targetClient) {
|
||||
messagePlayerError(client, "That player is not connected!")
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent banning admins with really high permissions
|
||||
if(doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
if (doesPlayerHaveStaffPermission(targetClient, "ManageServer") || doesPlayerHaveStaffPermission(targetClient, "Developer")) {
|
||||
messagePlayerError(client, getLocaleString(client, "CantBanPlayer"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
messageAdminAction(`{ALTCOLOUR}${getPlayerData(targetClient).currentSubAccountData.name} {MAINCOLOUR}has been subnet banned`);
|
||||
banSubNet(targetClient.ip, getSubNet(targetClient.ip, octetAmount), getPlayerData(client).accountData.databaseId, reason);
|
||||
announceAdminAction(`PlayerSubNetBanned`, `{ALTCOLOUR}${getPlayerName(client)}{MAINCOLOUR}`);
|
||||
banSubNet(getPlayerIP(targetClient), getSubNet(getPlayerIP(targetClient), octetAmount), getPlayerData(client).accountData.databaseId, reason);
|
||||
|
||||
server.banIP(targetClient.ip);
|
||||
getPlayerData(client).customDisconnectReason = `IP Subnet Banned - ${reason}`;
|
||||
serverBanIP(getPlayerIP(targetClient));
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function banAccount(accountId, adminAccountId, reason) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_ACCOUNT}, ${accountId}, ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_ACCOUNT}, ${accountId}, ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function banSubAccount(subAccountId, adminAccountId, reason) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_SUBACCOUNT}, ${subAccountId}, ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_SUBACCOUNT}, ${subAccountId}, ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function banIPAddress(ipAddress, adminAccountId, reason) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_IPADDRESS}, INET_ATON(${ipAddress}), ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_detail, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_IPADDRESS}, INET_ATON(${ipAddress}), ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function banSubNet(ipAddressStart, ipAddressEnd, adminAccountId, reason) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_ip_start, ban_ip_end, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_SUBNET}, INET_ATON(${ipAddressStart}), INET_ATON(${ipAddressEnd}), ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let safeReason = dbConnection.escapetoString(reason);
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO ban_main (ban_type, ban_ip_start, ban_ip_end, ban_who_banned, ban_reason) VALUES (${VRR_BANTYPE_SUBNET}, INET_ATON(${ipAddressStart}), INET_ATON(${ipAddressEnd}), ${adminAccountId}, '${safeReason}');`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unbanAccount(accountId, adminAccountId) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_ACCOUNT} AND ban_detail=${accountId}`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_ACCOUNT} AND ban_detail=${accountId}`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unbanSubAccount(subAccountId, adminAccountId) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_SUBACCOUNT} AND ban_detail=${subAccountId}`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_SUBACCOUNT} AND ban_detail=${subAccountId}`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unbanIPAddress(ipAddress, adminAccountId) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_IPADDRESS} AND ban_detail=INET_ATON(${ipAddress})`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_IPADDRESS} AND ban_detail=INET_ATON(${ipAddress})`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function unbanSubNet(ipAddressStart, ipAddressEnd, adminAccountId) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_SUBNET} AND ban_ip_start=INET_ATON(${ipAddressStart}) AND ban_ip_end=INET_ATON(${ipAddressEnd})`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
let dbConnection = connectToDatabase();
|
||||
if (dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE ban_main SET ban_who_removed=${adminAccountId}, ban_removed=1 WHERE ban_type=${VRR_BANTYPE_SUBNET} AND ban_ip_start=INET_ATON(${ipAddressStart}) AND ban_ip_end=INET_ATON(${ipAddressEnd})`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
dbConnection.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isAccountBanned(accountId) {
|
||||
let bans = getServerData().bans;
|
||||
for(let i in bans) {
|
||||
if(bans[i].type == VRR_BANTYPE_ACCOUNT) {
|
||||
if(bans[i].detail == accountId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
let bans = getServerData().bans.filter(ban => ban.type === VRR_BANTYPE_ACCOUNT && ban.detail === accountId);
|
||||
if (bans.length > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isSubAccountBanned(subAccountId) {
|
||||
let bans = getServerData().bans;
|
||||
for(let i in bans) {
|
||||
if(bans[i].type == VRR_BANTYPE_SUBACCOUNT) {
|
||||
if(bans[i].detail == subAccountId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
let bans = getServerData().bans.filter(ban => ban.type === VRR_BANTYPE_SUBACCOUNT && ban.detail === subAccountId);
|
||||
if (bans.length > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function isIpAddressBanned(ipAddress) {
|
||||
let bans = getServerData().bans;
|
||||
for(let i in bans) {
|
||||
if(bans[i].type == VRR_BANTYPE_IPADDRESS) {
|
||||
if(bans[i].detail == ipAddress) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
let bans = getServerData().bans.filter(ban => ban.type === VRR_BANTYPE_IPADDRESS && ban.detail === ipAddress);
|
||||
if (bans.length > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
// TYPE: Server (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let serverBitFlags = {
|
||||
staffFlags: {},
|
||||
moderationFlags: {},
|
||||
@@ -21,7 +19,6 @@ let serverBitFlags = {
|
||||
npcTriggerTypeFlags: {},
|
||||
npcTriggerConditionTypesFlags: {},
|
||||
npcTriggerResponseTypeFlags: {},
|
||||
serverSettings: {}
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -41,6 +38,8 @@ let serverBitFlagKeys = {
|
||||
"ManageWorld",
|
||||
"ManageAntiCheat",
|
||||
"Developer",
|
||||
"ManageNPCs",
|
||||
"ManageRaces",
|
||||
],
|
||||
moderationFlagKeys: [
|
||||
"None",
|
||||
@@ -119,6 +118,8 @@ let serverBitFlagKeys = {
|
||||
"NoRandomTips",
|
||||
"NoActionTips",
|
||||
],
|
||||
|
||||
// Not going to be used. Use trigger, condition, and response stuff in trigger.js
|
||||
npcTriggerTypeKeys: [
|
||||
"None",
|
||||
"FarProximity", // Comes within a far distance of NPC
|
||||
@@ -219,26 +220,6 @@ let serverBitFlagKeys = {
|
||||
"ShowItemsAfterPurchase",
|
||||
"BuyCommandAfterEnterBusiness",
|
||||
],
|
||||
serverSettingsKeys: [
|
||||
"None",
|
||||
"GUI",
|
||||
"ServerLogo",
|
||||
"FallingSnow",
|
||||
"GroundSnow",
|
||||
"Anticheat",
|
||||
"CheckGameScripts",
|
||||
"GameScriptBlackList",
|
||||
"GameScriptWhiteList",
|
||||
"JobBlips",
|
||||
"JobPickups",
|
||||
"BusinessBlips",
|
||||
"BusinessPickups",
|
||||
"HouseBlips",
|
||||
"HousePickups",
|
||||
"DiscordBot",
|
||||
"RealTime",
|
||||
"Testing",
|
||||
],
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -255,47 +236,12 @@ function initBitFlagScript() {
|
||||
serverBitFlags.npcTriggerTypes = createBitFlagTable(serverBitFlagKeys.npcTriggerTypeKeys);
|
||||
serverBitFlags.npcTriggerConditionTypes = createBitFlagTable(serverBitFlagKeys.npcTriggerConditionTypeKeys);
|
||||
serverBitFlags.npcTriggerResponseTypes = createBitFlagTable(serverBitFlagKeys.npcTriggerResponseTypeKeys);
|
||||
serverBitFlags.serverSettings = createBitFlagTable(serverBitFlagKeys.serverSettingsKeys);
|
||||
logToConsole(LOG_INFO, "[VRR.BitFlag]: Bit flag script initialized successfully!");
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createBitFlagTable(keyNames) {
|
||||
let bitVal = 0;
|
||||
let bitTable = {};
|
||||
let incVal = 1;
|
||||
|
||||
for(let i in keyNames) {
|
||||
let key = keyNames[i];
|
||||
bitTable[key] = bitVal;
|
||||
bitVal = 1 << incVal;
|
||||
incVal++;
|
||||
}
|
||||
return bitTable;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function hasBitFlag(allFlags, checkForFlag) {
|
||||
if(allFlags == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(allFlags == -1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if((allFlags & checkForFlag) == checkForFlag) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesPlayerHaveStaffPermission(client, requiredFlags) {
|
||||
if(isConsole(client)) {
|
||||
return true;
|
||||
@@ -311,15 +257,15 @@ function doesPlayerHaveStaffPermission(client, requiredFlags) {
|
||||
}
|
||||
|
||||
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
||||
if(staffFlags == getStaffFlagValue("All")) {
|
||||
return true;
|
||||
}
|
||||
if(staffFlags == getStaffFlagValue("All")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(hasBitFlag(staffFlags, requiredFlags)) {
|
||||
return true;
|
||||
}
|
||||
if(hasBitFlag(staffFlags, requiredFlags)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -341,22 +287,22 @@ function doesPlayerHaveClanPermission(client, requiredFlags) {
|
||||
clanFlags = getPlayerCurrentSubAccount(client).clanFlags | getClanRankFlags(getPlayerCurrentSubAccount(client).clanRank);
|
||||
|
||||
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
||||
if(clanFlags == getClanFlagValue("All")) {
|
||||
return true;
|
||||
}
|
||||
if(clanFlags == getClanFlagValue("All")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(hasBitFlag(clanFlags, requiredFlags)) {
|
||||
return true;
|
||||
}
|
||||
if(hasBitFlag(clanFlags, requiredFlags)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getStaffFlagValue(flagName) {
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(typeof serverBitFlags.staffFlags[flagName] == "undefined") {
|
||||
@@ -369,8 +315,8 @@ function getStaffFlagValue(flagName) {
|
||||
// ===========================================================================
|
||||
|
||||
function getClanFlagValue(flagName) {
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(typeof getServerBitFlags().clanFlags[flagName] == "undefined") {
|
||||
@@ -383,8 +329,8 @@ function getClanFlagValue(flagName) {
|
||||
// ===========================================================================
|
||||
|
||||
function getAccountSettingsFlagValue(flagName) {
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(typeof serverBitFlags.accountSettingsFlags[flagName] == "undefined") {
|
||||
@@ -397,8 +343,8 @@ function getAccountSettingsFlagValue(flagName) {
|
||||
// ===========================================================================
|
||||
|
||||
function getModerationFlagValue(flagName) {
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(typeof serverBitFlags.moderationFlags[flagName] == "undefined") {
|
||||
@@ -410,20 +356,6 @@ function getModerationFlagValue(flagName) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getServerSettingsFlagValue(flagName) {
|
||||
if(flagName == "All") {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(typeof serverBitFlags.serverSettings[flagName] == "undefined") {
|
||||
return false;
|
||||
}
|
||||
|
||||
return serverBitFlags.serverSettings[flagName];
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function givePlayerStaffFlag(client, flagName) {
|
||||
if(!getStaffFlagValue(flagName)) {
|
||||
return false;
|
||||
@@ -447,18 +379,6 @@ function takePlayerStaffFlag(client, flagName) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addBitFlag(allFlags, flagValue) {
|
||||
return allFlags | flagValue;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function removeBitFlag(allFlags, flagValue) {
|
||||
return allFlags ^ flagValue;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function takePlayerStaffFlag(client, flagName) {
|
||||
if(!getStaffFlagValue(flagName)) {
|
||||
return false;
|
||||
@@ -488,19 +408,3 @@ function getServerBitFlagKeys() {
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createBitwiseTable(tableKeys) {
|
||||
let bitVal = 0;
|
||||
let bitTable = {};
|
||||
let incVal = 1;
|
||||
|
||||
for(let i in tableKeys) {
|
||||
let key = tableKeys[i];
|
||||
bitTable[key] = bitVal;
|
||||
bitVal = 1 << incVal;
|
||||
incVal++;
|
||||
}
|
||||
return bitTable;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -16,30 +16,36 @@ function initChatScript() {
|
||||
// ===========================================================================
|
||||
|
||||
function processPlayerChat(client, messageText) {
|
||||
if(!getPlayerData(client)) {
|
||||
messagePlayerError(client, "You need to login before you can chat!");
|
||||
return false;
|
||||
}
|
||||
if(!isConsole(client)) {
|
||||
if(!getPlayerData(client)) {
|
||||
messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isPlayerLoggedIn(client)) {
|
||||
messagePlayerError(client, "You need to login before you can chat!");
|
||||
return false;
|
||||
}
|
||||
if(!isPlayerLoggedIn(client)) {
|
||||
messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!isPlayerSpawned(client)) {
|
||||
messagePlayerError(client, "You need to spawn before you can chat!");
|
||||
return false;
|
||||
}
|
||||
if(!isPlayerSpawned(client)) {
|
||||
messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
return false;
|
||||
}
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
messageText = messageText.substring(0, 128);
|
||||
messageText = messageText.substring(0, 128);
|
||||
messagePlayerNormal(null, `💬 ${getCharacterFullName(client)}: {MAINCOLOUR}${messageText}`, getPlayerColour(client));
|
||||
messageDiscordChatChannel(`💬 ${getCharacterFullName(client)}: ${messageText}`);
|
||||
} else {
|
||||
messagePlayerNormal(null, `🛡️ (ADMIN) - ${messageText}`);
|
||||
}
|
||||
|
||||
/*
|
||||
let clients = getClients();
|
||||
/*
|
||||
let clients = getClients();
|
||||
for(let i in clients) {
|
||||
let translatedText;
|
||||
translatedText = await translateMessage(messageText, getPlayerData(client).locale, getPlayerData(clients[i]).locale);
|
||||
@@ -47,9 +53,9 @@ function processPlayerChat(client, messageText) {
|
||||
let original = (getPlayerData(client).locale == getPlayerData(clients[i]).locale) ? `` : ` {ALTCOLOUR}(${messageText})`;
|
||||
messagePlayerNormal(clients[i], `💬 ${getCharacterFullName(client)}: [#FFFFFF]${translatedText}${original}`, clients[i], getColourByName("mediumGrey"));
|
||||
}
|
||||
*/
|
||||
messagePlayerNormal(null, `💬 ${getCharacterFullName(client)}: ${messageText}`);
|
||||
//messageDiscordChatChannel(`💬 ${getCharacterFullName(client)}: ${messageText}`);
|
||||
*/
|
||||
|
||||
//messageDiscordChatChannel(`💬 ${getCharacterFullName(client)}: ${messageText}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -68,7 +74,7 @@ function meActionCommand(command, params, client) {
|
||||
|
||||
function doActionCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -85,7 +91,7 @@ function doActionCommand(command, params, client) {
|
||||
|
||||
function shoutCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -102,7 +108,7 @@ function shoutCommand(command, params, client) {
|
||||
|
||||
function megaphoneChatCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -112,7 +118,7 @@ function megaphoneChatCommand(command, params, client) {
|
||||
}
|
||||
|
||||
if(!canPlayerUseMegaphone(client)) {
|
||||
messagePlayerError(client, "You must have a megaphone item or be in an emergency vehicle!");
|
||||
messagePlayerError(client, getLocaleString(client, "CantUseMegaphone"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -124,7 +130,7 @@ function megaphoneChatCommand(command, params, client) {
|
||||
|
||||
function talkCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -141,7 +147,7 @@ function talkCommand(command, params, client) {
|
||||
|
||||
function whisperCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -158,7 +164,7 @@ function whisperCommand(command, params, client) {
|
||||
|
||||
function adminChatCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -167,14 +173,14 @@ function adminChatCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
messageAdmins(`{jobYellow}[Admin Chat] {ALTCOLOUR}${getPlayerName(client)} [#CCCCCC](${getPlayerStaffTitle(client)}){MAINCOLOUR}: ${params}`);
|
||||
messageAdmins(`{jobYellow}[Admin Chat] {ALTCOLOUR}${getPlayerName(client)}: ${params}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function clanChatCommand(command, params, client) {
|
||||
if(isPlayerMuted(client)) {
|
||||
messagePlayerError(client, "You are muted and can't chat!");
|
||||
messagePlayerError(client, getLocaleString(client, "MutedCantChat"));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -106,8 +106,6 @@ class ClanMemberData {
|
||||
|
||||
function initClanScript() {
|
||||
logToConsole(LOG_INFO, "[VRR.Clan]: Initializing clans script ...");
|
||||
getServerData().clans = loadClansFromDatabase();
|
||||
setAllClanDataIndexes();
|
||||
logToConsole(LOG_INFO, "[VRR.Clan]: Clan script initialized successfully!");
|
||||
return true;
|
||||
}
|
||||
@@ -130,7 +128,7 @@ function loadClansFromDatabase() {
|
||||
//tempClanData.members = loadClanMembersFromDatabase(tempClanData.databaseId);
|
||||
tempClanData.ranks = loadClanRanksFromDatabase(tempClanData.databaseId);
|
||||
tempClans.push(tempClanData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.Clan]: Clan '${tempClanData.name}' loaded from database successfully!`);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Clan]: Clan '${tempClanData.name}' loaded from database successfully!`);
|
||||
}
|
||||
}
|
||||
freeDatabaseQuery(dbQuery);
|
||||
@@ -211,7 +209,7 @@ function createClanRank(clanId, rankId, rankName) {
|
||||
let rankIndex = getClanData(clanId).ranks.push(tempClanRankData);
|
||||
setAllClanDataIndexes();
|
||||
|
||||
saveAllClanRanksToDatabase(clanId);
|
||||
saveClanRanksToDatabase(clanId);
|
||||
return rankIndex;
|
||||
}
|
||||
|
||||
@@ -223,7 +221,7 @@ function removeClanRank(clanId, rankId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
quickDatabaseQuery(`DELETE FROM clan_rank WHERE clan_rank_id = ${tempClanRankData.database}`);
|
||||
quickDatabaseQuery(`UPDATE clan_rank SET clan_rank_deleted = 1, clan_rank_when_deleted = UNIX_TIMESTAMP(), clan_rank_who_deleted = ${getPlayerData(client).accountData.databaseId} WHERE biz_id ${tempClanRankData.database}`);
|
||||
getClanData(clanId).ranks.splice(tempClanRankData.index, 1);
|
||||
}
|
||||
|
||||
@@ -241,7 +239,7 @@ function listClansCommand(command, params, client) {
|
||||
|
||||
let chunkedList = splitArrayIntoChunks(nameList, 5);
|
||||
|
||||
messagePlayerInfo(client, `{clanOrange}== {jobYellow}Clans {clanOrange}====================================`);
|
||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderClansList")));
|
||||
|
||||
for(let i in chunkedList) {
|
||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||
@@ -268,7 +266,7 @@ function listClanRanksCommand(command, params, client) {
|
||||
|
||||
let chunkedList = splitArrayIntoChunks(rankNameList, 5);
|
||||
|
||||
messagePlayerInfo(client, `{clanOrange}== {jobYellow}Clan Ranks (${getClanData(clanId).name}) {clanOrange}=====================`);
|
||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderClanRanksList")));
|
||||
|
||||
for(let i in chunkedList) {
|
||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||
@@ -290,7 +288,7 @@ function createClanCommand(command, params, client) {
|
||||
|
||||
// Create clan without owner. Can set owner with /clanowner afterward
|
||||
createClan(params);
|
||||
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}created clan {clanOrange}${params}`);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} created clan {clanOrange}${params}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -308,8 +306,8 @@ function deleteClanCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}deleted clan {clanOrange}${getClanData(clanId).name}`);
|
||||
deleteClan(clanId);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)} {MAINCOLOUR}deleted clan {clanOrange}${getClanData(clanId).name}`);
|
||||
deleteClan(clanId, getPlayerData(client).accountData.databaseId);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -339,10 +337,13 @@ function setClanOwnerCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getClanData(clanId).owner = getPlayerCurrentSubAccount(targetClient).databaseId;
|
||||
getClanData(clanId).needsSaved = true;
|
||||
|
||||
getPlayerCurrentSubAccount(targetClient).clan = getClanData(clanId).databaseId;
|
||||
getPlayerCurrentSubAccount(targetClient).clanFlags = getClanFlagValue("All");
|
||||
|
||||
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).name} {MAINCOLOUR}owner to {ALTCOLOUR}${getCharacterFullName(targetClient)}`);
|
||||
//messageAdmins(`{adminOrange}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).name} {MAINCOLOUR}owner to {ALTCOLOUR}${getCharacterFullName(targetClient)}`);
|
||||
messagePlayerSuccess(client, `You changed the clan owner to {ALTCOLOUR}${getCharacterFullName(targetClient)}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -365,9 +366,11 @@ function setClanTagCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getClanData(clanId).params = params;
|
||||
getClanData(clanId).tag = params;
|
||||
getClanData(clanId).needsSaved = true;
|
||||
|
||||
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).index} {MAINCOLOUR}tag to {ALTCOLOUR}${params}`);
|
||||
//messageAdmins(`{adminOrange}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).index} {MAINCOLOUR}tag to {ALTCOLOUR}${params}`);
|
||||
messagePlayerSuccess(client, `You changed the clan tag to {ALTCOLOUR}${params}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -391,8 +394,10 @@ function setClanNameCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getClanData(clanId).name = params;
|
||||
getClanData(clanId).needsSaved = true;
|
||||
|
||||
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).index} {MAINCOLOUR}name to {ALTCOLOUR}${params}`);
|
||||
//messageAdmins(`{adminOrange}${getPlayerName(client)} {MAINCOLOUR}set clan {clanOrange}${getClanData(clanId).index} {MAINCOLOUR}name to {ALTCOLOUR}${params}`);
|
||||
messagePlayerSuccess(client, `You changed the clan name to {ALTCOLOUR}${params}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -453,8 +458,9 @@ function deleteClanRankCommand(command, params, client) {
|
||||
}
|
||||
|
||||
removeClanRank(clanId, rankId);
|
||||
getClanData(clanId).needsSaved = true;
|
||||
|
||||
messagePlayerSuccess(client, `You removed the {ALTCOLOUR}${tempRankName} {MAINCOLOUR}rank`);
|
||||
messagePlayerSuccess(client, `You removed the {ALTCOLOUR}${tempRankName}{MAINCOLOUR} rank`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -496,7 +502,7 @@ function setClanMemberTagCommand(command, params, client) {
|
||||
}
|
||||
}
|
||||
|
||||
getPlayerCurrentSubAccount(targetClient).ClanTag = getParam(params, " ", 2);
|
||||
getPlayerCurrentSubAccount(targetClient).clanTag = getParam(params, " ", 2);
|
||||
|
||||
messagePlayerSuccess(client, `You set {ALTCOLOUR}${getCharacterFullName(targetClient)}'s {MAINCOLOUR}clan tag to {ALTCOLOUR}${getParam(params, " ", 2)}`);
|
||||
messagePlayerAlert(client, `{ALTCOLOUR}${getCharacterFullName(targetClient)} {MAINCOLOUR}set your clan tag to {ALTCOLOUR}${getParam(params, " ", 2)}`);
|
||||
@@ -530,7 +536,8 @@ function setClanRankTagCommand(command, params, client) {
|
||||
}
|
||||
}
|
||||
|
||||
getServerData().clans[clanId].rankId[rankId].customTag = newTag;
|
||||
getClanRankData(clanId, rankId).customTag = newTag;
|
||||
getClanRankData(clanId, rankId).needsSaved = true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -578,7 +585,8 @@ function setClanRankLevelCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getServerData().clans[clanId].rankId[rankId].level = toInteger(newLevel);
|
||||
getClanRankData(clanId, rankId).level = toInteger(newLevel);
|
||||
getClanRankData(clanId, rankId).needsSaved = true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -717,7 +725,8 @@ function addClanRankFlagCommand(command, params, client) {
|
||||
|
||||
let flagValue = getClanFlagValue(getParam(params, " ", 2));
|
||||
|
||||
addBitFlag(getClanRankData(clanId, rankId).flags, flagValue);
|
||||
getClanRankData(clanId, rankId).flags = addBitFlag(getClanRankData(clanId, rankId).flags, flagValue);
|
||||
getClanRankData(clanId, rankId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `You added the {ALTCOLOUR}${getParam(params, " ", 2)} {MAINCOLOUR}clan flag to rank {ALTCOLOUR}${getClanRankData(clanId, rankId).name}`);
|
||||
}
|
||||
|
||||
@@ -755,7 +764,8 @@ function removeClanRankFlagCommand(command, params, client) {
|
||||
|
||||
let flagValue = getClanFlagValue(getParam(params, " ", 2));
|
||||
|
||||
removeBitFlag(getClanRankData(clanId, rankId).flags, flagValue);
|
||||
getClanRankData(clanId, rankId).flags = removeBitFlag(getClanRankData(clanId, rankId).flags, flagValue);
|
||||
getClanRankData(clanId, rankId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `You removed the {ALTCOLOUR}${getParam(params, " ", 2)} {MAINCOLOUR}clan flag from rank {ALTCOLOUR}${getClanRankData(clanId, rankId).name}`);
|
||||
}
|
||||
|
||||
@@ -799,8 +809,7 @@ function showClanRankFlagsCommand(command, params, client) {
|
||||
|
||||
let chunkedList = splitArrayIntoChunks(flagList, 6);
|
||||
|
||||
messagePlayerInfo(client, `{clanOrange}== {jobYellow}Clan Rank Flags (${getClanRankData(clanId, rankId).name}){clanOrange}===================`);
|
||||
|
||||
makeChatBoxSectionHeader(client, getLocaleString(client, "ClanRankFlags"), getClanRankData(clanId, rankId).name);
|
||||
for(let i in chunkedList) {
|
||||
messagePlayerInfo(client, chunkedList[i].join("{MAINCOLOUR}, "));
|
||||
}
|
||||
@@ -881,6 +890,7 @@ function setClanRankTitleCommand(command, params, client) {
|
||||
|
||||
let oldRankName = getClanRankData(clanId, rankId).name;
|
||||
getClanRankData(clanId, rankId).name = getParam(params, " ", 2);
|
||||
getClanRankData(clanId, rankId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `You changed the name of rank ${rankId} from {ALTCOLOUR}${oldRankName} {MAINCOLOUR}to {ALTCOLOUR}${params}`);
|
||||
}
|
||||
|
||||
@@ -941,7 +951,7 @@ function setClanMemberRankCommand(command, params, client) {
|
||||
let oldClanRank = getClanRankData(clanId, getPlayerClanRank(targetClient));
|
||||
getPlayerCurrentSubAccount(targetClient).clanRank = getClanRankData(clanId, rankId).databaseId;
|
||||
getPlayerCurrentSubAccount(targetClient).clanRankIndex = rankId;
|
||||
messagePlayerSuccess(client, `You changed {ALTCOLOUR}${getCharacterFullName(targetClient)}'s {MAINCOLOUR}rank from {ALTCOLOUR}${oldClanRank.name} {MAINCOLOUR}to {ALTCOLOUR}${getClanRankData(clanId, rankId).name}`);
|
||||
messagePlayerSuccess(client, `You changed {ALTCOLOUR}${getCharacterFullName(targetClient)}'s{MAINCOLOUR} rank from {ALTCOLOUR}${oldClanRank.name}{MAINCOLOUR} to {ALTCOLOUR}${getClanRankData(clanId, rankId).name}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -966,12 +976,12 @@ function createClan(name) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function deleteClan(clanId) {
|
||||
saveClansToDatabase();
|
||||
function deleteClan(clanId, whoDeleted = 0) {
|
||||
//saveAllClansToDatabase();
|
||||
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE clan_main SET clan_deleted = 1 WHERE clan_id = ${clanId}`);
|
||||
let dbQuery = queryDatabase(dbConnection, `UPDATE clan_main SET clan_deleted = 1, clan_when_deleted = UNIX_TIMESTAMP, clan_who_deleted = ${whoDeleted} WHERE clan_id = ${clanId}`);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
disconnectFromDatabase(dbConnection);
|
||||
|
||||
@@ -1024,12 +1034,20 @@ function doesClanIdExist(clanId) {
|
||||
// ===========================================================================
|
||||
|
||||
function reloadAllClans() {
|
||||
if(getServerConfig().devServer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getServerData().clans = loadClansFromDatabase();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function saveAllClanRanksToDatabase(clanId) {
|
||||
function saveClanRanksToDatabase(clanId) {
|
||||
if(getServerConfig().devServer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let ranks = getServerData().clans[clanId].ranks;
|
||||
for(let i in ranks) {
|
||||
saveClanRankToDatabase(clanId, i);
|
||||
@@ -1045,9 +1063,13 @@ function saveClanToDatabase(clanId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!tempClanData.needsSaved) {
|
||||
return false;
|
||||
}
|
||||
if(tempClanData.databaseId == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!tempClanData.needsSaved) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
@@ -1079,7 +1101,7 @@ function saveClanToDatabase(clanId) {
|
||||
disconnectFromDatabase(dbConnection);
|
||||
}
|
||||
|
||||
saveAllClanRanksToDatabase(clanId);
|
||||
saveClanRanksToDatabase(clanId);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1091,41 +1113,41 @@ function saveClanToDatabase(clanId) {
|
||||
function saveClanRankToDatabase(clanId, rankId) {
|
||||
let tempClanRankData = getClanRankData(clanId, rankId);
|
||||
|
||||
if(!tempClanRankData.needsSaved) {
|
||||
return false;
|
||||
}
|
||||
if(!tempClanRankData.needsSaved) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeName = escapeDatabaseString(dbConnection, tempClanRankData.name);
|
||||
let safeTag = escapeDatabaseString(dbConnection, tempClanRankData.customTag);
|
||||
//let safeTitle = escapeDatabaseString(dbConnection, tempClanRankData.name);
|
||||
let safeName = escapeDatabaseString(dbConnection, tempClanRankData.name);
|
||||
let safeTag = escapeDatabaseString(dbConnection, tempClanRankData.customTag);
|
||||
//let safeTitle = escapeDatabaseString(dbConnection, tempClanRankData.name);
|
||||
|
||||
let data = [
|
||||
["clan_rank_name", safeName],
|
||||
["clan_rank_clan", tempClanRankData.clan],
|
||||
["clan_rank_custom_tag", safeTag],
|
||||
//["clan_rank_title", safeTitle],
|
||||
["clan_rank_flags", tempClanRankData.flags],
|
||||
["clan_rank_level", tempClanRankData.level],
|
||||
["clan_rank_enabled", boolToInt(tempClanRankData.enabled)],
|
||||
];
|
||||
let data = [
|
||||
["clan_rank_name", safeName],
|
||||
["clan_rank_clan", tempClanRankData.clan],
|
||||
["clan_rank_custom_tag", safeTag],
|
||||
//["clan_rank_title", safeTitle],
|
||||
["clan_rank_flags", tempClanRankData.flags],
|
||||
["clan_rank_level", tempClanRankData.level],
|
||||
["clan_rank_enabled", boolToInt(tempClanRankData.enabled)],
|
||||
];
|
||||
|
||||
let dbQuery = null;
|
||||
if(tempClanRankData.databaseId == 0) {
|
||||
let queryString = createDatabaseInsertQuery("clan_rank", data);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
getClanRankData(clanId, rankId).databaseId = getDatabaseInsertId(dbConnection);
|
||||
getClanRankData(clanId, rankId).needsSaved = false;
|
||||
} else {
|
||||
let queryString = createDatabaseUpdateQuery("clan_rank", data, `clan_rank_id=${tempClanRankData.databaseId} LIMIT 1`);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
getClanRankData(clanId, rankId).needsSaved = false;
|
||||
}
|
||||
let dbQuery = null;
|
||||
if(tempClanRankData.databaseId == 0) {
|
||||
let queryString = createDatabaseInsertQuery("clan_rank", data);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
getClanRankData(clanId, rankId).databaseId = getDatabaseInsertId(dbConnection);
|
||||
getClanRankData(clanId, rankId).needsSaved = false;
|
||||
} else {
|
||||
let queryString = createDatabaseUpdateQuery("clan_rank", data, `clan_rank_id=${tempClanRankData.databaseId} LIMIT 1`);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
getClanRankData(clanId, rankId).needsSaved = false;
|
||||
}
|
||||
|
||||
freeDatabaseQuery(dbQuery);
|
||||
disconnectFromDatabase(dbConnection);
|
||||
return true;
|
||||
freeDatabaseQuery(dbQuery);
|
||||
disconnectFromDatabase(dbConnection);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -1169,6 +1191,10 @@ function setClanRankTitle(clanId, rankId, title) {
|
||||
// ===========================================================================
|
||||
|
||||
function saveAllClansToDatabase() {
|
||||
if(getServerConfig().devServer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for(let i in getServerData().clans) {
|
||||
saveClanToDatabase(i);
|
||||
}
|
||||
@@ -1231,6 +1257,11 @@ function getClanRankIdFromDatabaseId(clanId, databaseId) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {number} clanId - The data index of the clan
|
||||
* @param {number} clanRankId - The data index of the clan rank
|
||||
* @return {ClanRankData} The clan rank's data (class instance)
|
||||
*/
|
||||
function getClanRankData(clanId, rankId) {
|
||||
return getServerData().clans[clanId].ranks[rankId];
|
||||
}
|
||||
@@ -1287,7 +1318,7 @@ function showClanFlagListCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let rankId = getClanRankFromParams(clanId, getParam(params, " ", 1));
|
||||
let rankId = getClanRankFromParams(clanId, getParam(params, " ", 1));
|
||||
|
||||
if(!getClanRankData(clanId, rankId)) {
|
||||
messagePlayerError(client, getLocaleString(client, "ClanRankInvalid"));
|
||||
@@ -1310,6 +1341,12 @@ let rankId = getClanRankFromParams(clanId, getParam(params, " ", 1));
|
||||
}
|
||||
*/
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {String} params - The params to search for
|
||||
* @return {Number} The data index of a matching clan
|
||||
*/
|
||||
function getClanFromParams(params) {
|
||||
if(isNaN(params)) {
|
||||
for(let i in getServerData().clans) {
|
||||
@@ -1328,6 +1365,11 @@ function getClanFromParams(params) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @param {Number} clanId - The clan ID to search ranks for
|
||||
* @param {String} params - The params to search for
|
||||
* @return {Number} The data index of a matching clan
|
||||
*/
|
||||
function getClanRankFromParams(clanId, params) {
|
||||
if(isNaN(params)) {
|
||||
for(let i in getClanData(clanId).ranks) {
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
/**
|
||||
* @class Representing data for server configuration
|
||||
*/
|
||||
class ServerData {
|
||||
class ServerData {
|
||||
constructor(dbAssoc = false) {
|
||||
this.databaseId = 0;
|
||||
this.needsSaved = false;
|
||||
@@ -86,7 +86,7 @@
|
||||
sendAdminEvents: true,
|
||||
};
|
||||
|
||||
if(dbAssoc) {
|
||||
if (dbAssoc) {
|
||||
this.databaseId = dbAssoc["svr_id"];
|
||||
this.newCharacter = {
|
||||
spawnPosition: toVector3(dbAssoc["svr_newchar_pos_x"], dbAssoc["svr_newchar_pos_y"], dbAssoc["svr_newchar_pos_z"]),
|
||||
@@ -95,7 +95,7 @@
|
||||
bank: dbAssoc["svr_newchar_bank"],
|
||||
skin: dbAssoc["svr_newchar_skin"],
|
||||
},
|
||||
this.settings = toInteger(dbAssoc["svr_settings"]);
|
||||
this.settings = toInteger(dbAssoc["svr_settings"]);
|
||||
|
||||
this.connectCameraPosition = toVector3(dbAssoc["svr_connectcam_pos_x"], dbAssoc["svr_connectcam_pos_y"], dbAssoc["svr_connectcam_pos_z"]);
|
||||
this.connectCameraLookAt = toVector3(dbAssoc["svr_connectcam_lookat_x"], dbAssoc["svr_connectcam_lookat_y"], dbAssoc["svr_connectcam_lookat_z"]);
|
||||
@@ -127,13 +127,18 @@
|
||||
};
|
||||
|
||||
let serverConfig = false;
|
||||
let databaseConfig = false;
|
||||
let emailConfig = false;
|
||||
let gameConfig = false;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let globalConfig = {
|
||||
keyBind: [],
|
||||
economy: {},
|
||||
database: {},
|
||||
locale: {},
|
||||
accents: {},
|
||||
discord: {},
|
||||
email: {},
|
||||
accountPasswordHash: "SHA512",
|
||||
npcFarProximity: 100,
|
||||
npcMediumProximity: 40,
|
||||
@@ -150,7 +155,6 @@ let globalConfig = {
|
||||
stopWorkingDistance: 10,
|
||||
spawnCarDistance: 5,
|
||||
payAndSprayDistance: 5,
|
||||
keyBind: [],
|
||||
exitPropertyDistance: 3.0,
|
||||
enterPropertyDistance: 3.0,
|
||||
businessDimensionStart: 5000,
|
||||
@@ -186,64 +190,107 @@ let globalConfig = {
|
||||
],
|
||||
vehicleInactiveRespawnDelay: 1800000, // 20 minutes
|
||||
chatSectionHeaderLength: 96,
|
||||
economy: {},
|
||||
locales: [],
|
||||
accents: [],
|
||||
useServerSideVehiclePurchaseCheck: false,
|
||||
useServerSideVehiclePurchaseCheck: true,
|
||||
useServerSideVehicleBurnCheck: false,
|
||||
businessPickupStreamInDistance: 100,
|
||||
businessPickupStreamOutDistance: 120,
|
||||
housePickupStreamInDistance: 100,
|
||||
housePickupStreamOutDistance: 120,
|
||||
jobPickupStreamInDistance: 100,
|
||||
jobPickupStreamOutDistance: 120,
|
||||
businessBlipStreamInDistance: 150,
|
||||
businessBlipStreamOutDistance: 200,
|
||||
houseBlipStreamInDistance: 100,
|
||||
houseBlipStreamOutDistance: 120,
|
||||
jobBlipStreamInDistance: -1,
|
||||
jobBlipStreamOutDistance: -1,
|
||||
playerBlipStreamInDistance: -1,
|
||||
playerBlipStreamOutDistance: -1,
|
||||
handcuffPlayerDistance: 3,
|
||||
firstAidKitPlayerDistance: 3,
|
||||
droppedItemPickupRange: 2,
|
||||
passwordRequiredCapitals: 0,
|
||||
passwordRequiredNumbers: 0,
|
||||
passwordRequiredSymbols: 0,
|
||||
minChatLines: 1,
|
||||
maxChatLines: 6,
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initConfigScript() {
|
||||
logToConsole(LOG_INFO, "[VRR.Config]: Initializing config script ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config]: Loading global config ...");
|
||||
loadGlobalConfig();
|
||||
|
||||
logToConsole(LOG_INFO, "[VRR.Config]: Loading server config ...");
|
||||
serverConfig = loadServerConfigFromGameAndPort(server.game, server.port, getMultiplayerMod());
|
||||
|
||||
logToConsole(LOG_INFO, "[VRR.Config]: Applying server config ...");
|
||||
getServerConfig().fallingSnow = intToBool(toInteger(server.getCVar("vrr_fallingsnow")));
|
||||
getServerConfig().groundSnow = intToBool(toInteger(server.getCVar("vrr_groundsnow")));
|
||||
getServerConfig().useGUI = intToBool(toInteger(server.getCVar("vrr_gui")));
|
||||
getServerConfig().showLogo = false;
|
||||
getServerConfig().testerOnly = intToBool(toInteger(server.getCVar("vrr_testeronly")));
|
||||
getServerConfig().discordEnabled = false;
|
||||
getServerConfig().createJobPickups = intToBool(toInteger(server.getCVar("vrr_jobpickups")));
|
||||
getServerConfig().createBusinessPickups = intToBool(toInteger(server.getCVar("vrr_businesspickups")));
|
||||
getServerConfig().createHousePickups = intToBool(toInteger(server.getCVar("vrr_housepickups")));
|
||||
getServerConfig().createJobBlips = intToBool(toInteger(server.getCVar("vrr_jobblips")));
|
||||
getServerConfig().createBusinessBlips = intToBool(toInteger(server.getCVar("vrr_businessblips")));
|
||||
getServerConfig().createHouseBlips = intToBool(toInteger(server.getCVar("vrr_houseblips")));
|
||||
getServerConfig().useRealTime = intToBool(toInteger(server.getCVar("vrr_realtime")));
|
||||
getServerConfig().antiCheat.enabled = intToBool(toInteger(server.getCVar("vrr_anticheat")));
|
||||
|
||||
applyConfigToServer(serverConfig);
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config]: Server config applied successfully!");
|
||||
|
||||
logToConsole(LOG_INFO, "[VRR.Config]: Config script initialized!");
|
||||
}
|
||||
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadGlobalConfig() {
|
||||
getGlobalConfig().economy = loadEconomyConfig();
|
||||
getGlobalConfig().locale = loadLocaleConfig();
|
||||
getGlobalConfig().accents = loadAccentConfig();
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading global configuration ...");
|
||||
try {
|
||||
getGlobalConfig().database = loadDatabaseConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load global configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().economy = loadEconomyConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load economy configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().locale = loadLocaleConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load locale configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().accents = loadAccentConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load accent configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().discord = loadDiscordConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load discord configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().keyBind = loadKeyBindConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load keybind configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
try {
|
||||
getGlobalConfig().email = loadEmailConfig();
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Failed to load email configuration. Error: ${error}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loaded global configuration successfully!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadServerConfigFromGameAndPort(gameId, port, mpMod) {
|
||||
function loadServerConfigFromGameAndPort(gameId, port) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let dbQueryString = `SELECT * FROM svr_main WHERE svr_game = ${gameId} AND svr_port = ${port} AND svr_mpmod = ${mpMod} LIMIT 1;`;
|
||||
if (dbConnection) {
|
||||
let dbQueryString = `SELECT * FROM svr_main WHERE svr_game = ${gameId} AND svr_port = ${port} LIMIT 1;`;
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
if (dbQuery) {
|
||||
if (dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempServerConfigData = new ServerData(dbAssoc);
|
||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return tempServerConfigData;
|
||||
}
|
||||
@@ -257,13 +304,13 @@ function loadServerConfigFromGameAndPort(gameId, port, mpMod) {
|
||||
|
||||
function loadServerConfigFromId(tempServerId) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
if (dbConnection) {
|
||||
let dbQueryString = `SELECT * FROM svr_main WHERE svr_id = ${tempServerId} LIMIT 1;`;
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
if (dbQuery) {
|
||||
if (dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempServerConfigData = new ServerData(dbAssoc);
|
||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return tempServerConfigData;
|
||||
}
|
||||
@@ -276,12 +323,15 @@ function loadServerConfigFromId(tempServerId) {
|
||||
// ===========================================================================
|
||||
|
||||
function applyConfigToServer(tempServerConfig) {
|
||||
if(isTimeSupported()) {
|
||||
logToConsole(LOG_INFO, "[VRR.Config]: Applying server config ...");
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config]: Server config applied successfully!");
|
||||
|
||||
if (isTimeSupported()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Config]: Setting time to to ${tempServerConfig.hour}:${tempServerConfig.minute} with minute duration of ${tempServerConfig.minuteDuration}`);
|
||||
setGameTime(tempServerConfig.hour, tempServerConfig.minute, tempServerConfig.minuteDuration);
|
||||
}
|
||||
|
||||
if(isWeatherSupported()) {
|
||||
if (isWeatherSupported()) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Config]: Setting weather to ${tempServerConfig.weather}`);
|
||||
game.forceWeather(tempServerConfig.weather);
|
||||
}
|
||||
@@ -293,11 +343,11 @@ function applyConfigToServer(tempServerConfig) {
|
||||
|
||||
function saveServerConfigToDatabase() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Config]: Saving server ${getServerConfig().databaseId} configuration to database ...`);
|
||||
if(getServerConfig().needsSaved) {
|
||||
if (getServerConfig().needsSaved) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
if (dbConnection) {
|
||||
let data = [
|
||||
["svr_settings", toInteger(getServerConfig().settings)],
|
||||
//["svr_settings", toInteger(getServerConfig().settings)],
|
||||
["svr_start_time_hour", getServerConfig().hour],
|
||||
["svr_start_time_min", getServerConfig().minute],
|
||||
["svr_start_weather", getServerConfig().weather],
|
||||
@@ -333,6 +383,17 @@ function saveServerConfigToDatabase() {
|
||||
["svr_charselect_vw", getServerConfig().characterSelectDimension],
|
||||
["svr_inflation_multiplier", getServerConfig().inflationMultiplier],
|
||||
["svr_intro_music", getServerConfig().introMusicURL],
|
||||
["svr_gui", getServerConfig().useGUI],
|
||||
["svr_logo", getServerConfig().showLogo],
|
||||
["svr_snow_falling", getServerConfig().fallingSnow],
|
||||
["svr_snow_ground", getServerConfig().groundSnow],
|
||||
["svr_biz_blips", getServerConfig().createBusinessBlips],
|
||||
["svr_biz_pickups", getServerConfig().createBusinessPickups],
|
||||
["svr_house_blips", getServerConfig().createHouseBlips],
|
||||
["svr_house_pickups", getServerConfig().createHousePickups],
|
||||
["svr_job_blips", getServerConfig().createJobBlips],
|
||||
["svr_job_pickups", getServerConfig().createJobPickups],
|
||||
["svr_nametag_distance", getServerConfig().nameTagDistance],
|
||||
];
|
||||
|
||||
let dbQuery = null;
|
||||
@@ -352,7 +413,7 @@ function saveServerConfigToDatabase() {
|
||||
|
||||
/**
|
||||
*
|
||||
* @return {ServerData} - Server configuration data
|
||||
* @return {ServerConfigData} - Server configuration data
|
||||
*
|
||||
*/
|
||||
function getServerConfig() {
|
||||
@@ -391,7 +452,7 @@ function getServerId() {
|
||||
*
|
||||
*/
|
||||
function setTimeCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
@@ -399,27 +460,27 @@ function setTimeCommand(command, params, client) {
|
||||
let hour = toInteger(getParam(params, " ", 1));
|
||||
let minute = toInteger(getParam(params, " ", 2)) || 0;
|
||||
|
||||
if(hour > 23 || hour < 0) {
|
||||
if (hour > 23 || hour < 0) {
|
||||
messagePlayerError(client, "The hour must be between 0 and 23!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(minute > 59 || minute < 0) {
|
||||
if (minute > 59 || minute < 0) {
|
||||
messagePlayerError(client, "The minute must be between 0 and 59!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
getServerConfig().hour = hour;
|
||||
getServerConfig().minute = minute;
|
||||
|
||||
game.time.hour = getServerConfig().hour;
|
||||
game.time.minute = getServerConfig().minute;
|
||||
game.time.hour = getServerConfig().hour;
|
||||
game.time.minute = getServerConfig().minute;
|
||||
|
||||
//checkServerGameTime();
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} set the time to ${makeReadableTime(hour, minute)}`);
|
||||
announceAdminAction("ServerTimeSet", getPlayerName(client), makeReadableTime(hour, minute));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -436,18 +497,18 @@ function setTimeCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function setMinuteDurationCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let minuteDuration = toInteger(params);
|
||||
let minuteDuration = toInteger(params);
|
||||
getServerConfig().minuteDuration = minuteDuration;
|
||||
setTimeMinuteDuration(null, minuteDuration);
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} set the minute duration to ${minuteDuration}ms`);
|
||||
announceAdminAction("ServerMinuteDurationSet", getPlayerName(client), makeReadableTime(hour, minute));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -463,25 +524,25 @@ function setMinuteDurationCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function setWeatherCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let weatherId = getWeatherFromParams(getParam(params, " ", 1));
|
||||
|
||||
if(!weatherId) {
|
||||
if (!weatherId) {
|
||||
messagePlayerError(client, `That weather ID or name is invalid!`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
game.forceWeather(toInteger(weatherId));
|
||||
game.forceWeather(toInteger(weatherId));
|
||||
getServerConfig().weather = weatherId;
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} set the weather to {ALTCOLOUR}${getGameConfig().weatherNames[getServerGame()][toInteger(weatherId)]}`);
|
||||
updateServerRules();
|
||||
announceAdminAction("ServerWeatherSet", getPlayerName(client), getGameConfig().weatherNames[getGame()][toInteger(weatherId)]);
|
||||
updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -497,13 +558,13 @@ function setWeatherCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function setSnowingCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let falling = toInteger(getParam(params, " ", 1));
|
||||
let falling = toInteger(getParam(params, " ", 1));
|
||||
let ground = toInteger(getParam(params, " ", 2));
|
||||
|
||||
getServerConfig().fallingSnow = intToBool(falling);
|
||||
@@ -513,8 +574,8 @@ function setSnowingCommand(command, params, client) {
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned falling snow ${getBoolRedGreenInlineColour(falling)}${getOnOffFromBool(falling)} {MAINCOLOUR}and ground snow ${getBoolRedGreenInlineColour(ground)}${getOnOffFromBool(ground)}`);
|
||||
updateServerRules();
|
||||
announceAdminAction("ServerSnowSet", getPlayerName(client), `${getBoolRedGreenInlineColour(falling)}${getOnOffFromBool(falling)}`, `${getBoolRedGreenInlineColour(ground)}${getOnOffFromBool(ground)}`);
|
||||
updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -530,27 +591,27 @@ function setSnowingCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function setServerGUIColoursCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let colourRed = toInteger(getParam(params, " ", 1)) || 255;
|
||||
let colourRed = toInteger(getParam(params, " ", 1)) || 255;
|
||||
let colourGreen = toInteger(getParam(params, " ", 2)) || 255;
|
||||
let colourBlue = toInteger(getParam(params, " ", 3)) || 255;
|
||||
|
||||
getServerConfig().guiColour = [colourRed, colourGreen, colourBlue];
|
||||
|
||||
let clients = getClients();
|
||||
for(let i in clients) {
|
||||
for (let i in clients) {
|
||||
sendPlayerGUIColours(clients[i]);
|
||||
}
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
//messageAdminAction(`${getPlayerName(client)} ${getInlineChatColourByName("orange")}set the server ${getBoolRedGreenInlineColour(fallingSnow)}${getOnOffFromBool(fallingSnow)} ${getInlineChatColourByName("orange")}and ground snow ${getBoolRedGreenInlineColour(groundSnow)}${getOnOffFromBool(groundSnow)}`);
|
||||
//updateServerRules();
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} has set the server GUI colours to ${colourRed}, ${colourGreen}, ${colourBlue}`);
|
||||
//updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -571,8 +632,8 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
|
||||
updatePlayerShowLogoState(null, getServerConfig().useLogo);
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned the server logo image ${getBoolRedGreenInlineColour(doesServerHaveServerLogoEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().useLogo))}`);
|
||||
updateServerRules();
|
||||
announceAdminAction(`ServerLogoSet`, `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().useLogo)}${toUpperCase(getOnOffFromBool(getServerConfig().useLogo))}`);
|
||||
updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -587,11 +648,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerJobBlipsCommand(command, params, client) {
|
||||
function toggleServerJobBlipsCommand(command, params, client) {
|
||||
getServerConfig().createJobBlips = !getServerConfig().createJobBlips;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveJobBlipsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createJobBlips))} {MAINCOLOUR}all job blips`);
|
||||
announceAdminAction("ServerJobBlipsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createJobBlips)}${toUpperCase(getOnOffFromBool(getServerConfig().createJobBlips))}{MAINCOLOUR}`);
|
||||
resetAllJobBlips();
|
||||
return true;
|
||||
}
|
||||
@@ -607,11 +668,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerJobPickupsCommand(command, params, client) {
|
||||
function toggleServerJobPickupsCommand(command, params, client) {
|
||||
getServerConfig().createJobPickups = !getServerConfig().createJobPickups;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveJobPickupsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createJobPickups))} {MAINCOLOUR}all job pickups`);
|
||||
announceAdminAction("ServerJobPickupsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createJobPickups)}${toUpperCase(getOnOffFromBool(getServerConfig().createJobPickups))}{MAINCOLOUR}`);
|
||||
resetAllJobPickups();
|
||||
return true;
|
||||
}
|
||||
@@ -627,11 +688,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerBusinessBlipsCommand(command, params, client) {
|
||||
function toggleServerBusinessBlipsCommand(command, params, client) {
|
||||
getServerConfig().createBusinessBlips = !getServerConfig().createBusinessBlips;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveBusinessBlipsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createBusinessBlips))} {MAINCOLOUR}all business blips`);
|
||||
announceAdminAction("ServerBusinessBlipsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createBusinessBlips)}${toUpperCase(getOnOffFromBool(getServerConfig().createBusinessBlips))}{MAINCOLOUR}`);
|
||||
resetAllBusinessBlips();
|
||||
return true;
|
||||
}
|
||||
@@ -647,11 +708,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerBusinessPickupsCommand(command, params, client) {
|
||||
function toggleServerBusinessPickupsCommand(command, params, client) {
|
||||
getServerConfig().createBusinessPickups = !getServerConfig().createBusinessPickups;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveBusinessPickupsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createBusinessPickups))} {MAINCOLOUR}all business pickups`);
|
||||
announceAdminAction("ServerBusinessPickupsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createBusinessPickups)}${toUpperCase(getOnOffFromBool(getServerConfig().createBusinessPickups))}{MAINCOLOUR}`);
|
||||
resetAllBusinessPickups();
|
||||
return true;
|
||||
}
|
||||
@@ -667,11 +728,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerHouseBlipsCommand(command, params, client) {
|
||||
function toggleServerHouseBlipsCommand(command, params, client) {
|
||||
getServerConfig().createHouseBlips = !getServerConfig().createHouseBlips;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveHouseBlipsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createHouseBlips))} {MAINCOLOUR}all house blips`);
|
||||
announceAdminAction("ServerHouseBlipsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createHouseBlips)}${toUpperCase(getOnOffFromBool(getServerConfig().createHouseBlips))}{MAINCOLOUR}`);
|
||||
resetAllHouseBlips();
|
||||
return true;
|
||||
}
|
||||
@@ -687,11 +748,11 @@ function toggleServerLogoCommand(command, params, client) {
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function toggleServerHousePickupsCommand(command, params, client) {
|
||||
function toggleServerHousePickupsCommand(command, params, client) {
|
||||
getServerConfig().createHousePickups = !getServerConfig().createHousePickups;
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned ${getBoolRedGreenInlineColour(doesServerHaveHousePickupsEnabled())}${toUpperCase(getOnOffFromBool(getServerConfig().createHousePickups))} {MAINCOLOUR}all house pickups`);
|
||||
announceAdminAction("ServerHousePickupsSet", `{adminOrange}${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().createHousePickups)}${toUpperCase(getOnOffFromBool(getServerConfig().createHousePickups))}{MAINCOLOUR}`);
|
||||
resetAllHousePickups();
|
||||
return true;
|
||||
}
|
||||
@@ -712,8 +773,8 @@ function toggleServerGUICommand(command, params, client) {
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned GUI ${toLowerCase(getOnOffFromBool(doesServerHaveGUIEnabled()))} for this server`);
|
||||
updateServerRules();
|
||||
announceAdminAction(`ServerGUISet`, `${getPlayerName(client)}{MAINCOLOUR}`, `${getBoolRedGreenInlineColour(getServerConfig().useGUI)}${toUpperCase(getOnOffFromBool(getServerConfig().useGUI))}{MAINCOLOUR}`);
|
||||
updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -733,9 +794,10 @@ function toggleServerUseRealWorldTimeCommand(command, params, client) {
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}turned real-world time ${getServerConfig().useRealTime} for this server (GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)})`);
|
||||
//announceAdminAction(`${getPlayerName(client)}{MAINCOLOUR} turned real-world time ${getServerConfig().useRealTime} for this server (GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)})`);
|
||||
updateServerGameTime();
|
||||
updateServerRules();
|
||||
updateServerRules();
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} turned real-world time ${getOnOffFromBool(getServerConfig().useRealTime)} for this server (GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)})`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -751,17 +813,19 @@ function toggleServerUseRealWorldTimeCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function setServerRealWorldTimeZoneCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
getServerConfig().realTimeZone = toInteger(params);
|
||||
getServerConfig().realTimeZone = toInteger(params);
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
messageAdminAction(`${getPlayerName(client)} {MAINCOLOUR}set the time zone for in-game's real-world time to GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)}`);
|
||||
//announceAdminAction(`${getPlayerName(client)} {MAINCOLOUR}set the time zone for in-game's real-world time to GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)}`);
|
||||
updateServerGameTime();
|
||||
updateServerRules();
|
||||
updateServerRules();
|
||||
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} set the timezone for in-game real-world time to GMT ${addPositiveNegativeSymbol(getServerConfig().realTimeZone)}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -781,7 +845,8 @@ function reloadServerConfigurationCommand(command, params, client) {
|
||||
applyConfigToServer(serverConfig);
|
||||
updateServerRules();
|
||||
|
||||
messagePlayerSuccess(client, `You reloaded the server configuration!`);
|
||||
messagePlayerSuccess(client, `You reloaded the server configuration!`);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} reloaded the server config`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -797,8 +862,8 @@ function reloadServerConfigurationCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function reloadEmailConfigurationCommand(command, params, client) {
|
||||
emailConfig = loadEmailConfiguration();
|
||||
messagePlayerSuccess(client, `You reloaded the email configuration!`);
|
||||
getGlobalConfig().email = loadEmailConfig();
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} reloaded the email config`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -814,19 +879,43 @@ function reloadEmailConfigurationCommand(command, params, client) {
|
||||
*
|
||||
*/
|
||||
function reloadDatabaseConfigurationCommand(command, params, client) {
|
||||
if(databaseConfig.usePersistentConnection && isDatabaseConnected(persistentDatabaseConnection)) {
|
||||
console.warn(`[VRR.Database] Closing persistent database connection`);
|
||||
if (getDatabaseConfig().usePersistentConnection && isDatabaseConnected(persistentDatabaseConnection)) {
|
||||
logToConsole(LOG_WARN, `[VRR.Database] Closing persistent database connection`);
|
||||
persistentDatabaseConnection.close();
|
||||
persistentDatabaseConnection = null;
|
||||
}
|
||||
databaseEnabled = false;
|
||||
databaseConfig = loadEmailConfig();
|
||||
messagePlayerSuccess(client, `You reloaded the database configuration!`);
|
||||
getGlobalConfig().database = loadDatabaseConfig();
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} reloaded the database config`);
|
||||
databaseEnabled = true;
|
||||
if(databaseConfig.usePersistentConnection) {
|
||||
if (getDatabaseConfig().usePersistentConnection) {
|
||||
connectToDatabase();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* This is a command handler function.
|
||||
*
|
||||
* @param {string} command - The command name used by the player
|
||||
* @param {string} params - The parameters/args string used with the command by the player
|
||||
* @param {Client} client - The client/player that used the command
|
||||
* @return {bool} Whether or not the command was successful
|
||||
*
|
||||
*/
|
||||
function setServerNameTagDistanceCommand(command, params, client) {
|
||||
if (areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
getServerConfig().nameTagDistance = toFloat(params);
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
sendNameTagDistanceToClient(null, getServerConfig().nameTagDistance);
|
||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} set the name tag distance to ${getServerConfig().nameTagDistance}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -839,8 +928,9 @@ function getServerIntroMusicURL() {
|
||||
// ===========================================================================
|
||||
|
||||
function loadLocaleConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading locale configuration");
|
||||
let localeConfig = JSON.parse(loadTextFile(`config/locale.json`));
|
||||
if(localeConfig != null) {
|
||||
if (localeConfig != null) {
|
||||
return localeConfig;
|
||||
}
|
||||
}
|
||||
@@ -848,8 +938,9 @@ function loadLocaleConfig() {
|
||||
// ===========================================================================
|
||||
|
||||
function loadEconomyConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading economy configuration");
|
||||
let economyConfig = JSON.parse(loadTextFile(`config/economy.json`));
|
||||
if(economyConfig != null) {
|
||||
if (economyConfig != null) {
|
||||
return economyConfig;
|
||||
}
|
||||
}
|
||||
@@ -857,14 +948,59 @@ function loadEconomyConfig() {
|
||||
// ===========================================================================
|
||||
|
||||
function loadAccentConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading accents configuration");
|
||||
let accentConfig = JSON.parse(loadTextFile(`config/accents.json`));
|
||||
if(accentConfig != null) {
|
||||
if (accentConfig != null) {
|
||||
return accentConfig;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadDiscordConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading discord configuration");
|
||||
let discordConfig = JSON.parse(loadTextFile(`config/discord.json`));
|
||||
if (discordConfig != null) {
|
||||
return discordConfig;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadDatabaseConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading database configuration");
|
||||
let databaseConfig = JSON.parse(loadTextFile("config/database.json"));
|
||||
if (databaseConfig != null) {
|
||||
return databaseConfig;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadKeyBindConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading keybind configuration");
|
||||
let keyBindConfig = JSON.parse(loadTextFile("config/keybind.json"));
|
||||
if (keyBindConfig != null) {
|
||||
return keyBindConfig;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadEmailConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading email configuration");
|
||||
let emailConfig = JSON.parse(loadTextFile("config/email.json"));
|
||||
if (emailConfig != null) {
|
||||
return emailConfig;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesServerHaveGUIEnabled() {
|
||||
return getServerConfig().useGUI;
|
||||
}
|
||||
@@ -901,7 +1037,7 @@ function doesServerHaveJobPickupsEnabled() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesServerHaveBusinesBlipsEnabled() {
|
||||
function doesServerHaveBusinessBlipsEnabled() {
|
||||
return getServerConfig().createBusinessBlips;
|
||||
}
|
||||
|
||||
@@ -930,3 +1066,21 @@ function doesServerHaveGroundSnowEnabled() {
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getDatabaseConfig() {
|
||||
return getGlobalConfig().database;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function loadServerConfig() {
|
||||
logToConsole(LOG_DEBUG, "[VRR.Config] Loading server configuration");
|
||||
try {
|
||||
serverConfig = loadServerConfigFromGameAndPort(getGame(), getServerPort());
|
||||
} catch (error) {
|
||||
logToConsole(LOG_ERROR, `[VRR.Config] Could not load server configuration for game ${getGame()} and port ${getServerPort}`);
|
||||
thisResource.stop();
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -7,52 +7,69 @@
|
||||
// TYPE: Server (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let scriptVersion = "1.0";
|
||||
let scriptVersion = "1.1";
|
||||
let serverStartTime = 0;
|
||||
let logLevel = LOG_INFO;
|
||||
let logLevel = LOG_INFO|LOG_DEBUG|LOG_VERBOSE; // LOG_ERROR|LOG_WARN;
|
||||
|
||||
let playerResourceReady = new Array(server.maxClients).fill(false);
|
||||
let playerResourceStarted = new Array(server.maxClients).fill(false);
|
||||
let playerInitialized = new Array(server.maxClients).fill(false);
|
||||
let playerGUI = new Array(server.maxClients).fill(false);
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @typedef {Object} ServerData
|
||||
* @property {Array.<VehicleData>} vehicles
|
||||
* @property {Array.<ClientData>} clients
|
||||
* @property {Array.<BusinessData>} businesses
|
||||
* @property {Array.<HouseData>} houses
|
||||
* @property {Array.<HouseData>} commands
|
||||
* @property {Array.<ItemData>} items
|
||||
* @property {Array.<ItemTypeData>} itemTypes
|
||||
* @property {Array.<ClanData>} clans
|
||||
* @property {Array} localeStrings
|
||||
* @property {Array.<NPCData>} npcs
|
||||
* @property {Array.<RaceData>} races
|
||||
* @property {Array.<JobData>} jobs
|
||||
* @property {Array.<Gates>} gates
|
||||
* @property {Array} groundItemCache
|
||||
* @property {Array} groundPlantCache
|
||||
* @property {Array} purchasingVehicleCache
|
||||
* @property {Array} rentingVehicleCache
|
||||
*/
|
||||
let serverData = {
|
||||
vehicles: [],
|
||||
clients: new Array(128),
|
||||
businesses: [],
|
||||
houses: [],
|
||||
commands: {},
|
||||
groundItemCache: [],
|
||||
groundPlantCache: [],
|
||||
items: [],
|
||||
itemTypes: [],
|
||||
clans: [],
|
||||
antiCheat: {
|
||||
//whiteListedGameScripts: [],
|
||||
//blackListedGameScripts: [],
|
||||
},
|
||||
localeStrings: {},
|
||||
cachedTranslations: [],
|
||||
cachedTranslationFrom: [],
|
||||
//triggers: [],
|
||||
npcs: [],
|
||||
races: [],
|
||||
jobs: [],
|
||||
gates: [],
|
||||
groundItemCache: [],
|
||||
groundPlantCache: [],
|
||||
purchasingVehicleCache: [],
|
||||
rentingVehicleCache: [],
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
// Pre-cache allowed skins
|
||||
let allowedSkins = getAllowedSkins(getGame());
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function initServerData() {
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
*
|
||||
* @return {ServerData}
|
||||
*
|
||||
*/
|
||||
function getServerData() {
|
||||
return serverData;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getModNatives() {
|
||||
return modNatives;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -15,9 +15,60 @@ let persistentDatabaseConnection = null;
|
||||
|
||||
function initDatabaseScript() {
|
||||
logToConsole(LOG_INFO, "[VRR.Database]: Initializing database script ...");
|
||||
databaseConfig = loadDatabaseConfiguration();
|
||||
logToConsole(LOG_INFO, "[VRR.Database]: Database script initialized successfully!");
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createDatabaseInsertQuery(tableName, data) {
|
||||
let fields = [];
|
||||
let values = [];
|
||||
|
||||
for(let i in data) {
|
||||
if(data[i][1] != "undefined" && data[i][1] != NaN && data[i][0] != 'NaN') {
|
||||
if(data[i][1] != "undefined" && data[i][1] != NaN && data[i][1] != 'NaN') {
|
||||
fields.push(data[i][0]);
|
||||
|
||||
if(typeof data[i][1] == "string") {
|
||||
if(data[i][1] == "{UNIXTIMESTAMP}") {
|
||||
values.push("UNIX_TIMESTAMP()");
|
||||
} else {
|
||||
values.push(`'${data[i][1]}'`);
|
||||
}
|
||||
} else {
|
||||
values.push(data[i][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let queryString = `INSERT INTO ${tableName} (${fields.join(", ")}) VALUES (${values.join(", ")})`;
|
||||
return queryString;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createDatabaseUpdateQuery(tableName, data, whereClause) {
|
||||
let values = [];
|
||||
|
||||
for(let i in data) {
|
||||
if(data[i][0] != "undefined" && data[i][0] != NaN && data[i][0] != 'NaN') {
|
||||
if(data[i][1] != "undefined" && data[i][1] != NaN && data[i][1] != 'NaN') {
|
||||
if(typeof data[i][1] == "string") {
|
||||
if(data[i][1] == "{UNIXTIMESTAMP}") {
|
||||
values.push(`${data[i][0]}=UNIX_TIMESTAMP()`);
|
||||
} else {
|
||||
values.push(`${data[i][0]}='${data[i][1]}'`);
|
||||
}
|
||||
} else {
|
||||
values.push(`${data[i][0]}=${data[i][1]}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let queryString = `UPDATE ${tableName} SET ${values.join(", ")} WHERE ${whereClause}`;
|
||||
return queryString;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||