+ 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.
? // Toggles on screenshot mode.
X // Toggles on mod menu.
Xeraphinite, v2.1
`;
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 heal = true;
var autobow = false;
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 (let uid in entities) {
if (!entities.hasOwnProperty(uid)) continue;
game.network.sendRpc({name: "UpgradeBuilding", uid: entities[uid].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 (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()}
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)}
${player.targetTick.isPaused ? "On Timeout" : ""}
`;
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()}
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)}
${player.targetTick.isPaused ? "On Timeout" : ""}
`;
player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info;
}
}
}
}
}
if (!getRss) {
allowed1 = false;
}
if(!window.zoomonscroll) {
window.zoom(document.getElementById("zoomSlider").value);
};
});
Game.currentGame.ui._events.playerPetTickUpdate.push(pet => {
if (pet.health <= 0) {
Game.currentGame.network.sendRpc({name: "BuyItem", itemName: "PetRevive", tier: 1});
Game.currentGame.network.sendRpc({name: "EquipItem", itemName: "PetRevive", tier: 1});
}
if (heal) {
let petHealth = (pet.health / pet.maxHealth) * 100;
if (petHealth <= 50) {
game.network.sendRpc({name: "BuyItem", itemName: "PetHealthPotion", tier: 1});
game.network.sendRpc({name: "EquipItem", itemName: "PetHealthPotion", tier: 1});
};
};
});
game.ui._events.playerTickUpdate.push(player => {
if (heal) {
let playerHealth = (player.health / player.maxHealth) * 100;
if (playerHealth <= 50) healPlayer();
}
xyshow.innerHTML = `X: ${Math.round(player.position.x - 13)}, Y: ${Math.round(player.position.y) - 13}`;
});
function healPlayer() {
Game.currentGame.network.sendRpc({
"name": "EquipItem",
"itemName": "HealthPotion",
"tier": 1
})
Game.currentGame.network.sendRpc({
"name": "BuyItem",
"itemName": "HealthPotion",
"tier": 1
})
}
function sellAllByType(type) {
if (!game.ui.playerPartyCanSell) return;
let sellInterval = () => {
let target = Object.values(game.ui.buildings).find(e => e.type == type);
if (target !== undefined) {
Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: target.uid});
setTimeout(() => { sellInterval(); }, 100);
}
}
sellInterval();
};
document.getElementsByClassName("0i")[0].addEventListener('click', function() {
Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 1e4, function() {
let sellInterval = () => {
if (Object.keys(game.ui.buildings).length > 1 && game.ui.playerPartyCanSell) {
Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: parseInt(Object.keys(game.ui.buildings)[1])});
setTimeout(() => { sellInterval(); }, 100);
}
}
sellInterval();
})
})
document.getElementsByClassName("1i")[0].addEventListener('click', () => { sellAllByType("Wall") });
document.getElementsByClassName("2i")[0].addEventListener('click', () => { sellAllByType("Door") });
document.getElementsByClassName("3i")[0].addEventListener('click', () => { sellAllByType("SlowTrap") });
document.getElementsByClassName("4i")[0].addEventListener('click', () => { sellAllByType("ArrowTower") });
document.getElementsByClassName("5i")[0].addEventListener('click', () => { sellAllByType("CannonTower") });
document.getElementsByClassName("6i")[0].addEventListener('click', () => { sellAllByType("MeleeTower") });
document.getElementsByClassName("7i")[0].addEventListener('click', () => { sellAllByType("BombTower") });
document.getElementsByClassName("8i")[0].addEventListener('click', () => { sellAllByType("MagicTower") });
document.getElementsByClassName("9i")[0].addEventListener('click', () => { sellAllByType("GoldMine") });
document.getElementsByClassName("10i")[0].addEventListener('click', () => { sellAllByType("Harvester") });
document.getElementsByClassName("11i")[0].addEventListener('click', () => { Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: game.ui.getPlayerPetUid()}); });
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 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() {
let baseStr = "";
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
// Zombs.io Emoji System + Chat Blocker
// Morpheus_ , ehScripts
const blockedUids = [];
window.blockPlayer = (name, uid) => {
game.ui.components.PopupOverlay.showConfirmation(`Are you sure you want to block ${window.filterXSS(name)} (${uid})?`, 3500, () => {
blockedUids.push(uid);
for (let bl of Array.from(document.getElementsByClassName(`uid${uid}`))) {
bl.innerHTML = "Unblock";
bl.style.color = "blue";
bl.onclick = () => window.unblockPlayer(name, uid);
};
}, () => {});
};
window.unblockPlayer = (name, uid) => {
this.blockedUids.splice(blockedUids.indexOf(uid), 1);
for (let bl of Array.from(document.getElementsByClassName(`uid${uid}`))) {
bl.innerHTML = "Block";
bl.style.color = "red";
bl.onclick = () => window.blockPlayer(name, uid);
};
};
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",
whale: "https://media.discordapp.net/attachments/876015747204268033/950597451897770064/1f433.png?width=48&height=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",
WYSI: "https://cdn.discordapp.com/emojis/816356638767972402.gif?size=48",
}
Game.currentGame.network.emitter.removeListener("PACKET_RPC", Game.currentGame.network.emitter._events.PACKET_RPC[1]);
const onMessageReceived = function(e) {
if (blockedUids.includes(e.uid) || window.chatDisabled) return;
let a = Game.currentGame.ui.getComponent("Chat"),
b = window.filterXSS(e.displayName),
c = window.filterXSS(e.message)
.replace(/(?:f|F)uck/gi, ``)
.replace(/s[3e]x+/gi, ``)
.replace(/n+[i1]+gg+[a@]+/i, ``);
let arr = c.split(':');
for (let i = 1; i < arr.length; i += 2) {
if (!emojiList[arr[i]]) arr = [c];
else arr[i] = ``;
}
let d = a.ui.createElement(`