// ==UserScript== // @name zerbland mod // @namespace - // @version v1071 // @description face2face // @author Serplent // @match zombs.io // @match localhost // @grant none // @downloadURL none // ==/UserScript== let codec = new BinCodec(); game.script = {} window.containedSessions = []; window.SessionSaverIP = 'localhost:8000' let allowed1 = false; let e_PacketId = { "0": "PACKET_ENTITY_UPDATE", "1": "PACKET_PLAYER_COUNTER_UPDATE", "2": "PACKET_SET_WORLD_DIMENSIONS", "3": "PACKET_INPUT", "4": "PACKET_ENTER_WORLD", "5": "PACKET_PRE_ENTER_WORLD", "6": "PACKET_ENTER_WORLD2", "7": "PACKET_PING", "9": "PACKET_RPC", "PACKET_ENTITY_UPDATE": 0, "PACKET_PLAYER_COUNTER_UPDATE": 1, "PACKET_SET_WORLD_DIMENSIONS": 2, "PACKET_INPUT": 3, "PACKET_ENTER_WORLD": 4, "PACKET_PRE_ENTER_WORLD": 5, "PACKET_ENTER_WORLD2": 6, "PACKET_PING": 7, "PACKET_RPC": 9 }; let jsons = [ { name: 'BuildingShopPrices', response: { json: '[{"Name":"Wall","Class":"PlayerObject","GoldCosts":[0,5,30,60,80,100,250,800],"WoodCosts":[2,0,0,0,0,0,0,0],"StoneCosts":[0,2,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0,0],"Width":47.99,"Height":47.99,"Health":[150,200,300,400,600,800,1500,2500],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[5,7,12,17,25,40,80,250]},{"Name":"GoldStash","Class":"GoldStash","GoldCosts":[0,5000,10000,16000,20000,32000,100000,400000],"WoodCosts":[0,0,0,0,0,0,0,0],"StoneCosts":[0,0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0,0],"Width":95.99,"Height":95.99,"Health":[1500,1800,2300,3000,5000,8000,12000,20000],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[50,60,70,90,110,150,400,700]},{"Name":"GoldMine","Class":"GoldMine","GoldCosts":[0,200,300,600,800,1200,8000,30000],"WoodCosts":[5,15,25,35,45,55,700,1600],"StoneCosts":[5,15,25,35,45,55,700,1600],"TokenCosts":[0,0,0,0,0,0,0,0],"Width":95.99,"Height":95.99,"Health":[150,250,350,500,800,1400,1800,2800],"GoldPerSecond":[4,6,7,10,12,15,25,35],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[5,7,12,17,25,40,70,120]},{"Name":"Door","Class":"Door","GoldCosts":[0,10,50,70,150,200,400,800],"WoodCosts":[5,5,0,0,0,0,0,0],"StoneCosts":[5,5,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0,0],"Width":47.99,"Height":47.99,"Health":[150,200,300,500,700,1000,1500,2000],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,1000],"HealthRegenPerSecond":[5,7,12,17,25,40,70,100]},{"Name":"CannonTower","Class":"Tower","GoldCosts":[0,100,200,600,1200,2000,8000,35000],"WoodCosts":[15,25,30,40,60,80,300,800],"StoneCosts":[15,25,40,50,80,120,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"TowerRadius":[500,500,500,500,600,600,600,600],"MsBetweenFires":[1000,769,625,500,400,350,250,250],"Height":95.99,"Width":95.99,"Health":[150,200,400,800,1200,1600,2200,3600],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,150],"DamageToZombies":[20,30,50,70,120,150,200,300],"DamageToPlayers":[5,5,6,6,7,7,8,8],"DamageToPets":[5,5,5,5,5,5,6,8],"DamageToNeutrals":[250,350,450,550,650,750,850,1000],"ProjectileLifetime":[1000,1000,1000,1000,1000,1000,1000,1000],"ProjectileVelocity":[60,65,70,70,75,80,100,140],"ProjectileName":"CannonProjectile","ProjectileAoe":[true,true,true,true,true,true,true,true],"ProjectileAoeRadius":[250,250,250,250,250,250,250,250],"ProjectileCollisionRadius":[10,10,10,10,10,10,10,10]},{"Name":"ArrowTower","Class":"ArrowTower","GoldCosts":[0,100,200,600,1200,2000,8000,35000],"WoodCosts":[5,25,30,40,50,70,300,800],"StoneCosts":[5,20,30,40,60,80,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"TowerRadius":[600,650,700,750,800,850,900,1000],"MsBetweenFires":[400,333,285,250,250,250,250,250],"Height":95.99,"Width":95.99,"Health":[150,200,400,800,1200,1600,2200,3600],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,150],"DamageToZombies":[20,40,70,120,180,250,400,500],"DamageToPlayers":[5,5,6,6,7,7,8,8],"DamageToPets":[5,5,5,5,5,5,6,6],"DamageToNeutrals":[250,350,450,550,650,750,850,1000],"ProjectileLifetime":[1300,1300,1300,1300,1300,1300,1300,1300],"ProjectileVelocity":[60,65,70,70,75,80,120,140],"ProjectileName":"ArrowProjectile","ProjectileAoe":[false,false,false,false,false,false,false,false],"ProjectileCollisionRadius":[10,10,10,10,10,10,10,10]},{"Name":"Harvester","Class":"Harvester","GoldCosts":[0,100,200,600,1200,2000,8000,10000],"WoodCosts":[5,25,30,40,50,70,300,600],"StoneCosts":[5,20,30,40,60,80,300,600],"TokenCosts":[0,0,0,0,0,0,0,0],"Height":95.99,"Width":95.99,"Health":[150,200,400,800,1200,1600,2200,2800],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,130],"HarvestAmount":[2.5,4.65,4.55,7.2,8.25,10,13.5,16],"HarvestCooldown":[1500,1400,1300,1200,1100,1000,900,800],"HarvestMax":[400,800,1200,1600,2000,2400,2800,3600],"HarvestRange":[300,300,300,300,300,300,300,300],"DepositCostPerMinute":[200,300,350,500,600,700,1200,1400],"DepositMax":[800,1200,1400,2000,2400,2800,4800,6000],"MaxYawDeviation":[70,70,70,70,70,70,70,70]},{"Name":"BombTower","Class":"Tower","GoldCosts":[0,100,200,600,1200,2000,8000,35000],"WoodCosts":[10,25,40,50,80,120,300,800],"StoneCosts":[10,25,40,50,80,120,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"TowerRadius":[1000,1000,1000,1000,1000,1000,1000,1000],"MsBetweenFires":[1000,1000,1000,1000,1000,1000,900,900],"Height":95.99,"Width":95.99,"Health":[150,200,400,800,1200,1600,2200,3600],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,150],"DamageToZombies":[30,60,100,140,200,600,1200,1600],"DamageToPlayers":[9,9,10,10,11,11,12,12],"DamageToPets":[10,10,10,10,10,10,10,10],"DamageToNeutrals":[250,350,450,550,650,750,850,1000],"ProjectileLifetime":[1000,1000,1000,1000,1000,1000,1000,1000],"ProjectileVelocity":[20,20,20,20,20,20,20,20],"ProjectileName":"BombProjectile","ProjectileAoe":[true,true,true,true,true,true,true,true],"ProjectileIgnoresCollisions":[true,true,true,true,true,true,true,true],"ProjectileAoeRadius":[250,250,250,250,250,250,250,250],"ProjectileCollisionRadius":[10,10,10,10,10,10,10,10],"ProjectileMaxRange":[1000,1000,1000,1000,1000,1000,1000,1000]},{"Name":"MagicTower","Class":"MagicTower","GoldCosts":[0,100,200,600,1200,2000,8000,35000],"WoodCosts":[15,25,40,50,70,100,300,800],"StoneCosts":[15,25,40,50,70,100,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"TowerRadius":[400,400,400,400,400,400,400,400],"MsBetweenFires":[800,800,700,600,500,400,300,300],"Height":95.99,"Width":95.99,"Health":[150,200,400,800,1200,1600,2200,3600],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,150],"DamageToZombies":[10,20,40,50,70,80,120,160],"DamageToPlayers":[5,5,5,6,6,6,7,7],"DamageToPets":[5,5,5,5,5,5,5,5],"DamageToNeutrals":[250,350,450,550,650,750,850,1000],"ProjectileLifetime":[500,500,500,500,500,500,500,500],"ProjectileVelocity":[45,45,45,45,45,45,45,45],"ProjectileName":"FireballProjectile","ProjectileAoe":[true,true,true,true,true,true,true,true],"ProjectileAoeRadius":[100,100,100,100,100,100,100,100],"ProjectileCollisionRadius":[10,10,10,10,10,10,10,10]},{"Name":"MeleeTower","Class":"MeleeTower","GoldCosts":[0,100,200,600,1200,2000,8000,35000],"WoodCosts":[10,25,30,40,50,70,300,800],"StoneCosts":[10,20,30,40,60,80,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"TowerRadius":[110,110,110,110,110,110,110,110],"MsBetweenFires":[400,333,285,250,250,250,250,250],"Height":95.99,"Width":95.99,"Health":[200,400,800,1200,1600,2200,4000,9000],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,220,350],"DamageToZombies":[80,120,200,280,500,1000,2000,3000],"DamageToPlayers":[5,6,7,8,9,10,11,12],"DamageToPets":[5,5,5,5,5,5,6,6],"DamageToNeutrals":[250,350,450,550,650,750,850,1000],"MaxYawDeviation":[30,30,30,30,30,30,30,30]},{"Name":"SlowTrap","Class":"Trap","GoldCosts":[0,100,200,400,600,800,1000,1500],"WoodCosts":[5,25,30,40,50,70,300,800],"StoneCosts":[5,20,30,40,60,80,300,800],"TokenCosts":[0,0,0,0,0,0,0,0],"Height":47.99,"Width":47.99,"Health":[150,200,400,800,1200,1600,2200,3000],"MsBeforeRegen":[10000,10000,10000,10000,10000,10000,10000,10000],"HealthRegenPerSecond":[2,5,10,20,40,80,110,150],"SlowDuration":[2500,2500,2500,3000,3000,3250,3500,4000],"SlowAmount":[0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.7]}]' }, opcode: 9 }, { name: 'ItemShopPrices', response: { json: '[{"Name":"Spear","Class":"MeleeWeapon","MsBetweenFires":[250,250,250,250,250,250,250],"DamageToZombies":[30,80,120,300,2000,8000,10000],"DamageToNeutrals":[50,80,100,200,250,400,600],"DamageToBuildings":[0.75,1.5,2.25,3,3.75,4.5,5.25],"DamageToPlayers":[15,16,17,18,20,22,22],"DamageToPets":[3,3.5,4,4.5,5,5.5,5.5],"GoldCosts":[1400,2800,5600,11200,22500,45000,90000],"StoneCosts":[0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0],"Range":[100,100,100,100,100,100,100],"MaxYawDeviation":[50,50,50,50,50,50,50]},{"Name":"Pickaxe","Class":"MeleeWeapon","MsBetweenFires":[300,300,285,250,200,200,200],"DamageToZombies":[20,20,20,20,20,20,20],"DamageToBuildings":[0,0,0,0,0,0,0],"DamageToPlayers":[0,0,0,0,0,0,0],"DamageToNeutrals":[10,10,10,10,10,10,10],"DamageToPets":[0,0,0,0,0,0,0],"GoldCosts":[0,1000,3000,6000,8000,24000,90000],"StoneCosts":[0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0],"Range":[100,100,100,100,100,100,100],"MaxYawDeviation":[70,70,70,70,70,70,70],"IsTool":true,"HarvestCount":[1,2,2,3,3,4,6]},{"Name":"Bow","Class":"RangedWeapon","DamageToZombies":[20,40,100,300,2400,10000,14000],"DamageToBuildings":[2,2.3,2.5,2.7,3,3,3],"DamageToPlayers":[22,24,26,28,30,32,32],"DamageToNeutrals":[50,100,150,200,250,400,700],"DamageToPets":[2,2.3,2.5,2.7,3,3,3],"GoldCosts":[100,400,2000,7000,24000,30000,90000],"StoneCosts":[0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0],"MsBetweenFires":[500,500,500,500,500,500,500],"ChargeTime":[150,150,150,150,150,150,150],"ProjectileVelocity":[100,100,100,100,100,100,100],"ProjectileName":"BowProjectile","ProjectileCollisionRadius":[10,10,10,10,10,10,10],"ProjectileLifetime":[550,550,550,550,550,550,550]},{"Name":"Bomb","Class":"RangedWeapon","GoldCosts":[100,400,3000,5000,24000,30000,90000],"DamageToNeutrals":[50,100,150,200,250,300,500],"StoneCosts":[0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0],"MsBetweenFires":[500,500,500,500,500,500,500],"DamageToZombies":[10,30,80,150,1200,6000,9000],"DamageToBuildings":[1,1,1,1,1,1,1],"DamageToPlayers":[20,22,24,26,28,30,30],"DamageToPets":[1,1,1,1,1,1,1],"ProjectileVelocity":[40,40,40,40,40,40,40],"ProjectileName":"BombProjectile","ProjectileCollisionRadius":[10,10,10,10,10,10,10],"ProjectileLifetime":[700,700,700,700,700,700,700],"ProjectileAoe":[true,true,true,true,true,true,true],"ProjectileAoeRadius":[50,50,50,50,50,50,50],"ProjectileIgnoresCollisions":[false,false,false,false,false,false,false],"ProjectileMaxRange":[700,700,700,700,700,700,700]},{"Name":"HealthPotion","Class":"HealthPotion","GoldCosts":[100],"StoneCosts":[0],"WoodCosts":[0],"TokenCosts":[0],"PurchaseCooldown":15000},{"Name":"ZombieShield","Class":"ZombieShield","GoldCosts":[1000,3000,7000,14000,18000,22000,24000,30000,45000,70000],"StoneCosts":[0,0,0,0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0,0,0,0],"TokenCosts":[0,0,0,0,0,0,0,0,0,0],"Health":[500,1000,1800,4000,10000,20000,35000,50000,65000,85000],"RechargePerSecond":[50,100,200,400,1000,2000,3500,5000,6500,8500],"MsBeforeRecharge":[10000,9000,8000,7000,6000,6000,6000,6000,6000,6000]},{"Name":"Pause","Class":"Pause","GoldCosts":[10000],"StoneCosts":[0],"WoodCosts":[0],"TokenCosts":[0],"PurchaseCooldown":240000},{"Name":"PetMiner","Class":"Pet","GoldCosts":[0,0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0,0],"StoneCosts":[0,0,0,0,0,0,0,0],"TokenCosts":[0,100,100,100,100,200,200,300],"CollisionRadius":25,"Health":[400,800,1500,3000,5000,8000,10000,16000],"MsBeforeRegen":[8000,8000,8000,8000,8000,8000,8000,8000],"HealthRegenPerSecond":[5,5,5,5,5,5,5,5],"Speed":[30,32,34,35,35,37,37,38],"DamageToNeutrals":[80,100,150,200,250,400,500,600],"HarvestCount":[1,1,2,2,3,3,4,4],"Ranged":[false,false,false,false,false,false,false,false],"CanAttackPlayers":[false,false,false,false,false,false,false,false],"CanMine":[true,true,true,true,true,true,true,true],"LeashRange":[500,500,500,500,500,500,500,500],"HarvestLeashRange":[0,0,0,0,0,0,0,0],"AttackRange":[80,80,80,80,80,80,80,80],"MsBetweenFires":[500,450,450,400,400,380,380,350],"EvolvesAtLevel":[0,8,16,24,32,48,64,96],"ExperienceFromMiningPerHalfSecond":[1,1,1,1,1,1,1,1]},{"Name":"PetCARL","Class":"Pet","GoldCosts":[0,0,0,0,0,0,0,0],"WoodCosts":[0,0,0,0,0,0,0,0],"StoneCosts":[0,0,0,0,0,0,0,0],"TokenCosts":[0,100,100,100,100,200,200,300],"CollisionRadius":25,"Health":[400,800,1500,3000,5000,8000,10000,16000],"MsBeforeRegen":[8000,8000,8000,8000,8000,8000,8000,8000],"HealthRegenPerSecond":[5,5,5,5,5,5,5,5],"Speed":[30,32,34,35,35,37,37,38],"DamageToNeutrals":[80,100,150,200,250,400,500,600],"Ranged":[false,false,false,false,false,false,false,false],"CanAttackPlayers":[true,true,true,true,true,true,true,true],"LeashRange":[500,500,500,500,500,500,500,500],"AttackRange":[80,80,80,80,80,80,80,80],"MsBetweenFires":[500,490,490,490,480,480,470,470],"ProjectileLifetime":[1000,1000,1000,1000,1000,1000,1000,1000],"ProjectileVelocity":[60,60,60,60,60,60,60,60],"ProjectileName":"PetCARLProjectile","ProjectileAoe":[true,true,true,true,true,true,true,true],"ProjectileAoeRadius":[250,250,250,250,250,250,250,250],"ProjectileCollisionRadius":[10,10,10,10,10,10,10,10],"DamageToZombies":[30,100,400,600,1000,3000,6000,8000],"DamageToPlayers":[30,31,32,33,34,35,36,37],"DamageToBuildings":[2,2,2,3,3,3,4,4],"EvolvesAtLevel":[0,8,16,24,32,48,64,96],"ExperienceFromZombies":[30,28,25,25,25,25,25,25],"ExperienceFromNeutrals":[30,28,25,25,25,25,25,25]},{"Name":"HatHorns","Class":"Hat","GoldCosts":[0],"WoodCosts":[0],"StoneCosts":[0],"TokenCosts":[0]},{"Name":"PetHealthPotion","Class":"PetHealthPotion","GoldCosts":[100],"StoneCosts":[0],"WoodCosts":[0],"TokenCosts":[0]},{"Name":"PetWhistle","Class":"PetWhistle","GoldCosts":[0],"StoneCosts":[0],"WoodCosts":[0],"TokenCosts":[0]},{"Name":"PetRevive","Class":"PetRevive","GoldCosts":[0],"StoneCosts":[0],"WoodCosts":[0],"TokenCosts":[0]}]' }, opcode: 9 }, { name: 'Spells', response: { json: '[{"Name":"HealTowersSpell","VisualLifetime":10000,"VisualRadius":600,"Cooldown":[240000],"IsCooldownForParty":true,"Healing":[{"Type":"Tower","Amount":[50],"Over":[10000],"Radius":[600]}],"GoldCosts":[1000],"WoodCosts":[0],"StoneCosts":[0],"TokenCosts":[0]}]' }, opcode: 9 } ]; game.script.codec = new BinCodec(); let codecJSON = '{"attributeMaps":{"667546015":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1},{"name":"lastPetDamage","type":3},{"name":"lastPetDamageTick","type":1},{"name":"lastPetDamageTarget","type":1},{"name":"firingTick","type":1},{"name":"experience","type":1},{"name":"stoneGain","type":3},{"name":"woodGain","type":3},{"name":"stoneGainTick","type":1},{"name":"woodGainTick","type":1}],"742594995":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1}],"1059671174":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"firingTick","type":1},{"name":"lastDamagedTick","type":1}],"1372600389":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"hits","type":8}],"1496910567":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"firingTick","type":1}],"1566069472":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1}],"1672634632":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1}],"1816895259":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1}],"2092990061":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1}],"2093252446":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"hits","type":8}],"2347737811":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"reconnectSecret","type":4},{"name":"name","type":4},{"name":"score","type":13},{"name":"baseSpeed","type":3},{"name":"speedAttribute","type":3},{"name":"availableSkillPoints","type":2},{"name":"experience","type":3},{"name":"level","type":1},{"name":"msBetweenFires","type":3},{"name":"aimingYaw","type":2},{"name":"energy","type":3},{"name":"maxEnergy","type":3},{"name":"energyRegenerationRate","type":3},{"name":"kills","type":2},{"name":"weaponName","type":4},{"name":"weaponTier","type":1},{"name":"firingTick","type":1},{"name":"startChargingTick","type":1},{"name":"stone","type":15},{"name":"wood","type":15},{"name":"gold","type":15},{"name":"token","type":15},{"name":"wave","type":1},{"name":"partyId","type":1},{"name":"zombieShieldHealth","type":3},{"name":"zombieShieldMaxHealth","type":3},{"name":"isPaused","type":1},{"name":"isInvulnerable","type":1},{"name":"lastPetDamage","type":3},{"name":"lastPetDamageTick","type":1},{"name":"lastPetDamageTarget","type":1},{"name":"lastDamage","type":3},{"name":"lastDamageTick","type":1},{"name":"lastDamageTarget","type":1},{"name":"hatName","type":4},{"name":"petUid","type":1},{"name":"isBuildingWalking","type":10}],"2402467733":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1}],"2462472648":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1}],"2464630638":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1}],"2899981078":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1},{"name":"harvestMax","type":1},{"name":"stone","type":1},{"name":"wood","type":1},{"name":"firingTick","type":1},{"name":"deposit","type":3},{"name":"depositMax","type":3},{"name":"lastHarvestedBy","type":4}],"2969697641":[{"name":"position","type":5},{"name":"yaw","type":2},{"name":"health","type":3},{"name":"maxHealth","type":3},{"name":"damage","type":3},{"name":"height","type":3},{"name":"width","type":3},{"name":"collisionRadius","type":1},{"name":"model","type":4},{"name":"entityClass","type":4},{"name":"dead","type":1},{"name":"timeDead","type":3},{"name":"slowed","type":1},{"name":"stunned","type":1},{"name":"tier","type":1},{"name":"partyId","type":1},{"name":"towerYaw","type":3},{"name":"firingTick","type":1},{"name":"healingTick","type":1}]},"entityTypeNames":{"667546015":"Pet","742594995":"GoldMine","1059671174":"Zombie","1372600389":"Stone","1496910567":"Neutral","1566069472":"PlayerObject","1672634632":"NeutralCamp","1816895259":"GameProjectile","2092990061":"Trap","2093252446":"Tree","2347737811":"GamePlayer","2402467733":"GoldStash","2462472648":"Spell","2464630638":"Door","2899981078":"Harvester","2969697641":"Tower"},"rpcMaps":[{"name":"Shutdown","parameters":[{"name":"reason","type":3},{"name":"shutdownUnix","type":0}],"isArray":false,"index":0},{"name":"ReceiveChatMessage","parameters":[{"name":"displayName","type":3},{"name":"channel","type":3},{"name":"message","type":3},{"name":"uid","type":0}],"isArray":false,"index":1},{"name":"SendChatMessage","parameters":[{"name":"channel","type":3},{"name":"message","type":3}],"isArray":false,"index":2},{"name":"Login","parameters":[{"name":"token","type":3}],"isArray":false,"index":3},{"name":"LoginResponse","parameters":[{"name":"json","type":3}],"isArray":false,"index":4},{"name":"AccountSession","parameters":[{"name":"json","type":3}],"isArray":false,"index":5},{"name":"Metrics","parameters":[{"name":"minFps","type":2},{"name":"maxFps","type":2},{"name":"currentFps","type":2},{"name":"averageFps","type":2},{"name":"framesRendered","type":2},{"name":"framesInterpolated","type":2},{"name":"framesExtrapolated","type":2},{"name":"allocatedNetworkEntities","type":2},{"name":"currentClientLag","type":2},{"name":"minClientLag","type":2},{"name":"maxClientLag","type":2},{"name":"currentPing","type":2},{"name":"minPing","type":2},{"name":"maxPing","type":2},{"name":"averagePing","type":2},{"name":"longFrames","type":2},{"name":"stutters","type":2},{"name":"group","type":0},{"name":"isMobile","type":0},{"name":"timeResets","type":2},{"name":"maxExtrapolationTime","type":2},{"name":"extrapolationIncidents","type":2},{"name":"totalExtrapolationTime","type":2},{"name":"differenceInClientTime","type":2}],"isArray":false,"index":6},{"name":"DayCycle","parameters":[{"name":"cycleStartTick","type":0},{"name":"nightEndTick","type":0},{"name":"dayEndTick","type":0},{"name":"isDay","type":0}],"isArray":false,"index":7},{"name":"MakeBuilding","parameters":[{"name":"x","type":1},{"name":"y","type":1},{"name":"type","type":3},{"name":"yaw","type":1}],"isArray":false,"index":8},{"name":"BuildingShopPrices","parameters":[{"name":"json","type":3}],"isArray":false,"index":9},{"name":"ItemShopPrices","parameters":[{"name":"json","type":3},{"name":"json","type":3}],"isArray":false,"index":10},{"name":"LocalBuilding","parameters":[{"name":"x","type":1},{"name":"y","type":1},{"name":"type","type":3},{"name":"dead","type":0},{"name":"uid","type":0},{"name":"tier","type":0}],"isArray":true,"index":11},{"name":"Dead","parameters":[{"name":"stashDied","type":0}],"isArray":false,"index":12},{"name":"Admin","parameters":[{"name":"password","type":3},{"name":"command","type":3}],"isArray":false,"index":13},{"name":"UpgradeBuilding","parameters":[{"name":"uid","type":0}],"isArray":false,"index":14},{"name":"DeleteBuilding","parameters":[{"name":"uid","type":0}],"isArray":false,"index":15},{"name":"BuyItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0}],"isArray":false,"index":16},{"name":"SetItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0},{"name":"stacks","type":0}],"isArray":false,"index":17},{"name":"EquipItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0}],"isArray":false,"index":18},{"name":"SetOpenParty","parameters":[{"name":"isOpen","type":0}],"isArray":false,"index":19},{"name":"SetPartyName","parameters":[{"name":"partyName","type":3}],"isArray":false,"index":20},{"name":"SetPartyMemberCanSell","parameters":[{"name":"uid","type":0},{"name":"canSell","type":0}],"isArray":false,"index":21},{"name":"JoinParty","parameters":[{"name":"partyId","type":0}],"isArray":false,"index":22},{"name":"JoinPartyByShareKey","parameters":[{"name":"partyShareKey","type":3}],"isArray":false,"index":23},{"name":"PartyApplicant","parameters":[{"name":"displayName","type":3},{"name":"applicantUid","type":0}],"isArray":false,"index":24},{"name":"PartyApplicantDecide","parameters":[{"name":"applicantUid","type":0},{"name":"accepted","type":0}],"isArray":false,"index":25},{"name":"PartyApplicantDenied","parameters":[],"isArray":false,"index":26},{"name":"PartyApplicantExpired","parameters":[{"name":"applicantUid","type":0}],"isArray":false,"index":27},{"name":"PartyShareKey","parameters":[{"name":"partyShareKey","type":3}],"isArray":false,"index":28},{"name":"PartyInfo","parameters":[{"name":"playerUid","type":0},{"name":"displayName","type":3},{"name":"isLeader","type":0},{"name":"canSell","type":0}],"isArray":true,"index":29},{"name":"AddParty","parameters":[{"name":"partyId","type":0},{"name":"partyName","type":3},{"name":"isOpen","type":0},{"name":"memberCount","type":0}],"isArray":false,"index":30},{"name":"RemoveParty","parameters":[{"name":"partyId","type":0}],"isArray":false,"index":31},{"name":"Leaderboard","parameters":[{"name":"name","type":3},{"name":"uid","type":0},{"name":"rank","type":0},{"name":"score","type":4},{"name":"wave","type":0}],"isArray":true,"index":32},{"name":"Failure","parameters":[{"name":"category","type":3},{"name":"reason","type":3},{"name":"x","type":0},{"name":"y","type":0},{"name":"type","type":3}],"isArray":false,"index":33},{"name":"RecallPet","parameters":[],"isArray":false,"index":34},{"name":"LeaveParty","parameters":[],"isArray":false,"index":35},{"name":"KickParty","parameters":[{"name":"uid","type":0}],"isArray":false,"index":36},{"name":"AddDepositToHarvester","parameters":[{"name":"uid","type":0},{"name":"deposit","type":2}],"isArray":false,"index":37},{"name":"CollectHarvester","parameters":[{"name":"uid","type":0}],"isArray":false,"index":38},{"name":"CastSpell","parameters":[{"name":"spell","type":3},{"name":"x","type":1},{"name":"y","type":1},{"name":"tier","type":0}],"isArray":false,"index":39},{"name":"CastSpellResponse","parameters":[{"name":"spell","type":3},{"name":"cooldown","type":0},{"name":"cooldownStartTick","type":0}],"isArray":false,"index":40},{"name":"Spells","parameters":[{"name":"json","type":3}],"isArray":false,"index":41},{"name":"SetPartyList","parameters":[{"name":"partyId","type":0},{"name":"partyName","type":3},{"name":"isOpen","type":0},{"name":"memberCount","type":0}],"isArray":true,"index":42}],"rpcMapsByName":{"Shutdown":{"name":"Shutdown","parameters":[{"name":"reason","type":3},{"name":"shutdownUnix","type":0}],"isArray":false,"index":0},"ReceiveChatMessage":{"name":"ReceiveChatMessage","parameters":[{"name":"displayName","type":3},{"name":"channel","type":3},{"name":"message","type":3},{"name":"uid","type":0}],"isArray":false,"index":1},"SendChatMessage":{"name":"SendChatMessage","parameters":[{"name":"channel","type":3},{"name":"message","type":3}],"isArray":false,"index":2},"Login":{"name":"Login","parameters":[{"name":"token","type":3}],"isArray":false,"index":3},"LoginResponse":{"name":"LoginResponse","parameters":[{"name":"json","type":3}],"isArray":false,"index":4},"AccountSession":{"name":"AccountSession","parameters":[{"name":"json","type":3}],"isArray":false,"index":5},"Metrics":{"name":"Metrics","parameters":[{"name":"minFps","type":2},{"name":"maxFps","type":2},{"name":"currentFps","type":2},{"name":"averageFps","type":2},{"name":"framesRendered","type":2},{"name":"framesInterpolated","type":2},{"name":"framesExtrapolated","type":2},{"name":"allocatedNetworkEntities","type":2},{"name":"currentClientLag","type":2},{"name":"minClientLag","type":2},{"name":"maxClientLag","type":2},{"name":"currentPing","type":2},{"name":"minPing","type":2},{"name":"maxPing","type":2},{"name":"averagePing","type":2},{"name":"longFrames","type":2},{"name":"stutters","type":2},{"name":"group","type":0},{"name":"isMobile","type":0},{"name":"timeResets","type":2},{"name":"maxExtrapolationTime","type":2},{"name":"extrapolationIncidents","type":2},{"name":"totalExtrapolationTime","type":2},{"name":"differenceInClientTime","type":2}],"isArray":false,"index":6},"DayCycle":{"name":"DayCycle","parameters":[{"name":"cycleStartTick","type":0},{"name":"nightEndTick","type":0},{"name":"dayEndTick","type":0},{"name":"isDay","type":0}],"isArray":false,"index":7},"MakeBuilding":{"name":"MakeBuilding","parameters":[{"name":"x","type":1},{"name":"y","type":1},{"name":"type","type":3},{"name":"yaw","type":1}],"isArray":false,"index":8},"BuildingShopPrices":{"name":"BuildingShopPrices","parameters":[{"name":"json","type":3}],"isArray":false,"index":9},"ItemShopPrices":{"name":"ItemShopPrices","parameters":[{"name":"json","type":3},{"name":"json","type":3}],"isArray":false,"index":10},"LocalBuilding":{"name":"LocalBuilding","parameters":[{"name":"x","type":1},{"name":"y","type":1},{"name":"type","type":3},{"name":"dead","type":0},{"name":"uid","type":0},{"name":"tier","type":0}],"isArray":true,"index":11},"Dead":{"name":"Dead","parameters":[{"name":"stashDied","type":0}],"isArray":false,"index":12},"Admin":{"name":"Admin","parameters":[{"name":"password","type":3},{"name":"command","type":3}],"isArray":false,"index":13},"UpgradeBuilding":{"name":"UpgradeBuilding","parameters":[{"name":"uid","type":0}],"isArray":false,"index":14},"DeleteBuilding":{"name":"DeleteBuilding","parameters":[{"name":"uid","type":0}],"isArray":false,"index":15},"BuyItem":{"name":"BuyItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0}],"isArray":false,"index":16},"SetItem":{"name":"SetItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0},{"name":"stacks","type":0}],"isArray":false,"index":17},"EquipItem":{"name":"EquipItem","parameters":[{"name":"itemName","type":3},{"name":"tier","type":0}],"isArray":false,"index":18},"SetOpenParty":{"name":"SetOpenParty","parameters":[{"name":"isOpen","type":0}],"isArray":false,"index":19},"SetPartyName":{"name":"SetPartyName","parameters":[{"name":"partyName","type":3}],"isArray":false,"index":20},"SetPartyMemberCanSell":{"name":"SetPartyMemberCanSell","parameters":[{"name":"uid","type":0},{"name":"canSell","type":0}],"isArray":false,"index":21},"JoinParty":{"name":"JoinParty","parameters":[{"name":"partyId","type":0}],"isArray":false,"index":22},"JoinPartyByShareKey":{"name":"JoinPartyByShareKey","parameters":[{"name":"partyShareKey","type":3}],"isArray":false,"index":23},"PartyApplicant":{"name":"PartyApplicant","parameters":[{"name":"displayName","type":3},{"name":"applicantUid","type":0}],"isArray":false,"index":24},"PartyApplicantDecide":{"name":"PartyApplicantDecide","parameters":[{"name":"applicantUid","type":0},{"name":"accepted","type":0}],"isArray":false,"index":25},"PartyApplicantDenied":{"name":"PartyApplicantDenied","parameters":[],"isArray":false,"index":26},"PartyApplicantExpired":{"name":"PartyApplicantExpired","parameters":[{"name":"applicantUid","type":0}],"isArray":false,"index":27},"PartyShareKey":{"name":"PartyShareKey","parameters":[{"name":"partyShareKey","type":3}],"isArray":false,"index":28},"PartyInfo":{"name":"PartyInfo","parameters":[{"name":"playerUid","type":0},{"name":"displayName","type":3},{"name":"isLeader","type":0},{"name":"canSell","type":0}],"isArray":true,"index":29},"AddParty":{"name":"AddParty","parameters":[{"name":"partyId","type":0},{"name":"partyName","type":3},{"name":"isOpen","type":0},{"name":"memberCount","type":0}],"isArray":false,"index":30},"RemoveParty":{"name":"RemoveParty","parameters":[{"name":"partyId","type":0}],"isArray":false,"index":31},"Leaderboard":{"name":"Leaderboard","parameters":[{"name":"name","type":3},{"name":"uid","type":0},{"name":"rank","type":0},{"name":"score","type":4},{"name":"wave","type":0}],"isArray":true,"index":32},"Failure":{"name":"Failure","parameters":[{"name":"category","type":3},{"name":"reason","type":3},{"name":"x","type":0},{"name":"y","type":0},{"name":"type","type":3}],"isArray":false,"index":33},"RecallPet":{"name":"RecallPet","parameters":[],"isArray":false,"index":34},"LeaveParty":{"name":"LeaveParty","parameters":[],"isArray":false,"index":35},"KickParty":{"name":"KickParty","parameters":[{"name":"uid","type":0}],"isArray":false,"index":36},"AddDepositToHarvester":{"name":"AddDepositToHarvester","parameters":[{"name":"uid","type":0},{"name":"deposit","type":2}],"isArray":false,"index":37},"CollectHarvester":{"name":"CollectHarvester","parameters":[{"name":"uid","type":0}],"isArray":false,"index":38},"CastSpell":{"name":"CastSpell","parameters":[{"name":"spell","type":3},{"name":"x","type":1},{"name":"y","type":1},{"name":"tier","type":0}],"isArray":false,"index":39},"CastSpellResponse":{"name":"CastSpellResponse","parameters":[{"name":"spell","type":3},{"name":"cooldown","type":0},{"name":"cooldownStartTick","type":0}],"isArray":false,"index":40},"Spells":{"name":"Spells","parameters":[{"name":"json","type":3}],"isArray":false,"index":41},"SetPartyList":{"name":"SetPartyList","parameters":[{"name":"partyId","type":0},{"name":"partyName","type":3},{"name":"isOpen","type":0},{"name":"memberCount","type":0}],"isArray":true,"index":42}}}' window.firstmsg; const onMessageHandler = (event) => { game.network.emitter.emit(e_PacketId[event.opcode], event); }; class Connection { constructor(type, url) { this.WebSocket = new WebSocket(document.getElementsByClassName("dropdown")[0].value); this.WebSocket.binaryType = "arraybuffer"; this.type = type || "user"; this.userId = null; this.WebSocket.onopen = this.onOpen.bind(this); }; encode(e) { return new Uint8Array(game.script.codec.encode(9, { name: "message", msg: e })); }; decode(e) { return game.script.codec.decode(e).response.msg; }; sendMessage(m) { if (this.WebSocket.readyState == this.WebSocket.OPEN) { this.WebSocket.send(this.encode(m)); }; }; onOpen() { this.sendMessage("plsverify"); }; }; class Client extends Connection { constructor() { super("user"); this.activeSessions = {}; this.WebSocket.onmessage = this.onMessage.bind(this); this.WebSocket.onclose = this.onClose.bind(this); this.notAllowedCharsInHTML = new Map([["<", '<'], [">", '>']]); }; onMessage(m) { let x = new Uint8Array(m.data); if (x[0] == 0 || x[0] == 8) { if (x[0] == 8) x[0] = 9; let obj = game.network.codec.decode(x); if (obj.opcode == 0) { onMessageHandler(obj); } if (obj.opcode == 9) { onMessageHandler(obj); } return; } let msg = this.decode(m.data); if (msg.startsWith("encodeyounoob")) { let encoded = this.cipher("thisisblack")(msg.split(", ;")[1]); this.sendMessage(`decodednoob, ;${encoded}`); } if (msg == "accesssuccess") { this.sendMessage(this.type); } if (msg.startsWith("id")) { this.clientId = parseInt(msg.split(", ;")[1]); }; if (msg.startsWith("sessions")) { let args = msg.split(", ;"); this.activeSessions = JSON.parse(args[1]); document.getElementsByClassName("savedsessions")[0].innerHTML = ""; let counter = 0; Object.values(this.activeSessions).sort((a, b) => a.sessionUserId - b.sessionUserId).forEach(e => { counter++; if ((counter % 2) == 0) { $("savedsessions").innerHTML += `
`; } else { $("savedsessions").innerHTML += `  `; } }); } if (msg.startsWith("data")) { let obj = JSON.parse(msg.split(", ;")[1]); if (obj.opcode == 0) { let entities = {}; obj.entities.forEach(k => { entities[k[0]] = k[1]; }); onMessageHandler({ tick: obj.tick, entities: entities, byteSize: obj.byteSize, opcode: obj.opcode }); }; if (obj.opcode == 9) { onMessageHandler(obj); }; }; if (msg.startsWith("verifydata")) { let args = msg.split(", ;"); let data = JSON.parse(args[1]); console.log(data) let codec = JSON.parse(codecJSON); for (let i in codec) { game.network.codec[i] = codec[i]; }; game.network.codec.sortedUidsByType = data.sortedUidsByType; game.network.codec.removedEntities = data.removedEntities; game.network.codec.absentEntitiesFlags = data.absentEntitiesFlags; game.network.codec.updatedEntityFlags = data.updatedEntityFlags; game.network.socket = { readyState: 1 } game.network.socket.send = (e) => this.sendBuffer(new Uint8Array(e)); game.network.sendPacket = (e, t) => { if (e == 4 || e == 5 || e == 6 || e == 7) return; this.sendPacket(e, t); }; game.options.serverId = data.serverId; game.network.connectionOptions = game.options.servers[data.serverId]; game.options.nickname = data.syncNeeds[0].effectiveDisplayName; game.world.inWorld = true; if (data.useRequiredEquipment) { document.useRequiredEquipment = true; }; if (data.petActivated) { window.activated = true; }; for (let i = 0; i < jsons.length; i++) { onMessageHandler(jsons[i]); }; for (let i = 0; i < data.syncNeeds.length; i++) { onMessageHandler(data.syncNeeds[i]); }; for (let i = 0; i < data.messages.length; i++) { onMessageHandler({ name: "ReceiveChatMessage", response: data.messages[i], opcode: 9 }); }; if (data.castSpellResponse && data.castSpellResponse.cooldownStartTick && (data.tick - data.castSpellResponse.cooldownStartTick) * 50 < 240000) { onMessageHandler({ name: 'CastSpellResponse', response: data.castSpellResponse, opcode: 9 }); }; if (data.isPaused) { game.ui.onLocalItemUpdate({ itemName: 'Pause', tier: 1, stacks: 1 }); game.ui.emit('wavePaused'); }; for (let i in data.inventory) { onMessageHandler({ name: "SetItem", response: { itemName: data.inventory[i].itemName, tier: data.inventory[i].tier, stacks: data.inventory[i].stacks }, opcode: 9 }); }; console.log(data.localBuildings) onMessageHandler({ name: "LocalBuilding", response: data.localBuildings, opcode: 9 }); let entities = {}; data.entities.forEach(k => { entities[k[0]] = k[1]; }); onMessageHandler({ tick: data.tick, entities: entities, byteSize: data.byteSize, opcode: 0 }); }; }; verify(id) { if (!(!document.location.hash || document.location.hash.length < 2)) { game.network.emitter._events.PACKET_ENTER_WORLD[5] = (data) => { if (!data.allowed || game.ui.components.Intro.reconnectKey) return; /*setTimeout(() => { let psk = game.ui.components.Intro.partyShareKey; Object.keys(game.ui.buildings).length ? game.ui.getComponent("PopupOverlay").showConfirmation(`Are you sure you want to join by share key ${psk}? You are in a base already.`, 1e4, () => { game.ui.getComponent("PopupOverlay").showConfirmation(`Are you sure you want to join by share key ${psk}? Double check just for safety.`, 1e4, () => { game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: psk }); }); }) : game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: psk }); }, 1000);*/ }; }; this.sendMessage(`verify, ;${id}`); this.connectedToId = id; }; sendPacket(opcode, data) { let buffer = new Uint8Array(game.network.codec.encode(opcode, data)); let arr = [1]; for (let i = 0; i < buffer.length; i++) { arr.push(buffer[i]); } this.WebSocket.send(new Uint8Array(arr)); } sendBuffer(buffer) { let arr = [2]; for (let i = 0; i < buffer.length; i++) { arr.push(buffer[i]); } this.WebSocket.send(new Uint8Array(arr)); } createSession(sessionname, name, sid, psk) { this.sendMessage(`createsession, ;${sessionname}, ;${name}, ;${sid}, ;${psk}`); }; getSessions() { this.sendMessage("getsessions"); }; disconnect() { this.WebSocket.close(); }; closeSession(id) { this.sendMessage("closesession, ;" + id); }; enableAutoHeal(id = this.connectedToId) { this.sendMessage("eah, ;" + id); }; enableAutoRespawn(id = this.connectedToId) { this.sendMessage("ear, ;" + id); }; enableTowerAlarm(id = this.connectedToId) { this.sendMessage("eta, ;" + id); }; enableStashAlarm(id = this.connectedToId) { this.sendMessage("esa, ;" + id); }; enableDeathAlarm(id = this.connectedToId) { this.sendMessage("eda, ;" + id); }; enableDisconnectAlarm(id = this.connectedToId) { this.sendMessage("edca, ;" + id); }; disableAutoHeal(id = this.connectedToId) { this.sendMessage("dah, ;" + id); }; disableAutoRespawn(id = this.connectedToId) { this.sendMessage("dar, ;" + id); }; disableTowerAlarm(id = this.connectedToId) { this.sendMessage("dta, ;" + id); }; disableStashAlarm(id = this.connectedToId) { this.sendMessage("dsa, ;" + id); }; disableDeathAlarm(id = this.connectedToId) { this.sendMessage("dda, ;" + id); }; disableDisconnectAlarm(id = this.connectedToId) { this.sendMessage("ddca, ;" + id); }; reconnect(id = this.connectedToId, closed) { !closed && (this.reconnecting = true); this.disconnect(); this.WebSocket = new Connection().WebSocket; this.WebSocket.onopen = this.onOpen.bind(this); this.WebSocket.onmessage = this.onMessage.bind(this); this.WebSocket.onclose = this.onClose.bind(this); this.WebSocket.addEventListener("open", () => { this.verify(id); }) } onClose() { if (this.reconnecting) { this.reconnecting = false; return; } setTimeout(() => { this.reconnect(this.connectedToId, true); }, 1000); } Sanitize(e) { let text = ""; for (let i = 0; i < e.length; i++) { this.notAllowedCharsInHTML.has(e[i]) ? text += this.notAllowedCharsInHTML.get(e[i]) : text += e[i]; } return text; } cipher(salt) { const textToChars = text => text.split('').map(c => c.charCodeAt(0)); const byteHex = n => ("0" + Number(n).toString(16)).substr(-2); const applySaltToChar = code => textToChars(salt).reduce((a, b) => a ^ b, code); return text => text.split('').map(textToChars).map(applySaltToChar).map(byteHex).join(''); } changePassword(password) { this.sendMessage("changehasaccess, ;" + password); } getLeaderboardData() { this.sendMessage("getleaderboarddata"); } }; window.sendSession = () => { window.client.createSession( document.getElementsByClassName("Session_sessionName")[0].value, document.getElementsByClassName("Session_altsName")[0].value, document.getElementsByClassName("Session_altsServerId")[0].value, document.getElementsByClassName("Session_altsPsk")[0].value); }; window.closeSession = () => { let id = parseInt(document.getElementsByClassName("Session_closeSessionId")[0].value); id in window.client.activeSessions && window.client.closeSession(document.getElementsByClassName("Session_closeSessionId")[0].value); }; window.changeSession = () => { client.reconnect(); }; window.changesessionname = () => { let id = parseInt(document.getElementsByClassName("changesessionnameinput")[0].value); let name = document.getElementsByClassName("changesessionnameinput2")[0].value; client.sendMessage(`changesessionname, ;${id}, ;${name}`); } window.changesessionid = () => { let id = parseInt(document.getElementsByClassName("changesessionidinput")[0].value); let name = document.getElementsByClassName("changesessionidinput2")[0].value; client.sendMessage(`changesessionid, ;${id}, ;${name}`); } document.getElementsByClassName("hud-intro-corner-bottom-left")[0].innerHTML = `

