yolkbot 0.1.4-alpha.9 → 0.1.4
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 +5 -3
- package/browser/build/global.js +1 -1
- package/browser/build/module.js +1 -1
- package/dist/api.js +1 -1
- package/dist/bot/GamePlayer.js +1 -1
- package/dist/bot.js +1 -1
- package/dist/constants/changelog.js +1 -1
- package/dist/constants/codes.js +1 -1
- package/dist/constants/housePromo.js +1 -1
- package/dist/constants/items.js +1 -1
- package/dist/constants/language.js +1 -1
- package/dist/constants/maps.js +1 -1
- package/dist/constants/shellNews.js +1 -1
- package/dist/constants/shopItems.js +1 -1
- package/dist/constants/sounds.js +1 -1
- package/dist/matchmaker.js +1 -1
- package/dist/pathing/mapnode.js +1 -1
- package/dist/types/bot.d.ts +8 -1
- package/dist/types/comm/CommIn.d.ts +22 -0
- package/dist/types/comm/CommOut.d.ts +10 -0
- package/dist/types/comm/OutBuffer.d.ts +24 -0
- package/dist/types/comm/Pool.d.ts +20 -0
- package/dist/types/comm/index.d.ts +12 -3
- package/dist/types/constants/challenges.d.ts +1 -1
- package/dist/types/constants/codes.d.ts +43 -43
- package/dist/types/constants/items.d.ts +1 -1
- package/dist/types/constants/maps.d.ts +1 -1
- package/dist/types/matchmaker.d.ts +2 -0
- package/dist/types/util.d.ts +2 -0
- package/dist/util.js +3 -0
- package/package.json +9 -5
package/dist/api.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
import d from"./globals.js";import y from"./socket.js";import{FirebaseKey as k,UserAgent as g}from"./constants/index.js";const f=async(o,r="",i="shellshock.io")=>{let e;const s=async()=>{try{e=new y(
|
|
3
|
+
import d from"./globals.js";import y from"./socket.js";import{FirebaseKey as k,UserAgent as g}from"./constants/index.js";const f=async(o,r="",i="wss://shellshock.io")=>{let e;const s=async()=>{try{e=new y(`${i}/services/`,r),e.onerror=async t=>(console.error(t),await new Promise(n=>setTimeout(n,100)),await s())}catch{await new Promise(t=>setTimeout(t,100)),await s()}};return await s(),new Promise(t=>{e.onopen=()=>{e.onerror=null,e.send(JSON.stringify(o))};let n=!1;e.onmessage=c=>{n=!0;try{const a=JSON.parse(c.data);t(a)}catch{console.error("queryServices: Bad API JSON response with call: "+o.cmd+" and data:",JSON.stringify(o)),console.error("queryServices: Full data sent: ",JSON.stringify(o)),t("bad_json")}e.close()},e.onerror=()=>!n&&t("unknown_socket_error"),e.onclose=()=>!n&&t("services_closed_early")})};async function _(o,r,i="",e="wss://shellshock.io"){return await p(o,r,i,e,!0)}async function p(o,r,i="",e="wss://shellshock.io",s){if(!o||!r)return"firebase_no_credentials";const t=s?"signUp":"signInWithPassword";let n=!1,c,a,u,l=0;for(;!n;)try{c=await d.fetch(`https://identitytoolkit.googleapis.com/v1/accounts:${t}?key=${k}`,{method:"POST",body:JSON.stringify({email:o,password:r,returnSecureToken:!0}),headers:{"content-type":"application/json",origin:"https://shellshock.io","user-agent":g,"x-client-version":"Chrome/JsCore/9.17.2/FirebaseCore-web","x-firebase-locale":"en"},dispatcher:i?new d.ProxyAgent(i.replace(/socks([4|5|4a|5h]+)/g,"https")):void 0}),a=await c.json(),u=a.idToken,n=!0}catch(h){if(++l,h.code=="auth/network-request-failed")console.error("loginWithCredentials: Network req failed (auth/network-request-failed), retrying, k =",l);else{if(h.code=="auth/missing-email")return"firebase_no_credentials";h.code=="ERR_BAD_REQUEST"?(console.error("loginWithCredentials: Error:",o,r),console.error("loginWithCredentials: Error:",h.response?.data||h,"k =",l)):(console.error("loginWithCredentials: Error:",o,r),console.error("loginWithCredentials: Error:",h,"k =",l))}if(l>5)return"firebase_too_many_retries";await new Promise(m=>setTimeout(m,100))}return u?await f({cmd:"auth",firebaseToken:u},i,e):(console.error("loginWithCredentials: the game sent no idToken",a),"firebase_no_token")}async function b(o,r="",i="wss://shellshock.io"){if(!o)return"firebase_no_credentials";const e=new URLSearchParams;e.append("grant_type","refresh_token"),e.append("refresh_token",o);let s=!1,t,n,c,a=0;for(;!s;)try{t=await d.fetch(`https://securetoken.googleapis.com/v1/token?key=${k}`,{method:"POST",body:e,headers:{"content-type":"application/x-www-form-urlencoded",origin:"https://shellshock.io","user-agent":g,"x-client-version":"Chrome/JsCore/9.17.2/FirebaseCore-web","x-firebase-locale":"en"},dispatcher:r?new d.ProxyAgent(r.replace(/socks([4|5|4a|5h]+)/g,"https")):void 0}),n=await t.json(),c=n.id_token,s=!0}catch(l){if(++a,l.code=="auth/network-request-failed")console.error("loginWithRefreshToken: Network req failed (auth/network-request-failed), retrying, k =",a);else{if(l.code=="auth/missing-email")return"firebase_no_credentials";console.error("loginWithRefreshToken: Error:",o),console.error("loginWithRefreshToken: Error:",l,"k =",a)}if(a>5)return"firebase_too_many_retries";await new Promise(w=>setTimeout(w,100))}return c?await f({cmd:"auth",firebaseToken:c},r,i):(console.error("loginWithRefreshToken: the game sent no idToken",n),"firebase_no_token")}async function S(o="",r="wss://shellshock.io"){const e=await(await d.fetch("https://identitytoolkit.googleapis.com/v1/accounts:signUp?key="+k,{method:"POST",body:JSON.stringify({returnSecureToken:!0}),headers:{"content-type":"application/json",origin:"https://shellshock.io","user-agent":g,"x-client-version":"Chrome/JsCore/9.17.2/FirebaseCore-web","x-firebase-locale":"en"},dispatcher:o?new d.ProxyAgent(o.replace(/socks([4|5|4a|5h]+)/g,"https")):void 0})).json(),s=e.idToken;return s?await f({cmd:"auth",firebaseToken:s},o,r):(console.error("loginAnonymously: the game sent no idToken",e),"firebase_no_token")}export{_ as createAccount,S as loginAnonymously,p as loginWithCredentials,b as loginWithRefreshToken,f as queryServices};
|
package/dist/bot/GamePlayer.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
import{GunList as n,ShellStreaks as o,SocialMedias as h}from"../constants/index.js";import{Cluck9mm as c}from"../constants/guns.js";class r{constructor(e=-1,t=0,
|
|
3
|
+
import{GunList as n,ShellStreaks as o,SocialMedias as h}from"../constants/index.js";import{Cluck9mm as c}from"../constants/guns.js";class r{constructor(e=-1,t=0,i){this.id=e,this.team=t,this.raw=i,this.name=i.name_,this.uniqueId=i.uniqueId_,this.playing=i.playing_,this.socials=i.social_&&JSON.parse(i.social_),this.socials&&this.socials.forEach(s=>s.type=h[s.id]),this.isVip=i.upgradeProductId_>0,this.showBadge=!i.hideBadge_||!1,this.position={x:i.x_,y:i.y_,z:i.z_},this.jumping=!1,this.climbing=!1,this.view={yaw:i.yaw_,pitch:i.pitch_},this.character={eggColor:i.shellColor_,primaryGun:i.primaryWeaponItem_,secondaryGun:i.secondaryWeaponItem_,stamp:i.stampItem_,hat:i.hatItem_,grenade:i.grenadeItem_,melee:i.meleeItem_},this.activeGun=i.weaponIdx_,this.selectedGun=i.charClass_,this.weapons=[{},{}],this.character.primaryGun&&(this.weapons[0]=new n[this.selectedGun],this.weapons[1]=new c),this.grenades=1,this.buffer={0:{},1:{},2:{}},this.streak=i.score_,this.hp=i.hp_,this.hpShield=i.shield_,this.streakRewards=Object.values(o).filter(s=>i.activeShellStreaks_&s),this.randomSeed=0,this.serverStateIdx=0}dispatch(){throw new Error("you cannot call this function from a GamePlayer. call dispatch() on an instance of Bot instead.")}join(){throw new Error("you cannot call this function from a GamePlayer. call join() on an instance of Bot instead.")}update(){throw new Error("you cannot call this function from a GamePlayer. call update() on an instance of Bot instead.")}}var _=r;export{r as GamePlayer,_ as default};
|
package/dist/bot.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
import{createAccount as B,loginAnonymously as L,loginWithCredentials as D,loginWithRefreshToken as H,queryServices as f}from"./api.js";import s from"./comm/CommIn.js";import P from"./comm/CommOut.js";import{CommCode as r}from"./constants/codes.js";import x from"./bot/GamePlayer.js";import W from"./matchmaker.js";import j from"./socket.js";import{ChiknWinnerDailyLimit as $,CollectTypes as _,CoopStates as w,findItemById as g,GameActions as C,GameModes as k,GameOptionFlags as v,GunList as q,IsBrowser as K,ItemTypes as Z,Movements as T,PlayTypes as Y,ProxiesEnabled as J,ShellStreaks as p}from"./constants/index.js";import R from"./dispatches/LookAtPosDispatch.js";import O from"./dispatches/MovementDispatch.js";import{NodeList as Q}from"./pathing/mapnode.js";import{Challenges as V}from"./constants/challenges.js";import{Maps as U}from"./constants/maps.js";const M=Object.fromEntries(Object.entries(w).map(([y,t])=>[t,y])),E=Object.fromEntries(Object.entries(k).map(([y,t])=>[t,y])),F={CHALLENGES:1,STATS:2,PATHFINDING:3,BUFFERS:4,PING:5,COSMETIC_DATA:6,PLAYER_HEALTH:7,PACKET_HOOK:8,MONITOR:9};class X{static Intents=F;Intents=F;constructor(t={}){if(t.proxy&&!J)throw new Error("proxies do not work and hence are not supported in the browser");this.intents=t.intents||[],this.instance=t.instance||"shellshock.io",this.proxy=t.proxy||"",this.autoUpdate=t.doUpdate||!0,this.updateInterval=t.updateInterval||16.5,this._hooks={},this._globalHooks=[],this._liveCallbacks=[],this.state={name:"",weaponIdx:0,reloading:!1,swappingGun:!1,usingMelee:!1,shotsFired:0,quit:!1},this.players={},this.me=new x(this.id,0,{}),this.game={raw:{},code:"",socket:null,gameModeId:0,gameMode:E[0],mapIdx:0,map:{filename:"",hash:"",name:"",modes:{FFA:!1,Teams:!1,Spatula:!1,King:!1},availability:"both",numPlayers:"18",raw:{},nodes:{},zones:[]},playerLimit:0,isGameOwner:!1,isPrivate:!0,options:{gravity:1,damage:1,healthRegen:1,locked:!1,noTeamChange:!1,noTeamShuffle:!1,weaponsDisabled:Array(7).fill(!1),mustUseSecondary:!1},collectables:[[],[]],teamScore:[0,0,0],spatula:{coords:{x:0,y:0,z:0},controlledBy:0,controlledByTeam:0},stage:w.capturing,zoneNumber:0,activeZone:[],capturing:0,captureProgress:0,numCapturing:0,stageName:"",capturePercent:0,eggOrg:{evil:0,good:0}},this.account={id:0,firebaseId:"",sessionId:"",session:"",email:"",password:"",cw:{atLimit:!1,limit:0,secondsUntilPlay:0,canPlayAgain:Date.now()},loadout:{hatId:null,meleeId:0,stampId:null,classIdx:0,colorIdx:0,grenadeId:0,primaryId:[3100,3600,3400,3800,4e3,4200,4500],secondaryId:new Array(7).fill(3e3),stampPositionX:0,stampPositionY:0},ownedItemIds:[],vip:!1,accountAge:0,emailVerified:!1,eggBalance:0,eggOrgSide:"none",rawLoginData:{}},this._dispatches=[],this._packetQueue=[],this.matchmaker=null,this.ping=0,this.lastPingTime=-1,this.lastDeathTime=-1,this.lastChatTime=-1,this.lastUpdateTime=-1,this.controlKeys=0,this.pathing={nodeList:null,followingPath:!1,activePath:null,activeNode:null,activeNodeIdx:0},this.intents.includes(this.Intents.PLAYER_HEALTH)&&(this.healthIntervalId=setInterval(()=>{if(this.players){for(const e of Object.values(this.players))if(e.playing&&e.hp>0){const a=.1*(this.game.isPrivate?this.game.options.healthRegen:1);e.streakRewards.includes(p.OverHeal)?e.hp=Math.max(100,e.hp-a):e.hp=Math.min(100,e.hp+a)}}},33))}dispatch(t){this._dispatches.push(t)}async createAccount(t,e){this.account.email=t,this.account.password=e;const a=await B(t,e,this.proxy,this.instance);return await this.#e(a)}async login(t,e){this.account.email=t,this.account.password=e;const a=await D(t,e,this.proxy,this.instance);return await this.#e(a)}async loginWithRefreshToken(t){const e=await H(t,this.proxy,this.instance);return await this.#e(e)}async loginAnonymously(){delete this.account.email,delete this.account.password;const t=await L(this.proxy,this.instance);return await this.#e(t)}async#e(t){return typeof t!="object"?(this.emit("authFail",t),!1):t.banRemaining?(this.emit("banned",t.banRemaining),!1):t.playerOutput?(t=t.playerOutput,this.account.rawLoginData=t,this.account.accountAge=t.accountAge,this.account.eggBalance=t.currentBalance,this.account.eggOrgSide=t.eggOrgNeedsFaction==="rew_eggfu"?"good":"evil",this.account.emailVerified=t.emailVerified,this.account.firebaseId=t.firebaseId,this.account.id=t.id,this.account.loadout=t.loadout,this.account.ownedItemIds=t.ownedItemIds,this.account.session=t.session,this.account.sessionId=t.sessionId,this.account.vip=t.upgradeProductId&&!t.upgradeIsExpired,this.intents.includes(this.Intents.STATS)&&(this.account.stats={lifetime:t.statsLifetime,monthly:t.statsCurrent}),this.intents.includes(this.Intents.CHALLENGES)&&this.#t(t.challenges),this.account):(this.emit("authFail",t),!1)}#t(t){this.account.challenges=[];for(const e of t){const a=V.find(n=>n.id==e.challengeId);a&&(delete e.playerId,this.account.challenges.push({raw:{challengeInfo:a,challengeData:e},id:e.challengeId,name:a.loc.title,desc:a.loc.desc,rewardEggs:a.reward,isRerolled:!!e.reset,isClaimed:!!e.claimed,isCompleted:!!e.completed,progressNum:e.progress,goalNum:a.goal}))}}async initMatchmaker(){return!this.account.sessionId&&!await this.loginAnonymously()?!1:(this.matchmaker||(this.matchmaker=new W({sessionId:this.account.sessionId,proxy:this.proxy,instance:this.instance}),this.matchmaker.on("authFail",t=>this.emit("authFail",t)),await this.matchmaker.getRegions()),!0)}async#n(t){return await this.initMatchmaker()?await new Promise(e=>{const a=n=>{if(n.command=="gameFound"&&(this.matchmaker.off("msg",a),this.game.raw=n,this.game.code=n.id,e()),n.error&&n.error=="gameNotFound")throw new Error(`Game ${t} not found (likely expired).`)};this.matchmaker.on("msg",a),this.matchmaker.send({command:"joinGame",id:t,observe:!1,sessionId:this.account.sessionId})}):!1}async createPrivateGame(t={}){if(!await this.initMatchmaker())return!1;if(!t.region)throw new Error('pass a region: createPrivateGame({ region: "useast", ... })');if(!this.matchmaker.regionList.find(n=>n.id==t.region))throw new Error('invalid region, see <bot>.matchmaker.regionList for a region list (pass an "id")');if(!t.mode)throw new Error('pass a mode: createPrivateGame({ mode: "ffa", ... })');if(k[t.mode]==null)throw new Error("invalid mode, see GameModes for a list");if(!t.map)throw new Error('pass a map: createPrivateGame({ map: "downfall", ... })');const e=U.find(n=>n.name.toLowerCase()==t.map.toLowerCase()),a=U.indexOf(e);if(a==-1)throw new Error("invalid map, see the Maps constant for a list");return await new Promise(n=>{const i=o=>{o.command=="gameFound"&&(this.matchmaker.off("msg",i),this.game.raw=o,this.game.code=this.game.raw.id,n())};this.matchmaker.on("msg",i),this.matchmaker.send({command:"findGame",region:t.region,playType:Y.createPrivate,gameType:k[t.mode],sessionId:this.account.sessionId,noobLobby:!1,map:a})}),this.game.raw}async join(t,e){if(this.state.name=t||"yolkbot",typeof e=="string"?(e.includes("#")&&(e=e.split("#")[1]),await this.#n(e)):typeof e=="object"&&(this.account.id==0&&await this.loginAnonymously(),this.game.raw=e,this.game.code=this.game.raw.id),!this.game.raw.id||!this.game.raw.subdomain)throw new Error("invalid game data passed to <bot>.join");const a=async()=>{try{this.game.socket=new j(`wss://${this.game.raw.subdomain}.${this.instance}/game/${this.game.raw.id}`,this.proxy),this.game.socket.onerror=async n=>(console.error(n),await new Promise(i=>setTimeout(i,100)),await a())}catch{await new Promise(n=>setTimeout(n,100)),await a()}};await a(),this.game.socket.binaryType="arraybuffer",this.game.socket.onopen=()=>{this.game.socket.onerror=null},this.game.socket.onmessage=n=>this.processPacket(n.data),this.game.socket.onclose=n=>{this.emit("close",n.code),this.quit(!0,!0)}}#i(){if(Object.entries(this.me.position).map(e=>Math.floor(e[1])).join(",")==this.pathing.activePath[this.pathing.activePath.length-1].positionStr())this.pathing.followingPath=!1,this.pathing.activePath=null,this.pathing.activeNode=null,this.pathing.activeNodeIdx=0,this.dispatch(new O(0));else{let e;this.pathing.activeNodeIdx<this.pathing.activePath.length-1?(e=this.pathing.activePath[this.pathing.activeNodeIdx+1].flatCenter(),this.dispatch(new R(e))):(e=this.pathing.activePath[this.pathing.activeNodeIdx].flatCenter(),this.dispatch(new R(e)));for(const a of this.pathing.activePath)if(a.flatRadialDistance(this.me.position)<.1&&a.position.y==Math.floor(this.me.position.y)&&this.pathing.activePath.indexOf(a)>=this.pathing.activeNodeIdx){this.pathing.activeNodeIdx=this.pathing.activePath.indexOf(a)+1,this.pathing.activeNode=this.pathing.activePath[this.pathing.activeNodeIdx];break}this.controlKeys&T.FORWARD||this.dispatch(new O(T.FORWARD))}}update(){if(!this.state.joinedGame)throw new Error("You cannot call update() if the bot is not in a game.");if(this.state.quit)return;for(this.pathing.followingPath&&this.intents.includes(this.Intents.PATHFINDING)&&this.#i();this._packetQueue.length>0;)this.processPacket(this._packetQueue.shift());if(this._dispatches.length>0)for(let e=0;e<this._dispatches.length;e++){const a=this._dispatches[e];if(a.check(this)){a.execute(this),this._dispatches.splice(e,1);break}}const t=Date.now();if(t-this.lastUpdateTime>=50){if(this.emit("tick"),!this.intents.includes(this.Intents.MONITOR)){const e=P.getBuffer();e.packInt8(r.syncMe),e.packInt8(Math.random()*128|0),e.packInt8(this.me.serverStateIdx);for(let a=0;a<3;a++)e.packInt8(this.controlKeys),e.packInt8(this.state.shotsFired),e.packRadU(this.me.view.yaw),e.packRad(this.me.view.pitch),e.packInt8(100);e.send(this.game.socket)}this.lastUpdateTime=t,this.state.shotsFired=0}for(;this._liveCallbacks.length>0;)this._liveCallbacks.shift()()}on(t,e){Object.keys(this._hooks).includes(t)?this._hooks[t].push(e):this._hooks[t]=[e]}onAny(t){this._globalHooks.push(t)}#a=["authFail","banned"];emit(t,...e){if(!this.state.quit){if(this._hooks[t])for(const a of this._hooks[t])this.#a.includes(t)?a(...e):this._liveCallbacks.push(()=>a(...e));for(const a of this._globalHooks)this.#a.includes(t)?a(t,...e):this._liveCallbacks.push(()=>a(t,...e))}}async#o(t,e){if(K)return await(await fetch(`https://esm.sh/gh/yolkorg/maps/maps/${t}.json`)).json();{const{existsSync:a,mkdirSync:n,readFileSync:i,writeFileSync:o}=await import("node:fs"),{join:c}=await import("node:path"),{homedir:l}=await import("node:os"),m=c(l(),".yolkbot"),d=c(m,"maps");a(m)||n(m),a(d)||n(d);const h=c(d,`${t}-${e}.json`);if(a(h))return JSON.parse(i(h,"utf-8"));console.log("map not in cache, IMPORT!!",t,e);const I=await(await fetch(`https://${this.instance}/maps/${t}.json?${e}`)).json();return o(h,JSON.stringify(I,null,4),{flag:"w+"}),I}}#c(){const t=this.game.map.raw.data["DYNAMIC.capture-zone.none"];if(!t)return delete this.game.map.zones;let e=0;const a={},n=[];for(const c of t)a[c.x]||(a[c.x]={}),a[c.x][c.y]||(a[c.x][c.y]={}),a[c.x][c.y][c.z]={zone:null};const i=[{x:-1,z:0},{x:1,z:0},{x:0,z:-1},{x:0,z:1}];function o(c,l,m){return a[c]&&a[c][l]&&a[c][l][m]?a[c][l][m]:null}for(const c of t)if(!a[c.x][c.y][c.z].zone){c.zone=++e,a[c.x][c.y][c.z].zone=c.zone;const l=[c];let m;do{m=0;for(const d of t)if(!a[d.x][d.y][d.z].zone)for(const h of i){const I=o(d.x+h.x,d.y,d.z+h.z);if(I&&I.zone==c.zone){m++,d.zone=c.zone,a[d.x][d.y][d.z].zone=c.zone,l.push(d);break}}}while(m>0);n.push(l)}this.game.map.zones=n}#r(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=s.unPackString().valueOf(),n=this.players[Object.keys(this.players).find(i=>this.players[i].id==t)];this.emit("chat",n,a,e)}#h(){const t=s.unPackInt8U(),e=this.intents.includes(this.Intents.COSMETIC_DATA),a={id_:t,uniqueId_:s.unPackString(),name_:s.unPackString(),safename_:s.unPackString(),charClass_:s.unPackInt8U(),team_:s.unPackInt8U(),primaryWeaponItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),secondaryWeaponItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),shellColor_:s.unPackInt8U(),hatItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),stampItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),_unused:s.unPackInt8(),_unused2:s.unPackInt8(),grenadeItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),meleeItem_:e?g(s.unPackInt16U()):s.unPackInt16U(),x_:s.unPackFloat(),y_:s.unPackFloat(),z_:s.unPackFloat(),dx_:s.unPackFloat(),dy_:s.unPackFloat(),dz_:s.unPackFloat(),yaw_:s.unPackRadU(),pitch_:s.unPackRad(),score_:s.unPackInt32U(),kills_:s.unPackInt16U(),deaths_:s.unPackInt16U(),streak_:s.unPackInt16U(),totalKills_:s.unPackInt32U(),totalDeaths_:s.unPackInt32U(),bestGameStreak_:s.unPackInt16U(),bestOverallStreak_:s.unPackInt16U(),shield_:s.unPackInt8U(),hp_:s.unPackInt8U(),playing_:s.unPackInt8U(),weaponIdx_:s.unPackInt8U(),controlKeys_:s.unPackInt8U(),upgradeProductId_:s.unPackInt8U(),activeShellStreaks_:s.unPackInt8U(),social_:s.unPackLongString(),hideBadge_:s.unPackInt8U()};a.gameData_={},a.gameData_.mapIdx=s.unPackInt8U(),a.gameData_.private=s.unPackInt8U(),a.gameData_.gameType=s.unPackInt8U(),this.players[a.id_]||(this.players[a.id_]=new x(a.id_,a.team_,a)),this.me.id==a.id_&&(this.me=this.players[a.id_]),this.emit("playerJoin",this.players[a.id_])}#l(){const t=s.unPackInt8U(),e=s.unPackInt16U(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackInt8U(),c=s.unPackInt8U(),l=s.unPackInt8U(),m=s.unPackInt8U(),d=s.unPackInt8U(),h=this.players[t];h&&(h.playing=!0,h.randomSeed=e,h.weapons[0]&&h.weapons[0].ammo&&(h.weapons[0].ammo.rounds=o),h.weapons[0]&&h.weapons[0].ammo&&(h.weapons[0].ammo.store=c),h.weapons[1]&&h.weapons[1].ammo&&(h.weapons[1].ammo.rounds=l),h.weapons[1]&&h.weapons[1].ammo&&(h.weapons[1].ammo.store=m),h.grenades=d,h.position={x:a,y:n,z:i},this.emit("playerRespawn",h))}#m(){const t=s.unPackInt8U(),e=s.unPackFloat(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackInt8U(),o=this.players[t];if(!o||o.id==this.me.id){for(let c=0;c<3;c++)s.unPackInt8U(),s.unPackRadU(),s.unPackRad(),s.unPackInt8U();return}if(o.position.x!==e&&(o.position.x=e),o.position.z!==n&&(o.position.z=n),(!o.jumping||Math.abs(o.position.y-a)>.5&&o.position.y!==a)&&(o.position.y=a),o.climbing!==i&&(o.climbing=i),this.intents.includes(this.Intents.BUFFERS)){if(!o.buffer)return;for(let c=0;c<3;c++){o.buffer[c].controlKeys=s.unPackInt8U();const l=s.unPackRadU();isNaN(l)||(o.buffer[c].yaw_=l);const m=s.unPackRad();isNaN(m)||(o.buffer[c].pitch_=m),s.unPackInt8U()}o.buffer[0].x=e,o.buffer[0].y=a,o.buffer[0].z=n}else for(let c=0;c<3;c++)s.unPackInt8U(),s.unPackRadU(),s.unPackRad(),s.unPackInt8U()}#d(){const t=s.unPackInt8U(),e=this.players[t];e&&(e.playing=!1,this.emit("playerPause",e))}#u(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];a&&(a.activeGun=e,this.emit("playerSwapWeapon",a,e))}#p(){const t=s.unPackInt8U(),e=s.unPackInt8U();s.unPackInt8U(),s.unPackInt8U(),s.unPackInt8U();const a=this.players[t],n=this.players[e];a&&(a.playing=!1,a.streak=0,a.lastDeathTime=Date.now(),a.hp=100,a.hpShield=0),n&&n.streak++,this.emit("playerDeath",a,n)}#g(){const t=s.unPackInt8U();for(let n=0;n<6;n++)s.unPackFloat();const e=this.players[t],a=e.weapons[e.activeGun];a&&a.ammo&&(a.ammo.rounds--,this.emit("playerFire",e,a))}#k(){const t=s.unPackInt16U(),e=s.unPackInt8U(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat();this.game.collectables[e].push({id:t,x:a,y:n,z:i}),this.emit("spawnItem",e,t,{x:a,y:n,z:i})}#f(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=s.unPackInt8U(),n=s.unPackInt16U(),i=this.players[t];if(this.game.collectables[e]=this.game.collectables[e].filter(o=>o.id!=n),e==_.AMMO){const o=i.weapons[a];o&&o.ammo&&(o.ammo.store=Math.min(o.ammo.storeMax,o.ammo.store+o.ammo.pickup),this.emit("collectAmmo",i,o))}e==_.GRENADE&&(i.grenades++,i.grenades>3&&(i.grenades=3),this.emit("collectGrenade",i))}#I(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];if(!a)return;const n=a.hp;a.hp=e,this.emit("playerDamaged",a,n,a.hp)}#P(){const t=s.unPackInt8U();s.unPackFloat(),s.unPackFloat();const e=this.me.hp;this.me.hp=t,this.emit("selfDamaged",e,this.me.hp)}#y(){const t=s.unPackInt8U(),e=this.players[t];s.unPackInt8U();const a=s.unPackInt8U(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackFloat();if(s.unPackInt8U(),s.unPackInt8U(),s.unPackInt8U(),!e)return;e.serverStateIdx=a;const c=e.position.x,l=e.position.y,m=e.position.z;e.position.x=n,e.position.y=i,e.position.z=o,(c!=n||l!=i||m!=o)&&this.emit("selfMoved",e,{x:c,y:l,z:m},{x:n,y:i,z:o})}#w(){if(!this.intents.includes(this.Intents.MONITOR)){const t=P.getBuffer();t.packInt8(r.eventModifier),t.send(this.game.socket)}}#U(){const t=s.unPackInt8U(),e={...this.players[t]};delete this.players[t.toString()],this.emit("playerLeave",e)}#b(){if(this.game.gameModeId==k.spatula){this.game.teamScore[1]=s.unPackInt16U(),this.game.teamScore[2]=s.unPackInt16U();const t={x:s.unPackFloat(),y:s.unPackFloat(),z:s.unPackFloat()},e=s.unPackInt8U(),a=s.unPackInt8U();this.game.spatula={coords:t,controlledBy:e,controlledByTeam:a},this.emit("gameStateChange",this.game)}else this.game.gameModeId==k.kotc?(this.game.stage=s.unPackInt8U(),this.game.zoneNumber=s.unPackInt8U(),this.game.capturing=s.unPackInt8U(),this.game.captureProgress=s.unPackInt16U(),this.game.numCapturing=s.unPackInt8U(),this.game.teamScore[1]=s.unPackInt8U(),this.game.teamScore[2]=s.unPackInt8U(),this.game.stageName=M[this.game.stage],this.game.capturePercent=this.game.captureProgress/1e3,this.game.activeZone=this.game.map.zones?this.game.map.zones[this.game.zoneNumber-1]:null,this.emit("gameStateChange",this.game)):this.game.gameModeId==k.team&&(this.game.teamScore[1]=s.unPackInt16U(),this.game.teamScore[2]=s.unPackInt16U());this.game.gameModeId!==k.spatula&&delete this.game.spatula,this.game.gameModeId!==k.kotc&&(delete this.game.stage,delete this.game.zoneNumber,delete this.game.capturing,delete this.game.captureProgress,delete this.game.numCapturing,delete this.game.stageName,delete this.game.numCapturing,delete this.game.activeZone),this.game.gameModeId==k.ffa&&delete this.game.teamScore}#S(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];switch(e){case p.HardBoiled:a.hpShield=100,a.streakRewards.push(p.HardBoiled);break;case p.EggBreaker:a.streakRewards.push(p.EggBreaker);break;case p.Restock:{a.grenades=3,a.weapons[0]&&a.weapons[0].ammo&&(a.weapons[0].ammo.rounds=a.weapons[0].ammo.capacity,a.weapons[0].ammo.store=a.weapons[0].ammo.storeMax),a.weapons[1]&&a.weapons[1].ammo&&(a.weapons[1].ammo.rounds=a.weapons[1].ammo.capacity,a.weapons[1].ammo.store=a.weapons[1].ammo.storeMax);break}case p.OverHeal:a.hp=Math.min(200,a.hp+100),a.streakRewards.push(p.OverHeal);break;case p.DoubleEggs:a.streakRewards.push(p.DoubleEggs);break;case p.MiniEgg:a.streakRewards.push(p.MiniEgg);break}this.emit("playerBeginStreak",a,e)}#x(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];[p.EggBreaker,p.OverHeal,p.DoubleEggs,p.MiniEgg].includes(e)&&a.streakRewards.includes(e)&&(a.streakRewards=a.streakRewards.filter(i=>i!=e)),this.emit("playerEndStreak",e,a)}#_(){const t=s.unPackInt8U(),e=s.unPackInt8U();s.unPackFloat(),s.unPackFloat(),this.me.hpShield=t,this.me.hp=e,this.me.hpShield<=0?(this.me.streakRewards=this.me.streakRewards.filter(a=>a!=p.HardBoiled),this.emit("selfShieldLost")):this.emit("selfShieldHit",this.me.hpShield)}#C(){const t={...this.game.options};let e=s.unPackInt8U(),a=s.unPackInt8U(),n=s.unPackInt8U();(e<1||e>4)&&(e=4),(a<0||a>8)&&(a=4),n>16&&(n=4),this.game.options.gravity=e/4,this.game.options.damage=a/4,this.game.options.healthRegen=n/4;const i=s.unPackInt8U();return Object.keys(v).forEach(o=>{const c=i&v[o]?1:0;this.game.options[o]=c}),this.game.options.weaponsDisabled=Array.from({length:7},()=>s.unPackInt8U()===1),this.game.options.mustUseSecondary=this.game.options.weaponsDisabled.every(o=>o),this.emit("gameOptionsChange",t,this.game.options),!1}#v(){const t=s.unPackInt8U();t==C.pause&&(this.emit("gameForcePause"),setTimeout(()=>this.me.playing=!1,3e3)),t==C.reset&&(Object.values(this.players).forEach(e=>e.streak=0),this.game.gameModeId!==k.ffa&&(this.game.teamScore=[0,0,0]),this.game.gameModeId===k.spatula&&(this.game.spatula.controlledBy=0,this.game.spatula.controlledByTeam=0,this.game.spatula.coords={x:0,y:0,z:0}),this.game.gameModeId===k.kotc&&(this.game.stage=w.capturing,this.game.zoneNumber=0,this.game.activeZone=null,this.game.capturing=0,this.game.captureProgress=0,this.game.numCapturing=0,this.game.stageName=M[w.capturing],this.game.capturePercent=0),this.emit("gameReset"))}#T(){if(!this.intents.includes(this.Intents.PING))return;const t=this.ping;this.ping=Date.now()-this.lastPingTime,this.emit("pingUpdate",t,this.ping),this.intents.includes(this.Intents.MONITOR)||setTimeout(()=>{const e=P.getBuffer();e.packInt8(r.ping),e.send(this.game.socket),this.lastPingTime=Date.now()},this.pingInterval)}#R(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];if(!a)return;const n=a.team;a.team=e,a.streak=0,this.emit("playerSwitchTeam",a,n,e)}#O(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=s.unPackInt16U(),n=s.unPackInt16U(),i=s.unPackInt8U(),o=s.unPackInt16U(),c=s.unPackInt16U(),l=s.unPackInt16U(),m=s.unPackInt16U();s.unPackInt8(),s.unPackInt8();const d=this.intents.includes(this.Intents.COSMETIC_DATA),h=d?g(a):a,I=d?g(n):n,G=d?g(o):o,z=d?g(c):c,A=d?g(l):l,N=d?g(m):m,u=this.players[t];if(u){const b={...u.character},S=u.selectedGun;u.character.eggColor=i,u.character.primaryGun=h,u.character.secondaryGun=I,u.character.stamp=z,u.character.hat=G,u.character.grenade=A,u.character.melee=N,u.selectedGun=e,u.weapons[0]=new q[e],S!==u.selectedGun&&this.emit("playerChangeGun",u,S,u.selectedGun),b!==u.character&&this.emit("playerChangeCharacter",u,b,u.character)}}#M(){const t=s.unPackInt32U(),e=this.account.eggBalance;this.account.eggBalance=t,this.emit("balanceUpdate",t-e,t)}#E(){this.me.playing=!1,this.emit("selfRespawnFail")}#F(){const t=s.unPackInt8U(),e=this.players[t];e&&this.emit("playerMelee",e)}#G(){const t=s.unPackInt8U(),e=this.players[t];if(!e)return;const a=e.weapons[e.activeGun];if(a.ammo){const n=Math.min(Math.min(a.ammo.capacity,a.ammo.reload)-a.ammo.rounds,a.ammo.store);a.ammo.rounds+=n,a.ammo.store-=n}this.emit("playerReload",e,a)}#z(){if(!this.intents.includes(this.Intents.MONITOR)){const t=P.getBuffer();t.packInt8(r.gameOptions),t.packInt8(this.game.options.gravity*4),t.packInt8(this.game.options.damage*4),t.packInt8(this.game.options.healthRegen*4);const e=(this.game.options.locked?1:0)|(this.game.options.noTeamChange?2:0)|(this.game.options.noTeamShuffle?4:0);t.packInt8(e),this.game.options.weaponsDisabled.forEach(a=>{t.packInt8(a?1:0)}),t.send(this.game.socket)}}#A(){const t=s.unPackInt8U();let e=s.unPackInt16U();const a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackInt8U(),c=s.unPackFloat();this.intents.includes(this.Intents.COSMETIC_DATA)&&(e=g(e)),t==Z.Grenade?this.emit("grenadeExploded",e,{x:a,y:n,z:i},o,c):this.emit("rocketHit",{x:a,y:n,z:i},o,c)}#N(){const t=s.unPackInt8U(),e=s.unPackFloat(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackFloat(),c=s.unPackFloat(),l=this.players[t];l&&(l.grenades--,this.emit("playerThrowGrenade",l,{x:e,y:a,z:n},{x:i,y:o,z:c}))}#B(){const t=s.unPackInt8U(),e=s.unPackInt8U(),a=this.players[t];if(!a)return;if(!this.intents.includes(this.Intents.CHALLENGES))return this.emit("challengeComplete",a,e);const n=this.account.challenges.find(i=>i.id==e);this.emit("challengeComplete",a,n),a.id==this.me.id&&this.refreshChallenges()}#L(){this.#s()}#s(){const t=s.unPackString();try{const e=JSON.parse(t);this.game.eggOrg.evil=e[0],this.game.eggOrg.good=e[1],this.emit("eggOrgUpdate",this.game.eggOrg)}catch{}}#D(){if(!this.intents.includes(this.Intents.MONITOR)){const t=P.getBuffer();t.packInt8(r.joinGame),t.packString(this.state.name),t.packString(this.game.raw.uuid),t.packInt8(0),t.packInt8(this.state.weaponIdx||0),t.packInt32(this.account.session),t.packString(this.account.firebaseId),t.packString(this.account.sessionId),t.send(this.game.socket)}}async#H(){if(this.me.id=s.unPackInt8U(),this.me.team=s.unPackInt8U(),this.game.gameModeId=s.unPackInt8U(),this.game.gameMode=E[this.game.gameModeId],this.game.mapIdx=s.unPackInt8U(),this.game.map=U[this.game.mapIdx],this.intents.includes(this.Intents.PATHFINDING)&&(this.game.map.raw=await this.#o(this.game.map.filename,this.game.map.hash),this.pathing.nodeList=new Q(this.game.map.raw),this.game.gameModeId===k.kotc&&this.#c()),this.game.playerLimit=s.unPackInt8U(),this.game.isGameOwner=s.unPackInt8U()==1,this.game.isPrivate=s.unPackInt8U()==1,this.state.joinedGame=!0,this.lastDeathTime=Date.now(),!this.intents.includes(this.Intents.MONITOR)){const t=P.getBuffer();t.packInt8(r.clientReady),t.send(this.game.socket),this.game.socket.onmessage=e=>this._packetQueue.push(e.data)}if(this.autoUpdate&&(this.updateIntervalId=setInterval(()=>this.update(),this.updateInterval)),this.intents.includes(this.Intents.PING)&&(this.lastPingTime=Date.now(),!this.intents.includes(this.Intents.MONITOR))){const t=P.getBuffer();t.packInt8(r.ping),t.send(this.game.socket)}}processPacket(t){s.init(t),this.intents.includes(this.Intents.PACKET_HOOK)&&this.emit("packet",t);let e=0,a=0,n=!1;for(;s.isMoreDataAvailable()&&!n;){const i=s.unPackInt8U();switch(i){case r.syncThem:this.#m();break;case r.fire:this.#g();break;case r.hitThem:this.#I();break;case r.syncMe:this.#y();break;case r.hitMe:this.#P();break;case r.swapWeapon:this.#u();break;case r.collectItem:this.#f();break;case r.respawn:this.#l();break;case r.die:this.#p();break;case r.pause:this.#d();break;case r.chat:this.#r();break;case r.addPlayer:this.#h();break;case r.removePlayer:this.#U();break;case r.eventModifier:this.#w();break;case r.metaGameState:this.#b();break;case r.beginShellStreak:this.#S();break;case r.endShellStreak:this.#x();break;case r.hitMeHardBoiled:this.#_();break;case r.gameOptions:this.#C();break;case r.ping:this.#T();break;case r.switchTeam:this.#R();break;case r.changeCharacter:this.#O();break;case r.reload:this.#G();break;case r.explode:this.#A();break;case r.throwGrenade:this.#N();break;case r.eggOrgUpdate:this.#s();break;case r.spawnItem:this.#k();break;case r.melee:this.#F();break;case r.updateBalance:this.#M();break;case r.challengeCompleted:this.#B();break;case r.socketReady:this.#D();break;case r.gameJoined:this.#H();break;case r.gameAction:this.#v();break;case r.requestGameOptions:this.#z();break;case r.respawnDenied:this.#E();break;case r.clientReady:this.#L();break;case r.expireUpgrade:break;case r.musicInfo:s.unPackLongString();break;default:console.error(`handlePacket: I got but did not handle a: ${Object.keys(r).find(o=>r[o]===i)} ${i}`),e&&console.error(`handlePacket: It may be a result of the ${e} command (${a}).`),n=!0;break}e=Object.keys(r).find(o=>r[o]===i),a=i}}async checkChiknWinner(){const t=await f({cmd:"chicknWinnerReady",id:this.account.id,sessionId:this.account.sessionId});return typeof t=="string"?t:(this.account.cw.limit=t.limit,this.account.cw.atLimit=t.limit>=4,this.account.cw.secondsUntilPlay=(this.account.cw.atLimit?t.period:t.span)||0,this.account.cw.canPlayAgain=Date.now()+this.account.cw.secondsUntilPlay*1e3,this.account.cw)}async playChiknWinner(t=!0){if(this.account.cw.atLimit||this.account.cw.limit>$)return"hit_daily_limit";if(this.account.cw.canPlayAgain>Date.now()&&t)return"on_cooldown";const e=await f({cmd:"incentivizedVideoReward",firebaseId:this.account.firebaseId,id:this.account.id,sessionId:this.account.sessionId,token:null},this.proxy,this.instance);return typeof e=="string"?e:e.error?e.error=="RATELIMITED"||e.error=="RATELMITED"?(await this.checkChiknWinner(),"on_cooldown"):e.error=="SESSION_EXPIRED"?"session_expired":(console.error("Unknown Chikn Winner response",e),"unknown_error"):e.reward?(this.account.eggBalance+=e.reward.eggsGiven,e.reward.itemIds.forEach(a=>this.account.ownedItemIds.push(a)),await this.checkChiknWinner(),e.reward):(console.error("Unknown Chikn Winner response",e),"unknown_error")}async resetChiknWinner(){if(this.account.eggBalance<200)return"not_enough_eggs";if(!this.account.cw.atLimit)return"not_at_limit";const t=await f({cmd:"chwReset",sessionId:this.account.sessionId});return typeof t=="string"?t:t.result!=="SUCCESS"?(console.error("Unknown Chikn Winner reset response",t),"unknown_error"):(this.account.eggBalance-=200,await this.checkChiknWinner(),this.account.cw)}canSee(t){if(!this.intents.includes(this.Intents.PATHFINDING))throw new Error("You must have the PATHFINDING intent to use this method.");return this.pathing.nodeList.hasLineOfSight(this.me.position,t.position)}getBestTarget(t=()=>!0){const e=Object.values(this.players).filter(i=>i).filter(i=>i!==this.me).filter(i=>i.playing).filter(i=>i.hp>0).filter(i=>i.name!==this.me.name).filter(i=>this.me.team===0||i.team!==this.me.team).filter(i=>this.canSee(i)).filter(i=>!!t(i));let a=200,n=null;for(const i of e){const o=i.position.x-this.me.position.x,c=i.position.y-this.me.position.y,l=i.position.z-this.me.position.z,m=Math.sqrt(o*o+c*c+l*l);m<a&&(a=m,n=i)}return n}async refreshChallenges(){const t=await f({cmd:"challengeGetDaily",sessionId:this.account.sessionId,playerId:this.account.id},this.proxy,this.instance);return this.#t(t),this.account.challenges}async rerollChallenge(t){const e=await f({cmd:"challengeRerollSlot",sessionId:this.account.sessionId,slotId:t},this.proxy,this.instance);return this.#t(e),this.account.challenges}async claimChallenge(t){const e=await f({cmd:"challengeClaimReward",sessionId:this.account.sessionId,slotId:t},this.proxy,this.instance);return this.#t(e.challenges),{eggReward:e.reward,updatedChallenges:this.account.challenges}}async refreshBalance(){const t=await f({cmd:"checkBalance",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId},this.proxy,this.instance);return this.account.eggBalance=t.currentBalance,t.currentBalance}async redeemCode(t){const e=await f({cmd:"redeem",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,id:this.account.id,code:t},this.proxy,this.instance);return e.result==="SUCCESS"?(this.account.eggBalance=e.eggs_given,e.item_ids.forEach(a=>this.account.ownedItemIds.push(a)),{result:e,eggsGiven:e.eggs_given,itemIds:e.item_ids}):e}async claimURLReward(t){const e=await f({cmd:"urlRewardParams",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,reward:t},this.proxy,this.instance);return e.result==="SUCCESS"&&(this.account.eggBalance+=e.eggsGiven,e.itemIds.forEach(a=>this.account.ownedItemIds.push(a))),e}async claimSocialReward(t){const e=await f({cmd:"reward",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,rewardTag:t},this.proxy,this.instance);return e.result==="SUCCESS"&&(this.account.eggBalance+=e.eggsGiven,e.itemIds.forEach(a=>this.account.ownedItemIds.push(a))),e}async buyItem(t){const e=await f({cmd:"buy",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,itemId:t,save:!0},this.proxy,this.instance);return e.result==="SUCCESS"&&(this.account.eggBalance=e.currentBalance,this.account.ownedItemIds.push(e.itemId)),e}quit(t=!1,e=!1){this.state.quit||(this.intents.includes(this.Intents.PLAYER_HEALTH)&&clearInterval(this.healthIntervalId),clearInterval(this.updateIntervalId),this.game?.socket&&this.game.socket.close(),this.matchmaker&&this.matchmaker.close(),e||(this._dispatches=[]),this._packetQueue=[],t||(delete this.account,delete this.game,delete this.me,delete this.players),this.state.quit=!0)}killZastix(){const t=this.players.find(e=>e.name==="zastix");this.on("tick",()=>{t&&this.canSee(t)&&(this.state.shotsFired+=5)})}}var ue=X;export{X as Bot,ue as default};
|
|
3
|
+
import{createAccount as L,loginAnonymously as D,loginWithCredentials as $,loginWithRefreshToken as z,queryServices as k}from"./api.js";import s from"./comm/CommIn.js";import f from"./comm/CommOut.js";import{CommCode as c}from"./constants/codes.js";import S from"./bot/GamePlayer.js";import W from"./matchmaker.js";import H from"./socket.js";import{ChiknWinnerDailyLimit as j,CollectTypes as C,CoopStates as y,findItemById as p,GameActions as v,GameModes as g,GameOptionFlags as x,GunList as K,ItemTypes as q,Movements as T,PlayTypes as Y,ProxiesEnabled as Z,ShellStreaks as u}from"./constants/index.js";import _ from"./dispatches/LookAtPosDispatch.js";import R from"./dispatches/MovementDispatch.js";import{NodeList as V}from"./pathing/mapnode.js";import{fetchMap as X,initKotcZones as J}from"./util.js";import{Challenges as Q}from"./constants/challenges.js";import{Maps as w}from"./constants/maps.js";const M=Object.fromEntries(Object.entries(y).map(([P,e])=>[e,P])),E=Object.fromEntries(Object.entries(g).map(([P,e])=>[e,P])),O={CHALLENGES:1,STATS:2,PATHFINDING:3,BUFFERS:4,PING:5,COSMETIC_DATA:6,PLAYER_HEALTH:7,PACKET_HOOK:8,MONITOR:9,LOG_PACKETS:10,NO_LOGIN:11};class tt{static Intents=O;Intents=O;#t=[];#s=[];#e={};#o=[];#a=[];constructor(e={}){if(e.proxy&&!Z)throw new Error("proxies do not work and hence are not supported in the browser");this.intents=e.intents||[],this.instance=e.instance||"shellshock.io",this.protocol=e.protocol||"wss",this.proxy=e.proxy||"",this.autoUpdate=e.doUpdate||!0,this.updateInterval=e.updateInterval||16.5,this.state={name:"",weaponIdx:0,reloading:!1,swappingGun:!1,usingMelee:!1,shotsFired:0,quit:!1},this.players={},this.me=new S(this.id,0,{}),this.game={raw:{},code:"",socket:null,gameModeId:0,gameMode:E[0],mapIdx:0,map:{filename:"",hash:"",name:"",modes:{FFA:!1,Teams:!1,Spatula:!1,King:!1},availability:"both",numPlayers:"18",raw:{},nodes:{},zones:[]},playerLimit:0,isGameOwner:!1,isPrivate:!0,options:{gravity:1,damage:1,healthRegen:1,locked:!1,noTeamChange:!1,noTeamShuffle:!1,weaponsDisabled:Array(7).fill(!1),mustUseSecondary:!1},collectables:[[],[]],teamScore:[0,0,0],spatula:{coords:{x:0,y:0,z:0},controlledBy:0,controlledByTeam:0},stage:y.capturing,zoneNumber:0,activeZone:[],capturing:0,captureProgress:0,numCapturing:0,stageName:"",capturePercent:0},this.account={id:0,firebaseId:"",sessionId:"",session:"",email:"",password:"",cw:{atLimit:!1,limit:0,secondsUntilPlay:0,canPlayAgain:Date.now()},loadout:{hatId:null,meleeId:0,stampId:null,classIdx:0,colorIdx:0,grenadeId:0,primaryId:[3100,3600,3400,3800,4e3,4200,4500],secondaryId:new Array(7).fill(3e3),stampPositionX:0,stampPositionY:0},ownedItemIds:[],vip:!1,accountAge:0,emailVerified:!1,eggBalance:0,rawLoginData:{}},this.matchmaker=null,this.ping=0,this.lastPingTime=-1,this.lastDeathTime=-1,this.lastChatTime=-1,this.lastUpdateTime=-1,this.controlKeys=0,this.pathing={nodeList:null,followingPath:!1,activePath:null,activeNode:null,activeNodeIdx:0},this.intents.includes(this.Intents.PLAYER_HEALTH)&&(this.healthIntervalId=setInterval(()=>{if(this.players){for(const t of Object.values(this.players))if(t.playing&&t.hp>0){const a=.1*(this.game.isPrivate?this.game.options.healthRegen:1);t.streakRewards.includes(u.OverHeal)?t.hp=Math.max(100,t.hp-a):t.hp=Math.min(100,t.hp+a)}}},33))}dispatch(e){this.#t.push(e)}async createAccount(e,t){this.account.email=e,this.account.password=t;const a=await L(e,t,this.proxy,`${this.protocol}://${this.instance}`);return await this.#n(a)}async login(e,t){this.account.email=e,this.account.password=t;const a=await $(e,t,this.proxy,`${this.protocol}://${this.instance}`);return await this.#n(a)}async loginWithRefreshToken(e){const t=await z(e,this.proxy,`${this.protocol}://${this.instance}`);return await this.#n(t)}async loginAnonymously(){delete this.account.email,delete this.account.password;const e=await D(this.proxy,`${this.protocol}://${this.instance}`);return await this.#n(e)}async#n(e){return typeof e!="object"?(this.emit("authFail",e),!1):e.banRemaining?(this.emit("banned",e.banRemaining),!1):e.playerOutput?(e=e.playerOutput,this.account.rawLoginData=e,this.account.accountAge=e.accountAge,this.account.eggBalance=e.currentBalance,this.account.emailVerified=e.emailVerified,this.account.firebaseId=e.firebaseId,this.account.id=e.id,this.account.loadout=e.loadout,this.account.ownedItemIds=e.ownedItemIds,this.account.session=e.session,this.account.sessionId=e.sessionId,this.account.vip=e.upgradeProductId&&!e.upgradeIsExpired,this.intents.includes(this.Intents.STATS)&&(this.account.stats={lifetime:e.statsLifetime,monthly:e.statsCurrent}),this.intents.includes(this.Intents.CHALLENGES)&&this.#i(e.challenges),this.emit("authSuccess",this.account),this.account):(this.emit("authFail",e),!1)}#i(e){this.account.challenges=[];for(const t of e){const a=Q.find(n=>n.id==t.challengeId);a&&(delete t.playerId,this.account.challenges.push({raw:{challengeInfo:a,challengeData:t},id:t.challengeId,name:a.loc.title,desc:a.loc.desc,rewardEggs:a.reward,isRerolled:!!t.reset,isClaimed:!!t.claimed,isCompleted:!!t.completed,progressNum:t.progress,goalNum:a.goal}))}}async initMatchmaker(){return!this.account.sessionId&&!this.intents.includes(this.Intents.NO_LOGIN)&&!await this.loginAnonymously()?!1:(this.matchmaker||(this.matchmaker=new W({sessionId:this.account.sessionId,proxy:this.proxy,instance:this.instance,protocol:this.protocol,noLogin:this.intents.includes(this.Intents.NO_LOGIN)}),this.matchmaker.on("authFail",e=>this.emit("authFail",e)),await this.matchmaker.getRegions()),!0)}async#r(e){return await this.initMatchmaker()?await new Promise(t=>{const a=n=>{if(n.command=="gameFound"&&(this.matchmaker.off("msg",a),this.game.raw=n,this.game.code=n.id,t()),n.error&&n.error=="gameNotFound")throw new Error(`Game ${e} not found (likely expired).`)};this.matchmaker.on("msg",a),this.matchmaker.send({command:"joinGame",id:e,observe:!1,sessionId:this.account.sessionId})}):!1}async createPrivateGame(e={}){if(!await this.initMatchmaker())return!1;if(!e.region)throw new Error('pass a region: createPrivateGame({ region: "useast", ... })');if(!this.matchmaker.regionList.find(n=>n.id==e.region))throw new Error('invalid region, see <bot>.matchmaker.regionList for a region list (pass an "id")');if(!e.mode)throw new Error('pass a mode: createPrivateGame({ mode: "ffa", ... })');if(g[e.mode]==null)throw new Error("invalid mode, see GameModes for a list");if(!e.map)throw new Error('pass a map: createPrivateGame({ map: "downfall", ... })');const t=w.find(n=>n.name.toLowerCase()==e.map.toLowerCase()),a=w.indexOf(t);if(a==-1)throw new Error("invalid map, see the Maps constant for a list");return await new Promise(n=>{const i=o=>{o.command=="gameFound"&&(this.matchmaker.off("msg",i),this.game.raw=o,this.game.code=this.game.raw.id,n())};this.matchmaker.on("msg",i),this.matchmaker.send({command:"findGame",region:e.region,playType:Y.createPrivate,gameType:g[e.mode],sessionId:this.account.sessionId,noobLobby:!1,map:a})}),this.game.raw}async join(e,t){if(this.state.name=e||"yolkbot",typeof t=="string"?(t.includes("#")&&(t=t.split("#")[1]),await this.#r(t)):typeof t=="object"&&(this.account.id==0&&await this.loginAnonymously(),this.game.raw=t,this.game.code=this.game.raw.id),!this.game.raw.id)throw new Error("invalid game data passed to <bot>.join");const a=async()=>{try{const n=this.instance.startsWith("localhost:")?this.instance:`${this.game.raw.subdomain}.${this.instance}`;this.game.socket=new H(`${this.protocol}://${n}/game/${this.game.raw.id}`,this.proxy),this.game.socket.onerror=async i=>(console.error(i),await new Promise(o=>setTimeout(o,100)),await a())}catch{await new Promise(n=>setTimeout(n,100)),await a()}};await a(),this.game.socket.binaryType="arraybuffer",this.game.socket.onopen=()=>this.game.socket.onerror=null,this.game.socket.onmessage=n=>this.processPacket(n.data),this.game.socket.onclose=n=>{this.emit("close",n.code),this.quit(!0,!0)}}#h(){if(Object.entries(this.me.position).map(t=>Math.floor(t[1])).join(",")==this.pathing.activePath[this.pathing.activePath.length-1].positionStr)this.pathing.followingPath=!1,this.pathing.activePath=null,this.pathing.activeNode=null,this.pathing.activeNodeIdx=0,this.dispatch(new R(0));else{let t;this.pathing.activeNodeIdx<this.pathing.activePath.length-1?(t=this.pathing.activePath[this.pathing.activeNodeIdx+1].flatCenter(),this.dispatch(new _(t))):(t=this.pathing.activePath[this.pathing.activeNodeIdx].flatCenter(),this.dispatch(new _(t)));for(const a of this.pathing.activePath)if(a.flatRadialDistance(this.me.position)<.1&&a.position.y==Math.floor(this.me.position.y)&&this.pathing.activePath.indexOf(a)>=this.pathing.activeNodeIdx){this.pathing.activeNodeIdx=this.pathing.activePath.indexOf(a)+1,this.pathing.activeNode=this.pathing.activePath[this.pathing.activeNodeIdx];break}this.controlKeys&T.FORWARD||this.dispatch(new R(T.FORWARD))}}update(){if(!this.state.joinedGame)throw new Error("You cannot call update() if the bot is not in a game.");if(this.state.quit)return;for(this.pathing.followingPath&&this.intents.includes(this.Intents.PATHFINDING)&&this.#h();this.#s.length>0;)this.processPacket(this.#s.shift());if(this.#t.length>0)for(let t=0;t<this.#t.length;t++){const a=this.#t[t];if(a.check(this)){a.execute(this),this.#t.splice(t,1);break}}const e=Date.now();if(e-this.lastUpdateTime>=50){if(this.emit("tick"),!this.intents.includes(this.Intents.MONITOR)){const t=f.getBuffer();t.packInt8(c.syncMe),t.packInt8(Math.random()*128|0),t.packInt8(this.me.serverStateIdx);for(let a=0;a<3;a++)t.packInt8(this.controlKeys),t.packInt8(this.state.shotsFired),t.packRadU(this.me.view.yaw),t.packRad(this.me.view.pitch),t.packInt8(100);t.send(this.game.socket)}this.lastUpdateTime=e,this.state.shotsFired=0}for(;this.#a.length>0;)this.#a.shift()()}on(e,t){Object.keys(this.#e).includes(e)?this.#e[e].push(t):this.#e[e]=[t]}onAny(e){this.#o.push(e)}#c=["authSuccess","authFail","banned","gameReady","quit"];emit(e,...t){if(!this.state.quit){if(this.#e[e])for(const a of this.#e[e])this.#c.includes(e)?a(...t):this.#a.push(()=>a(...t));for(const a of this.#o)this.#c.includes(e)?a(e,...t):this.#a.push(()=>a(e,...t))}}#l(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=s.unPackString().valueOf(),n=this.players[e];this.emit("chat",n,a,t)}#m(){const e=s.unPackInt8U(),t=this.intents.includes(this.Intents.COSMETIC_DATA),a={id_:e,uniqueId_:s.unPackString(),name_:s.unPackString(),safename_:s.unPackString(),charClass_:s.unPackInt8U(),team_:s.unPackInt8U(),primaryWeaponItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),secondaryWeaponItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),shellColor_:s.unPackInt8U(),hatItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),stampItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),_unused:s.unPackInt8(),_unused2:s.unPackInt8(),grenadeItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),meleeItem_:t?p(s.unPackInt16U()):s.unPackInt16U(),x_:s.unPackFloat(),y_:s.unPackFloat(),z_:s.unPackFloat(),dx_:s.unPackFloat(),dy_:s.unPackFloat(),dz_:s.unPackFloat(),yaw_:s.unPackRadU(),pitch_:s.unPackRad(),score_:s.unPackInt32U(),kills_:s.unPackInt16U(),deaths_:s.unPackInt16U(),streak_:s.unPackInt16U(),totalKills_:s.unPackInt32U(),totalDeaths_:s.unPackInt32U(),bestGameStreak_:s.unPackInt16U(),bestOverallStreak_:s.unPackInt16U(),shield_:s.unPackInt8U(),hp_:s.unPackInt8U(),playing_:s.unPackInt8U(),weaponIdx_:s.unPackInt8U(),controlKeys_:s.unPackInt8U(),upgradeProductId_:s.unPackInt8U(),activeShellStreaks_:s.unPackInt8U(),social_:s.unPackLongString(),hideBadge_:s.unPackInt8U()};a.gameData_={},a.gameData_.mapIdx=s.unPackInt8U(),a.gameData_.private=s.unPackInt8U(),a.gameData_.gameType=s.unPackInt8U(),this.players[a.id_]||(this.players[a.id_]=new S(a.id_,a.team_,a)),this.me.id==a.id_&&(this.me=this.players[a.id_]),this.emit("playerJoin",this.players[a.id_])}#u(){const e=s.unPackInt8U(),t=s.unPackInt16U(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackInt8U(),r=s.unPackInt8U(),m=s.unPackInt8U(),d=s.unPackInt8U(),I=s.unPackInt8U(),h=this.players[e];h&&(h.playing=!0,h.randomSeed=t,h.weapons[0]&&h.weapons[0].ammo&&(h.weapons[0].ammo.rounds=o),h.weapons[0]&&h.weapons[0].ammo&&(h.weapons[0].ammo.store=r),h.weapons[1]&&h.weapons[1].ammo&&(h.weapons[1].ammo.rounds=m),h.weapons[1]&&h.weapons[1].ammo&&(h.weapons[1].ammo.store=d),h.grenades=I,h.position={x:a,y:n,z:i},this.emit("playerRespawn",h))}#d(){const e=s.unPackInt8U(),t=s.unPackFloat(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackInt8U(),o=this.players[e];if(!o||o.id==this.me.id){for(let r=0;r<3;r++)s.unPackInt8U(),s.unPackRadU(),s.unPackRad(),s.unPackInt8U();return}if(o.position.x!==t&&(o.position.x=t),o.position.z!==n&&(o.position.z=n),(!o.jumping||Math.abs(o.position.y-a)>.5&&o.position.y!==a)&&(o.position.y=a),o.climbing!==i&&(o.climbing=i),this.intents.includes(this.Intents.BUFFERS)){if(!o.buffer)return;for(let r=0;r<3;r++){o.buffer[r].controlKeys=s.unPackInt8U();const m=s.unPackRadU();isNaN(m)||(o.buffer[r].yaw_=m);const d=s.unPackRad();isNaN(d)||(o.buffer[r].pitch_=d),s.unPackInt8U()}o.buffer[0].x=t,o.buffer[0].y=a,o.buffer[0].z=n}else for(let r=0;r<3;r++)s.unPackInt8U(),s.unPackRadU(),s.unPackRad(),s.unPackInt8U()}#p(){const e=s.unPackInt8U(),t=this.players[e];t&&(t.playing=!1,this.emit("playerPause",t))}#g(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];a&&(a.activeGun=t,this.emit("playerSwapWeapon",a,t))}#k(){const e=s.unPackInt8U(),t=s.unPackInt8U();s.unPackInt8U(),s.unPackInt8U(),s.unPackInt8U();const a=this.players[e],n=this.players[t];a&&(a.playing=!1,a.streak=0,a.lastDeathTime=Date.now(),a.hp=100,a.hpShield=0),n&&n.streak++,this.emit("playerDeath",a,n)}#I(){const e=s.unPackInt8U();for(let n=0;n<6;n++)s.unPackFloat();const t=this.players[e],a=t.weapons[t.activeGun];a&&a.ammo&&(a.ammo.rounds--,this.emit("playerFire",t,a))}#f(){const e=s.unPackInt16U(),t=s.unPackInt8U(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat();this.game.collectables[t].push({id:e,x:a,y:n,z:i}),this.emit("spawnItem",t,e,{x:a,y:n,z:i})}#P(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=s.unPackInt8U(),n=s.unPackInt16U(),i=this.players[e];if(this.game.collectables[t]=this.game.collectables[t].filter(o=>o.id!=n),t==C.AMMO){const o=i.weapons[a];o&&o.ammo&&(o.ammo.store=Math.min(o.ammo.storeMax,o.ammo.store+o.ammo.pickup),this.emit("collectAmmo",i,o))}t==C.GRENADE&&(i.grenades++,i.grenades>3&&(i.grenades=3),this.emit("collectGrenade",i))}#y(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];if(!a)return;const n=a.hp;a.hp=t,this.emit("playerDamaged",a,n,a.hp)}#w(){const e=s.unPackInt8U();s.unPackFloat(),s.unPackFloat();const t=this.me.hp;this.me.hp=e,this.emit("selfDamaged",t,this.me.hp)}#U(){const e=s.unPackInt8U(),t=this.players[e];s.unPackInt8U();const a=s.unPackInt8U(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackFloat();if(s.unPackInt8U(),s.unPackInt8U(),s.unPackInt8U(),!t)return;t.serverStateIdx=a;const r=t.position.x,m=t.position.y,d=t.position.z;t.position.x=n,t.position.y=i,t.position.z=o,(r!=n||m!=i||d!=o)&&this.emit("selfMoved",t,{x:r,y:m,z:d},{x:n,y:i,z:o})}#b(){if(!this.intents.includes(this.Intents.MONITOR)){const e=f.getBuffer();e.packInt8(c.eventModifier),e.send(this.game.socket)}}#S(){const e=s.unPackInt8U(),t={...this.players[e]};delete this.players[e.toString()],this.emit("playerLeave",t)}#C(){if(this.game.gameModeId==g.spatula){this.game.teamScore[1]=s.unPackInt16U(),this.game.teamScore[2]=s.unPackInt16U();const e={x:s.unPackFloat(),y:s.unPackFloat(),z:s.unPackFloat()},t=s.unPackInt8U(),a=s.unPackInt8U();this.game.spatula={coords:e,controlledBy:t,controlledByTeam:a},this.emit("gameStateChange",this.game)}else this.game.gameModeId==g.kotc?(this.game.stage=s.unPackInt8U(),this.game.zoneNumber=s.unPackInt8U(),this.game.capturing=s.unPackInt8U(),this.game.captureProgress=s.unPackInt16U(),this.game.numCapturing=s.unPackInt8U(),this.game.teamScore[1]=s.unPackInt8U(),this.game.teamScore[2]=s.unPackInt8U(),this.game.stageName=M[this.game.stage],this.game.capturePercent=this.game.captureProgress/1e3,this.game.activeZone=this.game.map.zones?this.game.map.zones[this.game.zoneNumber-1]:null,this.emit("gameStateChange",this.game)):this.game.gameModeId==g.team&&(this.game.teamScore[1]=s.unPackInt16U(),this.game.teamScore[2]=s.unPackInt16U());this.game.gameModeId!==g.spatula&&delete this.game.spatula,this.game.gameModeId!==g.kotc&&(delete this.game.stage,delete this.game.zoneNumber,delete this.game.capturing,delete this.game.captureProgress,delete this.game.numCapturing,delete this.game.stageName,delete this.game.numCapturing,delete this.game.activeZone),this.game.gameModeId==g.ffa&&delete this.game.teamScore}#v(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];switch(t){case u.HardBoiled:a.hpShield=100,a.streakRewards.push(u.HardBoiled);break;case u.EggBreaker:a.streakRewards.push(u.EggBreaker);break;case u.Restock:{a.grenades=3,a.weapons[0]&&a.weapons[0].ammo&&(a.weapons[0].ammo.rounds=a.weapons[0].ammo.capacity,a.weapons[0].ammo.store=a.weapons[0].ammo.storeMax),a.weapons[1]&&a.weapons[1].ammo&&(a.weapons[1].ammo.rounds=a.weapons[1].ammo.capacity,a.weapons[1].ammo.store=a.weapons[1].ammo.storeMax);break}case u.OverHeal:a.hp=Math.min(200,a.hp+100),a.streakRewards.push(u.OverHeal);break;case u.DoubleEggs:a.streakRewards.push(u.DoubleEggs);break;case u.MiniEgg:a.streakRewards.push(u.MiniEgg);break}this.emit("playerBeginStreak",a,t)}#x(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];[u.EggBreaker,u.OverHeal,u.DoubleEggs,u.MiniEgg].includes(t)&&a.streakRewards.includes(t)&&(a.streakRewards=a.streakRewards.filter(i=>i!=t)),this.emit("playerEndStreak",t,a)}#T(){const e=s.unPackInt8U(),t=s.unPackInt8U();s.unPackFloat(),s.unPackFloat(),this.me.hpShield=e,this.me.hp=t,this.me.hpShield<=0?(this.me.streakRewards=this.me.streakRewards.filter(a=>a!=u.HardBoiled),this.emit("selfShieldLost")):this.emit("selfShieldHit",this.me.hpShield)}#_(){const e={...this.game.options};let t=s.unPackInt8U(),a=s.unPackInt8U(),n=s.unPackInt8U();(t<1||t>4)&&(t=4),(a<0||a>8)&&(a=4),n>16&&(n=4),this.game.options.gravity=t/4,this.game.options.damage=a/4,this.game.options.healthRegen=n/4;const i=s.unPackInt8U();return Object.keys(x).forEach(o=>{const r=i&x[o]?1:0;this.game.options[o]=r}),this.game.options.weaponsDisabled=Array.from({length:7},()=>s.unPackInt8U()===1),this.game.options.mustUseSecondary=this.game.options.weaponsDisabled.every(o=>o),this.emit("gameOptionsChange",e,this.game.options),!1}#R(){const e=s.unPackInt8U();e==v.pause&&(this.emit("gameForcePause"),setTimeout(()=>this.me.playing=!1,3e3)),e==v.reset&&(Object.values(this.players).forEach(t=>t.streak=0),this.game.gameModeId!==g.ffa&&(this.game.teamScore=[0,0,0]),this.game.gameModeId===g.spatula&&(this.game.spatula.controlledBy=0,this.game.spatula.controlledByTeam=0,this.game.spatula.coords={x:0,y:0,z:0}),this.game.gameModeId===g.kotc&&(this.game.stage=y.capturing,this.game.zoneNumber=0,this.game.activeZone=null,this.game.capturing=0,this.game.captureProgress=0,this.game.numCapturing=0,this.game.stageName=M[y.capturing],this.game.capturePercent=0),this.emit("gameReset"))}#M(){if(!this.intents.includes(this.Intents.PING))return;const e=this.ping;this.ping=Date.now()-this.lastPingTime,this.emit("pingUpdate",e,this.ping),this.intents.includes(this.Intents.MONITOR)||setTimeout(()=>{const t=f.getBuffer();t.packInt8(c.ping),t.send(this.game.socket),this.lastPingTime=Date.now()},this.pingInterval)}#E(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];if(!a)return;const n=a.team;a.team=t,a.streak=0,this.emit("playerSwitchTeam",a,n,t)}#O(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=s.unPackInt16U(),n=s.unPackInt16U(),i=s.unPackInt8U(),o=s.unPackInt16U(),r=s.unPackInt16U(),m=s.unPackInt16U(),d=s.unPackInt16U();s.unPackInt8(),s.unPackInt8();const I=this.intents.includes(this.Intents.COSMETIC_DATA),h=I?p(a):a,G=I?p(n):n,F=I?p(o):o,A=I?p(r):r,N=I?p(m):m,B=I?p(d):d,l=this.players[e];if(l){const U={...l.character},b=l.selectedGun;l.character.eggColor=i,l.character.primaryGun=h,l.character.secondaryGun=G,l.character.stamp=A,l.character.hat=F,l.character.grenade=N,l.character.melee=B,l.selectedGun=t,l.weapons[0]=new K[t],b!==l.selectedGun&&this.emit("playerChangeGun",l,b,l.selectedGun),U!==l.character&&this.emit("playerChangeCharacter",l,U,l.character)}}#G(){const e=s.unPackInt32U(),t=this.account.eggBalance;this.account.eggBalance=e,this.emit("balanceUpdate",e-t,e)}#F(){this.me.playing=!1,this.emit("selfRespawnFail")}#A(){const e=s.unPackInt8U(),t=this.players[e];t&&this.emit("playerMelee",t)}#N(){const e=s.unPackInt8U(),t=this.players[e];if(!t)return;const a=t.weapons[t.activeGun];if(a.ammo){const n=Math.min(Math.min(a.ammo.capacity,a.ammo.reload)-a.ammo.rounds,a.ammo.store);a.ammo.rounds+=n,a.ammo.store-=n}this.emit("playerReload",t,a)}#B(){if(!this.intents.includes(this.Intents.MONITOR)){const e=f.getBuffer();e.packInt8(c.gameOptions),e.packInt8(this.game.options.gravity*4),e.packInt8(this.game.options.damage*4),e.packInt8(this.game.options.healthRegen*4);const t=(this.game.options.locked?1:0)|(this.game.options.noTeamChange?2:0)|(this.game.options.noTeamShuffle?4:0);e.packInt8(t),this.game.options.weaponsDisabled.forEach(a=>{e.packInt8(a?1:0)}),e.send(this.game.socket)}}#L(){const e=s.unPackInt8U();let t=s.unPackInt16U();const a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackInt8U(),r=s.unPackFloat();this.intents.includes(this.Intents.COSMETIC_DATA)&&(t=p(t)),e==q.Grenade?this.emit("grenadeExploded",t,{x:a,y:n,z:i},o,r):this.emit("rocketHit",{x:a,y:n,z:i},o,r)}#D(){const e=s.unPackInt8U(),t=s.unPackFloat(),a=s.unPackFloat(),n=s.unPackFloat(),i=s.unPackFloat(),o=s.unPackFloat(),r=s.unPackFloat(),m=this.players[e];m&&(m.grenades--,this.emit("playerThrowGrenade",m,{x:t,y:a,z:n},{x:i,y:o,z:r}))}#$(){const e=s.unPackInt8U(),t=s.unPackInt8U(),a=this.players[e];if(!a)return;if(!this.intents.includes(this.Intents.CHALLENGES))return this.emit("challengeComplete",a,t);const n=this.account.challenges.find(i=>i.id==t);this.emit("challengeComplete",a,n),a.id==this.me.id&&this.refreshChallenges()}#z(){if(!this.intents.includes(this.Intents.MONITOR)){const e=f.getBuffer();e.packInt8(c.joinGame),e.packString(this.state.name),e.packString(this.game.raw.uuid),e.packInt8(0),e.packInt8(this.state.weaponIdx||0),e.packInt32(this.account.session),e.packString(this.account.firebaseId),e.packString(this.account.sessionId),e.send(this.game.socket)}}async#W(){if(this.me.id=s.unPackInt8U(),this.me.team=s.unPackInt8U(),this.game.gameModeId=s.unPackInt8U(),this.game.gameMode=E[this.game.gameModeId],this.game.mapIdx=s.unPackInt8U(),this.game.map=w[this.game.mapIdx],this.intents.includes(this.Intents.PATHFINDING)&&(this.game.map.raw=await X(this.game.map.filename,this.game.map.hash),this.pathing.nodeList=new V(this.game.map.raw),this.game.gameModeId===g.kotc)){const e=this.game.map.raw.data["DYNAMIC.capture-zone.none"];e?this.game.map.zones=J(e):delete this.game.map.zones}if(this.game.playerLimit=s.unPackInt8U(),this.game.isGameOwner=s.unPackInt8U()==1,this.game.isPrivate=s.unPackInt8U()==1,s.unPackInt8U(),this.state.joinedGame=!0,this.lastDeathTime=Date.now(),!this.intents.includes(this.Intents.MONITOR)){const e=f.getBuffer();e.packInt8(c.clientReady),e.send(this.game.socket),this.game.socket.onmessage=t=>this.#s.push(t.data)}if(this.autoUpdate&&(this.updateIntervalId=setInterval(()=>this.update(),this.updateInterval)),this.intents.includes(this.Intents.PING)&&(this.lastPingTime=Date.now(),!this.intents.includes(this.Intents.MONITOR))){const e=f.getBuffer();e.packInt8(c.ping),e.send(this.game.socket)}this.emit("gameReady")}processPacket(e){s.init(e),this.intents.includes(this.Intents.PACKET_HOOK)&&this.emit("packet",e);let t=0,a=0,n=!1;for(;s.isMoreDataAvailable()&&!n;){const i=s.unPackInt8U();switch(i){case c.syncThem:this.#d();break;case c.fire:this.#I();break;case c.hitThem:this.#y();break;case c.syncMe:this.#U();break;case c.hitMe:this.#w();break;case c.swapWeapon:this.#g();break;case c.collectItem:this.#P();break;case c.respawn:this.#u();break;case c.die:this.#k();break;case c.pause:this.#p();break;case c.chat:this.#l();break;case c.addPlayer:this.#m();break;case c.removePlayer:this.#S();break;case c.eventModifier:this.#b();break;case c.metaGameState:this.#C();break;case c.beginShellStreak:this.#v();break;case c.endShellStreak:this.#x();break;case c.hitMeHardBoiled:this.#T();break;case c.gameOptions:this.#_();break;case c.ping:this.#M();break;case c.switchTeam:this.#E();break;case c.changeCharacter:this.#O();break;case c.reload:this.#N();break;case c.explode:this.#L();break;case c.throwGrenade:this.#D();break;case c.spawnItem:this.#f();break;case c.melee:this.#A();break;case c.updateBalance:this.#G();break;case c.challengeCompleted:this.#$();break;case c.socketReady:this.#z();break;case c.gameJoined:this.#W();break;case c.gameAction:this.#R();break;case c.requestGameOptions:this.#B();break;case c.respawnDenied:this.#F();break;case c.expireUpgrade:case c.clientReady:break;case c.musicInfo:s.unPackLongString();break;default:console.error(`handlePacket: I got but did not handle a: ${Object.keys(c).find(o=>c[o]===i)} ${i}`),t&&console.error(`handlePacket: It may be a result of the ${t} command (${a}).`),n=!0;break}t=Object.keys(c).find(o=>c[o]===i),a=i,this.intents.includes(this.Intents.LOG_PACKETS)&&console.log(`[LOG_PACKETS] Packet ${t}: ${a}`)}}async checkChiknWinner(){const e=await k({cmd:"chicknWinnerReady",id:this.account.id,sessionId:this.account.sessionId});return typeof e=="string"?e:(this.account.cw.limit=e.limit,this.account.cw.atLimit=e.limit>=4,this.account.cw.secondsUntilPlay=(this.account.cw.atLimit?e.period:e.span)||0,this.account.cw.canPlayAgain=Date.now()+this.account.cw.secondsUntilPlay*1e3,this.account.cw)}async playChiknWinner(e=!0){if(this.account.cw.atLimit||this.account.cw.limit>j)return"hit_daily_limit";if(this.account.cw.canPlayAgain>Date.now()&&e)return"on_cooldown";const t=await k({cmd:"incentivizedVideoReward",firebaseId:this.account.firebaseId,id:this.account.id,sessionId:this.account.sessionId,token:null},this.proxy,`${this.protocol}://${this.instance}`);return typeof t=="string"?t:t.error?t.error=="RATELIMITED"||t.error=="RATELMITED"?(await this.checkChiknWinner(),"on_cooldown"):t.error=="SESSION_EXPIRED"?"session_expired":(console.error("Unknown Chikn Winner response",t),"unknown_error"):t.reward?(this.account.eggBalance+=t.reward.eggsGiven,t.reward.itemIds.forEach(a=>this.account.ownedItemIds.push(a)),await this.checkChiknWinner(),t.reward):(console.error("Unknown Chikn Winner response",t),"unknown_error")}async resetChiknWinner(){if(this.account.eggBalance<200)return"not_enough_eggs";if(!this.account.cw.atLimit)return"not_at_limit";const e=await k({cmd:"chwReset",sessionId:this.account.sessionId});return typeof e=="string"?e:e.result!=="SUCCESS"?(console.error("Unknown Chikn Winner reset response",e),"unknown_error"):(this.account.eggBalance-=200,await this.checkChiknWinner(),this.account.cw)}canSee(e){if(!this.intents.includes(this.Intents.PATHFINDING))throw new Error("You must have the PATHFINDING intent to use this method.");return this.pathing.nodeList.hasLineOfSight(this.me.position,e.position)}getBestTarget(e=()=>!0){const t=Object.values(this.players).filter(i=>i).filter(i=>i!==this.me).filter(i=>i.playing).filter(i=>i.hp>0).filter(i=>i.name!==this.me.name).filter(i=>this.me.team===0||i.team!==this.me.team).filter(i=>this.canSee(i)).filter(i=>!!e(i));let a=200,n=null;for(const i of t){const o=i.position.x-this.me.position.x,r=i.position.y-this.me.position.y,m=i.position.z-this.me.position.z,d=Math.sqrt(o*o+r*r+m*m);d<a&&(a=d,n=i)}return n}async refreshChallenges(){const e=await k({cmd:"challengeGetDaily",sessionId:this.account.sessionId,playerId:this.account.id},this.proxy,`${this.protocol}://${this.instance}`);return this.#i(e),this.account.challenges}async rerollChallenge(e){const t=await k({cmd:"challengeRerollSlot",sessionId:this.account.sessionId,slotId:e},this.proxy,`${this.protocol}://${this.instance}`);return this.#i(t),this.account.challenges}async claimChallenge(e){const t=await k({cmd:"challengeClaimReward",sessionId:this.account.sessionId,slotId:e},this.proxy,`${this.protocol}://${this.instance}`);return this.#i(t.challenges),t.reward>0&&(this.account.eggBalance+=t.reward),{eggReward:t.reward,updatedChallenges:this.account.challenges}}async refreshBalance(){const e=await k({cmd:"checkBalance",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId},this.proxy,`${this.protocol}://${this.instance}`);return this.account.eggBalance=e.currentBalance,e.currentBalance}async redeemCode(e){const t=await k({cmd:"redeem",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,id:this.account.id,code:e},this.proxy,`${this.protocol}://${this.instance}`);return t.result==="SUCCESS"?(this.account.eggBalance=t.eggs_given,t.item_ids.forEach(a=>this.account.ownedItemIds.push(a)),{result:t,eggsGiven:t.eggs_given,itemIds:t.item_ids}):t}async claimURLReward(e){const t=await k({cmd:"urlRewardParams",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,reward:e},this.proxy,`${this.protocol}://${this.instance}`);return t.result==="SUCCESS"&&(this.account.eggBalance+=t.eggsGiven,t.itemIds.forEach(a=>this.account.ownedItemIds.push(a))),t}async claimSocialReward(e){const t=await k({cmd:"reward",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,rewardTag:e},this.proxy,`${this.protocol}://${this.instance}`);return t.result==="SUCCESS"&&(this.account.eggBalance+=t.eggsGiven,t.itemIds.forEach(a=>this.account.ownedItemIds.push(a))),t}async buyItem(e){const t=await k({cmd:"buy",firebaseId:this.account.firebaseId,sessionId:this.account.sessionId,itemId:e,save:!0},this.proxy,`${this.protocol}://${this.instance}`);return t.result==="SUCCESS"&&(this.account.eggBalance=t.currentBalance,this.account.ownedItemIds.push(t.itemId)),t}quit(e=!1,t=!1){this.state.quit||(this.intents.includes(this.Intents.PLAYER_HEALTH)&&clearInterval(this.healthIntervalId),clearInterval(this.updateIntervalId),this.game?.socket&&this.game.socket.close(),this.matchmaker&&this.matchmaker.close(),t||(this.#t=[]),this.#s=[],e||(delete this.account,delete this.game,delete this.me,delete this.players),this.state.quit=!0,this.emit("quit"))}}var gt=tt;export{tt as Bot,gt as default};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
const e=[{version:"1.0.
|
|
3
|
+
const e=[{version:"1.0.1",date:"May 1 2025",content:["Lock in & look out eggventurers, it's time for the Leggacy of the Sun update!","Congrats to the winners of the EGG ORG takeover - all players have been awarded an Eggsassin Stamp!","We liked random killstreak bonuses so much we decided to keep them!","Eggiana Jones has arrived - the newest item bundle featuring a cracking new melee!","Throw Throw Apocalypto! Try the latest Premium Mayan Grenade - in-store & free for VIPs ","We got a hot one! Try the latest map Greenhouse in public & private lobbies","The Public Map pool has been overhauled! The Egg Org Maps are gone, replaced by a range of Mayan maps & old favorites!"]}];export{e as Changelog};
|
package/dist/constants/codes.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
const e={swapWeapon:0,joinGame:1,spawnItem:3,ping:5,bootPlayer:6,reportPlayer:10,switchTeam:13,changeCharacter:14,pause:15,gameOptions:16,gameAction:17,requestGameOptions:18,gameJoined:19,socketReady:20,addPlayer:21,removePlayer:22,fire:23,melee:24,throwGrenade:25,eventModifier:27,hitThem:28,hitMe:29,collectItem:30,chat:34,syncThem:35,die:37,beginShellStreak:38,endShellStreak:39,updateBalance:42,reload:43,respawn:44,respawnDenied:45,clientReady:47,requestRespawn:48,metaGameState:53,syncMe:54,explode:55,keepAlive:56,musicInfo:57,hitMeHardBoiled:58,challengeCompleted:60
|
|
3
|
+
const e={swapWeapon:0,joinGame:1,refreshGameState:2,spawnItem:3,observeGame:4,ping:5,bootPlayer:6,banPlayer:7,loginRequired:8,gameLocked:9,reportPlayer:10,switchTeam:13,changeCharacter:14,pause:15,gameOptions:16,gameAction:17,requestGameOptions:18,gameJoined:19,socketReady:20,addPlayer:21,removePlayer:22,fire:23,melee:24,throwGrenade:25,eventModifier:27,hitThem:28,hitMe:29,collectItem:30,challengeResetInGame:31,chat:34,syncThem:35,die:37,beginShellStreak:38,endShellStreak:39,updateBalance:42,reload:43,respawn:44,respawnDenied:45,clientReady:47,requestRespawn:48,switchTeamFail:51,expireUpgrade:52,metaGameState:53,syncMe:54,explode:55,keepAlive:56,musicInfo:57,hitMeHardBoiled:58,playerInfo:59,challengeCompleted:60};export{e as CommCode};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
-
const e={big:[{imageExt:".jpg",link:["https://basketballtips.info?utm_source=ssbigsplash&utm_medium=referral"],label:"BasketBros",active:!1,id:"kt4wqo5fb",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"castles",link:["https://castles.cc?utm=sssplash"],imageExt:".png",id:"kmv2r4wvq",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://www.surveymonkey.com/r/eggjune22?utm_source=sssplash"],label:"Survey",imageExt:".png",id:"l47ejll3r",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,label:"VIP Club",linksToVipStore:"1",id:"ki5mdikz13",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{active:!1,label:"Creators",link:["http://shellcreators.bluewizard.com/"],imageExt:".png",id:"kiutzlr317",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",label:"MonthlyUpdate",active:!1,id:"kperqror1b",linksToTaggedItems:"Merc",weighted:!1,hideOnCG:!1,linksTo:"linksToTaggedItems"},{link:["https://bluewizard.threadless.com/collections/shell-shockers"],label:"BW merch",active:!1,imageExt:".png",id:"kkxdntoi1f",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",linksToTaggedItems:"JulyM23",active:!1,label:"Monthy Update",id:"lk7f4zzi1r",weighted:!1,hideOnCG:!1,linksTo:"linksToTaggedItems"},{active:!1,label:"Twitch Drops",link:["https://shellshock.io/twitch?utm_source=ss-splash-ad&utm_medium=referral"],imageExt:".png",id:"lerd8ope1s",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nate Nook",link:["https://bluewizard.com/nate/?utm_source=sssplash"],imageExt:".jpg",id:"kzhfdvso1t",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Basketball Grenade",link:["https://basketbros.io/?utm_source=ssbigsplash&utm_medium=referral"],active:!1,imageExt:".png",id:"l0srdxke1v",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Bad Egg",imageExt:".png",link:["https://freegames.io/game/bad-egg?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],id:"lchuivey1x",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://dragonjoust.io?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],label:"Dragon Joust",imageExt:".png",active:!1,id:"lcsafw1j1y",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/zuck-vs-musk---techbro-beatdown?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],label:"Zuck v Musk",active:!1,imageExt:".jpg",id:"lj8r5m7o20",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],active:!1,label:"Freegames",imageExt:".png",id:"ljyrwybt21",weighted:!1,hideOnCG:!1,linksTo:"link"}],small:[{link:["https://freegames.io/game/football-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Football Bros",active:!0,weighted:!0,hideOnCG:!0,imageExt:".png",id:"lz8tuwxpg",linksTo:"link"},{active:!0,imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral","https://www.crazygames.com/game/basketbros"],label:"Basket Bros",id:"kokajqjqu",weighted:!1,hideOnCG:!0,linksTo:"link"},{active:!0,linksToVipStore:"1",imageExt:".png",label:"VIP",id:"kuzrh1cwt",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{label:"Twitch Drops 7",imageExt:".png",id:"m7b5681oc",weighted:!1,hideOnCG:!1,linksTo:"linkToTwitch",linkToTwitch:"1",active:!1},{link:["https://freegames.io/game/mech-bros/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Mech Bros",weighted:!1,hideOnCG:!1,imageExt:".jpg",id:"lwk851end",linksTo:"link"},{link:["https://freegames.io/game/soccer-bros?utm_source=shell_shockers&utm_medium=referral","https://www.crazygames.com/game/soccer-bros"],label:"Soccer Bros",imageExt:".jpg",id:"lphl58wab",weighted:!1,hideOnCG:!1,linksTo:"link",active:!1},{imageExt:".png",label:"Private Games",id:"ls3tphkc6",active:!1,weighted:!1,hideOnCG:!1,linksTo:"linksToCreateGame",linksToCreateGame:"1"},{imageExt:".jpg",active:!1,label:"Shell Survey",link:["https://www.surveymonkey.com/r/septshell23"],id:"lofzjd42w",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Wrestle Bros",imageExt:".png",id:"lhkqsfa911",weighted:!1,hideOnCG:!1,linksTo:"link"}],bigBanner:[{active:!0,label:"VIP",linksToVipStore:"1",imageExt:".png",id:"kuzrh1cwg",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{active:!0,label:"VIP",linksToVipStore:"1",imageExt:".png",id:"kuzrh1cwh",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Basket Bros",active:!0,id:"kokal7c9i",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Basket Bros",active:!0,id:"kokamphkj",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Dragon Joust",link:["https://freegames.io/game/dragon-joust?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",active:!0,id:"laskwdxfs",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Dragon Joust",link:["https://freegames.io/game/dragon-joust?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskwvhat",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Bad Egg",link:["https://freegames.io/game/bad-egg?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskxj0mu",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Bad Egg",link:["https://freegames.io/game/bad-egg?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskxwdnv",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!0,label:"Wrestle Bros",imageExt:".png",id:"lhkqwo2pw",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Wrestle Bros",link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".png",id:"lhkqx9ohx",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,imageExt:".jpg",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Curious Correspondence",id:"kmy3p8p80",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Curious Correspondence",active:!1,id:"kmy3s9571",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Curious Correspondence",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,imageExt:".jpg",id:"kmy3tjgj2",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,label:"Friday the 13th Killer Puzzle",link:["https://f13killerpuzzle.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"kmz1018u3",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://f13killerpuzzle.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Friday the 13th Killer Puzzle",id:"kmz1140y4",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://store.steampowered.com/app/1233690/Hypergalactic_Psychic_Table_Tennis_3000/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Hypergalactic Psychic Table Tennis 3000",id:"kmz12sag5",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",active:!1,label:"Nuke Zone",link:["https://nuke.zone/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"kmz16o7h6",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://raid.land/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Raid Land",active:!1,id:"kmz18sjd7",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://slashycamp.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Slashy Camp",id:"kmz19yp68",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://slashycamp.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slashy Camp",active:!1,id:"kmz1ap9b9",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://bluewizard.com/slayawaycamp-free-to-slay/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slayaway Camp",active:!1,id:"kmz1bycra",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://bluewizard.com/slayawaycamp-free-to-slay/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slayaway Camp",active:!1,id:"kmz1cyblb",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",id:"kmz1evxgc",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",active:!1,imageExt:".jpg",id:"kmz1fpoxd",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",active:!1,id:"kmz1gms0e",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Shop Storm Crow",id:"kmz1h7u4f",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Headless",active:!1,link:["https://headless.gg/?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".jpg",id:"kp7h0zu8k",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Headless",link:["https://headless.gg/?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".jpg",id:"kp7h1ekxl",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=next-fest-launch"],label:"Nuke Zone Next Fest",imageExt:".jpg",id:"kpzrnq8fm",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nuke Zone Next Fest",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=next-fest-launch"],imageExt:".jpg",id:"kpzro6wzn",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",label:"Nuke Zone Demo",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=demo-june22"],active:!1,id:"kq88mifpo",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nuke Zone Demo",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=demo-june22"],imageExt:".jpg",id:"kq88n006p",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://apps.apple.com/app/apple-store/id1515978119?pt=118229234&ct=ss-house-ad&mt=8"],active:!1,label:"SS Mobile iOS",id:"krdzwhajq",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Cubic Castles",imageExt:".png",link:["https://castles.cc/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"ktn7rc9jr",weighted:!1,hideOnCG:!1,linksTo:"link"}],houseAdPercentChance:100,specialItemsTag:"Apr25",featuredSocialMedia:"Facebook",premFeatured:"premFeatTwo",smHouseAds:[{ad:"badEgg",weighted:0}],shellLogo:[{active:!1,label:"Christmas",imageExt:".svg",id:"lpn8kxv40",weighted:!1,hideOnCG:!1},{imageExt:".svg",label:"Egg Org 2",active:!1,id:"luhi1wp12",weighted:!1,hideOnCG:!1},{imageExt:".svg",label:"Halloween",id:"m1qxbsyk2",weighted:!1,hideOnCG:!1,active:!1}]};export{e as HousePromo};
|
|
3
|
+
const e={big:[{imageExt:".jpg",link:["https://basketballtips.info?utm_source=ssbigsplash&utm_medium=referral"],label:"BasketBros",active:!1,id:"kt4wqo5fb",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"castles",link:["https://castles.cc?utm=sssplash"],imageExt:".png",id:"kmv2r4wvq",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://www.surveymonkey.com/r/eggjune22?utm_source=sssplash"],label:"Survey",imageExt:".png",id:"l47ejll3r",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,label:"VIP Club",linksToVipStore:"1",id:"ki5mdikz13",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{active:!1,label:"Creators",link:["http://shellcreators.bluewizard.com/"],imageExt:".png",id:"kiutzlr317",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",label:"MonthlyUpdate",active:!1,id:"kperqror1b",linksToTaggedItems:"Merc",weighted:!1,hideOnCG:!1,linksTo:"linksToTaggedItems"},{link:["https://bluewizard.threadless.com/collections/shell-shockers"],label:"BW merch",active:!1,imageExt:".png",id:"kkxdntoi1f",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",linksToTaggedItems:"JulyM23",active:!1,label:"Monthy Update",id:"lk7f4zzi1r",weighted:!1,hideOnCG:!1,linksTo:"linksToTaggedItems"},{active:!1,label:"Twitch Drops",link:["https://shellshock.io/twitch?utm_source=ss-splash-ad&utm_medium=referral"],imageExt:".png",id:"lerd8ope1s",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nate Nook",link:["https://bluewizard.com/nate/?utm_source=sssplash"],imageExt:".jpg",id:"kzhfdvso1t",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Basketball Grenade",link:["https://basketbros.io/?utm_source=ssbigsplash&utm_medium=referral"],active:!1,imageExt:".png",id:"l0srdxke1v",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Bad Egg",imageExt:".png",link:["https://freegames.io/game/bad-egg?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],id:"lchuivey1x",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://dragonjoust.io?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],label:"Dragon Joust",imageExt:".png",active:!1,id:"lcsafw1j1y",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/zuck-vs-musk---techbro-beatdown?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],label:"Zuck v Musk",active:!1,imageExt:".jpg",id:"lj8r5m7o20",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io?utm_source=shellshockers&utm_medium=referral&utm_campaign=splashad"],active:!1,label:"Freegames",imageExt:".png",id:"ljyrwybt21",weighted:!1,hideOnCG:!1,linksTo:"link"}],small:[{link:["https://freegames.io/game/football-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Football Bros",active:!0,weighted:!0,hideOnCG:!0,imageExt:".png",id:"lz8tuwxpg",linksTo:"link"},{active:!0,imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral","https://www.crazygames.com/game/basketbros"],label:"Basket Bros",id:"kokajqjqu",weighted:!1,hideOnCG:!0,linksTo:"link"},{active:!0,linksToVipStore:"1",imageExt:".png",label:"VIP",id:"kuzrh1cwt",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{label:"Twitch Drops 7",imageExt:".png",id:"m7b5681oc",weighted:!1,hideOnCG:!1,linksTo:"linkToTwitch",linkToTwitch:"1",active:!1},{link:["https://freegames.io/game/mech-bros/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Mech Bros",weighted:!1,hideOnCG:!1,imageExt:".jpg",id:"lwk851end",linksTo:"link"},{link:["https://freegames.io/game/soccer-bros?utm_source=shell_shockers&utm_medium=referral","https://www.crazygames.com/game/soccer-bros"],label:"Soccer Bros",imageExt:".jpg",id:"lphl58wab",weighted:!1,hideOnCG:!1,linksTo:"link",active:!1},{imageExt:".png",label:"Private Games",id:"ls3tphkc6",active:!1,weighted:!1,hideOnCG:!1,linksTo:"linksToCreateGame",linksToCreateGame:"1"},{imageExt:".jpg",active:!1,label:"Shell Survey",link:["https://www.surveymonkey.com/r/septshell23"],id:"lofzjd42w",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Wrestle Bros",imageExt:".png",id:"lhkqsfa911",weighted:!1,hideOnCG:!1,linksTo:"link"}],bigBanner:[{active:!0,label:"VIP",linksToVipStore:"1",imageExt:".png",id:"kuzrh1cwg",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{active:!0,label:"VIP",linksToVipStore:"1",imageExt:".png",id:"kuzrh1cwh",weighted:!1,hideOnCG:!1,linksTo:"linksToVipStore"},{imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Basket Bros",active:!0,id:"kokal7c9i",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://freegames.io/game/basket-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Basket Bros",active:!0,id:"kokamphkj",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Dragon Joust",link:["https://freegames.io/game/dragon-joust?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",active:!0,id:"laskwdxfs",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Dragon Joust",link:["https://freegames.io/game/dragon-joust?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskwvhat",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Bad Egg",link:["https://freegames.io/game/bad-egg?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskxj0mu",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Bad Egg",link:["https://freegames.io/game/bad-egg?utm_source=shell_shockers&utm_medium=referral"],imageExt:".png",id:"laskxwdnv",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!0,label:"Wrestle Bros",imageExt:".png",id:"lhkqwo2pw",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!0,label:"Wrestle Bros",link:["https://freegames.io/game/wrestle-bros?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".png",id:"lhkqx9ohx",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,imageExt:".jpg",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Curious Correspondence",id:"kmy3p8p80",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Curious Correspondence",active:!1,id:"kmy3s9571",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Curious Correspondence",link:["https://www.curiouscorrespondence.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,imageExt:".jpg",id:"kmy3tjgj2",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,label:"Friday the 13th Killer Puzzle",link:["https://f13killerpuzzle.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"kmz1018u3",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://f13killerpuzzle.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Friday the 13th Killer Puzzle",id:"kmz1140y4",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://store.steampowered.com/app/1233690/Hypergalactic_Psychic_Table_Tennis_3000/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Hypergalactic Psychic Table Tennis 3000",id:"kmz12sag5",active:!1,weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",active:!1,label:"Nuke Zone",link:["https://nuke.zone/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"kmz16o7h6",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://raid.land/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Raid Land",active:!1,id:"kmz18sjd7",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://slashycamp.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Slashy Camp",id:"kmz19yp68",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://slashycamp.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slashy Camp",active:!1,id:"kmz1ap9b9",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://bluewizard.com/slayawaycamp-free-to-slay/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slayaway Camp",active:!1,id:"kmz1bycra",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://bluewizard.com/slayawaycamp-free-to-slay/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Slayaway Camp",active:!1,id:"kmz1cyblb",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",active:!1,link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",id:"kmz1evxgc",weighted:!1,hideOnCG:!1,linksTo:"link"},{link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",active:!1,imageExt:".jpg",id:"kmz1fpoxd",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],label:"Shop Storm Crow",active:!1,id:"kmz1gms0e",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",link:["https://shop.stormcrow.com/?utm_source=shell_shockers_houseads&utm_medium=referral"],active:!1,label:"Shop Storm Crow",id:"kmz1h7u4f",weighted:!1,hideOnCG:!1,linksTo:"link"},{label:"Headless",active:!1,link:["https://headless.gg/?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".jpg",id:"kp7h0zu8k",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Headless",link:["https://headless.gg/?utm_source=shell_shockers_houseads&utm_medium=referral"],imageExt:".jpg",id:"kp7h1ekxl",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=next-fest-launch"],label:"Nuke Zone Next Fest",imageExt:".jpg",id:"kpzrnq8fm",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nuke Zone Next Fest",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=next-fest-launch"],imageExt:".jpg",id:"kpzro6wzn",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".jpg",label:"Nuke Zone Demo",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=demo-june22"],active:!1,id:"kq88mifpo",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Nuke Zone Demo",link:["https://store.steampowered.com/app/1255530/Nuke_Zone/?utm_source=ss-house-ads&utm_medium=referral&utm_campaign=demo-june22"],imageExt:".jpg",id:"kq88n006p",weighted:!1,hideOnCG:!1,linksTo:"link"},{imageExt:".png",link:["https://apps.apple.com/app/apple-store/id1515978119?pt=118229234&ct=ss-house-ad&mt=8"],active:!1,label:"SS Mobile iOS",id:"krdzwhajq",weighted:!1,hideOnCG:!1,linksTo:"link"},{active:!1,label:"Cubic Castles",imageExt:".png",link:["https://castles.cc/?utm_source=shell_shockers_houseads&utm_medium=referral"],id:"ktn7rc9jr",weighted:!1,hideOnCG:!1,linksTo:"link"}],houseAdPercentChance:100,specialItemsTag:"May25",featuredSocialMedia:"Twitter",premFeatured:"premFeatOne",smHouseAds:[{ad:"badEgg",weighted:0}],shellLogo:[{active:!1,label:"Christmas",imageExt:".svg",id:"lpn8kxv40",weighted:!1,hideOnCG:!1},{imageExt:".svg",label:"Egg Org 2",active:!1,id:"luhi1wp12",weighted:!1,hideOnCG:!1},{imageExt:".svg",label:"Halloween",id:"m1qxbsyk2",weighted:!1,hideOnCG:!1,active:!1}]};export{e as HousePromo};
|