yolkbot 0.1.1-alpha.3 → 0.1.1-alpha.31

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yolkbot",
3
3
  "description": "create a shell shockers (self) bot in under 10 lines.",
4
- "version": "0.1.1-alpha.3",
4
+ "version": "0.1.1-alpha.31",
5
5
  "keywords": [
6
6
  "shell shockers",
7
7
  "shellshock.io",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "type": "module",
24
24
  "files": [
25
- "build/*.js",
25
+ "browser/build/*.js",
26
26
  "data/*.*",
27
27
  "src/**/*",
28
28
  "package.json",
@@ -35,11 +35,7 @@
35
35
  "import": "./src/api.js",
36
36
  "types": "./src/types/api.d.ts"
37
37
  },
38
- "./bot": {
39
- "import": "./src/bot.js",
40
- "types": "./src/types/bot.d.ts"
41
- },
42
- "./browser": "./build/browser.js",
38
+ "./browser": "./browser/build/module.js",
43
39
  "./comm": "./src/comm/index.js",
44
40
  "./matchmaker": {
45
41
  "import": "./src/matchmaker.js",
@@ -48,6 +44,18 @@
48
44
  "./packets": "./src/packet.js",
49
45
  "./pathing/*": "./src/pathing/*.js",
50
46
  "./pathing/*.js": "./src/pathing/*.js",
47
+ "./bot": {
48
+ "import": "./src/bot.js",
49
+ "types": "./src/types/bot.d.ts"
50
+ },
51
+ "./bot/*": {
52
+ "import": "./src/bot/*.js",
53
+ "types": "./src/types/bot/*.d.ts"
54
+ },
55
+ "./bot/*.js": {
56
+ "import": "./src/bot/*.js",
57
+ "types": "./src/types/bot/*.d.ts"
58
+ },
51
59
  "./constants": {
52
60
  "import": "./src/constants/index.js",
53
61
  "types": "./src/types/constants/index.d.ts"
package/src/api.js CHANGED
@@ -2,10 +2,10 @@ import axios from 'axios';
2
2
 
3
3
  import yolkws from './socket.js';
4
4
 
5
- import { FirebaseKey, IsBrowser, UserAgent } from '#constants';
5
+ import { FirebaseKey, ProxiesEnabled, UserAgent } from '#constants';
6
6
 
7
7
  let SocksProxyAgent;
8
- if (!IsBrowser) SocksProxyAgent = (await import('smallsocks')).SocksProxyAgent;
8
+ if (ProxiesEnabled) SocksProxyAgent = (await import('smallsocks')).SocksProxyAgent;
9
9
 
10
10
  const queryServices = async (request, proxy = '', instance = 'shellshock.io') => {
11
11
  let ws;
@@ -91,7 +91,7 @@ async function loginWithCredentials(email, password, prox = '', instance = 'shel
91
91
  'user-agent': UserAgent,
92
92
  'x-client-version': 'Chrome/JsCore/9.17.2/FirebaseCore-web'
93
93
  },
94
- httpsAgent: (!IsBrowser && prox) ? new SocksProxyAgent(prox) : false
94
+ httpsAgent: (ProxiesEnabled && prox) ? new SocksProxyAgent(prox) : false
95
95
  })
96
96
  body = request.data
97
97
  token = body.idToken;
@@ -143,7 +143,7 @@ async function loginWithRefreshToken(refreshToken, prox = '', instance = 'shells
143
143
  'user-agent': UserAgent,
144
144
  'x-client-version': 'Chrome/JsCore/9.17.2/FirebaseCore-web'
145
145
  },
146
- httpsAgent: (!IsBrowser && prox) ? new SocksProxyAgent(prox) : false
146
+ httpsAgent: (ProxiesEnabled && prox) ? new SocksProxyAgent(prox) : false
147
147
  })
148
148
  body = request.data
149
149
  token = body.id_token;
