`);
let crdt = document.getElementsByClassName('crdt')[0];
let xera = document.getElementsByClassName('xera')[0];
crdt.style.display = "none";
xera.addEventListener('click', function() {
if(crdt.style.display == "none" || crdt.style.display == "") {
crdt.style.display = "block";
} else {
crdt.style.display = "none";
};
});
/* random character gen */
var availableCharacters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890~!@#$%^&*()_+`-=[]{};':,./<>?\|";
var textLength = 29;
var text = "";
for (let i = 0; i < textLength; i++) text += availableCharacters[Math.floor(Math.random() * availableCharacters.length)];
/* name stuffs here */
document.getElementsByClassName('hud-intro-name')[0].setAttribute('maxlength', 29);
let guide = document.getElementsByClassName("hud-intro-guide")[0];
guide.innerHTML = `
+ Record base(s): You can save a base with the button, "Record Base!", and build the saved base with "Build Recorded Base!" button. In case you need to delete for another one, just click "Delete Recorded Base!".
+ Upgrade All: Automatically upgrades everything in your base to maximum tier possible.
+ AHRC: Stands for "Automatic Harvester Resource Collector", automatically refills your harvester(s) and collects them back to you.
+ Exact RSS Counter: "De-truncate" your resource stats.
+ Join party by PSK function: PSK stands for Party Share Key, use this to join your previous parties!
Keybinds
- // Enable show other players' RSS.
= // Toggle Exact RSS Counter.
~ // Add a marker on the minimap.
X // Toggles on mod menu.
Xeraphinite, v1.9
`;
function modm() {
if(menu.style.display == "none" || menu.style.display == "") {
menu.style.display = "block";
} else {
menu.style.display = "none";
};
};
/* main code */
var showRSS = false;
var AHRC = false;
var upgradeAll = false;
var petTimeout = false;
var hardcoreMode = false;
var heal = true;
var autobow = false;
var myPosx;
var myPosy;
var getRss = false;
var allowed1 = true;
function msToTime(s) {
// Pad to 2 or 3 digits, default is 2
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);
}
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";
}
}
game.network.addEntityUpdateHandler(() => {
if (game.network.connected) {
if(upgradeAll) {
let entities = game.world.entities;
for (var uid in entities) {
if (!entities.hasOwnProperty(uid)) continue;
var obj = entities[uid];
game.network.sendRpc({
name: "UpgradeBuilding",
uid: obj.fromTick.uid
})
}
}
if (AHRC) {
let entities = Game.currentGame.world.entities;
for (let uid in entities) {
let obj = entities[uid];
if (obj.fromTick.model == "Harvester") {
let amount = obj.fromTick.tier * 0.05 - 0.02;
game.network.sendRpc({name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: amount});
game.network.sendRpc({name: "CollectHarvester", uid: obj.fromTick.uid});
};
};
};
if (autobow) {
game.network.sendInput({space: 0})
game.network.sendInput({space: 1})
}
if (game.ui.playerTick) {
myPosx = game.ui.playerTick.position.x;
myPosy = game.ui.playerTick.position.y;
if (xyshow.innerHTML != `X: ${Math.round(myPosx)-13}, Y: ${Math.round(myPosy)-13}`) {
xyshow.innerHTML = `X: ${Math.round(myPosx - 13)}, Y: ${Math.round(myPosy) - 13}`;
}
}
}
if (getRss) {
!allowed1 && (allowed1 = true);
}
if (getRss || allowed1) {
for (let i in game.world.entities) {
if (game.world.entities[i].fromTick.name) {
let player = game.world.entities[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;
if (player.targetTick.isPaused == 1) {
timeout_1 = "On Timeout";
};
player.targetTick.info = `
${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()}
UID: ${player.targetTick.uid}
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)}
timeDead: ${msToTime(player.targetTick.timeDead)}
${timeout_1}
`;
player.targetTick.name = game.world.entities[i].targetTick.info;
}
if (!getRss && player.targetTick.oldName) {
player.targetTick.info = player.targetTick.oldName;
player.targetTick.name = game.world.entities[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;
if (player.targetTick.isPaused == 1) {
timeout_1 = "On Timeout";
};
player.targetTick.info = `
${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()}
UID: ${player.targetTick.uid}
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)}
timeDead: ${msToTime(player.targetTick.timeDead)}
${timeout_1}
`;
player.targetTick.name = game.world.entities[i].targetTick.info;
}
}
}
}
}
if (!getRss) {
allowed1 = false;
}
if(!window.zoomonscroll) {
window.zoom(document.getElementById("zoomSlider").value);
};
});
function healPlayer() {
Game.currentGame.network.sendRpc({
"name": "EquipItem",
"itemName": "HealthPotion",
"tier": 1
})
Game.currentGame.network.sendRpc({
"name": "BuyItem",
"itemName": "HealthPotion",
"tier": 1
})
}
/*
document.getElementsByClassName("0i")[0].addEventListener('click', function() {
Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 1e4, function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type !== "GoldStash") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
game.ui.components.PopupOverlay.showHint("Sold all.");
})
})
document.getElementsByClassName("1i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "Wall") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("2i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "Door") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("3i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "SlowTrap") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("4i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "ArrowTower") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("5i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "CannonTower") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("6i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "MeleeTower") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("7i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "BombTower") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("8i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "MagicTower") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("9i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "GoldMine") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("10i")[0].addEventListener('click', function() {
for(let uid in game.ui.buildings) {
if(game.ui.buildings[uid].type == "Harvester") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.ui.buildings[uid].uid
});
}
}
})
document.getElementsByClassName("11i")[0].addEventListener('click', function() {
for(let uid in game.world.entities) {
if(game.world.entities[uid].fromTick.model == "PetCARL" || game.world.entities[uid].fromTick.model == "PetMiner") {
Game.currentGame.network.sendRpc({
name: "DeleteBuilding",
uid: game.world.entities[uid].fromTick.uid
});
}
}
})
*/
document.getElementsByClassName("3i2")[0].addEventListener('click', function() {
upgradeAll = !upgradeAll;
let upalltoggle = document.getElementById('upalltoggle');
if (upgradeAll) {
upalltoggle.style.color = "green";
upalltoggle.innerText = "ON";
} else {
upalltoggle.style.color = "red";
upalltoggle.innerText = "OFF";
}
})
document.getElementsByClassName("0i4")[0].addEventListener('click', function() {
AHRC = !AHRC;
let ahrctoggle = document.getElementById('ahrctoggle');
if (AHRC) {
ahrctoggle.style.color = "green";
ahrctoggle.innerText = "ON";
} else {
ahrctoggle.style.color = "red";
ahrctoggle.innerText = "OFF";
}
})
document.getElementsByClassName("1i4")[0].addEventListener('click', function() {
window.frss = !window.frss;
let rsstoggle = document.getElementById('exactrsstoggle');
if (window.frss) {
rsstoggle.style.color = "green";
rsstoggle.innerText = "ON";
} else {
rsstoggle.style.color = "red";
rsstoggle.innerText = "OFF";
}
})
document.getElementsByClassName("hud-Close-icon")[0].addEventListener("click", function () {
menu.style.display = "none";
});
var baseStr = "";
var towerCodes = ["Wall", "Door", "SlowTrap", "ArrowTower", "CannonTower", "MeleeTower", "BombTower", "MagicTower", "GoldMine", "Harvester"];
function getGoldStash() {
return Object.values(Game.currentGame.ui.buildings).find(building => building.type == "GoldStash");
}
window.RecordBase = function() {
for (let i in game.ui.buildings) {
const building = game.ui.buildings[i];
if (towerCodes.indexOf(building.type) < 0) continue;
let yaw = 0;
if (["Harvester", "MeleeTower"].includes(building.type)) {
if (game.world.entities[building.uid] !== undefined) yaw = game.world.entities[building.uid].targetTick.yaw;
}
baseStr += `${towerCodes.indexOf(building.type)},${getGoldStash().x - building.x},${getGoldStash().y - building.y},${yaw};`;
}
localStorage.savedBase = baseStr;
console.log(baseStr);
}
window.buildRecordedBase = function() {
function BuildBase(design) {
if (typeof design !== "string") throw new Error("Argument must be given as a string.");
if (getGoldStash() === undefined) throw new Error("You must have a gold stash to be able to use this.");
const towers = design.split(";");
for (let towerStr of towers) {
const tower = towerStr.split(",");
if (tower[0] === "") continue;
if (tower.length < 4) throw new Error(`${JSON.stringify(tower)} contains an issue that must be fixed before this design can be replicated.`);
Game.currentGame.network.sendRpc({
name: "MakeBuilding",
type: towerCodes[parseInt(tower[0])],
x: getGoldStash().x - parseInt(tower[1]),
y: getGoldStash().y - parseInt(tower[2]),
yaw: parseInt(tower[3])
});
}
}
BuildBase(localStorage.savedBase);
}
window.DeleteRecordedbase = function() {
Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete the recorded base?", 1e4, function() {
game.ui.components.PopupOverlay.showHint("Recorded base has been successfully deleted!");
localStorage.savedBase = null;
})
}
game.network.sendRpc2 = game.network.sendRpc;
const placeWall = (x, y) => {
game.network.sendRpc2({
name: 'MakeBuilding',
x: x,
y: y,
type: "Wall",
yaw: 0
});
};
game.network.sendRpc = (data) => {
let gridPos = { x: data.x, y: data.y };
if(data.name === "MakeBuilding" && data.type === "Wall" && window.x3builds) {
placeWall(gridPos.x, gridPos.y);
placeWall(gridPos.x + 48, gridPos.y);
placeWall(gridPos.x, gridPos.y + 48);
placeWall(gridPos.x - 48, gridPos.y);
placeWall(gridPos.x, gridPos.y - 48);
placeWall(gridPos.x - 48, gridPos.y + 48);
placeWall(gridPos.x + 48, gridPos.y - 48);
placeWall(gridPos.x + 48, gridPos.y + 48);
placeWall(gridPos.x - 48, gridPos.y - 48);
};
game.network.sendRpc2(data);
};
let dimension = 1;
let upd = () => {
const renderer = Game.currentGame.renderer;
let canvasWidth = window.innerWidth * window.devicePixelRatio;
let canvasHeight = window.innerHeight * window.devicePixelRatio;
let ratio = 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;
};
const onWindowResize = () => {
if (window.zoomonscroll) {
upd();
console.log(dimension);
}
} // Zoom by Apex, modified by eh
onWindowResize();
window.onresize = onWindowResize;
window.onwheel = e => {
if (e.deltaY > 0) {
dimension += 0.02;
} else if (e.deltaY < 0) {
dimension -= 0.02;
}
onWindowResize();
}
window.zoom = val => {
dimension = val;
upd();
};
window.toggleZoS = () => {
dimension -= 0.02;
window.zoomonscroll = !window.zoomonscroll;
let zs = document.getElementById("zsd");
zs.style.display = zs.style.display == "none" ? "block" : "none";
};
window.zoomOut = () => {
let zs = document.getElementById("zoomSlider");
zs.value = parseInt(zs.value) + 1;
};
window.zoomIn = () => {
let zs = document.getElementById("zoomSlider");
zs.value = parseInt(zs.value) - 1;
}; // cutdown version of ignition's zoom
// @name Zombs.io Emoji System + Chat Blocker
// @author Morpheus_ , ehScripts
let blockedNames = [];
window.blockPlayer = name => {
game.ui.components.PopupOverlay.showConfirmation(`Are you sure you want to block ${name}?`, 3500, () => {
blockedNames.push(name);
for(let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) {
if(msg.childNodes[2].innerText === name) {
let bl = msg.childNodes[0];
bl.innerHTML = "Unblock";
bl.style.color = "blue";
bl.onclick = () => {
window.unblockPlayer(name);
};
};
};
}, () => {});
};
window.unblockPlayer = name => {
blockedNames.splice(blockedNames.indexOf(name), 1);
for(let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) {
if(msg.childNodes[2].innerText === name) {
let bl = msg.childNodes[0];
bl.innerHTML = "Block";
bl.style.color = "red";
bl.onclick = () => {
window.blockPlayer(name);
};
};
};
};
const getClock = () => {
var date = new Date();
var d = date.getDate();
var d1 = date.getDay();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds()
var session = "PM";
if(h == 2){
h = 12;
};
if(h < 13) {
session = "AM"
};
if(h > 12){
session = "PM";
h -= 12;
};
h = (h < 10) ? "0" + h : h;
m = (m < 10) ? "0" + m : m;
s = (s < 10) ? "0" + s : s;
return `${h}:${m} ${session}`;
}
var emojiList = {
hmm: "https://cdn.discordapp.com/emojis/724365641963929611.png?size=48",
pog: "https://cdn.discordapp.com/emojis/721070353337811026.png?size=48",
pepehands: "https://cdn.discordapp.com/emojis/733406770139103293.png?size=48",
pepeEyes: "https://cdn.discordapp.com/emojis/869573233794486323.gif?size=48",
pepeHappy: "https://cdn.discordapp.com/emojis/801475958883614811.png?size=48",
sadge: "https://cdn.discordapp.com/emojis/826530556974989344.png?size=48",
ha: "https://cdn.discordapp.com/emojis/782756472886525953.png?size=48",
kekw: "https://cdn.discordapp.com/emojis/748511358076846183.png?size=48",
pogEyes: "https://cdn.discordapp.com/emojis/786979080406564885.png?size=48",
appalled: "https://cdn.discordapp.com/emojis/830880294881853530.png?size=48",
pogYou: "https://cdn.discordapp.com/emojis/790293794716516430.png?size=48",
pogChag: "https://cdn.discordapp.com/emojis/831156303497134090.png?size=48",
pogey: "https://cdn.discordapp.com/emojis/790293759861719050.png?size=48",
weirdChamp: "https://cdn.discordapp.com/emojis/757553915389673502.png?size=48",
monkaS: "https://cdn.discordapp.com/emojis/757179783573405766.png?size=48",
yep: "https://cdn.discordapp.com/emojis/758356179477987339.png?size=48",
weirdButOkay: "https://cdn.discordapp.com/emojis/831156194247966782.gif?size=48",
pogpogpogpog: "https://cdn.discordapp.com/emojis/869580566096379974.gif?size=48",
wooyeah: "https://cdn.discordapp.com/emojis/791008461420888084.gif?size=48",
idk: "https://cdn.discordapp.com/emojis/882513306164805642.gif?size=48",
}
//
Game.currentGame.network.emitter.removeListener("PACKET_RPC", Game.currentGame.network.emitter._events.PACKET_RPC[1])
const onMessageReceived = e => {
if (blockedNames.includes(e.displayName) || window.chatDisabled) { return; };
let a = Game.currentGame.ui.getComponent("Chat"),
b = e.displayName.replace(/<(?:.|\n)*?>/gm, ''),
c = e.message.replace(/<(?:.|\n)*?>/gm, '')
.replace(/(?:f|F)(uck|UCK|uCK|UcK|UCk|Uck|ucK)/g, ``)
.replace(/n+[i1]+gg+[a@]+/i, ``);
let arr = c.split(':');
for (let i = 1; i < arr.length; i += 2) {
// console.log(arr[i]);
if (!emojiList[arr[i]]) {
// console.log(arr);
arr = [c];
} else {
arr[i] = ``
};
}
let d = a.ui.createElement(`