Compare commits
24 Commits
mafiamp
...
separate-r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1b8b9524f | ||
|
|
48c9af3f52 | ||
|
|
e5375d09d7 | ||
|
|
3e4108f1ea | ||
|
|
04bd7609e1 | ||
|
|
a4fdbd1398 | ||
|
|
736b7b1e69 | ||
|
|
cb48f199c4 | ||
|
|
cd55f8dcb7 | ||
|
|
b95ca71a90 | ||
|
|
dbd8babf82 | ||
|
|
4082357026 | ||
|
|
d583d17ef8 | ||
|
|
5af8770b9c | ||
|
|
7a8bdcf0bd | ||
|
|
c9ea8fe444 | ||
|
|
93ead8d123 | ||
|
|
f14c51dba4 | ||
|
|
31dbde51bd | ||
|
|
fe17137940 | ||
|
|
cd322adeaa | ||
|
|
5f208c424b | ||
|
|
4f47b8f483 | ||
|
|
859ae28656 |
@@ -1,112 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"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,117 +0,0 @@
|
|||||||
{
|
|
||||||
"apiEmail": "example@example.com",
|
|
||||||
"defaultLanguageId": 0,
|
|
||||||
"translateURL": "http://api.mymemory.translated.net/get?de={3}&q={0}&langpair={1}|{2}",
|
|
||||||
"locales": [
|
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 289 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 269 KiB |
|
Before Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
97
meta.xml
@@ -24,7 +24,6 @@
|
|||||||
<script src="scripts/server/business.js" type="server" language="javascript" />
|
<script src="scripts/server/business.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/chat.js" type="server" language="javascript" />
|
<script src="scripts/server/chat.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/clan.js" type="server" language="javascript" />
|
<script src="scripts/server/clan.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/client.js" type="server" language="javascript" />
|
|
||||||
<script src="scripts/server/crime.js" type="server" language="javascript" />
|
<script src="scripts/server/crime.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/database.js" type="server" language="javascript" />
|
<script src="scripts/server/database.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/developer.js" type="server" language="javascript" />
|
<script src="scripts/server/developer.js" type="server" language="javascript" />
|
||||||
@@ -47,6 +46,7 @@
|
|||||||
<script src="scripts/server/messaging.js" type="server" language="javascript" />
|
<script src="scripts/server/messaging.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/misc.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/npc.js" type="server" language="javascript" />
|
||||||
|
<script src="scripts/server/netevents.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/race.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/security.js" type="server" language="javascript" />
|
||||||
@@ -79,121 +79,28 @@
|
|||||||
<script src="scripts/server/item/rope.js" type="server" language="javascript" />
|
<script src="scripts/server/item/rope.js" type="server" language="javascript" />
|
||||||
<script src="scripts/server/item/tazer.js" type="server" language="javascript" />
|
<script src="scripts/server/item/tazer.js" type="server" language="javascript" />
|
||||||
|
|
||||||
<!-- Extra Client Files -->
|
|
||||||
<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/server-logo.png" />
|
|
||||||
|
|
||||||
<!-- GUI -->
|
|
||||||
<script src="scripts/client/gui/2fa.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/bizmgr.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/changepass.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/charselect.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/clanmgr.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/error.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/housemgr.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/info.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/login.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/list.js" type="client" language="javascript" />
|
|
||||||
<script src="scripts/client/gui/newchar.js" type="client" language="javascript" />
|
|
||||||
<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 -->
|
<!-- Client Scripts -->
|
||||||
<script src="scripts/client/afk.js" type="client" language="javascript" />
|
<script src="scripts/client/afk.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/animation.js" type="client" language="javascript" />
|
<script src="scripts/client/animation.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/business.js" type="client" language="javascript" />
|
<script src="scripts/client/business.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/chatbox.js" type="client" language="javascript" />
|
<script src="scripts/client/chatbox.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/event.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/gps.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/house.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/item.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/job.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/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/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/main.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/messaging.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/npc.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/radio.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/netevents.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/skin-select.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/sync.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/utilities.js" type="client" language="javascript" />
|
||||||
<script src="scripts/client/vehicle.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" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/mexui.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Native.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Utility.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entity/Transition.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entity/StyleableEntity.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entity/Component.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Component/Control.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Component/Entry.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Component/Event.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Component/Window.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entity/ControlAxis.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entity/ControlWithEntries.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/DropDownItem.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/GridColumn.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/GridRow.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/ListRow.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/Tab.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Entry/TreeRow.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Button.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/CheckBox.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/DropDown.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Grid.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Image.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Line.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/List.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/ProgressBar.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/RadioButton.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Rectangle.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/ScrollBar.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Slider.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/TabPanel.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Text.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/TextInput.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Tree.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Character.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Characters.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Day.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Date.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Digit.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Digits.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Hour.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Integer.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Letter.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/LetterDigit.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Letters.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/LettersDigits.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Minute.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Month.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Number.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Password.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/PositiveInteger.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/PositiveNumber.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/RangedInteger.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/RangedNumber.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Second.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/TextArea.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Time.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Week.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/WeekDay.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Control/Year.js" />
|
|
||||||
<script language="javascript" type="client" src="third-party/mexui/Core/Init.js" />
|
|
||||||
|
|
||||||
<!-- Startup -->
|
<!-- Startup -->
|
||||||
<script src="scripts/server/startup.js" type="server" language="javascript" />
|
<script src="scripts/server/startup.js" type="server" language="javascript" />
|
||||||
<script src="scripts/client/startup.js" type="client" language="javascript" />
|
<script src="scripts/client/startup.js" type="client" language="javascript" />
|
||||||
|
|||||||
@@ -109,8 +109,6 @@ function onProcess(event, deltaTime) {
|
|||||||
function onKeyUp(event, keyCode, scanCode, keyModifiers) {
|
function onKeyUp(event, keyCode, scanCode, keyModifiers) {
|
||||||
processSkinSelectKeyPress(keyCode);
|
processSkinSelectKeyPress(keyCode);
|
||||||
//processKeyDuringAnimation();
|
//processKeyDuringAnimation();
|
||||||
processGUIKeyPress(keyCode);
|
|
||||||
processToggleGUIKeyPress(keyCode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -125,12 +123,8 @@ function onDrawnHUD(event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
processSmallGameMessageRendering();
|
processSmallGameMessageRendering();
|
||||||
processScoreBoardRendering();
|
|
||||||
processLabelRendering();
|
|
||||||
processLogoRendering();
|
|
||||||
processItemActionRendering();
|
processItemActionRendering();
|
||||||
processSkinSelectRendering();
|
processSkinSelectRendering();
|
||||||
processNameTagRendering();
|
|
||||||
processInteriorLightsRendering();
|
processInteriorLightsRendering();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +145,7 @@ function onElementStreamIn(event, element) {
|
|||||||
|
|
||||||
function onLocalPlayerExitedVehicle(event, vehicle, seat) {
|
function onLocalPlayerExitedVehicle(event, vehicle, seat) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited vehicle`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited vehicle`);
|
||||||
sendNetworkEventToServer("vrr.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
sendNetworkEventToServer("agrp.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||||
|
|
||||||
if (inVehicleSeat) {
|
if (inVehicleSeat) {
|
||||||
parkedVehiclePosition = false;
|
parkedVehiclePosition = false;
|
||||||
@@ -164,9 +158,9 @@ function onLocalPlayerExitedVehicle(event, vehicle, seat) {
|
|||||||
function onLocalPlayerEnteredVehicle(event, vehicle, seat) {
|
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("agrp.onPlayerEnterVehicle", getVehicleForNetworkEvent(vehicle), seat);
|
||||||
|
|
||||||
if (areServerElementsSupported()) {
|
//if (areServerElementsSupported()) {
|
||||||
//if(inVehicleSeat == 0) {
|
//if(inVehicleSeat == 0) {
|
||||||
//setVehicleEngine(vehicle, false);
|
//setVehicleEngine(vehicle, false);
|
||||||
//if(!inVehicle.engine) {
|
//if(!inVehicle.engine) {
|
||||||
@@ -174,7 +168,7 @@ function onLocalPlayerEnteredVehicle(event, vehicle, seat) {
|
|||||||
// parkedVehicleHeading = inVehicle.heading;
|
// parkedVehicleHeading = inVehicle.heading;
|
||||||
//}
|
//}
|
||||||
//}
|
//}
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -188,7 +182,7 @@ function onPedInflictDamage(event, damagedEntity, damagerEntity, weaponId, healt
|
|||||||
if (damagedEntity == localPlayer) {
|
if (damagedEntity == localPlayer) {
|
||||||
//if(!weaponDamageEnabled[damagerEntity.name]) {
|
//if(!weaponDamageEnabled[damagerEntity.name]) {
|
||||||
preventDefaultEventAction(event);
|
preventDefaultEventAction(event);
|
||||||
sendNetworkEventToServer("vrr.weaponDamage", damagerEntity.name, weaponId, pedPiece, healthLoss);
|
sendNetworkEventToServer("agrp.weaponDamage", damagerEntity.name, weaponId, pedPiece, healthLoss);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,283 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: gui.js
|
|
||||||
// DESC: Provides GUI functionality and styles (using MexUI)
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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/asshat-logo.png";
|
|
||||||
|
|
||||||
let primaryColour = [200, 200, 200];
|
|
||||||
let secondaryColour = [16, 16, 16];
|
|
||||||
let primaryTextColour = [0, 0, 0];
|
|
||||||
let focusedColour = [200, 200, 200];
|
|
||||||
let invalidValueColour = [200, 200, 200];
|
|
||||||
|
|
||||||
let focusedColourOffset = 50;
|
|
||||||
|
|
||||||
let windowAlpha = 200;
|
|
||||||
let windowTitleAlpha = 180;
|
|
||||||
let buttonAlpha = 180;
|
|
||||||
let textInputAlpha = 180;
|
|
||||||
|
|
||||||
let guiReady = false;
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let characterData = [];
|
|
||||||
let currentCharacter = 0;
|
|
||||||
|
|
||||||
let inCharacterSelectScreen = false;
|
|
||||||
let creatingCharacter = false;
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initGUIScript() {
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.GUI]: Initializing GUI script ...");
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.GUI]: GUI script initialized!");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Initializing GUI ...`);
|
|
||||||
|
|
||||||
initLoginGUI();
|
|
||||||
initRegisterGUI();
|
|
||||||
initNewCharacterGUI();
|
|
||||||
initCharacterSelectGUI();
|
|
||||||
initInfoDialogGUI();
|
|
||||||
initErrorDialogGUI();
|
|
||||||
initYesNoDialogGUI();
|
|
||||||
initTwoFactorAuthenticationGUI();
|
|
||||||
initListGUI();
|
|
||||||
initResetPasswordGUI();
|
|
||||||
initChangePasswordGUI();
|
|
||||||
initLocaleChooserGUI();
|
|
||||||
|
|
||||||
closeAllWindows();
|
|
||||||
guiReady = true;
|
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] All GUI created successfully!`);
|
|
||||||
|
|
||||||
loadLocaleConfig();
|
|
||||||
loadAllLocaleStrings();
|
|
||||||
|
|
||||||
resetGUIStrings();
|
|
||||||
resetLocaleChooserOptions();
|
|
||||||
|
|
||||||
sendNetworkEventToServer("vrr.guiReady", true);
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function closeAllWindows() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Closing all GUI windows`);
|
|
||||||
infoDialog.window.shown = false;
|
|
||||||
yesNoDialog.window.shown = false;
|
|
||||||
errorDialog.window.shown = false;
|
|
||||||
register.window.shown = false;
|
|
||||||
login.window.shown = false;
|
|
||||||
newCharacter.window.shown = false;
|
|
||||||
characterSelect.window.shown = false;
|
|
||||||
twoFactorAuth.window.shown = false;
|
|
||||||
listDialog.window.shown = false;
|
|
||||||
passwordReset.window.shown = false;
|
|
||||||
passwordChange.window.shown = false;
|
|
||||||
localeChooser.window.shown = false;
|
|
||||||
|
|
||||||
mexui.setInput(false);
|
|
||||||
mexui.focusedControl = false;
|
|
||||||
|
|
||||||
guiSubmitKey = false;
|
|
||||||
guiLeftKey = false;
|
|
||||||
guiRightKey = false;
|
|
||||||
guiUpKey = false;
|
|
||||||
guiDownKey = false;
|
|
||||||
|
|
||||||
setChatWindowEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function isAnyGUIActive() {
|
|
||||||
if (!guiReady) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (infoDialog.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (yesNoDialog.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errorDialog.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (register.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (login.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newCharacter.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (characterSelect.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (twoFactorAuth.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (listDialog.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (passwordReset.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (passwordChange.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (localeChooser.window.shown == true) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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];
|
|
||||||
|
|
||||||
initGUI();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function hideAllGUI() {
|
|
||||||
closeAllWindows();
|
|
||||||
setChatWindowEnabled(true);
|
|
||||||
guiSubmitKey = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function processGUIKeyPress(keyCode) {
|
|
||||||
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) {
|
|
||||||
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")) {
|
|
||||||
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")) {
|
|
||||||
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")) {
|
|
||||||
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")) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Key press is up (${guiUpKey})`);
|
|
||||||
if (guiUpKey != false) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Calling up key function`);
|
|
||||||
guiUpKey.call();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function processToggleGUIKeyPress(keyCode) {
|
|
||||||
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"));
|
|
||||||
}
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: 2fa.js
|
|
||||||
// DESC: Provides two factor authentication GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let twoFactorAuth = {
|
|
||||||
window: null,
|
|
||||||
logoImage: null,
|
|
||||||
qrCode: null,
|
|
||||||
messageLabel: null,
|
|
||||||
codeLabel: null,
|
|
||||||
codeInput: null,
|
|
||||||
submitButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initTwoFactorAuthenticationGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating two factor auth GUI ...`);
|
|
||||||
twoFactorAuth.window = mexui.window(game.width/2-150, game.height/2-129, 300, 258, 'LOGIN', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
transitionTime: 500,
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
twoFactorAuth.window.titleBarIconSize = toVector2(0,0);
|
|
||||||
twoFactorAuth.window.titleBarHeight = 0;
|
|
||||||
|
|
||||||
twoFactorAuth.qrCode = twoFactorAuth.window.image(100, 20, 100, 100, mainLogoPath, {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
twoFactorAuth.codeLabel = twoFactorAuth.window.text(20, 135, 260, 20, 'Please enter the code sent to your email!', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
twoFactorAuth.codeInput = twoFactorAuth.window.textInput(20, 170, 260, 25, '', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(0, 0, 0, 120),
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], textInputAlpha),
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
caret: {
|
|
||||||
lineColour: toColour(255, 255, 255, 255),
|
|
||||||
},
|
|
||||||
placeholder: {
|
|
||||||
textColour: toColour(200, 200, 200, 150),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
twoFactorAuth.codeInput.placeholder = "Code";
|
|
||||||
|
|
||||||
twoFactorAuth.submitButton = twoFactorAuth.window.button(20, 205, 260, 30, 'SUBMIT', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
textColour: toColour(0, 0, 0, 255),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, checkTwoFactorAuth);
|
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created two factor auth GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showTwoFactorAuthGUI() {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing two-factor authentication window`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
twoFactorAuth.window.shown = true;
|
|
||||||
mexui.focusedControl = twoFactorAuth.codeInput;
|
|
||||||
guiSubmitKey = checkTwoFactorAuth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function twoFactorAuthFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports two-factor authentication failed. Reason: ${errorMessage}`);
|
|
||||||
twoFactorAuth.messageLabel.text = errorMessage;
|
|
||||||
twoFactorAuth.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
twoFactorAuth.codeInput.text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function twoFactorAuthSuccess() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports two-factor authentication was successful`);
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkTwoFactorAuth() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking two-factor authentication with server ...`);
|
|
||||||
sendNetworkEventToServer("vrr.2fa", twoFactorAuth.codeInput.lines[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: bizmgr.js
|
|
||||||
// DESC: Provides business manager GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: changepass.js
|
|
||||||
// DESC: Provides change password GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let passwordChange = {
|
|
||||||
window: null,
|
|
||||||
logoImage: null,
|
|
||||||
messageLabel: null,
|
|
||||||
passwordInput: null,
|
|
||||||
confirmPasswordInput: null,
|
|
||||||
submitButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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', {
|
|
||||||
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),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
passwordChange.window.titleBarIconSize = toVector2(0, 0);
|
|
||||||
passwordChange.window.titleBarHeight = 0;
|
|
||||||
passwordChange.window.titleBarShown = false;
|
|
||||||
|
|
||||||
passwordChange.window.image(100, 20, 75, 75, mainLogoPath, {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
passwordChange.messageLabel = passwordChange.window.text(20, 95, 260, 20, 'Enter a new password', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
passwordChange.passwordInput = passwordChange.window.textInput(20, 130, 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,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
passwordChange.passwordInput.masked = true;
|
|
||||||
passwordChange.passwordInput.placeholder = "Password";
|
|
||||||
|
|
||||||
passwordChange.confirmPasswordInput = passwordChange.window.textInput(20, 160, 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,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
passwordChange.confirmPasswordInput.masked = true;
|
|
||||||
passwordChange.confirmPasswordInput.placeholder = "Confirm password";
|
|
||||||
|
|
||||||
passwordChange.submitButton = passwordChange.window.button(20, 195, 260, 30, 'CHANGE PASSWORD', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
textColour: toColour(255, 255, 255, 255),
|
|
||||||
textSize: 12.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, checkChangePassword);
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created change password GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function passwordChangeFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports change password failed. Reason: ${errorMessage}`);
|
|
||||||
passwordChange.messageLabel.text = errorMessage;
|
|
||||||
passwordChange.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
passwordChange.passwordInput.text = "";
|
|
||||||
passwordChange.confirmPasswordInput.text = "";
|
|
||||||
passwordChange.verificationCodeInput.text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkChangePassword() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking password change with server ...`);
|
|
||||||
sendNetworkEventToServer("vrr.checkChangePassword", passwordChange.passwordInput.lines[0], passwordChange.confirmPasswordInput.lines[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function passwordChangeSuccess() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports password change was successful`);
|
|
||||||
guiSubmitKey = false;
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,248 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: charselect.js
|
|
||||||
// DESC: Provides character select GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let characterSelect = {
|
|
||||||
window: null,
|
|
||||||
skinImage: null,
|
|
||||||
nameText: null,
|
|
||||||
cashText: null,
|
|
||||||
clanText: null,
|
|
||||||
lastPlayedText: null,
|
|
||||||
previousCharacterButton: null,
|
|
||||||
nextCharacterButton: null,
|
|
||||||
selectCharacterButton: null,
|
|
||||||
newCharacterButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
textSize: 12.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textColour: toColour(0, 0, 0, 255),
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
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.titleBarIconShown = false;
|
|
||||||
characterSelect.window.titleBarHeight = 30;
|
|
||||||
|
|
||||||
characterSelect.nameText = characterSelect.window.text(5, 40, 200, 25, 'Lastname, Firstname', {
|
|
||||||
main: {
|
|
||||||
textSize: 14.0,
|
|
||||||
textAlign: 0.0,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
characterSelect.cashText = characterSelect.window.text(5, 65, 200, 25, 'Cash: $0', {
|
|
||||||
main: {
|
|
||||||
textSize: 9.0,
|
|
||||||
textAlign: 0.0,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
characterSelect.clanText = characterSelect.window.text(5, 80, 200, 25, 'Clan: None', {
|
|
||||||
main: {
|
|
||||||
textSize: 9.0,
|
|
||||||
textAlign: 0.0,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
characterSelect.lastPlayedText = characterSelect.window.text(5, 95, 200, 25, 'Last Played: Never', {
|
|
||||||
main: {
|
|
||||||
textSize: 9.0,
|
|
||||||
textAlign: 0.0,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
characterSelect.selectCharacterButton = characterSelect.window.button(85, 130, 260, 25, 'PLAY', {
|
|
||||||
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], buttonAlpha),
|
|
||||||
}
|
|
||||||
}, selectThisCharacter);
|
|
||||||
|
|
||||||
characterSelect.newCharacterButton = characterSelect.window.button(5, 160, 420, 25, 'NEW CHARACTER', {
|
|
||||||
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], buttonAlpha),
|
|
||||||
}
|
|
||||||
}, showNewCharacter);
|
|
||||||
|
|
||||||
characterSelect.previousCharacterButton = characterSelect.window.button(5, 130, 75, 25, 'PREV', {
|
|
||||||
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], buttonAlpha),
|
|
||||||
}
|
|
||||||
}, selectPreviousCharacter);
|
|
||||||
|
|
||||||
characterSelect.nextCharacterButton = characterSelect.window.button(350, 130, 75, 25, 'NEXT', {
|
|
||||||
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], buttonAlpha),
|
|
||||||
}
|
|
||||||
}, selectNextCharacter);
|
|
||||||
|
|
||||||
characterSelect.skinImage = characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png", {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created character select GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, skinId) {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing character selection window`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
characterSelect.nameText.text = `${firstName} ${lastName}`;
|
|
||||||
characterSelect.cashText.text = `Money: $${cash}`;
|
|
||||||
characterSelect.clanText.text = `Clan: ${clan}`;
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showNewCharacter() {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing new character dialog window`);
|
|
||||||
showNewCharacterGUI();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function selectNextCharacter() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Requesting next character info from server for character select window`);
|
|
||||||
sendNetworkEventToServer("vrr.nextCharacter");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function selectPreviousCharacter() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Requesting previous character info from server for character select window`);
|
|
||||||
sendNetworkEventToServer("vrr.previousCharacter");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function selectThisCharacter() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Tell server the current shown character was selected in character select window`);
|
|
||||||
sendNetworkEventToServer("vrr.selectCharacter");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function switchCharacterSelectGUI(firstName, lastName, cash, clan, lastPlayed, skinId) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Updating character info with data from server`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
characterSelect.window.shown = false;
|
|
||||||
characterSelect.nameText.text = `${firstName} ${lastName}`;
|
|
||||||
characterSelect.cashText.text = `Money: $${cash}`;
|
|
||||||
characterSelect.clanText.text = `Clan: ${clan}`;
|
|
||||||
characterSelect.lastPlayedText.text = `Last Played: ${lastPlayed}`;
|
|
||||||
|
|
||||||
if(characterSelect.skinImage != null) {
|
|
||||||
characterSelect.skinImage.remove();
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function characterSelectSuccess() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports character selection was successful`);
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function getSkinImage(skinId, gameId = getGame()) {
|
|
||||||
if(skinId < 10) {
|
|
||||||
return `Skin_00${skinId}.png`;
|
|
||||||
} else if(skinId > 10 && skinId < 100) {
|
|
||||||
return `Skin_0${skinId}.png`;
|
|
||||||
} else if(skinId > 100) {
|
|
||||||
return `Skin_${skinId}.png`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: clanmgr.js
|
|
||||||
// DESC: Provides clan manager GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let clanManager = {
|
|
||||||
window: null,
|
|
||||||
generalTab: null,
|
|
||||||
ranksTab: null,
|
|
||||||
membersTab: null,
|
|
||||||
vehiclesTab: null,
|
|
||||||
businessesTab: null,
|
|
||||||
housesTab: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: error.js
|
|
||||||
// DESC: Provides error box GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let errorDialog = {
|
|
||||||
window: null,
|
|
||||||
messageLabel: null,
|
|
||||||
okayButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initErrorDialogGUI() {
|
|
||||||
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, 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 ...`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function closeErrorDialog() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Closing error dialog`);
|
|
||||||
errorDialog.window.shown = false;
|
|
||||||
mexui.setInput(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: housemgr.js
|
|
||||||
// DESC: Provides house manager GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Connected RP: 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button
|
|
||||||
{
|
|
||||||
font-family: "Roboto";
|
|
||||||
font-size: 14px;
|
|
||||||
border-style: solid;
|
|
||||||
border-colour: #0066AA;
|
|
||||||
border-radius: 2px;
|
|
||||||
color: #0066AA;
|
|
||||||
};
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<img src="server-logo.png" />
|
|
||||||
<input type="password" placeholder="Password" id="login_input_password" />
|
|
||||||
<button class="button" id="login_input_submit">LOGIN</button>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: info.js
|
|
||||||
// DESC: Provides info dialog box GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let infoDialog = {
|
|
||||||
window: null,
|
|
||||||
messageLabel: null,
|
|
||||||
okayButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initInfoDialogGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating info dialog GUI ...`);
|
|
||||||
infoDialog.window = mexui.window(getScreenWidth()/2-200, getScreenHeight()/2-70, 400, 140, 'Information', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
},
|
|
||||||
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),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
infoDialog.messageLabel = infoDialog.window.text(15, 50, 370, 20, 'Information Message', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
infoDialog.okayButton = infoDialog.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),
|
|
||||||
},
|
|
||||||
}, closeInfoDialog);
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created info dialog GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function closeInfoDialog() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Closing info dialog`);
|
|
||||||
infoDialog.window.shown = false;
|
|
||||||
mexui.setInput(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: list.js
|
|
||||||
// DESC: Provides simple list GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let listDialog = {
|
|
||||||
window: null,
|
|
||||||
messageLabel: null,
|
|
||||||
listGrid: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initListGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating list dialog GUI ...`);
|
|
||||||
listDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 500, 'List', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
textSize: 11.0,
|
|
||||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255),
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
textSize: 11.0,
|
|
||||||
textColour: toColour(255, 255, 255, 255),
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
|
||||||
hover: {
|
|
||||||
backgroundColour: toColour(205, 60, 60, windowTitleAlpha),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
listDialog.messageLabel = infoDialog.window.text(5, 5, 390, 20, 'Select one', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(255, 255, 255, 220),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
listDialog.listGrid = listDialog.window.grid(5, 25, 390, 450, {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
},
|
|
||||||
column: {
|
|
||||||
lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
|
||||||
},
|
|
||||||
header: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha-50),
|
|
||||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], windowTitleAlpha),
|
|
||||||
},
|
|
||||||
cell: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], windowTitleAlpha),
|
|
||||||
},
|
|
||||||
row: {
|
|
||||||
lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
|
|
||||||
hover: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 120),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created list dialog GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showListGUI() {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing login window`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
listDialog.window.shown = true;
|
|
||||||
guiSubmitKey = checkListDialogSelection;
|
|
||||||
guiUpKey = selectPreviousListItem;
|
|
||||||
guiDownKey = selectNextListItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkListDialogSelection() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function selectPreviousListItem() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function selectNextListItem() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,198 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: login.js
|
|
||||||
// DESC: Provides login GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let login = {
|
|
||||||
window: null,
|
|
||||||
logoImage: null,
|
|
||||||
messageLabel: null,
|
|
||||||
passwordInput: null,
|
|
||||||
loginButton: null,
|
|
||||||
forgotPasswordButton: null,
|
|
||||||
resetPasswordLabel: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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(getScreenWidth()/2-150, getScreenHeight()/2-135, 300, 275, 'LOGIN', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha),
|
|
||||||
transitionTime: 500,
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
login.window.titleBarIconSize = toVector2(0,0);
|
|
||||||
login.window.titleBarHeight = 0;
|
|
||||||
login.window.titleBarShown = false;
|
|
||||||
|
|
||||||
login.logoImage = login.window.image(100, 20, 100, 100, mainLogoPath, {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
login.messageLabel = login.window.text(20, 135, 260, 20, 'Please enter your password!', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
login.passwordInput = login.window.textInput(20, 170, 260, 25, '', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(0, 0, 0, 120),
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], textInputAlpha),
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
caret: {
|
|
||||||
lineColour: toColour(255, 255, 255, 255),
|
|
||||||
},
|
|
||||||
placeholder: {
|
|
||||||
textColour: toColour(200, 200, 200, 150),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
login.passwordInput.masked = true;
|
|
||||||
login.passwordInput.placeholder = "Password";
|
|
||||||
|
|
||||||
login.loginButton = login.window.button(20, 205, 260, 30, 'LOGIN', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
textColour: toColour(0, 0, 0, 255),
|
|
||||||
textSize: 12.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, checkLogin);
|
|
||||||
|
|
||||||
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),
|
|
||||||
textSize: 8.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, switchToPasswordResetGUI);
|
|
||||||
|
|
||||||
login.resetPasswordLabel = login.window.text(110, 240, 60, 15, 'Forgot your password?', {
|
|
||||||
main: {
|
|
||||||
textSize: 8.0,
|
|
||||||
textAlign: 1.0,
|
|
||||||
textColour: toColour(180, 180, 180, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created login GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showLoginGUI() {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing login window`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkLogin() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking login with server ...`);
|
|
||||||
sendNetworkEventToServer("vrr.checkLogin", login.passwordInput.lines[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function loginFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports login failed`);
|
|
||||||
login.messageLabel.text = errorMessage;
|
|
||||||
login.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
login.passwordInput.text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function loginSuccess() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports login was successful`);
|
|
||||||
guiSubmitKey = false;
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function switchToPasswordResetGUI() {
|
|
||||||
//closeAllWindows();
|
|
||||||
//logToConsole(LOG_DEBUG, `[VRR.GUI] Showing password reset dialog window`);
|
|
||||||
//showResetPasswordGUI();
|
|
||||||
sendNetworkEventToServer("vrr.checkResetPassword", "");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: newchar.js
|
|
||||||
// DESC: Provides new character creation GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let newCharacter = {
|
|
||||||
window: null,
|
|
||||||
messageLabel: null,
|
|
||||||
firstNameInput: null,
|
|
||||||
lastNameInput: null,
|
|
||||||
createCharacterButton: null,
|
|
||||||
mainLogoImage: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initNewCharacterGUI() {
|
|
||||||
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(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.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.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`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function newCharacterFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports new character creation failed. Reason: ${errorMessage}`);
|
|
||||||
newCharacter.messageLabel.text = errorMessage;
|
|
||||||
newCharacter.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
newCharacter.firstNameInput.text = "";
|
|
||||||
newCharacter.lastNameInput.text = "";
|
|
||||||
|
|
||||||
if(!newCharacter.window.shown) {
|
|
||||||
closeAllWindows();
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
setHUDEnabled(false);
|
|
||||||
newCharacter.window.shown = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkNewCharacter() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking new character with server ...`);
|
|
||||||
if(newCharacter.firstNameInput.lines[0].length < 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(newCharacter.lastNameInput.lines[0].length < 2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendNetworkEventToServer("vrr.checkNewCharacter",
|
|
||||||
newCharacter.firstNameInput.lines[0],
|
|
||||||
newCharacter.lastNameInput.lines[0],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showNewCharacterGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing new character window`);
|
|
||||||
closeAllWindows();
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
newCharacter.window.shown = true;
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: register.js
|
|
||||||
// DESC: Provides account registration GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let register = {
|
|
||||||
window: null,
|
|
||||||
logoImage: null,
|
|
||||||
messageLabel: null,
|
|
||||||
passwordInput: null,
|
|
||||||
confirmPasswordInput: null,
|
|
||||||
emailInput: null,
|
|
||||||
registerButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initRegisterGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating register GUI ...`);
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
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),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
register.window.titleBarIconSize = toVector2(0,0);
|
|
||||||
register.window.titleBarHeight = 0;
|
|
||||||
register.window.titleBarShown = false;
|
|
||||||
|
|
||||||
register.window.image(100, 20, 100, 100, mainLogoPath, {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
register.messageLabel = register.window.text(20, 125, 260, 20, 'Create an account', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
register.passwordInput = register.window.textInput(20, 150, 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,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
register.passwordInput.masked = true;
|
|
||||||
register.passwordInput.placeholder = "Password";
|
|
||||||
|
|
||||||
register.confirmPasswordInput = register.window.textInput(20, 180, 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,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
register.confirmPasswordInput.masked = true;
|
|
||||||
register.confirmPasswordInput.placeholder = "Confirm password";
|
|
||||||
|
|
||||||
register.emailInput = register.window.textInput(20, 210, 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,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
register.emailInput.placeholder = "Email";
|
|
||||||
|
|
||||||
register.registerButton = register.window.button(20, 245, 260, 30, 'CREATE ACCOUNT', {
|
|
||||||
main: {
|
|
||||||
backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
textColour: toColour(255, 255, 255, 255),
|
|
||||||
textSize: 12.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, checkRegistration);
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created register GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function registrationFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports registration failed. Reason: ${errorMessage}`);
|
|
||||||
register.messageLabel.text = errorMessage;
|
|
||||||
register.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
register.passwordInput.text = "";
|
|
||||||
register.confirmPasswordInput.text = "";
|
|
||||||
register.emailInput.text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function checkRegistration() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Checking registration with server ...`);
|
|
||||||
sendNetworkEventToServer("vrr.checkRegistration", register.passwordInput.lines[0], register.confirmPasswordInput.lines[0], register.emailInput.lines[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showRegistrationGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing registration window`);
|
|
||||||
closeAllWindows();
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function registrationSuccess() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports registration was successful`);
|
|
||||||
guiSubmitKey = false;
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,195 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: resetpass.js
|
|
||||||
// DESC: Provides password reset GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let passwordReset = {
|
|
||||||
window: null,
|
|
||||||
logoImage: null,
|
|
||||||
messageLabel: null,
|
|
||||||
emailInput: null,
|
|
||||||
resetPasswordButton: null,
|
|
||||||
backToLoginButton: null,
|
|
||||||
backToLoginLabel: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initResetPasswordGUI() {
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
icon: {
|
|
||||||
textSize: 0.0,
|
|
||||||
textColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
passwordReset.window.titleBarIconSize = toVector2(0, 0);
|
|
||||||
passwordReset.window.titleBarHeight = 0;
|
|
||||||
passwordReset.window.titleBarShown = false;
|
|
||||||
|
|
||||||
passwordReset.logoImage = passwordReset.window.image(100, 20, 100, 100, mainLogoPath, {
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
passwordReset.messageLabel = passwordReset.window.text(20, 135, 260, 20, 'Please confirm your email', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
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),
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
caret: {
|
|
||||||
lineColour: toColour(255, 255, 255, 255),
|
|
||||||
},
|
|
||||||
placeholder: {
|
|
||||||
textColour: toColour(200, 200, 200, 150),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
passwordReset.emailInput.placeholder = "Email";
|
|
||||||
|
|
||||||
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),
|
|
||||||
textSize: 12.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, checkResetPassword);
|
|
||||||
|
|
||||||
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),
|
|
||||||
textSize: 8.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha),
|
|
||||||
},
|
|
||||||
}, switchToLoginGUI);
|
|
||||||
|
|
||||||
passwordReset.backToLoginLabel = passwordReset.window.text(110, 240, 60, 15, 'Remember your password?', {
|
|
||||||
main: {
|
|
||||||
textSize: 8.0,
|
|
||||||
textAlign: 1.0,
|
|
||||||
textColour: toColour(200, 200, 200, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created password reset GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function showResetPasswordGUI() {
|
|
||||||
closeAllWindows();
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Showing password reset window`);
|
|
||||||
setChatWindowEnabled(false);
|
|
||||||
mexui.setInput(true);
|
|
||||||
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 (${passwordReset.emailInput.lines[0]}) ...`);
|
|
||||||
sendNetworkEventToServer("vrr.checkResetPassword", passwordReset.emailInput.lines[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function resetPasswordFailed(errorMessage) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Server reports password reset failed`);
|
|
||||||
passwordReset.messageLabel.text = errorMessage;
|
|
||||||
passwordReset.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255);
|
|
||||||
passwordReset.emailInput.text = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function resetPasswordCodeInputGUI() {
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: yesno.js
|
|
||||||
// DESC: Provides yes/no prompt dialog GUI
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
|
|
||||||
let yesNoDialog = {
|
|
||||||
window: null,
|
|
||||||
messageLabel: null,
|
|
||||||
yesButton: null,
|
|
||||||
noButton: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initYesNoDialogGUI() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created prompt GUI ...`);
|
|
||||||
yesNoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Question', {
|
|
||||||
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),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
yesNoDialog.messageLabel = yesNoDialog.window.text(15, 50, 370, 20, 'Would you like to answer this question?', {
|
|
||||||
main: {
|
|
||||||
textSize: 10.0,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textColour: toColour(255, 255, 255, 255),
|
|
||||||
textFont: mainFont,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(0, 0, 0, 0),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
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),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
|
||||||
},
|
|
||||||
}, yesNoDialogAnswerYes);
|
|
||||||
|
|
||||||
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),
|
|
||||||
textSize: 10.0,
|
|
||||||
textFont: mainFont,
|
|
||||||
textAlign: 0.5,
|
|
||||||
},
|
|
||||||
focused: {
|
|
||||||
borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255),
|
|
||||||
},
|
|
||||||
}, yesNoDialogAnswerNo);
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Created prompt GUI`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function yesNoDialogAnswerNo() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Responding with answer NO to server prompt`);
|
|
||||||
sendNetworkEventToServer("vrr.promptAnswerNo");
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function yesNoDialogAnswerYes() {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.GUI] Responding with answer YES to server prompt`);
|
|
||||||
sendNetworkEventToServer("vrr.promptAnswerYes");
|
|
||||||
closeAllWindows();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -1,384 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: labels.js
|
|
||||||
// DESC: Provides functionality for world labels (3D labels)
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let businessLabels = [];
|
|
||||||
let houseLabels = [];
|
|
||||||
let jobLabels = [];
|
|
||||||
|
|
||||||
let propertyLabelNameFont = null;
|
|
||||||
let propertyLabelLockedFont = null;
|
|
||||||
let propertyLabelHeight = 1.0;
|
|
||||||
|
|
||||||
let jobNameLabelFont = null;
|
|
||||||
let jobHelpLabelFont = null;
|
|
||||||
|
|
||||||
let unlockedColour = toColour(50, 205, 50, 255);
|
|
||||||
let lockedColour = toColour(205, 92, 92, 255);
|
|
||||||
let jobHelpColour = toColour(234, 198, 126, 255);
|
|
||||||
|
|
||||||
let renderLabelDistance = 7.5;
|
|
||||||
|
|
||||||
let propertyLabelLockedOffset = 16;
|
|
||||||
let propertyLabelNameOffset = 18;
|
|
||||||
let propertyLabelPriceOffset = 16;
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLabelScript() {
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.Label]: Initializing label script ...");
|
|
||||||
propertyLabelNameFont = initLabelPropertyNameFont();
|
|
||||||
propertyLabelLockedFont = initLabelPropertyLockedFont();
|
|
||||||
jobNameLabelFont = initLabelJobNameFont();
|
|
||||||
jobHelpLabelFont = initLabelJobHelpFont();
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.Label]: Label script initialized!");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLabelPropertyNameFont() {
|
|
||||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLabelPropertyLockedFont() {
|
|
||||||
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLabelJobNameFont() {
|
|
||||||
return lucasFont.createDefaultFont(16.0, "Roboto", "Regular");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLabelJobHelpFont() {
|
|
||||||
return lucasFont.createDefaultFont(10.0, "Roboto", "Light");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function renderPropertyEntranceLabel(name, position, locked, isBusiness, price, rentPrice, labelInfoType) {
|
|
||||||
if(localPlayer == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(propertyLabelNameFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(propertyLabelLockedFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
|
||||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 = "";
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
screenPosition.y -= propertyLabelPriceOffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isBusiness) {
|
|
||||||
text = (locked) ? toUpperCase(getLocaleString("Closed")) : toUpperCase(getLocaleString("Open"));
|
|
||||||
} else {
|
|
||||||
text = (locked) ? toUpperCase(getLocaleString("Locked")) : toUpperCase(getLocaleString("Unlocked"));
|
|
||||||
}
|
|
||||||
|
|
||||||
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_BUY: {
|
|
||||||
infoText = getLocaleString("BusinessBuyItemsLabel", "/buy");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_BUYBIZ: {
|
|
||||||
infoText = getLocaleString("BuyBusinessLabel", "/bizbuy");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_BUYHOUSE: {
|
|
||||||
infoText = getLocaleString("BuyHouseLabel", "/housebuy");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_RENTHOUSE: {
|
|
||||||
infoText = getLocaleString("RentHouseLabel", "/houserent");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_ENTERVEHICLE: {
|
|
||||||
infoText = getLocaleString("VehicleDealershipLabel");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function renderPropertyExitLabel(position) {
|
|
||||||
if(localPlayer == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(propertyLabelNameFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(propertyLabelLockedFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
|
||||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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(jobNameLabelFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(jobHelpLabelFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
|
||||||
if(!natives.doesViewportExist(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport does not exist!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!natives.isViewportActive(natives.getGameViewportId())) {
|
|
||||||
logToConsole(LOG_INFO, "[VRR.Label]: Game viewport is not active!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 = "";
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
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(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"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pickups[i].getData("vrr.label.rentprice") != null) {
|
|
||||||
rentPrice = makeLargeNumberReadable(pickups[i].getData("vrr.label.rentprice"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pickups[i].getData("vrr.label.help") != null) {
|
|
||||||
labelInfoType = pickups[i].getData("vrr.label.help");
|
|
||||||
}
|
|
||||||
|
|
||||||
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_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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
|
||||||
@@ -8,53 +8,32 @@
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getLocaleString(stringName, ...args) {
|
function getLocaleString(stringName, ...args) {
|
||||||
if(typeof getServerData().localeStrings[localLocaleId][stringName] == undefined) {
|
return findResourceByName("agrp_locale").exports.getLocaleString(localLocaleId, stringName, args);
|
||||||
return "";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let tempString = getServerData().localeStrings[localLocaleId][stringName];
|
// ===========================================================================
|
||||||
|
|
||||||
if(tempString == "" || tempString == null || tempString == undefined) {
|
function getGroupedLocaleString(stringName, index, ...args) {
|
||||||
return "";
|
return findResourceByName("agrp_locale").exports.getGroupedLocaleString(localLocaleId, stringName, index, args);
|
||||||
}
|
|
||||||
|
|
||||||
for(let i = 1; i <= args.length; i++) {
|
|
||||||
tempString = tempString.replace(`{${i}}`, args[i-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempString;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getAvailableLocaleOptions() {
|
function getAvailableLocaleOptions() {
|
||||||
return getServerData().localeOptions.filter(localeOption => localeOption.requiresUnicode == false);
|
return findResourceByName("agrp_locale").exports.getAvailableLocaleOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function loadLocaleConfig() {
|
function getLocales() {
|
||||||
let configFile = loadTextFile("config/client/locale.json");
|
return findResourceByName("agrp_locale").exports.getLocales();
|
||||||
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) {
|
function setLocale(tempLocaleId) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Locale] Setting locale to ${tempLocaleId} (${getServerData().localeOptions[tempLocaleId].englishName})`);
|
let locales = getLocales();
|
||||||
|
logToConsole(LOG_DEBUG, `[VRR.Locale] Setting locale to ${tempLocaleId} (${locales[tempLocaleId].englishName})`);
|
||||||
localLocaleId = tempLocaleId;
|
localLocaleId = tempLocaleId;
|
||||||
resetGUIStrings();
|
resetGUIStrings();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: logo.js
|
|
||||||
// DESC: Provides logo rendering functions
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let logoImage = null;
|
|
||||||
let logoPos = toVector2(game.width-132, game.height-132);
|
|
||||||
let logoSize = toVector2(128, 128);
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initLogoScript() {
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.Logo]: Initializing logo script ...");
|
|
||||||
//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();
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempLogoImage;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function processLogoRendering() {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -30,7 +30,7 @@ let renderHotBar = true;
|
|||||||
let renderItemActionDelay = true;
|
let renderItemActionDelay = true;
|
||||||
let renderInteriorLights = true;
|
let renderInteriorLights = true;
|
||||||
|
|
||||||
let logLevel = LOG_INFO|LOG_DEBUG|LOG_VERBOSE;
|
let logLevel = LOG_INFO | LOG_DEBUG | LOG_VERBOSE;
|
||||||
|
|
||||||
let weaponDamageEnabled = {};
|
let weaponDamageEnabled = {};
|
||||||
let weaponDamageEvent = {};
|
let weaponDamageEvent = {};
|
||||||
@@ -48,9 +48,6 @@ let streamingRadio = null;
|
|||||||
let streamingRadioVolume = 50;
|
let streamingRadioVolume = 50;
|
||||||
let streamingRadioElement = false;
|
let streamingRadioElement = false;
|
||||||
|
|
||||||
let enterPropertyKey = null;
|
|
||||||
let disableGUIKey = getKeyIdFromParams("insert");
|
|
||||||
|
|
||||||
let inAnimation = false;
|
let inAnimation = false;
|
||||||
let forcedAnimation = null;
|
let forcedAnimation = null;
|
||||||
|
|
||||||
@@ -59,8 +56,6 @@ let calledDeathEvent = false;
|
|||||||
let interiorLightsEnabled = true;
|
let interiorLightsEnabled = true;
|
||||||
let interiorLightsColour = toColour(0, 0, 0, 150);
|
let interiorLightsColour = toColour(0, 0, 0, 150);
|
||||||
|
|
||||||
let mouseCameraEnabled = false;
|
|
||||||
|
|
||||||
let currentPickup = false;
|
let currentPickup = false;
|
||||||
|
|
||||||
let vehiclePurchaseState = VRR_VEHBUYSTATE_NONE;
|
let vehiclePurchaseState = VRR_VEHBUYSTATE_NONE;
|
||||||
@@ -69,12 +64,6 @@ let vehiclePurchasePosition = null;
|
|||||||
|
|
||||||
let forceWantedLevel = 0;
|
let forceWantedLevel = 0;
|
||||||
|
|
||||||
let guiSubmitKey = false;
|
|
||||||
let guiLeftKey = false;
|
|
||||||
let guiRightKey = false;
|
|
||||||
let guiUpKey = false;
|
|
||||||
let guiDownKey = false;
|
|
||||||
|
|
||||||
// Pre-cache all allowed skins
|
// Pre-cache all allowed skins
|
||||||
let allowedSkins = getAllowedSkins(getGame());
|
let allowedSkins = getAllowedSkins(getGame());
|
||||||
|
|
||||||
|
|||||||
@@ -1,643 +0,0 @@
|
|||||||
|
|
||||||
// ===========================================================================
|
|
||||||
// Asshat-Gaming Roleplay
|
|
||||||
// https://github.com/VortrexFTW/gtac_asshat_rp
|
|
||||||
// Copyright (c) 2020 Asshat-Gaming (https://asshatgaming.com)
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// FILE: mouse-camera.js
|
|
||||||
// DESC: Provides a freelook camera similar to SA for III and VC
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
// CREDITS TO LUCASC190 FOR MAKING THE MOUSE CAMERA
|
|
||||||
// WALKING CODE ADDED BY VORTREX
|
|
||||||
|
|
||||||
function SetStandardControlsEnabled(bEnabled)
|
|
||||||
{
|
|
||||||
if(typeof gta == "undefined") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (game.standardControls === undefined)
|
|
||||||
{
|
|
||||||
logToConsole(LOG_WARN, "game.standardControls not implemented");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
game.standardControls = bEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetCurrentPlayerIndex()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetPlayerPed(uiIndex)
|
|
||||||
{
|
|
||||||
if (uiIndex >= 1)
|
|
||||||
throw new Error("player index out of range");
|
|
||||||
return localPlayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetPedVehicle(pPed)
|
|
||||||
{
|
|
||||||
return pPed.vehicle;
|
|
||||||
}
|
|
||||||
|
|
||||||
let ENTITYTYPE_BUILDING = 1;
|
|
||||||
let ENTITYTYPE_VEHICLE = 2;
|
|
||||||
let ENTITYTYPE_PED = 3;
|
|
||||||
let ENTITYTYPE_OBJECT = 4;
|
|
||||||
let ENTITYTYPE_DUMMY = 5;
|
|
||||||
|
|
||||||
function GetEntityType(Entity)
|
|
||||||
{
|
|
||||||
if (Entity.isType(ELEMENT_BUILDING))
|
|
||||||
return ENTITYTYPE_BUILDING;
|
|
||||||
if (Entity.isType(ELEMENT_VEHICLE))
|
|
||||||
return ENTITYTYPE_VEHICLE;
|
|
||||||
if (Entity.isType(ELEMENT_PED))
|
|
||||||
return ENTITYTYPE_PED;
|
|
||||||
if (Entity.isType(ELEMENT_OBJECT))
|
|
||||||
return ENTITYTYPE_OBJECT;
|
|
||||||
//if (Entity.isType(ELEMENT_DUMMY))
|
|
||||||
// return ENTITYTYPE_DUMMY;
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetPlaceableMatrix(pPlaceable)
|
|
||||||
{
|
|
||||||
if (pPlaceable == GetCamera())
|
|
||||||
return game.cameraMatrix;
|
|
||||||
return pPlaceable.matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetEntityModel(pEntity)
|
|
||||||
{
|
|
||||||
return pEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetModelBoundingSphere(usModel)
|
|
||||||
{
|
|
||||||
return [usModel.boundingRadius, usModel.boundingCentre.x, usModel.boundingCentre.y, usModel.boundingCentre.z];
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetMouseSpeed()
|
|
||||||
{
|
|
||||||
if (gui.cursorEnabled)
|
|
||||||
return [0,0];
|
|
||||||
let MouseSpeed = game.getMouseSpeed();
|
|
||||||
return [MouseSpeed.x,-MouseSpeed.y];
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetMouseSensitivity()
|
|
||||||
{
|
|
||||||
if (game.getMouseSensitivity === undefined)
|
|
||||||
{
|
|
||||||
//logToConsole(LOG_ERROR, "game.getMouseSensitivity not implemented");
|
|
||||||
return [0.0025,0.003];
|
|
||||||
}
|
|
||||||
let MouseSensitivity = game.getMouseSensitivity();
|
|
||||||
return [MouseSensitivity.x,MouseSensitivity.y];
|
|
||||||
}
|
|
||||||
|
|
||||||
let GetCamera;
|
|
||||||
{
|
|
||||||
const Camera = Symbol();
|
|
||||||
|
|
||||||
GetCamera = function()
|
|
||||||
{
|
|
||||||
return Camera;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function AreEntityCollisionsEnabled(pEntity)
|
|
||||||
{
|
|
||||||
return pEntity.collisionsEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
function SetEntityCollisionsEnabled(pEntity, bCollisionsEnabled)
|
|
||||||
{
|
|
||||||
pEntity.collisionsEnabled = bCollisionsEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ProcessLineOfSight(vecStartX, vecStartY, vecStartZ, vecEndX, vecEndY, vecEndZ, bCheckBuildings, bCheckVehicles, bCheckPeds, bCheckObjects, bCheckDummies, bCheckSeeThroughStuff, bIgnoreSomeObjectsForCamera)
|
|
||||||
{
|
|
||||||
if (game.processLineOfSight === undefined)
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
if (Result == null)
|
|
||||||
return [null];
|
|
||||||
return [Result.position.x, Result.position.y ,Result.position.z, Result.normal.x, Result.normal.y ,Result.normal.z, Result.entity];
|
|
||||||
}
|
|
||||||
|
|
||||||
function SetPlaceableMatrix(pPlaceable, mat)
|
|
||||||
{
|
|
||||||
if (pPlaceable == GetCamera())
|
|
||||||
{
|
|
||||||
game.setCameraMatrix(mat);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pPlaceable.matrix = mat;
|
|
||||||
}
|
|
||||||
|
|
||||||
const UpdateCamera = game.updateCamera;
|
|
||||||
|
|
||||||
let GetTickCount;
|
|
||||||
{
|
|
||||||
let FrameCount = 0;
|
|
||||||
|
|
||||||
setInterval(() =>
|
|
||||||
{
|
|
||||||
++FrameCount;
|
|
||||||
}, 0);
|
|
||||||
|
|
||||||
let GTAFrameCount = 0;
|
|
||||||
|
|
||||||
addEventHandler("OnProcess", (event, deltaTime) =>
|
|
||||||
{
|
|
||||||
++GTAFrameCount;
|
|
||||||
});
|
|
||||||
|
|
||||||
GetTickCount = function(bGTA, bFrames)
|
|
||||||
{
|
|
||||||
if (bFrames)
|
|
||||||
return bGTA ? GTAFrameCount : FrameCount;
|
|
||||||
else
|
|
||||||
return bGTA ? game.tickCount : sdl.ticks;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function easingSinusoidalInOut(t,b,c,d)//TODO: Move this to MathUtil.js
|
|
||||||
{
|
|
||||||
return -c/2 * (Math.cos((Math.PI)*t/d) - 1) + b;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: extract
|
|
||||||
|
|
||||||
function applyMultiplierTimeStep(m,t)//TODO: Move this to MathUtil.js
|
|
||||||
{
|
|
||||||
return Math.max(Math.min(1.0-(1.0-m)*(t),1),0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: getOffset
|
|
||||||
//TODO: round
|
|
||||||
//TODO: getNumberBetween
|
|
||||||
//TODO: split
|
|
||||||
//TODO: isWhiteSpaceCharacter
|
|
||||||
//TODO: isControlCharacter
|
|
||||||
//TODO: alert
|
|
||||||
//TODO: confirm
|
|
||||||
|
|
||||||
const identityMatrix = new Matrix4x4();
|
|
||||||
if (identityMatrix.setIdentity === undefined)
|
|
||||||
{
|
|
||||||
identityMatrix.m11 = 1;
|
|
||||||
identityMatrix.m12 = 0;
|
|
||||||
identityMatrix.m13 = 0;
|
|
||||||
identityMatrix.m14 = 0;
|
|
||||||
identityMatrix.m21 = 0;
|
|
||||||
identityMatrix.m22 = 1;
|
|
||||||
identityMatrix.m23 = 0;
|
|
||||||
identityMatrix.m24 = 0;
|
|
||||||
identityMatrix.m31 = 0;
|
|
||||||
identityMatrix.m32 = 0;
|
|
||||||
identityMatrix.m33 = 1;
|
|
||||||
identityMatrix.m34 = 0;
|
|
||||||
identityMatrix.m41 = 0;
|
|
||||||
identityMatrix.m42 = 0;
|
|
||||||
identityMatrix.m43 = 0;
|
|
||||||
identityMatrix.m44 = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cameraIdentityMatrix = new Matrix4x4();
|
|
||||||
cameraIdentityMatrix.m11 = -1;
|
|
||||||
cameraIdentityMatrix.m12 = 0;
|
|
||||||
cameraIdentityMatrix.m13 = 0;
|
|
||||||
cameraIdentityMatrix.m14 = 0;
|
|
||||||
cameraIdentityMatrix.m21 = 0;
|
|
||||||
cameraIdentityMatrix.m22 = 1;
|
|
||||||
cameraIdentityMatrix.m23 = 0;
|
|
||||||
cameraIdentityMatrix.m24 = 0;
|
|
||||||
cameraIdentityMatrix.m31 = 0;
|
|
||||||
cameraIdentityMatrix.m32 = 0;
|
|
||||||
cameraIdentityMatrix.m33 = 1;
|
|
||||||
cameraIdentityMatrix.m34 = 0;
|
|
||||||
cameraIdentityMatrix.m41 = 0;
|
|
||||||
cameraIdentityMatrix.m42 = 0;
|
|
||||||
cameraIdentityMatrix.m43 = 0;
|
|
||||||
cameraIdentityMatrix.m44 = 1;
|
|
||||||
|
|
||||||
function createMultipliedMatrix()
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
matrix.setMultiply.apply(matrix, arguments);
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createXRotationMatrix(x)
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
matrix.setRotateX(x);
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createYRotationMatrix(x)
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
matrix.setRotateY(x);
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createZRotationMatrix(z)
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
matrix.setRotateZ(z);
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createTranslationMatrix(x,y,z)
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
matrix.setTranslate([x,y,z]);
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: createScaleMatrix
|
|
||||||
|
|
||||||
function getDotProduct(x,y,z,x2,y2,z2)
|
|
||||||
{
|
|
||||||
return x*x2 + y*y2 + z*z2;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCrossProduct(x,y,z,x2,y2,z2)
|
|
||||||
{
|
|
||||||
return [y*z2-z*y2, z*x2-x*z2, x*y2-y*x2];
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLength(x,y,z)
|
|
||||||
{
|
|
||||||
return Math.sqrt(getDotProduct(x,y,z,x,y,z));
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalise(x,y,z)
|
|
||||||
{
|
|
||||||
let length = getLength(x,y,z);
|
|
||||||
if (length == 0)
|
|
||||||
throw new Error("an attempt was made to normalise a three dimensional vector with a length of zero");
|
|
||||||
return [x/length, y/length, z/length];
|
|
||||||
}
|
|
||||||
|
|
||||||
function createLookAtLHMatrix(eyeX, eyeY, eyeZ, atX, atY, atZ, upX,upY,upZ)
|
|
||||||
{
|
|
||||||
let matrix = new Matrix4x4();
|
|
||||||
let [lookX, lookY, lookZ] = normalise(atX-eyeX,atY-eyeY,atZ-eyeZ);
|
|
||||||
let [rightX, rightY, rightZ] = normalise.apply(null,getCrossProduct(upX,upY,upZ,lookX, lookY, lookZ));
|
|
||||||
[upX,upY,upZ] = getCrossProduct(lookX, lookY, lookZ,rightX, rightY, rightZ);
|
|
||||||
matrix.m11 = rightX;
|
|
||||||
matrix.m12 = rightY;
|
|
||||||
matrix.m13 = rightZ;
|
|
||||||
matrix.m14 = 0;
|
|
||||||
|
|
||||||
matrix.m21 = lookX;
|
|
||||||
matrix.m22 = lookY;
|
|
||||||
matrix.m23 = lookZ;
|
|
||||||
matrix.m24 = 0;
|
|
||||||
|
|
||||||
matrix.m31 = upX;
|
|
||||||
matrix.m32 = upY;
|
|
||||||
matrix.m33 = upZ;
|
|
||||||
matrix.m34 = 0;
|
|
||||||
|
|
||||||
matrix.m41 = eyeX;
|
|
||||||
matrix.m42 = eyeY;
|
|
||||||
matrix.m43 = eyeZ;
|
|
||||||
matrix.m44 = 1;
|
|
||||||
|
|
||||||
matrix.m41 = eyeX;
|
|
||||||
matrix.m42 = eyeY;
|
|
||||||
matrix.m43 = eyeZ;
|
|
||||||
matrix.m44 = 1;
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDifferenceBetweenAngles(current,target)
|
|
||||||
{
|
|
||||||
let f = (((target-current)+Math.PI)/(Math.PI*2));
|
|
||||||
return ((f-Math.floor(f))*(Math.PI*2))-Math.PI;
|
|
||||||
}
|
|
||||||
|
|
||||||
let easeCamera = false;
|
|
||||||
let easeStartTicks;
|
|
||||||
let easeDuration;
|
|
||||||
let easeStartPosX, easeStartPosY, easeStartPosZ;
|
|
||||||
let easeStartLookX, easeStartLookY, easeStartLookZ;
|
|
||||||
let easeStartUpX, easeStartUpY, easeStartUpZ;
|
|
||||||
|
|
||||||
function getCameraPositionInfo(matrix)
|
|
||||||
{
|
|
||||||
return [matrix.m41, matrix.m42, matrix.m43, matrix.m21, matrix.m22, matrix.m23, matrix.m31, matrix.m32, matrix.m33];
|
|
||||||
}
|
|
||||||
|
|
||||||
function startCameraEase()
|
|
||||||
{
|
|
||||||
easeCamera = true;
|
|
||||||
easeStartTicks = GetTickCount(true,false);
|
|
||||||
easeDuration = 1000;
|
|
||||||
let matrix = GetPlaceableMatrix(GetCamera());
|
|
||||||
[easeStartPosX, easeStartPosY, easeStartPosZ, easeStartLookX, easeStartLookY, easeStartLookZ, easeStartUpX, easeStartUpY, easeStartUpZ] = getCameraPositionInfo(matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyCameraEase(matrix)
|
|
||||||
{
|
|
||||||
if (!easeCamera)
|
|
||||||
return matrix;
|
|
||||||
let ease = (GetTickCount(true,false)-easeStartTicks)/easeDuration;
|
|
||||||
if (ease < 1)
|
|
||||||
{
|
|
||||||
ease = easingSinusoidalInOut(ease,0,1,1);
|
|
||||||
let [newPosX, newPosY, newPosZ, newLookX, newLookY, newLookZ, newUpX, newUpY, newUpZ] = getCameraPositionInfo(matrix);
|
|
||||||
let easePosX = easeStartPosX+(newPosX-easeStartPosX)*ease;
|
|
||||||
let easePosY = easeStartPosY+(newPosY-easeStartPosY)*ease;
|
|
||||||
let easePosZ = easeStartPosZ+(newPosZ-easeStartPosZ)*ease;
|
|
||||||
let easeLookX = easeStartLookX+(newLookX-easeStartLookX)*ease;
|
|
||||||
let easeLookY = easeStartLookY+(newLookY-easeStartLookY)*ease;
|
|
||||||
let easeLookZ = easeStartLookZ+(newLookZ-easeStartLookZ)*ease;
|
|
||||||
let easeUpX = easeStartUpX+(newUpX-easeStartUpX)*ease;
|
|
||||||
let easeUpY = easeStartUpY+(newUpY-easeStartUpY)*ease;
|
|
||||||
let easeUpZ = easeStartUpZ+(newUpZ-easeStartUpZ)*ease;
|
|
||||||
return createLookAtLHMatrix(easePosX,easePosY,easePosZ,easePosX+easeLookX,easePosY+easeLookY,easePosZ+easeLookZ,easeUpX,easeUpY,easeUpZ);
|
|
||||||
}
|
|
||||||
return matrix;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isCameraEasing()
|
|
||||||
{
|
|
||||||
return easeCamera && GetTickCount(true,false) < (easeStartTicks+easeDuration);
|
|
||||||
}
|
|
||||||
|
|
||||||
let oldCameraTarget = null;
|
|
||||||
let OldPosition = null;//2019 Lucas was here!
|
|
||||||
let cameraRotZ;
|
|
||||||
let cameraRotY;
|
|
||||||
|
|
||||||
function getCameraTarget()
|
|
||||||
{
|
|
||||||
let playerPed = GetPlayerPed(GetCurrentPlayerIndex());
|
|
||||||
let vehicle = GetPedVehicle(playerPed);
|
|
||||||
if (vehicle != null)
|
|
||||||
return vehicle;
|
|
||||||
if (playerPed != null)
|
|
||||||
{
|
|
||||||
//if (playerPed.health <= 1)//Breaks because of fade//2019 Lucas was here!
|
|
||||||
// return null;
|
|
||||||
return playerPed;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isRelativeToTarget(target)
|
|
||||||
{
|
|
||||||
if (GetEntityType(target) == ENTITYTYPE_PED)
|
|
||||||
return false;
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
function isClipped(target)
|
|
||||||
{
|
|
||||||
if (GetEntityType(target) == ENTITYTYPE_PED)
|
|
||||||
return true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//2019 Lucas was here!
|
|
||||||
function ShouldReturnToRestRotation(Target)
|
|
||||||
{
|
|
||||||
if (GetEntityType(Target) == ENTITYTYPE_PED)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getCameraRestRotation(target)
|
|
||||||
{
|
|
||||||
let targetMatrix = GetPlaceableMatrix(target);
|
|
||||||
let rotZ;
|
|
||||||
if (isRelativeToTarget(target))
|
|
||||||
rotZ = 0;
|
|
||||||
else
|
|
||||||
rotZ = -Math.atan2(targetMatrix.m21,targetMatrix.m22);
|
|
||||||
let rotY = -0.2;
|
|
||||||
return [rotZ, rotY];
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetCameraRotation()
|
|
||||||
{
|
|
||||||
[cameraRotZ, cameraRotY] = getCameraRestRotation(getCameraTarget());
|
|
||||||
}
|
|
||||||
|
|
||||||
//2019 Lucas was here!
|
|
||||||
let DeltaTime = 0;
|
|
||||||
addEventHandler("OnProcess", (event, deltaTime) =>
|
|
||||||
{
|
|
||||||
DeltaTime = deltaTime;
|
|
||||||
if(!localPlayer) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let IdleTime = 0;//2019 Lucas was here!
|
|
||||||
|
|
||||||
function processReturnToRestRotation()
|
|
||||||
{
|
|
||||||
//resetCameraRotation();//2019 Lucas was here!
|
|
||||||
|
|
||||||
//2019 Lucas was here!
|
|
||||||
let Target = getCameraTarget();
|
|
||||||
if (!ShouldReturnToRestRotation(Target))
|
|
||||||
return;
|
|
||||||
IdleTime += DeltaTime;
|
|
||||||
if (IdleTime > 1.5)
|
|
||||||
{
|
|
||||||
let Velocity = Target.velocity;
|
|
||||||
let Matrix = Target.matrix;
|
|
||||||
let Speed = getDotProduct(Velocity.x,Velocity.y,Velocity.z,Matrix.getElement(1*4+0),Matrix.getElement(1*4+1),Matrix.getElement(1*4+2));
|
|
||||||
let AbsSpeed = Math.abs(Speed);
|
|
||||||
let Multiplier = Math.min(AbsSpeed/0.75, 1);
|
|
||||||
if (Multiplier != 0)
|
|
||||||
{
|
|
||||||
let [TargetCameraRotZ2, TargetCameraRotY2] = getCameraRestRotation(Target);
|
|
||||||
if (Speed < 0)
|
|
||||||
TargetCameraRotZ2 += Math.PI;
|
|
||||||
let TimeStep = game.timeStep/50*60;
|
|
||||||
cameraRotZ += getDifferenceBetweenAngles(cameraRotZ,TargetCameraRotZ2)*applyMultiplierTimeStep(1/20,TimeStep)*Multiplier;
|
|
||||||
cameraRotY += getDifferenceBetweenAngles(cameraRotY,TargetCameraRotY2)*applyMultiplierTimeStep(1/20,TimeStep)*Multiplier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function cancelReturnToRestRotation()
|
|
||||||
{
|
|
||||||
IdleTime = 0;//2019 Lucas was here!
|
|
||||||
}
|
|
||||||
|
|
||||||
let distance;
|
|
||||||
let zIncrease;
|
|
||||||
|
|
||||||
function getCameraOffsetInfo(target)
|
|
||||||
{
|
|
||||||
if (GetEntityType(target) == ENTITYTYPE_PED)
|
|
||||||
{
|
|
||||||
let distance = 4;
|
|
||||||
let zIncrease = 0.8;
|
|
||||||
let offsetX = 0;
|
|
||||||
let offsetY = 0;
|
|
||||||
let offsetZ = 0;
|
|
||||||
return [distance, zIncrease, offsetX, offsetY, offsetZ];
|
|
||||||
}
|
|
||||||
let model = GetEntityModel(target);
|
|
||||||
let [radius] = GetModelBoundingSphere(model);
|
|
||||||
let minDistance;
|
|
||||||
let maxDistance;
|
|
||||||
let minZIncrease;
|
|
||||||
let maxZIncrease;
|
|
||||||
let minRadius;
|
|
||||||
let maxRadius;
|
|
||||||
let offsetX;
|
|
||||||
let offsetY;
|
|
||||||
let offsetZ;
|
|
||||||
if (radius <= 3.0535011291504)
|
|
||||||
{
|
|
||||||
minDistance = 4;
|
|
||||||
maxDistance = 8;
|
|
||||||
minZIncrease = 0.5;
|
|
||||||
maxZIncrease = 1;
|
|
||||||
minRadius = 2;
|
|
||||||
maxRadius = 3.0535011291504;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
minDistance = 8;
|
|
||||||
maxDistance = 16;
|
|
||||||
minZIncrease = 1;
|
|
||||||
maxZIncrease = 2;
|
|
||||||
minRadius = 3.05350112915042;
|
|
||||||
maxRadius = 6.3955960273743;
|
|
||||||
}
|
|
||||||
offsetX = 0;
|
|
||||||
offsetY = 0;
|
|
||||||
offsetZ = 0;
|
|
||||||
distance = minDistance+(radius-minRadius)/(maxRadius-minRadius)*(maxDistance-minDistance);
|
|
||||||
zIncrease = minZIncrease+(radius-minRadius)/(maxRadius-minRadius)*(maxZIncrease-minZIncrease);
|
|
||||||
return [distance, zIncrease, offsetX, offsetY, offsetZ];
|
|
||||||
}
|
|
||||||
|
|
||||||
function update()
|
|
||||||
{
|
|
||||||
let target = getCameraTarget();
|
|
||||||
if (target != null)
|
|
||||||
{
|
|
||||||
if (oldCameraTarget != target)
|
|
||||||
{
|
|
||||||
//if (oldCameraTarget != null)//2019 Lucas was here!
|
|
||||||
let Position = target.position;
|
|
||||||
if (OldPosition == null || getLength(Position.x-OldPosition.x,Position.y-OldPosition.y,Position.z-OldPosition.z) < 10)
|
|
||||||
startCameraEase()
|
|
||||||
resetCameraRotation()
|
|
||||||
}
|
|
||||||
let [mouseSpeedX, mouseSpeedY] = GetMouseSpeed();
|
|
||||||
let [mouseSensitivityX, mouseSensitivityY] = GetMouseSensitivity();
|
|
||||||
mouseSpeedX = mouseSpeedX*mouseSensitivityX*2;
|
|
||||||
mouseSpeedY = mouseSpeedY*mouseSensitivityY*2;
|
|
||||||
if (mouseSpeedX == 0 && mouseSpeedY == 0)
|
|
||||||
{
|
|
||||||
processReturnToRestRotation();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cameraRotZ = cameraRotZ-mouseSpeedX;
|
|
||||||
cameraRotY = cameraRotY-mouseSpeedY;
|
|
||||||
cancelReturnToRestRotation();
|
|
||||||
}
|
|
||||||
cameraRotY = Math.max(cameraRotY,-Math.PI/2+0.01);
|
|
||||||
if (GetEntityType(target) != ENTITYTYPE_PED)
|
|
||||||
cameraRotY = Math.min(cameraRotY,Math.PI/8.5);//2019 Lucas was here!
|
|
||||||
else
|
|
||||||
cameraRotY = Math.min(cameraRotY,Math.PI/4);
|
|
||||||
let camera = GetCamera();
|
|
||||||
let targetMatrix = GetPlaceableMatrix(target);
|
|
||||||
let [distance, zIncrease, offsetX, offsetY, offsetZ] = getCameraOffsetInfo(target);
|
|
||||||
let offsetTranslationMatrix = createTranslationMatrix(offsetX, offsetY, offsetZ);
|
|
||||||
targetMatrix = createMultipliedMatrix(offsetTranslationMatrix,targetMatrix);
|
|
||||||
let targetPosX, targetPosY, targetPosZ;
|
|
||||||
if (isRelativeToTarget(target))
|
|
||||||
[targetPosX, targetPosY, targetPosZ] = [0,0,0];
|
|
||||||
else
|
|
||||||
[targetPosX, targetPosY, targetPosZ] = [targetMatrix.m41,targetMatrix.m42,targetMatrix.m43];
|
|
||||||
let distanceTranslationMatrix = createTranslationMatrix(0,-distance,0);
|
|
||||||
targetPosZ = targetPosZ+zIncrease;
|
|
||||||
let targetTranslationMatrix = createTranslationMatrix(targetPosX, targetPosY, targetPosZ);
|
|
||||||
let offsetRotationX = createXRotationMatrix(cameraRotY);
|
|
||||||
let offsetRotationZ = createZRotationMatrix(cameraRotZ);
|
|
||||||
let cameraMatrix = createMultipliedMatrix(cameraIdentityMatrix,distanceTranslationMatrix,offsetRotationX,offsetRotationZ,targetTranslationMatrix);
|
|
||||||
if (isRelativeToTarget(target))
|
|
||||||
{
|
|
||||||
cameraMatrix = createMultipliedMatrix(cameraMatrix,targetMatrix);
|
|
||||||
targetTranslationMatrix = createMultipliedMatrix(targetTranslationMatrix,targetMatrix);
|
|
||||||
}
|
|
||||||
if (isClipped(target))
|
|
||||||
{
|
|
||||||
let startX = targetTranslationMatrix.m41;
|
|
||||||
let startY = targetTranslationMatrix.m42;
|
|
||||||
let startZ = targetTranslationMatrix.m43;
|
|
||||||
let endX = cameraMatrix.m41;
|
|
||||||
let endY = cameraMatrix.m42;
|
|
||||||
let endZ = cameraMatrix.m43;
|
|
||||||
let checkBuildings = true;
|
|
||||||
let checkVehicles = true;
|
|
||||||
let checkPeds = true;
|
|
||||||
let checkObjects = true;
|
|
||||||
let checkDummies = false;
|
|
||||||
let checkSeeThroughStuff = false;
|
|
||||||
let ignoreSomeObjectsForCamera = true;
|
|
||||||
let collisionsEnabled = AreEntityCollisionsEnabled(target);
|
|
||||||
if (collisionsEnabled)
|
|
||||||
SetEntityCollisionsEnabled(target,false);
|
|
||||||
let [positionX,positionY,positionZ,normalX,normalY,normalZ,targetEntity] = ProcessLineOfSight(startX,startY,startZ,endX,endY,endZ,checkBuildings,checkVehicles,checkPeds,checkObjects,checkDummies,checkSeeThroughStuff,ignoreSomeObjectsForCamera);
|
|
||||||
if (collisionsEnabled)
|
|
||||||
SetEntityCollisionsEnabled(target,true);
|
|
||||||
if (positionX != null)
|
|
||||||
{
|
|
||||||
//2019 Lucas was here!
|
|
||||||
let Distance = 0.3;
|
|
||||||
positionX += normalX*Distance;
|
|
||||||
positionY += normalY*Distance;
|
|
||||||
positionZ += normalZ*Distance;
|
|
||||||
|
|
||||||
cameraMatrix.m41 = positionX;
|
|
||||||
cameraMatrix.m42 = positionY;
|
|
||||||
cameraMatrix.m43 = positionZ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isCameraEasing())
|
|
||||||
cameraMatrix = applyCameraEase(cameraMatrix);
|
|
||||||
SetPlaceableMatrix(camera,cameraMatrix);
|
|
||||||
UpdateCamera(camera);
|
|
||||||
}
|
|
||||||
oldCameraTarget = target;
|
|
||||||
OldPosition = (target != null) ? target.position : null;//2019 Lucas was here!
|
|
||||||
return target != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
addEventHandler("OnCameraProcess", (event) =>
|
|
||||||
{
|
|
||||||
if(mouseCameraEnabled) {
|
|
||||||
update();
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function toggleMouseCamera() {
|
|
||||||
mouseCameraEnabled = !mouseCameraEnabled;
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: nametags.js
|
|
||||||
// DESC: Provides nametag rendering
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
// Configuration
|
|
||||||
let nametagFont = null;
|
|
||||||
let afkStatusFont = null;
|
|
||||||
let pingFont = null;
|
|
||||||
let nametagDistance = 50.0;
|
|
||||||
let nametagWidth = 70;
|
|
||||||
|
|
||||||
let playerNames = {};
|
|
||||||
let playerColours = {};
|
|
||||||
let playerPaused = {};
|
|
||||||
let playerPing = {};
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initNameTagScript() {
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.NameTag]: Initializing nametag script ...");
|
|
||||||
nametagFont = loadNameTagFont();
|
|
||||||
afkStatusFont = loadPausedStatusFont();
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.NameTag]: Nametag script initialized!");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function loadNameTagFont() {
|
|
||||||
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function loadPausedStatusFont() {
|
|
||||||
return lucasFont.createDefaultFont(18.0, "Roboto", "Light");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function updatePlayerNameTag(clientName, characterName, colour, paused, ping) {
|
|
||||||
playerNames[clientName] = characterName;
|
|
||||||
playerColours[clientName] = colour;
|
|
||||||
playerPaused[clientName] = paused;
|
|
||||||
playerPing[clientName] = ping;
|
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
|
||||||
let client = getPlayerFromParams(clientName);
|
|
||||||
if(client != false) {
|
|
||||||
if(getPlayerPed(client) != null) {
|
|
||||||
getPlayerPed(client).setNametag(characterName, colour);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function updatePlayerPing(clientName, ping) {
|
|
||||||
playerPing[clientName] = ping;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour, afk, skin) {
|
|
||||||
if(nametagFont == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
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));
|
|
||||||
|
|
||||||
// Starts at bottom and works it's way up
|
|
||||||
// -------------------------------------------
|
|
||||||
// Health Bar
|
|
||||||
|
|
||||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
|
||||||
// Mickey Hamfists is ridiculously tall. Raise the nametag for him a bit
|
|
||||||
if(skin == 109) {
|
|
||||||
y -= 20;
|
|
||||||
} else {
|
|
||||||
y -= 5;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
y -= 5;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
y -= 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(health > 0.0) {
|
|
||||||
let hx = x-width/2;
|
|
||||||
let hy = y-10/2;
|
|
||||||
let colourB = toColour(0, 0, 0, Math.floor(255.0*alpha)); // Background colour (black)
|
|
||||||
graphics.drawRectangle(null, [hx, hy], [width, 8], colourB, colourB, colourB, colourB);
|
|
||||||
let colour = toColour(Math.floor(255.0-(health*255.0)), Math.floor(health*255.0), 0, Math.floor(255.0*alpha)); // Health bar colour (varies, depending on health)
|
|
||||||
graphics.drawRectangle(null, [hx+2, hy+2], [(width-4)*health, 10-6], colour, colour, colour, colour);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Armour Bar
|
|
||||||
if (armour > 0.0)
|
|
||||||
{
|
|
||||||
// Go up 10 pixels to draw the next part
|
|
||||||
y -= 10;
|
|
||||||
let hx = x-width/2;
|
|
||||||
let hy = y-10/2;
|
|
||||||
let colourB = toColour(255, 0, 0, 0); // Background colour (black)
|
|
||||||
graphics.drawRectangle(null, [hx, hy], [width, 8], colourB, colourB, colourB, colourB);
|
|
||||||
let colour = toColour(255, 255, 255, 255); // Armour bar colour (white)
|
|
||||||
graphics.drawRectangle(null, [hx+2, hy+2], [(width-4)*armour, 10-6], colour, colour, colour, colour);
|
|
||||||
}
|
|
||||||
|
|
||||||
y -= 20;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
// AFK Status
|
|
||||||
if(afkStatusFont != null) {
|
|
||||||
if(afk) {
|
|
||||||
let size = afkStatusFont.measure("PAUSED", game.width, 0.0, 0.0, afkStatusFont.size, false, false);
|
|
||||||
afkStatusFont.render("PAUSED", [x-size[0]/2, y-size[1]/2], game.width, 0.0, 0.0, afkStatusFont.size, toColour(255, 0, 0, 255), false, false, false, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function updateNametag(element) {
|
|
||||||
if(!areWorldLabelsSupported()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(localPlayer != null) {
|
|
||||||
let playerPos = localPlayer.position;
|
|
||||||
let elementPos = element.position;
|
|
||||||
|
|
||||||
elementPos[2] += 0.9;
|
|
||||||
|
|
||||||
//if(typeof element.getComponentPosition()) {
|
|
||||||
|
|
||||||
let screenPos = getScreenFromWorldPosition(elementPos);
|
|
||||||
if (screenPos[2] >= 0.0) {
|
|
||||||
let health = element.health/100.0;
|
|
||||||
if(health > 1.0) {
|
|
||||||
health = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
let armour = element.armour/100.0;
|
|
||||||
if(armour > 1.0) {
|
|
||||||
armour = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
let distance = playerPos.distance(elementPos);
|
|
||||||
if(distance <= nametagDistance) {
|
|
||||||
if(typeof game.processLineOfSight != "undefined") {
|
|
||||||
let losCheck = game.processLineOfSight(playerPos, elementPos, true, false, false, true, true, false, true, true);
|
|
||||||
if(losCheck != null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(element.type == ELEMENT_PLAYER) {
|
|
||||||
let name = element.name;
|
|
||||||
let colour = COLOUR_WHITE;
|
|
||||||
let paused = false;
|
|
||||||
let ping = -1;
|
|
||||||
|
|
||||||
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 playerColours[element.name] != "undefined") {
|
|
||||||
colour = playerColours[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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function getClientFromPlayer(player) {
|
|
||||||
getClients().forEach(function(client) {
|
|
||||||
if(getPlayerPed(client) == player) {
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function processNameTagRendering(event) {
|
|
||||||
//if(getGame() >= GAME_GTA_IV) {
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
getElementsByType(ELEMENT_PED).forEach(function(ped) {
|
|
||||||
if(ped != localPlayer) {
|
|
||||||
updateNametag(ped);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function createColour(alpha, red, green, blue) {
|
|
||||||
return alpha << 24 | red << 16 | green << 8 | blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setNameTagDistance(distance) {
|
|
||||||
nametagDistance = distance;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -37,7 +37,7 @@ function getPlayerPosition() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setPlayerPosition(position) {
|
function setPlayerPosition(position) {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
natives.setCharCoordinates(localPlayer, position);
|
natives.setCharCoordinates(localPlayer, position);
|
||||||
} else {
|
} else {
|
||||||
localPlayer.position = position;
|
localPlayer.position = position;
|
||||||
@@ -59,11 +59,11 @@ function getElementHeading(elementId) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementPosition(elementId, position) {
|
function setElementPosition(elementId, position) {
|
||||||
if(getElementFromId(elementId) == null) {
|
if (getElementFromId(elementId) == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!getElementFromId(elementId).isSyncer) {
|
if (!getElementFromId(elementId).isSyncer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ function setElementPosition(elementId, position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function deleteGameElement(elementId, position) {
|
function deleteGameElement(elementId, position) {
|
||||||
if(!getElementFromId(elementId).isOwner) {
|
if (!getElementFromId(elementId).isOwner) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,8 +110,8 @@ function getElementId(element) {
|
|||||||
|
|
||||||
function getClientFromIndex(index) {
|
function getClientFromIndex(index) {
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(clients[i].index == index) {
|
if (clients[i].index == index) {
|
||||||
return clients[i];
|
return clients[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,8 +170,8 @@ function is2dPositionOnScreen(pos2d) {
|
|||||||
function getVehiclesInRange(position, range) {
|
function getVehiclesInRange(position, range) {
|
||||||
let vehicles = getElementsByType(ELEMENT_VEHICLE);
|
let vehicles = getElementsByType(ELEMENT_VEHICLE);
|
||||||
let inRangeVehicles = [];
|
let inRangeVehicles = [];
|
||||||
for(let i in vehicles) {
|
for (let i in vehicles) {
|
||||||
if(getDistance(position, vehicles[i].position) <= range) {
|
if (getDistance(position, vehicles[i].position) <= range) {
|
||||||
inRangeVehicles.push(vehicles[i]);
|
inRangeVehicles.push(vehicles[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,13 +181,13 @@ function getVehiclesInRange(position, range) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGameBlip(blipModel, position, name = "") {
|
function createGameBlip(blipModel, position, name = "") {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
let blipId = natives.addBlipForCoord(position);
|
let blipId = natives.addBlipForCoord(position);
|
||||||
if(blipId) {
|
if (blipId) {
|
||||||
natives.changeBlipSprite(blipId, blipModel);
|
natives.changeBlipSprite(blipId, blipModel);
|
||||||
natives.setBlipMarkerLongDistance(blipId, false);
|
natives.setBlipMarkerLongDistance(blipId, false);
|
||||||
natives.setBlipAsShortRange(blipId, true);
|
natives.setBlipAsShortRange(blipId, true);
|
||||||
natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
|
natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ..." : ""}`);
|
||||||
return blipId;
|
return blipId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,7 +198,7 @@ function createGameBlip(blipModel, position, name = "") {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
return entity.setData(dataName, dataValue);
|
return entity.setData(dataName, dataValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,64 +224,64 @@ function repairVehicle(syncId) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncVehicleProperties(vehicle) {
|
function syncVehicleProperties(vehicle) {
|
||||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
if (doesEntityDataExist(vehicle, "agrp.lights")) {
|
||||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
let lightStatus = getEntityData(vehicle, "agrp.lights");
|
||||||
vehicle.lights = lightStatus;
|
vehicle.lights = lightStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.invincible")) {
|
if (doesEntityDataExist(vehicle, "agrp.invincible")) {
|
||||||
let invincible = getEntityData(vehicle, "vrr.invincible");
|
let invincible = getEntityData(vehicle, "agrp.invincible");
|
||||||
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.panelStatus")) {
|
||||||
let panelsStatus = getEntityData(vehicle, "vrr.panelStatus");
|
let panelsStatus = getEntityData(vehicle, "agrp.panelStatus");
|
||||||
for(let i in panelsStatus) {
|
for (let i in panelsStatus) {
|
||||||
vehicle.setPanelStatus(i, panelsStatus[i]);
|
vehicle.setPanelStatus(i, panelsStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.wheelStatus")) {
|
||||||
let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus");
|
let wheelsStatus = getEntityData(vehicle, "agrp.wheelStatus");
|
||||||
for(let i in wheelsStatus) {
|
for (let i in wheelsStatus) {
|
||||||
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.lightStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.lightStatus")) {
|
||||||
let lightStatus = getEntityData(vehicle, "vrr.lightStatus");
|
let lightStatus = getEntityData(vehicle, "agrp.lightStatus");
|
||||||
for(let i in lightStatus) {
|
for (let i in lightStatus) {
|
||||||
vehicle.setLightStatus(i, lightStatus[i]);
|
vehicle.setLightStatus(i, lightStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) {
|
if (doesEntityDataExist(vehicle, "agrp.suspensionHeight")) {
|
||||||
let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight");
|
let suspensionHeight = getEntityData(vehicle, "agrp.suspensionHeight");
|
||||||
vehicle.setSuspensionHeight(suspensionHeight);
|
vehicle.setSuspensionHeight(suspensionHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
||||||
for(let i in allUpgrades) {
|
for (let i in allUpgrades) {
|
||||||
vehicle.removeUpgrade(i);
|
vehicle.removeUpgrade(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
if (doesEntityDataExist(vehicle, "agrp.upgrades")) {
|
||||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
let upgrades = getEntityData(vehicle, "agrp.upgrades");
|
||||||
for(let i in upgrades) {
|
for (let i in upgrades) {
|
||||||
if(upgrades[i] != 0) {
|
if (upgrades[i] != 0) {
|
||||||
vehicle.addUpgrade(upgrades[i]);
|
vehicle.addUpgrade(upgrades[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(vehicle, "vrr.livery")) {
|
if (doesEntityDataExist(vehicle, "agrp.livery")) {
|
||||||
let livery = getEntityData(vehicle, "vrr.livery");
|
let livery = getEntityData(vehicle, "agrp.livery");
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
vehicle.setPaintJob(livery);
|
vehicle.setPaintJob(livery);
|
||||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
} else if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
vehicle.livery = livery;
|
vehicle.livery = livery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,7 +291,7 @@ function syncVehicleProperties(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function removeEntityData(entity, dataName) {
|
function removeEntityData(entity, dataName) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
return entity.removeData(dataName);
|
return entity.removeData(dataName);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -300,7 +300,7 @@ function removeEntityData(entity, dataName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function doesEntityDataExist(entity, dataName) {
|
function doesEntityDataExist(entity, dataName) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
return (entity.getData(dataName) != null);
|
return (entity.getData(dataName) != null);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -309,9 +309,9 @@ function doesEntityDataExist(entity, dataName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncCivilianProperties(civilian) {
|
function syncCivilianProperties(civilian) {
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.scale")) {
|
if (doesEntityDataExist(civilian, "agrp.scale")) {
|
||||||
let scaleFactor = getEntityData(civilian, "vrr.scale");
|
let scaleFactor = getEntityData(civilian, "agrp.scale");
|
||||||
let tempMatrix = civilian.matrix;
|
let tempMatrix = civilian.matrix;
|
||||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||||
let tempPosition = civilian.position;
|
let tempPosition = civilian.position;
|
||||||
@@ -321,79 +321,79 @@ function syncCivilianProperties(civilian) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.fightStyle")) {
|
if (doesEntityDataExist(civilian, "agrp.fightStyle")) {
|
||||||
let fightStyle = getEntityData(civilian, "vrr.fightStyle");
|
let fightStyle = getEntityData(civilian, "agrp.fightStyle");
|
||||||
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.walkStyle")) {
|
if (doesEntityDataExist(civilian, "agrp.walkStyle")) {
|
||||||
let walkStyle = getEntityData(civilian, "vrr.walkStyle");
|
let walkStyle = getEntityData(civilian, "agrp.walkStyle");
|
||||||
civilian.walkStyle = walkStyle;
|
civilian.walkStyle = walkStyle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHair")) {
|
||||||
let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair");
|
let bodyPropHair = getEntityData(civilian, "agrp.bodyPropHair");
|
||||||
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHead")) {
|
||||||
let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead");
|
let bodyPropHead = getEntityData(civilian, "agrp.bodyPropHead");
|
||||||
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropEyes")) {
|
||||||
let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes");
|
let bodyPropEyes = getEntityData(civilian, "agrp.bodyPropEyes");
|
||||||
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftHand")) {
|
||||||
let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand");
|
let bodyPropLeftHand = getEntityData(civilian, "agrp.bodyPropLeftHand");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightHand")) {
|
||||||
let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand");
|
let bodyPropRightHand = getEntityData(civilian, "agrp.bodyPropRightHand");
|
||||||
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftWrist")) {
|
||||||
let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist");
|
let bodyPropLeftWrist = getEntityData(civilian, "agrp.bodyPropLeftWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(civilian, "agrp.bodyPropRightWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(civilian, "agrp.bodyPropRightWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHip")) {
|
||||||
let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip");
|
let bodyPropHip = getEntityData(civilian, "agrp.bodyPropHip");
|
||||||
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftFoot")) {
|
||||||
let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot");
|
let bodyPropLeftFoot = getEntityData(civilian, "agrp.bodyPropLeftFoot");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightFoot")) {
|
||||||
let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot");
|
let bodyPropRightFoot = getEntityData(civilian, "agrp.bodyPropRightFoot");
|
||||||
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.anim")) {
|
if (doesEntityDataExist(civilian, "agrp.anim")) {
|
||||||
let animData = getEntityData(vehicle, "vrr.anim");
|
let animData = getEntityData(vehicle, "agrp.anim");
|
||||||
civilian.addAnimation(animData[0], animData[1]);
|
civilian.addAnimation(animData[0], animData[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -407,9 +407,9 @@ function preventDefaultEventAction(event) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncPlayerProperties(player) {
|
function syncPlayerProperties(player) {
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(player, "vrr.scale")) {
|
if (doesEntityDataExist(player, "agrp.scale")) {
|
||||||
let scaleFactor = getEntityData(player, "vrr.scale");
|
let scaleFactor = getEntityData(player, "agrp.scale");
|
||||||
let tempMatrix = player.matrix;
|
let tempMatrix = player.matrix;
|
||||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||||
let tempPosition = player.position;
|
let tempPosition = player.position;
|
||||||
@@ -419,95 +419,95 @@ function syncPlayerProperties(player) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
if(doesEntityDataExist(player, "vrr.fightStyle")) {
|
if (doesEntityDataExist(player, "agrp.fightStyle")) {
|
||||||
let fightStyle = getEntityData(player, "vrr.fightStyle");
|
let fightStyle = getEntityData(player, "agrp.fightStyle");
|
||||||
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(getGame() == VRR_GAME_GTA_SA) {
|
//if(getGame() == VRR_GAME_GTA_SA) {
|
||||||
// if(doesEntityDataExist(player, "vrr.walkStyle")) {
|
// if(doesEntityDataExist(player, "agrp.walkStyle")) {
|
||||||
// let walkStyle = getEntityData(player, "vrr.walkStyle");
|
// let walkStyle = getEntityData(player, "agrp.walkStyle");
|
||||||
// player.walkStyle = walkStyle;
|
// player.walkStyle = walkStyle;
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartHair")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartHair")) {
|
||||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHair");
|
let bodyPartHead = getEntityData(player, "agrp.bodyPartHair");
|
||||||
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartHead")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartHead")) {
|
||||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHead");
|
let bodyPartHead = getEntityData(player, "agrp.bodyPartHead");
|
||||||
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartUpper")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartUpper")) {
|
||||||
let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper");
|
let bodyPartUpper = getEntityData(player, "agrp.bodyPartUpper");
|
||||||
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartLower")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartLower")) {
|
||||||
let bodyPartLower = getEntityData(player, "vrr.bodyPartLower");
|
let bodyPartLower = getEntityData(player, "agrp.bodyPartLower");
|
||||||
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHair")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHair")) {
|
||||||
let bodyPropHair = getEntityData(player, "vrr.bodyPropHair");
|
let bodyPropHair = getEntityData(player, "agrp.bodyPropHair");
|
||||||
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHead")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHead")) {
|
||||||
let bodyPropHead = getEntityData(player, "vrr.bodyPropHead");
|
let bodyPropHead = getEntityData(player, "agrp.bodyPropHead");
|
||||||
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropEyes")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropEyes")) {
|
||||||
let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes");
|
let bodyPropEyes = getEntityData(player, "agrp.bodyPropEyes");
|
||||||
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftHand")) {
|
||||||
let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand");
|
let bodyPropLeftHand = getEntityData(player, "agrp.bodyPropLeftHand");
|
||||||
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightHand")) {
|
||||||
let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand");
|
let bodyPropRightHand = getEntityData(player, "agrp.bodyPropRightHand");
|
||||||
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftWrist")) {
|
||||||
let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist");
|
let bodyPropLeftWrist = getEntityData(player, "agrp.bodyPropLeftWrist");
|
||||||
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(player, "agrp.bodyPropRightWrist");
|
||||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(player, "agrp.bodyPropRightWrist");
|
||||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHip")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHip")) {
|
||||||
let bodyPropHip = getEntityData(player, "vrr.bodyPropHip");
|
let bodyPropHip = getEntityData(player, "agrp.bodyPropHip");
|
||||||
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftFoot")) {
|
||||||
let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot");
|
let bodyPropLeftFoot = getEntityData(player, "agrp.bodyPropLeftFoot");
|
||||||
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightFoot")) {
|
||||||
let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot");
|
let bodyPropRightFoot = getEntityData(player, "agrp.bodyPropRightFoot");
|
||||||
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -516,9 +516,9 @@ function syncPlayerProperties(player) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncObjectProperties(object) {
|
function syncObjectProperties(object) {
|
||||||
if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
if (getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) {
|
||||||
if(doesEntityDataExist(object, "vrr.scale")) {
|
if (doesEntityDataExist(object, "agrp.scale")) {
|
||||||
let scaleFactor = getEntityData(object, "vrr.scale");
|
let scaleFactor = getEntityData(object, "agrp.scale");
|
||||||
let tempMatrix = object.matrix;
|
let tempMatrix = object.matrix;
|
||||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||||
let tempPosition = object.position;
|
let tempPosition = object.position;
|
||||||
@@ -568,13 +568,13 @@ function getPlayerId(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncElementProperties(element) {
|
function syncElementProperties(element) {
|
||||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
if (doesEntityDataExist(element, "agrp.interior")) {
|
||||||
if(typeof element.interior != "undefined") {
|
if (typeof element.interior != "undefined") {
|
||||||
element.interior = getEntityData(element, "vrr.interior");
|
element.interior = getEntityData(element, "agrp.interior");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(element.type) {
|
switch (element.type) {
|
||||||
case ELEMENT_VEHICLE:
|
case ELEMENT_VEHICLE:
|
||||||
syncVehicleProperties(element);
|
syncVehicleProperties(element);
|
||||||
break;
|
break;
|
||||||
@@ -619,23 +619,23 @@ function getScreenHeight() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function openAllGarages() {
|
function openAllGarages() {
|
||||||
switch(getGame()) {
|
switch (getGame()) {
|
||||||
case VRR_GAME_GTA_III:
|
case VRR_GAME_GTA_III:
|
||||||
for(let i=0;i<=26;i++) {
|
for (let i = 0; i <= 26; i++) {
|
||||||
openGarage(i);
|
openGarage(i);
|
||||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_GAME_GTA_VC:
|
case VRR_GAME_GTA_VC:
|
||||||
for(let i=0;i<=32;i++) {
|
for (let i = 0; i <= 32; i++) {
|
||||||
openGarage(i);
|
openGarage(i);
|
||||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_GAME_GTA_SA:
|
case VRR_GAME_GTA_SA:
|
||||||
for(let i=0;i<=44;i++) {
|
for (let i = 0; i <= 44; i++) {
|
||||||
openGarage(i);
|
openGarage(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -648,23 +648,23 @@ function openAllGarages() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function closeAllGarages() {
|
function closeAllGarages() {
|
||||||
switch(getGame()) {
|
switch (getGame()) {
|
||||||
case VRR_GAME_GTA_III:
|
case VRR_GAME_GTA_III:
|
||||||
for(let i=0;i<=26;i++) {
|
for (let i = 0; i <= 26; i++) {
|
||||||
closeGarage(i);
|
closeGarage(i);
|
||||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_GAME_GTA_VC:
|
case VRR_GAME_GTA_VC:
|
||||||
for(let i=0;i<=32;i++) {
|
for (let i = 0; i <= 32; i++) {
|
||||||
closeGarage(i);
|
closeGarage(i);
|
||||||
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
game.NO_SPECIAL_CAMERA_FOR_THIS_GARAGE(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_GAME_GTA_SA:
|
case VRR_GAME_GTA_SA:
|
||||||
for(let i=0;i<=44;i++) {
|
for (let i = 0; i <= 44; i++) {
|
||||||
closeGarage(i);
|
closeGarage(i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -683,7 +683,7 @@ function setPedInvincible(ped, state) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setPedLookAt(ped, position) {
|
function setPedLookAt(ped, position) {
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
ped.lookAt(position, 10000);
|
ped.lookAt(position, 10000);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
385
scripts/client/netevents.js
Normal file
@@ -0,0 +1,385 @@
|
|||||||
|
// ===========================================================================
|
||||||
|
// Vortrex's Roleplay Resource
|
||||||
|
// https://github.com/VortrexFTW/gtac_roleplay
|
||||||
|
// ===========================================================================
|
||||||
|
// FILE: netevents.js
|
||||||
|
// DESC: Provides server communication and cross-endpoint network events
|
||||||
|
// TYPE: Client (JavaScript)
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function initNetworkEventsScript() {
|
||||||
|
logToConsole(LOG_DEBUG, "[VRR.Server]: Initializing server script ...");
|
||||||
|
addAllNetworkEventHandlers();
|
||||||
|
logToConsole(LOG_DEBUG, "[VRR.Server]: Server script initialized!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function addAllNetworkEventHandlers() {
|
||||||
|
logToConsole(LOG_DEBUG, "[VRR.Server]: Adding network handlers ...");
|
||||||
|
|
||||||
|
// Chat history
|
||||||
|
addNetworkEventHandler("m", receiveChatBoxMessageFromServer); // Not prefixed with VRR to make it as small as possible
|
||||||
|
addNetworkEventHandler("agrp.chatScrollLines", setChatScrollLines);
|
||||||
|
addNetworkEventHandler("agrp.chatAutoHideDelay", setChatAutoHideDelay);
|
||||||
|
|
||||||
|
// Messaging (like textdraws and stuff)
|
||||||
|
addNetworkEventHandler("agrp.smallGameMessage", showSmallGameMessage);
|
||||||
|
|
||||||
|
// Job
|
||||||
|
addNetworkEventHandler("agrp.job", receiveJobFromServer);
|
||||||
|
addNetworkEventHandler("agrp.working", setLocalPlayerWorkingState);
|
||||||
|
addNetworkEventHandler("agrp.jobType", setLocalPlayerJobType);
|
||||||
|
addNetworkEventHandler("agrp.showJobRouteLocation", showJobRouteLocation);
|
||||||
|
addNetworkEventHandler("agrp.hideJobRouteLocation", hideJobRouteLocation);
|
||||||
|
|
||||||
|
// Local player states and values
|
||||||
|
addNetworkEventHandler("agrp.restoreCamera", restoreLocalCamera);
|
||||||
|
addNetworkEventHandler("agrp.cameraLookAt", setLocalCameraLookAt);
|
||||||
|
addNetworkEventHandler("agrp.freeze", setLocalPlayerFrozenState);
|
||||||
|
addNetworkEventHandler("agrp.control", setLocalPlayerControlState);
|
||||||
|
addNetworkEventHandler("agrp.fadeCamera", fadeLocalCamera);
|
||||||
|
addNetworkEventHandler("agrp.removeFromVehicle", removeLocalPlayerFromVehicle);
|
||||||
|
addNetworkEventHandler("agrp.clearWeapons", clearLocalPlayerWeapons);
|
||||||
|
addNetworkEventHandler("agrp.giveWeapon", giveLocalPlayerWeapon);
|
||||||
|
addNetworkEventHandler("agrp.position", setLocalPlayerPosition);
|
||||||
|
addNetworkEventHandler("agrp.heading", setLocalPlayerHeading);
|
||||||
|
addNetworkEventHandler("agrp.interior", setLocalPlayerInterior);
|
||||||
|
addNetworkEventHandler("agrp.spawned", onServerSpawnedLocalPlayer);
|
||||||
|
addNetworkEventHandler("agrp.money", setLocalPlayerCash);
|
||||||
|
addNetworkEventHandler("agrp.armour", setLocalPlayerArmour);
|
||||||
|
addNetworkEventHandler("agrp.localPlayerSkin", setLocalPlayerSkin);
|
||||||
|
addNetworkEventHandler("agrp.pedSpeak", makeLocalPlayerPedSpeak);
|
||||||
|
addNetworkEventHandler("agrp.infiniteRun", setLocalPlayerInfiniteRun);
|
||||||
|
addNetworkEventHandler("agrp.playerCop", setLocalPlayerAsCopState);
|
||||||
|
addNetworkEventHandler("agrp.health", setLocalPlayerHealth);
|
||||||
|
addNetworkEventHandler("agrp.wantedLevel", setLocalPlayerWantedLevel);
|
||||||
|
addNetworkEventHandler("agrp.playerPedId", sendLocalPlayerNetworkIdToServer);
|
||||||
|
addNetworkEventHandler("agrp.ped", setLocalPlayerPedPartsAndProps);
|
||||||
|
addNetworkEventHandler("agrp.spawn", serverRequestedLocalPlayerSpawn);
|
||||||
|
addNetworkEventHandler("agrp.clearPedState", clearLocalPedState);
|
||||||
|
addNetworkEventHandler("agrp.drunkEffect", setLocalPlayerDrunkEffect);
|
||||||
|
|
||||||
|
// Vehicle
|
||||||
|
addNetworkEventHandler("agrp.vehicle", receiveVehicleFromServer);
|
||||||
|
addNetworkEventHandler("agrp.veh.lights", setVehicleLights);
|
||||||
|
addNetworkEventHandler("agrp.veh.engine", setVehicleEngine);
|
||||||
|
addNetworkEventHandler("agrp.veh.repair", repairVehicle);
|
||||||
|
|
||||||
|
// Radio
|
||||||
|
addNetworkEventHandler("agrp.radioStream", playStreamingRadio);
|
||||||
|
addNetworkEventHandler("agrp.audioFileStream", playAudioFile);
|
||||||
|
addNetworkEventHandler("agrp.stopRadioStream", stopStreamingRadio);
|
||||||
|
addNetworkEventHandler("agrp.radioVolume", setStreamingRadioVolume);
|
||||||
|
|
||||||
|
// Key Bindings
|
||||||
|
addNetworkEventHandler("agrp.delKeyBind", unBindAccountKey);
|
||||||
|
addNetworkEventHandler("agrp.addKeyBind", bindAccountKey);
|
||||||
|
addNetworkEventHandler("agrp.clearKeyBinds", clearKeyBinds);
|
||||||
|
|
||||||
|
// Weapon Damage
|
||||||
|
addNetworkEventHandler("agrp.weaponDamageEnabled", setPlayerWeaponDamageEnabled);
|
||||||
|
addNetworkEventHandler("agrp.weaponDamageEvent", setPlayerWeaponDamageEvent);
|
||||||
|
|
||||||
|
// Business
|
||||||
|
addNetworkEventHandler("agrp.business", receiveBusinessFromServer);
|
||||||
|
|
||||||
|
// House
|
||||||
|
addNetworkEventHandler("agrp.house", receiveHouseFromServer);
|
||||||
|
|
||||||
|
// GPS
|
||||||
|
addNetworkEventHandler("agrp.showGPSBlip", showGPSLocation);
|
||||||
|
|
||||||
|
// Locale
|
||||||
|
addNetworkEventHandler("agrp.locale", setLocale);
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
addNetworkEventHandler("agrp.mouseCursor", toggleMouseCursor);
|
||||||
|
addNetworkEventHandler("agrp.clearPeds", clearLocalPlayerOwnedPeds);
|
||||||
|
addNetworkEventHandler("agrp.passenger", enterVehicleAsPassenger);
|
||||||
|
addNetworkEventHandler("agrp.ambience", setCityAmbienceState);
|
||||||
|
addNetworkEventHandler("agrp.runCode", runClientCode);
|
||||||
|
addNetworkEventHandler("agrp.minuteDuration", setMinuteDuration);
|
||||||
|
addNetworkEventHandler("agrp.snow", setSnowState);
|
||||||
|
addNetworkEventHandler("agrp.enterPropertyKey", setEnterPropertyKey);
|
||||||
|
addNetworkEventHandler("agrp.skinSelect", toggleSkinSelect);
|
||||||
|
addNetworkEventHandler("agrp.hotbar", updatePlayerHotBar);
|
||||||
|
addNetworkEventHandler("agrp.showItemActionDelay", showItemActionDelay);
|
||||||
|
addNetworkEventHandler("agrp.set2DRendering", set2DRendering);
|
||||||
|
addNetworkEventHandler("agrp.logLevel", setLogLevel);
|
||||||
|
addNetworkEventHandler("agrp.anim", makePedPlayAnimation);
|
||||||
|
addNetworkEventHandler("agrp.stopAnim", makePedStopAnimation);
|
||||||
|
addNetworkEventHandler("agrp.forceAnim", forcePedAnimation);
|
||||||
|
addNetworkEventHandler("agrp.clientInfo", serverRequestedClientInfo);
|
||||||
|
addNetworkEventHandler("agrp.interiorLights", updateInteriorLightsState);
|
||||||
|
addNetworkEventHandler("agrp.cutsceneInterior", setCutsceneInterior);
|
||||||
|
addNetworkEventHandler("agrp.syncElement", forceSyncElementProperties);
|
||||||
|
addNetworkEventHandler("agrp.elementPosition", setElementPosition);
|
||||||
|
addNetworkEventHandler("agrp.elementCollisions", setElementCollisionsEnabled);
|
||||||
|
addNetworkEventHandler("agrp.vehBuyState", setVehiclePurchaseState);
|
||||||
|
addNetworkEventHandler("agrp.holdObject", makePedHoldObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function sendResourceReadySignalToServer() {
|
||||||
|
sendNetworkEventToServer("agrp.clientReady");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function sendResourceStartedSignalToServer() {
|
||||||
|
sendNetworkEventToServer("agrp.clientStarted");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function sendResourceStoppedSignalToServer() {
|
||||||
|
if (isConnected) {
|
||||||
|
sendNetworkEventToServer("agrp.clientStopped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderLabels = labelState;
|
||||||
|
renderSmallGameMessage = smallGameMessageState;
|
||||||
|
renderScoreBoard = scoreboardState;
|
||||||
|
renderHotBar = hotBarState;
|
||||||
|
renderItemActionDelay = itemActionDelayState;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
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("agrp.useKeyBind", key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function tellServerPlayerArrivedAtJobRouteLocation() {
|
||||||
|
sendNetworkEventToServer("agrp.arrivedAtJobRouteLocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function tellServerItemActionDelayComplete() {
|
||||||
|
sendNetworkEventToServer("agrp.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("agrp.clientInfo", clientVersion, game.width, game.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function sendServerNewAFKStatus(state) {
|
||||||
|
sendNetworkEventToServer("agrp.afk", state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function anchorBoat(vehicleId) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setEnterPropertyKey(key) {
|
||||||
|
enterPropertyKey = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function serverRequestedClientInfo() {
|
||||||
|
sendServerClientInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function updateInteriorLightsState(state) {
|
||||||
|
interiorLightsEnabled = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function forceSyncElementProperties(elementId) {
|
||||||
|
if (getElementFromId(elementId) == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
syncElementProperties(getElementFromId(elementId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setElementCollisionsEnabled(elementId, state) {
|
||||||
|
if (getElementFromId(elementId) == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
getElementFromId(elementId).collisionsEnabled = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setLocalPlayerArmour(armour) {
|
||||||
|
if (typeof localPlayer.armour != "undefined") {
|
||||||
|
localPlayer.armour = armour;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setLocalPlayerWantedLevel(wantedLevel) {
|
||||||
|
forceWantedLevel = toInteger(wantedLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setLogLevel(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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setLocalPlayerSkin(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])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function sendLocalPlayerNetworkIdToServer() {
|
||||||
|
sendNetworkEventToServer("agrp.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("agrp.localeSelect", localeId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
function processNPCMovement(npc) {
|
function processNPCMovement(npc) {
|
||||||
//if(npc.isSyncer == true) {
|
//if(npc.isSyncer == true) {
|
||||||
if(getEntityData(npc, "vrr.lookAtClosestPlayer") == true) {
|
if (getEntityData(npc, "agrp.lookAtClosestPlayer") == true) {
|
||||||
let closestPlayer = getClosestPlayer(getElementPosition(npc.id));
|
let closestPlayer = getClosestPlayer(getElementPosition(npc.id));
|
||||||
setPedLookAt(npc, getElementPosition(closestPlayer.id));
|
setPedLookAt(npc, getElementPosition(closestPlayer.id));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: scoreboard.js
|
|
||||||
// DESC: Provides scoreboard features and rendering
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
let scoreBoardTitleFont = null;
|
|
||||||
let scoreBoardListFont = null;
|
|
||||||
|
|
||||||
let pausedColour = COLOUR_RED;
|
|
||||||
|
|
||||||
let scoreboardKey = SDLK_TAB;
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initScoreBoardScript() {
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.ScoreBoard]: Initializing scoreboard script ...");
|
|
||||||
scoreBoardTitleFont = initScoreBoardTitleFont();
|
|
||||||
scoreBoardListFont = initScoreBoardListFont();
|
|
||||||
logToConsole(LOG_DEBUG, "[VRR.ScoreBoard]: Scoreboard script initialized!");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initScoreBoardTitleFont() {
|
|
||||||
return lucasFont.createDefaultFont(22.0, "Roboto", "Regular");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initScoreBoardListFont() {
|
|
||||||
return lucasFont.createDefaultFont(12.0, "Roboto", "Light");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function processScoreBoardRendering() {
|
|
||||||
if(isAnyGUIActive()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(renderScoreBoard) {
|
|
||||||
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);
|
|
||||||
scoreBoardTitleFont.render("PLAYERS", [game.width/2, scoreboardStart-50], 0, 0.5, 0.0, scoreBoardTitleFont.size, COLOUR_WHITE, false, false, false, true);
|
|
||||||
|
|
||||||
titleSize = scoreBoardTitleFont.measure("____________________________", game.width, 0.0, 1.0, 10, false, false);
|
|
||||||
scoreBoardTitleFont.render("____________________________", [game.width/2, scoreboardStart-35], 0, 0.5, 0.0, scoreBoardTitleFont.size, COLOUR_WHITE, false, false, false, true);
|
|
||||||
|
|
||||||
let clients = getClients();
|
|
||||||
for(let i in clients) {
|
|
||||||
if(!clients[i].console) {
|
|
||||||
let name = clients[i].name;
|
|
||||||
let colour = COLOUR_WHITE;
|
|
||||||
let paused = false;
|
|
||||||
let ping = "-1";
|
|
||||||
|
|
||||||
if(typeof playerNames[clients[i].name] != "undefined") {
|
|
||||||
name = playerNames[clients[i].name];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(typeof playerPaused[clients[i].name] != "undefined") {
|
|
||||||
paused = playerPaused[clients[i].name];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(typeof playerColours[clients[i].name] != "undefined") {
|
|
||||||
colour = playerColours[clients[i].name];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(typeof playerPing[clients[i].name] != "undefined") {
|
|
||||||
ping = toString(playerPing[clients[i].name]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Player ID
|
|
||||||
let text = String(clients[i].index);
|
|
||||||
let size = scoreBoardListFont.measure(text, 75, 0.0, 1.0, 10, false, false);
|
|
||||||
scoreBoardListFont.render(text, [game.width/2-100, scoreboardStart + (i*20)], 0, 0.5, 0.0, scoreBoardListFont.size, COLOUR_WHITE, false, false, false, true);
|
|
||||||
|
|
||||||
// Player Name
|
|
||||||
text = name;
|
|
||||||
size = scoreBoardListFont.measure(text, 100, 0.0, 1.0, 10, false, false);
|
|
||||||
scoreBoardListFont.render(text, [game.width/2, scoreboardStart + (i*20)], 0, 0.5, 0.0, scoreBoardListFont.size, colour, false, false, false, true);
|
|
||||||
|
|
||||||
// Ping
|
|
||||||
text = ping;
|
|
||||||
size = scoreBoardListFont.measure(ping, 75, 0.0, 1.0, 10, false, false);
|
|
||||||
scoreBoardListFont.render(ping, [game.width/2+100, scoreboardStart + (i*20)], 0, 0.5, 0.0, scoreBoardListFont.size, COLOUR_WHITE, false, false, false, true);
|
|
||||||
|
|
||||||
// PAUSED Status (depends on resource "afk")
|
|
||||||
if(paused == true) {
|
|
||||||
size = scoreBoardListFont.measure("PAUSED", 100, 0.0, 1.0, 10, false, false);
|
|
||||||
scoreBoardListFont.render("PAUSED", [game.width/2+200, scoreboardStart + (i*20)], 0, 0.5, 0.0, scoreBoardListFont.size, pausedColour, false, false, false, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,416 +0,0 @@
|
|||||||
// ===========================================================================
|
|
||||||
// Vortrex's Roleplay Resource
|
|
||||||
// https://github.com/VortrexFTW/gtac_roleplay
|
|
||||||
// ===========================================================================
|
|
||||||
// FILE: server.js
|
|
||||||
// DESC: Provides server communication and cross-endpoint operations
|
|
||||||
// TYPE: Client (JavaScript)
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function initServerScript() {
|
|
||||||
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 ...");
|
|
||||||
|
|
||||||
// Chat history
|
|
||||||
addNetworkEventHandler("m", receiveChatBoxMessageFromServer); // Not prefixed with VRR to make it as small as possible
|
|
||||||
addNetworkEventHandler("vrr.chatScrollLines", setChatScrollLines);
|
|
||||||
addNetworkEventHandler("vrr.chatAutoHideDelay", setChatAutoHideDelay);
|
|
||||||
|
|
||||||
// Messaging (like textdraws and stuff)
|
|
||||||
addNetworkEventHandler("vrr.smallGameMessage", showSmallGameMessage);
|
|
||||||
|
|
||||||
// Job
|
|
||||||
addNetworkEventHandler("vrr.job", receiveJobFromServer);
|
|
||||||
addNetworkEventHandler("vrr.working", setLocalPlayerWorkingState);
|
|
||||||
addNetworkEventHandler("vrr.jobType", setLocalPlayerJobType);
|
|
||||||
addNetworkEventHandler("vrr.showJobRouteLocation", showJobRouteLocation);
|
|
||||||
addNetworkEventHandler("vrr.hideJobRouteLocation", hideJobRouteLocation);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Vehicle
|
|
||||||
addNetworkEventHandler("vrr.vehicle", receiveVehicleFromServer);
|
|
||||||
addNetworkEventHandler("vrr.veh.lights", setVehicleLights);
|
|
||||||
addNetworkEventHandler("vrr.veh.engine", setVehicleEngine);
|
|
||||||
addNetworkEventHandler("vrr.veh.repair", repairVehicle);
|
|
||||||
|
|
||||||
// Radio
|
|
||||||
addNetworkEventHandler("vrr.radioStream", playStreamingRadio);
|
|
||||||
addNetworkEventHandler("vrr.audioFileStream", playAudioFile);
|
|
||||||
addNetworkEventHandler("vrr.stopRadioStream", stopStreamingRadio);
|
|
||||||
addNetworkEventHandler("vrr.radioVolume", setStreamingRadioVolume);
|
|
||||||
|
|
||||||
// Key Bindings
|
|
||||||
addNetworkEventHandler("vrr.delKeyBind", unBindAccountKey);
|
|
||||||
addNetworkEventHandler("vrr.addKeyBind", bindAccountKey);
|
|
||||||
addNetworkEventHandler("vrr.clearKeyBinds", clearKeyBinds);
|
|
||||||
|
|
||||||
// Weapon Damage
|
|
||||||
addNetworkEventHandler("vrr.weaponDamageEnabled", setPlayerWeaponDamageEnabled);
|
|
||||||
addNetworkEventHandler("vrr.weaponDamageEvent", setPlayerWeaponDamageEvent);
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
// Business
|
|
||||||
addNetworkEventHandler("vrr.business", receiveBusinessFromServer);
|
|
||||||
|
|
||||||
// House
|
|
||||||
addNetworkEventHandler("vrr.house", receiveHouseFromServer);
|
|
||||||
|
|
||||||
// GPS
|
|
||||||
addNetworkEventHandler("vrr.showGPSBlip", showGPSLocation);
|
|
||||||
|
|
||||||
// Locale
|
|
||||||
addNetworkEventHandler("vrr.locale", setLocale);
|
|
||||||
addNetworkEventHandler("vrr.localeChooser", toggleLocaleChooserGUI);
|
|
||||||
|
|
||||||
// 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");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function sendResourceStartedSignalToServer() {
|
|
||||||
sendNetworkEventToServer("vrr.clientStarted");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function sendResourceStoppedSignalToServer() {
|
|
||||||
if(isConnected) {
|
|
||||||
sendNetworkEventToServer("vrr.clientStopped");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
renderLabels = labelState;
|
|
||||||
renderSmallGameMessage = smallGameMessageState;
|
|
||||||
renderScoreBoard = scoreboardState;
|
|
||||||
renderHotBar = hotBarState;
|
|
||||||
renderItemActionDelay = itemActionDelayState;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function tellServerPlayerArrivedAtJobRouteLocation() {
|
|
||||||
sendNetworkEventToServer("vrr.arrivedAtJobRouteLocation");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function tellServerItemActionDelayComplete() {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function sendServerNewAFKStatus(state) {
|
|
||||||
sendNetworkEventToServer("vrr.afk", state);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function anchorBoat(vehicleId) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setEnterPropertyKey(key) {
|
|
||||||
enterPropertyKey = key;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function serverRequestedClientInfo() {
|
|
||||||
sendServerClientInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function updateInteriorLightsState(state) {
|
|
||||||
interiorLightsEnabled = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function forceSyncElementProperties(elementId) {
|
|
||||||
if(getElementFromId(elementId) == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
syncElementProperties(getElementFromId(elementId));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setElementCollisionsEnabled(elementId, state) {
|
|
||||||
if(getElementFromId(elementId) == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
getElementFromId(elementId).collisionsEnabled = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setLocalPlayerArmour(armour) {
|
|
||||||
if(typeof localPlayer.armour != "undefined") {
|
|
||||||
localPlayer.armour = armour;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setLocalPlayerWantedLevel(wantedLevel) {
|
|
||||||
forceWantedLevel = toInteger(wantedLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setLogLevel(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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setLocalPlayerSkin(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])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function sendLocalPlayerNetworkIdToServer() {
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
@@ -44,53 +44,53 @@ function loadSkinSelectMessageFontBottom() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function processSkinSelectKeyPress(keyCode) {
|
function processSkinSelectKeyPress(keyCode) {
|
||||||
if(usingSkinSelector) {
|
if (usingSkinSelector) {
|
||||||
if(keyCode == SDLK_PAGEUP) {
|
if (keyCode == SDLK_PAGEUP) {
|
||||||
if(skinSelectorIndex >= allowedSkins.length-1) {
|
if (skinSelectorIndex >= allowedSkins.length - 1) {
|
||||||
skinSelectorIndex = 1;
|
skinSelectorIndex = 1;
|
||||||
} else {
|
} else {
|
||||||
skinSelectorIndex = skinSelectorIndex + 1;
|
skinSelectorIndex = skinSelectorIndex + 1;
|
||||||
}
|
}
|
||||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||||
if(natives.isModelInCdimage(skinId)) {
|
if (natives.isModelInCdimage(skinId)) {
|
||||||
natives.requestModel(skinId);
|
natives.requestModel(skinId);
|
||||||
natives.loadAllObjectsNow();
|
natives.loadAllObjectsNow();
|
||||||
if(natives.hasModelLoaded(skinId)) {
|
if (natives.hasModelLoaded(skinId)) {
|
||||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||||
}
|
}
|
||||||
} else if(keyCode == SDLK_PAGEDOWN) {
|
} else if (keyCode == SDLK_PAGEDOWN) {
|
||||||
if(skinSelectorIndex <= 0) {
|
if (skinSelectorIndex <= 0) {
|
||||||
skinSelectorIndex = allowedSkins.length-1;
|
skinSelectorIndex = allowedSkins.length - 1;
|
||||||
} else {
|
} else {
|
||||||
skinSelectorIndex = skinSelectorIndex - 1;
|
skinSelectorIndex = skinSelectorIndex - 1;
|
||||||
}
|
}
|
||||||
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
logToConsole(LOG_DEBUG, `Switching to skin ${allowedSkins[skinSelectorIndex][1]} (Index: ${skinSelectorIndex}, Skin: ${allowedSkins[skinSelectorIndex][0]})`);
|
||||||
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||||
if(natives.isModelInCdimage(skinId)) {
|
if (natives.isModelInCdimage(skinId)) {
|
||||||
natives.requestModel(skinId);
|
natives.requestModel(skinId);
|
||||||
natives.loadAllObjectsNow();
|
natives.loadAllObjectsNow();
|
||||||
if(natives.hasModelLoaded(skinId)) {
|
if (natives.hasModelLoaded(skinId)) {
|
||||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
|
||||||
}
|
}
|
||||||
} else if(keyCode == SDLK_RETURN) {
|
} else if (keyCode == SDLK_RETURN) {
|
||||||
sendNetworkEventToServer("vrr.skinSelected", skinSelectorIndex);
|
sendNetworkEventToServer("agrp.skinSelected", skinSelectorIndex);
|
||||||
toggleSkinSelect(false);
|
toggleSkinSelect(false);
|
||||||
return true;
|
return true;
|
||||||
} else if(keyCode == SDLK_BACKSPACE) {
|
} else if (keyCode == SDLK_BACKSPACE) {
|
||||||
sendNetworkEventToServer("vrr.skinSelected", -1);
|
sendNetworkEventToServer("agrp.skinSelected", -1);
|
||||||
toggleSkinSelect(false);
|
toggleSkinSelect(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -101,11 +101,11 @@ function processSkinSelectKeyPress(keyCode) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function processSkinSelectRendering() {
|
function processSkinSelectRendering() {
|
||||||
if(usingSkinSelector) {
|
if (usingSkinSelector) {
|
||||||
if(skinSelectMessageFontTop != null && skinSelectMessageFontBottom != null) {
|
if (skinSelectMessageFontTop != null && skinSelectMessageFontBottom != null) {
|
||||||
if(skinSelectMessageTextTop != "" && skinSelectMessageTextBottom != "") {
|
if (skinSelectMessageTextTop != "" && skinSelectMessageTextBottom != "") {
|
||||||
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, game.height-100], game.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
|
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);
|
skinSelectMessageFontBottom.render(skinSelectMessageTextBottom, [0, game.height - 65], game.width, 0.5, 0.0, skinSelectMessageFontBottom.size, skinSelectMessageColourBottom, true, true, false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,9 +114,9 @@ function processSkinSelectRendering() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function toggleSkinSelect(state) {
|
function toggleSkinSelect(state) {
|
||||||
if(state) {
|
if (state) {
|
||||||
skinSelectorIndex = getAllowedSkinIndexFromSkin(localPlayer.skin);
|
skinSelectorIndex = getAllowedSkinIndexFromSkin(localPlayer.skin);
|
||||||
if(!skinSelectorIndex) {
|
if (!skinSelectorIndex) {
|
||||||
skinSelectorIndex = 0;
|
skinSelectorIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,19 +124,19 @@ function toggleSkinSelect(state) {
|
|||||||
skinSelectPosition = localPlayer.position;
|
skinSelectPosition = localPlayer.position;
|
||||||
skinSelectHeading = localPlayer.heading;
|
skinSelectHeading = localPlayer.heading;
|
||||||
|
|
||||||
if(isCustomCameraSupported()) {
|
if (isCustomCameraSupported()) {
|
||||||
let tempPosition = localPlayer.position;
|
let tempPosition = localPlayer.position;
|
||||||
tempPosition.z += 0.5;
|
tempPosition.z += 0.5;
|
||||||
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
|
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
|
||||||
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
|
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
let skinId = allowedSkins[skinSelectorIndex][0];
|
let skinId = allowedSkins[skinSelectorIndex][0];
|
||||||
if(natives.isModelInCdimage(skinId)) {
|
if (natives.isModelInCdimage(skinId)) {
|
||||||
natives.requestModel(skinId);
|
natives.requestModel(skinId);
|
||||||
natives.loadAllObjectsNow();
|
natives.loadAllObjectsNow();
|
||||||
if(natives.hasModelLoaded(skinId)) {
|
if (natives.hasModelLoaded(skinId)) {
|
||||||
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
natives.changePlayerModel(natives.getPlayerId(), skinId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,8 @@
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function initClientScripts() {
|
function initClientScripts() {
|
||||||
initGUIScript();
|
|
||||||
initNameTagScript();
|
|
||||||
initScoreBoardScript();
|
|
||||||
initMessagingScript();
|
initMessagingScript();
|
||||||
initServerScript();
|
initNetworkEventsScript();
|
||||||
initLogoScript();
|
|
||||||
initLabelScript();
|
|
||||||
initChatBoxScript();
|
initChatBoxScript();
|
||||||
initAFKScript();
|
initAFKScript();
|
||||||
initKeyBindScript();
|
initKeyBindScript();
|
||||||
@@ -25,8 +20,8 @@ function initClientScripts() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setUpInitialGame() {
|
function setUpInitialGame() {
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA III ...");
|
logToConsole(LOG_DEBUG | LOG_WARN, "Setting up initial game stuff for GTA III ...");
|
||||||
|
|
||||||
// Turn off unlimited sprint
|
// Turn off unlimited sprint
|
||||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||||
@@ -44,8 +39,8 @@ function setUpInitialGame() {
|
|||||||
|
|
||||||
// Provided by mouse camera script (mousecam.js)
|
// Provided by mouse camera script (mousecam.js)
|
||||||
SetStandardControlsEnabled(true);
|
SetStandardControlsEnabled(true);
|
||||||
} else if(getGame() == VRR_GAME_GTA_VC) {
|
} else if (getGame() == VRR_GAME_GTA_VC) {
|
||||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA Vice City ...");
|
logToConsole(LOG_DEBUG | LOG_WARN, "Setting up initial game stuff for GTA Vice City ...");
|
||||||
|
|
||||||
// Turn off unlimited sprint
|
// Turn off unlimited sprint
|
||||||
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
game.SET_PLAYER_NEVER_GETS_TIRED(game.GET_PLAYER_ID(), 0);
|
||||||
@@ -87,8 +82,8 @@ function setUpInitialGame() {
|
|||||||
|
|
||||||
// Provided by mouse camera script (mousecam.js)
|
// Provided by mouse camera script (mousecam.js)
|
||||||
SetStandardControlsEnabled(true);
|
SetStandardControlsEnabled(true);
|
||||||
} else if(getGame() == VRR_GAME_GTA_SA) {
|
} else if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
logToConsole(LOG_DEBUG|LOG_WARN, "Setting up initial game stuff for GTA San Andreas ...");
|
logToConsole(LOG_DEBUG | LOG_WARN, "Setting up initial game stuff for GTA San Andreas ...");
|
||||||
// Turn weapon skills down a bit
|
// Turn weapon skills down a bit
|
||||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SKILL, 400);
|
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SKILL, 400);
|
||||||
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SILENCED_SKILL, 400);
|
game.setGameStat(STAT_WEAPONTYPE_PISTOL_SILENCED_SKILL, 400);
|
||||||
@@ -124,7 +119,7 @@ function setUpInitialGame() {
|
|||||||
|
|
||||||
// Disables taxi/vigilante/etc and other start mission triggers
|
// Disables taxi/vigilante/etc and other start mission triggers
|
||||||
game.onMission = true;
|
game.onMission = true;
|
||||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
} else if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
natives.allowEmergencyServices(false);
|
natives.allowEmergencyServices(false);
|
||||||
natives.setCreateRandomCops(true);
|
natives.setCreateRandomCops(true);
|
||||||
natives.setMaxWantedLevel(0);
|
natives.setMaxWantedLevel(0);
|
||||||
@@ -186,7 +181,7 @@ function setUpInitialGame() {
|
|||||||
|
|
||||||
// Some last steps
|
// Some last steps
|
||||||
//natives.loadAllObjectsNow();
|
//natives.loadAllObjectsNow();
|
||||||
} else if(getGame() == VRR_GAME_MAFIA_ONE) {
|
} else if (getGame() == VRR_GAME_MAFIA_ONE) {
|
||||||
game.mapEnabled = false;
|
game.mapEnabled = false;
|
||||||
game.setTrafficEnabled(false);
|
game.setTrafficEnabled(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,37 +8,37 @@
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function processSync(event, deltaTime) {
|
function processSync(event, deltaTime) {
|
||||||
if(localPlayer != null) {
|
if (localPlayer != null) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
sendNetworkEventToServer("vrr.plr.pos", (localPlayer.vehicle != null) ? localPlayer.vehicle.position : localPlayer.position);
|
sendNetworkEventToServer("agrp.plr.pos", (localPlayer.vehicle != null) ? localPlayer.vehicle.position : localPlayer.position);
|
||||||
sendNetworkEventToServer("vrr.plr.rot", (localPlayer.vehicle != null) ? localPlayer.vehicle.heading : localPlayer.heading);
|
sendNetworkEventToServer("agrp.plr.rot", (localPlayer.vehicle != null) ? localPlayer.vehicle.heading : localPlayer.heading);
|
||||||
|
|
||||||
//if(localPlayer.vehicle != null) {
|
//if(localPlayer.vehicle != null) {
|
||||||
// sendNetworkEventToServer("vrr.veh.pos", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.position);
|
// sendNetworkEventToServer("agrp.veh.pos", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.position);
|
||||||
// sendNetworkEventToServer("vrr.veh.rot", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.heading);
|
// sendNetworkEventToServer("agrp.veh.rot", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.heading);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(localPlayer.health <= 0) {
|
if (localPlayer.health <= 0) {
|
||||||
if(!calledDeathEvent) {
|
if (!calledDeathEvent) {
|
||||||
logToConsole(LOG_DEBUG, `Local player died`);
|
logToConsole(LOG_DEBUG, `Local player died`);
|
||||||
localPlayer.clearWeapons();
|
localPlayer.clearWeapons();
|
||||||
calledDeathEvent = true;
|
calledDeathEvent = true;
|
||||||
sendNetworkEventToServer("vrr.playerDeath");
|
sendNetworkEventToServer("agrp.playerDeath");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(localPlayer.health <= 0) {
|
if (localPlayer.health <= 0) {
|
||||||
if(!calledDeathEvent) {
|
if (!calledDeathEvent) {
|
||||||
logToConsole(LOG_DEBUG, `Local player died`);
|
logToConsole(LOG_DEBUG, `Local player died`);
|
||||||
localPlayer.clearWeapons();
|
localPlayer.clearWeapons();
|
||||||
calledDeathEvent = true;
|
calledDeathEvent = true;
|
||||||
sendNetworkEventToServer("vrr.playerDeath");
|
sendNetworkEventToServer("agrp.playerDeath");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(streamingRadioElement) {
|
if (streamingRadioElement) {
|
||||||
streamingRadio.position = getElementPosition(streamingRadioElement.id);
|
streamingRadio.position = getElementPosition(streamingRadioElement.id);
|
||||||
//streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position);
|
//streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position);
|
||||||
}
|
}
|
||||||
@@ -53,20 +53,20 @@ function setVehicleEngine(vehicleId, state) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleLights(vehicleId, state) {
|
function setVehicleLights(vehicleId, state) {
|
||||||
if(getGame() != VRR_GAME_MAFIA_ONE) {
|
if (getGame() != VRR_GAME_MAFIA_ONE) {
|
||||||
if(!state) {
|
if (!state) {
|
||||||
getElementFromId(vehicleId).lightStatus = 2;
|
getElementFromId(vehicleId).lightStatus = 2;
|
||||||
} else {
|
} else {
|
||||||
getElementFromId(vehicleId).lightStatus = 1;
|
getElementFromId(vehicleId).lightStatus = 1;
|
||||||
}
|
}
|
||||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
} else if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(!state) {
|
if (!state) {
|
||||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
||||||
} else {
|
} else {
|
||||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(!state) {
|
if (!state) {
|
||||||
getElementFromId(vehicleId).lights = false;
|
getElementFromId(vehicleId).lights = false;
|
||||||
} else {
|
} else {
|
||||||
getElementFromId(vehicleId).lights = true;
|
getElementFromId(vehicleId).lights = true;
|
||||||
@@ -83,72 +83,72 @@ function repairVehicle(syncId) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncVehicleProperties(vehicle) {
|
function syncVehicleProperties(vehicle) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
if (doesEntityDataExist(vehicle, "agrp.lights")) {
|
||||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
let lightStatus = getEntityData(vehicle, "agrp.lights");
|
||||||
if(!lightStatus) {
|
if (!lightStatus) {
|
||||||
vehicle.lightStatus = 2;
|
vehicle.lightStatus = 2;
|
||||||
} else {
|
} else {
|
||||||
vehicle.lightStatus = 1;
|
vehicle.lightStatus = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.invincible")) {
|
if (doesEntityDataExist(vehicle, "agrp.invincible")) {
|
||||||
let invincible = getEntityData(vehicle, "vrr.invincible");
|
let invincible = getEntityData(vehicle, "agrp.invincible");
|
||||||
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
element.setProofs(invincible, invincible, invincible, invincible, invincible);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.panelStatus")) {
|
||||||
let panelsStatus = getEntityData(vehicle, "vrr.panelStatus");
|
let panelsStatus = getEntityData(vehicle, "agrp.panelStatus");
|
||||||
for(let i in panelsStatus) {
|
for (let i in panelsStatus) {
|
||||||
vehicle.setPanelStatus(i, panelsStatus[i]);
|
vehicle.setPanelStatus(i, panelsStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.wheelStatus")) {
|
||||||
let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus");
|
let wheelsStatus = getEntityData(vehicle, "agrp.wheelStatus");
|
||||||
for(let i in wheelsStatus) {
|
for (let i in wheelsStatus) {
|
||||||
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
vehicle.setWheelStatus(i, wheelsStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.lightStatus")) {
|
if (doesEntityDataExist(vehicle, "agrp.lightStatus")) {
|
||||||
let lightStatus = getEntityData(vehicle, "vrr.lightStatus");
|
let lightStatus = getEntityData(vehicle, "agrp.lightStatus");
|
||||||
for(let i in lightStatus) {
|
for (let i in lightStatus) {
|
||||||
vehicle.setLightStatus(i, lightStatus[i]);
|
vehicle.setLightStatus(i, lightStatus[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) {
|
if (doesEntityDataExist(vehicle, "agrp.suspensionHeight")) {
|
||||||
let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight");
|
let suspensionHeight = getEntityData(vehicle, "agrp.suspensionHeight");
|
||||||
vehicle.setSuspensionHeight(suspensionHeight);
|
vehicle.setSuspensionHeight(suspensionHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
//let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
//let allUpgrades = getGameConfig().vehicleUpgrades[getGame()];
|
||||||
//for(let i in allUpgrades) {
|
//for(let i in allUpgrades) {
|
||||||
// vehicle.removeUpgrade(i);
|
// vehicle.removeUpgrade(i);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if(doesEntityDataExist(vehicle, "vrr.upgrades")) {
|
if (doesEntityDataExist(vehicle, "agrp.upgrades")) {
|
||||||
let upgrades = getEntityData(vehicle, "vrr.upgrades");
|
let upgrades = getEntityData(vehicle, "agrp.upgrades");
|
||||||
for(let i in upgrades) {
|
for (let i in upgrades) {
|
||||||
if(upgrades[i] != 0) {
|
if (upgrades[i] != 0) {
|
||||||
vehicle.addUpgrade(upgrades[i]);
|
vehicle.addUpgrade(upgrades[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(vehicle, "vrr.livery")) {
|
if (doesEntityDataExist(vehicle, "agrp.livery")) {
|
||||||
let livery = getEntityData(vehicle, "vrr.livery");
|
let livery = getEntityData(vehicle, "agrp.livery");
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
vehicle.setPaintJob(livery);
|
vehicle.setPaintJob(livery);
|
||||||
} else if(getGame() == VRR_GAME_GTA_IV) {
|
} else if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
vehicle.livery = livery;
|
vehicle.livery = livery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,13 +158,13 @@ function syncVehicleProperties(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncCivilianProperties(civilian) {
|
function syncCivilianProperties(civilian) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.scale")) {
|
if (doesEntityDataExist(civilian, "agrp.scale")) {
|
||||||
let scaleFactor = getEntityData(civilian, "vrr.scale");
|
let scaleFactor = getEntityData(civilian, "agrp.scale");
|
||||||
let tempMatrix = civilian.matrix;
|
let tempMatrix = civilian.matrix;
|
||||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||||
let tempPosition = civilian.position;
|
let tempPosition = civilian.position;
|
||||||
@@ -174,79 +174,79 @@ function syncCivilianProperties(civilian) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.fightStyle")) {
|
if (doesEntityDataExist(civilian, "agrp.fightStyle")) {
|
||||||
let fightStyle = getEntityData(civilian, "vrr.fightStyle");
|
let fightStyle = getEntityData(civilian, "agrp.fightStyle");
|
||||||
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
civilian.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.walkStyle")) {
|
if (doesEntityDataExist(civilian, "agrp.walkStyle")) {
|
||||||
let walkStyle = getEntityData(civilian, "vrr.walkStyle");
|
let walkStyle = getEntityData(civilian, "agrp.walkStyle");
|
||||||
civilian.walkStyle = walkStyle;
|
civilian.walkStyle = walkStyle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHair")) {
|
||||||
let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair");
|
let bodyPropHair = getEntityData(civilian, "agrp.bodyPropHair");
|
||||||
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHead")) {
|
||||||
let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead");
|
let bodyPropHead = getEntityData(civilian, "agrp.bodyPropHead");
|
||||||
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropEyes")) {
|
||||||
let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes");
|
let bodyPropEyes = getEntityData(civilian, "agrp.bodyPropEyes");
|
||||||
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftHand")) {
|
||||||
let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand");
|
let bodyPropLeftHand = getEntityData(civilian, "agrp.bodyPropLeftHand");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightHand")) {
|
||||||
let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand");
|
let bodyPropRightHand = getEntityData(civilian, "agrp.bodyPropRightHand");
|
||||||
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftWrist")) {
|
||||||
let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist");
|
let bodyPropLeftWrist = getEntityData(civilian, "agrp.bodyPropLeftWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(civilian, "agrp.bodyPropRightWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(civilian, "agrp.bodyPropRightWrist");
|
||||||
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropHip")) {
|
||||||
let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip");
|
let bodyPropHip = getEntityData(civilian, "agrp.bodyPropHip");
|
||||||
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropLeftFoot")) {
|
||||||
let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot");
|
let bodyPropLeftFoot = getEntityData(civilian, "agrp.bodyPropLeftFoot");
|
||||||
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) {
|
if (doesEntityDataExist(civilian, "agrp.bodyPropRightFoot")) {
|
||||||
let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot");
|
let bodyPropRightFoot = getEntityData(civilian, "agrp.bodyPropRightFoot");
|
||||||
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(civilian, "vrr.anim")) {
|
if (doesEntityDataExist(civilian, "agrp.anim")) {
|
||||||
let animationSlot = getEntityData(civilian, "vrr.anim");
|
let animationSlot = getEntityData(civilian, "agrp.anim");
|
||||||
let animationData = getAnimationData(animationSlot);
|
let animationData = getAnimationData(animationSlot);
|
||||||
civilian.addAnimation(animationData.groupId, animationData.animId);
|
civilian.addAnimation(animationData.groupId, animationData.animId);
|
||||||
}
|
}
|
||||||
@@ -255,13 +255,13 @@ function syncCivilianProperties(civilian) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncPlayerProperties(player) {
|
function syncPlayerProperties(player) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_III) {
|
if (getGame() == VRR_GAME_GTA_III) {
|
||||||
if(doesEntityDataExist(player, "vrr.scale")) {
|
if (doesEntityDataExist(player, "agrp.scale")) {
|
||||||
let scaleFactor = getEntityData(player, "vrr.scale");
|
let scaleFactor = getEntityData(player, "agrp.scale");
|
||||||
let tempMatrix = player.matrix;
|
let tempMatrix = player.matrix;
|
||||||
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z));
|
||||||
let tempPosition = player.position;
|
let tempPosition = player.position;
|
||||||
@@ -271,95 +271,95 @@ function syncPlayerProperties(player) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_SA) {
|
if (getGame() == VRR_GAME_GTA_SA) {
|
||||||
if(doesEntityDataExist(player, "vrr.fightStyle")) {
|
if (doesEntityDataExist(player, "agrp.fightStyle")) {
|
||||||
let fightStyle = getEntityData(player, "vrr.fightStyle");
|
let fightStyle = getEntityData(player, "agrp.fightStyle");
|
||||||
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
player.setFightStyle(fightStyle[0], fightStyle[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(getGame() == VRR_GAME_GTA_SA) {
|
//if(getGame() == VRR_GAME_GTA_SA) {
|
||||||
// if(doesEntityDataExist(player, "vrr.walkStyle")) {
|
// if(doesEntityDataExist(player, "agrp.walkStyle")) {
|
||||||
// let walkStyle = getEntityData(player, "vrr.walkStyle");
|
// let walkStyle = getEntityData(player, "agrp.walkStyle");
|
||||||
// player.walkStyle = walkStyle;
|
// player.walkStyle = walkStyle;
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartHair")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartHair")) {
|
||||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHair");
|
let bodyPartHead = getEntityData(player, "agrp.bodyPartHair");
|
||||||
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartHead")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartHead")) {
|
||||||
let bodyPartHead = getEntityData(player, "vrr.bodyPartHead");
|
let bodyPartHead = getEntityData(player, "agrp.bodyPartHead");
|
||||||
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartUpper")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartUpper")) {
|
||||||
let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper");
|
let bodyPartUpper = getEntityData(player, "agrp.bodyPartUpper");
|
||||||
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPartLower")) {
|
if (doesEntityDataExist(player, "agrp.bodyPartLower")) {
|
||||||
let bodyPartLower = getEntityData(player, "vrr.bodyPartLower");
|
let bodyPartLower = getEntityData(player, "agrp.bodyPartLower");
|
||||||
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHair")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHair")) {
|
||||||
let bodyPropHair = getEntityData(player, "vrr.bodyPropHair");
|
let bodyPropHair = getEntityData(player, "agrp.bodyPropHair");
|
||||||
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHead")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHead")) {
|
||||||
let bodyPropHead = getEntityData(player, "vrr.bodyPropHead");
|
let bodyPropHead = getEntityData(player, "agrp.bodyPropHead");
|
||||||
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropEyes")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropEyes")) {
|
||||||
let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes");
|
let bodyPropEyes = getEntityData(player, "agrp.bodyPropEyes");
|
||||||
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftHand")) {
|
||||||
let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand");
|
let bodyPropLeftHand = getEntityData(player, "agrp.bodyPropLeftHand");
|
||||||
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightHand")) {
|
||||||
let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand");
|
let bodyPropRightHand = getEntityData(player, "agrp.bodyPropRightHand");
|
||||||
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftWrist")) {
|
||||||
let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist");
|
let bodyPropLeftWrist = getEntityData(player, "agrp.bodyPropLeftWrist");
|
||||||
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(player, "agrp.bodyPropRightWrist");
|
||||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightWrist")) {
|
||||||
let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist");
|
let bodyPropRightWrist = getEntityData(player, "agrp.bodyPropRightWrist");
|
||||||
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropHip")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropHip")) {
|
||||||
let bodyPropHip = getEntityData(player, "vrr.bodyPropHip");
|
let bodyPropHip = getEntityData(player, "agrp.bodyPropHip");
|
||||||
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropLeftFoot")) {
|
||||||
let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot");
|
let bodyPropLeftFoot = getEntityData(player, "agrp.bodyPropLeftFoot");
|
||||||
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) {
|
if (doesEntityDataExist(player, "agrp.bodyPropRightFoot")) {
|
||||||
let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot");
|
let bodyPropRightFoot = getEntityData(player, "agrp.bodyPropRightFoot");
|
||||||
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,18 +368,18 @@ function syncPlayerProperties(player) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function syncElementProperties(element) {
|
function syncElementProperties(element) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
if (doesEntityDataExist(element, "agrp.interior")) {
|
||||||
if(typeof element.interior != "undefined") {
|
if (typeof element.interior != "undefined") {
|
||||||
element.interior = getEntityData(element, "vrr.interior");
|
element.interior = getEntityData(element, "agrp.interior");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getGame() == VRR_GAME_MAFIA_ONE) {
|
if (getGame() == VRR_GAME_MAFIA_ONE) {
|
||||||
switch(element.type) {
|
switch (element.type) {
|
||||||
case ELEMENT_VEHICLE:
|
case ELEMENT_VEHICLE:
|
||||||
syncVehicleProperties(element);
|
syncVehicleProperties(element);
|
||||||
break;
|
break;
|
||||||
@@ -396,7 +396,7 @@ function syncElementProperties(element) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch(element.type) {
|
switch (element.type) {
|
||||||
case ELEMENT_VEHICLE:
|
case ELEMENT_VEHICLE:
|
||||||
syncVehicleProperties(element);
|
syncVehicleProperties(element);
|
||||||
break;
|
break;
|
||||||
@@ -419,7 +419,7 @@ function syncElementProperties(element) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
|
function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -427,11 +427,11 @@ function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupMode
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setLocalPlayerPedPartsAndProps(parts, props) {
|
function setLocalPlayerPedPartsAndProps(parts, props) {
|
||||||
for(let i in parts) {
|
for (let i in parts) {
|
||||||
localPlayer.changeBodyPart(parts[i][0], parts[i][1], parts[i][2]);
|
localPlayer.changeBodyPart(parts[i][0], parts[i][1], parts[i][2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let j in props) {
|
for (let j in props) {
|
||||||
localPlayer.changeBodyProp(props[j][0], props[j][1]);
|
localPlayer.changeBodyProp(props[j][0], props[j][1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ function runClientCode(code, returnTo) {
|
|||||||
try {
|
try {
|
||||||
returnValue = eval("(" + code + ")");
|
returnValue = eval("(" + code + ")");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
sendNetworkEventToServer("vrr.runCodeFail", returnTo, error.toString());
|
sendNetworkEventToServer("agrp.runCodeFail", returnTo, error.toString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let returnValueString = returnValue;
|
let returnValueString = returnValue;
|
||||||
@@ -104,7 +104,7 @@ function runClientCode(code, returnTo) {
|
|||||||
} else {
|
} else {
|
||||||
returnValueString = "null/undefined";
|
returnValueString = "null/undefined";
|
||||||
}
|
}
|
||||||
sendNetworkEventToServer("vrr.runCodeSuccess", returnTo, returnValueString);
|
sendNetworkEventToServer("agrp.runCodeSuccess", returnTo, returnValueString);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -211,8 +211,8 @@ function setLocalPlayerInterior(interior) {
|
|||||||
if (areServerElementsSupported() && isGameFeatureSupported("interior")) {
|
if (areServerElementsSupported() && isGameFeatureSupported("interior")) {
|
||||||
let vehicles = getElementsByType(ELEMENT_VEHICLE);
|
let vehicles = getElementsByType(ELEMENT_VEHICLE);
|
||||||
for (let i in vehicles) {
|
for (let i in vehicles) {
|
||||||
if (getEntityData(vehicles[i], "vrr.interior")) {
|
if (getEntityData(vehicles[i], "agrp.interior")) {
|
||||||
vehicles[i].interior = getEntityData(vehicles[i], "vrr.interior");
|
vehicles[i].interior = getEntityData(vehicles[i], "agrp.interior");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -310,14 +310,6 @@ function clearSelfOwnedVehicles() {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setMouseCameraState(state) {
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] ${(state) ? "Enabled" : "Disabled"} mouse camera`);
|
|
||||||
mouseCameraEnabled = state;
|
|
||||||
SetStandardControlsEnabled(!mouseCameraEnabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function toggleMouseCursor() {
|
function toggleMouseCursor() {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] ${(!gui.cursorEnabled) ? "Enabled" : "Disabled"} mouse cursor`);
|
logToConsole(LOG_DEBUG, `[VRR.Utilities] ${(!gui.cursorEnabled) ? "Enabled" : "Disabled"} mouse cursor`);
|
||||||
gui.showCursor(!gui.cursorEnabled, gui.cursorEnabled);
|
gui.showCursor(!gui.cursorEnabled, gui.cursorEnabled);
|
||||||
@@ -406,8 +398,8 @@ function processWantedLevelReset() {
|
|||||||
function processLocalPlayerVehicleControlState() {
|
function processLocalPlayerVehicleControlState() {
|
||||||
if (areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
if (inVehicle && localPlayer.vehicle != null) {
|
if (inVehicle && localPlayer.vehicle != null) {
|
||||||
if (doesEntityDataExist(localPlayer.vehicle, "vrr.engine")) {
|
if (doesEntityDataExist(localPlayer.vehicle, "agrp.engine")) {
|
||||||
if (getEntityData(localPlayer.vehicle, "vrr.engine") == false) {
|
if (getEntityData(localPlayer.vehicle, "agrp.engine") == false) {
|
||||||
localPlayer.vehicle.engine = false;
|
localPlayer.vehicle.engine = false;
|
||||||
if (!localPlayer.vehicle.engine) {
|
if (!localPlayer.vehicle.engine) {
|
||||||
if (typeof localPlayer.vehicle.velocity != "undefined") {
|
if (typeof localPlayer.vehicle.velocity != "undefined") {
|
||||||
@@ -590,7 +582,7 @@ function processNearbyPickups() {
|
|||||||
//if(pickups[i].interior == localPlayer.interior && pickups[i].dimension == localPlayer.dimension) {
|
//if(pickups[i].interior == localPlayer.interior && pickups[i].dimension == localPlayer.dimension) {
|
||||||
if (currentPickup != pickups[i]) {
|
if (currentPickup != pickups[i]) {
|
||||||
currentPickup = pickups[i];
|
currentPickup = pickups[i];
|
||||||
sendNetworkEventToServer("vrr.pickup", pickups[i].id);
|
sendNetworkEventToServer("agrp.pickup", pickups[i].id);
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,11 +32,11 @@ class VehicleData {
|
|||||||
function receiveVehicleFromServer(vehicleId, position, model, colour1, colour2, colour3 = 0, colour4 = 0, locked = false, lights = false, engine = false, licensePlate = "") {
|
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`);
|
logToConsole(LOG_DEBUG, `[VRR.Vehicle] Received vehicle ${vehicleId} (${getVehicleNameFromModel(model, getGame())}) from server`);
|
||||||
|
|
||||||
if(getGame() != VRR_GAME_GTA_IV) {
|
if (getGame() != VRR_GAME_GTA_IV) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getVehicleData(vehicleId) != false) {
|
if (getVehicleData(vehicleId) != false) {
|
||||||
let vehicleData = getVehicleData(vehicleId);
|
let vehicleData = getVehicleData(vehicleId);
|
||||||
//vehicleData.position = position;
|
//vehicleData.position = position;
|
||||||
//vehicleData.heading = heading;
|
//vehicleData.heading = heading;
|
||||||
@@ -63,20 +63,20 @@ function receiveVehicleFromServer(vehicleId, position, model, colour1, colour2,
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function processVehiclePurchasing() {
|
function processVehiclePurchasing() {
|
||||||
if(vehiclePurchaseState == VRR_VEHBUYSTATE_TESTDRIVE) {
|
if (vehiclePurchaseState == VRR_VEHBUYSTATE_TESTDRIVE) {
|
||||||
if(getLocalPlayerVehicle() == false) {
|
if (getLocalPlayerVehicle() == false) {
|
||||||
vehiclePurchaseState = VRR_VEHBUYSTATE_EXITVEH;
|
vehiclePurchaseState = VRR_VEHBUYSTATE_EXITVEH;
|
||||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_EXITVEH);
|
sendNetworkEventToServer("agrp.vehBuyState", VRR_VEHBUYSTATE_EXITVEH);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
if(vehiclePurchasing == getLocalPlayerVehicle()) {
|
if (vehiclePurchasing == getLocalPlayerVehicle()) {
|
||||||
if(getDistance(getLocalPlayerVehicle().position, vehiclePurchasePosition) >= 25) {
|
if (getDistance(getLocalPlayerVehicle().position, vehiclePurchasePosition) >= 25) {
|
||||||
vehiclePurchaseState = VRR_VEHBUYSTATE_FARENOUGH;
|
vehiclePurchaseState = VRR_VEHBUYSTATE_FARENOUGH;
|
||||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_FARENOUGH);
|
sendNetworkEventToServer("agrp.vehBuyState", VRR_VEHBUYSTATE_FARENOUGH);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vehiclePurchaseState = VRR_VEHBUYSTATE_WRONGVEH;
|
vehiclePurchaseState = VRR_VEHBUYSTATE_WRONGVEH;
|
||||||
sendNetworkEventToServer("vrr.vehBuyState", VRR_VEHBUYSTATE_WRONGVEH);
|
sendNetworkEventToServer("agrp.vehBuyState", VRR_VEHBUYSTATE_WRONGVEH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ function processVehicleBurning() {
|
|||||||
function setVehiclePurchaseState(state, vehicleId, position) {
|
function setVehiclePurchaseState(state, vehicleId, position) {
|
||||||
vehiclePurchaseState = state;
|
vehiclePurchaseState = state;
|
||||||
|
|
||||||
if(vehicleId != null) {
|
if (vehicleId != null) {
|
||||||
vehiclePurchasing = getElementFromId(vehicleId);
|
vehiclePurchasing = getElementFromId(vehicleId);
|
||||||
} else {
|
} else {
|
||||||
vehiclePurchasing = null;
|
vehiclePurchasing = null;
|
||||||
@@ -110,9 +110,9 @@ function setVehiclePurchaseState(state, vehicleId, position) {
|
|||||||
* @param {number} vehicleId - The ID of the job (initially provided by server)
|
* @param {number} vehicleId - The ID of the job (initially provided by server)
|
||||||
* @return {VehicleData} The vehicle's data (class instance)
|
* @return {VehicleData} The vehicle's data (class instance)
|
||||||
*/
|
*/
|
||||||
function getVehicleData(vehicleId) {
|
function getVehicleData(vehicleId) {
|
||||||
for(let i in getServerData().vehicles) {
|
for (let i in getServerData().vehicles) {
|
||||||
if(getServerData().vehicles[i].vehicleId == vehicleId) {
|
if (getServerData().vehicles[i].vehicleId == vehicleId) {
|
||||||
return getServerData().vehicles[i];
|
return getServerData().vehicles[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ function setVehiclePurchaseState(state, vehicleId, position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setAllVehicleDataIndexes() {
|
function setAllVehicleDataIndexes() {
|
||||||
for(let i in getServerData().vehicles) {
|
for (let i in getServerData().vehicles) {
|
||||||
getServerData().vehicles[i].index = i;
|
getServerData().vehicles[i].index = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1374,7 +1374,7 @@ function initClient(client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
setEntityData(client, "vrr.isInitialized", true, false);
|
setEntityData(client, "agrp.isInitialized", true, false);
|
||||||
|
|
||||||
sendPlayerGUIColours(client);
|
sendPlayerGUIColours(client);
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ function initAnimationScript() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function playPlayerAnimationCommand(command, params, client) {
|
function playPlayerAnimationCommand(command, params, client) {
|
||||||
if(areParamsEmpty(params)) {
|
if (areParamsEmpty(params)) {
|
||||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -23,22 +23,22 @@ function playPlayerAnimationCommand(command, params, client) {
|
|||||||
let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
let animationSlot = getAnimationFromParams(getParam(params, " ", 1));
|
||||||
let animationPositionOffset = 1;
|
let animationPositionOffset = 1;
|
||||||
|
|
||||||
if(!animationSlot) {
|
if (!animationSlot) {
|
||||||
messagePlayerError(client, getLocaleString(client, "InvalidAnimation"));
|
messagePlayerError(client, getLocaleString(client, "InvalidAnimation"));
|
||||||
messagePlayerInfo(client, getLocaleString(client, "AnimationCommandTip", `{ALTCOLOUR}/animlist{MAINCOLOUR}`));
|
messagePlayerInfo(client, getLocaleString(client, "AnimationCommandTip", `{ALTCOLOUR}/animlist{MAINCOLOUR}`));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(toInteger(animationPositionOffset) < 0 || toInteger(animationPositionOffset) > 3) {
|
if (toInteger(animationPositionOffset) < 0 || toInteger(animationPositionOffset) > 3) {
|
||||||
messagePlayerError(client, getLocaleString(client, "InvalidAnimationDistance"));
|
messagePlayerError(client, getLocaleString(client, "InvalidAnimationDistance"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getAnimationData(animationSlot)[3] == VRR_ANIMTYPE_SURRENDER) {
|
if (getAnimationData(animationSlot)[3] == VRR_ANIMTYPE_SURRENDER) {
|
||||||
getPlayerData(client).pedState = VRR_PEDSTATE_HANDSUP;
|
getPlayerData(client).pedState = VRR_PEDSTATE_HANDSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
if (isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
||||||
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@ function playPlayerAnimationCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function stopPlayerAnimationCommand(command, params, client) {
|
function stopPlayerAnimationCommand(command, params, client) {
|
||||||
if(isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
if (isPlayerHandCuffed(client) || isPlayerTazed(client) || isPlayerInForcedAnimation(client)) {
|
||||||
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
messagePlayerError(client, getLocaleString(client, "UnableToDoThat"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -70,13 +70,13 @@ function stopPlayerAnimationCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function showAnimationListCommand(command, params, client) {
|
function showAnimationListCommand(command, params, client) {
|
||||||
let animList = getGameConfig().animations[getGame()].map(function(x) { return x.name; });
|
let animList = getGameConfig().animations[getGame()].map(function (x) { return x.name; });
|
||||||
|
|
||||||
let chunkedList = splitArrayIntoChunks(animList, 10);
|
let chunkedList = splitArrayIntoChunks(animList, 10);
|
||||||
|
|
||||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderAnimationsList")));
|
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderAnimationsList")));
|
||||||
|
|
||||||
for(let i in chunkedList) {
|
for (let i in chunkedList) {
|
||||||
messagePlayerNormal(client, chunkedList[i].join(", "));
|
messagePlayerNormal(client, chunkedList[i].join(", "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,7 @@ function makePlayerPlayAnimation(client, animationSlot, offsetPosition = 1) {
|
|||||||
getPlayerData(client).animationForced = false;
|
getPlayerData(client).animationForced = false;
|
||||||
|
|
||||||
makePedPlayAnimation(getPlayerPed(client), animationSlot, offsetPosition);
|
makePedPlayAnimation(getPlayerPed(client), animationSlot, offsetPosition);
|
||||||
setEntityData(getPlayerPed(client), "vrr.anim", animationSlot, true);
|
setEntityData(getPlayerPed(client), "agrp.anim", animationSlot, true);
|
||||||
//if(getAnimationData(animationSlot)[9] != VRR_ANIMMOVE_NONE) {
|
//if(getAnimationData(animationSlot)[9] != VRR_ANIMMOVE_NONE) {
|
||||||
// if(getGame() < VRR_GAME_GTA_SA) {
|
// if(getGame() < VRR_GAME_GTA_SA) {
|
||||||
// setPlayerMouseCameraState(client, true);
|
// setPlayerMouseCameraState(client, true);
|
||||||
@@ -145,14 +145,14 @@ function makePlayerStopAnimation(client) {
|
|||||||
|
|
||||||
function getAnimationFromParams(params) {
|
function getAnimationFromParams(params) {
|
||||||
let animations = getGameConfig().animations[getGame()];
|
let animations = getGameConfig().animations[getGame()];
|
||||||
if(isNaN(params)) {
|
if (isNaN(params)) {
|
||||||
for(let i in animations) {
|
for (let i in animations) {
|
||||||
if(toLowerCase(animations[i].name).indexOf(toLowerCase(params)) != -1) {
|
if (toLowerCase(animations[i].name).indexOf(toLowerCase(params)) != -1) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(typeof getGameConfig().animations[getGame()][params] != "undefined") {
|
if (typeof getGameConfig().animations[getGame()][params] != "undefined") {
|
||||||
return toInteger(params);
|
return toInteger(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ function setBusinessNameCommand(command, params, client) {
|
|||||||
|
|
||||||
let oldBusinessName = getBusinessData(businessId).name;
|
let oldBusinessName = getBusinessData(businessId).name;
|
||||||
getBusinessData(businessId).name = newBusinessName;
|
getBusinessData(businessId).name = newBusinessName;
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.name", getBusinessData(businessId).name, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.name", getBusinessData(businessId).name, true);
|
||||||
getBusinessData(businessId).needsSaved = true;
|
getBusinessData(businessId).needsSaved = true;
|
||||||
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} renamed business {businessBlue}${oldBusinessName}{MAINCOLOUR} to {businessBlue}${newBusinessName}`);
|
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} renamed business {businessBlue}${oldBusinessName}{MAINCOLOUR} to {businessBlue}${newBusinessName}`);
|
||||||
}
|
}
|
||||||
@@ -1407,7 +1407,7 @@ function setBusinessBuyPriceCommand(command, params, client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getBusinessData(businessId).buyPrice = amount;
|
getBusinessData(businessId).buyPrice = amount;
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.price", getBusinessData(businessId).buyPrice, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.price", getBusinessData(businessId).buyPrice, true);
|
||||||
|
|
||||||
getBusinessData(businessId).needsSaved = true;
|
getBusinessData(businessId).needsSaved = true;
|
||||||
messagePlayerSuccess(client, `{MAINCOLOUR}You set business {businessBlue}${getBusinessData(businessId).name}'s {MAINCOLOUR}for-sale price to {ALTCOLOUR}$${makeLargeNumberReadable(amount)}`);
|
messagePlayerSuccess(client, `{MAINCOLOUR}You set business {businessBlue}${getBusinessData(businessId).name}'s {MAINCOLOUR}for-sale price to {ALTCOLOUR}$${makeLargeNumberReadable(amount)}`);
|
||||||
@@ -2810,50 +2810,50 @@ function updateBusinessPickupLabelData(businessId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (getBusinessData(businessId).exitPickup != null) {
|
if (getBusinessData(businessId).exitPickup != null) {
|
||||||
setEntityData(getBusinessData(businessId).exitPickup, "vrr.owner.type", VRR_PICKUP_BUSINESS_EXIT, false);
|
setEntityData(getBusinessData(businessId).exitPickup, "agrp.owner.type", VRR_PICKUP_BUSINESS_EXIT, false);
|
||||||
setEntityData(getBusinessData(businessId).exitPickup, "vrr.owner.id", businessId, false);
|
setEntityData(getBusinessData(businessId).exitPickup, "agrp.owner.id", businessId, false);
|
||||||
setEntityData(getBusinessData(businessId).exitPickup, "vrr.label.type", VRR_LABEL_EXIT, true);
|
setEntityData(getBusinessData(businessId).exitPickup, "agrp.label.type", VRR_LABEL_EXIT, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getBusinessData(businessId).entrancePickup != null) {
|
if (getBusinessData(businessId).entrancePickup != null) {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.owner.type", VRR_PICKUP_BUSINESS_ENTRANCE, false);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.owner.type", VRR_PICKUP_BUSINESS_ENTRANCE, false);
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.owner.id", businessId, false);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.owner.id", businessId, false);
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.type", VRR_LABEL_BUSINESS, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.type", VRR_LABEL_BUSINESS, true);
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.name", getBusinessData(businessId).name, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.name", getBusinessData(businessId).name, true);
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.locked", getBusinessData(businessId).locked, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.locked", getBusinessData(businessId).locked, true);
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_NONE, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_NONE, true);
|
||||||
|
|
||||||
switch (getBusinessData(businessId).labelHelpType) {
|
switch (getBusinessData(businessId).labelHelpType) {
|
||||||
case VRR_PROPLABEL_INFO_ENTERVEHICLE: {
|
case VRR_PROPLABEL_INFO_ENTERVEHICLE: {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_ENTERVEHICLE, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_ENTERVEHICLE, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_ENTER: {
|
case VRR_PROPLABEL_INFO_ENTER: {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_ENTER, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_ENTER, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case VRR_PROPLABEL_INFO_REPAIR: {
|
case VRR_PROPLABEL_INFO_REPAIR: {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_REPAIR, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_REPAIR, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
if (getBusinessData(businessId).hasInterior) {
|
if (getBusinessData(businessId).hasInterior) {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_ENTER, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_ENTER, true);
|
||||||
} else {
|
} else {
|
||||||
if (doesBusinessHaveAnyItemsToBuy(businessId)) {
|
if (doesBusinessHaveAnyItemsToBuy(businessId)) {
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_BUY, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_BUY, true);
|
||||||
} else {
|
} else {
|
||||||
removeEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.help");
|
removeEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.help");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.price", getBusinessData(businessId).buyPrice, true);
|
setEntityData(getBusinessData(businessId).entrancePickup, "agrp.label.price", getBusinessData(businessId).buyPrice, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} entered a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("vrr.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} entered a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("agrp.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`);
|
||||||
|
|
||||||
getPlayerData(client).lastVehicle = vehicle;
|
getPlayerData(client).lastVehicle = vehicle;
|
||||||
getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp();
|
getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp();
|
||||||
@@ -385,7 +385,7 @@ function onPlayerExitedVehicle(client, vehicle) {
|
|||||||
|
|
||||||
getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp();
|
getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp();
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} exited a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("vrr.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} exited a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("agrp.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -395,6 +395,7 @@ function onPlayerDeath(client, position) {
|
|||||||
getPlayerData(client).pedState = VRR_PEDSTATE_DEAD;
|
getPlayerData(client).pedState = VRR_PEDSTATE_DEAD;
|
||||||
updatePlayerSpawnedState(client, false);
|
updatePlayerSpawnedState(client, false);
|
||||||
setPlayerControlState(client, false);
|
setPlayerControlState(client, false);
|
||||||
|
setPlayerRenderLabelsState(client, false);
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if (isFadeCameraSupported()) {
|
if (isFadeCameraSupported()) {
|
||||||
fadeCamera(client, false, 1.0);
|
fadeCamera(client, false, 1.0);
|
||||||
@@ -423,6 +424,7 @@ function onPlayerDeath(client, position) {
|
|||||||
makePlayerStopAnimation(client);
|
makePlayerStopAnimation(client);
|
||||||
setPlayerControlState(client, true);
|
setPlayerControlState(client, true);
|
||||||
resetPlayerBlip(client);
|
resetPlayerBlip(client);
|
||||||
|
setPlayerRenderLabelsState(client, true);
|
||||||
} else {
|
} else {
|
||||||
let closestHospital = getClosestHospital(getPlayerPosition(client));
|
let closestHospital = getClosestHospital(getPlayerPosition(client));
|
||||||
despawnPlayer(client);
|
despawnPlayer(client);
|
||||||
@@ -447,6 +449,7 @@ function onPlayerDeath(client, position) {
|
|||||||
makePlayerStopAnimation(client);
|
makePlayerStopAnimation(client);
|
||||||
setPlayerControlState(client, true);
|
setPlayerControlState(client, true);
|
||||||
resetPlayerBlip(client);
|
resetPlayerBlip(client);
|
||||||
|
setPlayerRenderLabelsState(client, true);
|
||||||
}
|
}
|
||||||
}, 2000);
|
}, 2000);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
@@ -515,12 +518,12 @@ async function onPlayerSpawn(client) {
|
|||||||
|
|
||||||
if (getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped body parts and props`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped body parts and props`);
|
||||||
setEntityData(getPlayerPed(client), "vrr.bodyParts", getPlayerCurrentSubAccount(client).bodyParts, true);
|
setEntityData(getPlayerPed(client), "agrp.bodyParts", getPlayerCurrentSubAccount(client).bodyParts, true);
|
||||||
setEntityData(getPlayerPed(client), "vrr.bodyProps", getPlayerCurrentSubAccount(client).bodyProps, true);
|
setEntityData(getPlayerPed(client), "agrp.bodyProps", getPlayerCurrentSubAccount(client).bodyProps, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped scale (${getPlayerCurrentSubAccount(client).pedScale})`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped scale (${getPlayerCurrentSubAccount(client).pedScale})`);
|
||||||
setEntityData(getPlayerPed(client), "vrr.scale", getPlayerCurrentSubAccount(client).pedScale, true);
|
setEntityData(getPlayerPed(client), "agrp.scale", getPlayerCurrentSubAccount(client).pedScale, true);
|
||||||
|
|
||||||
if (isPlayerSwitchingCharacter(client) || isPlayerCreatingCharacter(client)) {
|
if (isPlayerSwitchingCharacter(client) || isPlayerCreatingCharacter(client)) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)}'s ped is being used for character selection/creation. No further spawn processing needed'`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)}'s ped is being used for character selection/creation. No further spawn processing needed'`);
|
||||||
@@ -576,7 +579,7 @@ async function onPlayerSpawn(client) {
|
|||||||
|
|
||||||
if (areServerElementsSupported() && getGame() == VRR_GAME_GTA_SA) {
|
if (areServerElementsSupported() && getGame() == VRR_GAME_GTA_SA) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`);
|
||||||
setEntityData(getPlayerPed(client), "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true);
|
setEntityData(getPlayerPed(client), "agrp.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true);
|
||||||
|
|
||||||
setPlayerFightStyle(client, getPlayerCurrentSubAccount(client).fightStyle);
|
setPlayerFightStyle(client, getPlayerCurrentSubAccount(client).fightStyle);
|
||||||
}
|
}
|
||||||
@@ -602,20 +605,20 @@ async function onPlayerSpawn(client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if(isGTAIV()) {
|
//if(isGTAIV()) {
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true);
|
||||||
// setEntityData(getPlayerPed(client), "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true);
|
// setEntityData(getPlayerPed(client), "agrp.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (isGTAIV()) {
|
if (isGTAIV()) {
|
||||||
@@ -659,6 +662,8 @@ async function onPlayerSpawn(client) {
|
|||||||
// Stop playing intro music and any other radio
|
// Stop playing intro music and any other radio
|
||||||
stopRadioStreamForPlayer(client);
|
stopRadioStreamForPlayer(client);
|
||||||
|
|
||||||
|
setPlayerRenderLabelsState(client, true);
|
||||||
|
|
||||||
// Start playing business/house radio if in one
|
// Start playing business/house radio if in one
|
||||||
let businessId = getPlayerBusiness(client);
|
let businessId = getPlayerBusiness(client);
|
||||||
let houseId = getPlayerHouse(client);
|
let houseId = getPlayerHouse(client);
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ function playerToggledGUI(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function showPlayerTwoFactorAuthenticationGUI(client) {
|
function showPlayerTwoFactorAuthenticationGUI(client) {
|
||||||
sendNetworkEventToPlayer("vrr.2fa", client);
|
sendNetworkEventToPlayer("agrp.2fa", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -27,7 +27,7 @@ const VRR_HOUSEOWNER_PUBLIC = 5; // Is a public house. Technical
|
|||||||
/**
|
/**
|
||||||
* @class Representing a house's data. Loaded and saved in the database
|
* @class Representing a house's data. Loaded and saved in the database
|
||||||
*/
|
*/
|
||||||
class HouseData {
|
class HouseData {
|
||||||
constructor(dbAssoc = false) {
|
constructor(dbAssoc = false) {
|
||||||
this.databaseId = 0
|
this.databaseId = 0
|
||||||
this.description = "";
|
this.description = "";
|
||||||
@@ -66,7 +66,7 @@ const VRR_HOUSEOWNER_PUBLIC = 5; // Is a public house. Technical
|
|||||||
|
|
||||||
this.streamingRadioStation = -1;
|
this.streamingRadioStation = -1;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["house_id"]);
|
this.databaseId = toInteger(dbAssoc["house_id"]);
|
||||||
this.description = toString(dbAssoc["house_description"]);
|
this.description = toString(dbAssoc["house_description"]);
|
||||||
this.ownerType = toInteger(dbAssoc["house_owner_type"]);
|
this.ownerType = toInteger(dbAssoc["house_owner_type"]);
|
||||||
@@ -115,7 +115,7 @@ class HouseLocationData {
|
|||||||
this.interior = 0;
|
this.interior = 0;
|
||||||
this.dimension = 0;
|
this.dimension = 0;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["house_loc_id"]);
|
this.databaseId = toInteger(dbAssoc["house_loc_id"]);
|
||||||
this.name = toString(dbAssoc["house_loc_name"]);
|
this.name = toString(dbAssoc["house_loc_name"]);
|
||||||
this.type = toInteger(dbAssoc["house_loc_type"]);
|
this.type = toInteger(dbAssoc["house_loc_type"]);
|
||||||
@@ -149,7 +149,7 @@ class HouseGameScriptData {
|
|||||||
this.houseIndex = -1;
|
this.houseIndex = -1;
|
||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["house_script_id"]);
|
this.databaseId = toInteger(dbAssoc["house_script_id"]);
|
||||||
this.name = toString(dbAssoc["house_script_name"]);
|
this.name = toString(dbAssoc["house_script_name"]);
|
||||||
this.state = toInteger(dbAssoc["house_script_state"]);
|
this.state = toInteger(dbAssoc["house_script_state"]);
|
||||||
@@ -264,7 +264,7 @@ function setHouseDescriptionCommand(command, params, client) {
|
|||||||
let oldDescription = getHouseData(houseId).description;
|
let oldDescription = getHouseData(houseId).description;
|
||||||
getHouseData(houseId).description = newHouseDescription;
|
getHouseData(houseId).description = newHouseDescription;
|
||||||
|
|
||||||
setEntityData(getHouseData(houseId).entrancePickup, "vrr.label.name", getHouseData(houseId).description, true);
|
setEntityData(getHouseData(houseId).entrancePickup, "agrp.label.name", getHouseData(houseId).description, true);
|
||||||
|
|
||||||
getHouseData(houseId).needsSaved = true;
|
getHouseData(houseId).needsSaved = true;
|
||||||
|
|
||||||
@@ -1098,8 +1098,8 @@ function createHouseEntranceBlip(houseId) {
|
|||||||
setElementStreamOutDistance(entranceBlip, getGlobalConfig().houseBlipStreamOutDistance);
|
setElementStreamOutDistance(entranceBlip, getGlobalConfig().houseBlipStreamOutDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
setEntityData(entranceBlip, "vrr.owner.type", VRR_BLIP_HOUSE_ENTRANCE, false);
|
setEntityData(entranceBlip, "agrp.owner.type", VRR_BLIP_HOUSE_ENTRANCE, false);
|
||||||
setEntityData(entranceBlip, "vrr.owner.id", houseId, false);
|
setEntityData(entranceBlip, "agrp.owner.id", houseId, false);
|
||||||
|
|
||||||
houseData.entranceBlip = entranceBlip;
|
houseData.entranceBlip = entranceBlip;
|
||||||
}
|
}
|
||||||
@@ -1204,8 +1204,8 @@ function createHouseExitBlip(houseId) {
|
|||||||
setElementStreamOutDistance(exitBlip, getGlobalConfig().houseBlipStreamOutDistance);
|
setElementStreamOutDistance(exitBlip, getGlobalConfig().houseBlipStreamOutDistance);
|
||||||
}
|
}
|
||||||
setElementTransient(exitBlip, false);
|
setElementTransient(exitBlip, false);
|
||||||
setEntityData(exitBlip, "vrr.owner.type", VRR_BLIP_HOUSE_EXIT, false);
|
setEntityData(exitBlip, "agrp.owner.type", VRR_BLIP_HOUSE_EXIT, false);
|
||||||
setEntityData(exitBlip, "vrr.owner.id", houseId, false);
|
setEntityData(exitBlip, "agrp.owner.id", houseId, false);
|
||||||
getHouseData(houseId).exitBlip = exitBlip;
|
getHouseData(houseId).exitBlip = exitBlip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1747,26 +1747,26 @@ function updateHousePickupLabelData(houseId) {
|
|||||||
let houseData = getHouseData(houseId);
|
let houseData = getHouseData(houseId);
|
||||||
|
|
||||||
if (houseData.entrancePickup != null) {
|
if (houseData.entrancePickup != null) {
|
||||||
setEntityData(houseData.entrancePickup, "vrr.owner.type", VRR_PICKUP_HOUSE_ENTRANCE, false);
|
setEntityData(houseData.entrancePickup, "agrp.owner.type", VRR_PICKUP_HOUSE_ENTRANCE, false);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.owner.id", houseId, false);
|
setEntityData(houseData.entrancePickup, "agrp.owner.id", houseId, false);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.type", VRR_LABEL_HOUSE, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.type", VRR_LABEL_HOUSE, true);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.name", houseData.description, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.name", houseData.description, true);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.locked", houseData.locked, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.locked", houseData.locked, true);
|
||||||
if (houseData.buyPrice > 0) {
|
if (houseData.buyPrice > 0) {
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.price", houseData.buyPrice, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.price", houseData.buyPrice, true);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_BUYHOUSE, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_BUYHOUSE, true);
|
||||||
} else {
|
} else {
|
||||||
if (houseData.rentPrice > 0) {
|
if (houseData.rentPrice > 0) {
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.rentprice", houseData.rentPrice, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.rentprice", houseData.rentPrice, true);
|
||||||
setEntityData(houseData.entrancePickup, "vrr.label.help", VRR_PROPLABEL_INFO_RENTHOUSE, true);
|
setEntityData(houseData.entrancePickup, "agrp.label.help", VRR_PROPLABEL_INFO_RENTHOUSE, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (houseData.exitPickup != null) {
|
if (houseData.exitPickup != null) {
|
||||||
setEntityData(houseData.exitPickup, "vrr.owner.type", VRR_PICKUP_HOUSE_EXIT, false);
|
setEntityData(houseData.exitPickup, "agrp.owner.type", VRR_PICKUP_HOUSE_EXIT, false);
|
||||||
setEntityData(houseData.exitPickup, "vrr.owner.id", houseId, false);
|
setEntityData(houseData.exitPickup, "agrp.owner.id", houseId, false);
|
||||||
setEntityData(houseData.exitPickup, "vrr.label.type", VRR_LABEL_EXIT, true);
|
setEntityData(houseData.exitPickup, "agrp.label.type", VRR_LABEL_EXIT, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ class ItemData {
|
|||||||
this.enabled = false;
|
this.enabled = false;
|
||||||
this.extra = false;
|
this.extra = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["item_id"]);
|
this.databaseId = toInteger(dbAssoc["item_id"]);
|
||||||
this.index = 0;
|
this.index = 0;
|
||||||
this.itemTypeIndex = 0;
|
this.itemTypeIndex = 0;
|
||||||
@@ -188,7 +188,7 @@ class ItemTypeData {
|
|||||||
this.takeAnimationIndex = false;
|
this.takeAnimationIndex = false;
|
||||||
this.switchAnimationIndex = false;
|
this.switchAnimationIndex = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["item_type_id"]);
|
this.databaseId = toInteger(dbAssoc["item_type_id"]);
|
||||||
this.serverId = toInteger(dbAssoc["item_type_server"]);
|
this.serverId = toInteger(dbAssoc["item_type_server"]);
|
||||||
this.name = dbAssoc["item_type_name"];
|
this.name = dbAssoc["item_type_name"];
|
||||||
@@ -325,7 +325,7 @@ function createGroundItemObject(itemId) {
|
|||||||
setElementRotation(getItemData(itemId).object, getItemTypeData(getItemData(itemId).itemTypeIndex).dropRotation);
|
setElementRotation(getItemData(itemId).object, getItemTypeData(getItemData(itemId).itemTypeIndex).dropRotation);
|
||||||
setElementOnAllDimensions(getItemData(itemId).object, false);
|
setElementOnAllDimensions(getItemData(itemId).object, false);
|
||||||
setElementDimension(getItemData(itemId).object, getItemData(itemId).dimension);
|
setElementDimension(getItemData(itemId).object, getItemData(itemId).dimension);
|
||||||
//setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
|
//setEntityData(getItemData(itemId).object, "agrp.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
|
||||||
addToWorld(getItemData(itemId).object);
|
addToWorld(getItemData(itemId).object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ const VRR_JOBROUTESTATE_ATSTOP = 4; // For bus/trash stops that fre
|
|||||||
/**
|
/**
|
||||||
* @class Representing a job's data. Loaded and saved in the database
|
* @class Representing a job's data. Loaded and saved in the database
|
||||||
*/
|
*/
|
||||||
class JobData {
|
class JobData {
|
||||||
constructor(dbAssoc = false) {
|
constructor(dbAssoc = false) {
|
||||||
this.databaseId = 0;
|
this.databaseId = 0;
|
||||||
this.serverId = 0;
|
this.serverId = 0;
|
||||||
@@ -57,7 +57,7 @@ const VRR_JOBROUTESTATE_ATSTOP = 4; // For bus/trash stops that fre
|
|||||||
this.blackList = [];
|
this.blackList = [];
|
||||||
this.routes = [];
|
this.routes = [];
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_id"];
|
this.databaseId = dbAssoc["job_id"];
|
||||||
this.serverId = dbAssoc["job_server"];
|
this.serverId = dbAssoc["job_server"];
|
||||||
this.type = dbAssoc["job_type"];
|
this.type = dbAssoc["job_type"];
|
||||||
@@ -103,7 +103,7 @@ class JobRouteData {
|
|||||||
this.locationNextMessage = "";
|
this.locationNextMessage = "";
|
||||||
this.locations = [];
|
this.locations = [];
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["job_route_id"]);
|
this.databaseId = toInteger(dbAssoc["job_route_id"]);
|
||||||
this.name = toString(dbAssoc["job_route_name"]);
|
this.name = toString(dbAssoc["job_route_name"]);
|
||||||
this.jobId = toInteger(dbAssoc["job_route_job"]);
|
this.jobId = toInteger(dbAssoc["job_route_job"]);
|
||||||
@@ -137,7 +137,7 @@ class JobRouteLocationData {
|
|||||||
this.stopDelay = 0;
|
this.stopDelay = 0;
|
||||||
this.pay = 0;
|
this.pay = 0;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = toInteger(dbAssoc["job_route_loc_id"]);
|
this.databaseId = toInteger(dbAssoc["job_route_loc_id"]);
|
||||||
this.name = toString(dbAssoc["job_route_loc_name"]);
|
this.name = toString(dbAssoc["job_route_loc_name"]);
|
||||||
this.routeId = toInteger(dbAssoc["job_route_loc_route"]);
|
this.routeId = toInteger(dbAssoc["job_route_loc_route"]);
|
||||||
@@ -166,7 +166,7 @@ class JobEquipmentData {
|
|||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
this.items = [];
|
this.items = [];
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_equip_id"];
|
this.databaseId = dbAssoc["job_equip_id"];
|
||||||
this.job = dbAssoc["job_equip_job"];
|
this.job = dbAssoc["job_equip_job"];
|
||||||
this.name = dbAssoc["job_equip_name"];
|
this.name = dbAssoc["job_equip_name"];
|
||||||
@@ -192,7 +192,7 @@ class JobEquipmentItemData {
|
|||||||
this.jobIndex = -1;
|
this.jobIndex = -1;
|
||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_equip_item_id"];
|
this.databaseId = dbAssoc["job_equip_item_id"];
|
||||||
this.equipmentId = dbAssoc["job_equip_item_equip"];
|
this.equipmentId = dbAssoc["job_equip_item_equip"];
|
||||||
this.itemType = dbAssoc["job_equip_item_type"];
|
this.itemType = dbAssoc["job_equip_item_type"];
|
||||||
@@ -220,26 +220,26 @@ class JobUniformData {
|
|||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
|
|
||||||
this.bodyParts = {
|
this.bodyParts = {
|
||||||
hair: [0,0],
|
hair: [0, 0],
|
||||||
head: [0,0],
|
head: [0, 0],
|
||||||
upper: [0,0],
|
upper: [0, 0],
|
||||||
lower: [0,0],
|
lower: [0, 0],
|
||||||
};
|
};
|
||||||
|
|
||||||
this.bodyProps = {
|
this.bodyProps = {
|
||||||
hair: [0,0],
|
hair: [0, 0],
|
||||||
eyes: [0,0],
|
eyes: [0, 0],
|
||||||
head: [0,0],
|
head: [0, 0],
|
||||||
leftHand: [0,0],
|
leftHand: [0, 0],
|
||||||
rightHand: [0,0],
|
rightHand: [0, 0],
|
||||||
leftWrist: [0,0],
|
leftWrist: [0, 0],
|
||||||
rightWrist: [0,0],
|
rightWrist: [0, 0],
|
||||||
hip: [0,0],
|
hip: [0, 0],
|
||||||
leftFoot: [0,0],
|
leftFoot: [0, 0],
|
||||||
rightFoot: [0,0],
|
rightFoot: [0, 0],
|
||||||
};
|
};
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_uniform_id"];
|
this.databaseId = dbAssoc["job_uniform_id"];
|
||||||
this.job = dbAssoc["job_uniform_job"];
|
this.job = dbAssoc["job_uniform_job"];
|
||||||
this.name = dbAssoc["job_uniform_name"];
|
this.name = dbAssoc["job_uniform_name"];
|
||||||
@@ -290,7 +290,7 @@ class JobLocationData {
|
|||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
this.routeCache = [];
|
this.routeCache = [];
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_loc_id"];
|
this.databaseId = dbAssoc["job_loc_id"];
|
||||||
this.jobId = dbAssoc["job_loc_job"];
|
this.jobId = dbAssoc["job_loc_job"];
|
||||||
this.position = toVector3(dbAssoc["job_loc_pos_x"], dbAssoc["job_loc_pos_y"], dbAssoc["job_loc_pos_z"]);
|
this.position = toVector3(dbAssoc["job_loc_pos_x"], dbAssoc["job_loc_pos_y"], dbAssoc["job_loc_pos_z"]);
|
||||||
@@ -315,7 +315,7 @@ class JobWhiteListData {
|
|||||||
this.jobIndex = -1;
|
this.jobIndex = -1;
|
||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_wl_id"];
|
this.databaseId = dbAssoc["job_wl_id"];
|
||||||
this.job = dbAssoc["job_wl_job"];
|
this.job = dbAssoc["job_wl_job"];
|
||||||
this.subAccount = dbAssoc["job_wl_sacct"]
|
this.subAccount = dbAssoc["job_wl_sacct"]
|
||||||
@@ -336,7 +336,7 @@ class JobBlackListData {
|
|||||||
this.jobIndex = -1;
|
this.jobIndex = -1;
|
||||||
this.needsSaved = false;
|
this.needsSaved = false;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["job_bl_id"];
|
this.databaseId = dbAssoc["job_bl_id"];
|
||||||
this.job = dbAssoc["job_bl_job"];
|
this.job = dbAssoc["job_bl_job"];
|
||||||
this.subAccount = dbAssoc["job_bl_sacct"]
|
this.subAccount = dbAssoc["job_bl_sacct"]
|
||||||
@@ -624,11 +624,11 @@ function createAllJobPickups() {
|
|||||||
for (let j in getServerData().jobs[i].locations) {
|
for (let j in getServerData().jobs[i].locations) {
|
||||||
pickupCount++;
|
pickupCount++;
|
||||||
getServerData().jobs[i].locations[j].pickup = game.createPickup(getServerData().jobs[i].pickupModel, getServerData().jobs[i].locations[j].position);
|
getServerData().jobs[i].locations[j].pickup = game.createPickup(getServerData().jobs[i].pickupModel, getServerData().jobs[i].locations[j].position);
|
||||||
setEntityData(getServerData().jobs[i].locations[j].pickup, "vrr.owner.type", VRR_PICKUP_JOB, false);
|
setEntityData(getServerData().jobs[i].locations[j].pickup, "agrp.owner.type", VRR_PICKUP_JOB, false);
|
||||||
setEntityData(getServerData().jobs[i].locations[j].pickup, "vrr.owner.id", j, false);
|
setEntityData(getServerData().jobs[i].locations[j].pickup, "agrp.owner.id", j, false);
|
||||||
setEntityData(getServerData().jobs[i].locations[j].pickup, "vrr.label.type", VRR_LABEL_JOB, true);
|
setEntityData(getServerData().jobs[i].locations[j].pickup, "agrp.label.type", VRR_LABEL_JOB, true);
|
||||||
setEntityData(getServerData().jobs[i].locations[j].pickup, "vrr.label.name", getServerData().jobs[i].name, true);
|
setEntityData(getServerData().jobs[i].locations[j].pickup, "agrp.label.name", getServerData().jobs[i].name, true);
|
||||||
setEntityData(getServerData().jobs[i].locations[j].pickup, "vrr.label.jobType", getServerData().jobs[i].databaseId, true);
|
setEntityData(getServerData().jobs[i].locations[j].pickup, "agrp.label.jobType", getServerData().jobs[i].databaseId, true);
|
||||||
setElementOnAllDimensions(getServerData().jobs[i].locations[j].pickup, false);
|
setElementOnAllDimensions(getServerData().jobs[i].locations[j].pickup, false);
|
||||||
setElementDimension(getServerData().jobs[i].locations[j].pickup, getServerData().jobs[i].locations[j].dimension);
|
setElementDimension(getServerData().jobs[i].locations[j].pickup, getServerData().jobs[i].locations[j].dimension);
|
||||||
addToWorld(getServerData().jobs[i].locations[j].pickup);
|
addToWorld(getServerData().jobs[i].locations[j].pickup);
|
||||||
@@ -2742,11 +2742,11 @@ function createJobLocationPickup(jobId, locationId) {
|
|||||||
tempJobData.locations[locationId].pickup = pickup;
|
tempJobData.locations[locationId].pickup = pickup;
|
||||||
setElementDimension(pickup, tempJobData.locations[locationId].dimension);
|
setElementDimension(pickup, tempJobData.locations[locationId].dimension);
|
||||||
setElementOnAllDimensions(pickup, false);
|
setElementOnAllDimensions(pickup, false);
|
||||||
setEntityData(pickup, "vrr.owner.type", VRR_PICKUP_JOB, false);
|
setEntityData(pickup, "agrp.owner.type", VRR_PICKUP_JOB, false);
|
||||||
setEntityData(pickup, "vrr.owner.id", locationId, false);
|
setEntityData(pickup, "agrp.owner.id", locationId, false);
|
||||||
setEntityData(pickup, "vrr.label.type", VRR_LABEL_JOB, true);
|
setEntityData(pickup, "agrp.label.type", VRR_LABEL_JOB, true);
|
||||||
setEntityData(pickup, "vrr.label.name", tempJobData.name, true);
|
setEntityData(pickup, "agrp.label.name", tempJobData.name, true);
|
||||||
setEntityData(pickup, "vrr.label.jobType", tempJobData.databaseId, true);
|
setEntityData(pickup, "agrp.label.jobType", tempJobData.databaseId, true);
|
||||||
addToWorld(pickup);
|
addToWorld(pickup);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -15,76 +15,42 @@ function initLocaleScript() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getLocaleString(client, stringName, ...args) {
|
function getLocaleString(client, stringName, ...args) {
|
||||||
let tempString = getRawLocaleString(stringName, getPlayerData(client).locale);
|
let localeId = getPlayerData(client).locale;
|
||||||
if(tempString == "" || tempString == null || typeof tempString == "undefined") {
|
if (!findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName)) {
|
||||||
logToConsole(LOG_WARN, `[VRR.Locale] Locale string missing for ${stringName} on language ${getLocaleData(getPlayerData(client).locale).englishName}`);
|
|
||||||
submitBugReport(client, `(AUTOMATED REPORT) Locale string "${stringName}" is missing for "${getPlayerLocaleName(client)}"`);
|
submitBugReport(client, `(AUTOMATED REPORT) Locale string "${stringName}" is missing for "${getPlayerLocaleName(client)}"`);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 1; i <= args.length; i++) {
|
return findResourceByName("agrp_locale").exports.getLocaleString(localeId, stringName, args);
|
||||||
tempString = tempString.replace(`{${i}}`, args[i-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempString;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getLanguageLocaleString(localeId, stringName, ...args) {
|
function getLanguageLocaleString(localeId, stringName, ...args) {
|
||||||
let tempString = getRawLocaleString(stringName, localeId);
|
if (!findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName)) {
|
||||||
if(tempString == "" || tempString == null || typeof tempString == "undefined") {
|
|
||||||
logToConsole(LOG_WARN, `[VRR.Locale] Locale string missing for ${stringName} on language ${getLocaleData(getPlayerData(client).locale).englishName}`);
|
|
||||||
submitBugReport(client, `(AUTOMATED REPORT) Locale string "${stringName}" is missing for "${getPlayerLocaleName(client)}"`);
|
submitBugReport(client, `(AUTOMATED REPORT) Locale string "${stringName}" is missing for "${getPlayerLocaleName(client)}"`);
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 1; i <= args.length; i++) {
|
return findResourceByName("agrp_locale").exports.getLocaleString(getPlayerData(client).locale, stringName, args);
|
||||||
tempString = tempString.replace(`{${i}}`, args[i-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempString;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getGroupedLocaleString(client, stringName, index, ...args) {
|
function getGroupedLocaleString(client, stringName, index, ...args) {
|
||||||
let tempString = getRawGroupedLocaleString(stringName, getPlayerData(client).locale, index);
|
return findResourceByName("agrp_locale").exports.getGroupedLocaleString(getPlayerData(client).locale, stringName, index, args);
|
||||||
|
|
||||||
for(let i = 1; i <= args.length; i++) {
|
|
||||||
tempString = tempString.replace(`{${i}}`, args[i-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempString;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getRawLocaleString(stringName, localeId) {
|
function getRawLocaleString(stringName, localeId) {
|
||||||
return getLocaleStrings()[localeId][stringName];
|
return findResourceByName("agrp_locale").exports.getRawLocaleString(localeId, stringName);
|
||||||
|
|
||||||
//if(findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName) == false) {
|
|
||||||
// return "";
|
|
||||||
//}
|
|
||||||
|
|
||||||
//let tempString = findResourceByName("agrp_locale").exports.getRawLocaleString(localeId, stringName);
|
|
||||||
//if(tempString == "" || tempString == null || tempString == undefined) {
|
|
||||||
// return "";
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getRawGroupedLocaleString(stringName, localeId, index) {
|
function getRawGroupedLocaleString(stringName, localeId, index) {
|
||||||
return getLocaleStrings()[localeId][stringName][index];
|
return findResourceByName("agrp_locale").exports.getRawGroupedLocaleString(localeId, stringName, index);
|
||||||
|
|
||||||
//if(findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName) == false) {
|
|
||||||
// return "";
|
|
||||||
//}
|
|
||||||
|
|
||||||
//let tempString = findResourceByName("agrp_locale").exports.getRawLocaleString(localeId, stringName);
|
|
||||||
//if(tempString == "" || tempString == null || tempString == undefined) {
|
|
||||||
// return "";
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -96,58 +62,24 @@ function getPlayerLocaleName(client) {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function loadAllLocaleStrings() {
|
|
||||||
let tempLocaleStrings = {};
|
|
||||||
|
|
||||||
let locales = getGlobalConfig().locale.locales;
|
|
||||||
for(let i in locales) {
|
|
||||||
let localeData = locales[i];
|
|
||||||
let localeFile = JSON.parse(loadTextFile(`locale/${localeData.stringsFile}`));
|
|
||||||
tempLocaleStrings[i] = localeFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tempLocaleStrings;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function getLocaleStrings() {
|
|
||||||
return getServerData().localeStrings;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function getLocaleFromParams(params) {
|
function getLocaleFromParams(params) {
|
||||||
let locales = getLocales();
|
return findResourceByName("agrp_locale").exports.getLocaleFromParams(params);
|
||||||
if(isNaN(params)) {
|
|
||||||
for(let i in locales) {
|
|
||||||
if(toLowerCase(locales[i].isoCode).indexOf(toLowerCase(params)) != -1) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(toLowerCase(locales[i].englishName).indexOf(toLowerCase(params)) != -1) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getLocales() {
|
function getLocales() {
|
||||||
return getGlobalConfig().locale.locales;
|
return findResourceByName("agrp_locale").exports.getLocales();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function showLocaleListCommand(command, params, client) {
|
function showLocaleListCommand(command, params, client) {
|
||||||
let localeList = getLocales().map(function(x) { return x[0]; });
|
let localeList = getLocales().map(function (x) { return x[0]; });
|
||||||
let chunkedList = splitArrayIntoChunks(localeList, 10);
|
let chunkedList = splitArrayIntoChunks(localeList, 10);
|
||||||
|
|
||||||
messagePlayerInfo(client, getLocaleString(client, "HeaderLocaleList"));
|
messagePlayerInfo(client, getLocaleString(client, "HeaderLocaleList"));
|
||||||
for(let i in chunkedList) {
|
for (let i in chunkedList) {
|
||||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -155,14 +87,14 @@ function showLocaleListCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setLocaleCommand(command, params, client) {
|
function setLocaleCommand(command, params, client) {
|
||||||
if(areParamsEmpty(params)) {
|
if (areParamsEmpty(params)) {
|
||||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let localeId = getLocaleFromParams(params);
|
let localeId = getLocaleFromParams(params);
|
||||||
|
|
||||||
if(!getLocaleData(localeId)) {
|
if (!getLocaleData(localeId)) {
|
||||||
messagePlayerInfo(client, getLocaleString(client, "InvalidLocale"));
|
messagePlayerInfo(client, getLocaleString(client, "InvalidLocale"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -176,7 +108,7 @@ function setLocaleCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getLocaleData(localeId) {
|
function getLocaleData(localeId) {
|
||||||
if(typeof getLocales()[localeId] != "undefined") {
|
if (typeof getLocales()[localeId] != "undefined") {
|
||||||
return getLocales()[localeId];
|
return getLocales()[localeId];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,12 +136,12 @@ function reloadLocaleConfigurationCommand(command, params, client) {
|
|||||||
|
|
||||||
async function translateMessage(messageText, translateFrom = getGlobalConfig().locale.defaultLanguageId, translateTo = getGlobalConfig().locale.defaultLanguageId) {
|
async function translateMessage(messageText, translateFrom = getGlobalConfig().locale.defaultLanguageId, translateTo = getGlobalConfig().locale.defaultLanguageId) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if(translateFrom == translateTo) {
|
if (translateFrom == translateTo) {
|
||||||
resolve(messageText);
|
resolve(messageText);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i in cachedTranslations[translateFrom][translateTo]) {
|
for (let i in cachedTranslations[translateFrom][translateTo]) {
|
||||||
if(cachedTranslations[translateFrom][translateTo][i][0] == messageText) {
|
if (cachedTranslations[translateFrom][translateTo][i][0] == messageText) {
|
||||||
logToConsole(LOG_DEBUG, `[Translate]: Using existing translation for ${getGlobalConfig().locale.locales[translateFrom].englishName} to ${getGlobalConfig().locale.locales[translateTo].englishName} - (${messageText}), (${cachedTranslations[translateFrom][translateTo][i][1]})`);
|
logToConsole(LOG_DEBUG, `[Translate]: Using existing translation for ${getGlobalConfig().locale.locales[translateFrom].englishName} to ${getGlobalConfig().locale.locales[translateTo].englishName} - (${messageText}), (${cachedTranslations[translateFrom][translateTo][i][1]})`);
|
||||||
resolve(cachedTranslations[translateFrom][translateTo][i][1]);
|
resolve(cachedTranslations[translateFrom][translateTo][i][1]);
|
||||||
return true;
|
return true;
|
||||||
@@ -220,13 +152,13 @@ async function translateMessage(messageText, translateFrom = getGlobalConfig().l
|
|||||||
httpGet(
|
httpGet(
|
||||||
thisTranslationURL,
|
thisTranslationURL,
|
||||||
"",
|
"",
|
||||||
function(data) {
|
function (data) {
|
||||||
data = ArrayBufferToString(data);
|
data = ArrayBufferToString(data);
|
||||||
let translationData = JSON.parse(data);
|
let translationData = JSON.parse(data);
|
||||||
cachedTranslations[translateFrom][translateTo].push([messageText, translationData.responseData.translatedText]);
|
cachedTranslations[translateFrom][translateTo].push([messageText, translationData.responseData.translatedText]);
|
||||||
resolve(translationData.responseData.translatedText);
|
resolve(translationData.responseData.translatedText);
|
||||||
},
|
},
|
||||||
function(data) {
|
function (data) {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -168,8 +168,8 @@ function enterExitPropertyCommand(command, params, client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let ownerType = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.type");
|
let ownerType = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.type");
|
||||||
let ownerId = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.id");
|
let ownerId = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.id");
|
||||||
|
|
||||||
switch (ownerType) {
|
switch (ownerType) {
|
||||||
case VRR_PICKUP_BUSINESS_ENTRANCE:
|
case VRR_PICKUP_BUSINESS_ENTRANCE:
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ function getVehicleHeading(vehicle) {
|
|||||||
|
|
||||||
function setVehicleHeading(vehicle, heading) {
|
function setVehicleHeading(vehicle, heading) {
|
||||||
if (getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
return sendNetworkEventToPlayer("vrr.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
||||||
}
|
}
|
||||||
return vehicle.heading = heading;
|
return vehicle.heading = heading;
|
||||||
}
|
}
|
||||||
@@ -255,7 +255,7 @@ function removePlayerFromVehicle(client) {
|
|||||||
function setPlayerSkin(client, skinIndex) {
|
function setPlayerSkin(client, skinIndex) {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s skin to ${getGameConfig().skins[getGame()][skinIndex][0]} (Index: ${skinIndex}, Name: ${getGameConfig().skins[getGame()][skinIndex][1]})`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s skin to ${getGameConfig().skins[getGame()][skinIndex][0]} (Index: ${skinIndex}, Name: ${getGameConfig().skins[getGame()][skinIndex][1]})`);
|
||||||
if (getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
triggerNetworkEvent("vrr.localPlayerSkin", client, getGameConfig().skins[getGame()][skinIndex][0]);
|
triggerNetworkEvent("agrp.localPlayerSkin", client, getGameConfig().skins[getGame()][skinIndex][0]);
|
||||||
} else {
|
} else {
|
||||||
getPlayerPed(client).modelIndex = getGameConfig().skins[getGame()][skinIndex][0];
|
getPlayerPed(client).modelIndex = getGameConfig().skins[getGame()][skinIndex][0];
|
||||||
}
|
}
|
||||||
@@ -547,15 +547,15 @@ function repairVehicle(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleLights(vehicle, lights) {
|
function setVehicleLights(vehicle, lights) {
|
||||||
setEntityData(vehicle, "vrr.lights", lights, true);
|
setEntityData(vehicle, "agrp.lights", lights, true);
|
||||||
sendNetworkEventToPlayer("vrr.veh.lights", null, vehicle.id, lights);
|
sendNetworkEventToPlayer("agrp.veh.lights", null, vehicle.id, lights);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleEngine(vehicle, engine) {
|
function setVehicleEngine(vehicle, engine) {
|
||||||
vehicle.engine = engine;
|
vehicle.engine = engine;
|
||||||
setEntityData(vehicle, "vrr.engine", engine, true);
|
setEntityData(vehicle, "agrp.engine", engine, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -688,7 +688,7 @@ function setPlayerFightStyle(client, fightStyleId) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
setEntityData(getPlayerElement(client), "vrr.fightStyle", [getGameConfig().fightStyles[getGame()][fightStyleId][1][0], getGameConfig().fightStyles[getGame()][fightStyleId][1][1]]);
|
setEntityData(getPlayerElement(client), "agrp.fightStyle", [getGameConfig().fightStyles[getGame()][fightStyleId][1][0], getGameConfig().fightStyles[getGame()][fightStyleId][1][1]]);
|
||||||
forcePlayerToSyncElementProperties(null, getPlayerElement(client));
|
forcePlayerToSyncElementProperties(null, getPlayerElement(client));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -707,7 +707,7 @@ function getPlayerElement(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementPosition(element, position) {
|
function setElementPosition(element, position) {
|
||||||
sendNetworkEventToPlayer("vrr.elementPosition", null, element.id, position);
|
sendNetworkEventToPlayer("agrp.elementPosition", null, element.id, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -725,14 +725,14 @@ function getElementHeading(element) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementInterior(element, interior) {
|
function setElementInterior(element, interior) {
|
||||||
setEntityData(element, "vrr.interior", interior, true);
|
setEntityData(element, "agrp.interior", interior, true);
|
||||||
forcePlayerToSyncElementProperties(null, element);
|
forcePlayerToSyncElementProperties(null, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementCollisionsEnabled(element, state) {
|
function setElementCollisionsEnabled(element, state) {
|
||||||
sendNetworkEventToPlayer("vrr.elementCollisions", null, element.id, state);
|
sendNetworkEventToPlayer("agrp.elementCollisions", null, element.id, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -1142,13 +1142,13 @@ function setVehicleHealth(vehicle, health) {
|
|||||||
|
|
||||||
function givePlayerWeapon(client, weaponId, ammo, active = true) {
|
function givePlayerWeapon(client, weaponId, ammo, active = true) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to ${getPlayerDisplayForConsole(client)} to give weapon (Weapon: ${weaponId}, Ammo: ${ammo})`);
|
logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to ${getPlayerDisplayForConsole(client)} to give weapon (Weapon: ${weaponId}, Ammo: ${ammo})`);
|
||||||
sendNetworkEventToPlayer("vrr.giveWeapon", client, weaponId, ammo, active);
|
sendNetworkEventToPlayer("agrp.giveWeapon", client, weaponId, ammo, active);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setPlayerWantedLevel(client, wantedLevel) {
|
function setPlayerWantedLevel(client, wantedLevel) {
|
||||||
sendNetworkEventToPlayer("vrr.wantedLevel", client, wantedLevel);
|
sendNetworkEventToPlayer("agrp.wantedLevel", client, wantedLevel);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1287,7 +1287,7 @@ function serverBanIP(ip) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleTrunkState(vehicle, trunkState) {
|
function setVehicleTrunkState(vehicle, trunkState) {
|
||||||
sendNetworkEventToPlayer("vrr.veh.trunk", null, getVehicleForNetworkEvent(vehicle), trunkState);
|
sendNetworkEventToPlayer("agrp.veh.trunk", null, getVehicleForNetworkEvent(vehicle), trunkState);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ let disconnectReasons = [
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerPosition(client) {
|
function getPlayerPosition(client) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return getPlayerData(client).syncPosition;
|
return getPlayerData(client).syncPosition;
|
||||||
} else {
|
} else {
|
||||||
if(getPlayerPed(client) != null) {
|
if (getPlayerPed(client) != null) {
|
||||||
return getPlayerPed(client).position;
|
return getPlayerPed(client).position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,10 +59,10 @@ function setPlayerPosition(client, position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerHeading(client) {
|
function getPlayerHeading(client) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return getPlayerData(client).syncHeading;
|
return getPlayerData(client).syncHeading;
|
||||||
} else {
|
} else {
|
||||||
if(getPlayerPed(client) != null) {
|
if (getPlayerPed(client) != null) {
|
||||||
return getPlayerPed(client).heading;
|
return getPlayerPed(client).heading;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,10 +78,10 @@ function setPlayerHeading(client, heading) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerVehicle(client) {
|
function getPlayerVehicle(client) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return getPlayerData().syncVehicle;
|
return getPlayerData().syncVehicle;
|
||||||
} else {
|
} else {
|
||||||
if(getPlayerPed(client).vehicle) {
|
if (getPlayerPed(client).vehicle) {
|
||||||
return getPlayerPed(client).vehicle;
|
return getPlayerPed(client).vehicle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,10 +91,10 @@ function getPlayerVehicle(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerDimension(client) {
|
function getPlayerDimension(client) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return getPlayerData(client).syncDimension;
|
return getPlayerData(client).syncDimension;
|
||||||
} else {
|
} else {
|
||||||
if(getPlayerPed(client) != null) {
|
if (getPlayerPed(client) != null) {
|
||||||
return getPlayerPed(client).dimension;
|
return getPlayerPed(client).dimension;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,10 +110,10 @@ function getPlayerInterior(client) {
|
|||||||
|
|
||||||
function setPlayerDimension(client, dimension) {
|
function setPlayerDimension(client, dimension) {
|
||||||
logToConsole(LOG_VERBOSE, `Setting ${getPlayerDisplayForConsole(client)}'s dimension to ${dimension}`);
|
logToConsole(LOG_VERBOSE, `Setting ${getPlayerDisplayForConsole(client)}'s dimension to ${dimension}`);
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
getPlayerData(client).syncDimension = dimension;
|
getPlayerData(client).syncDimension = dimension;
|
||||||
} else {
|
} else {
|
||||||
if(getPlayerPed(client) != null) {
|
if (getPlayerPed(client) != null) {
|
||||||
getPlayerPed(client).dimension = dimension;
|
getPlayerPed(client).dimension = dimension;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ function setPlayerDimension(client, dimension) {
|
|||||||
function setPlayerInterior(client, interior) {
|
function setPlayerInterior(client, interior) {
|
||||||
logToConsole(LOG_VERBOSE, `Setting ${getPlayerDisplayForConsole(client)}'s interior to ${interior}`);
|
logToConsole(LOG_VERBOSE, `Setting ${getPlayerDisplayForConsole(client)}'s interior to ${interior}`);
|
||||||
sendPlayerSetInterior(client, interior);
|
sendPlayerSetInterior(client, interior);
|
||||||
if(isPlayerLoggedIn(client) && isPlayerSpawned(client)) {
|
if (isPlayerLoggedIn(client) && isPlayerSpawned(client)) {
|
||||||
getPlayerCurrentSubAccount(client).interior = interior;
|
getPlayerCurrentSubAccount(client).interior = interior;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ function setPlayerInterior(client, interior) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function isPlayerInAnyVehicle(client) {
|
function isPlayerInAnyVehicle(client) {
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return (getPlayerData().syncVehicle != null);
|
return (getPlayerData().syncVehicle != null);
|
||||||
} else {
|
} else {
|
||||||
return (getPlayerPed(client).vehicle != null);
|
return (getPlayerPed(client).vehicle != null);
|
||||||
@@ -142,15 +142,15 @@ function isPlayerInAnyVehicle(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerVehicleSeat(client) {
|
function getPlayerVehicleSeat(client) {
|
||||||
if(!isPlayerInAnyVehicle(client)) {
|
if (!isPlayerInAnyVehicle(client)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!areServerElementsSupported()) {
|
if (!areServerElementsSupported()) {
|
||||||
return getPlayerData().syncVehicleSeat;
|
return getPlayerData().syncVehicleSeat;
|
||||||
} else {
|
} else {
|
||||||
for(let i = 0 ; i <= 8 ; i++) {
|
for (let i = 0; i <= 8; i++) {
|
||||||
if(getPlayerVehicle(client).getOccupant(i) == getPlayerPed(client)) {
|
if (getPlayerVehicle(client).getOccupant(i) == getPlayerPed(client)) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,8 +180,8 @@ function getVehicleHeading(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleHeading(vehicle, heading) {
|
function setVehicleHeading(vehicle, heading) {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
return sendNetworkEventToPlayer("vrr.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
||||||
}
|
}
|
||||||
return vehicle.heading = heading;
|
return vehicle.heading = heading;
|
||||||
}
|
}
|
||||||
@@ -189,7 +189,7 @@ function setVehicleHeading(vehicle, heading) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getElementTransient(element) {
|
function getElementTransient(element) {
|
||||||
if(typeof element.transient != "undefined") {
|
if (typeof element.transient != "undefined") {
|
||||||
return element.transient;
|
return element.transient;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -198,7 +198,7 @@ function getElementTransient(element) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementTransient(element, state) {
|
function setElementTransient(element, state) {
|
||||||
if(typeof element.transient != "undefined") {
|
if (typeof element.transient != "undefined") {
|
||||||
element.transient = state;
|
element.transient = state;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -214,8 +214,8 @@ function getVehicleSyncer(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getVehicleForNetworkEvent(vehicle) {
|
function getVehicleForNetworkEvent(vehicle) {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
if(getVehicleData(vehicle).ivNetworkId != -1) {
|
if (getVehicleData(vehicle).ivNetworkId != -1) {
|
||||||
return getVehicleData(vehicle).ivNetworkId;
|
return getVehicleData(vehicle).ivNetworkId;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@@ -227,11 +227,11 @@ function getVehicleForNetworkEvent(vehicle) {
|
|||||||
|
|
||||||
function deleteGameElement(element) {
|
function deleteGameElement(element) {
|
||||||
try {
|
try {
|
||||||
if(element != null) {
|
if (element != null) {
|
||||||
destroyElement(element);
|
destroyElement(element);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch(error) {
|
} catch (error) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -254,8 +254,8 @@ function removePlayerFromVehicle(client) {
|
|||||||
|
|
||||||
function setPlayerSkin(client, skinIndex) {
|
function setPlayerSkin(client, skinIndex) {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s skin to ${getGameConfig().skins[getGame()][skinIndex][0]} (Index: ${skinIndex}, Name: ${getGameConfig().skins[getGame()][skinIndex][1]})`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s skin to ${getGameConfig().skins[getGame()][skinIndex][0]} (Index: ${skinIndex}, Name: ${getGameConfig().skins[getGame()][skinIndex][1]})`);
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
triggerNetworkEvent("vrr.localPlayerSkin", client, getGameConfig().skins[getGame()][skinIndex][0]);
|
triggerNetworkEvent("agrp.localPlayerSkin", client, getGameConfig().skins[getGame()][skinIndex][0]);
|
||||||
} else {
|
} else {
|
||||||
getPlayerPed(client).modelIndex = getGameConfig().skins[getGame()][skinIndex][0];
|
getPlayerPed(client).modelIndex = getGameConfig().skins[getGame()][skinIndex][0];
|
||||||
}
|
}
|
||||||
@@ -292,7 +292,7 @@ function setPlayerArmour(client, armour) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerArmour(client) {
|
function getPlayerArmour(client) {
|
||||||
if(areServerElementsSupported(client)) {
|
if (areServerElementsSupported(client)) {
|
||||||
return getPlayerPed(client).armour;
|
return getPlayerPed(client).armour;
|
||||||
} else {
|
} else {
|
||||||
return getPlayerData(client).syncArmour;
|
return getPlayerData(client).syncArmour;
|
||||||
@@ -302,11 +302,11 @@ function getPlayerArmour(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setPlayerCash(client, amount) {
|
function setPlayerCash(client, amount) {
|
||||||
if(client == null) {
|
if (client == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isNaN(amount)) {
|
if (isNaN(amount)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,11 +317,11 @@ function setPlayerCash(client, amount) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function givePlayerCash(client, amount) {
|
function givePlayerCash(client, amount) {
|
||||||
if(client == null) {
|
if (client == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isNaN(amount)) {
|
if (isNaN(amount)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,11 +332,11 @@ function givePlayerCash(client, amount) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function takePlayerCash(client, amount) {
|
function takePlayerCash(client, amount) {
|
||||||
if(client == null) {
|
if (client == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isNaN(amount)) {
|
if (isNaN(amount)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,7 +368,7 @@ function getPlayerWeaponAmmo(client) {
|
|||||||
|
|
||||||
function setPlayerVelocity(client, velocity) {
|
function setPlayerVelocity(client, velocity) {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s velocity to ${velocity.x}, ${velocity.y}, ${velocity.z}`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s velocity to ${velocity.x}, ${velocity.y}, ${velocity.z}`);
|
||||||
if(typeof getPlayerPed(client).velocity != "undefined") {
|
if (typeof getPlayerPed(client).velocity != "undefined") {
|
||||||
getPlayerPed(client).velocity = velocity;
|
getPlayerPed(client).velocity = velocity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,7 +376,7 @@ function setPlayerVelocity(client, velocity) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerVelocity(client) {
|
function getPlayerVelocity(client) {
|
||||||
if(typeof getPlayerPed(client).velocity != "undefined") {
|
if (typeof getPlayerPed(client).velocity != "undefined") {
|
||||||
return getPlayerPed(client).velocity;
|
return getPlayerPed(client).velocity;
|
||||||
}
|
}
|
||||||
return toVector3(0.0, 0.0, 0.0);
|
return toVector3(0.0, 0.0, 0.0);
|
||||||
@@ -385,7 +385,7 @@ function getPlayerVelocity(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getElementDimension(element) {
|
function getElementDimension(element) {
|
||||||
if(typeof element.dimension != "undefined") {
|
if (typeof element.dimension != "undefined") {
|
||||||
return element.dimension;
|
return element.dimension;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -394,7 +394,7 @@ function getElementDimension(element) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementDimension(element, dimension) {
|
function setElementDimension(element, dimension) {
|
||||||
if(typeof element.dimension != "undefined") {
|
if (typeof element.dimension != "undefined") {
|
||||||
logToConsole(LOG_VERBOSE, `Setting element ${element} (${element.id}) dimension to ${dimension}`);
|
logToConsole(LOG_VERBOSE, `Setting element ${element} (${element.id}) dimension to ${dimension}`);
|
||||||
element.dimension = dimension;
|
element.dimension = dimension;
|
||||||
return true;
|
return true;
|
||||||
@@ -405,7 +405,7 @@ function setElementDimension(element, dimension) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementRotation(element, rotation) {
|
function setElementRotation(element, rotation) {
|
||||||
if(typeof element.setRotation != "undefined") {
|
if (typeof element.setRotation != "undefined") {
|
||||||
element.setRotation(rotation);
|
element.setRotation(rotation);
|
||||||
} else {
|
} else {
|
||||||
return element.rotation = rotation;
|
return element.rotation = rotation;
|
||||||
@@ -415,24 +415,24 @@ function setElementRotation(element, rotation) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function givePlayerHealth(client, amount) {
|
function givePlayerHealth(client, amount) {
|
||||||
if(getPlayerHealth(client)+amount > 100) {
|
if (getPlayerHealth(client) + amount > 100) {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s health to 100`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s health to 100`);
|
||||||
setPlayerHealth(client, 100);
|
setPlayerHealth(client, 100);
|
||||||
} else {
|
} else {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s health to ${getPlayerHealth(client)+amount}`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s health to ${getPlayerHealth(client) + amount}`);
|
||||||
setPlayerHealth(client, getPlayerHealth(client)+amount);
|
setPlayerHealth(client, getPlayerHealth(client) + amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function givePlayerArmour(client, amount) {
|
function givePlayerArmour(client, amount) {
|
||||||
if(getPlayerArmour(client)+amount > 100) {
|
if (getPlayerArmour(client) + amount > 100) {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s armour to 100`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s armour to 100`);
|
||||||
setPlayerArmour(client, 100);
|
setPlayerArmour(client, 100);
|
||||||
} else {
|
} else {
|
||||||
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s armour to ${getPlayerArmour(client)+amount}`);
|
logToConsole(LOG_DEBUG, `Setting ${getPlayerDisplayForConsole(client)}'s armour to ${getPlayerArmour(client) + amount}`);
|
||||||
setPlayerArmour(client, getPlayerArmour(client)+amount);
|
setPlayerArmour(client, getPlayerArmour(client) + amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -469,7 +469,7 @@ function getServerName() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGamePickup(modelIndex, position, type) {
|
function createGamePickup(modelIndex, position, type) {
|
||||||
if(!isGameFeatureSupported("pickups")) {
|
if (!isGameFeatureSupported("pickups")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return game.createPickup(modelIndex, position, type);
|
return game.createPickup(modelIndex, position, type);
|
||||||
@@ -478,7 +478,7 @@ function createGamePickup(modelIndex, position, type) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGameBlip(position, type = 0, colour = toColour(255, 255, 255, 255)) {
|
function createGameBlip(position, type = 0, colour = toColour(255, 255, 255, 255)) {
|
||||||
if(!isGameFeatureSupported("blips")) {
|
if (!isGameFeatureSupported("blips")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return game.createBlip(type, position, 1, colour);
|
return game.createBlip(type, position, 1, colour);
|
||||||
@@ -487,7 +487,7 @@ function createGameBlip(position, type = 0, colour = toColour(255, 255, 255, 255
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGameObject(modelIndex, position) {
|
function createGameObject(modelIndex, position) {
|
||||||
if(!isGameFeatureSupported("objects")) {
|
if (!isGameFeatureSupported("objects")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return game.createObject(getGameConfig().objects[getGame()][modelIndex][0], position);
|
return game.createObject(getGameConfig().objects[getGame()][modelIndex][0], position);
|
||||||
@@ -496,13 +496,13 @@ function createGameObject(modelIndex, position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementOnAllDimensions(element, state) {
|
function setElementOnAllDimensions(element, state) {
|
||||||
if(!isNull(element) && element != false) {
|
if (!isNull(element) && element != false) {
|
||||||
if(typeof element.netFlags != "undefined") {
|
if (typeof element.netFlags != "undefined") {
|
||||||
if(typeof element.netFlags.onAllDimensions != "undefined") {
|
if (typeof element.netFlags.onAllDimensions != "undefined") {
|
||||||
element.netFlags.onAllDimensions = state;
|
element.netFlags.onAllDimensions = state;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(typeof element.onAllDimensions != "undefined") {
|
if (typeof element.onAllDimensions != "undefined") {
|
||||||
element.onAllDimensions = state;
|
element.onAllDimensions = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -512,7 +512,7 @@ function setElementOnAllDimensions(element, state) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function destroyGameElement(element) {
|
function destroyGameElement(element) {
|
||||||
if(!isNull(element) && element != false) {
|
if (!isNull(element) && element != false) {
|
||||||
destroyElement(element);
|
destroyElement(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -532,7 +532,7 @@ function getPlayerLastVehicle(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function isVehicleObject(vehicle) {
|
function isVehicleObject(vehicle) {
|
||||||
if(vehicle == null || vehicle == undefined) {
|
if (vehicle == null || vehicle == undefined) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (vehicle.type == ELEMENT_VEHICLE);
|
return (vehicle.type == ELEMENT_VEHICLE);
|
||||||
@@ -547,15 +547,15 @@ function repairVehicle(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleLights(vehicle, lights) {
|
function setVehicleLights(vehicle, lights) {
|
||||||
setEntityData(vehicle, "vrr.lights", lights, true);
|
setEntityData(vehicle, "agrp.lights", lights, true);
|
||||||
sendNetworkEventToPlayer("vrr.veh.lights", null, vehicle.id, lights);
|
sendNetworkEventToPlayer("agrp.veh.lights", null, vehicle.id, lights);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleEngine(vehicle, engine) {
|
function setVehicleEngine(vehicle, engine) {
|
||||||
vehicle.engine = engine;
|
vehicle.engine = engine;
|
||||||
setEntityData(vehicle, "vrr.engine", engine, true);
|
setEntityData(vehicle, "agrp.engine", engine, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -600,11 +600,11 @@ function setVehicleColours(vehicle, colour1, colour2, colour3 = -1, colour4 = -1
|
|||||||
vehicle.colour1 = colour1;
|
vehicle.colour1 = colour1;
|
||||||
vehicle.colour2 = colour2;
|
vehicle.colour2 = colour2;
|
||||||
|
|
||||||
if(colour3 != -1) {
|
if (colour3 != -1) {
|
||||||
vehicle.colour3 = colour3;
|
vehicle.colour3 = colour3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(colour4 != -1) {
|
if (colour4 != -1) {
|
||||||
vehicle.colour4 = colour4;
|
vehicle.colour4 = colour4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -612,7 +612,7 @@ function setVehicleColours(vehicle, colour1, colour2, colour3 = -1, colour4 = -1
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGameVehicle(modelIndex, position, heading) {
|
function createGameVehicle(modelIndex, position, heading) {
|
||||||
if(areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
return mp.vehicles.new(getGameConfig().vehicles[getGame()][modelIndex][0], position, {
|
return mp.vehicles.new(getGameConfig().vehicles[getGame()][modelIndex][0], position, {
|
||||||
heading: heading,
|
heading: heading,
|
||||||
numberPlate: "",
|
numberPlate: "",
|
||||||
@@ -628,7 +628,7 @@ function createGameVehicle(modelIndex, position, heading) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createGameCivilian(modelIndex, position, heading) {
|
function createGameCivilian(modelIndex, position, heading) {
|
||||||
if(areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
return mp.peds.new(getGameConfig().skins[getGame()][modelIndex][1], position, heading, 0);
|
return mp.peds.new(getGameConfig().skins[getGame()][modelIndex][1], position, heading, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,7 +644,7 @@ function getIsland(position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function isValidVehicleModel(model) {
|
function isValidVehicleModel(model) {
|
||||||
if(getVehicleModelIndexFromModel(model) != false) {
|
if (getVehicleModelIndexFromModel(model) != false) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,7 +654,7 @@ function isValidVehicleModel(model) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setGameTime(hour, minute, minuteDuration = 1000) {
|
function setGameTime(hour, minute, minuteDuration = 1000) {
|
||||||
if(isTimeSupported()) {
|
if (isTimeSupported()) {
|
||||||
game.time.hour = hour;
|
game.time.hour = hour;
|
||||||
game.time.minute = minute;
|
game.time.minute = minute;
|
||||||
game.time.minuteDuration = minuteDuration;
|
game.time.minuteDuration = minuteDuration;
|
||||||
@@ -664,7 +664,7 @@ function setGameTime(hour, minute, minuteDuration = 1000) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setGameWeather(weather) {
|
function setGameWeather(weather) {
|
||||||
if(isWeatherSupported()) {
|
if (isWeatherSupported()) {
|
||||||
mp.world.weather = weather;
|
mp.world.weather = weather;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -690,7 +690,7 @@ function getPlayerElement(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementPosition(element, position) {
|
function setElementPosition(element, position) {
|
||||||
sendNetworkEventToPlayer("vrr.elementPosition", null, element.id, position);
|
sendNetworkEventToPlayer("agrp.elementPosition", null, element.id, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -714,13 +714,13 @@ function setElementInterior(element, interior) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setElementCollisionsEnabled(element, state) {
|
function setElementCollisionsEnabled(element, state) {
|
||||||
//sendNetworkEventToPlayer("vrr.elementCollisions", null, element.id, state);
|
//sendNetworkEventToPlayer("agrp.elementCollisions", null, element.id, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function isTaxiVehicle(vehicle) {
|
function isTaxiVehicle(vehicle) {
|
||||||
if(getGameConfig().taxiModels[getGame()].indexOf(vehicle.modelIndex) != -1) {
|
if (getGameConfig().taxiModels[getGame()].indexOf(vehicle.modelIndex) != -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -737,7 +737,7 @@ function getVehicleName(vehicle) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getElementModel(element) {
|
function getElementModel(element) {
|
||||||
if(typeof element.model != "undefined") {
|
if (typeof element.model != "undefined") {
|
||||||
return element.model;
|
return element.model;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -757,11 +757,11 @@ function getPlayerWeapon(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function connectToDatabase() {
|
function connectToDatabase() {
|
||||||
if(getDatabaseConfig().usePersistentConnection) {
|
if (getDatabaseConfig().usePersistentConnection) {
|
||||||
if(persistentDatabaseConnection == null) {
|
if (persistentDatabaseConnection == null) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Database] Initializing database connection ...`);
|
logToConsole(LOG_DEBUG, `[VRR.Database] Initializing database connection ...`);
|
||||||
persistentDatabaseConnection = module.mysql.connect(getDatabaseConfig().host, getDatabaseConfig().user, getDatabaseConfig().pass, getDatabaseConfig().name, getDatabaseConfig().port);
|
persistentDatabaseConnection = module.mysql.connect(getDatabaseConfig().host, getDatabaseConfig().user, getDatabaseConfig().pass, getDatabaseConfig().name, getDatabaseConfig().port);
|
||||||
if(persistentDatabaseConnection.error) {
|
if (persistentDatabaseConnection.error) {
|
||||||
logToConsole(LOG_ERROR, `[VRR.Database] Database connection error: ${persistentDatabaseConnection.error}`);
|
logToConsole(LOG_ERROR, `[VRR.Database] Database connection error: ${persistentDatabaseConnection.error}`);
|
||||||
persistentDatabaseConnection = null;
|
persistentDatabaseConnection = null;
|
||||||
return false;
|
return false;
|
||||||
@@ -775,7 +775,7 @@ function connectToDatabase() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let databaseConnection = module.mysql.connect(getDatabaseConfig().host, getDatabaseConfig().user, getDatabaseConfig().pass, getDatabaseConfig().name, getDatabaseConfig().port);
|
let databaseConnection = module.mysql.connect(getDatabaseConfig().host, getDatabaseConfig().user, getDatabaseConfig().pass, getDatabaseConfig().name, getDatabaseConfig().port);
|
||||||
if(databaseConnection.error) {
|
if (databaseConnection.error) {
|
||||||
logToConsole(LOG_ERROR, `[VRR.Database] Database connection error: ${persistentDatabaseConnection.error}`);
|
logToConsole(LOG_ERROR, `[VRR.Database] Database connection error: ${persistentDatabaseConnection.error}`);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -787,11 +787,11 @@ function connectToDatabase() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function disconnectFromDatabase(dbConnection) {
|
function disconnectFromDatabase(dbConnection) {
|
||||||
if(!getDatabaseConfig().usePersistentConnection) {
|
if (!getDatabaseConfig().usePersistentConnection) {
|
||||||
try {
|
try {
|
||||||
dbConnection.close();
|
dbConnection.close();
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Database] Database connection closed successfully`);
|
logToConsole(LOG_DEBUG, `[VRR.Database] Database connection closed successfully`);
|
||||||
} catch(error) {
|
} catch (error) {
|
||||||
logToConsole(LOG_ERROR, `[VRR.Database] Database connection could not be closed! (Error: ${error})`);
|
logToConsole(LOG_ERROR, `[VRR.Database] Database connection could not be closed! (Error: ${error})`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -802,7 +802,7 @@ function disconnectFromDatabase(dbConnection) {
|
|||||||
|
|
||||||
function queryDatabase(dbConnection, queryString, useThread = false) {
|
function queryDatabase(dbConnection, queryString, useThread = false) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Database] Query string: ${queryString}`);
|
logToConsole(LOG_DEBUG, `[VRR.Database] Query string: ${queryString}`);
|
||||||
if(useThread == true) {
|
if (useThread == true) {
|
||||||
Promise.resolve().then(() => {
|
Promise.resolve().then(() => {
|
||||||
let queryResult = dbConnection.query(queryString);
|
let queryResult = dbConnection.query(queryString);
|
||||||
return queryResult;
|
return queryResult;
|
||||||
@@ -815,11 +815,11 @@ function queryDatabase(dbConnection, queryString, useThread = false) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function escapeDatabaseString(dbConnection, unsafeString = "") {
|
function escapeDatabaseString(dbConnection, unsafeString = "") {
|
||||||
if(!dbConnection) {
|
if (!dbConnection) {
|
||||||
dbConnection = connectToDatabase();
|
dbConnection = connectToDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof unsafeString == "string") {
|
if (typeof unsafeString == "string") {
|
||||||
return dbConnection.escapeString(unsafeString);
|
return dbConnection.escapeString(unsafeString);
|
||||||
}
|
}
|
||||||
return unsafeString;
|
return unsafeString;
|
||||||
@@ -846,7 +846,7 @@ function getDatabaseError(dbConnection) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function freeDatabaseQuery(dbQuery) {
|
function freeDatabaseQuery(dbQuery) {
|
||||||
if(dbQuery != null) {
|
if (dbQuery != null) {
|
||||||
dbQuery.free();
|
dbQuery.free();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -863,26 +863,26 @@ function fetchQueryAssoc(dbQuery) {
|
|||||||
function quickDatabaseQuery(queryString) {
|
function quickDatabaseQuery(queryString) {
|
||||||
let dbConnection = connectToDatabase();
|
let dbConnection = connectToDatabase();
|
||||||
let insertId = 0;
|
let insertId = 0;
|
||||||
if(dbConnection) {
|
if (dbConnection) {
|
||||||
//logToConsole(LOG_DEBUG, `[VRR.Database] Query string: ${queryString}`);
|
//logToConsole(LOG_DEBUG, `[VRR.Database] Query string: ${queryString}`);
|
||||||
let dbQuery = queryDatabase(dbConnection, queryString);
|
let dbQuery = queryDatabase(dbConnection, queryString);
|
||||||
if(getDatabaseInsertId(dbConnection)) {
|
if (getDatabaseInsertId(dbConnection)) {
|
||||||
insertId = getDatabaseInsertId(dbConnection);
|
insertId = getDatabaseInsertId(dbConnection);
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Database] Query returned insert id ${insertId}`);
|
logToConsole(LOG_DEBUG, `[VRR.Database] Query returned insert id ${insertId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dbQuery) {
|
if (dbQuery) {
|
||||||
try {
|
try {
|
||||||
freeDatabaseQuery(dbQuery);
|
freeDatabaseQuery(dbQuery);
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Database] Query result free'd successfully`);
|
logToConsole(LOG_DEBUG, `[VRR.Database] Query result free'd successfully`);
|
||||||
} catch(error) {
|
} catch (error) {
|
||||||
logToConsole(LOG_ERROR, `[VRR.Database] Query result could not be free'd! (Error: ${error})`);
|
logToConsole(LOG_ERROR, `[VRR.Database] Query result could not be free'd! (Error: ${error})`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnectFromDatabase(dbConnection);
|
disconnectFromDatabase(dbConnection);
|
||||||
|
|
||||||
if(insertId != 0) {
|
if (insertId != 0) {
|
||||||
return insertId;
|
return insertId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,8 +915,8 @@ function getElementId(element) {
|
|||||||
|
|
||||||
function getClientFromIndex(index) {
|
function getClientFromIndex(index) {
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(clients[i].index == index) {
|
if (clients[i].index == index) {
|
||||||
return clients[i];
|
return clients[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -955,7 +955,7 @@ function getClosestCivilian(position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getVehiclesInRange(position, range) {
|
function getVehiclesInRange(position, range) {
|
||||||
if(getGame() == VRR_GAME_GTA_IV) {
|
if (getGame() == VRR_GAME_GTA_IV) {
|
||||||
return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j);
|
return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j);
|
||||||
}
|
}
|
||||||
return getElementsByTypeInRange(ELEMENT_VEHICLE, position, range);
|
return getElementsByTypeInRange(ELEMENT_VEHICLE, position, range);
|
||||||
@@ -976,8 +976,8 @@ function getClosestElementByType(elementType, position) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getVehicleFirstEmptySeat(vehicle) {
|
function getVehicleFirstEmptySeat(vehicle) {
|
||||||
for(let i = 0; i <= 4; i++) {
|
for (let i = 0; i <= 4; i++) {
|
||||||
if(vehicle.getOccupant(i) == null) {
|
if (vehicle.getOccupant(i) == null) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1014,14 +1014,14 @@ function setVehicleHealth(vehicle, health) {
|
|||||||
|
|
||||||
function givePlayerWeapon(client, weaponId, ammo, active = true) {
|
function givePlayerWeapon(client, weaponId, ammo, active = true) {
|
||||||
//logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to ${getPlayerDisplayForConsole(client)} to give weapon (Weapon: ${weaponId}, Ammo: ${ammo})`);
|
//logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to ${getPlayerDisplayForConsole(client)} to give weapon (Weapon: ${weaponId}, Ammo: ${ammo})`);
|
||||||
//sendNetworkEventToPlayer("vrr.giveWeapon", client, weaponId, ammo, active);
|
//sendNetworkEventToPlayer("agrp.giveWeapon", client, weaponId, ammo, active);
|
||||||
client.giveWeapon(weaponId, ammo);
|
client.giveWeapon(weaponId, ammo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setPlayerWantedLevel(client, wantedLevel) {
|
function setPlayerWantedLevel(client, wantedLevel) {
|
||||||
//sendNetworkEventToPlayer("vrr.wantedLevel", client, wantedLevel);
|
//sendNetworkEventToPlayer("agrp.wantedLevel", client, wantedLevel);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1046,9 +1046,9 @@ function getPlayerPed(client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
if(areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
if(syncToClients) {
|
if (syncToClients) {
|
||||||
return entity.setVariable(dataName, dataValue);
|
return entity.setVariable(dataName, dataValue);
|
||||||
} else {
|
} else {
|
||||||
return entity.setOwnVariable(dataName, dataValue);
|
return entity.setOwnVariable(dataName, dataValue);
|
||||||
@@ -1061,8 +1061,8 @@ function setEntityData(entity, dataName, dataValue, syncToClients = true) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function removeEntityData(entity, dataName) {
|
function removeEntityData(entity, dataName) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
if(areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
return entity.setVariable(dataName, null);
|
return entity.setVariable(dataName, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1072,8 +1072,8 @@ function removeEntityData(entity, dataName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function doesEntityDataExist(entity, dataName) {
|
function doesEntityDataExist(entity, dataName) {
|
||||||
if(entity != null) {
|
if (entity != null) {
|
||||||
if(areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
return (entity.getVariable(dataName) != null);
|
return (entity.getVariable(dataName) != null);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@@ -1169,7 +1169,7 @@ function serverBanIP(ip) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setVehicleTrunkState(vehicle, trunkState) {
|
function setVehicleTrunkState(vehicle, trunkState) {
|
||||||
//sendNetworkEventToPlayer("vrr.veh.trunk", null, getVehicleForNetworkEvent(vehicle), trunkState);
|
//sendNetworkEventToPlayer("agrp.veh.trunk", null, getVehicleForNetworkEvent(vehicle), trunkState);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -1201,7 +1201,7 @@ function addAllEventHandlers() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function addServerCommandHandler(command, handlerFunction) {
|
function addServerCommandHandler(command, handlerFunction) {
|
||||||
mp.events.addCommand(command, function(client, ...args) {
|
mp.events.addCommand(command, function (client, ...args) {
|
||||||
handlerFunction.call(command, args.join(" "), client);
|
handlerFunction.call(command, args.join(" "), client);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1209,7 +1209,7 @@ function addServerCommandHandler(command, handlerFunction) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function addServerEventHandler(eventName, handlerFunction) {
|
function addServerEventHandler(eventName, handlerFunction) {
|
||||||
mp.events.add(eventName, function(event, ...args) {
|
mp.events.add(eventName, function (event, ...args) {
|
||||||
let result = handlerFunction.apply(this, args);
|
let result = handlerFunction.apply(this, args);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1217,7 +1217,7 @@ function addServerEventHandler(eventName, handlerFunction) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function bindServerEventHandler(eventName, bindTo, handlerFunction) {
|
function bindServerEventHandler(eventName, bindTo, handlerFunction) {
|
||||||
mp.events.add(eventName, function(event, ...args) {
|
mp.events.add(eventName, function (event, ...args) {
|
||||||
let result = handlerFunction.apply(this, args);
|
let result = handlerFunction.apply(this, args);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -466,11 +466,11 @@ function spawnNPC(npcIndex) {
|
|||||||
let ped = createGamePed(npcData.skin, npcData.position, npcData.rotation.z);
|
let ped = createGamePed(npcData.skin, npcData.position, npcData.rotation.z);
|
||||||
if (ped) {
|
if (ped) {
|
||||||
getNPCData(npcIndex).ped = ped;
|
getNPCData(npcIndex).ped = ped;
|
||||||
setEntityData(ped, "vrr.dataIndex", npcIndex, false);
|
setEntityData(ped, "agrp.dataIndex", npcIndex, false);
|
||||||
if (npcData.animationName != "") {
|
if (npcData.animationName != "") {
|
||||||
let animationId = getAnimationFromParams(npcData.animationName);
|
let animationId = getAnimationFromParams(npcData.animationName);
|
||||||
if (animationId != false) {
|
if (animationId != false) {
|
||||||
setEntityData(ped, "vrr.anim", animationId, true);
|
setEntityData(ped, "agrp.anim", animationId, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setElementDimension(ped, npcData.dimension);
|
setElementDimension(ped, npcData.dimension);
|
||||||
@@ -590,7 +590,7 @@ function toggleNPCLookAtClosestPlayerCommand(command, params, client) {
|
|||||||
|
|
||||||
getNPCData(closestNPC).lookAtClosestPlayer = !getNPCData(closestNPC).lookAtClosestPlayer;
|
getNPCData(closestNPC).lookAtClosestPlayer = !getNPCData(closestNPC).lookAtClosestPlayer;
|
||||||
getNPCData(closestNPC).needsSaved = true;
|
getNPCData(closestNPC).needsSaved = true;
|
||||||
setEntityData(getNPCData(closestNPC).ped, "vrr.lookAtClosestPlayer", getNPCData(closestNPC).lookAtClosestPlayer, true);
|
setEntityData(getNPCData(closestNPC).ped, "agrp.lookAtClosestPlayer", getNPCData(closestNPC).lookAtClosestPlayer, true);
|
||||||
forcePlayerToSyncElementProperties(null, getNPCData(closestNPC).ped);
|
forcePlayerToSyncElementProperties(null, getNPCData(closestNPC).ped);
|
||||||
//messagePlayerSuccess(client, getLocaleString(client, "NPCLookAtClosestPlayerSet", `{ALTCOLOUR}${getNPCData(closestNPC).name}{MAINCOLOUR}));
|
//messagePlayerSuccess(client, getLocaleString(client, "NPCLookAtClosestPlayerSet", `{ALTCOLOUR}${getNPCData(closestNPC).name}{MAINCOLOUR}));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class RadioStationData {
|
|||||||
this.codec = "";
|
this.codec = "";
|
||||||
this.index = -1;
|
this.index = -1;
|
||||||
|
|
||||||
if(dbAssoc) {
|
if (dbAssoc) {
|
||||||
this.databaseId = dbAssoc["radio_id"];
|
this.databaseId = dbAssoc["radio_id"];
|
||||||
this.name = dbAssoc["radio_name"];
|
this.name = dbAssoc["radio_name"];
|
||||||
this.url = dbAssoc["radio_url"];
|
this.url = dbAssoc["radio_url"];
|
||||||
@@ -41,11 +41,11 @@ function loadRadioStationsFromDatabase() {
|
|||||||
let dbConnection = connectToDatabase();
|
let dbConnection = connectToDatabase();
|
||||||
let tempRadioStations = [];
|
let tempRadioStations = [];
|
||||||
let dbAssoc;
|
let dbAssoc;
|
||||||
if(dbConnection) {
|
if (dbConnection) {
|
||||||
let dbQueryString = `SELECT * FROM radio_main`;
|
let dbQueryString = `SELECT * FROM radio_main`;
|
||||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||||
if(dbQuery) {
|
if (dbQuery) {
|
||||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
while (dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||||
let tempRadioStationData = new RadioStationData(dbAssoc);
|
let tempRadioStationData = new RadioStationData(dbAssoc);
|
||||||
tempRadioStations.push(tempRadioStationData);
|
tempRadioStations.push(tempRadioStationData);
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ function loadRadioStationsFromDatabase() {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function playStreamingRadioCommand(command, params, client) {
|
function playStreamingRadioCommand(command, params, client) {
|
||||||
if(areParamsEmpty(params)) {
|
if (areParamsEmpty(params)) {
|
||||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||||
messagePlayerInfo(client, "Use /radiostations for a list of available radio stations.");
|
messagePlayerInfo(client, "Use /radiostations for a list of available radio stations.");
|
||||||
return false;
|
return false;
|
||||||
@@ -78,96 +78,96 @@ function playStreamingRadioCommand(command, params, client) {
|
|||||||
|
|
||||||
let radioStationId = getRadioStationFromParams(params);
|
let radioStationId = getRadioStationFromParams(params);
|
||||||
|
|
||||||
if(radioStationId != 0 && typeof getServerData().radioStations[radioStationId-1] == "undefined") {
|
if (radioStationId != 0 && typeof getServerData().radioStations[radioStationId - 1] == "undefined") {
|
||||||
messagePlayerError(client, getLocaleString(client, "InvalidRadioStation"));
|
messagePlayerError(client, getLocaleString(client, "InvalidRadioStation"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isPlayerInAnyVehicle(client)) {
|
if (isPlayerInAnyVehicle(client)) {
|
||||||
let vehicle = getPlayerVehicle(client);
|
let vehicle = getPlayerVehicle(client);
|
||||||
|
|
||||||
if(!getVehicleData(vehicle)) {
|
if (!getVehicleData(vehicle)) {
|
||||||
messagePlayerError(client, getLocaleString(client, "RandomVehicleCommandsDisabled"));
|
messagePlayerError(client, getLocaleString(client, "RandomVehicleCommandsDisabled"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(radioStationId == 0) {
|
if (radioStationId == 0) {
|
||||||
getVehicleData(vehicle).streamingRadioStation = -1;
|
getVehicleData(vehicle).streamingRadioStation = -1;
|
||||||
getVehicleData(vehicle).needsSaved = true;
|
getVehicleData(vehicle).needsSaved = true;
|
||||||
getPlayerData(client).streamingRadioStation = -1;
|
getPlayerData(client).streamingRadioStation = -1;
|
||||||
meActionToNearbyPlayers(client, `turns off their vehicle's radio`);
|
meActionToNearbyPlayers(client, `turns off their vehicle's radio`);
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(getPlayerVehicle(client) == getPlayerVehicle(clients[i])) {
|
if (getPlayerVehicle(client) == getPlayerVehicle(clients[i])) {
|
||||||
playRadioStreamForPlayer(clients[i], "");
|
playRadioStreamForPlayer(clients[i], "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
getVehicleData(vehicle).streamingRadioStation = radioStationId-1;
|
getVehicleData(vehicle).streamingRadioStation = radioStationId - 1;
|
||||||
getPlayerData(client).streamingRadioStation = radioStationId-1;
|
getPlayerData(client).streamingRadioStation = radioStationId - 1;
|
||||||
meActionToNearbyPlayers(client, getLocaleString(client, "ActionVehicleRadioStationChange", getRadioStationData(radioStationId-1).name, getRadioStationData(radioStationId-1).genre));
|
meActionToNearbyPlayers(client, getLocaleString(client, "ActionVehicleRadioStationChange", getRadioStationData(radioStationId - 1).name, getRadioStationData(radioStationId - 1).genre));
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(vehicle == getPlayerVehicle(clients[i])) {
|
if (vehicle == getPlayerVehicle(clients[i])) {
|
||||||
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId-1).url, true, getPlayerStreamingRadioVolume(client));
|
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId - 1).url, true, getPlayerStreamingRadioVolume(client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(doesEntityDataExist(client, "vrr.inHouse")) {
|
if (doesEntityDataExist(client, "agrp.inHouse")) {
|
||||||
let houseId = getEntityData(client, "vrr.inHouse");
|
let houseId = getEntityData(client, "agrp.inHouse");
|
||||||
if(radioStationId == 0) {
|
if (radioStationId == 0) {
|
||||||
getHouseData(houseId).streamingRadioStation = -1;
|
getHouseData(houseId).streamingRadioStation = -1;
|
||||||
getHouseData(houseId).needsSaved = true;
|
getHouseData(houseId).needsSaved = true;
|
||||||
getPlayerData(client).streamingRadioStation = -1;
|
getPlayerData(client).streamingRadioStation = -1;
|
||||||
meActionToNearbyPlayers(client, `turns off the house radio`);
|
meActionToNearbyPlayers(client, `turns off the house radio`);
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(getEntityData(clients[i], "vrr.inHouse") == houseId) {
|
if (getEntityData(clients[i], "agrp.inHouse") == houseId) {
|
||||||
playRadioStreamForPlayer(clients[i], "");
|
playRadioStreamForPlayer(clients[i], "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getHouseData(houseId).streamingRadioStation = radioStationId-1;
|
getHouseData(houseId).streamingRadioStation = radioStationId - 1;
|
||||||
getHouseData(houseId).needsSaved = true;
|
getHouseData(houseId).needsSaved = true;
|
||||||
getPlayerData(client).streamingRadioStation = radioStationId-1;
|
getPlayerData(client).streamingRadioStation = radioStationId - 1;
|
||||||
meActionToNearbyPlayers(client, getLocaleString(client, "ActionHouseRadioStationChange", getRadioStationData(radioStationId-1).name, getRadioStationData(radioStationId-1).genre));
|
meActionToNearbyPlayers(client, getLocaleString(client, "ActionHouseRadioStationChange", getRadioStationData(radioStationId - 1).name, getRadioStationData(radioStationId - 1).genre));
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(getEntityData(clients[i], "vrr.inHouse") == houseId) {
|
if (getEntityData(clients[i], "agrp.inHouse") == houseId) {
|
||||||
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId-1).url, true, getPlayerStreamingRadioVolume(clients[i]));
|
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId - 1).url, true, getPlayerStreamingRadioVolume(clients[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(isPlayerInAnyBusiness(client)) {
|
} else if (isPlayerInAnyBusiness(client)) {
|
||||||
let businessId = getPlayerBusiness(client);
|
let businessId = getPlayerBusiness(client);
|
||||||
if(radioStationId == 0) {
|
if (radioStationId == 0) {
|
||||||
getBusinessData(businessId).streamingRadioStation = -1;
|
getBusinessData(businessId).streamingRadioStation = -1;
|
||||||
getBusinessData(businessId).needsSaved = true;
|
getBusinessData(businessId).needsSaved = true;
|
||||||
getPlayerData(client).streamingRadioStation = -1;
|
getPlayerData(client).streamingRadioStation = -1;
|
||||||
meActionToNearbyPlayers(client, `turns off the business radio`);
|
meActionToNearbyPlayers(client, `turns off the business radio`);
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(getPlayerBusiness(clients[i]) == businessId) {
|
if (getPlayerBusiness(clients[i]) == businessId) {
|
||||||
stopRadioStreamForPlayer(clients[i]);
|
stopRadioStreamForPlayer(clients[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getBusinessData(businessId).streamingRadioStation = radioStationId-1;
|
getBusinessData(businessId).streamingRadioStation = radioStationId - 1;
|
||||||
getBusinessData(businessId).needsSaved = true;
|
getBusinessData(businessId).needsSaved = true;
|
||||||
getPlayerData(client).streamingRadioStation = radioStationId-1;
|
getPlayerData(client).streamingRadioStation = radioStationId - 1;
|
||||||
meActionToNearbyPlayers(client, getLocaleString(client, "ActionBusinessRadioStationChange", getRadioStationData(radioStationId-1).name, getRadioStationData(radioStationId-1).genre));
|
meActionToNearbyPlayers(client, getLocaleString(client, "ActionBusinessRadioStationChange", getRadioStationData(radioStationId - 1).name, getRadioStationData(radioStationId - 1).genre));
|
||||||
|
|
||||||
let clients = getClients();
|
let clients = getClients();
|
||||||
for(let i in clients) {
|
for (let i in clients) {
|
||||||
if(getPlayerBusiness(clients[i]) == businessId) {
|
if (getPlayerBusiness(clients[i]) == businessId) {
|
||||||
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId-1).url, true, getPlayerStreamingRadioVolume(clients[i]));
|
playRadioStreamForPlayer(clients[i], getRadioStationData(radioStationId - 1).url, true, getPlayerStreamingRadioVolume(clients[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,14 +190,14 @@ function playStreamingRadioCommand(command, params, client) {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function setStreamingRadioVolumeCommand(command, params, client) {
|
function setStreamingRadioVolumeCommand(command, params, client) {
|
||||||
if(areParamsEmpty(params)) {
|
if (areParamsEmpty(params)) {
|
||||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let volumeLevel = params;
|
let volumeLevel = params;
|
||||||
|
|
||||||
if(isNaN(volumeLevel)) {
|
if (isNaN(volumeLevel)) {
|
||||||
messagePlayerError(client, getLocaleString(client, "RadioVolumeNotNumber"));
|
messagePlayerError(client, getLocaleString(client, "RadioVolumeNotNumber"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -205,13 +205,13 @@ function setStreamingRadioVolumeCommand(command, params, client) {
|
|||||||
setPlayerStreamingRadioVolume(client, toInteger(volumeLevel));
|
setPlayerStreamingRadioVolume(client, toInteger(volumeLevel));
|
||||||
getPlayerData(client).accountData.streamingRadioVolume = toInteger(volumeLevel);
|
getPlayerData(client).accountData.streamingRadioVolume = toInteger(volumeLevel);
|
||||||
let volumeEmoji = '';
|
let volumeEmoji = '';
|
||||||
if(volumeLevel >= 60) {
|
if (volumeLevel >= 60) {
|
||||||
volumeEmoji = '🔊';
|
volumeEmoji = '🔊';
|
||||||
} else if(volumeLevel >= 30 && volumeLevel < 60) {
|
} else if (volumeLevel >= 30 && volumeLevel < 60) {
|
||||||
volumeEmoji = '🔉';
|
volumeEmoji = '🔉';
|
||||||
} else if(volumeLevel > 0 && volumeLevel < 30) {
|
} else if (volumeLevel > 0 && volumeLevel < 30) {
|
||||||
volumeEmoji = '🔈';
|
volumeEmoji = '🔈';
|
||||||
} else if(volumeLevel <= 0) {
|
} else if (volumeLevel <= 0) {
|
||||||
volumeEmoji = '🔇';
|
volumeEmoji = '🔇';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +221,7 @@ function setStreamingRadioVolumeCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getPlayerStreamingRadioVolume(client) {
|
function getPlayerStreamingRadioVolume(client) {
|
||||||
if(!getPlayerData(client) || !isPlayerLoggedIn(client) || !isPlayerSpawned(client)) {
|
if (!getPlayerData(client) || !isPlayerLoggedIn(client) || !isPlayerSpawned(client)) {
|
||||||
return 20;
|
return 20;
|
||||||
}
|
}
|
||||||
return getPlayerData(client).accountData.streamingRadioVolume;
|
return getPlayerData(client).accountData.streamingRadioVolume;
|
||||||
@@ -239,13 +239,13 @@ function getPlayerStreamingRadioVolume(client) {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function showRadioStationListCommand(command, params, client) {
|
function showRadioStationListCommand(command, params, client) {
|
||||||
let stationList = getServerData().radioStations.map(function(x) { return `{ALTCOLOUR}${toInteger(x.index)+1}: {MAINCOLOUR}${x.name}`; });
|
let stationList = getServerData().radioStations.map(function (x) { return `{ALTCOLOUR}${toInteger(x.index) + 1}: {MAINCOLOUR}${x.name}`; });
|
||||||
|
|
||||||
let chunkedList = splitArrayIntoChunks(stationList, 4);
|
let chunkedList = splitArrayIntoChunks(stationList, 4);
|
||||||
|
|
||||||
messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderRadioStationsList")));
|
messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderRadioStationsList")));
|
||||||
|
|
||||||
for(let i in chunkedList) {
|
for (let i in chunkedList) {
|
||||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -253,7 +253,7 @@ function showRadioStationListCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function setAllRadioStationIndexes() {
|
function setAllRadioStationIndexes() {
|
||||||
for(let i in getServerData().radioStations) {
|
for (let i in getServerData().radioStations) {
|
||||||
getServerData().radioStations[i].index = i;
|
getServerData().radioStations[i].index = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,14 +291,14 @@ function reloadAllRadioStationsCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getRadioStationFromParams(params) {
|
function getRadioStationFromParams(params) {
|
||||||
if(isNaN(params)) {
|
if (isNaN(params)) {
|
||||||
for(let i in getServerData().radioStations) {
|
for (let i in getServerData().radioStations) {
|
||||||
if(toLowerCase(getServerData().radioStations[i].name).indexOf(toLowerCase(params)) != -1) {
|
if (toLowerCase(getServerData().radioStations[i].name).indexOf(toLowerCase(params)) != -1) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(typeof getServerData().radioStations[params] != "undefined") {
|
if (typeof getServerData().radioStations[params] != "undefined") {
|
||||||
return toInteger(params);
|
return toInteger(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function initServerScripts() {
|
|||||||
initKeyBindScript();
|
initKeyBindScript();
|
||||||
initEventScript();
|
initEventScript();
|
||||||
initAntiCheatScript();
|
initAntiCheatScript();
|
||||||
initClientScript();
|
initNetworkEventsScript();
|
||||||
initMessagingScript();
|
initMessagingScript();
|
||||||
initHelpScript();
|
initHelpScript();
|
||||||
initFishingScript();
|
initFishingScript();
|
||||||
@@ -116,18 +116,17 @@ function loadServerDataFromDatabase() {
|
|||||||
logToConsole(LOG_INFO, "[VRR.Config]: Loading server data ...");
|
logToConsole(LOG_INFO, "[VRR.Config]: Loading server data ...");
|
||||||
|
|
||||||
// Always load these regardless of "test server" status
|
// Always load these regardless of "test server" status
|
||||||
getServerData().localeStrings = loadAllLocaleStrings();
|
|
||||||
getServerData().allowedSkins = getAllowedSkins(getGame());
|
getServerData().allowedSkins = getAllowedSkins(getGame());
|
||||||
getServerData().itemTypes = loadItemTypesFromDatabase();
|
getServerData().itemTypes = loadItemTypesFromDatabase();
|
||||||
|
|
||||||
// Translation Cache
|
// Translation Cache
|
||||||
getServerData().cachedTranslations = new Array(getGlobalConfig().locale.locales.length);
|
//getServerData().cachedTranslations = new Array(getGlobalConfig().locale.locales.length);
|
||||||
getServerData().cachedTranslationFrom = new Array(getGlobalConfig().locale.locales.length);
|
//getServerData().cachedTranslationFrom = new Array(getGlobalConfig().locale.locales.length);
|
||||||
getServerData().cachedTranslationFrom.fill([]);
|
//getServerData().cachedTranslationFrom.fill([]);
|
||||||
getServerData().cachedTranslations.fill(getServerData().cachedTranslationFrom);
|
//getServerData().cachedTranslations.fill(getServerData().cachedTranslationFrom);
|
||||||
|
|
||||||
// Only load these if the server isn't a testing/dev server
|
// Only load these if the server isn't a testing/dev server
|
||||||
if (!getServerConfig().devServer) {
|
if (!getServerConfig().devServer && server.getCVar("agrp_devserver") == 0) {
|
||||||
getServerData().items = loadItemsFromDatabase();
|
getServerData().items = loadItemsFromDatabase();
|
||||||
getServerData().businesses = loadBusinessesFromDatabase();
|
getServerData().businesses = loadBusinessesFromDatabase();
|
||||||
getServerData().houses = loadHousesFromDatabase();
|
getServerData().houses = loadHousesFromDatabase();
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ function spawnAllVehicles() {
|
|||||||
for (let i in getServerData().vehicles) {
|
for (let i in getServerData().vehicles) {
|
||||||
let vehicle = spawnVehicle(getServerData().vehicles[i]);
|
let vehicle = spawnVehicle(getServerData().vehicles[i]);
|
||||||
getServerData().vehicles[i].vehicle = vehicle;
|
getServerData().vehicles[i].vehicle = vehicle;
|
||||||
setEntityData(vehicle, "vrr.dataSlot", i, false);
|
setEntityData(vehicle, "agrp.dataSlot", i, false);
|
||||||
setAllVehicleIndexes();
|
setAllVehicleIndexes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -335,7 +335,7 @@ function spawnAllVehicles() {
|
|||||||
function getVehicleData(vehicle) {
|
function getVehicleData(vehicle) {
|
||||||
if (getGame() != VRR_GAME_GTA_IV) {
|
if (getGame() != VRR_GAME_GTA_IV) {
|
||||||
if (isVehicleObject(vehicle)) {
|
if (isVehicleObject(vehicle)) {
|
||||||
let dataIndex = getEntityData(vehicle, "vrr.dataSlot");
|
let dataIndex = getEntityData(vehicle, "agrp.dataSlot");
|
||||||
if (typeof getServerData().vehicles[dataIndex] != "undefined") {
|
if (typeof getServerData().vehicles[dataIndex] != "undefined") {
|
||||||
return getServerData().vehicles[dataIndex];
|
return getServerData().vehicles[dataIndex];
|
||||||
}
|
}
|
||||||
@@ -501,7 +501,7 @@ function deleteVehicleCommand(command, params, client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dataIndex = getEntityData(vehicle, "vrr.dataSlot");
|
let dataIndex = getEntityData(vehicle, "agrp.dataSlot");
|
||||||
let vehicleName = getVehicleName(vehicle);
|
let vehicleName = getVehicleName(vehicle);
|
||||||
|
|
||||||
quickDatabaseQuery(`UPDATE veh_main SET veh_deleted = 1 WHERE veh_id = ${getVehicleData(vehicle).databaseId}`);
|
quickDatabaseQuery(`UPDATE veh_main SET veh_deleted = 1 WHERE veh_id = ${getVehicleData(vehicle).databaseId}`);
|
||||||
@@ -539,7 +539,7 @@ function vehicleEngineCommand(command, params, client) {
|
|||||||
|
|
||||||
getVehicleData(vehicle).engine = !getVehicleData(vehicle).engine;
|
getVehicleData(vehicle).engine = !getVehicleData(vehicle).engine;
|
||||||
vehicle.engine = getVehicleData(vehicle).engine;
|
vehicle.engine = getVehicleData(vehicle).engine;
|
||||||
setEntityData(vehicle, "vrr.engine", getVehicleData(vehicle).engine, true);
|
setEntityData(vehicle, "agrp.engine", getVehicleData(vehicle).engine, true);
|
||||||
|
|
||||||
getVehicleData(vehicle).needsSaved = true;
|
getVehicleData(vehicle).needsSaved = true;
|
||||||
|
|
||||||
@@ -665,7 +665,7 @@ function vehicleAdminLiveryCommand(command, params, client) {
|
|||||||
getVehicleData(vehicle).livery = livery;
|
getVehicleData(vehicle).livery = livery;
|
||||||
getVehicleData(vehicle).needsSaved = true;
|
getVehicleData(vehicle).needsSaved = true;
|
||||||
|
|
||||||
setEntityData(vehicle, "vrr.livery", livery, true);
|
setEntityData(vehicle, "agrp.livery", livery, true);
|
||||||
forcePlayerToSyncElementProperties(null, vehicle);
|
forcePlayerToSyncElementProperties(null, vehicle);
|
||||||
|
|
||||||
meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`);
|
meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`);
|
||||||
@@ -699,7 +699,7 @@ function buyVehicleCommand(command, params, client) {
|
|||||||
getPlayerData(client).buyingVehicle = vehicle;
|
getPlayerData(client).buyingVehicle = vehicle;
|
||||||
getVehicleData(vehicle).engine = true;
|
getVehicleData(vehicle).engine = true;
|
||||||
vehicle.engine = true;
|
vehicle.engine = true;
|
||||||
setEntityData(vehicle, "vrr.engine", getVehicleData(vehicle).engine, true);
|
setEntityData(vehicle, "agrp.engine", getVehicleData(vehicle).engine, true);
|
||||||
|
|
||||||
getVehicleData(vehicle).needsSaved = true;
|
getVehicleData(vehicle).needsSaved = true;
|
||||||
setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_TESTDRIVE, vehicle.id, getVehiclePosition(vehicle));
|
setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_TESTDRIVE, vehicle.id, getVehiclePosition(vehicle));
|
||||||
@@ -770,7 +770,7 @@ function rentVehicleCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function enterVehicleAsPassengerCommand(command, params, client) {
|
function enterVehicleAsPassengerCommand(command, params, client) {
|
||||||
sendNetworkEventToPlayer("vrr.passenger", client);
|
sendNetworkEventToPlayer("agrp.passenger", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -1451,7 +1451,7 @@ function respawnVehicle(vehicle) {
|
|||||||
|
|
||||||
let newVehicle = spawnVehicle(vehicles[i]);
|
let newVehicle = spawnVehicle(vehicles[i]);
|
||||||
vehicles[i].vehicle = newVehicle;
|
vehicles[i].vehicle = newVehicle;
|
||||||
setEntityData(newVehicle, "vrr.dataSlot", i, false);
|
setEntityData(newVehicle, "agrp.dataSlot", i, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1503,10 +1503,10 @@ function spawnVehicle(vehicleData) {
|
|||||||
//setVehicleHealth(vehicle, 1000);
|
//setVehicleHealth(vehicle, 1000);
|
||||||
repairVehicle(vehicle);
|
repairVehicle(vehicle);
|
||||||
|
|
||||||
setEntityData(vehicle, "vrr.livery", vehicleData.livery, true);
|
setEntityData(vehicle, "agrp.livery", vehicleData.livery, true);
|
||||||
setEntityData(vehicle, "vrr.upgrades", vehicleData.extras, true);
|
setEntityData(vehicle, "agrp.upgrades", vehicleData.extras, true);
|
||||||
setEntityData(vehicle, "vrr.interior", vehicleData.interior, true);
|
setEntityData(vehicle, "agrp.interior", vehicleData.interior, true);
|
||||||
setEntityData(vehicle, "vrr.engine", vehicleData.engine, true);
|
setEntityData(vehicle, "agrp.engine", vehicleData.engine, true);
|
||||||
|
|
||||||
forcePlayerToSyncElementProperties(null, vehicle);
|
forcePlayerToSyncElementProperties(null, vehicle);
|
||||||
|
|
||||||
@@ -1592,7 +1592,7 @@ function createNewDealershipVehicle(modelIndex, spawnPosition, spawnRotation, pr
|
|||||||
tempVehicleData.dimension = dimension;
|
tempVehicleData.dimension = dimension;
|
||||||
|
|
||||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||||
setEntityData(vehicle, "vrr.dataSlot", slot - 1, false);
|
setEntityData(vehicle, "agrp.dataSlot", slot - 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -1617,7 +1617,7 @@ function createTemporaryVehicle(modelIndex, position, heading, interior = 0, dim
|
|||||||
}
|
}
|
||||||
|
|
||||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||||
setEntityData(vehicle, "vrr.dataSlot", slot - 1, false);
|
setEntityData(vehicle, "agrp.dataSlot", slot - 1, false);
|
||||||
|
|
||||||
return vehicle;
|
return vehicle;
|
||||||
}
|
}
|
||||||
@@ -1645,7 +1645,7 @@ function createPermanentVehicle(modelIndex, position, heading, interior = 0, dim
|
|||||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||||
|
|
||||||
if (areServerElementsSupported()) {
|
if (areServerElementsSupported()) {
|
||||||
setEntityData(vehicle, "vrr.dataSlot", slot - 1, false);
|
setEntityData(vehicle, "agrp.dataSlot", slot - 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
134
third-party/mexui/Core/Component/Control.js
vendored
@@ -1,134 +0,0 @@
|
|||||||
mexui.Component.Control = function(window, x, y, w, h, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Entity.Component.call(this, false);
|
|
||||||
mexui.Entity.StyleableEntity.call(this, this.linkComponentStyles('Control', styles));
|
|
||||||
|
|
||||||
this.window = window;
|
|
||||||
this.position = new Vec2(x, y);
|
|
||||||
this.size = new Vec2(w, h);
|
|
||||||
this.callback = callback;
|
|
||||||
|
|
||||||
this.boundTo = null;
|
|
||||||
};
|
|
||||||
mexui.util.extend(mexui.Component.Control, mexui.Entity.Component);
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
//mexui.Component.Control.defaultStyles = {};
|
|
||||||
//mexui.Component.Control.defaultStyles.__proto__ = mexui.Entity.StyleableEntity.defaultStyles;
|
|
||||||
|
|
||||||
mexui.Component.Control.defaultStyles = mexui.util.linkStyles(mexui.Entity.StyleableEntity.defaultStyles, {});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Component.Control.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0)
|
|
||||||
{
|
|
||||||
var hit = this.isCursorOverControl();
|
|
||||||
if(hit)
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
e.clickedAControl = true;
|
|
||||||
mexui.focusedControl = this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.onMouseUp = function(e)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.onMouseMove = function(e, offset)
|
|
||||||
{
|
|
||||||
if(this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
if(!this.isHovered())
|
|
||||||
{
|
|
||||||
mexui.setHoveredComponent(this);
|
|
||||||
this.onMouseEnter();
|
|
||||||
}
|
|
||||||
e.used = true;
|
|
||||||
}
|
|
||||||
else if(e.wasHovered)
|
|
||||||
{
|
|
||||||
mexui.clearHoveredComponent();
|
|
||||||
this.onMouseExit();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.onMouseWheel = function(e, data)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.onCharacter = function(e, character)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Component.Control.prototype.render = function()
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.renderAfter = function()
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Component.Control.prototype.checkToCallCallback = function()
|
|
||||||
{
|
|
||||||
if(this.callback)
|
|
||||||
this.callback.call(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.getScreenPosition = function()
|
|
||||||
{
|
|
||||||
var pos = mexui.util.addVec2(this.window.position, this.position);
|
|
||||||
if(this.boundTo)
|
|
||||||
pos = mexui.util.addVec2(pos, new Vec2(-this.boundTo.axis.x.getScrolledOffsetFixedStart(), -this.boundTo.axis.y.getScrolledOffsetFixedStart()));
|
|
||||||
return pos;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.isCursorOverControl = function()
|
|
||||||
{
|
|
||||||
return mexui.util.isCursorInRectangle(this.getScreenPosition(), this.getSizeForInput ? this.getSizeForInput() : this.size);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.isCursorOverItem = function()
|
|
||||||
{
|
|
||||||
return this.isCursorOverControl();
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.isInsideBoundControl = function()
|
|
||||||
{
|
|
||||||
if(this.boundTo instanceof mexui.Entity.ControlWithEntries)
|
|
||||||
return this.isInsideBoundControlEntries();
|
|
||||||
else
|
|
||||||
return mexui.util.isRectangleInsideRectangle(this.getScreenPosition(), this.size, this.boundTo.getScreenPosition(), this.boundTo.size);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.isInsideBoundControlEntries = function()
|
|
||||||
{
|
|
||||||
var boundToControlPosition = mexui.util.addVec2(this.boundTo.getScreenPosition(), this.boundTo.entriesPositionOffset);
|
|
||||||
var boundToControlSize = new Vec2(this.boundTo.size.x, this.boundTo.axis.y.getDisplayedEntriesLength());
|
|
||||||
return mexui.util.isRectangleInsideRectangle(this.getScreenPosition(), this.size, boundToControlPosition, boundToControlSize);
|
|
||||||
};
|
|
||||||
|
|
||||||
// api
|
|
||||||
mexui.Component.Control.prototype.remove = function()
|
|
||||||
{
|
|
||||||
this.window.controls.splice(this.window.controls.indexOf(this), 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.bindTo = function(control)
|
|
||||||
{
|
|
||||||
this.boundTo = control;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Control.prototype.unbind = function()
|
|
||||||
{
|
|
||||||
this.boundTo = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
32
third-party/mexui/Core/Component/Entry.js
vendored
@@ -1,32 +0,0 @@
|
|||||||
mexui.Component.Entry = function(control, axisIndex, text, styles)
|
|
||||||
{
|
|
||||||
mexui.Entity.Component.call(this, false);
|
|
||||||
mexui.Entity.StyleableEntity.call(this, this.linkComponentStyles('Entry', styles));
|
|
||||||
|
|
||||||
this.control = control;
|
|
||||||
this.axisIndex = axisIndex;
|
|
||||||
this.text = text;
|
|
||||||
};
|
|
||||||
mexui.util.extend(mexui.Component.Entry, mexui.Entity.Component);
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.Component.Entry.defaultStyles = mexui.util.linkStyles(mexui.Entity.StyleableEntity.defaultStyles, {});
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Component.Entry.prototype.getEntryIndex = function()
|
|
||||||
{
|
|
||||||
return this.control.axis[this.getAxisKey()].entries.indexOf(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Entry.prototype.getAxisKey = function()
|
|
||||||
{
|
|
||||||
return this.axisIndex == 0 ? 'x' : 'y';
|
|
||||||
};
|
|
||||||
|
|
||||||
// api
|
|
||||||
mexui.Component.Entry.prototype.remove = function()
|
|
||||||
{
|
|
||||||
this.control.axis[this.getAxisKey()].entries.splice(this.getEntryIndex(), 1);
|
|
||||||
this.control.checkToShowScrollBars();
|
|
||||||
};
|
|
||||||
|
|
||||||
6
third-party/mexui/Core/Component/Event.js
vendored
@@ -1,6 +0,0 @@
|
|||||||
mexui.Component.Event = function()
|
|
||||||
{
|
|
||||||
this.used = false;
|
|
||||||
this.clickedAControl = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
389
third-party/mexui/Core/Component/Window.js
vendored
@@ -1,389 +0,0 @@
|
|||||||
mexui.Component.Window = function(x, y, w, h, title, styles)
|
|
||||||
{
|
|
||||||
mexui.Entity.Component.call(this, true);
|
|
||||||
mexui.Entity.StyleableEntity.call(this, this.linkComponentStyles('Window', styles));
|
|
||||||
|
|
||||||
this.position = new Vec2(x, y);
|
|
||||||
this.size = new Vec2(w, h);
|
|
||||||
this.title = title || '';
|
|
||||||
|
|
||||||
this.controls = [];
|
|
||||||
this.titleBarShown = true;
|
|
||||||
this.titleBarHeight = 30;
|
|
||||||
this.titleBarIconShown = true;
|
|
||||||
this.titleBarIconSize = new Vec2(30, 30);
|
|
||||||
};
|
|
||||||
mexui.util.extend(mexui.Component.Window, mexui.Entity.Component);
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.Component.Window.defaultStyles = mexui.util.linkStyles(mexui.Entity.StyleableEntity.defaultStyles, {
|
|
||||||
main:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(0, 0, 0, 190),
|
|
||||||
textColour: toColour(255, 255, 255, 255),
|
|
||||||
|
|
||||||
hover:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(0, 0, 0, 170)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
title:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(79, 161, 246, 190),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
},
|
|
||||||
icon:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(245, 5, 5, 190),
|
|
||||||
textColour: toColour(0, 0, 0, 255),
|
|
||||||
textSize: 21,
|
|
||||||
textAlign: 0.5,
|
|
||||||
textIndent: 0
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Component.Window.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && this.titleBarShown && this.titleBarIconShown && this.isCursorOverCloseIcon())
|
|
||||||
{
|
|
||||||
this.shown = false;
|
|
||||||
mexui.setInput(false);
|
|
||||||
e.used = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isCursorOverWindow())
|
|
||||||
{
|
|
||||||
this.setTop();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.triggerEvent('onMouseDown', e);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.onMouseUp = function(e)
|
|
||||||
{
|
|
||||||
this.triggerEvent('onMouseUp', e);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.onMouseMove = function(e, offset)
|
|
||||||
{
|
|
||||||
//var wasHovered = this.isHovered();
|
|
||||||
//e.wasHovered = wasHovered;
|
|
||||||
|
|
||||||
if(mexui.hoveredComponent && !mexui.hoveredComponent.isCursorOverItem())
|
|
||||||
{
|
|
||||||
mexui.hoveredComponent.onMouseExit();
|
|
||||||
mexui.clearHoveredComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.triggerEvent('onMouseMove', e, offset);
|
|
||||||
|
|
||||||
if(e.used)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
if(wasHovered)
|
|
||||||
{
|
|
||||||
mexui.clearHoveredComponent();
|
|
||||||
this.onMouseExit();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isCursorOverWindow())
|
|
||||||
{
|
|
||||||
if(!this.isHovered())
|
|
||||||
{
|
|
||||||
mexui.setHoveredComponent(this);
|
|
||||||
this.onMouseEnter();
|
|
||||||
}
|
|
||||||
e.used = true;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
else if(wasHovered)
|
|
||||||
{
|
|
||||||
mexui.clearHoveredComponent();
|
|
||||||
this.onMouseExit();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.onMouseWheel = function(e, data)
|
|
||||||
{
|
|
||||||
this.triggerEvent('onMouseWheel', e, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
this.triggerEvent('onKeyDown', e, key, mods);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.onCharacter = function(e, character)
|
|
||||||
{
|
|
||||||
this.triggerEvent('onCharacter', e, character);
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Component.Window.prototype.render = function()
|
|
||||||
{
|
|
||||||
// window background
|
|
||||||
mexui.native.drawRectangleBackground(this.position, this.size, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.titleBarShown)
|
|
||||||
{
|
|
||||||
// window title bar
|
|
||||||
mexui.native.drawRectangle(this.position, new Vec2(this.size.x, this.titleBarHeight), this.getStyles('title'));
|
|
||||||
mexui.native.drawText(this.position, new Vec2(this.size.x, this.titleBarHeight), this.title, this.getStyles('title'));
|
|
||||||
|
|
||||||
if(this.titleBarIconShown)
|
|
||||||
{
|
|
||||||
// window title bar icons
|
|
||||||
var iconPos = this.getCloseIconPosition();
|
|
||||||
mexui.native.drawRectangle(iconPos, this.titleBarIconSize, this.getStyles('icon'));
|
|
||||||
mexui.native.drawText(iconPos, this.titleBarIconSize, 'X', this.getStyles('icon'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// window border
|
|
||||||
mexui.native.drawRectangleBorder(this.position, this.size, this.getStyles('main'));
|
|
||||||
|
|
||||||
// window controls
|
|
||||||
var show, control;
|
|
||||||
for(var i in this.controls)
|
|
||||||
{
|
|
||||||
control = this.controls[i];
|
|
||||||
show = false;
|
|
||||||
|
|
||||||
if(control.shown)
|
|
||||||
{
|
|
||||||
show = true;
|
|
||||||
if(control.boundTo)
|
|
||||||
{
|
|
||||||
if(!control.isInsideBoundControl())
|
|
||||||
show = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(show)
|
|
||||||
control.render.call(control);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.renderAfter = function()
|
|
||||||
{
|
|
||||||
for(var i in this.controls)
|
|
||||||
{
|
|
||||||
if(this.controls[i].shown)
|
|
||||||
{
|
|
||||||
this.controls[i].renderAfter.call(this.controls[i]);
|
|
||||||
|
|
||||||
for(var i2 in this.controls[i].scrollBars)
|
|
||||||
{
|
|
||||||
if(this.controls[i].scrollBars[i2].shown)
|
|
||||||
this.controls[i].scrollBars[i2].renderAfter(this.controls[i].scrollBars[i2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Component.Window.prototype.center = function()
|
|
||||||
{
|
|
||||||
this.position = mexui.util.getCenterPosition(mexui.util.getWindowSize(), this.size);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.setTop = function()
|
|
||||||
{
|
|
||||||
mexui.windows.splice(mexui.windows.indexOf(this), 1);
|
|
||||||
mexui.windows.push(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.remove = function()
|
|
||||||
{
|
|
||||||
mexui.windows.splice(mexui.windows.indexOf(this), 1);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.isCursorOverCloseIcon = function()
|
|
||||||
{
|
|
||||||
return mexui.util.isCursorInRectangle(this.getCloseIconPosition(), this.titleBarIconSize);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.getCloseIconPosition = function()
|
|
||||||
{
|
|
||||||
return new Vec2(this.position.x + (this.size.x - this.titleBarIconSize.x), this.position.y);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.triggerEvent = function(eventName, e, data, callBaseMethodFirst)
|
|
||||||
{
|
|
||||||
for(var i in this.controls)
|
|
||||||
{
|
|
||||||
var control = this.controls[i];
|
|
||||||
|
|
||||||
if(!control.shown)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if(callBaseMethodFirst)
|
|
||||||
{
|
|
||||||
if(mexui.Entity.Component.prototype[eventName])
|
|
||||||
{
|
|
||||||
mexui.Entity.Component.prototype[eventName].call(control, e, data);
|
|
||||||
if(e.used)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.controls[i][eventName].call(control, e, data);
|
|
||||||
if(e.used)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.controls[i][eventName].call(control, e, data);
|
|
||||||
if(e.used)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && eventName == 'onMouseDown')
|
|
||||||
{
|
|
||||||
mexui.focusedControl = this.controls[i];
|
|
||||||
e.clickedAControl = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mexui.Entity.Component.prototype[eventName])
|
|
||||||
{
|
|
||||||
mexui.Entity.Component.prototype[eventName].call(control, e, data);
|
|
||||||
if(e.used)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.addControl = function(control)
|
|
||||||
{
|
|
||||||
this.controls.push(control);
|
|
||||||
return control;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.setShown = function(shown)
|
|
||||||
{
|
|
||||||
//var anyWindowShownBefore = mexui.isAnyWindowShown();
|
|
||||||
|
|
||||||
this.shown = shown;
|
|
||||||
|
|
||||||
if(mexui.focusedControl && this.isControlInWindow(mexui.focusedControl))
|
|
||||||
{
|
|
||||||
if(!shown)
|
|
||||||
{
|
|
||||||
mexui.focusedControl = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
if(shown)
|
|
||||||
{
|
|
||||||
if(!anyWindowShownBefore)
|
|
||||||
mexui.bindEvents();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(!mexui.isAnyWindowShown())
|
|
||||||
mexui.unbindEvents();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.isShown = function()
|
|
||||||
{
|
|
||||||
return this.shown;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.isControlInWindow = function(control)
|
|
||||||
{
|
|
||||||
for(var i in this.controls)
|
|
||||||
{
|
|
||||||
if(control == this.controls[i])
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.isCursorOverWindow = function()
|
|
||||||
{
|
|
||||||
return mexui.util.isCursorInRectangle(this.position, this.size);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.isCursorOverItem = function()
|
|
||||||
{
|
|
||||||
return this.isCursorOverWindow();
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.getScreenPosition = function()
|
|
||||||
{
|
|
||||||
return this.position;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.getFirstShownControl = function()
|
|
||||||
{
|
|
||||||
for(var i in this.controls)
|
|
||||||
{
|
|
||||||
if(this.controls[i].shown)
|
|
||||||
return this.controls[i];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Component.Window.prototype.getNextShownControl = function(afterControl)
|
|
||||||
{
|
|
||||||
var controlIndex = this.controls.indexOf(afterControl);
|
|
||||||
|
|
||||||
if(this.controls[controlIndex + 1])
|
|
||||||
return this.controls[controlIndex + 1];
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
// api
|
|
||||||
mexui.Component.Window.prototype.button = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Button(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.character = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Character(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.characters = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Characters(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.checkBox = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.CheckBox(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.day = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Day(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.date = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Date(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.digit = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Digit(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.digits = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Digits(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.dropDown = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.DropDown(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.grid = function(x, y, w, h, styles) { return this.addControl(new mexui.Control.Grid(this, x, y, w, h, styles)); };
|
|
||||||
mexui.Component.Window.prototype.hour = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Hour(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.image = function(x, y, w, h, filePath, styles, callback) { return this.addControl(new mexui.Control.Image(this, x, y, w, h, filePath, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.integer = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Integer(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.letter = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Letter(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.letters = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Letters(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.letterDigit = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.LetterDigit(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.lettersDigits = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.LettersDigits(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.line = function(x, y, w, h, styles, callback) { return this.addControl(new mexui.Control.Line(this, x, y, w, h, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.list = function(x, y, w, h, styles, callback) { return this.addControl(new mexui.Control.List(this, x, y, w, h, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.minute = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Minute(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.month = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Month(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.number = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Number(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.password = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Password(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.positiveInteger = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.PositiveInteger(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.positiveNumber = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.PositiveNumber(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.progressBar = function(x, y, w, h, text, styles) { return this.addControl(new mexui.Control.ProgressBar(this, x, y, w, h, text, styles)); };
|
|
||||||
mexui.Component.Window.prototype.radioButton = function(x, y, w, h, text, groupId, styles, callback) { return this.addControl(new mexui.Control.RadioButton(this, x, y, w, h, text, groupId, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.rangedInteger = function(x, y, w, h, text, min, max, styles, callback) { return this.addControl(new mexui.Control.RangedInteger(this, x, y, w, h, text, min, max, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.rangedNumber = function(x, y, w, h, text, min, max, styles, callback) { return this.addControl(new mexui.Control.RangedNumber(this, x, y, w, h, text, min, max, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.rectangle = function(x, y, w, h, styles, callback) { return this.addControl(new mexui.Control.Rectangle(this, x, y, w, h, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.scrollBar = function(x, y, w, h, isVertical, styles, callback) { return this.addControl(new mexui.Control.ScrollBar(this, x, y, w, h, isVertical, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.second = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Second(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.slider = function(x, y, w, h, isVertical, text, minText, maxText, styles, callback) { return this.addControl(new mexui.Control.Slider(this, x, y, w, h, isVertical, text, minText, maxText, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.tabPanel = function(x, y, w, h, styles, callback) { return this.addControl(new mexui.Control.TabPanel(this, x, y, w, h, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.text = function(x, y, w, h, text, styles) { return this.addControl(new mexui.Control.Text(this, x, y, w, h, text, styles)); };
|
|
||||||
mexui.Component.Window.prototype.textArea = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.TextArea(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.textInput = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.TextInput(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.time = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Time(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.tree = function(x, y, w, h, styles, callback) { return this.addControl(new mexui.Control.Tree(this, x, y, w, h, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.week = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Week(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.weekDay = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.WeekDay(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
mexui.Component.Window.prototype.year = function(x, y, w, h, text, styles, callback) { return this.addControl(new mexui.Control.Year(this, x, y, w, h, text, styles, callback)); };
|
|
||||||
|
|
||||||
40
third-party/mexui/Core/Control/Button.js
vendored
@@ -1,40 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Button', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('Button', styles), callback);
|
|
||||||
|
|
||||||
this.text = text;
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('Button', {});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.Button.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Button.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
if(this.isFocused() && (key == SDLK_RETURN || key == SDLK_RETURN2 || key == SDLK_KP_ENTER || key == SDLK_SPACE))
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.Button.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.size, this.getStyles('main'));
|
|
||||||
mexui.native.drawText(pos, this.size, this.text, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Character.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Character', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Character', styles), callback, true, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Character, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Character.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isCharacterInOctetRange(character, 32, 126);
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Characters.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Characters', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Characters', styles), callback, false, true);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Characters, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Characters.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isCharacterInOctetRange(character, 32, 126);
|
|
||||||
};
|
|
||||||
68
third-party/mexui/Core/Control/CheckBox.js
vendored
@@ -1,68 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('CheckBox', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('CheckBox', styles), callback);
|
|
||||||
|
|
||||||
this.text = text;
|
|
||||||
|
|
||||||
this.checked = false;
|
|
||||||
this.textMarginLeft = 5;
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('CheckBox', {
|
|
||||||
innerBox:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(0, 255, 0, 255)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.CheckBox.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.toggleChecked();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.CheckBox.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
if(this.isFocused())
|
|
||||||
{
|
|
||||||
if(key == SDLK_RETURN || key == SDLK_RETURN2 || key == SDLK_KP_ENTER || key == SDLK_SPACE)
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.toggleChecked();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.CheckBox.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.size, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.checked)
|
|
||||||
mexui.native.drawRectangle(mexui.util.addVec2(pos, new Vec2(1, 1)), new Vec2(this.size.x - 2, this.size.y - 2), this.getStyles('innerBox'));
|
|
||||||
|
|
||||||
mexui.native.drawText(mexui.util.addVec2(pos, new Vec2(this.size.x + this.textMarginLeft, 2)), this.size, this.text, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.CheckBox.prototype.getSizeForInput = function()
|
|
||||||
{
|
|
||||||
var textWidth = mexui.native.getTextWidth(this.text, this.getStyles('main'));
|
|
||||||
return new Vec2(this.size.x + this.textMarginLeft + textWidth, this.size.y);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.CheckBox.prototype.toggleChecked = function()
|
|
||||||
{
|
|
||||||
this.checked = !this.checked;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
};
|
|
||||||
182
third-party/mexui/Core/Control/Date.js
vendored
@@ -1,182 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Date', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Date', styles), callback, false, false);
|
|
||||||
|
|
||||||
this.day = 1;
|
|
||||||
this.month = 1;
|
|
||||||
this.year = 2019;
|
|
||||||
|
|
||||||
this.inputShown = false;
|
|
||||||
this.valueBoxSize = new Vec2(50, 30);
|
|
||||||
this.arrowBoxSize = new Vec2(25, 22);
|
|
||||||
|
|
||||||
this.maxYearOffset = 10;
|
|
||||||
this.minYearCallback = ()=>{ return 1900; };
|
|
||||||
this.maxYearCallback = ()=>{ return new Date().getFullYear() + this.maxYearOffset; }
|
|
||||||
this.twoDigitYearCapOffset = 10;
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Date, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// static
|
|
||||||
mexui.Control.Date.units = ['day', 'month', 'year'];
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('Date', {
|
|
||||||
arrow:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(90, 90, 80, 230),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.Date.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(this.inputShown)
|
|
||||||
{
|
|
||||||
var arrowIndex = this.getArrowIndexByCursor();
|
|
||||||
if(arrowIndex !== false)
|
|
||||||
{
|
|
||||||
var propIndex = (Math.ceil((arrowIndex + 1) / 2)) - 1;
|
|
||||||
var propName = mexui.Control.Date.units[propIndex];
|
|
||||||
var isIncrease = (arrowIndex % 2) == 1;
|
|
||||||
|
|
||||||
if(isIncrease)
|
|
||||||
this[propName]++;
|
|
||||||
else
|
|
||||||
this[propName]--;
|
|
||||||
|
|
||||||
if(this.day == 0)
|
|
||||||
this.day = 31;
|
|
||||||
else if(this.day == 32)
|
|
||||||
this.day = 1;
|
|
||||||
|
|
||||||
if(this.month == 0)
|
|
||||||
this.month = 12;
|
|
||||||
else if(this.month == 13)
|
|
||||||
this.month = 1;
|
|
||||||
|
|
||||||
var minYear = this.minYearCallback();
|
|
||||||
var maxYear = this.maxYearCallback();
|
|
||||||
if(this.year < minYear)
|
|
||||||
this.year = minYear;
|
|
||||||
else if(this.year > maxYear)
|
|
||||||
this.year = maxYear;
|
|
||||||
|
|
||||||
this.generateText();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
this.inputShown = !this.inputShown;
|
|
||||||
e.used = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.inputShown)
|
|
||||||
{
|
|
||||||
this.inputShown = false;
|
|
||||||
e.used = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.Date.prototype.renderAfter = function()
|
|
||||||
{
|
|
||||||
if(!this.inputShown)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var screenPos = this.getScreenPosition();
|
|
||||||
|
|
||||||
var pos = new Vec2(screenPos.x, screenPos.y);
|
|
||||||
for(var i=0; i<3; i++)
|
|
||||||
{
|
|
||||||
mexui.native.drawRectangle(pos, this.valueBoxSize, this.getStyles('main'));
|
|
||||||
mexui.native.drawText(pos, this.valueBoxSize, this[mexui.Control.Date.units[i]], this.getStyles('main'));
|
|
||||||
|
|
||||||
pos.x += this.valueBoxSize.x;
|
|
||||||
}
|
|
||||||
|
|
||||||
pos = new Vec2(screenPos.x, screenPos.y);
|
|
||||||
pos.y += this.valueBoxSize.y;
|
|
||||||
for(var i=0; i<3; i++)
|
|
||||||
{
|
|
||||||
for(var i2=0; i2<2; i2++)
|
|
||||||
{
|
|
||||||
var text = (i2 % 2) == 0 ? '<' : '>';
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.arrowBoxSize, this.getStyles('main'));
|
|
||||||
mexui.native.drawText(pos, this.arrowBoxSize, text, this.getStyles('main'));
|
|
||||||
|
|
||||||
pos.x += this.arrowBoxSize.x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Date.prototype.generateText = function()
|
|
||||||
{
|
|
||||||
this.setText((this.day < 10 ? '0'+this.day : this.day)
|
|
||||||
+'/'+(this.month < 10 ? '0'+this.month : this.month)
|
|
||||||
+'/'+(this.year < 10 ? '0'+this.year : this.year));
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Date.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isPositiveIntChar(character) || mexui.util.isLetter(character) || character == '/';
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Date.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
var parts = this.getText().split('/');
|
|
||||||
|
|
||||||
if(parts.length != 3)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for(var i in parts)
|
|
||||||
{
|
|
||||||
var partAsStr = parts[i];
|
|
||||||
if(partAsStr === '')
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if(i == 0)
|
|
||||||
{
|
|
||||||
if(!mexui.util.isDayIdWithOptionalSuffix(partAsStr))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if(i == 1)
|
|
||||||
{
|
|
||||||
if(!mexui.util.isMonthIdOrName(partAsStr))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if(i == 2)
|
|
||||||
{
|
|
||||||
if(!mexui.util.isYear(partAsStr, this.minYearCallback(), this.maxYearCallback(), this.twoDigitYearCapOffset))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Date.prototype.getArrowIndexByCursor = function()
|
|
||||||
{
|
|
||||||
var cursorPos = gui.cursorPosition;
|
|
||||||
|
|
||||||
var screenPos = this.getScreenPosition();
|
|
||||||
var firstArrowStartPos = new Vec2(screenPos.x, screenPos.y + this.valueBoxSize.y);
|
|
||||||
var lastArrowEndPos = new Vec2(screenPos.x + (this.arrowBoxSize.x * 6), screenPos.y + this.valueBoxSize.y + this.arrowBoxSize.y);
|
|
||||||
|
|
||||||
if(cursorPos.x >= firstArrowStartPos.x && cursorPos.y >= firstArrowStartPos.y && cursorPos.x <= lastArrowEndPos.x && cursorPos.y <= lastArrowEndPos.y)
|
|
||||||
{
|
|
||||||
return Math.floor((cursorPos.x - firstArrowStartPos.x) / this.arrowBoxSize.x);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
16
third-party/mexui/Core/Control/Day.js
vendored
@@ -1,16 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Day', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Day', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Day, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Day.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isPositiveIntChar(character) || mexui.util.isLetter(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Day.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
return mexui.util.isDayIdWithOptionalSuffix(this.getText());
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Digit.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Digit', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Digit', styles), callback, true, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Digit, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Digit.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isDigit(character);
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Digits.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Digits', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Digits', styles), callback, false, true);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Digits, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Digits.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isDigit(character);
|
|
||||||
};
|
|
||||||
160
third-party/mexui/Core/Control/DropDown.js
vendored
@@ -1,160 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('DropDown', true, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('DropDown', styles), callback);
|
|
||||||
mexui.Entity.ControlWithEntries.call(this, true, true, new Vec2(0, h), new Vec2(w + 120, 25));
|
|
||||||
|
|
||||||
this.axis.y.entriesShown = false;
|
|
||||||
|
|
||||||
this.text = text;
|
|
||||||
|
|
||||||
this.arrowShown = true;
|
|
||||||
this.selectedEntryIndex = -1;
|
|
||||||
this.hoveredEntryIndex = -1;
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('DropDown', {
|
|
||||||
item:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(255, 255, 255, 255),
|
|
||||||
textColour: toColour(0, 0, 0, 255),
|
|
||||||
|
|
||||||
hover:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(80, 80, 80, 255),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.DropDown.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0)
|
|
||||||
{
|
|
||||||
if(this.axis.y.entries.length == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var hitButton = this.isCursorOverControl();
|
|
||||||
if(hitButton)
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.setListShown(!this.axis.y.entriesShown);
|
|
||||||
}
|
|
||||||
else if(this.isListShown())
|
|
||||||
{
|
|
||||||
var selectedEntryIndex = this.axis.y.getEntryIndexByCursor();
|
|
||||||
if(selectedEntryIndex != null)
|
|
||||||
{
|
|
||||||
this.selectEntryByIndex(selectedEntryIndex);
|
|
||||||
e.used = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!e.used)
|
|
||||||
mexui.Entity.ControlWithEntries.prototype.onMouseDown.call(this, e);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.DropDown.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
if(this.isFocused())
|
|
||||||
{
|
|
||||||
if(key == SDLK_RETURN || key == SDLK_RETURN2 || key == SDLK_KP_ENTER || key == SDLK_SPACE)
|
|
||||||
{
|
|
||||||
var selectedEntryIndex = this.axis.y.getEntryIndexByCursor();
|
|
||||||
if(selectedEntryIndex == null)
|
|
||||||
{
|
|
||||||
this.setListShown(!this.isListShown());
|
|
||||||
e.used = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.selectEntryByIndex(selectedEntryIndex);
|
|
||||||
e.used = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.DropDown.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.size, this.getStyles('main'));
|
|
||||||
|
|
||||||
var text = this.selectedEntryIndex == -1 ? this.text : this.axis.y.entries[this.selectedEntryIndex].text;
|
|
||||||
mexui.native.drawText(pos, this.size, text, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.arrowShown)
|
|
||||||
{
|
|
||||||
var pos2 = new Vec2(pos.x + this.size.x - (25 + 3), pos.y + 0);
|
|
||||||
mexui.native.drawImage(pos2, new Vec2(25, 25), mexui.images.downArrow, this.getStyles('main'));
|
|
||||||
}
|
|
||||||
|
|
||||||
mexui.Entity.ControlWithEntries.prototype.render.call(this);
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.DropDown.prototype.renderAfter = function()
|
|
||||||
{
|
|
||||||
if(this.axis.y.entriesShown)
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
var pos2 = new Vec2(pos.x, pos.y);
|
|
||||||
|
|
||||||
pos.x += this.entriesPositionOffset.x;
|
|
||||||
pos.y += this.entriesPositionOffset.y;
|
|
||||||
|
|
||||||
pos2.x += this.entriesPositionOffset.x;
|
|
||||||
pos2.y += this.entriesPositionOffset.y;
|
|
||||||
|
|
||||||
for(var i=this.axis.y.getEntryStartIndex(),j=this.axis.y.getEntryEndIndex(); i<j; i++)
|
|
||||||
{
|
|
||||||
var item = this.axis.y.entries[i];
|
|
||||||
if(!item)
|
|
||||||
break;
|
|
||||||
|
|
||||||
//this.hovered = i == this.axis.y.hoveredEntryIndex;
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.entrySize, this.getStyles('item'));
|
|
||||||
mexui.native.drawText(pos, this.entrySize, item.text, this.getStyles('item'));
|
|
||||||
|
|
||||||
pos.y += this.entrySize.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos2,new Vec2(2,2)), mexui.util.addVec2(new Vec2(this.entrySize.x,this.axis.y.getDisplayedEntriesLength()),new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
}
|
|
||||||
|
|
||||||
mexui.Entity.ControlWithEntries.prototype.renderAfter.call(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.DropDown.prototype.item = function(text)
|
|
||||||
{
|
|
||||||
var entry = new mexui.Entry.DropDownItem(this, text);
|
|
||||||
this.axis.y.addEntry(entry);
|
|
||||||
return entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.DropDown.prototype.setListShown = function(shown)
|
|
||||||
{
|
|
||||||
this.axis.y.entriesShown = shown;
|
|
||||||
this.axis.y.setScrollBarShown(shown);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.DropDown.prototype.isListShown = function()
|
|
||||||
{
|
|
||||||
return this.axis.y.entriesShown;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.DropDown.prototype.selectEntryByIndex = function(entryIndex)
|
|
||||||
{
|
|
||||||
this.selectedEntryIndex = entryIndex;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
this.setListShown(false);
|
|
||||||
};
|
|
||||||
130
third-party/mexui/Core/Control/Grid.js
vendored
@@ -1,130 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Grid', true, function(window, x, y, w, h, styles)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('Grid', styles));
|
|
||||||
mexui.Entity.ControlWithEntries.call(this, false, false, new Vec2(0, 25), new Vec2(this.size.x, 25), new Vec2(0, -25));
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('Grid', {
|
|
||||||
column:
|
|
||||||
{
|
|
||||||
lineColour: toColour(0, 0, 0, 255)
|
|
||||||
},
|
|
||||||
header:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(255, 255, 255, 255),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
},
|
|
||||||
cell:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(255, 255, 255, 255),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
},
|
|
||||||
row:
|
|
||||||
{
|
|
||||||
lineColour: toColour(0, 0, 0, 255)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.Grid.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, this.size, this.getStyles('main'));
|
|
||||||
|
|
||||||
var startX = pos.x;
|
|
||||||
var maxColumnHeight = 0;
|
|
||||||
for(var i in this.axis.x.entries)
|
|
||||||
{
|
|
||||||
var column = this.axis.x.entries[i];
|
|
||||||
|
|
||||||
mexui.native.drawText(new Vec2(startX, pos.y), new Vec2(column.width, column.height), column.text, this.getStyles('header'));
|
|
||||||
|
|
||||||
startX += column.width;
|
|
||||||
mexui.native.drawAALine(new Vec2(startX, pos.y), new Vec2(startX, pos.y + this.size.y), this.getStyles('column'));
|
|
||||||
|
|
||||||
if(column.height > maxColumnHeight)
|
|
||||||
{
|
|
||||||
maxColumnHeight = column.height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var startY = pos.y + maxColumnHeight;
|
|
||||||
mexui.native.drawAALine(new Vec2(pos.x, startY), new Vec2(pos.x + this.size.x, startY), this.getStyles('row'));
|
|
||||||
|
|
||||||
for(var i=this.axis.y.getEntryStartIndex(),j=this.axis.y.getEntryEndIndex(); i<j; i++)
|
|
||||||
{
|
|
||||||
var row = this.axis.y.entries[i];
|
|
||||||
if(!row)
|
|
||||||
break;
|
|
||||||
|
|
||||||
startX = pos.x;
|
|
||||||
for(var i2 in row.cells)
|
|
||||||
{
|
|
||||||
var column = this.axis.x.entries[i2];
|
|
||||||
var cell = row.cells[i2];
|
|
||||||
var cellText = cell.text;
|
|
||||||
|
|
||||||
var styles = this.getEntryStyles([[cell,'main'], [row,'main'], [this,'row'], [this,'cell']]);
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(new Vec2(startX, startY), new Vec2(column.width, column.height), styles);
|
|
||||||
mexui.native.drawText(new Vec2(startX, startY), new Vec2(column.width, column.height), cellText, styles);
|
|
||||||
|
|
||||||
startX += column.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
startY += row.rowHeight;
|
|
||||||
mexui.native.drawAALine(new Vec2(pos.x, startY), new Vec2(pos.x + this.size.x, startY), this.getStyles('row'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Grid.prototype.column = function(text, width, height)
|
|
||||||
{
|
|
||||||
var entry = new mexui.Entry.GridColumn(this, text, width, height);
|
|
||||||
this.axis.x.addEntry(entry);
|
|
||||||
return entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Grid.prototype.row = function(cellsData, styles)
|
|
||||||
{
|
|
||||||
var cells = [];
|
|
||||||
for(var i in cellsData)
|
|
||||||
{
|
|
||||||
if(cellsData[i] instanceof mexui.Component.Entry)
|
|
||||||
{
|
|
||||||
cells[i] = cellsData[i];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cells[i] = new mexui.Component.Entry(this, 1, cellsData[i] + '');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var entry = new mexui.Entry.GridRow(this, cells, styles);
|
|
||||||
this.axis.y.addEntry(entry);
|
|
||||||
return entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Grid.prototype.cell = function(text, styles)
|
|
||||||
{
|
|
||||||
var entry = new mexui.Component.Entry(this, 0, text, styles);
|
|
||||||
return entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Grid.prototype.getAllEntriesLength = function(axisIndex)
|
|
||||||
{
|
|
||||||
if(axisIndex == 0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return this.axis.y.getAllEntriesLength2();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
21
third-party/mexui/Core/Control/Hour.js
vendored
@@ -1,21 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Hour', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Hour', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Hour, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Hour.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isPositiveIntChar(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Hour.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
var _int = parseInt(this.getText());
|
|
||||||
|
|
||||||
if(_int < 1 || _int > 23)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
39
third-party/mexui/Core/Control/Image.js
vendored
@@ -1,39 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Image', false, function(window, x, y, w, h, filePath, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('Image', styles), callback);
|
|
||||||
|
|
||||||
this.image = mexui.native.loadImage(filePath);
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('Image', {});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.Image.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Image.prototype.onKeyDown = function(e, key, mods)
|
|
||||||
{
|
|
||||||
if(this.isFocused() && (key == SDLK_RETURN || key == SDLK_RETURN2 || key == SDLK_KP_ENTER || key == SDLK_SPACE))
|
|
||||||
{
|
|
||||||
e.used = true;
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.Image.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
|
|
||||||
mexui.native.drawImage(pos, this.size, this.image, this.getStyles('main'));
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
16
third-party/mexui/Core/Control/Integer.js
vendored
@@ -1,16 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Integer', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Integer', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Integer, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Integer.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isIntChar(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Integer.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
return mexui.util.isInt(this.getText());
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Letter.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Letter', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Letter', styles), callback, true, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Letter, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Letter.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isLetter(character);
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/LetterDigit.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('LetterDigit', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('LetterDigit', styles), callback, true, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.LetterDigit, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.LetterDigit.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isLetterOrDigit(character);
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/Letters.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Letters', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Letters', styles), callback, false, true);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Letters, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Letters.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isLetter(character);
|
|
||||||
};
|
|
||||||
11
third-party/mexui/Core/Control/LettersDigits.js
vendored
@@ -1,11 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('LettersDigits', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('LettersDigits', styles), callback, false, true);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.LettersDigits, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.LettersDigits.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isLetterOrDigit(character);
|
|
||||||
};
|
|
||||||
23
third-party/mexui/Core/Control/Line.js
vendored
@@ -1,23 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Line', false, function(window, x, y, w, h, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('Line', styles), callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('Line', {});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.Line.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.Line.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
mexui.native.drawAALine(pos, this.size, this.getStyles('main'));
|
|
||||||
};
|
|
||||||
62
third-party/mexui/Core/Control/List.js
vendored
@@ -1,62 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('List', true, function(window, x, y, w, h, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Component.Control.call(this, window, x, y, w, h, this.linkControlStyles('List', styles), callback);
|
|
||||||
mexui.Entity.ControlWithEntries.call(this, false, false);
|
|
||||||
|
|
||||||
this.activeRow = null;
|
|
||||||
this.rowHeight = 25;
|
|
||||||
});
|
|
||||||
|
|
||||||
// default styles
|
|
||||||
mexui.util.linkBaseControlStyles('List', {
|
|
||||||
row:
|
|
||||||
{
|
|
||||||
backgroundColour: toColour(255, 255, 255, 255),
|
|
||||||
textColour: toColour(0, 0, 0, 255)
|
|
||||||
},
|
|
||||||
rowLine:
|
|
||||||
{
|
|
||||||
lineColour: toColour(0, 0, 0, 150)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// input
|
|
||||||
mexui.Control.List.prototype.onMouseDown = function(e)
|
|
||||||
{
|
|
||||||
if(e.button == 0 && this.isCursorOverControl())
|
|
||||||
{
|
|
||||||
this.activeRow = this.axis.y.getEntryByCursor();
|
|
||||||
this.checkToCallCallback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// render
|
|
||||||
mexui.Control.List.prototype.render = function()
|
|
||||||
{
|
|
||||||
var pos = this.getScreenPosition();
|
|
||||||
var pos2 = new Vec2(pos.x, pos.y);
|
|
||||||
|
|
||||||
for(var i in this.axis.y.entries)
|
|
||||||
{
|
|
||||||
var row = this.axis.y.entries[i];
|
|
||||||
var rowText = row.text;
|
|
||||||
|
|
||||||
mexui.native.drawRectangle(pos, new Vec2(this.size.x, this.rowHeight), this.getStyles('row'));
|
|
||||||
mexui.native.drawText(pos, new Vec2(this.size.x, this.rowHeight), rowText, this.getStyles('row'));
|
|
||||||
|
|
||||||
pos.y += this.rowHeight;
|
|
||||||
mexui.native.drawAALine(pos, new Vec2(pos.x + this.size.x, pos.y), this.getStyles('rowLine'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.isFocused())
|
|
||||||
mexui.native.drawRectangleBorder(mexui.util.subtractVec2(pos2,new Vec2(2,2)), mexui.util.addVec2(this.size,new Vec2(3,3)), this.getStyles('focused'));
|
|
||||||
};
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.List.prototype.row = function(text)
|
|
||||||
{
|
|
||||||
var entry = new mexui.Entry.ListRow(this, text);
|
|
||||||
this.axis.y.addEntry(entry);
|
|
||||||
return entry;
|
|
||||||
};
|
|
||||||
|
|
||||||
21
third-party/mexui/Core/Control/Minute.js
vendored
@@ -1,21 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Minute', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Minute', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Minute, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Minute.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isPositiveIntChar(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Minute.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
var _int = parseInt(this.getText());
|
|
||||||
|
|
||||||
if(_int < 1 || _int > 59)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
16
third-party/mexui/Core/Control/Month.js
vendored
@@ -1,16 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Month', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Month', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Month, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Month.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isPositiveIntChar(character) || mexui.util.isLetter(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Month.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
return mexui.util.isMonthIdOrName(this.getText());
|
|
||||||
};
|
|
||||||
16
third-party/mexui/Core/Control/Number.js
vendored
@@ -1,16 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Number', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Number', styles), callback, false, false);
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Number, mexui.Control.TextInput);
|
|
||||||
|
|
||||||
// model
|
|
||||||
mexui.Control.Number.prototype.validateInputCallback = function(e, character)
|
|
||||||
{
|
|
||||||
return mexui.util.isFloatChar(character);
|
|
||||||
};
|
|
||||||
|
|
||||||
mexui.Control.Number.prototype.validateValueCallback = function(e)
|
|
||||||
{
|
|
||||||
return mexui.util.isFloat(this.getText());
|
|
||||||
};
|
|
||||||
7
third-party/mexui/Core/Control/Password.js
vendored
@@ -1,7 +0,0 @@
|
|||||||
mexui.util.createControlConstructor('Password', false, function(window, x, y, w, h, text, styles, callback)
|
|
||||||
{
|
|
||||||
mexui.Control.TextInput.call(this, window, x, y, w, h, text, this.linkControlStyles('Password', styles), callback, false, true);
|
|
||||||
|
|
||||||
this.masked = true;
|
|
||||||
});
|
|
||||||
mexui.util.extend(mexui.Control.Password, mexui.Control.TextInput);
|
|
||||||