bonktools 2.3.0 → 3.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/old/bonkbot.js ADDED
@@ -0,0 +1,1266 @@
1
+ //
2
+ // BonkBot Framework
3
+ // - Version: 3.0.0 by Pix@7008
4
+ //
5
+
6
+ const WebSocket = require("ws");
7
+ const axios = require("axios");
8
+ const EventEmitter = require("events");
9
+
10
+ const LZString = require("lz-string");
11
+ const PSON = require("pson");
12
+ const bytebuffer = require("bytebuffer");
13
+
14
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
15
+
16
+ const createBot = function (options) {
17
+ console.log("Starting BonkBot v3.0.0");
18
+ options = options || {};
19
+ return {
20
+ protocol_version: 49,
21
+ skin:
22
+ options.skin ||
23
+ `{"id":30,"scale":0.30000001192092896,"angle":0,"x":0,"y":0,"flipX":false,"flipY":false,"color":49663},{"id":75,"scale":0.07894168794155121,"angle":231.9313201904297,"x":-9.684389114379883,"y":2.921388626098633,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.08011436462402344,"angle":246.96766662597656,"x":-7.4090142250061035,"y":6.844449520111084,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.08011436462402344,"angle":-69.44682312011719,"x":7.4201555252075195,"y":6.805218696594238,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.08325429260730743,"angle":-53.76435089111328,"x":9.440908432006836,"y":3.1005043983459473,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.08254065364599228,"angle":7.713021755218506,"x":-1.975311517715454,"y":-9.978830337524414,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.08310862630605698,"angle":-6.316278457641602,"x":2.2820658683776855,"y":-9.94627857208252,"flipX":false,"flipY":false,"color":0},{"id":13,"scale":0.3945557773113251,"angle":0.04141417145729065,"x":-0.0322730652987957,"y":-0.060396190732717514,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.21413731575012207,"angle":419.81427001953125,"x":-2.4916510581970215,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.21413731575012207,"angle":120.56624603271484,"x":2.608327865600586,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.21413731575012207,"angle":0.39198538661003113,"x":0,"y":-3.107584238052368,"flipX":false,"flipY":false,"color":16777215},{"id":30,"scale":1.0002638101577759,"angle":-1.4328136444091797,"x":-0.04256964847445488,"y":0,"flipX":false,"flipY":false,"color":0},{"id":13,"scale":0.5588991045951843,"angle":-0.6648434996604919,"x":0,"y":0,"flipX":false,"flipY":false,"color":0},{"id":34,"scale":0.759579062461853,"angle":124.82804870605469,"x":-10.603617668151855,"y":-4.556829929351807,"flipX":false,"flipY":false,"color":16777215},{"id":34,"scale":0.7667332887649536,"angle":-3.340736150741577,"x":-0.7606570720672607,"y":11.768919944763184,"flipX":false,"flipY":false,"color":16777215},{"id":34,"scale":0.7913457751274109,"angle":241.08135986328125,"x":9.895292282104492,"y":-6.6403703689575195,"flipX":false,"flipY":false,"color":16777215}`,
24
+ server: options.server || `b2ny1`,
25
+ passbypass: options.passbypass || undefined,
26
+ token: options.token || undefined,
27
+ peerID: options.peerid || undefined,
28
+ account: options.account || {
29
+ username: `BonkBotV3-${Math.random().toString().substr(2, 5)}`,
30
+ guest: true,
31
+ },
32
+ game: {
33
+ players: [],
34
+ bots: [],
35
+ },
36
+ events: new EventEmitter(),
37
+ timesync: function () {
38
+ this.socket.send(`429[18,{"jsonrpc":"2.0","id":9,"method":"timesync"}]`);
39
+ },
40
+ sendInput: function (input) {
41
+ this.socket.send(
42
+ `42[4,{"i":${input.input},"f":${input.frame},"c":${input.sequence}}]`,
43
+ );
44
+ },
45
+ joinTeam: function (team) {
46
+ this.socket.send(`42[6,{"targetTeam":${team}}]`);
47
+ },
48
+ toggleTeams: function (locked) {
49
+ this.socket.send(`42[7,{"teamLock":${locked}}]`);
50
+ },
51
+ banPlayer: function (player) {
52
+ this.socket.send(`42[9,{"banshortid":${player}}]`);
53
+ },
54
+ leaveGame: function () {
55
+ this.socket.send(`42[14]`);
56
+ },
57
+ ready: function (ready) {
58
+ this.socket.send(`42[16,{"ready":${ready}}]`);
59
+ },
60
+ gainXP: function () {
61
+ this.socket.send(`42[38]`);
62
+ },
63
+ giveHost: function (newhost) {
64
+ this.socket.send(`42[34,{"id":${newhost}}]`);
65
+ },
66
+ friendRequest: function (friendID) {
67
+ this.socket.send(`42[35,{"id":${friendID}}]`);
68
+ },
69
+ record: function () {
70
+ this.socket.send(`42[33]`);
71
+ },
72
+ setRounds: function (rounds) {
73
+ this.socket.send(`42[21,{"w":${rounds}}]`);
74
+ },
75
+ chat: function (message) {
76
+ this.socket.send(`42[10,{"message":"${message}"}]`);
77
+ },
78
+ stateDecode: function (rawdata) {
79
+ let ISpsonpair = new PSON.StaticPair([
80
+ "physics",
81
+ "shapes",
82
+ "fixtures",
83
+ "bodies",
84
+ "bro",
85
+ "joints",
86
+ "ppm",
87
+ "lights",
88
+ "spawns",
89
+ "lasers",
90
+ "capZones",
91
+ "type",
92
+ "w",
93
+ "h",
94
+ "c",
95
+ "a",
96
+ "v",
97
+ "l",
98
+ "s",
99
+ "sh",
100
+ "fr",
101
+ "re",
102
+ "de",
103
+ "sn",
104
+ "fc",
105
+ "fm",
106
+ "f",
107
+ "d",
108
+ "n",
109
+ "bg",
110
+ "lv",
111
+ "av",
112
+ "ld",
113
+ "ad",
114
+ "fr",
115
+ "bu",
116
+ "cf",
117
+ "rv",
118
+ "p",
119
+ "d",
120
+ "bf",
121
+ "ba",
122
+ "bb",
123
+ "aa",
124
+ "ab",
125
+ "axa",
126
+ "dr",
127
+ "em",
128
+ "mmt",
129
+ "mms",
130
+ "ms",
131
+ "ut",
132
+ "lt",
133
+ "New body",
134
+ "Box Shape",
135
+ "Circle Shape",
136
+ "Polygon Shape",
137
+ "EdgeChain Shape",
138
+ "priority",
139
+ "Light",
140
+ "Laser",
141
+ "Cap Zone",
142
+ "BG Shape",
143
+ "Background Layer",
144
+ "Rotate Joint",
145
+ "Slider Joint",
146
+ "Rod Joint",
147
+ "Gear Joint",
148
+ 65535,
149
+ 16777215,
150
+ ]);
151
+ rawdata_caseflipped = "";
152
+ for (i = 0; i < rawdata.length; i++) {
153
+ if (i <= 100 && rawdata.charAt(i) === rawdata.charAt(i).toLowerCase()) {
154
+ rawdata_caseflipped += rawdata.charAt(i).toUpperCase();
155
+ } else if (
156
+ i <= 100 &&
157
+ rawdata.charAt(i) === rawdata.charAt(i).toUpperCase()
158
+ ) {
159
+ rawdata_caseflipped += rawdata.charAt(i).toLowerCase();
160
+ } else {
161
+ rawdata_caseflipped += rawdata.charAt(i);
162
+ }
163
+ }
164
+ data_deLZd =
165
+ LZString.decompressFromEncodedURIComponent(rawdata_caseflipped);
166
+ databuffer = bytebuffer.fromBase64(data_deLZd);
167
+ data = ISpsonpair.decode(databuffer.buffer);
168
+ return data;
169
+ },
170
+ stateEncode: function (rawdata) {
171
+ let ISpsonpair = new PSON.StaticPair([
172
+ "physics",
173
+ "shapes",
174
+ "fixtures",
175
+ "bodies",
176
+ "bro",
177
+ "joints",
178
+ "ppm",
179
+ "lights",
180
+ "spawns",
181
+ "lasers",
182
+ "capZones",
183
+ "type",
184
+ "w",
185
+ "h",
186
+ "c",
187
+ "a",
188
+ "v",
189
+ "l",
190
+ "s",
191
+ "sh",
192
+ "fr",
193
+ "re",
194
+ "de",
195
+ "sn",
196
+ "fc",
197
+ "fm",
198
+ "f",
199
+ "d",
200
+ "n",
201
+ "bg",
202
+ "lv",
203
+ "av",
204
+ "ld",
205
+ "ad",
206
+ "fr",
207
+ "bu",
208
+ "cf",
209
+ "rv",
210
+ "p",
211
+ "d",
212
+ "bf",
213
+ "ba",
214
+ "bb",
215
+ "aa",
216
+ "ab",
217
+ "axa",
218
+ "dr",
219
+ "em",
220
+ "mmt",
221
+ "mms",
222
+ "ms",
223
+ "ut",
224
+ "lt",
225
+ "New body",
226
+ "Box Shape",
227
+ "Circle Shape",
228
+ "Polygon Shape",
229
+ "EdgeChain Shape",
230
+ "priority",
231
+ "Light",
232
+ "Laser",
233
+ "Cap Zone",
234
+ "BG Shape",
235
+ "Background Layer",
236
+ "Rotate Joint",
237
+ "Slider Joint",
238
+ "Rod Joint",
239
+ "Gear Joint",
240
+ 65535,
241
+ 16777215,
242
+ ]);
243
+ rawdata = ISpsonpair.encode(obj);
244
+ b64 = rawdata.toBase64();
245
+ lzd = LZString.compressToEncodedURIComponent(b64);
246
+ caseflipped = "";
247
+ for (i = 0; i < lzd.length; i++) {
248
+ if (i <= 100 && lzd.charAt(i) === lzd.charAt(i).toLowerCase()) {
249
+ caseflipped += lzd.charAt(i).toUpperCase();
250
+ } else if (i <= 100 && lzd.charAt(i) === lzd.charAt(i).toUpperCase()) {
251
+ caseflipped += lzd.charAt(i).toLowerCase();
252
+ } else {
253
+ caseflipped += lzd.charAt(i);
254
+ }
255
+ }
256
+ return caseflipped;
257
+ },
258
+ mapDecode: function (rawdata) {
259
+ bytebuffer.prototype.readBoolean = function () {
260
+ return this.readByte() > 0;
261
+ };
262
+ bytebuffer.prototype.readUTF = function () {
263
+ return this.readString(this.readShort());
264
+ };
265
+ bytebuffer.prototype.readUint = bytebuffer.prototype.readUint32;
266
+ decodeFromDatabase = function (map) {
267
+ var thingie = [arguments];
268
+ b64mapdata = LZString.decompressFromEncodedURIComponent(map);
269
+ binaryReader = bytebuffer.fromBase64(b64mapdata, false);
270
+ map = {
271
+ v: 1,
272
+ s: { re: false, nc: false, pq: 1, gd: 25, fl: false },
273
+ physics: {
274
+ shapes: [],
275
+ fixtures: [],
276
+ bodies: [],
277
+ bro: [],
278
+ joints: [],
279
+ ppm: 12,
280
+ },
281
+ spawns: [],
282
+ capZones: [],
283
+ m: {
284
+ a: "noauthor",
285
+ n: "noname",
286
+ dbv: 2,
287
+ dbid: -1,
288
+ authid: -1,
289
+ date: "",
290
+ rxid: 0,
291
+ rxn: "",
292
+ rxa: "",
293
+ rxdb: 1,
294
+ cr: [],
295
+ pub: false,
296
+ mo: "",
297
+ },
298
+ };
299
+ map.v = binaryReader.readShort();
300
+ if (map.v > 13) {
301
+ throw new Error("New map format, this script needs to be updated.");
302
+ }
303
+ map.s.re = binaryReader.readBoolean();
304
+ map.s.nc = binaryReader.readBoolean();
305
+ if (map.v >= 3) {
306
+ map.s.pq = binaryReader.readShort();
307
+ }
308
+ if (map.v >= 4 && map.v <= 12) {
309
+ map.s.gd = binaryReader.readShort();
310
+ } else if (map.v >= 13) {
311
+ map.s.gd = binaryReader.readFloat();
312
+ }
313
+ if (map.v >= 9) {
314
+ map.s.fl = binaryReader.readBoolean();
315
+ }
316
+ map.m.rxn = binaryReader.readUTF();
317
+ map.m.rxa = binaryReader.readUTF();
318
+ map.m.rxid = binaryReader.readUint();
319
+ map.m.rxdb = binaryReader.readShort();
320
+ map.m.n = binaryReader.readUTF();
321
+ map.m.a = binaryReader.readUTF();
322
+ if (map.v >= 10) {
323
+ map.m.vu = binaryReader.readUint();
324
+ map.m.vd = binaryReader.readUint();
325
+ }
326
+ if (map.v >= 4) {
327
+ cr_count = binaryReader.readShort();
328
+ for (cr_iterator = 0; cr_iterator < cr_count; cr_iterator++) {
329
+ map.m.cr.push(binaryReader.readUTF());
330
+ }
331
+ }
332
+ if (map.v >= 5) {
333
+ map.m.mo = binaryReader.readUTF();
334
+ map.m.dbid = binaryReader.readInt();
335
+ }
336
+ if (map.v >= 7) {
337
+ map.m.pub = binaryReader.readBoolean();
338
+ }
339
+ if (map.v >= 8) {
340
+ map.m.dbv = binaryReader.readInt();
341
+ }
342
+ map.physics.ppm = binaryReader.readShort();
343
+ bro_count = binaryReader.readShort();
344
+ for (bro_iterator = 0; bro_iterator < bro_count; bro_iterator++) {
345
+ map.physics.bro[bro_iterator] = binaryReader.readShort();
346
+ }
347
+ shape_count = binaryReader.readShort();
348
+ for (
349
+ shape_iterator = 0;
350
+ shape_iterator < shape_count;
351
+ shape_iterator++
352
+ ) {
353
+ shape_type = binaryReader.readShort();
354
+ if (shape_type == 1) {
355
+ map.physics.shapes[shape_iterator] = {
356
+ type: "bx",
357
+ w: 10,
358
+ h: 40,
359
+ c: [0, 0],
360
+ a: 0,
361
+ sk: false,
362
+ };
363
+ map.physics.shapes[shape_iterator].w = binaryReader.readDouble();
364
+ map.physics.shapes[shape_iterator].h = binaryReader.readDouble();
365
+ map.physics.shapes[shape_iterator].c = [
366
+ binaryReader.readDouble(),
367
+ binaryReader.readDouble(),
368
+ ];
369
+ map.physics.shapes[shape_iterator].a = binaryReader.readDouble();
370
+ map.physics.shapes[shape_iterator].sk = binaryReader.readBoolean();
371
+ }
372
+ if (shape_type == 2) {
373
+ map.physics.shapes[shape_iterator] = {
374
+ type: "ci",
375
+ r: 25,
376
+ c: [0, 0],
377
+ sk: false,
378
+ };
379
+ map.physics.shapes[shape_iterator].r = binaryReader.readDouble();
380
+ map.physics.shapes[shape_iterator].c = [
381
+ binaryReader.readDouble(),
382
+ binaryReader.readDouble(),
383
+ ];
384
+ map.physics.shapes[shape_iterator].sk = binaryReader.readBoolean();
385
+ }
386
+ if (shape_type == 3) {
387
+ map.physics.shapes[shape_iterator] = {
388
+ type: "po",
389
+ v: [],
390
+ s: 1,
391
+ a: 0,
392
+ c: [0, 0],
393
+ };
394
+ map.physics.shapes[shape_iterator].s = binaryReader.readDouble();
395
+ map.physics.shapes[shape_iterator].a = binaryReader.readDouble();
396
+ map.physics.shapes[shape_iterator].c = [
397
+ binaryReader.readDouble(),
398
+ binaryReader.readDouble(),
399
+ ];
400
+ point_count = binaryReader.readShort();
401
+ map.physics.shapes[shape_iterator].v = [];
402
+ for (
403
+ point_iterator = 0;
404
+ point_iterator < point_count;
405
+ point_iterator++
406
+ ) {
407
+ map.physics.shapes[shape_iterator].v.push([
408
+ binaryReader.readDouble(),
409
+ binaryReader.readDouble(),
410
+ ]);
411
+ }
412
+ }
413
+ }
414
+ fixtureCount = binaryReader.readShort();
415
+ for (i = 0; i < fixtureCount; i++) {
416
+ map.physics.fixtures[i] = {
417
+ n: "Def Fix",
418
+ fr: 0.3,
419
+ fp: null,
420
+ re: 0.8,
421
+ de: 0.3,
422
+ f: 5209260,
423
+ d: false,
424
+ np: false,
425
+ ng: false,
426
+ };
427
+ map.physics.fixtures[i].sh = binaryReader.readShort();
428
+ map.physics.fixtures[i].n = binaryReader.readUTF();
429
+ map.physics.fixtures[i].fr = binaryReader.readDouble();
430
+ if (map.physics.fixtures[i].fr == Number.MAX_VALUE) {
431
+ map.physics.fixtures[i].fr = null;
432
+ }
433
+ fixture = binaryReader.readShort();
434
+ if (fixture == 0) {
435
+ map.physics.fixtures[i].fp = null;
436
+ }
437
+ if (fixture == 1) {
438
+ map.physics.fixtures[i].fp = false;
439
+ }
440
+ if (fixture == 2) {
441
+ map.physics.fixtures[i].fp = true;
442
+ }
443
+ map.physics.fixtures[i].re = binaryReader.readDouble();
444
+ if (map.physics.fixtures[i].re == Number.MAX_VALUE) {
445
+ map.physics.fixtures[i].re = null;
446
+ }
447
+ map.physics.fixtures[i].de = binaryReader.readDouble();
448
+ if (map.physics.fixtures[i].de == Number.MAX_VALUE) {
449
+ map.physics.fixtures[i].de = null;
450
+ }
451
+ map.physics.fixtures[i].f = binaryReader.readUint();
452
+ map.physics.fixtures[i].d = binaryReader.readBoolean();
453
+ map.physics.fixtures[i].np = binaryReader.readBoolean();
454
+ if (map.v >= 11) {
455
+ map.physics.fixtures[i].ng = binaryReader.readBoolean();
456
+ }
457
+ if (map.v >= 12) {
458
+ map.physics.fixtures[i].ig = binaryReader.readBoolean();
459
+ }
460
+ }
461
+ thingie[41] = binaryReader.readShort();
462
+ for (x = 0; x < thingie[41]; x++) {
463
+ map.physics.bodies[x] = {
464
+ type: "s",
465
+ n: "Unnamed",
466
+ p: [0, 0],
467
+ a: 0,
468
+ fric: 0.3,
469
+ fricp: false,
470
+ re: 0.8,
471
+ de: 0.3,
472
+ lv: [0, 0],
473
+ av: 0,
474
+ ld: 0,
475
+ ad: 0,
476
+ fr: false,
477
+ bu: false,
478
+ cf: { x: 0, y: 0, w: true, ct: 0 },
479
+ fx: [],
480
+ f_c: 1,
481
+ f_p: true,
482
+ f_1: true,
483
+ f_2: true,
484
+ f_3: true,
485
+ f_4: true,
486
+ };
487
+ map.physics.bodies[x].type = binaryReader.readUTF();
488
+ map.physics.bodies[x].n = binaryReader.readUTF();
489
+ map.physics.bodies[x].p = [
490
+ binaryReader.readDouble(),
491
+ binaryReader.readDouble(),
492
+ ];
493
+ map.physics.bodies[x].a = binaryReader.readDouble();
494
+ map.physics.bodies[x].fric = binaryReader.readDouble();
495
+ map.physics.bodies[x].fricp = binaryReader.readBoolean();
496
+ map.physics.bodies[x].re = binaryReader.readDouble();
497
+ map.physics.bodies[x].de = binaryReader.readDouble();
498
+ map.physics.bodies[x].lv = [
499
+ binaryReader.readDouble(),
500
+ binaryReader.readDouble(),
501
+ ];
502
+ map.physics.bodies[x].av = binaryReader.readDouble();
503
+ map.physics.bodies[x].ld = binaryReader.readDouble();
504
+ map.physics.bodies[x].ad = binaryReader.readDouble();
505
+ map.physics.bodies[x].fr = binaryReader.readBoolean();
506
+ map.physics.bodies[x].bu = binaryReader.readBoolean();
507
+ map.physics.bodies[x].cf.x = binaryReader.readDouble();
508
+ map.physics.bodies[x].cf.y = binaryReader.readDouble();
509
+ map.physics.bodies[x].cf.ct = binaryReader.readDouble();
510
+ map.physics.bodies[x].cf.w = binaryReader.readBoolean();
511
+ map.physics.bodies[x].f_c = binaryReader.readShort();
512
+ map.physics.bodies[x].f_1 = binaryReader.readBoolean();
513
+ map.physics.bodies[x].f_2 = binaryReader.readBoolean();
514
+ map.physics.bodies[x].f_3 = binaryReader.readBoolean();
515
+ map.physics.bodies[x].f_4 = binaryReader.readBoolean();
516
+ if (map.v >= 2) {
517
+ map.physics.bodies[x].f_p = binaryReader.readBoolean();
518
+ }
519
+ thingie[50] = binaryReader.readShort();
520
+ for (thingie[66] = 0; thingie[66] < thingie[50]; thingie[66]++) {
521
+ map.physics.bodies[x].fx.push(binaryReader.readShort());
522
+ }
523
+ }
524
+ thingie[48] = binaryReader.readShort();
525
+ for (thingie[36] = 0; thingie[36] < thingie[48]; thingie[36]++) {
526
+ map.spawns[thingie[36]] = {
527
+ x: 400,
528
+ y: 300,
529
+ xv: 0,
530
+ yv: 0,
531
+ priority: 5,
532
+ r: true,
533
+ f: true,
534
+ b: true,
535
+ gr: false,
536
+ ye: false,
537
+ n: "Spawn",
538
+ };
539
+ thingie[80] = map.spawns[thingie[36]];
540
+ thingie[80].x = binaryReader.readDouble();
541
+ thingie[80].y = binaryReader.readDouble();
542
+ thingie[80].xv = binaryReader.readDouble();
543
+ thingie[80].yv = binaryReader.readDouble();
544
+ thingie[80].priority = binaryReader.readShort();
545
+ thingie[80].r = binaryReader.readBoolean();
546
+ thingie[80].f = binaryReader.readBoolean();
547
+ thingie[80].b = binaryReader.readBoolean();
548
+ thingie[80].gr = binaryReader.readBoolean();
549
+ thingie[80].ye = binaryReader.readBoolean();
550
+ thingie[80].n = binaryReader.readUTF();
551
+ }
552
+ thingie[40] = binaryReader.readShort();
553
+ for (thingie[18] = 0; thingie[18] < thingie[40]; thingie[18]++) {
554
+ map.capZones[thingie[18]] = { n: "Cap Zone", ty: 1, l: 10, i: -1 };
555
+ map.capZones[thingie[18]].n = binaryReader.readUTF();
556
+ map.capZones[thingie[18]].l = binaryReader.readDouble();
557
+ map.capZones[thingie[18]].i = binaryReader.readShort();
558
+ if (map.v >= 6) {
559
+ map.capZones[thingie[18]].ty = binaryReader.readShort();
560
+ }
561
+ }
562
+ thingie[39] = binaryReader.readShort();
563
+ for (thingie[94] = 0; thingie[94] < thingie[39]; thingie[94]++) {
564
+ thingie[75] = binaryReader.readShort();
565
+ if (thingie[75] == 1) {
566
+ map.physics.joints[thingie[94]] = {
567
+ type: "rv",
568
+ d: {
569
+ la: 0,
570
+ ua: 0,
571
+ mmt: 0,
572
+ ms: 0,
573
+ el: false,
574
+ em: false,
575
+ cc: false,
576
+ bf: 0,
577
+ dl: true,
578
+ },
579
+ aa: [0, 0],
580
+ };
581
+ thingie[53] = map.physics.joints[thingie[94]];
582
+ thingie[53].d.la = binaryReader.readDouble();
583
+ thingie[53].d.ua = binaryReader.readDouble();
584
+ thingie[53].d.mmt = binaryReader.readDouble();
585
+ thingie[53].d.ms = binaryReader.readDouble();
586
+ thingie[53].d.el = binaryReader.readBoolean();
587
+ thingie[53].d.em = binaryReader.readBoolean();
588
+ thingie[53].aa = [
589
+ binaryReader.readDouble(),
590
+ binaryReader.readDouble(),
591
+ ];
592
+ }
593
+ if (thingie[75] == 2) {
594
+ map.physics.joints[thingie[94]] = {
595
+ type: "d",
596
+ d: { fh: 0, dr: 0, cc: false, bf: 0, dl: true },
597
+ aa: [0, 0],
598
+ ab: [0, 0],
599
+ };
600
+ thingie[27] = map.physics.joints[thingie[94]];
601
+ thingie[27].d.fh = binaryReader.readDouble();
602
+ thingie[27].d.dr = binaryReader.readDouble();
603
+ thingie[27].aa = [
604
+ binaryReader.readDouble(),
605
+ binaryReader.readDouble(),
606
+ ];
607
+ thingie[27].ab = [
608
+ binaryReader.readDouble(),
609
+ binaryReader.readDouble(),
610
+ ];
611
+ }
612
+ if (thingie[75] == 3) {
613
+ map.physics.joints[thingie[94]] = {
614
+ type: "lpj",
615
+ d: { cc: false, bf: 0, dl: true },
616
+ pax: 0,
617
+ pay: 0,
618
+ pa: 0,
619
+ pf: 0,
620
+ pl: 0,
621
+ pu: 0,
622
+ plen: 0,
623
+ pms: 0,
624
+ };
625
+ thingie[23] = map.physics.joints[thingie[94]];
626
+ thingie[23].pax = binaryReader.readDouble();
627
+ thingie[23].pay = binaryReader.readDouble();
628
+ thingie[23].pa = binaryReader.readDouble();
629
+ thingie[23].pf = binaryReader.readDouble();
630
+ thingie[23].pl = binaryReader.readDouble();
631
+ thingie[23].pu = binaryReader.readDouble();
632
+ thingie[23].plen = binaryReader.readDouble();
633
+ thingie[23].pms = binaryReader.readDouble();
634
+ }
635
+ if (thingie[75] == 4) {
636
+ map.physics.joints[thingie[94]] = {
637
+ type: "lsj",
638
+ d: { cc: false, bf: 0, dl: true },
639
+ sax: 0,
640
+ say: 0,
641
+ sf: 0,
642
+ slen: 0,
643
+ };
644
+ thingie[47] = map.physics.joints[thingie[94]];
645
+ thingie[47].sax = binaryReader.readDouble();
646
+ thingie[47].say = binaryReader.readDouble();
647
+ thingie[47].sf = binaryReader.readDouble();
648
+ thingie[47].slen = binaryReader.readDouble();
649
+ }
650
+ map.physics.joints[thingie[94]].ba = binaryReader.readShort();
651
+ map.physics.joints[thingie[94]].bb = binaryReader.readShort();
652
+ map.physics.joints[thingie[94]].d.cc = binaryReader.readBoolean();
653
+ map.physics.joints[thingie[94]].d.bf = binaryReader.readDouble();
654
+ map.physics.joints[thingie[94]].d.dl = binaryReader.readBoolean();
655
+ }
656
+ return map;
657
+ };
658
+ return decodeFromDatabase(rawdata);
659
+ },
660
+ mapEncode: function (map) {
661
+ // unfinished
662
+ },
663
+ setAddress: function (gameInfo) {
664
+ if (
665
+ gameInfo.address == undefined ||
666
+ gameInfo.roomname == undefined ||
667
+ gameInfo.server == undefined ||
668
+ gameInfo.passbypass == undefined
669
+ ) {
670
+ console.log("Room not found");
671
+ return false;
672
+ }
673
+ this.address = gameInfo.address;
674
+ this.roomname = gameInfo.roomname;
675
+ this.server = gameInfo.server;
676
+ this.passbypass = gameInfo.passbypass;
677
+ },
678
+ getAddressFromRoomName: async function (name) {
679
+ let response = await this.getRoomByName(name);
680
+ let serv = {};
681
+ let addr = await this.getRoomAddress(response.id);
682
+ serv.roomname = response.roomname;
683
+ serv.address = addr.address;
684
+ serv.server = addr.server;
685
+ serv.passbypass = "";
686
+ return serv;
687
+ },
688
+ sendRoomInfo: function (id, username) {
689
+ let welcomemsg = `Welcome`;
690
+ if (username != undefined || username != null) {
691
+ welcomemsg = `Welcome ${username}!`;
692
+ }
693
+ let msg = [
694
+ 11,
695
+ {
696
+ sid: id,
697
+ gs: {
698
+ map: {
699
+ v: 13,
700
+ s: {
701
+ re: false,
702
+ nc: false,
703
+ pq: 1,
704
+ gd: 25,
705
+ fl: false,
706
+ },
707
+ physics: {
708
+ shapes: [],
709
+ fixtures: [],
710
+ bodies: [],
711
+ bro: [],
712
+ joints: [],
713
+ ppm: 12,
714
+ },
715
+ spawns: [],
716
+ capZones: [],
717
+ m: {
718
+ a: "🤓",
719
+ n: welcomemsg,
720
+ dbv: 2,
721
+ dbid: 742086,
722
+ authid: -1,
723
+ date: "2022-07-29 17:46:46",
724
+ rxid: 0,
725
+ rxn: "",
726
+ rxa: "",
727
+ rxdb: 1,
728
+ cr: ["🤓"],
729
+ pub: true,
730
+ mo: "",
731
+ vu: 0,
732
+ vd: 0,
733
+ },
734
+ },
735
+ gt: 2,
736
+ wl: "21!?!",
737
+ q: false,
738
+ tl: false,
739
+ tea: false,
740
+ ga: "b",
741
+ mo: "b",
742
+ bal: [],
743
+ GMMode: "",
744
+ },
745
+ },
746
+ ];
747
+ return `42${JSON.stringify(msg)}`;
748
+ },
749
+ getSocketID: async function (server) {
750
+ var url = `https://${server}.bonk.io/socket.io/?EIO=3&transport=websocket`;
751
+ return new Promise((resolve, reject) => {
752
+ axios.get(url).then(function (response) {
753
+ var socketid = response.data.substring(12, 32);
754
+ resolve(socketid);
755
+ });
756
+ }).catch(function (error) {
757
+ console.log(error);
758
+ });
759
+ },
760
+ getAddressFromLink: async function (link) {
761
+ // make an http request to the link and pull out the room address from the html
762
+ return new Promise((resolve, reject) => {
763
+ axios.get(link).then(function (response) {
764
+ let gameInfo = response.data.match(
765
+ /autoJoin = {"address":"(.*?)","roomname":"(.*?)","server":"(.*?)","passbypass":"(.*?)","r":"success"}/,
766
+ );
767
+ gameInfo = {
768
+ address: gameInfo[1],
769
+ roomname: gameInfo[2],
770
+ server: gameInfo[3],
771
+ passbypass: gameInfo[4],
772
+ };
773
+ resolve(gameInfo);
774
+ });
775
+ }).catch(function (error) {
776
+ console.log(error);
777
+ });
778
+ },
779
+ getToken: async function () {
780
+ var url = "https://bonk2.io/scripts/login_legacy.php";
781
+ return new Promise((resolve, reject) => {
782
+ var headers = {
783
+ "Content-Type": "application/x-www-form-urlencoded",
784
+ };
785
+ var data = `username=${this.account.username}&password=${this.account.password}&remember=true`;
786
+ axios.post(url, data, { headers: headers }).then(function (response) {
787
+ resolve(response.data.token);
788
+ });
789
+ });
790
+ },
791
+ joinRoom: function (options) {
792
+ if (options.address == undefined) {
793
+ throw new Error("address is undefined");
794
+ }
795
+ if (options.account.guest == undefined) {
796
+ options.account.guest = true;
797
+ }
798
+ if (options.token == undefined) {
799
+ if (options.account.guest != true) {
800
+ throw new Error(`No token provided and is not a guest!`);
801
+ }
802
+ }
803
+ if (options.peerid == undefined) {
804
+ options.peerid = Math.random().toString(36).substr(2, 10) + "v00000";
805
+ }
806
+ if (options.account.username == undefined) {
807
+ options.account.username = `Robot${Math.random()
808
+ .toString()
809
+ .substr(2, 5)}`;
810
+ }
811
+ if (options.roompassword == undefined) {
812
+ options.roompassword = "";
813
+ }
814
+ if (options.basecolor == undefined) {
815
+ options.basecolor = 16448250;
816
+ }
817
+ if (options.skin == undefined) {
818
+ options.skin = `{"id":30,"scale":0.30000001192092896,"angle":0,"x":0,"y":0,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.07894168794155121,"angle":231.9313201904297,"x":-9.684389114379883,"y":2.921388626098633,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08011436462402344,"angle":246.96766662597656,"x":-7.4090142250061035,"y":6.844449520111084,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08011436462402344,"angle":-69.44682312011719,"x":7.4201555252075195,"y":6.805218696594238,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08325429260730743,"angle":-53.76435089111328,"x":9.440908432006836,"y":3.1005043983459473,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08254065364599228,"angle":7.713021755218506,"x":-1.975311517715454,"y":-9.978830337524414,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08310862630605698,"angle":-6.316278457641602,"x":2.2820658683776855,"y":-9.94627857208252,"flipX":false,"flipY":false,"color":16777215},{"id":13,"scale":0.3945557773113251,"angle":0.04141417145729065,"x":-0.0322730652987957,"y":-0.060396190732717514,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.21413731575012207,"angle":419.81427001953125,"x":-2.4916510581970215,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.21413731575012207,"angle":120.56624603271484,"x":2.608327865600586,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.21413731575012207,"angle":0.39198538661003113,"x":0,"y":-3.107584238052368,"flipX":false,"flipY":false,"color":0},{"id":30,"scale":1.0002638101577759,"angle":-1.4328136444091797,"x":-0.04256964847445488,"y":0,"flipX":false,"flipY":false,"color":16777215},{"id":13,"scale":0.5588991045951843,"angle":-0.6648434996604919,"x":0,"y":0,"flipX":false,"flipY":false,"color":16777215},{"id":34,"scale":0.759579062461853,"angle":124.82804870605469,"x":-10.603617668151855,"y":-4.556829929351807,"flipX":false,"flipY":false,"color":0},{"id":34,"scale":0.7667332887649536,"angle":-3.340736150741577,"x":-0.7606570720672607,"y":11.768919944763184,"flipX":false,"flipY":false,"color":0},{"id":34,"scale":0.7913457751274109,"angle":241.08135986328125,"x":9.895292282104492,"y":-6.6403703689575195,"flipX":false,"flipY":false,"color":0}`;
819
+ }
820
+ if (options.account.guest == true) {
821
+ this.socket.send(
822
+ `42[13,{"joinID":"${options.address}","roomPassword":"${options.roompassword}","guest":true,"dbid":2,"version":44,"peerID":"${options.peerid}","bypass":"","guestName":"${options.account.username}","avatar":{"layers":[${options.skin}],"bc":${options.basecolor}}}]`,
823
+ );
824
+ } else {
825
+ this.socket.send(
826
+ `42[13,{"joinID":"${options.address}","roomPassword":"${options.roompassword}","guest":false,"dbid":2,"version":44,"peerID":"${options.peerid}","bypass":"","token":"${options.token}","avatar":{"layers":[${options.skin}],"bc":${options.basecolor}}}]`,
827
+ );
828
+ }
829
+ },
830
+ createRoom: function (options) {
831
+ if (options.roomname == undefined) {
832
+ options.roomname = `Super cool room`;
833
+ }
834
+ if (options.maxplayers == undefined) {
835
+ options.maxplayers = 8;
836
+ }
837
+ if (options.account.guest == undefined) {
838
+ options.account.guest = true;
839
+ }
840
+ if (options.token == undefined) {
841
+ if (options.account.guest != true) {
842
+ throw new Error(`No token provided and is not a guest!`);
843
+ }
844
+ }
845
+ if (options.peerid == undefined) {
846
+ options.peerid = Math.random().toString(36).substr(2, 10) + "v00000";
847
+ }
848
+ if (options.username == undefined) {
849
+ options.username = `Robot${Math.random().toString().substr(2, 5)}`;
850
+ }
851
+ if (options.roompassword == undefined) {
852
+ options.roompassword = "";
853
+ }
854
+ if (options.basecolor == undefined) {
855
+ options.basecolor = 0;
856
+ }
857
+ if (options.skin == undefined) {
858
+ options.skin = `{"id":30,"scale":0.30000001192092896,"angle":0,"x":0,"y":0,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.07894168794155121,"angle":231.9313201904297,"x":-9.684389114379883,"y":2.921388626098633,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08011436462402344,"angle":246.96766662597656,"x":-7.4090142250061035,"y":6.844449520111084,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08011436462402344,"angle":-69.44682312011719,"x":7.4201555252075195,"y":6.805218696594238,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08325429260730743,"angle":-53.76435089111328,"x":9.440908432006836,"y":3.1005043983459473,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08254065364599228,"angle":7.713021755218506,"x":-1.975311517715454,"y":-9.978830337524414,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.08310862630605698,"angle":-6.316278457641602,"x":2.2820658683776855,"y":-9.94627857208252,"flipX":false,"flipY":false,"color":16777215},{"id":13,"scale":0.3945557773113251,"angle":0.04141417145729065,"x":-0.0322730652987957,"y":-0.060396190732717514,"flipX":false,"flipY":false,"color":16777215},{"id":75,"scale":0.21413731575012207,"angle":419.81427001953125,"x":-2.4916510581970215,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.21413731575012207,"angle":120.56624603271484,"x":2.608327865600586,"y":1.3715696334838867,"flipX":false,"flipY":false,"color":0},{"id":75,"scale":0.21413731575012207,"angle":0.39198538661003113,"x":0,"y":-3.107584238052368,"flipX":false,"flipY":false,"color":0},{"id":30,"scale":1.0002638101577759,"angle":-1.4328136444091797,"x":-0.04256964847445488,"y":0,"flipX":false,"flipY":false,"color":16777215},{"id":13,"scale":0.5588991045951843,"angle":-0.6648434996604919,"x":0,"y":0,"flipX":false,"flipY":false,"color":16777215},{"id":34,"scale":0.759579062461853,"angle":124.82804870605469,"x":-10.603617668151855,"y":-4.556829929351807,"flipX":false,"flipY":false,"color":0},{"id":34,"scale":0.7667332887649536,"angle":-3.340736150741577,"x":-0.7606570720672607,"y":11.768919944763184,"flipX":false,"flipY":false,"color":0},{"id":34,"scale":0.7913457751274109,"angle":241.08135986328125,"x":9.895292282104492,"y":-6.6403703689575195,"flipX":false,"flipY":false,"color":0}`;
859
+ }
860
+ if (options.account.guest == true) {
861
+ this.socket.send(
862
+ `42[12,{"peerID":"${options.peerid}","roomName":"${options.roomname}","maxPlayers":${options.maxplayers},"password":"${options.roompassword}","dbid":11822936,"guest":true,"minLevel":0,"maxLevel":999,"latitude":41.7227,"longitude":-72.2196,"country":"US","version":44,"hidden":0,"quick":false,"mode":"custom","token":"${options.token}","avatar":{"layers":[${options.skin}],"bc":${options.basecolor}}}]`,
863
+ );
864
+ } else {
865
+ this.socket.send(
866
+ `42[12,{"peerID":"${options.peerid}","roomName":"${options.roomname}","maxPlayers":${options.maxplayers},"password":"${options.roompassword}","dbid":11822936,"guest":false,"minLevel":0,"maxLevel":999,"latitude":41.7227,"longitude":-72.2196,"country":"US","version":44,"hidden":0,"quick":false,"mode":"custom","token":"${options.token}","avatar":{"layers":[${options.skin}],"bc":${options.basecolor}}}]`,
867
+ );
868
+ }
869
+ return true;
870
+ },
871
+ getRoomByName: async function (roomname) {
872
+ return new Promise(async (resolve, reject) => {
873
+ try {
874
+ var rooms = await this.getRooms();
875
+ for (var i = rooms.length - 1; i >= 0; i--) {
876
+ if (roomname != undefined) {
877
+ if (rooms[i].roomname == roomname) {
878
+ resolve(rooms[i]);
879
+ }
880
+ }
881
+ }
882
+ resolve(false);
883
+ } catch (error) {
884
+ console.log(error);
885
+ }
886
+ });
887
+ },
888
+ getRooms: async function () {
889
+ var url = "https://bonk2.io/scripts/getrooms.php";
890
+ var data = `version=${this.protocol_version}&gl=y&token=`;
891
+ return new Promise((resolve, reject) => {
892
+ axios
893
+ .post(url, data)
894
+ .then(function (response) {
895
+ var roomdata = response.data;
896
+ resolve(roomdata.rooms);
897
+ })
898
+ .catch(function (error) {
899
+ console.log(error);
900
+ });
901
+ });
902
+ },
903
+ getRoomAddress: async function (id) {
904
+ var url = "https://bonk2.io/scripts/getroomaddress.php";
905
+ var data = `id=${id}`;
906
+
907
+ return new Promise((resolve, reject) => {
908
+ axios.post(url, data).then(function (response) {
909
+ var roomjoinid = response.data;
910
+ resolve(roomjoinid);
911
+ });
912
+ });
913
+ },
914
+ getPlayerByID: function (id) {
915
+ for (var i = this.game.players.length - 1; i >= 0; i--) {
916
+ if (this.game.players[i] != undefined || this.game.players[i] != null) {
917
+ if (this.game.players[i].id == id) {
918
+ return this.game.players[i];
919
+ }
920
+ }
921
+ }
922
+ return false;
923
+ },
924
+ parseSocket: function (message) {
925
+ let numToTeam = {
926
+ 0: `spectator`,
927
+ 1: `ffa`,
928
+ 2: `red`,
929
+ 3: `blue`,
930
+ 4: `green`,
931
+ 5: `yellow`,
932
+ };
933
+ if (message == "3probe") {
934
+ return `{"type":"3probe"}`;
935
+ }
936
+ if (message == "40") {
937
+ return `{"type":"40"}`;
938
+ }
939
+ if (message == "41") {
940
+ return `{"type":"41"}`;
941
+ }
942
+ if (JSON.parse(message.substring(2))) {
943
+ var message = JSON.parse(message.substring(2));
944
+ try {
945
+ function switchyswitch(message) {
946
+ switch (message[0]) {
947
+ case 1:
948
+ return `{"type":"ping"}`;
949
+ case 2:
950
+ return `{"type":"roomaddr","roomaddr":"${message[1]}"}`;
951
+ case 3:
952
+ return `{"type":"roomjoin","roombypass":"${
953
+ message[7]
954
+ }","roomid":"${message[6]}","teamslocked":"${
955
+ message[5]
956
+ }","myid":"${message[1]}","hostid":"${
957
+ message[2]
958
+ }","playerdata":${JSON.stringify(message[3])}}`;
959
+ case 4:
960
+ if (message[4] == true) {
961
+ return `{"type":"playerjoin","id":"${message[1]}","peerid":"${
962
+ message[2]
963
+ }","username":"${
964
+ message[3]
965
+ }","level":"0","guest":true,"skin":${JSON.stringify(
966
+ message[7],
967
+ )},"tabbed":${message[6]}}`;
968
+ } else {
969
+ return `{"type":"playerjoin","id":"${message[1]}","peerid":"${
970
+ message[2]
971
+ }","username":"${message[3]}","level":"${
972
+ message[5]
973
+ }","guest":false,"skin":${JSON.stringify(
974
+ message[7],
975
+ )},"tabbed":${message[6]}}`;
976
+ }
977
+ case 5:
978
+ return `{"type":"playerleave","id":"${message[1]}"}`;
979
+ case 6:
980
+ if (message[2] == `-1`) {
981
+ return `{"type":"gameclose"}`;
982
+ } else {
983
+ return `{"type":"hostleave","oldid":"${message[1]}","newid":"${message[2]}"}`;
984
+ }
985
+ case 7:
986
+ if (
987
+ !message[2].hasOwnProperty("f") ||
988
+ !message[2].hasOwnProperty("c") ||
989
+ !message[2].hasOwnProperty("i")
990
+ ) {
991
+ return `{"type":"playerinputerror"}`;
992
+ }
993
+ return `{"type":"playerinput","id":"${message[1]}","input":${
994
+ message[2][`i`]
995
+ },"frame":${message[2][`f`]},"sequence":${message[2][`c`]}}`;
996
+ case 8:
997
+ return `{"type":"playerready","id":"${message[1]}","ready":${message[2]}}`;
998
+ case 13:
999
+ return `{"type":"gamecancel"}`;
1000
+ case 15:
1001
+ return `{"type":"gamestart"}`;
1002
+ case 16:
1003
+ return `{"type":"ratelimit","limit":"${message[1]}"}`;
1004
+ case 18:
1005
+ return `{"type":"playermove","id":"${message[1]}","team":${message[2]}}`;
1006
+ case 19:
1007
+ return `{"type":"teamslock","teamslocked":${message[1]}}`;
1008
+ case 20:
1009
+ return `{"type":"chatmessage","id":"${message[1]}","message":"${message[2]}"}`;
1010
+ case 21:
1011
+ return `{"type":"mapdata","data":"${message[1]}"}`;
1012
+ case 23:
1013
+ return `{"type":"timesync","time":"${message[1].result}","id":"${message[1].id}"}`;
1014
+ case 24:
1015
+ return `{"type":"playerkick","id":"${message[1]}"}`;
1016
+ case 26:
1017
+ return `{"type":"modechange","mode":"${message[2]}","rootmode":"${message[1]}"}`;
1018
+ case 27:
1019
+ return `{"type":"roundschange","rounds":${message[1]}}`;
1020
+ case 29:
1021
+ return `{"type":"mapswap","data":"${message[1]}"}`;
1022
+ case 33:
1023
+ return `{"type":"hostmaprequest","mapdata":"${message[1]}","id":"${message[2]}"}`;
1024
+ case 34:
1025
+ return `{"type":"maprequest","map":"${message[1]}","author":"${message[2]}","id":"${message[3]}"}`;
1026
+ case 36:
1027
+ return `{"type":"changebalance","id":"${message[1]}","balance":"${message[2]}"}`;
1028
+ case 40:
1029
+ return `{"type":"savereplay","id":"${message[1]}"}`;
1030
+ case 41:
1031
+ return `{"type":"hosttransfer","oldHost":"${
1032
+ message[1][`oldHost`]
1033
+ }","newHost":"${message[1][`newHost`]}"}`;
1034
+ case 42:
1035
+ return `{"type":"friend","id":"${message[1]}"}`;
1036
+ case 43:
1037
+ return `{"type":"countdown","countdown":"${message[1]}"}`;
1038
+ case 44:
1039
+ return `{"type":"countdownabort"}`;
1040
+ case 45:
1041
+ return `{"type":"playerlevelup","id":"${message[1]}","level":"${message[2]}"}`;
1042
+ case 46:
1043
+ if (message[1][`newLevel`] != undefined) {
1044
+ return `{"type":"levelup","xp":${
1045
+ message[1][`newXP`]
1046
+ },"level":${message[1][`newLevel`]},"token","${
1047
+ message[1][`newToken`]
1048
+ }"}`;
1049
+ } else {
1050
+ return `{"type":"xp","xp":${message[1][`newXP`]}}`;
1051
+ }
1052
+ case 48:
1053
+ message = message[1];
1054
+ let decodedState = this.decodeState(message.state);
1055
+ let decodedMap = this.decodeMap(message.gs.map);
1056
+ return `{"type":"state","gt":${message.gt},"rounds":${
1057
+ message.wl
1058
+ },"quickplay":${message.q},"teamsLocked":${
1059
+ message.tl
1060
+ },"teams":${message.tea},"gameType":"${message.ga}","mode":"${
1061
+ message.mo
1062
+ }","balance":${JSON.stringify(
1063
+ message.bal,
1064
+ )}, "inputs":${JSON.stringify(message.inputs)}, "framecount":${
1065
+ message.fc
1066
+ }, "stateID":${message.stateID}, "admin":${JSON.stringify(
1067
+ message.admin,
1068
+ )}, "map":${JSON.stringify(
1069
+ message.gs.map,
1070
+ )}, "mapDecoded":${JSON.stringify(
1071
+ decodedMap,
1072
+ )}, "state":${JSON.stringify(
1073
+ message.state,
1074
+ )}, "stateDecoded":${JSON.stringify(
1075
+ decodedState,
1076
+ )} "random":${JSON.stringify(message.random)}}`;
1077
+ case 52:
1078
+ return `{"type":"playertabbed","id":"${message[1]}","tabbed":${message[2]}}`;
1079
+ case 58:
1080
+ return `{"type":"roomnamechange","name":"${message[1]}"}`;
1081
+ case 59:
1082
+ if (message[1] == `1`) {
1083
+ return `{"type":"roompassword","password":true}`;
1084
+ } else {
1085
+ return `{"type":"roompassword","password":false}`;
1086
+ }
1087
+ case 39:
1088
+ return `{"type":"teamtoggle","teams":"${message[1]}"}`;
1089
+ }
1090
+ console.log(`BonkBot could not identify => `);
1091
+ console.log(message);
1092
+ return `{"type":"none"}`;
1093
+ }
1094
+ return JSON.parse(switchyswitch(message));
1095
+ } catch (error) {
1096
+ console.log(
1097
+ `Err: ${error}\nBonkbot: Probably just a json parsing error, you can ignore this.`,
1098
+ );
1099
+ return `{"type":"none"}`;
1100
+ }
1101
+ }
1102
+ },
1103
+ autoHandlePacket: function (data) {
1104
+ switch (data.type) {
1105
+ case "none":
1106
+ break;
1107
+ case "ping":
1108
+ this.socket.send(this.timesync());
1109
+ break;
1110
+ case "roomjoin":
1111
+ this.id = data.myid;
1112
+ this.team = data.myteam;
1113
+ this.game.host = data.hostid;
1114
+ this.game.roomid = data.roomid;
1115
+ this.game.roombypass = data.roombypass;
1116
+ this.game.teamslocked = data.teamslocked;
1117
+ for (let i = 0; i < data.playerdata.length; i++) {
1118
+ let player = data.playerdata[i];
1119
+ if (player != undefined || player != null) {
1120
+ player.id = i;
1121
+ player.username = player.userName;
1122
+ delete player.userName;
1123
+ player.here = true;
1124
+ this.game.players[player.id] = player;
1125
+ }
1126
+ }
1127
+ break;
1128
+ case "playerjoin":
1129
+ this.game.players[data.id] = {
1130
+ id: data.id,
1131
+ username: data.username,
1132
+ peerID: data.peerid,
1133
+ level: data.level,
1134
+ guest: data.guest,
1135
+ tabbed: data.tabbed,
1136
+ skin: data.skin,
1137
+ ready: false,
1138
+ here: true,
1139
+ };
1140
+ if (this.game.host == this.id) {
1141
+ this.socket.send(this.sendRoomInfo(data.id, data.username));
1142
+ }
1143
+ break;
1144
+ case "playerleave":
1145
+ // delete this.game.players[data.id]
1146
+ this.game.players[data.id].here = false;
1147
+ break;
1148
+ case "hosttransfer":
1149
+ this.game.host = data.newHost;
1150
+ break;
1151
+ case "playerready":
1152
+ this.game.players[data.id].ready = data.ready;
1153
+ break;
1154
+ case "teamslock":
1155
+ this.game.teamslocked = data.teamslocked;
1156
+ break;
1157
+ case "tabbed":
1158
+ this.game.players[data.id].tabbed = data.tabbed;
1159
+ break;
1160
+ case "roomnamechange":
1161
+ this.game.roomname = data.name;
1162
+ break;
1163
+ case "roundschange":
1164
+ this.game.rounds = data.rounds;
1165
+ break;
1166
+ case "hostleave":
1167
+ this.game.host = data.newid;
1168
+ break;
1169
+ case "playerkick":
1170
+ if (data.id == this.id) {
1171
+ this.banned = true;
1172
+ }
1173
+ break;
1174
+ case "ratelimit":
1175
+ if (data.limit == "banned") {
1176
+ bot.events.emit("banned");
1177
+ }
1178
+ break;
1179
+ }
1180
+ },
1181
+ keepAlive: function () {
1182
+ // send timesync every 5 seconds
1183
+ this.keepAliveLoop = setInterval(() => {
1184
+ this.socket.send(this.timesync());
1185
+ }, 5000);
1186
+ },
1187
+ init: async function () {
1188
+ this.token = await this.getToken();
1189
+ this.events.emit("ready");
1190
+ },
1191
+ connect: async function () {
1192
+ let self = this;
1193
+
1194
+ // clear previous events
1195
+ // this.events.removeAllListeners()
1196
+
1197
+ this.socketid = await self.getSocketID(this.server);
1198
+ this.socketAddr = `wss://${this.server}.bonk.io/socket.io/?EIO=3&transport=websocket&sid=${this.socketid}`;
1199
+ this.socket = new WebSocket(this.socketAddr);
1200
+ this.socket.addEventListener("open", () => {
1201
+ self.socket.send(`2probe`);
1202
+ self.socket.send(`5`);
1203
+ self.socket.send(self.timesync());
1204
+ self.joinRoom(self);
1205
+ this.connected = true;
1206
+ this.events.emit("connect");
1207
+ this.keepAlive();
1208
+ });
1209
+ this.socket.addEventListener("message", (e) => {
1210
+ let message = self.parseSocket(e.data);
1211
+ self.events.emit("packet", message);
1212
+ if (message.type == "chatmessage") {
1213
+ for (let i = 0; i < self.game.players.length; i++) {
1214
+ let player = self.game.players[i];
1215
+ if (player != undefined || player != null) {
1216
+ if (player.here == true) {
1217
+ if (player.id == message.id) {
1218
+ message.username = player.username;
1219
+ message.peerID = player.peerID;
1220
+ message.level = player.level;
1221
+ message.guest = player.guest;
1222
+ message.tabbed = player.tabbed;
1223
+ message.skin = player.avatar;
1224
+ message.ready = player.ready;
1225
+ message.team = player.team;
1226
+ message.id = player.id;
1227
+ message.here = player.here;
1228
+ }
1229
+ }
1230
+ }
1231
+ }
1232
+ self.events.emit("chatmessage", message);
1233
+ }
1234
+ if (message.type == "playerkick") {
1235
+ if (message.id == self.id) {
1236
+ self.events.emit("banned");
1237
+ self.events.removeAllListeners();
1238
+ self.socket.close();
1239
+ }
1240
+ }
1241
+ if (message.type == "playerleave") {
1242
+ self.events.emit("leave", message);
1243
+ }
1244
+ if (message.type == "playerjoin") {
1245
+ self.events.emit("join", message);
1246
+ }
1247
+ });
1248
+ this.socket.addEventListener("close", (e) => {
1249
+ self.events.emit("disconnect");
1250
+ this.connected = false;
1251
+ });
1252
+ },
1253
+ disconnect: function () {
1254
+ this.connected = false;
1255
+ if (this.socket) {
1256
+ this.socket.close();
1257
+ }
1258
+ },
1259
+ clearListeners: function () {
1260
+ this.events.removeAllListeners();
1261
+ },
1262
+ };
1263
+ };
1264
+ module.exports = {
1265
+ createBot: createBot,
1266
+ };