@nodemod/core 1.0.0

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 (60) hide show
  1. package/README.md +60 -0
  2. package/dist/core/cmd.d.ts +148 -0
  3. package/dist/core/cmd.d.ts.map +1 -0
  4. package/dist/core/cmd.js +177 -0
  5. package/dist/core/cmd.js.map +1 -0
  6. package/dist/core/menu.d.ts +300 -0
  7. package/dist/core/menu.d.ts.map +1 -0
  8. package/dist/core/menu.js +449 -0
  9. package/dist/core/menu.js.map +1 -0
  10. package/dist/core/msg.d.ts +300 -0
  11. package/dist/core/msg.d.ts.map +1 -0
  12. package/dist/core/msg.js +374 -0
  13. package/dist/core/msg.js.map +1 -0
  14. package/dist/core/resource.d.ts +137 -0
  15. package/dist/core/resource.d.ts.map +1 -0
  16. package/dist/core/resource.js +171 -0
  17. package/dist/core/resource.js.map +1 -0
  18. package/dist/core/sound.d.ts +262 -0
  19. package/dist/core/sound.d.ts.map +1 -0
  20. package/dist/core/sound.js +300 -0
  21. package/dist/core/sound.js.map +1 -0
  22. package/dist/enhanced/entity.d.ts +263 -0
  23. package/dist/enhanced/entity.d.ts.map +1 -0
  24. package/dist/enhanced/entity.js +447 -0
  25. package/dist/enhanced/entity.js.map +1 -0
  26. package/dist/enhanced/events.d.ts +257 -0
  27. package/dist/enhanced/events.d.ts.map +1 -0
  28. package/dist/enhanced/events.js +350 -0
  29. package/dist/enhanced/events.js.map +1 -0
  30. package/dist/enhanced/player.d.ts +272 -0
  31. package/dist/enhanced/player.d.ts.map +1 -0
  32. package/dist/enhanced/player.js +389 -0
  33. package/dist/enhanced/player.js.map +1 -0
  34. package/dist/enhanced/trace.d.ts +198 -0
  35. package/dist/enhanced/trace.d.ts.map +1 -0
  36. package/dist/enhanced/trace.js +311 -0
  37. package/dist/enhanced/trace.js.map +1 -0
  38. package/dist/index.d.ts +88 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +120 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/native/cvar.d.ts +49 -0
  43. package/dist/native/cvar.d.ts.map +1 -0
  44. package/dist/native/cvar.js +169 -0
  45. package/dist/native/cvar.js.map +1 -0
  46. package/dist/native/file.d.ts +221 -0
  47. package/dist/native/file.d.ts.map +1 -0
  48. package/dist/native/file.js +353 -0
  49. package/dist/native/file.js.map +1 -0
  50. package/dist/types/dll.d.ts +109 -0
  51. package/dist/types/engine.d.ts +319 -0
  52. package/dist/types/enums.d.ts +434 -0
  53. package/dist/types/events.d.ts +2432 -0
  54. package/dist/types/index.d.ts +38 -0
  55. package/dist/types/structures.d.ts +1144 -0
  56. package/dist/utils/util.d.ts +202 -0
  57. package/dist/utils/util.d.ts.map +1 -0
  58. package/dist/utils/util.js +318 -0
  59. package/dist/utils/util.js.map +1 -0
  60. package/package.json +167 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Menu = void 0;
