@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.
Files changed (129) hide show
  1. package/dist/cjs/decorators/command.decorator.js +37 -0
  2. package/dist/cjs/decorators/controller.decorator.js +9 -0
  3. package/dist/cjs/decorators/decorator.utils.js +43 -0
  4. package/dist/cjs/decorators/event-listener.decorator.js +64 -0
  5. package/dist/cjs/decorators/export.decorator.js +18 -0
  6. package/dist/cjs/decorators/index.js +16 -0
  7. package/dist/cjs/decorators/key-binding.decorator.js +29 -0
  8. package/dist/cjs/decorators/ui-listener.decorator.js +24 -0
  9. package/dist/cjs/server/entity-controllers/server-entity-entrance.controller.js +28 -0
  10. package/dist/cjs/server/index.js +82 -0
  11. package/dist/cjs/server/models/create-vehicle.enums.js +8 -0
  12. package/dist/cjs/server/models/index.js +17 -0
  13. package/dist/cjs/server/models/session/base-items/array.session-item.js +60 -0
  14. package/dist/cjs/server/models/session/base-items/index.js +17 -0
  15. package/dist/cjs/server/models/session/index.js +19 -0
  16. package/dist/cjs/server/models/session/session-item.model.js +19 -0
  17. package/dist/cjs/server/models/session/session.model.js +2 -0
  18. package/dist/cjs/server/server-db-dependent.controller.js +227 -0
  19. package/dist/cjs/server/server.base.js +32 -0
  20. package/dist/cjs/server/server.controller.js +83 -0
  21. package/dist/cjs/server/server.entities.js +57 -0
  22. package/dist/cjs/server/services/index.js +21 -0
  23. package/dist/cjs/server/services/server-enterable-database.service.js +37 -0
  24. package/dist/cjs/server/services/server-resource-database.service.js +242 -0
  25. package/dist/cjs/server/services/server-translate.service.js +54 -0
  26. package/dist/cjs/server/services/server-virtual-worlds.service.js +62 -0
  27. package/dist/cjs/server/services/session/default-entities/character.entity.js +31 -0
  28. package/dist/cjs/server/services/session/default-entities/index.js +24 -0
  29. package/dist/cjs/server/services/session/default-entities/session-account-id.js +10 -0
  30. package/dist/cjs/server/services/session/default-entities/session-cash.js +10 -0
  31. package/dist/cjs/server/services/session/default-entities/session-hours-played.js +16 -0
  32. package/dist/cjs/server/services/session/default-entities/session-id.js +10 -0
  33. package/dist/cjs/server/services/session/default-entities/session-language.js +10 -0
  34. package/dist/cjs/server/services/session/default-entities/session-last-location.js +19 -0
  35. package/dist/cjs/server/services/session/default-entities/session-name.js +10 -0
  36. package/dist/cjs/server/services/session/index.js +17 -0
  37. package/dist/cjs/server/services/session/server-session.service.js +271 -0
  38. package/dist/cjs/shared/index.js +17 -0
  39. package/dist/cjs/shared/models/account.js +2 -0
  40. package/dist/cjs/shared/models/character.js +2 -0
  41. package/dist/cjs/shared/models/index.js +18 -0
  42. package/dist/cjs/utils/utils.js +109 -0
  43. package/dist/esm/decorators/command.decorator.js +33 -0
  44. package/dist/esm/decorators/controller.decorator.js +6 -0
  45. package/dist/esm/decorators/decorator.utils.js +38 -0
  46. package/dist/esm/decorators/event-listener.decorator.js +59 -0
  47. package/dist/esm/decorators/export.decorator.js +14 -0
  48. package/dist/esm/decorators/index.js +6 -0
  49. package/dist/esm/decorators/key-binding.decorator.js +25 -0
  50. package/dist/esm/decorators/ui-listener.decorator.js +20 -0
  51. package/dist/esm/server/entity-controllers/server-entity-entrance.controller.js +24 -0
  52. package/dist/esm/server/index.js +64 -0
  53. package/dist/esm/server/models/create-vehicle.enums.js +5 -0
  54. package/dist/esm/server/models/index.js +1 -0
  55. package/dist/esm/server/models/session/base-items/array.session-item.js +56 -0
  56. package/dist/esm/server/models/session/base-items/index.js +1 -0
  57. package/dist/esm/server/models/session/index.js +3 -0
  58. package/dist/esm/server/models/session/session-item.model.js +15 -0
  59. package/dist/esm/server/models/session/session.model.js +1 -0
  60. package/dist/esm/server/server-db-dependent.controller.js +224 -0
  61. package/dist/esm/server/server.base.js +28 -0
  62. package/dist/esm/server/server.controller.js +80 -0
  63. package/dist/esm/server/server.entities.js +54 -0
  64. package/dist/esm/server/services/index.js +5 -0
  65. package/dist/esm/server/services/server-enterable-database.service.js +34 -0
  66. package/dist/esm/server/services/server-resource-database.service.js +239 -0
  67. package/dist/esm/server/services/server-translate.service.js +51 -0
  68. package/dist/esm/server/services/server-virtual-worlds.service.js +59 -0
  69. package/dist/esm/server/services/session/default-entities/character.entity.js +28 -0
  70. package/dist/esm/server/services/session/default-entities/index.js +8 -0
  71. package/dist/esm/server/services/session/default-entities/session-account-id.js +6 -0
  72. package/dist/esm/server/services/session/default-entities/session-cash.js +6 -0
  73. package/dist/esm/server/services/session/default-entities/session-hours-played.js +12 -0
  74. package/dist/esm/server/services/session/default-entities/session-id.js +6 -0
  75. package/dist/esm/server/services/session/default-entities/session-language.js +6 -0
  76. package/dist/esm/server/services/session/default-entities/session-last-location.js +15 -0
  77. package/dist/esm/server/services/session/default-entities/session-name.js +6 -0
  78. package/dist/esm/server/services/session/index.js +1 -0
  79. package/dist/esm/server/services/session/server-session.service.js +268 -0
  80. package/dist/esm/shared/index.js +1 -0
  81. package/dist/esm/shared/models/account.js +1 -0
  82. package/dist/esm/shared/models/character.js +1 -0
  83. package/dist/esm/shared/models/index.js +2 -0
  84. package/dist/esm/utils/utils.js +93 -0
  85. package/dist/types/ambient.declarations.d.ts +62840 -0
  86. package/dist/types/decorators/command.decorator.d.ts +5 -0
  87. package/dist/types/decorators/controller.decorator.d.ts +1 -0
  88. package/dist/types/decorators/decorator.utils.d.ts +15 -0
  89. package/dist/types/decorators/event-listener.decorator.d.ts +15 -0
  90. package/dist/types/decorators/export.decorator.d.ts +2 -0
  91. package/dist/types/decorators/index.d.ts +6 -0
  92. package/dist/types/decorators/key-binding.decorator.d.ts +8 -0
  93. package/dist/types/decorators/ui-listener.decorator.d.ts +4 -0
  94. package/dist/types/server/entity-controllers/server-entity-entrance.controller.d.ts +14 -0
  95. package/dist/types/server/index.d.ts +23 -0
  96. package/dist/types/server/models/create-vehicle.enums.d.ts +3 -0
  97. package/dist/types/server/models/index.d.ts +1 -0
  98. package/dist/types/server/models/session/base-items/array.session-item.d.ts +13 -0
  99. package/dist/types/server/models/session/base-items/index.d.ts +1 -0
  100. package/dist/types/server/models/session/index.d.ts +3 -0
  101. package/dist/types/server/models/session/session-item.model.d.ts +22 -0
  102. package/dist/types/server/models/session/session.model.d.ts +4 -0
  103. package/dist/types/server/server-db-dependent.controller.d.ts +29 -0
  104. package/dist/types/server/server.base.d.ts +7 -0
  105. package/dist/types/server/server.controller.d.ts +20 -0
  106. package/dist/types/server/server.entities.d.ts +13 -0
  107. package/dist/types/server/services/index.d.ts +5 -0
  108. package/dist/types/server/services/server-enterable-database.service.d.ts +14 -0
  109. package/dist/types/server/services/server-resource-database.service.d.ts +37 -0
  110. package/dist/types/server/services/server-translate.service.d.ts +12 -0
  111. package/dist/types/server/services/server-virtual-worlds.service.d.ts +15 -0
  112. package/dist/types/server/services/session/default-entities/character.entity.d.ts +5 -0
  113. package/dist/types/server/services/session/default-entities/index.d.ts +8 -0
  114. package/dist/types/server/services/session/default-entities/session-account-id.d.ts +4 -0
  115. package/dist/types/server/services/session/default-entities/session-cash.d.ts +4 -0
  116. package/dist/types/server/services/session/default-entities/session-hours-played.d.ts +5 -0
  117. package/dist/types/server/services/session/default-entities/session-id.d.ts +4 -0
  118. package/dist/types/server/services/session/default-entities/session-language.d.ts +4 -0
  119. package/dist/types/server/services/session/default-entities/session-last-location.d.ts +6 -0
  120. package/dist/types/server/services/session/default-entities/session-name.d.ts +4 -0
  121. package/dist/types/server/services/session/index.d.ts +1 -0
  122. package/dist/types/server/services/session/server-session.service.d.ts +70 -0
  123. package/dist/types/shared/index.d.ts +1 -0
  124. package/dist/types/shared/models/account.d.ts +5 -0
  125. package/dist/types/shared/models/character.d.ts +4 -0
  126. package/dist/types/shared/models/index.d.ts +2 -0
  127. package/dist/types/utils/utils.d.ts +15 -0
  128. package/package.json +32 -5
  129. package/README.md +0 -3
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ServerResourceDatabase = void 0;
16
+ const injection_js_1 = require("injection-js");
17
+ const rxjs_1 = require("rxjs");
18
+ const fivem_framework_common_1 = require("@armoury/fivem-framework-common");
19
+ let ServerResourceDatabase = class ServerResourceDatabase {
20
+ get onBoundEntityDestroyed$() {
21
+ return this._onBoundEntityDestroyed$.asObservable();
22
+ }
23
+ get onSync$() {
24
+ return this._onSync$.asObservable();
25
+ }
26
+ get entities() {
27
+ return this._entities;
28
+ }
29
+ get cachedProperties() {
30
+ return this._cachedProperties;
31
+ }
32
+ get playerToEntityBindings() {
33
+ return this._playerToEntityBindings;
34
+ }
35
+ constructor(_tableName, _loadAllAtStart) {
36
+ this._tableName = _tableName;
37
+ this._loadAllAtStart = _loadAllAtStart;
38
+ this._onBoundEntityDestroyed$ = new rxjs_1.Subject();
39
+ this._onSync$ = new rxjs_1.Subject();
40
+ this._entities = [];
41
+ this._cachedProperties = [];
42
+ this._playerToEntityBindings = new Map();
43
+ this.computeTableProperties();
44
+ if (this._loadAllAtStart) {
45
+ this.loadDBEntities();
46
+ }
47
+ this.onSync$.subscribe((data) => {
48
+ var _a;
49
+ // TODO: Probable performance issue cause. Entity updates should be sent to clients only for a specific property, so they don't need to wipe ALL data and rewrite it back.
50
+ Cfx.Server.TriggerClientEvent(`${Cfx.Server.GetCurrentResourceName()}:db-send-entities`, (_a = data === null || data === void 0 ? void 0 : data.player) !== null && _a !== void 0 ? _a : -1, this.entities);
51
+ });
52
+ }
53
+ create(entity, forceId) {
54
+ return (async () => {
55
+ try {
56
+ let entityProperties = this.getEntityProperties(entity);
57
+ let entityValues = this.getEntityPropertiesValues(entity, entityProperties);
58
+ if (forceId) {
59
+ entityProperties = ['id', ...entityProperties];
60
+ entityValues = [forceId.toString(), ...entityValues];
61
+ }
62
+ const id = await Cfx.exports['oxmysql'].insert_async(`INSERT INTO \`${this._tableName}\` (${entityProperties.join(', ')}) VALUES (${Array(entityProperties.length).fill('?').join(', ')})`, entityValues);
63
+ const createdEntity = Object.assign(Object.assign({}, entity), { id: forceId || id });
64
+ this._entities.push(createdEntity);
65
+ this._onSync$.next();
66
+ return createdEntity;
67
+ }
68
+ catch (error) {
69
+ console.log(error);
70
+ return null;
71
+ }
72
+ })();
73
+ }
74
+ remove(entity) {
75
+ return (async () => {
76
+ try {
77
+ const result = await Cfx.exports['oxmysql'].query_async(`DELETE FROM \`${this._tableName}\` WHERE id = ?`, [entity.id]);
78
+ this._entities = this._entities.filter((_entity) => _entity.id !== entity.id);
79
+ this._onSync$.next();
80
+ return !!result;
81
+ }
82
+ catch (error) {
83
+ console.log(error);
84
+ return false;
85
+ }
86
+ })();
87
+ }
88
+ saveAsync(id) {
89
+ return (async () => {
90
+ try {
91
+ const entity = this.getEntityByDBId(id);
92
+ if (!entity)
93
+ return false;
94
+ const updateKeys = this.getEntityProperties(entity);
95
+ const updateValues = this.getEntityPropertiesValues(entity, updateKeys);
96
+ const concatString = ' = ?, ';
97
+ const result = await Cfx.exports['oxmysql'].update_async(`UPDATE \`${this._tableName}\` SET ${updateKeys.join(concatString).concat(concatString).slice(0, -2)} WHERE id = ?`, [...updateValues, entity.id]);
98
+ if (result) {
99
+ this._onSync$.next();
100
+ }
101
+ return result > 0;
102
+ }
103
+ catch (error) {
104
+ console.log(error);
105
+ return false;
106
+ }
107
+ })();
108
+ }
109
+ async loadDBEntityFor(value, key = 'id', bindTo) {
110
+ const result = (await Cfx.exports['oxmysql'].query_async(`SELECT * FROM \`${this._tableName}\` WHERE ${key} = ?`, [value])).map((resultItem) => {
111
+ Object.keys(resultItem).forEach((property) => {
112
+ resultItem[property] = JSON.parse((0, fivem_framework_common_1.isJSON)(resultItem[property].toString()) ? resultItem[property] : `"${resultItem[property]}"`, function (_k, v) {
113
+ return (typeof v === "object" || isNaN(v)) ? v : Number(v);
114
+ });
115
+ });
116
+ return resultItem;
117
+ });
118
+ if (result === null || result === void 0 ? void 0 : result.length) {
119
+ result.forEach((entity) => {
120
+ this._entities.push(entity);
121
+ if (bindTo) {
122
+ this.bindEntityToPlayerByEntityId(entity.id, bindTo);
123
+ }
124
+ });
125
+ setTimeout(() => { this._onSync$.next(); }, 2000);
126
+ return ((result === null || result === void 0 ? void 0 : result.length) > 1 ? result : result[0]);
127
+ }
128
+ return null;
129
+ }
130
+ async loadDBEntities() {
131
+ const result = (await Cfx.exports['oxmysql'].query_async(`SELECT * FROM \`${this._tableName}\``, [])).map((resultItem) => {
132
+ Object.keys(resultItem).forEach((property) => {
133
+ resultItem[property] = JSON.parse((0, fivem_framework_common_1.isJSON)(resultItem[property].toString()) ? resultItem[property] : `"${resultItem[property]}"`, function (_k, v) {
134
+ return (typeof v === "object" || isNaN(v)) ? v : Number(v);
135
+ });
136
+ });
137
+ return resultItem;
138
+ });
139
+ if (result === null || result === void 0 ? void 0 : result.length) {
140
+ this._entities = result;
141
+ setTimeout(() => { this._onSync$.next(); }, 2000);
142
+ }
143
+ return this._entities;
144
+ }
145
+ getEntityProperties(entity) {
146
+ const keys = [];
147
+ for (let key in entity) {
148
+ if (key !== 'id' && (!this._cachedProperties.length || this._cachedProperties.includes(key))) {
149
+ keys.push(key);
150
+ }
151
+ }
152
+ return keys;
153
+ }
154
+ getEntityPropertiesValues(entity, properties) {
155
+ return properties.map((key) => {
156
+ if (Array.isArray(entity[key]) || typeof (entity[key]) === 'object') {
157
+ return JSON.stringify(entity[key]);
158
+ }
159
+ return entity[key].toString();
160
+ });
161
+ }
162
+ bindEntityToPlayer(entity, playerId) {
163
+ if (this.entities.includes(entity)) {
164
+ this.bindEntityToPlayerByEntityId(entity.id, playerId);
165
+ }
166
+ }
167
+ bindEntityToPlayerByEntityId(id, playerId) {
168
+ const entityExists = this._entities.some((entity) => entity.id === id);
169
+ if (entityExists) {
170
+ if (this._playerToEntityBindings.has(playerId)) {
171
+ this._playerToEntityBindings.set(playerId, [...this._playerToEntityBindings.get(playerId), id]);
172
+ }
173
+ else {
174
+ this._playerToEntityBindings.set(playerId, [id]);
175
+ }
176
+ }
177
+ }
178
+ onPlayerAuthenticate(playerId, _player) {
179
+ console.log('a player has authenticated!');
180
+ if (this._entities.length) {
181
+ this._onSync$.next({ player: playerId });
182
+ }
183
+ }
184
+ onPlayerDisconnect() {
185
+ if (this._playerToEntityBindings.has(Cfx.source)) {
186
+ const bindings = (this._playerToEntityBindings.has(Cfx.source)
187
+ ? this._playerToEntityBindings.get(Cfx.source)
188
+ : []);
189
+ bindings.forEach((entityId) => {
190
+ const entityBoundToPlayer = this._entities.find((entity) => entity.id === entityId);
191
+ if (entityBoundToPlayer) {
192
+ this._onBoundEntityDestroyed$.next({ entity: entityBoundToPlayer, boundPlayer: Cfx.source });
193
+ this._entities.splice(this._entities.indexOf(entityBoundToPlayer), 1);
194
+ }
195
+ });
196
+ this._playerToEntityBindings.delete(Cfx.source);
197
+ }
198
+ }
199
+ async computeTableProperties() {
200
+ const result = await Cfx.exports['oxmysql'].query_async(`DESCRIBE ${this._tableName}`, []);
201
+ if (result) {
202
+ result.forEach((sqlStructureObject) => {
203
+ this._cachedProperties.push(sqlStructureObject.Field);
204
+ });
205
+ }
206
+ else {
207
+ console.error(`[SQL ERROR:] computeTableProperties for ${Cfx.Server.GetCurrentResourceName()} did not work.`);
208
+ }
209
+ }
210
+ getEntityByDBId(id) {
211
+ return this._entities.find((_entity) => _entity.id === id);
212
+ }
213
+ getEntities() {
214
+ return this._entities;
215
+ }
216
+ };
217
+ exports.ServerResourceDatabase = ServerResourceDatabase;
218
+ __decorate([
219
+ (0, fivem_framework_common_1.EventListener)(),
220
+ __metadata("design:type", Function),
221
+ __metadata("design:paramtypes", [Number, Object]),
222
+ __metadata("design:returntype", void 0)
223
+ ], ServerResourceDatabase.prototype, "onPlayerAuthenticate", null);
224
+ __decorate([
225
+ (0, fivem_framework_common_1.EventListener)(),
226
+ __metadata("design:type", Function),
227
+ __metadata("design:paramtypes", []),
228
+ __metadata("design:returntype", void 0)
229
+ ], ServerResourceDatabase.prototype, "onPlayerDisconnect", null);
230
+ __decorate([
231
+ (0, fivem_framework_common_1.Export)(),
232
+ __metadata("design:type", Function),
233
+ __metadata("design:paramtypes", []),
234
+ __metadata("design:returntype", Array)
235
+ ], ServerResourceDatabase.prototype, "getEntities", null);
236
+ exports.ServerResourceDatabase = ServerResourceDatabase = __decorate([
237
+ (0, injection_js_1.Injectable)(),
238
+ __param(0, (0, injection_js_1.Inject)('tableName')),
239
+ __param(1, (0, injection_js_1.Optional)()),
240
+ __param(1, (0, injection_js_1.Inject)('loadEverythingAtStart')),
241
+ __metadata("design:paramtypes", [String, Boolean])
242
+ ], ServerResourceDatabase);
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ServerTranslateService = void 0;
16
+ const injection_js_1 = require("injection-js");
17
+ const fivem_framework_common_1 = require("@armoury/fivem-framework-common");
18
+ let ServerTranslateService = class ServerTranslateService {
19
+ constructor(_translations) {
20
+ this._translations = _translations;
21
+ this.playersMappedToLanguages = new Map();
22
+ }
23
+ instant(forPlayer, key) {
24
+ var _a;
25
+ const language = this.getLanguage(forPlayer);
26
+ return ((_a = this._translations[language]) === null || _a === void 0 ? void 0 : _a[key]) || key;
27
+ }
28
+ onPlayerDisconnect() {
29
+ const player = Cfx.source;
30
+ if (this.playersMappedToLanguages.has(player)) {
31
+ this.playersMappedToLanguages.delete(player);
32
+ }
33
+ }
34
+ getLanguage(forPlayer) {
35
+ if (this.playersMappedToLanguages.has(forPlayer)) {
36
+ return this.playersMappedToLanguages.get(forPlayer);
37
+ }
38
+ const language = Cfx.exports['authentication'].getPlayerInfo(forPlayer, 'language');
39
+ this.playersMappedToLanguages.set(forPlayer, language);
40
+ return language;
41
+ }
42
+ };
43
+ exports.ServerTranslateService = ServerTranslateService;
44
+ __decorate([
45
+ (0, fivem_framework_common_1.EventListener)(),
46
+ __metadata("design:type", Function),
47
+ __metadata("design:paramtypes", []),
48
+ __metadata("design:returntype", void 0)
49
+ ], ServerTranslateService.prototype, "onPlayerDisconnect", null);
50
+ exports.ServerTranslateService = ServerTranslateService = __decorate([
51
+ (0, injection_js_1.Injectable)(),
52
+ __param(0, (0, injection_js_1.Inject)('translations')),
53
+ __metadata("design:paramtypes", [Object])
54
+ ], ServerTranslateService);
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ServerVirtualWorldsService = void 0;
16
+ const injection_js_1 = require("injection-js");
17
+ const fivem_framework_common_1 = require("@armoury/fivem-framework-common");
18
+ const session_1 = require("./session");
19
+ let ServerVirtualWorldsService = class ServerVirtualWorldsService {
20
+ constructor(_session) {
21
+ this._session = _session;
22
+ // Probable performance issue? Maybe calling the export so many times when changing the virtual world is too costly?
23
+ this._virtualWorldsWithPlayers = new Map();
24
+ }
25
+ /** This only counts virtual worlds related to the resource! If another resource changes the virtual world of the player, this resource won't know it! */
26
+ get virtualWorldsWithPlayers() {
27
+ return this._virtualWorldsWithPlayers;
28
+ }
29
+ onPlayerEnteredScope(data) {
30
+ Cfx.Server.TriggerClientEvent(`${Cfx.Server.GetCurrentResourceName()}:refresh-virtual-world`, data.for);
31
+ }
32
+ setPlayerVirtualWorld(playerId, virtualWorld) {
33
+ const currentPlayerVirtualWorld = this.getPlayerVirtualWorld(playerId);
34
+ if (!isNaN(currentPlayerVirtualWorld)) {
35
+ this._virtualWorldsWithPlayers.set(currentPlayerVirtualWorld, (this._virtualWorldsWithPlayers.has(currentPlayerVirtualWorld) ? this._virtualWorldsWithPlayers.get(currentPlayerVirtualWorld) : []).filter((_playerId) => _playerId !== playerId));
36
+ }
37
+ const newPlayersInVirtualWorld = [
38
+ ...(this._virtualWorldsWithPlayers.has(virtualWorld) ? this._virtualWorldsWithPlayers.get(virtualWorld) : []),
39
+ playerId
40
+ ];
41
+ this._virtualWorldsWithPlayers.set(virtualWorld, newPlayersInVirtualWorld);
42
+ this._session.setPlayerInfo(playerId, 'virtualWorld', virtualWorld);
43
+ }
44
+ getPlayerVirtualWorld(playerId) {
45
+ return Math.max(0, this._session.getPlayerInfo(playerId, 'virtualWorld'));
46
+ }
47
+ removeClientsideVehicles() {
48
+ Cfx.Server.TriggerClientEvent(`${Cfx.Server.GetCurrentResourceName()}:ARM_remove-vehicles`, -1);
49
+ }
50
+ };
51
+ exports.ServerVirtualWorldsService = ServerVirtualWorldsService;
52
+ __decorate([
53
+ (0, fivem_framework_common_1.EventListener)({ eventName: 'playerEnteredScope' }),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", [Object]),
56
+ __metadata("design:returntype", void 0)
57
+ ], ServerVirtualWorldsService.prototype, "onPlayerEnteredScope", null);
58
+ exports.ServerVirtualWorldsService = ServerVirtualWorldsService = __decorate([
59
+ (0, injection_js_1.Injectable)(),
60
+ __param(0, (0, injection_js_1.Inject)(session_1.ServerSessionService)),
61
+ __metadata("design:paramtypes", [session_1.ServerSessionService])
62
+ ], ServerVirtualWorldsService);
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Character = void 0;
13
+ const core_1 = require("@mikro-orm/core");
14
+ let Character = class Character {
15
+ };
16
+ exports.Character = Character;
17
+ __decorate([
18
+ (0, core_1.PrimaryKey)(),
19
+ __metadata("design:type", typeof BigInt === "function" ? BigInt : Object)
20
+ ], Character.prototype, "id", void 0);
21
+ __decorate([
22
+ (0, core_1.Property)(),
23
+ __metadata("design:type", typeof BigInt === "function" ? BigInt : Object)
24
+ ], Character.prototype, "accountId", void 0);
25
+ __decorate([
26
+ (0, core_1.Property)(),
27
+ __metadata("design:type", String)
28
+ ], Character.prototype, "name", void 0);
29
+ exports.Character = Character = __decorate([
30
+ (0, core_1.Entity)()
31
+ ], Character);
@@ -0,0 +1,24 @@
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("./character.entity"), exports);
18
+ __exportStar(require("./session-account-id"), exports);
19
+ __exportStar(require("./session-cash"), exports);
20
+ __exportStar(require("./session-hours-played"), exports);
21
+ __exportStar(require("./session-language"), exports);
22
+ __exportStar(require("./session-last-location"), exports);
23
+ __exportStar(require("./session-name"), exports);
24
+ __exportStar(require("./session-id"), exports);
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionAccountId = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionAccountId extends models_1.SessionItem {
6
+ constructor() {
7
+ super('accountId', 0);
8
+ }
9
+ }
10
+ exports.SessionAccountId = SessionAccountId;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionCash = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionCash extends models_1.SessionItem {
6
+ constructor() {
7
+ super('cash', 0, true);
8
+ }
9
+ }
10
+ exports.SessionCash = SessionCash;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionHoursPlayed = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionHoursPlayed extends models_1.SessionItem {
6
+ constructor() {
7
+ super('hoursPlayed', 0, true);
8
+ }
9
+ compute(playerId, originalValue) {
10
+ const lastUpdate = Cfx.Server.GetConvarInt(`${playerId}_PI_hoursPlayed_lastUpdate`, new Date().getTime());
11
+ return Number(originalValue) + Math.floor((Math.abs(lastUpdate - new Date().getTime()) /
12
+ (1000 * 60)) %
13
+ 60) * 0.017;
14
+ }
15
+ }
16
+ exports.SessionHoursPlayed = SessionHoursPlayed;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionId = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionId extends models_1.SessionItem {
6
+ constructor() {
7
+ super('id', 0);
8
+ }
9
+ }
10
+ exports.SessionId = SessionId;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionLanguage = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionLanguage extends models_1.SessionItem {
6
+ constructor() {
7
+ super('language', 'en');
8
+ }
9
+ }
10
+ exports.SessionLanguage = SessionLanguage;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionLastLocation = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionLastLocation extends models_1.SessionItem {
6
+ constructor() {
7
+ super('lastLocation', [], true);
8
+ }
9
+ compute(playerId, originalValue) {
10
+ return [
11
+ ...Cfx.Server.GetEntityCoords(Cfx.Server.GetPlayerPed(playerId.toString())).slice(0, 4),
12
+ originalValue[4] || 0
13
+ ];
14
+ }
15
+ async load(_accountId, _characterId, bruteValue) {
16
+ return JSON.parse(bruteValue);
17
+ }
18
+ }
19
+ exports.SessionLastLocation = SessionLastLocation;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionName = void 0;
4
+ const models_1 = require("../../../models");
5
+ class SessionName extends models_1.SessionItem {
6
+ constructor() {
7
+ super('name', '');
8
+ }
9
+ }
10
+ exports.SessionName = SessionName;
@@ -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("./server-session.service"), exports);