@@ -185,7 +185,7 @@ async function loginAnonymously(prox = '', instance = 'shellshock.io') {
185
185
  'user-agent': UserAgent,
186
186
  'x-client-version': 'Chrome/JsCore/9.17.2/FirebaseCore-web'
187
187
  },
188
- httpsAgent: (!IsBrowser && prox) ? new SocksProxyAgent(prox) : false
188
+ httpsAgent: (ProxiesEnabled && prox) ? new SocksProxyAgent(prox) : false
189
189
  });
190
190
 
191
191
  const token = body.idToken;
@@ -1,4 +1,4 @@
1
- import { GunList } from '#constants';
1
+ import { GunList, ShellStreaks, SocialMedias } from '#constants';
2
2
  import { Cluck9mm } from '../constants/guns.js';
3
3
 
4
4
  export class GamePlayer {
@@ -6,28 +6,31 @@ export class GamePlayer {
6
6
  this.id = id;
7
7
  this.team = team;
8
8
 
9
- this.data = playerData;
9
+ this.raw = playerData;
10
10
 
11
11
  this.name = playerData.name_;
12
12
  this.uniqueId = playerData.uniqueId_;
13
13
 
14
14
  this.playing = playerData.playing_;
15
15
 
16
- this.social = playerData.social_ && JSON.parse(playerData.social_);
16
+ this.socials = playerData.social_ && JSON.parse(playerData.social_);
17
+ if (this.socials) this.socials.forEach((social) => social.type = SocialMedias[social.id]);
18
+
19
+ this.isVip = playerData.upgradeProductId_ > 0;
17
20
  this.showBadge = !playerData.hideBadge_ || false;
18
21
 
19
22
  this.position = {
20
- x: this.data.x_,
21
- y: this.data.y_,
22
- z: this.data.z_
23
+ x: playerData.x_,
24
+ y: playerData.y_,
25
+ z: playerData.z_
23
26
  };
24
27
 
25
28
  this.jumping = false;
26
29
  this.climbing = false;
27
30
 
28
31
  this.view = {
29
- yaw: this.data.yaw_,
30
- pitch: this.data.pitch_
32
+ yaw: playerData.yaw_,
33
+ pitch: playerData.pitch_
31
34
  };
32
35
 
33
36
  this.character = {
@@ -40,15 +43,14 @@ export class GamePlayer {
40
43
  melee: playerData.meleeItem_
41
44
  }
42
45
 
43
- this.activeGun = this.data.weaponIdx_;
46
+ this.activeGun = playerData.weaponIdx_;
44
47
  this.selectedGun = 0;
45
48
  this.weapons = [{}, {}];
46
49
 
47
50
  if (this.character.primaryGun) {
48
- const weaponClass = GunList[this.character.primaryGun.exclusive_for_class];
49
- this.selectedGun = this.character.primaryGun.exclusive_for_class;
51
+ this.selectedGun = playerData.charClass_;
50
52
 
51
- this.weapons[0] = new weaponClass();
53
+ this.weapons[0] = new GunList[this.selectedGun]();
52
54
  this.weapons[1] = new Cluck9mm();
53
55
  }
54
56
 
@@ -60,11 +62,11 @@ export class GamePlayer {
60
62
  2: {}
61
63
  };
62
64
 
63
- this.kills = 0;
64
- this.hp = 100;
65
+ this.streak = playerData.score_;
66
+ this.hp = playerData.hp_;
65
67
 
66
- this.hpShield = 0;
67
- this.streakRewards = [];
68
+ this.hpShield = playerData.shield_;
69
+ this.streakRewards = Object.values(ShellStreaks).filter(streak => playerData.activeShellStreaks_ & streak);
68
70
 
69
71
  this.randomSeed = 0;
70
72
  this.serverStateIdx = 0;
package/src/bot.js CHANGED
@@ -2,7 +2,7 @@ import { createAccount, loginAnonymously, loginWithCredentials, loginWithRefresh
2
2
 
3
3
  import CommIn from './comm/CommIn.js';
4
4
  import CommOut from './comm/CommOut.js';
5
- import { CommCode } from './comm/Codes.js';
5
+ import { CommCode } from './constants/codes.js';
6
6
 
7
7
  import GamePlayer from './bot/GamePlayer.js';
8
8
  import Matchmaker from './matchmaker.js';
@@ -21,6 +21,7 @@ import {
21
21
  ItemTypes,
22
22
  Movements,
23
23
  PlayTypes,
24
+ ProxiesEnabled,
24
25
  ShellStreaks
25
26
  } from '#constants';
26
27
 
@@ -50,7 +51,7 @@ export class Bot {
50
51
  Intents = intents;
51
52
 
52
53
  constructor(params = {}) {
53
- if (params.proxy && IsBrowser)
54
+ if (params.proxy && !ProxiesEnabled)
54
55
  throw new Error('proxies do not work and hence are not supported in the browser');
55
56
 
56
57
  this.intents = params.intents || [];
@@ -434,7 +435,7 @@ export class Bot {
434
435
  this.game.socket.onmessage = (msg) => this._packetQueue.push(msg.data);
435
436
 
436
437
  if (this.autoUpdate)
437
- setInterval(() => this.update(), this.updateInterval);
438
+ this.updateIntervalId = setInterval(() => this.update(), this.updateInterval);
438
439
 
439
440
  if (this.intents.includes(this.Intents.PING)) {
440
441
  const out = CommOut.getBuffer();
@@ -560,6 +561,7 @@ export class Bot {
560
561
  this.game.socket.onclose = (e) => {
561
562
  // console.log('Game socket closed:', e.code, Object.entries(CloseCode).filter(([, v]) => v == e.code));
562
563
  this.emit('close', e.code);
564
+ this.quit(true, true);
563
565
  }
564
566
  }
565
567
 
@@ -723,7 +725,7 @@ export class Bot {
723
725
 
724
726
  return data;
725
727
  } else {
726
- const data = await (await fetch(`https://${this.instance}/maps/${name}.json?${hash}`)).json();
728
+ const data = await (await fetch(`https://esm.sh/gh/yolkorg/maps/maps/${name}.json`)).json();
727
729
  return data;
728
730
  }
729
731
  }
@@ -798,25 +800,21 @@ export class Bot {
798
800
 
799
801
  #processAddPlayerPacket() {
800
802
  const id_ = CommIn.unPackInt8U();
801
- const uniqueId = CommIn.unPackString();
802
- const name = CommIn.unPackString();
803
- const safename = CommIn.unPackString(); // ??? (a)
804
- const charClass = CommIn.unPackInt8U();
805
803
  const findCosmetics = this.intents.includes(this.Intents.COSMETIC_DATA);
806
804
  const playerData = {
807
805
  id_: id_,
808
- uniqueId_: uniqueId,
809
- name_: name,
810
- safename_: safename,
811
- charClass_: charClass,
806
+ uniqueId_: CommIn.unPackString(),
807
+ name_: CommIn.unPackString(),
808
+ safename_: CommIn.unPackString(),
809
+ charClass_: CommIn.unPackInt8U(),
812
810
  team_: CommIn.unPackInt8U(),
813
- primaryWeaponItem_: findItemById(CommIn.unPackInt16U()),
811
+ primaryWeaponItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
814
812
  secondaryWeaponItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
815
813
  shellColor_: CommIn.unPackInt8U(),
816
814
  hatItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
817
815
  stampItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
818
- unknownInt8: CommIn.unPackInt8(), // c
819
- otherUnknownInt8: CommIn.unPackInt8(),
816
+ _unused: CommIn.unPackInt8(),
817
+ _unused2: CommIn.unPackInt8(),
820
818
  grenadeItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
821
819
  meleeItem_: findCosmetics ? findItemById(CommIn.unPackInt16U()) : CommIn.unPackInt16U(),
822
820
  x_: CommIn.unPackFloat(),
@@ -828,6 +826,7 @@ export class Bot {
828
826
  yaw_: CommIn.unPackRadU(),
829
827
  pitch_: CommIn.unPackRad(),
830
828
  score_: CommIn.unPackInt32U(),
829
+ // the following are all stats
831
830
  kills_: CommIn.unPackInt16U(),
832
831
  deaths_: CommIn.unPackInt16U(),
833
832
  streak_: CommIn.unPackInt16U(),
@@ -835,6 +834,7 @@ export class Bot {
835
834
  totalDeaths_: CommIn.unPackInt32U(),
836
835
  bestGameStreak_: CommIn.unPackInt16U(),
837
836
  bestOverallStreak_: CommIn.unPackInt16U(),
837
+ // end stats
838
838
  shield_: CommIn.unPackInt8U(),
839
839
  hp_: CommIn.unPackInt8U(),
840
840
  playing_: CommIn.unPackInt8U(),
@@ -978,15 +978,15 @@ export class Bot {
978
978
 
979
979
  if (killed) {
980
980
  killed.playing = false;
981
- killed.kills = 0;
981
+ killed.streak = 0;
982
982
  killed.lastDeathTime = Date.now();
983
- // console.log(`Player ${killed.name} died.`);
983
+ killed.hp = 100;
984
+ killed.hpShield = 0;
984
985
  }
985
986
 
986
- if (killer) { killer.kills++; }
987
- // console.log(`Player ${killer.name} is on a streak of ${killer.kills} kills.`);
987
+ if (killer) killer.streak++;
988
988
 
989
- this.emit('playerDeath', killed, killer); // killed, killer
989
+ this.emit('playerDeath', killed, killer);
990
990
  }
991
991
 
992
992
  #processFirePacket() {
@@ -1301,7 +1301,7 @@ export class Bot {
1301
1301
  if (action == GameActions.reset) {
1302
1302
  // console.log('owner reset game');
1303
1303
 
1304
- this.me.kills = 0;
1304
+ Object.values(this.players).forEach((player) => player.streak = 0);
1305
1305
 
1306
1306
  if (this.game.gameModeId !== GameModes.ffa) this.game.teamScore = [0, 0, 0];
1307
1307
 
@@ -1353,7 +1353,7 @@ export class Bot {
1353
1353
  const oldTeam = player.team;
1354
1354
 
1355
1355
  player.team = toTeam;
1356
- player.kills = 0;
1356
+ player.streak = 0;
1357
1357
 
1358
1358
  this.emit('playerSwitchTeam', player, oldTeam, toTeam);
1359
1359
  }
@@ -1375,8 +1375,7 @@ export class Bot {
1375
1375
 
1376
1376
  const findCosmetics = this.intents.includes(this.Intents.COSMETIC_DATA);
1377
1377
 
1378
- const primaryWeaponItem = findItemById(primaryWeaponIdx);
1379
-
1378
+ const primaryWeaponItem = findCosmetics ? findItemById(primaryWeaponIdx) : primaryWeaponIdx;
1380
1379
  const secondaryWeaponItem = findCosmetics ? findItemById(secondaryWeaponIdx) : secondaryWeaponIdx;
1381
1380
  const hatItem = findCosmetics ? findItemById(hatIdx) : hatIdx;
1382
1381
  const stampItem = findCosmetics ? findItemById(stampIdx) : stampIdx;
@@ -1520,6 +1519,7 @@ export class Bot {
1520
1519
  this.emit('packet', packet);
1521
1520
 
1522
1521
  let lastCommand = 0;
1522
+ let lastCode = 0;
1523
1523
  let abort = false;
1524
1524
 
1525
1525
  while (CommIn.isMoreDataAvailable() && !abort) {
@@ -1665,13 +1665,14 @@ export class Bot {
1665
1665
  break;
1666
1666
 
1667
1667
  default:
1668
- console.error(`handlePacket: I got but did not handle a: ${Object.keys(CommCode).find(k => CommCode[k] === cmd)}`);
1669
- if (lastCommand) console.error(`handlePacket: It may be a result of the ${lastCommand} command.`);
1668
+ console.error(`handlePacket: I got but did not handle a: ${Object.keys(CommCode).find(k => CommCode[k] === cmd)} ${cmd}`);
1669
+ if (lastCommand) console.error(`handlePacket: It may be a result of the ${lastCommand} command (${lastCode}).`);
1670
1670
  abort = true
1671
1671
  break;
1672
1672
  }
1673
1673
 
1674
1674
  lastCommand = Object.keys(CommCode).find(k => CommCode[k] === cmd);
1675
+ lastCode = cmd;
1675
1676
  }
1676
1677
  }
1677
1678
 
@@ -1755,7 +1756,7 @@ export class Bot {
1755
1756
  return this.pathing.nodeList.hasLineOfSight(this.me.position, target.position);
1756
1757
  }
1757
1758
 
1758
- getBestTarget() {
1759
+ getBestTarget(customFilter = () => true) {
1759
1760
  const options = Object.values(this.players)
1760
1761
  .filter((player) => player)
1761
1762
  .filter((player) => player !== this.me)
@@ -1763,7 +1764,8 @@ export class Bot {
1763
1764
  .filter((player) => player.hp > 0)
1764
1765
  .filter((player) => player.name !== this.me.name)
1765
1766
  .filter((player) => this.me.team === 0 || player.team !== this.me.team)
1766
- .filter((player) => this.canSee(player));
1767
+ .filter((player) => this.canSee(player))
1768
+ .filter((player) => !!customFilter(player));
1767
1769
 
1768
1770
  let minDistance = 200;
1769
1771
  let targetPlayer = null;
@@ -1866,15 +1868,18 @@ export class Bot {
1866
1868
  return result;
1867
1869
  }
1868
1870
 
1869
- quit(noCleanup = false) {
1871
+ quit(noCleanup = false, finishDispatches = false) {
1870
1872
  if (this.intents.includes(this.Intents.PLAYER_HEALTH))
1871
1873
  clearInterval(this.healthIntervalId);
1872
1874
 
1873
- clearInterval(this.updateInterval);
1875
+ clearInterval(this.updateIntervalId);
1874
1876
 
1875
1877
  this.game.socket.close();
1876
1878
  this.matchmaker.close();
1877
1879
 
1880
+ if (!finishDispatches) this._dispatches = [];
1881
+ this._packetQueue = [];
1882
+
1878
1883
  if (!noCleanup) {
1879
1884
  delete this.account;
1880
1885
  delete this.game;
package/src/comm/Codes.js CHANGED
@@ -74,76 +74,6 @@ const CommCode = {
74
74
 
75
75
  */
76
76
 
77
- const CommCode = {
78
- swapWeapon: 0,
79
- joinGame: 0,
80
- refreshGameState: 0,
81
- spawnItem: 0,
82
- observeGame: 0,
83
- ping: 0,
84
- bootPlayer: 0,
85
- banPlayer: 0,
86
- loginRequired: 0,
87
- gameLocked: 0,
88
- reportPlayer: 0,
89
- banned: 0,
90
- createPrivateGame: 0,
91
- switchTeam: 0,
92
- changeCharacter: 0,
93
- pause: 0,
94
- gameOptions: 0,
95
- gameAction: 0,
96
- requestGameOptions: 0,
97
- gameJoined: 0,
98
- socketReady: 0,
99
- addPlayer: 0,
100
- removePlayer: 0,
101
- fire: 0,
102
- melee: 0,
103
- throwGrenade: 0,
104
- info: 0,
105
- eventModifier: 0,
106
- hitThem: 0,
107
- hitMe: 0,
108
- collectItem: 0,
109
- chlgPlayerRerollInGame: 0,
110
- playerInGameReward: 0,
111
- playerRewards: 0,
112
- chat: 0,
113
- syncThem: 0,
114
- syncAmmo: 0,
115
- die: 0,
116
- beginShellStreak: 0,
117
- endShellStreak: 0,
118
- startReload: 0,
119
- announcement: 0,
120
- updateBalance: 0,
121
- reload: 0,
122
- respawn: 0,
123
- respawnDenied: 0,
124
- pong: 0,
125
- clientReady: 0,
126
- requestRespawn: 0,
127
- joinPublicGame: 0,
128
- joinPrivateGame: 0,
129
- switchTeamFail: 0,
130
- expireUpgrade: 0,
131
- metaGameState: 0,
132
- syncMe: 0,
133
- explode: 0,
134
- keepAlive: 0,
135
- musicInfo: 0,
136
- hitMeHardBoiled: 0,
137
- playerInfo: 0,
138
- challengeCompleted: 0
139
- };
140
-
141
- let ih = 1;
142
-
143
- Object.keys(CommCode).forEach(e => {
144
- CommCode[e] = ih++;
145
- });
146
-
147
77
  const CloseCode = {
148
78
  gameNotFound: 4000,
149
79
  gameFull: 4001,
@@ -166,7 +96,4 @@ const CloseCode = {
166
96
  locked: 4023
167
97
  }
168
98
 
169
- export {
170
- CommCode,
171
- CloseCode
172
- }
99
+ export { CloseCode }
package/src/comm/index.js CHANGED
@@ -3,7 +3,7 @@ import CommOut from './CommOut.js';
3
3
  import OutBuffer from './OutBuffer.js';
4
4
  import Pool from './Pool.js';
5
5
 
6
- import { CommCode } from './Codes.js';
6
+ import { CommCode } from '../constants/codes.js';
7
7
  import { CloseCode } from './Codes.js';
8
8
 
9
9
  export {
@@ -0,0 +1,40 @@
1
+ /* eslint-disable */
2
+ export const CommCodes = {
3
+ "syncMe": 54,
4
+ "swapWeapon": 0,
5
+ "pause": 15,
6
+ "eventModifier": 27,
7
+ "gameOptions": 16,
8
+ "reload": 43,
9
+ "changeCharacter": 14,
10
+ "melee": 24,
11
+ "updateBalance": 42,
12
+ "gameAction": 17,
13
+ "requestGameOptions": 18,
14
+ "musicInfo": 57,
15
+ "challengeCompleted": 60,
16
+ "throwGrenade": 25,
17
+ "switchTeam": 13,
18
+ "ping": 5,
19
+ "endShellStreak": 39,
20
+ "metaGameState": 53,
21
+ "die": 37,
22
+ "socketReady": 20,
23
+ "joinGame": 1,
24
+ "gameJoined": 19,
25
+ "clientReady": 47,
26
+ "reportPlayer": 10,
27
+ "bootPlayer": 6,
28
+ "hitThem": 28,
29
+ "spawnItem": 3,
30
+ "collectItem": 30,
31
+ "beginShellStreak": 38,
32
+ "hitMe": 29,
33
+ "requestRespawn": 48,
34
+ "chat": 34,
35
+ "removePlayer": 22,
36
+ "respawnDenied": 45,
37
+ "syncThem": 35,
38
+ "respawn": 44,
39
+ "keepAlive": 56
40
+ };
@@ -38,7 +38,9 @@ const Eggk47 = class _Eggk47 extends Gun {
38
38
  this.shortReloadTime = 160;
39
39
 
40
40
  this.weaponName = 'EggK-47';
41
+ this.internalName = 'Eggk47';
41
42
  this.standardMeshName = 'eggk47';
43
+
42
44
  this.rof = 3;
43
45
  this.recoil = 7;
44
46
  this.automatic = true;
@@ -67,8 +69,10 @@ const DozenGauge = class _DozenGauge extends Gun {
67
69
  this.longReloadTime = 155;
68
70
  this.shortReloadTime = 155;
69
71
 
70
- this.weaponName = 'Dozen Gauge';
72
+ this.weaponName = 'Scrambler';
73
+ this.internalName = 'Dozen Gauge';
71
74
  this.standardMeshName = 'dozenGauge';
75
+
72
76
  this.rof = 8;
73
77
  this.recoil = 10;
74
78
  this.automatic = false;
@@ -121,8 +125,10 @@ const CSG1 = class _CSG1 extends Gun {
121
125
  this.shortReloadTime = 165;
122
126
  this.highPrecision = true;
123
127
 
124
- this.weaponName = 'CSG-1';
128
+ this.weaponName = 'Free Ranger';
129
+ this.internalName = 'CSG-1';
125
130
  this.standardMeshName = 'csg1';
131
+
126
132
  this.rof = 13;
127
133
  this.recoil = 13;
128
134
  this.automatic = false;
@@ -159,7 +165,9 @@ const Cluck9mm = class _Cluck9mm extends Gun {
159
165
  this.shortReloadTime = 160;
160
166
 
161
167
  this.weaponName = 'Cluck 9mm';
168
+ this.internalName = 'Cluck 9mm';
162
169
  this.standardMeshName = 'cluck9mm';
170
+
163
171
  this.rof = 4;
164
172
  this.recoil = 6;
165
173
  this.automatic = false;
@@ -199,7 +207,9 @@ const RPEGG = class _RPEGG extends Gun {
199
207
  this.shortReloadTime = 170;
200
208
 
201
209
  this.weaponName = 'RPEGG';
210
+ this.internalName = 'Eggsploder';
202
211
  this.standardMeshName = 'rpegg';
212
+
203
213
  this.rof = 40;
204
214
  this.recoil = 60;
205
215
  this.automatic = false;
@@ -236,7 +246,9 @@ const SMG = class _SMG extends Gun {
236
246
  this.shortReloadTime = 190;
237
247
 
238
248
  this.weaponName = 'Whipper';
249
+ this.internalName = 'SMEGG';
239
250
  this.standardMeshName = 'smg';
251
+
240
252
  this.rof = 10;
241
253
  this.recoil = 7;
242
254
  this.automatic = true;
@@ -276,7 +288,9 @@ const M24 = class _M24 extends Gun {
276
288
  this.shortReloadTime = 144;
277
289
 
278
290
  this.weaponName = 'Crackshot';
291
+ this.internalName = 'M2DZ';
279
292
  this.standardMeshName = 'm24';
293
+
280
294
  this.rof = 60;
281
295
  this.recoil = 40;
282
296
  this.automatic = false;
@@ -316,7 +330,9 @@ const AUG = class _AUG extends Gun {
316
330
  this.shortReloadTime = 160;
317
331
 
318
332
  this.weaponName = 'Tri-Hard';
333
+ this.internalName = 'AUG';
319
334
  this.standardMeshName = 'aug';
335
+
320
336
  this.rof = 15;
321
337
  this.recoil = 18;
322
338
  this.automatic = false;
@@ -71,6 +71,8 @@ export const PlayTypes = {
71
71
  joinPrivate: 2
72
72
  }
73
73
 
74
+ export const ProxiesEnabled = !IsBrowser && typeof Bun == 'undefined';
75
+
74
76
  export const ShellStreaks = {
75
77
  HardBoiled: 1,
76
78
  EggBreaker: 2,
@@ -80,6 +82,16 @@ export const ShellStreaks = {
80
82
  MiniEgg: 32
81
83
  }
82
84
 
85
+ export const SocialMedias = {
86
+ 0: 'Facebook',
87
+ 1: 'Instagram',
88
+ 2: 'Tiktok',
89
+ 3: 'Discord',
90
+ 4: 'Youtube',
91
+ 5: 'Twitter',
92
+ 6: 'Twitch'
93
+ }
94
+
83
95
  export const SocialRewards = {
84
96
  Discord: 'rew_1200',
85
97
  Tiktok: 'rew_1208',
@@ -105,5 +117,5 @@ export const URLRewards = [
105
117
  'WelcomeBack'
106
118
  ]
107
119
 
108
- export const UserAgent =
120
+ export const UserAgent = IsBrowser ? undefined :
109
121
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'