4
+ /**
5
+ * Represents a menu that can be displayed to players with navigable items and submenus.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const menu = new Menu({
10
+ * title: 'Player Actions',
11
+ * items: [
12
+ * {
13
+ * name: 'Kick Player',
14
+ * handler: (client) => {
15
+ * console.log(`${client.name} selected kick player`);
16
+ * }
17
+ * },
18
+ * {
19
+ * name: 'Ban Player',
20
+ * handler: (client) => {
21
+ * console.log(`${client.name} selected ban player`);
22
+ * }
23
+ * }
24
+ * ]
25
+ * });
26
+ * ```
27
+ */
28
+ class Menu {
29
+ /** Menu title displayed at the top */
30
+ title;
31
+ /** Array of menu items */
32
+ items;
33
+ /** Specific entity this menu is for (undefined = all players) */
34
+ entity;
35
+ /** Auto-close timeout in seconds (-1 for no timeout) */
36
+ time;
37
+ /** Callback when menu times out */
38
+ onTimeout;
39
+ /** Callback when menu is exited */
40
+ onExit;
41
+ /** Text for exit button */
42
+ exitText;
43
+ /** Text for back button */
44
+ backText;
45
+ /** Text for next page button */
46
+ nextText;
47
+ /** Text for previous page button */
48
+ prevText;
49
+ /** Formatting functions for menu display */
50
+ formatters;
51
+ /** Parent menu for navigation hierarchy */
52
+ parent;
53
+ /**
54
+ * Creates a new Menu instance.
55
+ *
56
+ * @param options - Menu configuration options
57
+ */
58
+ constructor(options) {
59
+ this.title = options.title;
60
+ this.items = options.items;
61
+ this.entity = options.entity;
62
+ this.time = options.time ?? -1;
63
+ this.onTimeout = options.onTimeout;
64
+ this.onExit = options.onExit;
65
+ this.exitText = options.exitText ?? "Exit";
66
+ this.backText = options.backText ?? "Back";
67
+ this.nextText = options.nextText ?? "Next";
68
+ this.prevText = options.prevText ?? "Previous";
69
+ this.formatters = {
70
+ title: options.formatters?.title ?? ((title) => `=== ${title} ===`),
71
+ item: options.formatters?.item ?? ((item, index, isDisabled) => `${index + 1}. ${isDisabled ? '[DISABLED] ' : ''}${item.name}`),
72
+ pagination: options.formatters?.pagination ?? ((current, total) => `Page ${current}/${total}`),
73
+ divider: options.formatters?.divider ?? (() => ""),
74
+ };
75
+ // Set parent reference for submenus
76
+ this.items.forEach(item => {
77
+ if (item.submenu) {
78
+ item.submenu.parent = this;
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Static template methods for creating common menu types.
84
+ */
85
+ static template = {
86
+ /**
87
+ * Creates a simple menu with string items and optional handlers.
88
+ *
89
+ * @param title - Menu title
90
+ * @param items - Array of item names
91
+ * @param handlers - Optional array of handlers (must match items length)
92
+ * @returns Configured Menu instance
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const menu = Menu.template.simple(
97
+ * 'Choose Action',
98
+ * ['Option 1', 'Option 2', 'Option 3'],
99
+ * [(client) => console.log('Option 1'), (client) => console.log('Option 2')]
100
+ * );
101
+ * ```
102
+ */
103
+ simple: (title, items, handlers) => new Menu({
104
+ title,
105
+ items: items.map((name, i) => ({ name, handler: handlers?.[i] }))
106
+ }),
107
+ /**
108
+ * Creates a Yes/No confirmation menu.
109
+ *
110
+ * @param title - Menu title/question
111
+ * @param onYes - Handler for Yes selection
112
+ * @param onNo - Handler for No selection
113
+ * @returns Configured Menu instance
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * const menu = Menu.template.yesNo(
118
+ * 'Are you sure?',
119
+ * (client) => console.log('User confirmed'),
120
+ * (client) => console.log('User declined')
121
+ * );
122
+ * ```
123
+ */
124
+ yesNo: (title, onYes, onNo) => new Menu({
125
+ title,
126
+ items: [
127
+ { name: "Yes", handler: onYes },
128
+ { name: "No", handler: onNo }
129
+ ]
130
+ }),
131
+ /**
132
+ * Creates a confirmation menu with Confirm/Cancel options.
133
+ *
134
+ * @param message - Confirmation message
135
+ * @param onConfirm - Handler for Confirm selection
136
+ * @param onCancel - Optional handler for Cancel selection
137
+ * @returns Configured Menu instance
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const menu = Menu.template.confirm(
142
+ * 'Delete all data?',
143
+ * (client) => deleteData(),
144
+ * (client) => console.log('Cancelled')
145
+ * );
146
+ * ```
147
+ */
148
+ confirm: (message, onConfirm, onCancel) => new Menu({
149
+ title: message,
150
+ items: [
151
+ { name: "Confirm", handler: onConfirm },
152
+ { name: "Cancel", handler: onCancel || (() => { }) }
153
+ ]
154
+ })
155
+ };
156
+ }
157
+ exports.Menu = Menu;
158
+ /**
159
+ * Menu system manager for handling interactive menus in the nodemod plugin system.
160
+ * Supports pagination, navigation, timeouts, and both client-specific and global menus.
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * // Show a menu to all players
165
+ * nodemodCore.menu.show({
166
+ * title: 'Admin Menu',
167
+ * items: [
168
+ * { name: 'Kick Player', handler: handleKick },
169
+ * { name: 'Change Map', handler: handleMapChange }
170
+ * ]
171
+ * });
172
+ *
173
+ * // Show a menu to a specific player
174
+ * nodemodCore.menu.show({
175
+ * title: 'Player Options',
176
+ * entity: specificPlayer,
177
+ * items: [
178
+ * { name: 'View Stats', handler: showStats }
179
+ * ]
180
+ * });
181
+ * ```
182
+ */
183
+ class NodemodMenu {
184
+ /** Map of active menu states by client index or 'all' */
185
+ menuStates = {};
186
+ /** Message service for sending menu data */
187
+ msg;
188
+ /** Utility service */
189
+ util;
190
+ /** Maximum items per page (leaves slots for navigation) */
191
+ ITEMS_PER_PAGE = 7; // Leave slots for navigation (8=back/exit, 9=prev, 0=next)
192
+ /**
193
+ * Creates a new NodemodMenu instance.
194
+ *
195
+ * @param msgService - Message service for sending menu displays
196
+ * @param utilService - Utility service
197
+ */
198
+ constructor(msgService, utilService) {
199
+ this.msg = msgService;
200
+ this.util = utilService;
201
+ this.initializeEventHandlers();
202
+ }
203
+ /**
204
+ * Initializes event handlers for menu interactions.
205
+ */
206
+ initializeEventHandlers() {
207
+ nodemod.on('dllClientCommand', (client, text) => {
208
+ this.handleMenuCommand(client, text);
209
+ });
210
+ }
211
+ /**
212
+ * Handles menu selection commands from clients.
213
+ *
214
+ * @param client - The client entity that sent the command
215
+ * @param text - The command text containing menu selection
216
+ */
217
+ handleMenuCommand(client, text) {
218
+ const args = text.split(' ');
219
+ if (args[0] !== 'menuselect') {
220
+ return;
221
+ }
222
+ const selection = parseInt(args[1]);
223
+ const clientIndex = nodemod.eng.indexOfEdict(client);
224
+ const state = this.menuStates[clientIndex] || this.menuStates['all'];
225
+ if (!state) {
226
+ return;
227
+ }
228
+ nodemod.setMetaResult(4 /* nodemod.META_RES.SUPERCEDE */); // Supercede the command
229
+ // Handle special navigation options
230
+ if (selection === 0 || selection === 10) { // Exit (0 key sends 10)
231
+ this.handleBackExit(client, state);
232
+ return;
233
+ }
234
+ if (selection === 8) { // Previous page
235
+ this.handlePrevPage(client, state);
236
+ return;
237
+ }
238
+ if (selection === 9) { // Next page
239
+ this.handleNextPage(client, state);
240
+ return;
241
+ }
242
+ // Handle regular menu item selection
243
+ this.handleItemSelection(client, state, selection);
244
+ }
245
+ handleBackExit(client, state) {
246
+ if (state.history.length > 0) {
247
+ // Go back to previous menu
248
+ const previousMenu = state.history.pop();
249
+ this.showMenuInternal(previousMenu, client, state, 0);
250
+ }
251
+ else {
252
+ // Exit menu
253
+ this.cleanupMenuState(client, state);
254
+ state.menu.onExit?.(client);
255
+ }
256
+ }
257
+ handlePrevPage(client, state) {
258
+ if (state.currentPage > 0) {
259
+ state.currentPage--;
260
+ this.showMenuInternal(state.menu, client, state, state.currentPage);
261
+ }
262
+ }
263
+ handleNextPage(client, state) {
264
+ const totalPages = Math.ceil(state.menu.items.length / this.ITEMS_PER_PAGE);
265
+ if (state.currentPage < totalPages - 1) {
266
+ state.currentPage++;
267
+ this.showMenuInternal(state.menu, client, state, state.currentPage);
268
+ }
269
+ }
270
+ handleItemSelection(client, state, selection) {
271
+ const itemIndex = (state.currentPage * this.ITEMS_PER_PAGE) + (selection - 1);
272
+ const item = state.menu.items[itemIndex];
273
+ if (!item || item.disabled) {
274
+ return;
275
+ }
276
+ if (item.submenu) {
277
+ // Navigate to submenu
278
+ state.history.push(state.menu);
279
+ this.showMenuInternal(item.submenu, client, state, 0);
280
+ }
281
+ else if (item.handler) {
282
+ // Execute handler
283
+ state.used.push(nodemod.eng.indexOfEdict(client));
284
+ try {
285
+ const result = item.handler(client, state.menu);
286
+ if (result instanceof Promise) {
287
+ result.catch(error => console.error('Menu handler error:', error));
288
+ }
289
+ }
290
+ catch (error) {
291
+ console.error('Menu handler error:', error);
292
+ }
293
+ // Clean up single-client menus
294
+ if (!state.isAll) {
295
+ this.cleanupMenuState(client, state);
296
+ }
297
+ }
298
+ }
299
+ cleanupMenuState(client, state) {
300
+ if (state.timeoutId) {
301
+ clearTimeout(state.timeoutId);
302
+ }
303
+ const clientIndex = nodemod.eng.indexOfEdict(client);
304
+ if (state.isAll) {
305
+ delete this.menuStates['all'];
306
+ }
307
+ else {
308
+ delete this.menuStates[clientIndex];
309
+ }
310
+ }
311
+ /**
312
+ * Displays a menu to players. Can show to all players or a specific entity.
313
+ *
314
+ * @param options - Menu configuration or Menu instance
315
+ *
316
+ * @example
317
+ * ```typescript
318
+ * // Show to all players
319
+ * nodemodCore.menu.show({
320
+ * title: 'Server Menu',
321
+ * items: [
322
+ * { name: 'Option 1', handler: (client) => console.log('Selected 1') }
323
+ * ]
324
+ * });
325
+ *
326
+ * // Show to specific player
327
+ * nodemodCore.menu.show({
328
+ * title: 'Personal Menu',
329
+ * entity: player,
330
+ * time: 30, // Auto-close after 30 seconds
331
+ * items: [
332
+ * { name: 'View Profile', handler: showProfile }
333
+ * ]
334
+ * });
335
+ * ```
336
+ */
337
+ show(options) {
338
+ const menu = options instanceof Menu ? options : new Menu(options);
339
+ const clients = menu.entity ? [menu.entity] : nodemod.players;
340
+ clients.forEach(client => {
341
+ const clientIndex = nodemod.eng.indexOfEdict(client);
342
+ const state = {
343
+ menu,
344
+ currentPage: 0,
345
+ history: [],
346
+ isAll: !menu.entity,
347
+ used: []
348
+ };
349
+ this.menuStates[menu.entity ? clientIndex : 'all'] = state;
350
+ this.showMenuInternal(menu, client, state, 0);
351
+ });
352
+ }
353
+ showMenuInternal(menu, client, state, page) {
354
+ state.currentPage = page;
355
+ state.menu = menu;
356
+ // Clear existing timeout
357
+ if (state.timeoutId) {
358
+ clearTimeout(state.timeoutId);
359
+ }
360
+ // Set timeout if specified
361
+ if (menu.time > 0) {
362
+ state.timeoutId = setTimeout(() => {
363
+ menu.onTimeout?.(client);
364
+ this.cleanupMenuState(client, state);
365
+ }, menu.time * 1000);
366
+ }
367
+ const { menuText, keyMask } = this.buildMenuDisplay(menu, page);
368
+ this.msg.send({
369
+ type: 'ShowMenu',
370
+ entity: client,
371
+ data: [
372
+ { type: 'short', value: keyMask },
373
+ { type: 'char', value: menu.time },
374
+ { type: 'byte', value: false },
375
+ { type: 'string', value: menuText }
376
+ ]
377
+ });
378
+ }
379
+ buildMenuDisplay(menu, page) {
380
+ const startIndex = page * this.ITEMS_PER_PAGE;
381
+ const endIndex = Math.min(startIndex + this.ITEMS_PER_PAGE, menu.items.length);
382
+ const pageItems = menu.items.slice(startIndex, endIndex);
383
+ const totalPages = Math.ceil(menu.items.length / this.ITEMS_PER_PAGE);
384
+ let menuText = menu.formatters.title(menu.title);
385
+ if (menu.formatters.divider().length > 0) {
386
+ menuText += '\n' + menu.formatters.divider();
387
+ }
388
+ if (totalPages > 1) {
389
+ menuText += '\n' + menu.formatters.pagination(page + 1, totalPages);
390
+ }
391
+ menuText += '\n';
392
+ let keyMask = 0;
393
+ // Add menu items
394
+ pageItems.forEach((item, index) => {
395
+ const actualIndex = startIndex + index;
396
+ const displayNumber = index + 1; // Always 1-7 for display
397
+ if (!item.disabled && (item.handler || item.submenu)) {
398
+ keyMask |= (1 << (displayNumber - 1));
399
+ }
400
+ // Pass display number (1-7) instead of actual index for formatting
401
+ menuText += '\n' + menu.formatters.item(item, index, item.disabled || false);
402
+ });
403
+ // Add navigation options
404
+ menuText += '\n';
405
+ // Previous page (key 8)
406
+ if (page > 0) {
407
+ menuText += `\n8. ${menu.prevText}`;
408
+ keyMask |= (1 << 7); // Enable key 8
409
+ }
410
+ // Next page (key 9)
411
+ if (page < totalPages - 1) {
412
+ menuText += `\n9. ${menu.nextText}`;
413
+ keyMask |= (1 << 8); // Enable key 9
414
+ }
415
+ // Exit option (key 0)
416
+ const hasHistory = menu.parent !== undefined;
417
+ menuText += `\n0. ${hasHistory ? menu.backText : menu.exitText}`;
418
+ keyMask |= (1 << 9); // Enable key 0
419
+ return { menuText, keyMask };
420
+ }
421
+ /**
422
+ * Closes the menu for a specific client.
423
+ *
424
+ * @param client - The client to close the menu for
425
+ */
426
+ closeMenu(client) {
427
+ const clientIndex = nodemod.eng.indexOfEdict(client);
428
+ const state = this.menuStates[clientIndex] || this.menuStates['all'];
429
+ if (state) {
430
+ this.cleanupMenuState(client, state);
431
+ }
432
+ }
433
+ /**
434
+ * Closes all active menus and clears all menu states.
435
+ */
436
+ closeAllMenus() {
437
+ Object.keys(this.menuStates).forEach(key => {
438
+ const state = this.menuStates[key];
439
+ if (state.timeoutId) {
440
+ clearTimeout(state.timeoutId);
441
+ }
442
+ });
443
+ this.menuStates = {};
444
+ }
445
+ /** Export Menu class for external use */
446
+ static Menu = Menu;
447
+ }
448
+ exports.default = NodemodMenu;
449
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"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"}