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