@armoury/fivem-framework-server 0.0.0-stage → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/decorators/command.decorator.js +37 -0
- package/dist/cjs/decorators/controller.decorator.js +9 -0
- package/dist/cjs/decorators/decorator.utils.js +43 -0
- package/dist/cjs/decorators/event-listener.decorator.js +64 -0
- package/dist/cjs/decorators/export.decorator.js +18 -0
- package/dist/cjs/decorators/index.js +16 -0
- package/dist/cjs/decorators/key-binding.decorator.js +29 -0
- package/dist/cjs/decorators/ui-listener.decorator.js +24 -0
- package/dist/cjs/server/entity-controllers/server-entity-entrance.controller.js +28 -0
- package/dist/cjs/server/index.js +82 -0
- package/dist/cjs/server/models/create-vehicle.enums.js +8 -0
- package/dist/cjs/server/models/index.js +17 -0
- package/dist/cjs/server/models/session/base-items/array.session-item.js +60 -0
- package/dist/cjs/server/models/session/base-items/index.js +17 -0
- package/dist/cjs/server/models/session/index.js +19 -0
- package/dist/cjs/server/models/session/session-item.model.js +19 -0
- package/dist/cjs/server/models/session/session.model.js +2 -0
- package/dist/cjs/server/server-db-dependent.controller.js +227 -0
- package/dist/cjs/server/server.base.js +32 -0
- package/dist/cjs/server/server.controller.js +83 -0
- package/dist/cjs/server/server.entities.js +57 -0
- package/dist/cjs/server/services/index.js +21 -0
- package/dist/cjs/server/services/server-enterable-database.service.js +37 -0
- package/dist/cjs/server/services/server-resource-database.service.js +242 -0
- package/dist/cjs/server/services/server-translate.service.js +54 -0
- package/dist/cjs/server/services/server-virtual-worlds.service.js +62 -0
- package/dist/cjs/server/services/session/default-entities/character.entity.js +31 -0
- package/dist/cjs/server/services/session/default-entities/index.js +24 -0
- package/dist/cjs/server/services/session/default-entities/session-account-id.js +10 -0
- package/dist/cjs/server/services/session/default-entities/session-cash.js +10 -0
- package/dist/cjs/server/services/session/default-entities/session-hours-played.js +16 -0
- package/dist/cjs/server/services/session/default-entities/session-id.js +10 -0
- package/dist/cjs/server/services/session/default-entities/session-language.js +10 -0
- package/dist/cjs/server/services/session/default-entities/session-last-location.js +19 -0
- package/dist/cjs/server/services/session/default-entities/session-name.js +10 -0
- package/dist/cjs/server/services/session/index.js +17 -0
- package/dist/cjs/server/services/session/server-session.service.js +271 -0
- package/dist/cjs/shared/index.js +17 -0
- package/dist/cjs/shared/models/account.js +2 -0
- package/dist/cjs/shared/models/character.js +2 -0
- package/dist/cjs/shared/models/index.js +18 -0
- package/dist/cjs/utils/utils.js +109 -0
- package/dist/esm/decorators/command.decorator.js +33 -0
- package/dist/esm/decorators/controller.decorator.js +6 -0
- package/dist/esm/decorators/decorator.utils.js +38 -0
- package/dist/esm/decorators/event-listener.decorator.js +59 -0
- package/dist/esm/decorators/export.decorator.js +14 -0
- package/dist/esm/decorators/index.js +6 -0
- package/dist/esm/decorators/key-binding.decorator.js +25 -0
- package/dist/esm/decorators/ui-listener.decorator.js +20 -0
- package/dist/esm/server/entity-controllers/server-entity-entrance.controller.js +24 -0
- package/dist/esm/server/index.js +64 -0
- package/dist/esm/server/models/create-vehicle.enums.js +5 -0
- package/dist/esm/server/models/index.js +1 -0
- package/dist/esm/server/models/session/base-items/array.session-item.js +56 -0
- package/dist/esm/server/models/session/base-items/index.js +1 -0
- package/dist/esm/server/models/session/index.js +3 -0
- package/dist/esm/server/models/session/session-item.model.js +15 -0
- package/dist/esm/server/models/session/session.model.js +1 -0
- package/dist/esm/server/server-db-dependent.controller.js +224 -0
- package/dist/esm/server/server.base.js +28 -0
- package/dist/esm/server/server.controller.js +80 -0
- package/dist/esm/server/server.entities.js +54 -0
- package/dist/esm/server/services/index.js +5 -0
- package/dist/esm/server/services/server-enterable-database.service.js +34 -0
- package/dist/esm/server/services/server-resource-database.service.js +239 -0
- package/dist/esm/server/services/server-translate.service.js +51 -0
- package/dist/esm/server/services/server-virtual-worlds.service.js +59 -0
- package/dist/esm/server/services/session/default-entities/character.entity.js +28 -0
- package/dist/esm/server/services/session/default-entities/index.js +8 -0
- package/dist/esm/server/services/session/default-entities/session-account-id.js +6 -0
- package/dist/esm/server/services/session/default-entities/session-cash.js +6 -0
- package/dist/esm/server/services/session/default-entities/session-hours-played.js +12 -0
- package/dist/esm/server/services/session/default-entities/session-id.js +6 -0
- package/dist/esm/server/services/session/default-entities/session-language.js +6 -0
- package/dist/esm/server/services/session/default-entities/session-last-location.js +15 -0
- package/dist/esm/server/services/session/default-entities/session-name.js +6 -0
- package/dist/esm/server/services/session/index.js +1 -0
- package/dist/esm/server/services/session/server-session.service.js +268 -0
- package/dist/esm/shared/index.js +1 -0
- package/dist/esm/shared/models/account.js +1 -0
- package/dist/esm/shared/models/character.js +1 -0
- package/dist/esm/shared/models/index.js +2 -0
- package/dist/esm/utils/utils.js +93 -0
- package/dist/types/ambient.declarations.d.ts +62840 -0
- package/dist/types/decorators/command.decorator.d.ts +5 -0
- package/dist/types/decorators/controller.decorator.d.ts +1 -0
- package/dist/types/decorators/decorator.utils.d.ts +15 -0
- package/dist/types/decorators/event-listener.decorator.d.ts +15 -0
- package/dist/types/decorators/export.decorator.d.ts +2 -0
- package/dist/types/decorators/index.d.ts +6 -0
- package/dist/types/decorators/key-binding.decorator.d.ts +8 -0
- package/dist/types/decorators/ui-listener.decorator.d.ts +4 -0
- package/dist/types/server/entity-controllers/server-entity-entrance.controller.d.ts +14 -0
- package/dist/types/server/index.d.ts +23 -0
- package/dist/types/server/models/create-vehicle.enums.d.ts +3 -0
- package/dist/types/server/models/index.d.ts +1 -0
- package/dist/types/server/models/session/base-items/array.session-item.d.ts +13 -0
- package/dist/types/server/models/session/base-items/index.d.ts +1 -0
- package/dist/types/server/models/session/index.d.ts +3 -0
- package/dist/types/server/models/session/session-item.model.d.ts +22 -0
- package/dist/types/server/models/session/session.model.d.ts +4 -0
- package/dist/types/server/server-db-dependent.controller.d.ts +29 -0
- package/dist/types/server/server.base.d.ts +7 -0
- package/dist/types/server/server.controller.d.ts +20 -0
- package/dist/types/server/server.entities.d.ts +13 -0
- package/dist/types/server/services/index.d.ts +5 -0
- package/dist/types/server/services/server-enterable-database.service.d.ts +14 -0
- package/dist/types/server/services/server-resource-database.service.d.ts +37 -0
- package/dist/types/server/services/server-translate.service.d.ts +12 -0
- package/dist/types/server/services/server-virtual-worlds.service.d.ts +15 -0
- package/dist/types/server/services/session/default-entities/character.entity.d.ts +5 -0
- package/dist/types/server/services/session/default-entities/index.d.ts +8 -0
- package/dist/types/server/services/session/default-entities/session-account-id.d.ts +4 -0
- package/dist/types/server/services/session/default-entities/session-cash.d.ts +4 -0
- package/dist/types/server/services/session/default-entities/session-hours-played.d.ts +5 -0
- package/dist/types/server/services/session/default-entities/session-id.d.ts +4 -0
- package/dist/types/server/services/session/default-entities/session-language.d.ts +4 -0
- package/dist/types/server/services/session/default-entities/session-last-location.d.ts +6 -0
- package/dist/types/server/services/session/default-entities/session-name.d.ts +4 -0
- package/dist/types/server/services/session/index.d.ts +1 -0
- package/dist/types/server/services/session/server-session.service.d.ts +70 -0
- package/dist/types/shared/index.d.ts +1 -0
- package/dist/types/shared/models/account.d.ts +5 -0
- package/dist/types/shared/models/character.d.ts +4 -0
- package/dist/types/shared/models/index.d.ts +2 -0
- package/dist/types/utils/utils.d.ts +15 -0
- package/package.json +32 -5
- package/README.md +0 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Command = Command;
|
|
4
|
+
exports.Commands = Commands;
|
|
5
|
+
const decorator_utils_1 = require("./decorator.utils");
|
|
6
|
+
// TODO: adminLevelRequired is not supposed to be here. Move it to @armoury/fivem-gamemode
|
|
7
|
+
function Command(data) {
|
|
8
|
+
return function (target, propertyKey) {
|
|
9
|
+
Reflect.defineMetadata(`arm_command_${propertyKey}`, data, target);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function Commands(target, _prototype, providers) {
|
|
13
|
+
decorator_utils_1.DecoratorUtils.map(target, _prototype, providers !== null && providers !== void 0 ? providers : [])
|
|
14
|
+
.filter((mapping) => mapping.key.startsWith('arm_command_'))
|
|
15
|
+
.forEach((mapping) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const rawCommandName = mapping.key.split('_').slice(2).join('_');
|
|
18
|
+
const keybinding = Reflect.getOwnMetadata('keybinding_' + rawCommandName, _prototype);
|
|
19
|
+
const commandName = `${keybinding ? '+' : ''}` + rawCommandName.toLowerCase() + (((_a = mapping.value) === null || _a === void 0 ? void 0 : _a.suffix) || '');
|
|
20
|
+
if (!Cfx.Client.IsDuplicityVersion()) {
|
|
21
|
+
Cfx.Client.RegisterCommand(commandName, (_source, args, _raw) => {
|
|
22
|
+
mapping.target[rawCommandName].apply(mapping.target, args);
|
|
23
|
+
}, false);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
Cfx.Server.RegisterCommand(commandName, (source, args, _raw) => {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
// TODO: This conditional is not generic enough. This conditional should actually check a function given through an injection token.
|
|
29
|
+
if (((_a = mapping.value) === null || _a === void 0 ? void 0 : _a.adminLevelRequired) && Number(Cfx.exports['authentication'].getPlayerInfo(source, 'adminLevel')) < ((_b = mapping.value) === null || _b === void 0 ? void 0 : _b.adminLevelRequired)) {
|
|
30
|
+
// TODO: Add error chat message OR some kind of visual notice here
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
mapping.target[rawCommandName].apply(mapping.target, [source, ...args]);
|
|
34
|
+
}, false);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// TODO: Re-add translation logic
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Controller = Controller;
|
|
5
|
+
function Controller(data) {
|
|
6
|
+
return function (target) {
|
|
7
|
+
// Reflect.defineMetadata(`arm_export_${propertyKey}`, propertyKey, target);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DecorationType = exports.DecoratorUtils = void 0;
|
|
4
|
+
exports.Decorate = Decorate;
|
|
5
|
+
const command_decorator_1 = require("./command.decorator");
|
|
6
|
+
const event_listener_decorator_1 = require("./event-listener.decorator");
|
|
7
|
+
const export_decorator_1 = require("./export.decorator");
|
|
8
|
+
const key_binding_decorator_1 = require("./key-binding.decorator");
|
|
9
|
+
const ui_listener_decorator_1 = require("./ui-listener.decorator");
|
|
10
|
+
class DecoratorUtils {
|
|
11
|
+
static map(target, _prototype, providers) {
|
|
12
|
+
return [
|
|
13
|
+
...Reflect.getOwnMetadataKeys(_prototype)
|
|
14
|
+
.map((key) => ({ key, target, value: Reflect.getOwnMetadata(key, _prototype) })),
|
|
15
|
+
...providers
|
|
16
|
+
? providers.map((provider) => Reflect.getMetadataKeys(provider)
|
|
17
|
+
.map((key) => ({
|
|
18
|
+
key,
|
|
19
|
+
target: provider,
|
|
20
|
+
value: Reflect.getMetadata(key, provider)
|
|
21
|
+
}))).flat()
|
|
22
|
+
: []
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.DecoratorUtils = DecoratorUtils;
|
|
27
|
+
function Decorate(instance, _prototype, providers, decorationType = DecorationType.SERVER) {
|
|
28
|
+
const relevantProvidersForClass = Object.values(instance)
|
|
29
|
+
.filter((provider) => typeof provider === 'object'
|
|
30
|
+
&& Reflect.getMetadataKeys(provider).some((key) => key.startsWith('arm_')));
|
|
31
|
+
(0, command_decorator_1.Commands)(instance, _prototype, relevantProvidersForClass);
|
|
32
|
+
(0, event_listener_decorator_1.EventListeners)(instance, _prototype, relevantProvidersForClass);
|
|
33
|
+
(0, export_decorator_1.Exports)(instance, _prototype, relevantProvidersForClass);
|
|
34
|
+
(0, key_binding_decorator_1.KeyBindings)(instance, _prototype, relevantProvidersForClass);
|
|
35
|
+
if (decorationType === DecorationType.CLIENT) {
|
|
36
|
+
(0, ui_listener_decorator_1.UIListeners)(instance, _prototype, relevantProvidersForClass);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
var DecorationType;
|
|
40
|
+
(function (DecorationType) {
|
|
41
|
+
DecorationType[DecorationType["SERVER"] = 0] = "SERVER";
|
|
42
|
+
DecorationType[DecorationType["CLIENT"] = 1] = "CLIENT";
|
|
43
|
+
})(DecorationType || (exports.DecorationType = DecorationType = {}));
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_EVENTS = exports.EVENT_DIRECTIONS = void 0;
|
|
4
|
+
exports.EventListener = EventListener;
|
|
5
|
+
exports.EventListeners = EventListeners;
|
|
6
|
+
const decorator_utils_1 = require("./decorator.utils");
|
|
7
|
+
function EventListener(data) {
|
|
8
|
+
return function (target, propertyKey) {
|
|
9
|
+
const eventName = (exports.DEFAULT_EVENTS[propertyKey] || (data === null || data === void 0 ? void 0 : data.eventName));
|
|
10
|
+
const direction = (data === null || data === void 0 ? void 0 : data.direction) || EVENT_DIRECTIONS.CLIENT_TO_SERVER;
|
|
11
|
+
const type = (data === null || data === void 0 ? void 0 : data.type) || 'default';
|
|
12
|
+
Reflect.defineMetadata(`arm_eventListener_${propertyKey}`, { eventName, direction, type }, target);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function EventListeners(target, _prototype, providers) {
|
|
16
|
+
decorator_utils_1.DecoratorUtils.map(target, _prototype, providers !== null && providers !== void 0 ? providers : [])
|
|
17
|
+
.filter((mapping) => mapping.key.startsWith('arm_eventListener_'))
|
|
18
|
+
.forEach((mapping) => {
|
|
19
|
+
const { eventName, direction, type } = mapping.value;
|
|
20
|
+
const func = mapping.key.split('_').slice(2).join('_');
|
|
21
|
+
if (type === 'ui') {
|
|
22
|
+
Cfx.Client.RegisterNuiCallbackType(eventName);
|
|
23
|
+
Cfx.Client.on('__cfx_nui:' + eventName, (data, cb) => {
|
|
24
|
+
mapping.target[func].call(mapping.target, data);
|
|
25
|
+
cb('ok');
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
switch (direction) {
|
|
30
|
+
case EVENT_DIRECTIONS.CLIENT_TO_CLIENT: {
|
|
31
|
+
Cfx.Client.on(eventName, mapping.target[func].bind(mapping.target));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
default: {
|
|
35
|
+
Cfx.Server.onNet(eventName, mapping.target[func].bind(mapping.target));
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
var EVENT_DIRECTIONS;
|
|
43
|
+
(function (EVENT_DIRECTIONS) {
|
|
44
|
+
EVENT_DIRECTIONS[EVENT_DIRECTIONS["SERVER_TO_SERVER"] = 0] = "SERVER_TO_SERVER";
|
|
45
|
+
EVENT_DIRECTIONS[EVENT_DIRECTIONS["SERVER_TO_CLIENT"] = 1] = "SERVER_TO_CLIENT";
|
|
46
|
+
EVENT_DIRECTIONS[EVENT_DIRECTIONS["CLIENT_TO_SERVER"] = 2] = "CLIENT_TO_SERVER";
|
|
47
|
+
EVENT_DIRECTIONS[EVENT_DIRECTIONS["CLIENT_TO_CLIENT"] = 3] = "CLIENT_TO_CLIENT";
|
|
48
|
+
})(EVENT_DIRECTIONS || (exports.EVENT_DIRECTIONS = EVENT_DIRECTIONS = {}));
|
|
49
|
+
// TODO: Refactor this, so resources can add to it
|
|
50
|
+
exports.DEFAULT_EVENTS = {
|
|
51
|
+
onAccountAuthenticate: 'authentication:account-success',
|
|
52
|
+
onPlayerConnect: 'playerJoining',
|
|
53
|
+
onPlayerDeath: 'armoury:onPlayerDeath',
|
|
54
|
+
onPlayerAuthenticate: 'authentication:player-authenticated',
|
|
55
|
+
onPlayerLogout: 'armoury:player-logout',
|
|
56
|
+
onPlayerDisconnect: 'playerDropped',
|
|
57
|
+
onResourceStop: 'onResourceStop',
|
|
58
|
+
onContextMenuItemPressed: 'armoury-overlay:context-menu-item-pressed',
|
|
59
|
+
onPlayerEnterVehicle: 'armoury:onPlayerEnterVehicle',
|
|
60
|
+
onPlayerExitVehicle: 'armoury:onPlayerExitVehicle',
|
|
61
|
+
onPlayerClientsidedCacheLoaded: 'armoury:player-resource-cache-loaded',
|
|
62
|
+
onPlayerStartTowVehicle: 'armoury:onPlayerStartTowVehicle',
|
|
63
|
+
onPlayerStopTowVehicle: 'armoury:onPlayerStopTowVehicle',
|
|
64
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Export = Export;
|
|
4
|
+
exports.Exports = Exports;
|
|
5
|
+
const decorator_utils_1 = require("./decorator.utils");
|
|
6
|
+
function Export() {
|
|
7
|
+
return function (target, propertyKey) {
|
|
8
|
+
Reflect.defineMetadata(`arm_export_${propertyKey}`, propertyKey, target);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function Exports(target, _prototype, providers) {
|
|
12
|
+
decorator_utils_1.DecoratorUtils.map(target, _prototype, providers !== null && providers !== void 0 ? providers : [])
|
|
13
|
+
.filter((mapping) => mapping.key.startsWith('arm_export_'))
|
|
14
|
+
.forEach((mapping) => {
|
|
15
|
+
const exportName = mapping.key.split('_').slice(2).join('_');
|
|
16
|
+
Cfx.exports(exportName, mapping.target[exportName].bind(mapping.target));
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UIListener = exports.KeyBinding = exports.Export = exports.EVENT_DIRECTIONS = exports.EventListener = exports.Controller = exports.Command = void 0;
|
|
4
|
+
var command_decorator_1 = require("./command.decorator");
|
|
5
|
+
Object.defineProperty(exports, "Command", { enumerable: true, get: function () { return command_decorator_1.Command; } });
|
|
6
|
+
var controller_decorator_1 = require("./controller.decorator");
|
|
7
|
+
Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return controller_decorator_1.Controller; } });
|
|
8
|
+
var event_listener_decorator_1 = require("./event-listener.decorator");
|
|
9
|
+
Object.defineProperty(exports, "EventListener", { enumerable: true, get: function () { return event_listener_decorator_1.EventListener; } });
|
|
10
|
+
Object.defineProperty(exports, "EVENT_DIRECTIONS", { enumerable: true, get: function () { return event_listener_decorator_1.EVENT_DIRECTIONS; } });
|
|
11
|
+
var export_decorator_1 = require("./export.decorator");
|
|
12
|
+
Object.defineProperty(exports, "Export", { enumerable: true, get: function () { return export_decorator_1.Export; } });
|
|
13
|
+
var key_binding_decorator_1 = require("./key-binding.decorator");
|
|
14
|
+
Object.defineProperty(exports, "KeyBinding", { enumerable: true, get: function () { return key_binding_decorator_1.KeyBinding; } });
|
|
15
|
+
var ui_listener_decorator_1 = require("./ui-listener.decorator");
|
|
16
|
+
Object.defineProperty(exports, "UIListener", { enumerable: true, get: function () { return ui_listener_decorator_1.UIListener; } });
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyBinding = KeyBinding;
|
|
4
|
+
exports.KeyBindings = KeyBindings;
|
|
5
|
+
const decorator_utils_1 = require("./decorator.utils");
|
|
6
|
+
function KeyBinding(data) {
|
|
7
|
+
return function (target, propertyKey) {
|
|
8
|
+
Reflect.defineMetadata(`arm_keybinding_${propertyKey}`, {
|
|
9
|
+
command: data.command,
|
|
10
|
+
description: data.description,
|
|
11
|
+
defaultMapper: data.defaultMapper,
|
|
12
|
+
key: data.key
|
|
13
|
+
}, target);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function KeyBindings(target, _prototype, providers) {
|
|
17
|
+
decorator_utils_1.DecoratorUtils.map(target, _prototype, providers !== null && providers !== void 0 ? providers : [])
|
|
18
|
+
.filter((mapping) => mapping.key.startsWith('arm_keybinding_'))
|
|
19
|
+
.forEach((mapping) => {
|
|
20
|
+
var _a, _b, _c, _d;
|
|
21
|
+
const keybindingName = mapping.key.split('_').slice(2).join('_');
|
|
22
|
+
const command = ((_a = mapping.value) === null || _a === void 0 ? void 0 : _a.command) || keybindingName;
|
|
23
|
+
if (!command) {
|
|
24
|
+
console.error(`Could not find any relevant command for key binding ${keybindingName}`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
Cfx.Client.RegisterKeyMapping(`+${command.toLowerCase()}`, (_b = mapping.value) === null || _b === void 0 ? void 0 : _b.description, (_c = mapping.value) === null || _c === void 0 ? void 0 : _c.defaultMapper, (_d = mapping.value) === null || _d === void 0 ? void 0 : _d.key);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UIListener = UIListener;
|
|
4
|
+
exports.UIListeners = UIListeners;
|
|
5
|
+
const decorator_utils_1 = require("./decorator.utils");
|
|
6
|
+
function UIListener(data) {
|
|
7
|
+
return function (target, propertyKey) {
|
|
8
|
+
const eventName = (data === null || data === void 0 ? void 0 : data.eventName) || propertyKey;
|
|
9
|
+
Reflect.defineMetadata(`arm_uiListener_${propertyKey}`, { eventName }, target);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function UIListeners(target, _prototype, providers) {
|
|
13
|
+
decorator_utils_1.DecoratorUtils.map(target, _prototype, providers !== null && providers !== void 0 ? providers : [])
|
|
14
|
+
.filter((mapping) => mapping.key.startsWith('arm_uiListener_'))
|
|
15
|
+
.forEach((mapping) => {
|
|
16
|
+
const { eventName } = mapping.value;
|
|
17
|
+
const func = mapping.key.split('_').slice(2).join('_');
|
|
18
|
+
Cfx.Client.RegisterNuiCallbackType(eventName);
|
|
19
|
+
Cfx.Client.on('__cfx_nui:' + eventName, (data, cb) => {
|
|
20
|
+
mapping.target[func].call(mapping.target, data);
|
|
21
|
+
cb('ok');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerEntityWithEntranceController = void 0;
|
|
4
|
+
// TODO: Remove
|
|
5
|
+
const fivem_framework_common_1 = require("@armoury/fivem-framework-common");
|
|
6
|
+
const server_db_dependent_controller_1 = require("../server-db-dependent.controller");
|
|
7
|
+
class ServerEntityWithEntranceController extends server_db_dependent_controller_1.ServerDBDependentController {
|
|
8
|
+
getClosestEntityOfSameTypeToPlayer(player) {
|
|
9
|
+
return this.getClosestEntityOfSameTypeExitToPlayer(player) || this.getClosestEntityOfSameTypeEntranceToPlayer(player);
|
|
10
|
+
}
|
|
11
|
+
getClosestEntityOfSameTypeEntranceToPlayer(source) {
|
|
12
|
+
// TODO: Replace here to actually get the closest, not the first one in the range
|
|
13
|
+
const playerPosition = Cfx.Server.GetEntityCoords(Cfx.Server.GetPlayerPed(Cfx.source.toString()) /*, true*/);
|
|
14
|
+
const entity = this.entities.find((_entity) => (0, fivem_framework_common_1.isPlayerInRangeOfPoint)(playerPosition[0], playerPosition[1], playerPosition[2], _entity.entranceX, _entity.entranceY, _entity.entranceZ, 3.0));
|
|
15
|
+
return entity || null;
|
|
16
|
+
}
|
|
17
|
+
getClosestEntityOfSameTypeExitToPlayer(source) {
|
|
18
|
+
const virtualWorld = this.getPlayerVirtualWorld(source) || 0;
|
|
19
|
+
const entity = this.getEntityByDBId(virtualWorld);
|
|
20
|
+
const playerPosition = Cfx.Server.GetEntityCoords(Cfx.Server.GetPlayerPed(Cfx.source.toString()) /*, true*/);
|
|
21
|
+
// TODO: Replace here to actually get the closest, not the first one in the range
|
|
22
|
+
if (entity && (0, fivem_framework_common_1.isPlayerInRangeOfPoint)(playerPosition[0], playerPosition[1], playerPosition[2], entity.exitX, entity.exitY, entity.exitZ, 3.0)) {
|
|
23
|
+
return entity;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.ServerEntityWithEntranceController = ServerEntityWithEntranceController;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/// <reference path = "../ambient.declarations.d.ts" />
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SERVER_PROVIDERS = void 0;
|
|
19
|
+
exports.Server_Init = Server_Init;
|
|
20
|
+
require("reflect-metadata");
|
|
21
|
+
const core_1 = require("@mikro-orm/core");
|
|
22
|
+
const injection_js_1 = require("injection-js");
|
|
23
|
+
const default_entities_1 = require("./services/session/default-entities");
|
|
24
|
+
const fivem_framework_common_1 = require("@armoury/fivem-framework-common");
|
|
25
|
+
exports.SERVER_PROVIDERS = [
|
|
26
|
+
{
|
|
27
|
+
provide: 'sessionItems',
|
|
28
|
+
useValue: new default_entities_1.SessionId(),
|
|
29
|
+
multi: true,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
provide: 'sessionItems',
|
|
33
|
+
useValue: new default_entities_1.SessionAccountId(),
|
|
34
|
+
multi: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
provide: 'sessionItems',
|
|
38
|
+
useValue: new default_entities_1.SessionName(),
|
|
39
|
+
multi: true,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
provide: 'sessionItems',
|
|
43
|
+
useValue: new default_entities_1.SessionCash(),
|
|
44
|
+
multi: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
provide: 'sessionItems',
|
|
48
|
+
useValue: new default_entities_1.SessionHoursPlayed(),
|
|
49
|
+
multi: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
provide: 'sessionItems',
|
|
53
|
+
useValue: new default_entities_1.SessionLastLocation(),
|
|
54
|
+
multi: true,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
provide: 'sessionItems',
|
|
58
|
+
useValue: new default_entities_1.SessionLanguage(),
|
|
59
|
+
multi: true,
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
async function Server_Init(_class, ...providers) {
|
|
63
|
+
var _a;
|
|
64
|
+
const database = (_a = Cfx.Server.GetConvar('mysql_connection_string', '').split(';')
|
|
65
|
+
.find((item) => item.startsWith('database='))) === null || _a === void 0 ? void 0 : _a.split('=').slice(-1)[0];
|
|
66
|
+
const test = await core_1.MikroORM.init({
|
|
67
|
+
baseDir: __dirname + '/../..',
|
|
68
|
+
entities: [default_entities_1.Character],
|
|
69
|
+
// entitiesTs: ['./src/**/*.entity.ts'],
|
|
70
|
+
dbName: database,
|
|
71
|
+
discovery: { disableDynamicFileAccess: true }
|
|
72
|
+
});
|
|
73
|
+
console.log('mikro-orm is', test);
|
|
74
|
+
const mainInjector = injection_js_1.ReflectiveInjector.resolveAndCreate(exports.SERVER_PROVIDERS);
|
|
75
|
+
const injector = injection_js_1.ReflectiveInjector.resolveAndCreate([...providers, _class], mainInjector);
|
|
76
|
+
const instance = injector.get(_class);
|
|
77
|
+
(0, fivem_framework_common_1.Decorate)(instance, _class.prototype, [...exports.SERVER_PROVIDERS, ...providers]);
|
|
78
|
+
return instance;
|
|
79
|
+
}
|
|
80
|
+
__exportStar(require("./services"), exports);
|
|
81
|
+
__exportStar(require("./models"), exports);
|
|
82
|
+
__exportStar(require("@armoury/fivem-framework-common"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CREATE_VEHICLE_EVENT_TYPE = void 0;
|
|
4
|
+
var CREATE_VEHICLE_EVENT_TYPE;
|
|
5
|
+
(function (CREATE_VEHICLE_EVENT_TYPE) {
|
|
6
|
+
CREATE_VEHICLE_EVENT_TYPE[CREATE_VEHICLE_EVENT_TYPE["ATTACH_TRAILER"] = 0] = "ATTACH_TRAILER";
|
|
7
|
+
})(CREATE_VEHICLE_EVENT_TYPE || (exports.CREATE_VEHICLE_EVENT_TYPE = CREATE_VEHICLE_EVENT_TYPE = {}));
|
|
8
|
+
;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./session"), exports);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArraySessionItem = void 0;
|
|
4
|
+
const session_item_model_1 = require("../session-item.model");
|
|
5
|
+
class ArraySessionItem extends session_item_model_1.SessionItem {
|
|
6
|
+
constructor(name, value, critical = false, tableName, syncedProperties) {
|
|
7
|
+
super(name, value, critical);
|
|
8
|
+
this.tableName = tableName;
|
|
9
|
+
this.syncedProperties = syncedProperties;
|
|
10
|
+
if (!this.syncedProperties.length) {
|
|
11
|
+
this.syncedProperties.push({ name: 'value', type: 'varchar(256)' });
|
|
12
|
+
}
|
|
13
|
+
this.syncedProperties = [
|
|
14
|
+
...DEFAULT_PROPERTIES,
|
|
15
|
+
...syncedProperties
|
|
16
|
+
];
|
|
17
|
+
this.setup();
|
|
18
|
+
}
|
|
19
|
+
async load(accountId, characterId) {
|
|
20
|
+
return await Cfx.exports['oxmysql'].query_async(`SELECT * FROM ${this.tableName} WHERE id=? AND accountId=?`, [characterId, accountId]);
|
|
21
|
+
}
|
|
22
|
+
async save(accountId, characterId, value) {
|
|
23
|
+
const columns = this.syncedProperties.map((prop) => prop.name).join(',');
|
|
24
|
+
const keys = value.map(() => `(${new Array(columns.length).fill(0).map(() => '?').join(', ')})`).join(', ');
|
|
25
|
+
const values = new Array(value.length).fill(0).map((_, valueIndex) => this.syncedProperties.map((prop) => {
|
|
26
|
+
if (prop.name === 'accountId') {
|
|
27
|
+
return accountId;
|
|
28
|
+
}
|
|
29
|
+
if (prop.name === 'characterId') {
|
|
30
|
+
return characterId;
|
|
31
|
+
}
|
|
32
|
+
return value[valueIndex][prop.name];
|
|
33
|
+
}))
|
|
34
|
+
.flat();
|
|
35
|
+
await Cfx.exports['oxmysql'].query_async(`DELETE FROM \`${this.tableName}\` WHERE accountId = ? AND characterId = ?`, [accountId, characterId]);
|
|
36
|
+
await Cfx.exports['oxmysql'].insert_async(`INSERT INTO \`${this.tableName}\` (${columns}) VALUES ${keys}`, values);
|
|
37
|
+
}
|
|
38
|
+
async setup() {
|
|
39
|
+
var _a;
|
|
40
|
+
const database = (_a = Cfx.Server.GetConvar('mysql_connection_string', '').split(';')
|
|
41
|
+
.find((item) => item.startsWith('database='))) === null || _a === void 0 ? void 0 : _a.split('=').slice(-1)[0];
|
|
42
|
+
const result = await Cfx.exports['oxmysql'].single_async(`SELECT EXISTS (
|
|
43
|
+
SELECT 1
|
|
44
|
+
FROM information_schema.tables
|
|
45
|
+
WHERE table_schema = '${database}'
|
|
46
|
+
AND table_name = '${this.tableName}'
|
|
47
|
+
) AS table_exists;`);
|
|
48
|
+
if (!result.table_exists) {
|
|
49
|
+
// TODO: Create table
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// TODO: Do migrations
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ArraySessionItem = ArraySessionItem;
|
|
57
|
+
const DEFAULT_PROPERTIES = [
|
|
58
|
+
{ name: 'accountId', type: 'int(11)' },
|
|
59
|
+
{ name: 'characterId', type: 'int(11)' },
|
|
60
|
+
];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./array.session-item"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base-items"), exports);
|
|
18
|
+
__exportStar(require("./session-item.model"), exports);
|
|
19
|
+
__exportStar(require("./session.model"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionItem = void 0;
|
|
4
|
+
class SessionItem {
|
|
5
|
+
constructor(name, defaultValue, critical = false) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.defaultValue = defaultValue;
|
|
8
|
+
this.critical = critical;
|
|
9
|
+
}
|
|
10
|
+
load(_accountId, _characterId, bruteValue) {
|
|
11
|
+
return Promise.resolve(!Number.isNaN(Number(bruteValue))
|
|
12
|
+
? Number(bruteValue)
|
|
13
|
+
: bruteValue);
|
|
14
|
+
}
|
|
15
|
+
compute(_playerId, originalValue) {
|
|
16
|
+
return originalValue;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SessionItem = SessionItem;
|