@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,353 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * File system utilities for Half-Life engine providing safe file operations with automatic memory management.
5
+ * Supports loading game resources, configuration files, and provides path utilities for Half-Life directory structure.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Load and read a configuration file
10
+ * const config = nodemodCore.file.loadConfig('server.cfg');
11
+ * if (config) {
12
+ * console.log(`Max players: ${config['maxplayers']}`);
13
+ * }
14
+ *
15
+ * // Check if a sound file exists
16
+ * if (nodemodCore.file.isValidSoundFile('weapons/ak47-1.wav')) {
17
+ * console.log('Sound file is available');
18
+ * }
19
+ *
20
+ * // Load file with automatic cleanup
21
+ * const content = nodemodCore.file.readText('motd.txt');
22
+ * if (content) {
23
+ * console.log('MOTD:', content);
24
+ * }
25
+ *
26
+ * // Watch a file for changes
27
+ * const stopWatching = nodemodCore.file.watch('banned.cfg', (event) => {
28
+ * console.log(`Banned list updated: ${event.newSize} bytes`);
29
+ * });
30
+ * ```
31
+ */
32
+ class NodemodFile {
33
+ /**
34
+ * Loads a file into memory and returns the raw buffer.
35
+ * Remember to call free() when done to prevent memory leaks.
36
+ *
37
+ * @param filename - Path to the file to load
38
+ * @returns Raw file buffer as number array, or null if loading failed
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const buffer = nodemodCore.file.load('maps/de_dust2.bsp');
43
+ * if (buffer) {
44
+ * console.log(`Loaded ${buffer.length} bytes`);
45
+ * // Don't forget to free the buffer!
46
+ * nodemodCore.file.free(buffer);
47
+ * }
48
+ * ```
49
+ */
50
+ load(filename) {
51
+ try {
52
+ const result = nodemod.eng.loadFileForMe(filename);
53
+ return result;
54
+ }
55
+ catch (error) {
56
+ console.error(`Failed to load file ${filename}:`, error);
57
+ return null;
58
+ }
59
+ }
60
+ // Free file buffer (important for memory management)
61
+ free(buffer) {
62
+ if (buffer) {
63
+ nodemod.eng.freeFile(buffer);
64
+ }
65
+ }
66
+ // Get file size
67
+ getSize(filename) {
68
+ return nodemod.eng.getFileSize(filename);
69
+ }
70
+ // Compare file modification times
71
+ compareTime(filename1, filename2) {
72
+ const iCompare = [];
73
+ return nodemod.eng.compareFileTime(filename1, filename2, iCompare);
74
+ }
75
+ // Check if file exists
76
+ exists(filename) {
77
+ const size = this.getSize(filename);
78
+ return size > 0;
79
+ }
80
+ // Load file with automatic cleanup
81
+ loadWithCleanup(filename, callback) {
82
+ const buffer = this.load(filename);
83
+ if (!buffer) {
84
+ return callback(null);
85
+ }
86
+ const fileBuffer = {
87
+ toString: (encoding) => {
88
+ // Convert number[] to string
89
+ const bytes = new Uint8Array(buffer);
90
+ const decoder = new TextDecoder(encoding || 'utf-8');
91
+ return decoder.decode(bytes);
92
+ },
93
+ length: buffer.length
94
+ };
95
+ try {
96
+ const result = callback(fileBuffer, fileBuffer.length);
97
+ return result;
98
+ }
99
+ finally {
100
+ this.free(buffer);
101
+ }
102
+ }
103
+ /**
104
+ * Reads a file as text with automatic memory management.
105
+ * Handles encoding detection and cleanup automatically.
106
+ *
107
+ * @param filename - Path to the text file to read
108
+ * @returns File content as string, or null if reading failed
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Read server configuration
113
+ * const motd = nodemodCore.file.readText('motd.txt');
114
+ * if (motd) {
115
+ * console.log('Message of the Day:', motd);
116
+ * }
117
+ *
118
+ * // Read map list
119
+ * const mapList = nodemodCore.file.readText('mapcycle.txt');
120
+ * if (mapList) {
121
+ * const maps = mapList.split('\\n').filter(line => line.trim());
122
+ * console.log('Available maps:', maps);
123
+ * }
124
+ * ```
125
+ */
126
+ readText(filename) {
127
+ return this.loadWithCleanup(filename, (buffer) => {
128
+ if (!buffer)
129
+ return null;
130
+ // Convert buffer to string (basic implementation)
131
+ try {
132
+ return buffer.toString('utf8');
133
+ }
134
+ catch {
135
+ return buffer.toString();
136
+ }
137
+ });
138
+ }
139
+ // Get game directory
140
+ getGameDir() {
141
+ const gameDir = [''];
142
+ nodemod.eng.getGameDir(gameDir[0]);
143
+ return gameDir[0];
144
+ }
145
+ // File path utilities
146
+ joinPath(...parts) {
147
+ return parts.join('/').replace(/\/+/g, '/');
148
+ }
149
+ normalizePath(path) {
150
+ return path.replace(/\\/g, '/').replace(/\/+/g, '/');
151
+ }
152
+ getExtension(filename) {
153
+ const lastDot = filename.lastIndexOf('.');
154
+ return lastDot === -1 ? '' : filename.substring(lastDot + 1).toLowerCase();
155
+ }
156
+ getBasename(filename) {
157
+ const lastSlash = Math.max(filename.lastIndexOf('/'), filename.lastIndexOf('\\'));
158
+ const name = lastSlash === -1 ? filename : filename.substring(lastSlash + 1);
159
+ const lastDot = name.lastIndexOf('.');
160
+ return lastDot === -1 ? name : name.substring(0, lastDot);
161
+ }
162
+ getDirectory(filename) {
163
+ const lastSlash = Math.max(filename.lastIndexOf('/'), filename.lastIndexOf('\\'));
164
+ return lastSlash === -1 ? '' : filename.substring(0, lastSlash);
165
+ }
166
+ // Resource file helpers
167
+ buildResourcePath(type, name) {
168
+ const gameDir = this.getGameDir();
169
+ const paths = {
170
+ model: `${gameDir}/models/${name}`,
171
+ sound: `${gameDir}/sound/${name}`,
172
+ sprite: `${gameDir}/sprites/${name}`,
173
+ map: `${gameDir}/maps/${name}`,
174
+ config: `${gameDir}/${name}`
175
+ };
176
+ return this.normalizePath(paths[type] || `${gameDir}/${name}`);
177
+ }
178
+ // Check if resource file exists
179
+ resourceExists(type, name) {
180
+ const path = this.buildResourcePath(type, name);
181
+ return this.exists(path);
182
+ }
183
+ // Load resource file
184
+ loadResource(type, name) {
185
+ const path = this.buildResourcePath(type, name);
186
+ return this.load(path);
187
+ }
188
+ // Batch file operations
189
+ loadMultiple(filenames) {
190
+ const results = {};
191
+ filenames.forEach(filename => {
192
+ results[filename] = {
193
+ buffer: this.load(filename),
194
+ size: this.getSize(filename),
195
+ exists: this.exists(filename)
196
+ };
197
+ });
198
+ return results;
199
+ }
200
+ // Clean up multiple file buffers
201
+ freeMultiple(buffers) {
202
+ if (Array.isArray(buffers)) {
203
+ buffers.forEach(buffer => this.free(buffer));
204
+ }
205
+ else if (typeof buffers === 'object') {
206
+ Object.values(buffers).forEach(item => {
207
+ if (item && typeof item === 'object' && 'buffer' in item) {
208
+ this.free(item.buffer);
209
+ }
210
+ else if (Array.isArray(item)) {
211
+ this.free(item);
212
+ }
213
+ });
214
+ }
215
+ }
216
+ // File validation
217
+ isValidModelFile(filename) {
218
+ const ext = this.getExtension(filename);
219
+ return ['mdl', 'bsp'].includes(ext) && this.exists(this.buildResourcePath('model', filename));
220
+ }
221
+ isValidSoundFile(filename) {
222
+ const ext = this.getExtension(filename);
223
+ return ['wav', 'mp3'].includes(ext) && this.exists(this.buildResourcePath('sound', filename));
224
+ }
225
+ isValidMapFile(filename) {
226
+ const ext = this.getExtension(filename);
227
+ return ext === 'bsp' && this.exists(this.buildResourcePath('map', filename));
228
+ }
229
+ /**
230
+ * Loads and parses a configuration file with key=value format.
231
+ * Supports comments starting with // or # and handles empty lines.
232
+ *
233
+ * @param filename - Name of the configuration file
234
+ * @returns Parsed configuration object, or null if loading failed
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * // Load server configuration
239
+ * const config = nodemodCore.file.loadConfig('server.cfg');
240
+ * if (config) {
241
+ * const maxPlayers = parseInt(config['maxplayers'] || '16');
242
+ * const serverName = config['hostname'] || 'Unnamed Server';
243
+ * console.log(`Server: ${serverName}, Max Players: ${maxPlayers}`);
244
+ * }
245
+ *
246
+ * // Load custom plugin config
247
+ * const pluginConfig = nodemodCore.file.loadConfig('myplugin.cfg');
248
+ * if (pluginConfig?.enabled === '1') {
249
+ * console.log('Plugin is enabled');
250
+ * }
251
+ * ```
252
+ */
253
+ loadConfig(filename) {
254
+ const configPath = this.buildResourcePath('config', filename);
255
+ const content = this.readText(configPath);
256
+ if (!content)
257
+ return null;
258
+ // Parse simple key=value config format
259
+ const config = {};
260
+ const lines = content.split('\n');
261
+ lines.forEach((line) => {
262
+ const trimmed = line.trim();
263
+ if (trimmed && !trimmed.startsWith('//') && !trimmed.startsWith('#')) {
264
+ const equalPos = trimmed.indexOf('=');
265
+ if (equalPos > 0) {
266
+ const key = trimmed.substring(0, equalPos).trim();
267
+ const value = trimmed.substring(equalPos + 1).trim();
268
+ config[key] = value;
269
+ }
270
+ }
271
+ });
272
+ return config;
273
+ }
274
+ /**
275
+ * Monitors a file for changes using periodic polling.
276
+ * Returns a function to stop monitoring.
277
+ *
278
+ * @param filename - File to monitor
279
+ * @param callback - Function called when file changes
280
+ * @param interval - Check interval in milliseconds (default: 1000)
281
+ * @returns Function to stop monitoring
282
+ *
283
+ * @example
284
+ * ```typescript
285
+ * // Watch configuration file for changes
286
+ * const stopWatching = nodemodCore.file.watch('server.cfg', (event) => {
287
+ * console.log(`Config changed! Old size: ${event.oldSize}, New size: ${event.newSize}`);
288
+ * // Reload configuration
289
+ * const newConfig = nodemodCore.file.loadConfig('server.cfg');
290
+ * });
291
+ *
292
+ * // Stop watching after 10 minutes
293
+ * setTimeout(() => {
294
+ * stopWatching();
295
+ * console.log('Stopped watching file');
296
+ * }, 600000);
297
+ * ```
298
+ */
299
+ watch(filename, callback, interval = 1000) {
300
+ let lastSize = this.getSize(filename);
301
+ let lastTime = Date.now();
302
+ const watchInterval = setInterval(() => {
303
+ const currentSize = this.getSize(filename);
304
+ const currentTime = Date.now();
305
+ if (currentSize !== lastSize) {
306
+ callback({
307
+ filename,
308
+ event: 'change',
309
+ oldSize: lastSize,
310
+ newSize: currentSize,
311
+ timestamp: currentTime
312
+ });
313
+ lastSize = currentSize;
314
+ lastTime = currentTime;
315
+ }
316
+ }, interval);
317
+ return () => clearInterval(watchInterval);
318
+ }
319
+ /**
320
+ * Common Half-Life server file paths.
321
+ */
322
+ static PATHS = {
323
+ /** Main server configuration file */
324
+ CONFIG: 'server.cfg',
325
+ /** Banned players list */
326
+ BANNED: 'banned.cfg',
327
+ /** IP ban list */
328
+ LISTIP: 'listip.cfg',
329
+ /** Map rotation cycle */
330
+ MAPCYCLE: 'mapcycle.txt',
331
+ /** Message of the day */
332
+ MOTD: 'motd.txt'
333
+ };
334
+ /**
335
+ * Valid file extensions for different resource types.
336
+ */
337
+ static EXTENSIONS = {
338
+ /** Model file extensions */
339
+ MODEL: ['mdl'],
340
+ /** Sound file extensions */
341
+ SOUND: ['wav', 'mp3'],
342
+ /** Map file extensions */
343
+ MAP: ['bsp'],
344
+ /** Image file extensions */
345
+ IMAGE: ['bmp', 'tga', 'jpg', 'jpeg', 'png'],
346
+ /** Sprite file extensions */
347
+ SPRITE: ['spr'],
348
+ /** Configuration file extensions */
349
+ CONFIG: ['cfg', 'txt', 'ini']
350
+ };
351
+ }
352
+ exports.default = NodemodFile;
353
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/native/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ // This file is generated automatically. Don't edit it.
2
+ /// <reference path="./structures.d.ts" />
3
+ /// <reference path="./enums.d.ts" />
4
+
5
+ declare namespace nodemod {
6
+ interface DLL {
7
+ /** void (*pfnGameInit)( void ); */
8
+ gameInit(): void;
9
+ /** int (*pfnSpawn)( edict_t *pent ); */
10
+ spawn(pent: Entity): number;
11
+ /** void (*pfnThink)( edict_t *pent ); */
12
+ think(pent: Entity): void;
13
+ /** void (*pfnUse)( edict_t *pentUsed, edict_t *pentOther ); */
14
+ use(pentUsed: Entity, pentOther: Entity): void;
15
+ /** void (*pfnTouch)( edict_t *pentTouched, edict_t *pentOther ); */
16
+ touch(pentTouched: Entity, pentOther: Entity): void;
17
+ /** void (*pfnBlocked)( edict_t *pentBlocked, edict_t *pentOther ); */
18
+ blocked(pentBlocked: Entity, pentOther: Entity): void;
19
+ /** void (*pfnKeyValue)( edict_t *pentKeyvalue, KeyValueData *pkvd ); */
20
+ keyValue(pentKeyvalue: Entity, pkvd: KeyValueData): void;
21
+ /** void (*pfnSave)( edict_t *pent, SAVERESTOREDATA *pSaveData ); */
22
+ save(pent: Entity, pSaveData: SaveRestoreData): void;
23
+ /** int (*pfnRestore)( edict_t *pent, SAVERESTOREDATA *pSaveData, int globalEntity ); */
24
+ restore(pent: Entity, pSaveData: SaveRestoreData, globalEntity: number): number;
25
+ /** void (*pfnSetAbsBox)( edict_t *pent ); */
26
+ setAbsBox(pent: Entity): void;
27
+ /** void (*pfnSaveWriteFields)( SAVERESTOREDATA*, const char*, void*, TYPEDESCRIPTION*, int ); */
28
+ saveWriteFields(value0: SaveRestoreData, value1: string, value2: ArrayBuffer | Uint8Array | null, value3: TypeDescription, value4: number): void;
29
+ /** void (*pfnSaveReadFields)( SAVERESTOREDATA*, const char*, void*, TYPEDESCRIPTION*, int ); */
30
+ saveReadFields(value0: SaveRestoreData, value1: string, value2: ArrayBuffer | Uint8Array | null, value3: TypeDescription, value4: number): void;
31
+ /** void (*pfnSaveGlobalState)( SAVERESTOREDATA * ); */
32
+ saveGlobalState(value0: SaveRestoreData): void;
33
+ /** void (*pfnRestoreGlobalState)( SAVERESTOREDATA * ); */
34
+ restoreGlobalState(value0: SaveRestoreData): void;
35
+ /** void (*pfnResetGlobalState)( void ); */
36
+ resetGlobalState(): void;
37
+ /** qboolean (*pfnClientConnect)( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128] ); */
38
+ clientConnect(pEntity: Entity, pszName: string, pszAddress: string, szRejectReason: string): boolean;
39
+ /** void (*pfnClientDisconnect)( edict_t *pEntity ); */
40
+ clientDisconnect(pEntity: Entity): void;
41
+ /** void (*pfnClientKill)( edict_t *pEntity ); */
42
+ clientKill(pEntity: Entity): void;
43
+ /** void (*pfnClientPutInServer)( edict_t *pEntity ); */
44
+ clientPutInServer(pEntity: Entity): void;
45
+ /** void (*pfnClientCommand)( edict_t *pEntity ); */
46
+ clientCommand(pEntity: Entity): void;
47
+ /** void (*pfnClientUserInfoChanged)( edict_t *pEntity, char *infobuffer ); */
48
+ clientUserInfoChanged(pEntity: Entity, infobuffer: string): void;
49
+ /** void (*pfnServerActivate)( edict_t *pEdictList, int edictCount, int clientMax ); */
50
+ serverActivate(pEdictList: Entity, edictCount: number, clientMax: number): void;
51
+ /** void (*pfnServerDeactivate)( void ); */
52
+ serverDeactivate(): void;
53
+ /** void (*pfnPlayerPreThink)( edict_t *pEntity ); */
54
+ playerPreThink(pEntity: Entity): void;
55
+ /** void (*pfnPlayerPostThink)( edict_t *pEntity ); */
56
+ playerPostThink(pEntity: Entity): void;
57
+ /** void (*pfnStartFrame)( void ); */
58
+ startFrame(): void;
59
+ /** void (*pfnParmsNewLevel)( void ); */
60
+ parmsNewLevel(): void;
61
+ /** void (*pfnParmsChangeLevel)( void ); */
62
+ parmsChangeLevel(): void;
63
+ /** const char *(*pfnGetGameDescription)( void ); */
64
+ getGameDescription(): string;
65
+ /** void (*pfnPlayerCustomization)( edict_t *pEntity, customization_t *pCustom ); */
66
+ playerCustomization(pEntity: Entity, pCustom: Customization): void;
67
+ /** void (*pfnSpectatorConnect)( edict_t *pEntity ); */
68
+ spectatorConnect(pEntity: Entity): void;
69
+ /** void (*pfnSpectatorDisconnect)( edict_t *pEntity ); */
70
+ spectatorDisconnect(pEntity: Entity): void;
71
+ /** void (*pfnSpectatorThink)( edict_t *pEntity ); */
72
+ spectatorThink(pEntity: Entity): void;
73
+ /** void (*pfnSys_Error)( const char *error_string ); */
74
+ sysError(error_string: string): void;
75
+ /** void (*pfnPM_Move)( struct playermove_s *ppmove, qboolean server ); */
76
+ pMMove(ppmove: PlayerMove, server: boolean): void;
77
+ /** void (*pfnPM_Init)( struct playermove_s *ppmove ); */
78
+ pMInit(ppmove: PlayerMove): void;
79
+ /** char (*pfnPM_FindTextureType)( const char *name ); */
80
+ pMFindTextureType(name: string): number;
81
+ /** void (*pfnSetupVisibility)( struct edict_s *pViewEntity, struct edict_s *pClient, unsigned char **pvs, unsigned char **pas ); */
82
+ setupVisibility(pViewEntity: Entity, pClient: Entity, pvs: number[], pas: number[]): void;
83
+ /** void (*pfnUpdateClientData) ( const struct edict_s *ent, int sendweapons, struct clientdata_s *cd ); */
84
+ updateClientData(ent: Entity, sendweapons: number, cd: ClientData): void;
85
+ /** int (*pfnAddToFullPack)( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet ); */
86
+ addToFullPack(state: EntityState, e: number, ent: Entity, host: Entity, hostflags: number, player: number, pSet: number[]): number;
87
+ /** void (*pfnCreateBaseline)( int player, int eindex, struct entity_state_s *baseline, struct edict_s *entity, int playermodelindex, vec3_t player_mins, vec3_t player_maxs ); */
88
+ createBaseline(player: number, eindex: number, baseline: EntityState, entity: Entity, playermodelindex: number, player_mins: number[], player_maxs: number[]): void;
89
+ /** void (*pfnRegisterEncoders)( void ); */
90
+ registerEncoders(): void;
91
+ /** int (*pfnGetWeaponData)( struct edict_s *player, struct weapon_data_s *info ); */
92
+ getWeaponData(player: Entity, info: WeaponData): number;
93
+ /** void (*pfnCmdStart)( const edict_t *player, const struct usercmd_s *cmd, unsigned int random_seed ); */
94
+ cmdStart(player: Entity, cmd: UserCmd, random_seed: number): void;
95
+ /** void (*pfnCmdEnd)( const edict_t *player ); */
96
+ cmdEnd(player: Entity): void;
97
+ /** int (*pfnConnectionlessPacket )( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size ); */
98
+ connectionlessPacket(net_from: NetAdr, args: string, response_buffer: string, response_buffer_size: number[]): number;
99
+ /** int (*pfnGetHullBounds) ( int hullnumber, float *mins, float *maxs ); */
100
+ getHullBounds(hullnumber: number, mins: number[], maxs: number[]): number;
101
+ /** void (*pfnCreateInstancedBaselines) ( void ); */
102
+ createInstancedBaselines(): void;
103
+ /** int (*pfnInconsistentFile)( const struct edict_s *player, const char *filename, char *disconnect_message ); */
104
+ inconsistentFile(player: Entity, filename: string, disconnect_message: string): number;
105
+ /** int (*pfnAllowLagCompensation)( void ); */
106
+ allowLagCompensation(): number;
107
+ }
108
+ const dll: DLL;
109
+ }