@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.
- package/README.md +60 -0
- package/dist/core/cmd.d.ts +148 -0
- package/dist/core/cmd.d.ts.map +1 -0
- package/dist/core/cmd.js +177 -0
- package/dist/core/cmd.js.map +1 -0
- package/dist/core/menu.d.ts +300 -0
- package/dist/core/menu.d.ts.map +1 -0
- package/dist/core/menu.js +449 -0
- package/dist/core/menu.js.map +1 -0
- package/dist/core/msg.d.ts +300 -0
- package/dist/core/msg.d.ts.map +1 -0
- package/dist/core/msg.js +374 -0
- package/dist/core/msg.js.map +1 -0
- package/dist/core/resource.d.ts +137 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +171 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/core/sound.d.ts +262 -0
- package/dist/core/sound.d.ts.map +1 -0
- package/dist/core/sound.js +300 -0
- package/dist/core/sound.js.map +1 -0
- package/dist/enhanced/entity.d.ts +263 -0
- package/dist/enhanced/entity.d.ts.map +1 -0
- package/dist/enhanced/entity.js +447 -0
- package/dist/enhanced/entity.js.map +1 -0
- package/dist/enhanced/events.d.ts +257 -0
- package/dist/enhanced/events.d.ts.map +1 -0
- package/dist/enhanced/events.js +350 -0
- package/dist/enhanced/events.js.map +1 -0
- package/dist/enhanced/player.d.ts +272 -0
- package/dist/enhanced/player.d.ts.map +1 -0
- package/dist/enhanced/player.js +389 -0
- package/dist/enhanced/player.js.map +1 -0
- package/dist/enhanced/trace.d.ts +198 -0
- package/dist/enhanced/trace.d.ts.map +1 -0
- package/dist/enhanced/trace.js +311 -0
- package/dist/enhanced/trace.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/native/cvar.d.ts +49 -0
- package/dist/native/cvar.d.ts.map +1 -0
- package/dist/native/cvar.js +169 -0
- package/dist/native/cvar.js.map +1 -0
- package/dist/native/file.d.ts +221 -0
- package/dist/native/file.d.ts.map +1 -0
- package/dist/native/file.js +353 -0
- package/dist/native/file.js.map +1 -0
- package/dist/types/dll.d.ts +109 -0
- package/dist/types/engine.d.ts +319 -0
- package/dist/types/enums.d.ts +434 -0
- package/dist/types/events.d.ts +2432 -0
- package/dist/types/index.d.ts +38 -0
- package/dist/types/structures.d.ts +1144 -0
- package/dist/utils/util.d.ts +202 -0
- package/dist/utils/util.d.ts.map +1 -0
- package/dist/utils/util.js +318 -0
- package/dist/utils/util.js.map +1 -0
- 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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"}
|