Session Saver


 
 





`; document.getElementsByClassName("hud-intro-left")[0].setAttribute("style", "width: 400px; height: 260px; margin-top: 15px; overflow: auto; float: margin-right: 100px;"); window.createSession = (psk) => { client.createSession( game.options.servers[document.getElementsByClassName('hud-intro-server')[0].value].name.replaceAll(' ', '').replace('#', '').toLowerCase(), document.getElementsByClassName('hud-intro-name')[0].value, game.options.servers[document.getElementsByClassName('hud-intro-server')[0].value].id, 'xy' ); }; document.getElementsByClassName("hud-intro-form")[0].insertAdjacentHTML("beforeend", ``); game.script.client = new Client(); window.client = game.script.client; game.network.sendRpc4 = game.network.sendRpc; game.network.sendRpc = (e) => { if (e.name == "SendChatMessage") { let commands = ["ab", "au", "atb", "apr", "aph", "rpt", "pt", "aaz", "aa", "pl", "arf", "ahrc", "ape", "lock", "20u"]; let ex = [null, e.message.replace(/[^\!]/g, ""), e.message.split(" ")[0].replaceAll("!", "")]; if (ex[2] == "lock") client.sendMessage("lock"); if (ex && ex[2] && commands.includes(ex[2]) && ex[2] !== "lock") client.sendMessage(`${ex[1] == '!' ? 'e' : 'd'}${ex[2]}`); } game.network.sendRpc4(e); } game.network.sendRpc2 = game.network.sendRpc; game.network.sendRpc = (e) => { if (e.name == "SendChatMessage") { e.message == "?alt" ? window.sendAlt() : 0; e.message == "?spear" ? window.wsSpear = !window.wsSpear : 0; e.message == "?spam" ? window.wsSpam = !window.wsSpam : 0; e.message == "?fill" ? window.filler = !window.filler : 0; e.message == "?bomb" ? window.wsBomb = !window.wsBomb : 0; e.message == "?rndmalt" ? window.randomAlt = !window.randomAlt : 0; e.message == "?rndmaltj" ? window.randomAltJoinToYou = !window.randomAltJoinToYou : 0; e.message == "?ahrc" ? window.ahrc = !window.ahrc : 0; e.message == "?1b1s" ? window.auto1by1Stash = !window.auto1by1Stash : 0; e.message == "?1b1" ? window.auto1by1MouseWithClick = !window.auto1by1MouseWithClick : 0; e.message == "?delLast" ? window.mySockets[window.mySockets.length - 1].close() : 0; e.message == "?saveBase" ? window.saveBase() : 0; e.message == "?autoBuildSaved" ? window.buildSaved = !window.buildSaved : 0; e.message == "?ms" ? window.moveToMouse = !window.moveToMouse : 0; e.message == "?lck" ? window.lockPos = !window.lockPos : 0; e.message == "?ssal" ? window.ssal() : 0; e.message == "?search121" ? window.searchWithWave(121) : 0; window.mySockets.forEach(ws => { e.message == "?delall" ? ws.close() : 0; e.message == "?ctrl" ? ws.control = true : 0; e.message == "?uctrl" ? ws.control = false : 0; e.message == `?ctrl ${ws.cloneId}` ? ws.control = true : 0; e.message == `?uctrl ${ws.cloneId}` ? ws.control = false : 0; e.message == `?del ${ws.cloneId}` ? ws.close() : 0; }) console.log(`Command Received ${e.message}`) if (e.message.startsWith("?")) { return; } } game.network.sendRpc2(e) } let styles = document.createElement("style"); styles.appendChild(document.createTextNode(` #hud-menu-party { top: 51%; width: 610px; height: 480px; } .hud-menu-party .hud-party-tag { width: 120px; } .hud-menu-party .hud-party-share { width: 280px; } `)); document.head.appendChild(styles); styles.type = "text/css"; game.renderer.ground.setVisible(false) let getRss = false; function counter(e = 0) { if (e <= -0.99949999999999999e24) { return Math.round(e/-1e23)/-10 + "TT"; } if (e <= -0.99949999999999999e21) { return Math.round(e/-1e20)/-10 + "TB"; } if (e <= -0.99949999999999999e18) { return Math.round(e/-1e17)/-10 + "TM"; } if (e <= -0.99949999999999999e15) { return Math.round(e/-1e14)/-10 + "TK"; } if (e <= -0.99949999999999999e12) { return Math.round(e/-1e11)/-10 + "T"; } if (e <= -0.99949999999999999e9) { return Math.round(e/-1e8)/-10 + "B"; } if (e <= -0.99949999999999999e6) { return Math.round(e/-1e5)/-10 + "M"; } if (e <= -0.99949999999999999e3) { return Math.round(e/-1e2)/-10 + "K"; } if (e <= 0.99949999999999999e3) { return Math.round(e) + ""; } if (e <= 0.99949999999999999e6) { return Math.round(e/1e2)/10 + "K"; } if (e <= 0.99949999999999999e9) { return Math.round(e/1e5)/10 + "M"; } if (e <= 0.99949999999999999e12) { return Math.round(e/1e8)/10 + "B"; } if (e <= 0.99949999999999999e15) { return Math.round(e/1e11)/10 + "T"; } if (e <= 0.99949999999999999e18) { return Math.round(e/1e14)/10 + "TK"; } if (e <= 0.99949999999999999e21) { return Math.round(e/1e17)/10 + "TM"; } if (e <= 0.99949999999999999e24) { return Math.round(e/1e20)/10 + "TB"; } if (e <= 0.99949999999999999e27) { return Math.round(e/1e+23)/10 + "TT"; } if (e >= 0.99949999999999999e27) { return Math.round(e/1e+23)/10 + "TT"; } } document.addEventListener("keydown", e => { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key == '-') { getRss = !getRss; } } }) let id = 0; window.addEventListener("keydown", e => { switch (e.keyCode) { case 69: if (window.randomAlt) { let randomAlt = window.mySockets[id]; id++ game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: randomAlt.psk.response.partyShareKey }); if (id == window.mySockets.length) { id = 0; } }; if (window.randomAltJoinToYou) { let randomAlt = window.mySockets[id]; id++ if (randomAlt.network) { randomAlt.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: game.ui.getPlayerPartyShareKey() }); } if (id == window.mySockets.length) { id = 0; } }; break; }; }); function GetGoldStash() { for (let i in game.ui.buildings) { if (game.ui.buildings[i].type == "GoldStash") { return game.ui.buildings[i]; } } } window.saveBase = () => { let buildings = Game.currentGame.ui.buildings; let base = ""; let stash = GetGoldStash(); if (stash == undefined) { return } let stashPosition = { x: stash.x, y: stash.y } for (var uid in buildings) { if (!buildings.hasOwnProperty(uid)) { continue } let obj = buildings[uid] let x = Game.currentGame.ui.buildings[obj.uid].x - stashPosition.x let y = Game.currentGame.ui.buildings[obj.uid].y - stashPosition.y let building = Game.currentGame.ui.buildings[obj.uid].type let yaw = 0; base += "PlaceBuilding(stashPosition.x + " + x + ", stashPosition.y + " + y + ", '" + building + "', " + yaw + ");"; } window.savedBase = base; } window.buildSavedBase = function () { var waitForGoldStash = setInterval(function () { if (document.querySelectorAll("[data-building]")[10].classList[1] == "is-disabled") { stash = GetGoldStash(); if (stash == undefined) return stashPosition = { x: stash.x, y: stash.y } clearInterval(waitForGoldStash) var basecode = window.savedBase; basecode = new Function(basecode) return basecode() } }, 275) } let dimension = 1; const onWindowResize = () => { const renderer = Game.currentGame.renderer; let canvasWidth = window.innerWidth * window.devicePixelRatio; let canvasHeight = window.innerHeight * window.devicePixelRatio; let ratio = Math.max(canvasWidth / (1920 * dimension), canvasHeight / (1080 * dimension)); renderer.scale = ratio; renderer.entities.setScale(ratio); renderer.ui.setScale(ratio); renderer.renderer.resize(canvasWidth, canvasHeight); renderer.viewport.width = renderer.renderer.width / renderer.scale + 2 * renderer.viewportPadding; renderer.viewport.height = renderer.renderer.height / renderer.scale + 2 * renderer.viewportPadding; } onWindowResize() window.addEventListener("resize", () => { onWindowResize() }) window.dpr = (e) => { window.devicePixelRatio = e onWindowResize() } let wheelzoom = true; window.addEventListener("wheel", function (e, t = 1.003) { if (!wheelzoom) return if (e.deltaY > 0) { for (let i = 0; i < 50; i++) { setTimeout(() => { dimension = dimension * t onWindowResize() }, i * 5) }; } else if (e.deltaY <= 1) { for (let i = 0; i < 50; i++) { setTimeout(() => { dimension = dimension / t onWindowResize() }, i * 5) }; } }); game.network.addEntityUpdateHandler((e) => { if (getRss) { !allowed1 && (allowed1 = true); } if (getRss || allowed1) { for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { let player = game.renderer.npcs.attachments[i]; let wood_1 = counter(player.targetTick.wood); let stone_1 = counter(player.targetTick.stone); let gold_1 = counter(player.targetTick.gold); let token_1 = counter(player.targetTick.token); let px_1 = counter(player.targetTick.position.x); let py_1 = counter(player.targetTick.position.y); let timeout_1 = ""; if (getRss && !player.targetTick.oldName) { player.targetTick.oldName = player.targetTick.name; player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()}, W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)}, partyId: ${Math.round(player.targetTick.partyId)} [${game.ui.parties[player.targetTick.partyId] && game.ui.parties[player.targetTick.partyId].memberCount}/4] `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; } if (!getRss && player.targetTick.oldName) { player.targetTick.info = player.targetTick.oldName; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; player.targetTick.oldName = null; } if (getRss) { if (player.targetTick.oldGold !== gold_1 || player.targetTick.oldWood !== wood_1 || player.targetTick.oldStone !== stone_1 || player.targetTick.oldToken !== token_1 || player.targetTick.oldPX !== px_1 || player.targetTick.oldPY !== py_1) { player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()}, W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)}, partyId: ${Math.round(player.targetTick.partyId)} [${game.ui.parties[player.targetTick.partyId] && game.ui.parties[player.targetTick.partyId].memberCount}/4] `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; }; }; }; }; }; if (!getRss) { allowed1 = false; }; if (window.filler) { let s = 32; let p = window.mySockets[window.mySockets.length - 1].players; if (p !== 32) { window.sendAlt(); } } if (window.buildSaved) { if (!window.autobuildtimeout) { window.autobuildtimeout = true; setTimeout(() => { window.autobuildtimeout = false; }, 75) if (GetGoldStash !== undefined) { window.buildSavedBase(); } } } if (window.ahrc) { Object.values(game.ui.buildings).forEach(obj => { game.network.sendPacket(9, { name: "CollectHarvester", uid: obj.uid }); obj.type == "Harvester" && obj.tier == 1 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.07 }) : 0; obj.type == "Harvester" && obj.tier == 2 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.11 }) : 0; obj.type == "Harvester" && obj.tier == 3 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.17 }) : 0; obj.type == "Harvester" && obj.tier == 4 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.22 }) : 0; obj.type == "Harvester" && obj.tier == 5 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.25 }) : 0; obj.type == "Harvester" && obj.tier == 6 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.28 }) : 0; obj.type == "Harvester" && obj.tier == 7 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.42 }) : 0; obj.type == "Harvester" && obj.tier == 8 ? game.network.sendPacket(9, { name: "AddDepositToHarvester", uid: obj.uid, deposit: 0.65 }) : 0; }); } }) function msToTime(s) { function pad(n, z) { z = z || 2; return ('00' + n).slice(-z); }; var ms = s % 1000; s = (s - ms) / 1000; var secs = s % 60; s = (s - secs) / 60; var mins = s % 60; var hrs = (s - mins) / 60; return pad(hrs) + ':' + pad(mins) + ':' + pad(secs) + '.' + pad(ms, 3); }; document.getElementsByClassName("hud-party-actions")[0].insertAdjacentHTML("afterend", ` `); let showpriv = true; function checkStatus(party) { if (showpriv == true) { if(party.isOpen == 1) { return 'Public.'; } else if(!party.isOpen == 1) { return 'Private.'; } } else { return ''; } }; let partyCheck = (all_parties) => { document.getElementsByClassName('hud-party-grid')[0].innerHTML = ''; for (let i in all_parties) { let parties = all_parties[i]; let tab = document.createElement('div'); tab.classList.add('hud-party-link'); tab.classList.add('custom-party'); tab.id = parties.partyId; tab.isPublic = parties.isOpen; tab.name = parties.partyName; tab.members = parties.memberCount; tab.innerHTML = ` ${parties.partyName} id: ${parties.partyId}, ${parties.memberCount}/4, ${checkStatus(parties)} `; if(parties.memberCount == 4) { tab.classList.add('is-disabled'); } else { tab.style.display = 'block'; } setTimeout(() => { if (parties.partyId == game.ui.playerPartyId) tab.classList.add('is-active'); }, 1000); if (parties.isOpen !== 1) { tab.style.display = ''; } tab.addEventListener('click', function() { let isJoining = true; if(tab.isPublic == 1 && tab.members < 4) { isJoining = true; game.network.sendRpc({ name: 'JoinParty', partyId: Math.floor(tab.id) }); if(isJoining == true) { document.getElementsByClassName('hud-party-grid')[0].classList.add('is-disabled'); document.getElementsByClassName('hud-party-link')[0].classList.add('is-disabled'); setTimeout(() => { document.getElementsByClassName('hud-party-grid')[0].classList.remove('is-disabled'); document.getElementsByClassName('hud-party-link')[0].classList.remove('is-disabled'); }, 27500); } } else if(!tab.isPublic == 1) { isJoining = false; game.ui.components.PopupOverlay.showHint("You can't request private parties!"); } }); document.getElementsByClassName('hud-party-grid')[0].appendChild(tab); }; }; game.network.addRpcHandler("SetPartyList", (e) => { partyCheck(e) }); //get active sockets let targetPos = { x: 0, y: 0 }; window.mySockets = []; window.activeSockets = []; setInterval(() => { window.mySockets.forEach(socket => { if(socket.myPlayer) { window.activeSockets[socket.cloneId] = socket; } }) }, 100) function getWssOrWS() { if (window.location.protocol === 'https:') { return "wss" } else { return "ws" } } window.sendAlt = () => { let mousePosition; let isTrue = true; let altElem = document.createElement('div'); let connectionOptions = game.network.connectionOptions ?? game.options.servers[document.getElementsByClassName('hud-intro-server')[0].value]; let url = getWssOrWS() + '://' + connectionOptions.hostname + ':' + connectionOptions.port; let ws = new WebSocket(url) ws.altElem = altElem; ws.binaryType = "arraybuffer"; ws.control = true; ws.aimingYaw = 1; ws.reversedYaw = false; ws.onclose = () => { ws.isclosed = true; altElem.remove(); window.reconnect && window.sendWs(); }; ws.onmessage = msg => { if (new Uint8Array(msg.data)[0] == 5) { ws.network = new game.networkType(); ws.network.sendPacket = (e, t) => { if (!ws.isclosed) { ws.send(new Uint8Array(ws.network.codec.encode(e, t))); }; }; ws.network.sendInput = (t) => { ws.network.sendPacket(3, t); }; ws.network.sendRpc = (t) => { ws.network.sendPacket(9, t); }; wasmmodule((e) => { ws.network.sendPacket(4, { displayName: game.options.nickname + "", extra: e[5].extra }); ws.EnterWorld2Response = e[6]; }, new Uint8Array(msg.data), game.options.servers[game.options.serverId].ipAddress); return; }; ws.data = ws.network.codec.decode(msg.data); if (isTrue) { isTrue = !isTrue; setTimeout(() => { altElem.classList.add('hud-map-player'); document.getElementsByClassName('hud-map')[0].appendChild(altElem); }, 1000); ws.network.sendInput({ up: 1 }); ws.mouseUp = 1; ws.mouseDown = 0; ws.f = false; function mouseMoved(e, x, y, d) { ws.aimingYaw = e; if (ws.mouseDown && !ws.mouseUp) { ws.network.sendInput({ mouseMovedWhileDown: e, worldX: x, worldY: y, distance: d }); } if (!ws.mouseDown && ws.mouseUp) { ws.network.sendInput({ mouseMoved: e, worldX: x, worldY: y, distance: d }); } } document.addEventListener('mousemove', mousemove => { if (ws.control && !window.lockPos) { if (!ws.isclosed) { mousePosition = game.renderer.screenToWorld(mousemove.clientX, mousemove.clientY); if (ws.myPlayer) { if (ws.myPlayer.position) { mouseMoved(game.inputPacketCreator.screenToYaw((-ws.myPlayer.position.x + mousePosition.x) * 100, (-ws.myPlayer.position.y + mousePosition.y) * 100), Math.floor(mousePosition.x), Math.floor(mousePosition.y), Math.floor(game.inputPacketCreator.distanceToCenter((-ws.myPlayer.position.x + mousePosition.x) * 100, (-ws.myPlayer.position.y + mousePosition.y) * 100) / 100)); } } } } }) let SendRpc = ws.network.sendRpc; let SendInput = ws.network.sendInput; function isInputFieldActive() { const tagName = document.activeElement.tagName.toLowerCase(); return tagName === "input" || tagName === "textarea"; } function handleKeyPress(e) { if (!ws.isclosed && ws.control && !isInputFieldActive()) { switch (e.keyCode) { case 81: setTimeout(() => { const nextWeapon = getNextWeapon(); ws.network.sendRpc({ name: 'EquipItem', itemName: nextWeapon, tier: ws.inventory[nextWeapon].tier }); }, 100); break; case 72: ws.network.sendRpc({ name: 'LeaveParty' }); break; case 74: ws.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: game.ui.playerPartyShareKey }); break; case 32: setTimeout(() => { ws.network.sendInput({ space: 0 }); ws.network.sendInput({ space: 1 }); }, 100); break; case 46: ws.network.sendRpc({ name: "DeleteBuilding", uid: ws.myPet.uid }); break; default: handleItemActions(e.keyCode); break; } } } function getNextWeapon() { const weaponOrder = ['Pickaxe', 'Spear', 'Bow', 'Bomb']; let foundCurrent = false; for (let i in weaponOrder) { if (foundCurrent) { if (ws.inventory[weaponOrder[i]]) { return weaponOrder[i]; } } else if (weaponOrder[i] == ws.myPlayer.weaponName) { foundCurrent = true; } } return 'Pickaxe'; } function handleItemActions(keyCode) { switch (keyCode) { case 82: ws.network.sendRpc({ name: "BuyItem", itemName: "HealthPotion", tier: 1 }); ws.network.sendRpc({ name: "EquipItem", itemName: "HealthPotion", tier: 1 }); break; case 78: ws.network.sendRpc({ "name": "EquipItem", "itemName": "PetCARL", "tier": 1 }); ws.network.sendRpc({ "name": "BuyItem", "itemName": "PetCARL", "tier": 1 }); break; case 77: ws.network.sendRpc({ "name": "BuyItem", "itemName": "PetRevive", "tier": 1 }); ws.network.sendRpc({ "name": "EquipItem", "itemName": "PetRevive", "tier": 1 }); ws.network.sendRpc({ "name": "BuyItem", "itemName": "PetCARL", "tier": ws.inventory.PetCARL.tier + 1 }); ws.network.sendRpc({ "name": "BuyItem", "itemName": "PetMiner", "tier": ws.inventory.PetMiner.tier + 1 }); break; default: break; } } document.addEventListener('keydown', handleKeyPress); function handleMouseDown(e) { let mouseToWorld = game.renderer.screenToWorld(game.ui.mousePosition.x, game.ui.mousePosition.y); if (!ws.isclosed && e.which === 3 && ws.control) { if (window.moveToMouse) { window.moveToMouse = false; window.moveaway = true; ws.network.sendInput({ mouseMoved: game.inputPacketCreator.screenToYaw((-ws.myPlayer.position.x + mouseToWorld.x) * 100, (-ws.myPlayer.position.y + mouseToWorld.y) * 100) }); ws.automove = true; if (ws.myPlayer.position.y - mouseToWorld.y > 1) { ws.network.sendInput({ up: 0 }); } else { ws.network.sendInput({ up: 1 }); } if (-ws.myPlayer.position.y + mouseToWorld.y > 1) { ws.network.sendInput({ down: 0 }); } else { ws.network.sendInput({ down: 1 }); } if (-ws.myPlayer.position.x + mouseToWorld.x > 1) { ws.network.sendInput({ right: 0 }); } else { ws.network.sendInput({ right: 1 }); } if (ws.myPlayer.position.x - mouseToWorld.x > 1) { ws.network.sendInput({ left: 0 }); } else { ws.network.sendInput({ left: 1 }); } } else { ws.network.sendInput({ mouseMoved: game.inputPacketCreator.screenToYaw((-ws.myPlayer.position.x + mouseToWorld.x) * 100, (-ws.myPlayer.position.y + mouseToWorld.y) * 100) }); if (ws.myPlayer.position.y - mouseToWorld.y > 1) { ws.network.sendInput({ up: 0 }); } else { ws.network.sendInput({ up: 1 }); } if (-ws.myPlayer.position.y + mouseToWorld.y > 1) { ws.network.sendInput({ down: 0 }); } else { ws.network.sendInput({ down: 1 }); } if (-ws.myPlayer.position.x + mouseToWorld.x > 1) { ws.network.sendInput({ right: 0 }); } else { ws.network.sendInput({ right: 1 }); } if (ws.myPlayer.position.x - mouseToWorld.x > 1) { ws.network.sendInput({ left: 0 }); } else { ws.network.sendInput({ left: 1 }); } } } if (ws.control && !e.button && !ws.isclosed) { ws.mouseDown = 1; ws.mouseUp = 0; ws.network.sendInput({ mouseDown: ws.aimingYaw, worldX: Math.floor(mousePosition.x), worldY: Math.floor(mousePosition.y), distance: Math.floor(game.inputPacketCreator.distanceToCenter((-ws.myPlayer.position.x + mousePosition.x) * 100, (-ws.myPlayer.position.y + mousePosition.y) * 100) / 100) }); } } function handleMouseUp(e) { if (!ws.isclosed && ws.control) { if (e.which === 3) { ws.network.sendInput({ up: 0 }); ws.network.sendInput({ down: 0 }); ws.network.sendInput({ right: 0 }); ws.network.sendInput({ left: 0 }); if (window.moveaway) { window.moveToMouse = true; window.moveaway = false; } } if (!e.button) { ws.mouseUp = 1; ws.mouseDown = 0; ws.network.sendInput({ mouseUp: 1, worldX: Math.floor(mousePosition.x), worldY: Math.floor(mousePosition.y), distance: Math.floor(game.inputPacketCreator.distanceToCenter((-ws.myPlayer.position.x + mousePosition.x) * 100, (-ws.myPlayer.position.y + mousePosition.y) * 100) / 100) }); } } if (window.lockPos && e.button == 2) { targetPos = game.renderer.screenToWorld(game.ui.mousePosition.x, game.ui.mousePosition.y); } } document.getElementsByClassName("hud")[0].addEventListener("mousedown", handleMouseDown); document.getElementsByClassName("hud")[0].addEventListener("mouseup", handleMouseUp); function handleItemPurchase(itemName) { if (ws.control) { ws.network.sendRpc({ name: "BuyItem", itemName: itemName, tier: ws.inventory[itemName] ? (ws.inventory[itemName].tier + 1) : 1 }); } } document.getElementsByClassName("hud-shop-item")[0].addEventListener('click', () => handleItemPurchase("Pickaxe")); document.getElementsByClassName("hud-shop-item")[1].addEventListener('click', () => handleItemPurchase("Spear")); document.getElementsByClassName("hud-shop-item")[2].addEventListener('click', () => handleItemPurchase("Bow")); document.getElementsByClassName("hud-shop-item")[3].addEventListener('click', () => handleItemPurchase("Bomb")); document.getElementsByClassName("hud-shop-item")[4].addEventListener('click', () => { if (ws.control) { ws.network.sendRpc({ name: "BuyItem", itemName: "ZombieShield", tier: ws.inventory.ZombieShield ? (ws.inventory.ZombieShield.tier + 1) : 1 }); } }); document.getElementsByClassName("hud-respawn-btn")[0].addEventListener('click', () => { if (ws.control) { ws.network.sendRpc({ respawn: 1 }); } }); function handleEquipItem(itemName) { if (ws.control) { ws.network.sendRpc({ name: "EquipItem", itemName: itemName, tier: ws.inventory[itemName].tier }); } } for (let i = 0; i < 7; i++) { document.getElementsByClassName("hud-toolbar-item")[i].addEventListener('mouseup', (e) => { if (ws.control && !e.button) { const itemNames = ["Pickaxe", "Spear", "Bow", "Bomb", "HealthPotion", "PetHealthPotion", null]; const itemName = itemNames[i]; if (itemName) { handleEquipItem(itemName); } else { ws.automove = !ws.automove; if (ws.automove) { window.move = true; } else { window.move = false; } } } }); } game.network.addRpcHandler("PartyShareKey", () => { altElem.style.display = (ws.psk.response.partyShareKey !== game.ui.getPlayerPartyShareKey()) ? "block" : "none"; }); window.closeAllSockets = () => { ws.close(); window.mySockets = []; } } if (ws.data.uid) { ws.uid = ws.data.uid; ws.dataInfo = ws.data; ws.inventory = {}; ws.buildings = {}; ws.lb = {} ws.playerUid = game.world.getMyUid(); ws.network.sendInput({space: 1}); ws.network.sendRpc({name: "BuyItem", itemName: "PetCARL", tier: 1}) ws.network.sendRpc({name: "BuyItem", itemName: "PetMiner", tier: 1}) } if (ws.data.entities) { if (ws.data.entities[ws.uid].name) { ws.myPlayer = ws.data.entities[ws.uid]; } for (let player in ws.myPlayer) { if (ws.myPlayer[player] !== ws.data.entities[ws.uid][player] && ws.data.entities[ws.uid][player] !== undefined) { ws.myPlayer[player] = ws.data.entities[ws.uid][player]; } } if (ws.myPlayer.petUid) { if (ws.data.entities[ws.myPlayer.petUid]) { if (ws.data.entities[ws.myPlayer.petUid].model) { ws.myPet = ws.data.entities[ws.myPlayer.petUid]; } } for (let pet in ws.myPet) { if (ws.data.entities[ws.myPlayer.petUid]) { if (ws.myPet[pet] !== ws.data.entities[ws.myPlayer.petUid][pet] && ws.data.entities[ws.myPlayer.petUid][pet] !== undefined) { ws.myPet[pet] = ws.data.entities[ws.myPlayer.petUid][pet] } } } } altElem.style.left = (Math.round(ws.myPlayer.position.x) / game.world.getHeight() * 100) + '%'; altElem.style.top = (Math.round(ws.myPlayer.position.y) / game.world.getWidth() * 100) + '%'; } if (ws.data.name == "PartyInfo") { ws.partyInfo = ws.data.response; for (let i in ws.partyInfo) { if (ws.partyInfo[i].playerUid == ws.uid && ws.partyInfo[i].isLeader) { ws.network.sendRpc({ name: "SetPartyMemberCanSell", uid: game.world.myUid, canSell: 1 }); } } } if (ws.data.name == "SetPartyList") { ws.parties = {}; ws.players = 0; ws.data.response.forEach(e => { ws.parties[e.partyId] = e; ws.players += e.memberCount; }); } if (ws.data.name == "SetItem") { ws.inventory[ws.data.response.itemName] = ws.data.response; if (!ws.inventory[ws.data.response.itemName].stacks) { delete ws.inventory[ws.data.response.itemName]; }; }; if ((game.world.entities[ws.uid] && game.world.getEntityByUid(ws.uid))) { window.mySockets.forEach(wss => { let { uid, cloneId } = wss; if (((game.world.entities[uid] && game.world.getEntityByUid(uid))) && (game.world.getEntityByUid(uid)).targetTick) { (game.world.getEntityByUid(uid)).isVerified = true; if (!getRss) { (game.world.getEntityByUid(uid)).targetTick.info = (cloneId).toString(); } else { (game.world.getEntityByUid(uid)).targetTick.oldName = (cloneId).toString(); }; }; }); }; if (window.mySockets[ws.cloneId - 1]) { window.mySockets[ws.cloneId - 1] = ws; } if (ws.data.name == "Leaderboard") { for (let i in ws.data.response) ws.lb[ws.data.response[i].rank + 1] = ws.data.response[i]; } if (ws.space < 6) { ws.space++; }; if (ws.space == 3) { ws.network.sendPacket(3, { space: 1 }); }; if (ws.space == 6) { ws.network.sendPacket(3, { space: 0 }); }; if (ws.data.name == "PartyShareKey") { ws.psk = ws.data; altElem.style.display = (ws.psk.response.partyShareKey !== game.ui.getPlayerPartyShareKey()) ? "block" : "none"; } if (ws.data.name == "Dead") { ws.network.sendInput({ respawn: 1 }); } ws.moveToward = (position) => { let x = Math.round(position.x); let y = Math.round(position.y); let myX = Math.round(ws.myPlayer.position.x); let myY = Math.round(ws.myPlayer.position.y); let offset = 5; if (-myX + x > offset) ws.network.sendInput({ left: 0 }); else ws.network.sendInput({ left: 1 }); if (myX - x > offset) ws.network.sendInput({ right: 0 }); else ws.network.sendInput({ right: 1 }); if (-myY + y > offset) ws.network.sendInput({ up: 0 }); else ws.network.sendInput({ up: 1 }); if (myY - y > offset) ws.network.sendInput({ down: 0 }); else ws.network.sendInput({ down: 1 }); }; if (window.lockPos) { if (!ws.isclosed) { if (window.moveToMouse) window.moveToMouse = false; if (!ws.automove) ws.automove = true; if (ws.myPlayer) { if (ws.myPlayer.position) { ws.network.sendInput({ mouseMoved: game.inputPacketCreator.screenToYaw((-ws.myPlayer.position.x + targetPos.x) * 100, (-ws.myPlayer.position.y + targetPos.y) * 100) }); let x = Math.round(targetPos.x); let y = Math.round(targetPos.y); let myX = Math.round(ws.myPlayer.position.x); let myY = Math.round(ws.myPlayer.position.y); let offset = 5; if (-myX + x > offset) ws.network.sendInput({ left: 0 }); else ws.network.sendInput({ left: 1 }); if (myX - x > offset) ws.network.sendInput({ right: 0 }); else ws.network.sendInput({ right: 1 }); if (-myY + y > offset) ws.network.sendInput({ up: 0 }); else ws.network.sendInput({ up: 1 }); if (myY - y > offset) ws.network.sendInput({ down: 0 }); else ws.network.sendInput({ down: 1 }); } } } } if (window.moveToMouse) { let mouseToWorld = game.renderer.screenToWorld(game.ui.mousePosition.x, game.ui.mousePosition.y); if (!ws.automove) ws.automove = true; if (ws.myPlayer) { if (ws.myPlayer.position) { ws.network.sendInput({ mouseMoved: game.inputPacketCreator.screenToYaw((-ws.myPlayer.position.x + mouseToWorld.x) * 100, (-ws.myPlayer.position.y + mouseToWorld.y) * 100) }); ws.moveToward(game.renderer.screenToWorld(game.inputManager.mousePosition.x, game.inputManager.mousePosition.y)) } } }; if (window.auto1by1Stash) { if (ws.myPlayer) { if (findNearestAltToStash().uid == ws.uid) { ws.network.sendInput({ space: 0 }) ws.network.sendInput({ space: 1 }) } } } switch (ws.data.opcode) { case 0: if (window.wsSpear) { !ws.inventory.Spear ? ws.network.sendPacket(9, { name: "BuyItem", itemName: "Spear", tier: 1 }) : 0; ws.inventory.Spear ? ws.network.sendPacket(9, { name: "BuyItem", itemName: "Spear", tier: ws.inventory.Spear.tier }) : 0; ws.myPlayer.weaponName !== "Spear" ? ws.network.sendPacket(9, { name: "EquipItem", itemName: "Spear", tier: ws.inventory.Spear.tier }) : 0; } if (window.wsBomb) { !ws.inventory.Bomb ? ws.network.sendPacket(9, { name: "BuyItem", itemName: "Bomb", tier: 1 }) : 0; ws.inventory.Bomb ? ws.network.sendPacket(9, { name: "BuyItem", itemName: "Bomb", tier: ws.inventory.Bomb.tier }) : 0; ws.myPlayer.weaponName !== "Bomb" ? ws.network.sendPacket(9, { name: "EquipItem", itemName: "Bomb", tier: ws.inventory.Bomb.tier }) : 0; } if (window.wsSpam) { ws.myPlayer && ws.network.sendRpc({name: "SendChatMessage", channel: "Local", message: '.................................................................................................................)"> { ws.control = false; }, 500); } catch (e) { ws.close(); }; break; }; } } function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); if(result){ var r= parseInt(result[1], 16); var g= parseInt(result[2], 16); var b= parseInt(result[3], 16); return [r, g, b]; } return null; }; const measureDistance = (obj1, obj2) => { if (!(obj1.x && obj1.y && obj2.x && obj2.y)) return Infinity; let xDif = obj2.x - obj1.x; let yDif = obj2.y - obj1.y; return Math.abs((xDif ** 2) + (yDif ** 2)); }; let findNearestAltToStash = () => { if (window.mySockets.length < 1) return; let altArray = []; let targetGoldStash = Object.values(Game.currentGame.world.entities).find(building => building.fromTick.model == "GoldStash"); window.mySockets.forEach(ws => { altArray.push(ws.myPlayer); }); if (altArray.length < 1) return; altArray.sort((a, b) => measureDistance(targetGoldStash.fromTick.position, a.position) - measureDistance(targetGoldStash.fromTick.position, b.position)); return altArray[0]; }; window.findNearestAlt = findNearestAltToStash; let mouse1b1s = () => { if (window.mySockets.length < 1) return; let altArray = []; let mouse = game.world.renderer.screenToWorld(game.ui.mousePosition.x, game.ui.mousePosition.y); window.mySockets.forEach(ws => { altArray.push(ws.myPlayer); }); if (altArray.length < 1) return; altArray.sort((a, b) => measureDistance(mouse, a.position) - measureDistance(mouse, b.position)); return altArray[0]; }; window.mouse1b1s = mouse1b1s;