deploy: 0e4ecbb36f
parent
382296339b
commit
9d6cc45695
135
fx_core.js
135
fx_core.js
|
@ -1,6 +1,6 @@
|
|||
const dictionary = {"gIsTeamGame":"hM","playerId":"eU","playerNames":"jm","playerBalances":"eV","playerTerritories":"ez","gHumans":"h1","playerStates":"h3","gLobbyMaxJoin":"px","gIsSingleplayer":"im","uiSizes":"b0","gap":"gap"};
|
||||
const fx_version = '0.6.3.3'; // FX Client Version
|
||||
const fx_update = 'Apr 11'; // FX Client Last Updated
|
||||
const dictionary = {"gIsTeamGame":"hM","playerId":"eU","playerNames":"jm","playerBalances":"eV","playerTerritories":"ez","gHumans":"h1","playerStates":"h3","gLobbyMaxJoin":"px","gIsSingleplayer":"im","gameState":"rS","uiSizes":"b0","gap":"gap"};
|
||||
const fx_version = '0.6.4'; // FX Client Version
|
||||
const fx_update = 'May 20'; // FX Client Last Updated
|
||||
|
||||
if (localStorage.getItem("fx_winCount") == undefined || localStorage.getItem("fx_winCount") == null) {
|
||||
var wins_counter = 0;
|
||||
|
@ -28,8 +28,9 @@ function KeybindsInput(containerElement) {
|
|||
this.keys = [ "key", "type", "value" ];
|
||||
this.objectArray = [];
|
||||
this.addObject = function () {
|
||||
this.objectArray.push({ key: "", type: "absolute", value: 1 });
|
||||
this.objectArray.push({ key: "", type: "absolute", value: 0.8 });
|
||||
this.displayObjects();
|
||||
keybindAddButton.scrollIntoView(false);
|
||||
};
|
||||
this.update = function () {
|
||||
this.objectArray = settings.attackPercentageKeybinds;
|
||||
|
@ -55,11 +56,15 @@ function KeybindsInput(containerElement) {
|
|||
inputField.setAttribute("placeholder", "No key set");
|
||||
inputField.addEventListener("click", this.startKeyInput.bind(this, i, key));
|
||||
} else { // key === "value"
|
||||
inputField.type = "number";
|
||||
inputField.setAttribute("step", "0.1");
|
||||
const isAbsolute = this.objectArray[i].type === "absolute";
|
||||
inputField.type = isAbsolute ? "text" : "number";
|
||||
if (isAbsolute) inputField.addEventListener("click", this.convertIntoNumberInput.bind(this, i, key), { once: true });
|
||||
else inputField.setAttribute("step", "0.1");
|
||||
inputField.addEventListener("input", this.updateObject.bind(this, i, key));
|
||||
}
|
||||
inputField.value = this.objectArray[i][key];
|
||||
if (key === "value" && this.objectArray[i].type === "absolute")
|
||||
inputField.value = this.objectArray[i][key] * 100 + "%";
|
||||
else inputField.value = this.objectArray[i][key];
|
||||
// Append input field to the object div
|
||||
objectDiv.appendChild(inputField);
|
||||
}, this);
|
||||
|
@ -84,10 +89,21 @@ function KeybindsInput(containerElement) {
|
|||
//this.displayObjects();
|
||||
}, { once: true });
|
||||
};
|
||||
/** @param {PointerEvent} event */
|
||||
this.convertIntoNumberInput = function (index, property, event) {
|
||||
event.target.value = event.target.value.slice(0, -1);
|
||||
event.target.type = "number";
|
||||
event.target.addEventListener("blur", () => {
|
||||
//event.target.value = this.objectArray[index][property];
|
||||
this.displayObjects();
|
||||
}, { once: true });
|
||||
};
|
||||
this.updateObject = function (index, property, event) {
|
||||
if (index >= this.objectArray.length) return;
|
||||
// Update the corresponding property of the object in the array
|
||||
const value = property === "value" ? parseFloat(event.target.value) : property === "key" ? event.key : event.target.value;
|
||||
const value = property === "value" ? (
|
||||
this.objectArray[index].type === "absolute" ? parseFloat(event.target.value) / 100 : parseFloat(event.target.value)
|
||||
) : property === "key" ? event.key : event.target.value;
|
||||
this.objectArray[index][property] = value;
|
||||
if (property === "key") this.displayObjects();
|
||||
};
|
||||
|
@ -105,6 +121,7 @@ var settings = {
|
|||
//"showBotDonations": false,
|
||||
"displayWinCounter": true,
|
||||
"useFullscreenMode": false,
|
||||
"hoveringTooltip": true,
|
||||
//"hideAllLinks": false,
|
||||
"realisticNames": false,
|
||||
"showPlayerDensity": true,
|
||||
|
@ -124,6 +141,8 @@ var settingsManager = new (function() {
|
|||
note: "The win counter tracks multiplayer solo wins (not in team games)" },
|
||||
{ for: "useFullscreenMode", type: "checkbox", label: "Use fullscreen mode",
|
||||
note: "Note: fullscreen mode will trigger after you click anywhere on the page due to browser policy restrictions." },
|
||||
{ for: "hoveringTooltip", type: "checkbox", label: "Hovering tooltip",
|
||||
note: "Display map territory info constantly (on mouse hover) instead of only when right clicking on the map" },
|
||||
//{ for: "hideAllLinks", type: "checkbox", label: "Hide Links option also hides app store links" },
|
||||
{ for: "realisticNames", type: "checkbox", label: "Realistic Bot Names" },
|
||||
{ for: "showPlayerDensity", type: "checkbox", label: "Show player density" },
|
||||
|
@ -323,6 +342,106 @@ const playerList = new (function () {
|
|||
canvas.imageSmoothingEnabled = false;
|
||||
}
|
||||
});
|
||||
|
||||
/** @param {string} name */
|
||||
function parseClanFromPlayerName(name) {
|
||||
const startIndex = name.indexOf("[");
|
||||
// this is probably how the algorithm works, since a player with
|
||||
// the name "][a]" will count as not being in a clan in the base game
|
||||
return startIndex === -1 ? "" : name.slice(startIndex + 1, name.indexOf("]")).toUpperCase();
|
||||
}
|
||||
|
||||
const leaderboardFilter = new (function() {
|
||||
this.playersToInclude = [0,1,8,20,24,30,32,42,50,69,200,400,500,510,511]; // for testing
|
||||
//this.playersToInclude = [];
|
||||
this.tabLabels = ["ALL", "CLAN"];
|
||||
// these get populated by the modified game code
|
||||
this.filteredLeaderboard = [];
|
||||
this.tabBarOffset = 0;
|
||||
this.windowWidth = 0;
|
||||
this.verticalClickThreshold = 1000;
|
||||
this.hoveringOverTabs = false;
|
||||
this.scrollToTop = () => {};
|
||||
this.repaintLeaderboard = () => {};
|
||||
|
||||
this.selectedTab = 0;
|
||||
this.tabHovering = -1;
|
||||
//this.enabled = false;
|
||||
this.enabled = true;
|
||||
this.drawTabs = function(canvas, totalWidth, verticalOffset, colorForSelectedTab) {
|
||||
canvas.textBaseline = "middle";
|
||||
canvas.textAlign = "center";
|
||||
const tabWidth = totalWidth / this.tabLabels.length;
|
||||
const textOffsetY = verticalOffset + this.tabBarOffset / 2;
|
||||
//console.log(verticalOffset, this.tabBarOffset, textOffsetY);
|
||||
this.tabLabels.forEach((label, index) => {
|
||||
if (index !== 0) canvas.fillRect(tabWidth * index, verticalOffset, 1, this.tabBarOffset);
|
||||
if (this.selectedTab === index) {
|
||||
canvas.fillStyle = colorForSelectedTab;
|
||||
canvas.fillRect(tabWidth * index, verticalOffset, tabWidth, this.tabBarOffset);
|
||||
canvas.fillStyle = "rgb(255,255,255)";
|
||||
}
|
||||
if (this.tabHovering === index) {
|
||||
canvas.fillStyle = "rgba(255,255,255,0.3)";
|
||||
canvas.fillRect(tabWidth * index, verticalOffset, tabWidth, this.tabBarOffset);
|
||||
canvas.fillStyle = "rgb(255,255,255)";
|
||||
}
|
||||
canvas.fillText(label, tabWidth * index + tabWidth / 2, textOffsetY);
|
||||
});
|
||||
}
|
||||
this.setHovering = (isHovering, xRelative) => {
|
||||
let repaintNeeded = false;
|
||||
if (isHovering) {
|
||||
const tab = Math.floor(xRelative / (this.windowWidth / this.tabLabels.length));
|
||||
if (this.tabHovering !== tab) {
|
||||
this.tabHovering = tab;
|
||||
repaintNeeded = true;
|
||||
}
|
||||
}
|
||||
if (isHovering !== this.hoveringOverTabs) {
|
||||
this.hoveringOverTabs = isHovering;
|
||||
if (isHovering === false) this.tabHovering = -1;
|
||||
if (!isHovering) repaintNeeded = true;
|
||||
}
|
||||
if (repaintNeeded) this.repaintLeaderboard();
|
||||
return isHovering;
|
||||
}
|
||||
this.handleMouseDown = (xRelative) => {
|
||||
//console.log("click; x: ", xRelative);
|
||||
if (this.tabHovering !== this.selectedTab) {
|
||||
this.selectedTab = this.tabHovering;
|
||||
if (this.selectedTab === 0) this.clearFilter();
|
||||
else if (this.selectedTab === 1) this.filterByOwnClan();
|
||||
this.repaintLeaderboard();
|
||||
}
|
||||
return true;
|
||||
};
|
||||
this.filterByOwnClan = () => {
|
||||
this.playersToInclude = [];
|
||||
const ownClan = parseClanFromPlayerName(getVar("playerNames")[getVar("playerId")]);
|
||||
getVar("playerNames").forEach((name, id) => {
|
||||
if (parseClanFromPlayerName(name) === ownClan) this.playersToInclude.push(id);
|
||||
});
|
||||
this.enabled = true;
|
||||
this.scrollToTop();
|
||||
};
|
||||
this.clearFilter = () => { this.enabled = false; }
|
||||
this.reset = () => {
|
||||
this.enabled = false;
|
||||
this.selectedTab = 0;
|
||||
}
|
||||
});
|
||||
|
||||
const hoveringTooltip = new (function() {
|
||||
this.display = () => {}; // this gets populated by the modified game script
|
||||
document.getElementById("canvasA").addEventListener("mousemove", e => {
|
||||
if (!settings.hoveringTooltip || !getVar("gameState")) return;
|
||||
try {
|
||||
this.display(e.clientX, e.clientY);
|
||||
} catch (e) { console.error(e) }
|
||||
});
|
||||
});
|
||||
|
||||
var donationsTracker = new (function(){
|
||||
this.openedWindowPlayerID = null;
|
||||
this.contentElement = document.querySelector("#donationhistory_content");
|
||||
|
|
214
game.js
214
game.js
|
@ -2005,17 +2005,24 @@ function bU() {
|
|||
}(g8, g9), this.o3(), 2 === g8 && (az.t8 = !0), 0 < g8))
|
||||
}, this.t6 = function(g8, g9) {
|
||||
this.t8() || (uu = g8, uv = g9, dY = performance.now())
|
||||
}, this.click = function(g8, g9, tE) {
|
||||
}, hoveringTooltip.display = function(mouseX, mouseY) {
|
||||
var coordX = aj.fU(mouseX),
|
||||
coordY = aj.fW(mouseY),
|
||||
coord = aj.fY(coordX, coordY),
|
||||
point = aj.fa(coord);
|
||||
k.vQ(point);
|
||||
}
|
||||
this.click = function(g8, g9, tE) {
|
||||
var fT = aj.fU(g8),
|
||||
fV = aj.fW(g9),
|
||||
fX = aj.fY(fT, fV),
|
||||
fZ = aj.fa(fX);
|
||||
return !(!aj.fb(fT, fV) || (fT = (b7.cv.fv() ? .025 : .0144) * aK.fw, fV = performance.now(), Math.abs(g8 - uu) > fT) || Math.abs(g9 - uv) > fT || dY + 500 < fV) && (dY = fV, tE ? (function(g8, g9, fZ) {
|
||||
a2.eb(fZ) || -1 === (g8 = ak.ff.vR(g8, g9)) ? k.vQ(fZ) : k.vS(g8)
|
||||
}(g8, g9, fZ), !1) : j.fM || this.t8() || !aY.fN.fP(eU) || fL ? (this.o3(), !1) : fc ? !!a2.eb(fZ) && (uw = fX, nU[3].t8 = !0, this.vI(g8, g9)) : (ak.ff.fg(fX) || ak.ff.fh(g8, g9) || (2 === rS ? a2.ej(fZ) && 0 < az.vJ && (player =
|
||||
a2.ek(fZ), a2.vK(player)) && (nU[0].t8 = !0, nU[0].v2 = 1, nU[7].t8 = !0) : a2.fi(fZ) || (uw = fX, ak.ff.fk(eU, fX) && (nU[0].t8 = !0, nU[0].v2 = 1, nU[1].t8 = !0, nU[1].v2 = al.di[2] ? 0 : 2), a2.fj(fZ)) || (a2.el(
|
||||
fZ) ? (player = ed, fn(eU) ? (nU[0].t8 = !0, nU[0].v2 = 0) : fp(eU, player) && (nU[0].t8 = !0, nU[0].v2 = 3)) : (player = a2.ek(fZ)) === eU ? 0 !== az.vJ && (nU[0].t8 = !0, nU[0].v2 = 1, nU[7].t8 = !0) : (nU[0].v2 = 1,
|
||||
nU[5].t8 = function(player) {
|
||||
}(g8, g9, fZ), false) : j.fM || this.t8() || !aY.fN.fP(eU) || fL ? (this.o3(), !1) : fc ? !!a2.eb(fZ) && (uw = fX, nU[3].t8 = !0, this.vI(g8, g9)) : (ak.ff.fg(fX) || ak.ff.fh(g8, g9) || (2 === rS ? a2.ej(fZ) && 0 < az.vJ && (
|
||||
player = a2.ek(fZ), a2.vK(player)) && (nU[0].t8 = !0, nU[0].v2 = 1, nU[7].t8 = !0) : a2.fi(fZ) || (uw = fX, ak.ff.fk(eU, fX) && (nU[0].t8 = !0, nU[0].v2 = 1, nU[1].t8 = !0, nU[1].v2 = al.di[2] ? 0 : 2), a2.fj(fZ)) || (
|
||||
a2.el(fZ) ? (player = ed, fn(eU) ? (nU[0].t8 = !0, nU[0].v2 = 0) : fp(eU, player) && (nU[0].t8 = !0, nU[0].v2 = 3)) : (player = a2.ek(fZ)) === eU ? 0 !== az.vJ && (nU[0].t8 = !0, nU[0].v2 = 1, nU[7].t8 = !0) : (nU[0]
|
||||
.v2 = 1, nU[5].t8 = function(player) {
|
||||
return a2.vK(player) && !vD(player) && aS.vE(1, [player], !1)
|
||||
}(player), nU[7].t8 = 1 <= az.vJ && a2.vK(player), fr(player, eU) ? (nU[4].t8 = a2.vK(player) && !a6.vM(player) && aS.vE(0, [player], !1), nU[6].t8 = function(player) {
|
||||
if (0 === m9.length) return !1;
|
||||
|
@ -3121,13 +3128,61 @@ function be() {
|
|||
a0V = 1;
|
||||
|
||||
function a0Y() {
|
||||
a0A.clearRect(0, 0, a04, y9), a0A.fillStyle = aZ.lE, a0A.fillRect(0, 0, a04, a0F), a0A.fillStyle = aZ.kZ, a0A.fillRect(0, a0F, a04, y9 - a0F), a03[eU] >= position && a0Z(a03[eU] - position, aZ.kw), 0 !== a03[eU] && 0 === position && a0Z(0, aZ
|
||||
.lJ), -1 !== a0P && a0Z(a0P, aZ.kd), a0A.fillStyle = aZ.gF, a0A.fillRect(0, a0F, a04, 1), a0A.fillRect(0, 0, a04, b0.ur), a0A.fillRect(0, 0, b0.ur, y9), a0A.fillRect(a04 - b0.ur, 0, b0.ur, y9), a0A.fillRect(0, y9 - b0.ur, a04, b0.ur),
|
||||
a0A.font = a05, aY.g0.textBaseline(a0A, 1), aY.g0.textAlign(a0A, 1), a0A.fillText(aV.nc[65], Math.floor((a04 + a0F - 22) / 2), Math.floor(a0D + a06 / 2));
|
||||
a0A.clearRect(0, 0, a04, y9),
|
||||
a0A.fillStyle = aZ.lE,
|
||||
a0A.fillRect(0, 0, a04, a0F),
|
||||
a0A.fillStyle = aZ.kZ,
|
||||
a0A.fillRect(0, a0F, a04, y9 - a0F);
|
||||
if (leaderboardFilter.enabled) {
|
||||
leaderboardFilter.filteredLeaderboard = leaderboardFilter.playersToInclude
|
||||
.map(id => a03[id]).sort((a, b) => a - b);
|
||||
}
|
||||
var playerPos = (leaderboardFilter.enabled ?
|
||||
leaderboardFilter.filteredLeaderboard.indexOf(a03[eU]) :
|
||||
a03[eU]
|
||||
);
|
||||
this.playerPos = playerPos;
|
||||
if (leaderboardFilter.hoveringOverTabs) a0P = -1;
|
||||
if (leaderboardFilter.enabled && a0P >= leaderboardFilter.filteredLeaderboard.length) a0P = -1;
|
||||
playerPos >= position && a0Z(playerPos - position, aZ.kw),
|
||||
0 !== a03[eU] && 0 === position && a0Z(0, aZ.lJ),
|
||||
-1 !== a0P && a0Z(a0P, aZ.kd),
|
||||
a0A.fillStyle = aZ.kZ,
|
||||
//console.log("drawing", a0P),
|
||||
a0A.clearRect(0, y9 - leaderboardFilter.tabBarOffset, a04, leaderboardFilter.tabBarOffset);
|
||||
a0A.fillRect(0, y9 - leaderboardFilter.tabBarOffset, a04, leaderboardFilter.tabBarOffset);
|
||||
a0A.fillStyle = aZ.gF,
|
||||
a0A.fillRect(0, a0F, a04, 1),
|
||||
a0A.fillRect(0, y9 - leaderboardFilter.tabBarOffset, a04, 1),
|
||||
leaderboardFilter.drawTabs(a0A, a04, y9 - leaderboardFilter.tabBarOffset, aZ.kw),
|
||||
a0A.fillRect(0, 0, a04, b0.ur),
|
||||
a0A.fillRect(0, 0, b0.ur, y9),
|
||||
a0A.fillRect(a04 - b0.ur, 0, b0.ur, y9),
|
||||
a0A.fillRect(0, y9 - b0.ur, a04, b0.ur), a0A.font = a05, aY.g0.textBaseline(a0A, 1), aY.g0.textAlign(a0A, 1), a0A.fillText(aV.nc[65], Math.floor((a04 + a0F - 22) / 2), Math.floor(a0D + a06 / 2));
|
||||
playerList.drawButton(a0A, 12, 12, a0F - 22);
|
||||
var hZ, eh = a03[eU] < position + a08 - 1 ? 1 : 2;
|
||||
for (a0A.font = a07, aY.g0.textAlign(a0A, 0), hZ = a08 - eh; 0 <= hZ; hZ--) a0a(jG[hZ + position]), a0b(hZ, hZ + position, jG[hZ + position]);
|
||||
for (aY.g0.textAlign(a0A, 2), hZ = a08 - eh; 0 <= hZ; hZ--) a0a(jG[hZ + position]), a0c(hZ, jG[hZ + position]);
|
||||
var hZ, eh = playerPos < position + a08 - 1 ? 1 : 2;
|
||||
|
||||
if (leaderboardFilter.enabled) {
|
||||
let result = leaderboardFilter.filteredLeaderboard;
|
||||
if (position !== 0 && position >= result.length - a08)
|
||||
position = (result.length > a08 ? result.length : a08) - a08;
|
||||
//if (position >= result.length) position = result.length - 1;
|
||||
for (a0A.font = a07, aY.g0.textAlign(a0A, 0), hZ = a08 - eh; 0 <= hZ; hZ--) {
|
||||
const pos = result[hZ + position];
|
||||
if (pos !== undefined)
|
||||
a0a(jG[pos]), a0b(hZ, pos, jG[pos]);
|
||||
}
|
||||
for (aY.g0.textAlign(a0A, 2), hZ = a08 - eh; 0 <= hZ; hZ--) {
|
||||
const pos = result[hZ + position];
|
||||
if (pos !== undefined)
|
||||
a0a(jG[pos]), a0c(hZ, jG[pos]);
|
||||
}
|
||||
} else {
|
||||
for (a0A.font = a07, aY.g0.textAlign(a0A, 0), hZ = a08 - eh; 0 <= hZ; hZ--)
|
||||
a0a(jG[hZ + position]), a0b(hZ, hZ + position, jG[hZ + position]);
|
||||
for (aY.g0.textAlign(a0A, 2), hZ = a08 - eh; 0 <= hZ; hZ--)
|
||||
a0a(jG[hZ + position]), a0c(hZ, jG[hZ + position]);
|
||||
}
|
||||
2 == eh && (a0a(eU), aY.g0.textAlign(a0A, 0), a0b(a08 - 1, a03[eU], eU), aY.g0.textAlign(a0A, 2), a0c(a08 - 1, eU)), 0 === position && (eh = .7 * a0G / a1.get(4).height, a0A.setTransform(eh, 0, 0, eh, Math.floor(a0H + .58 * a0G + .5 * eh * a1
|
||||
.get(4).width), Math.floor(a0D + a06 + .4 * a0G)), a0A.imageSmoothingEnabled = !0, a0A.drawImage(a1.get(4), -Math.floor(a1.get(4).width / 2), -Math.floor(a1.get(4).height / 2)), a0A.setTransform(1, 0, 0, 1, 0, 0))
|
||||
}
|
||||
|
@ -3160,69 +3215,82 @@ function be() {
|
|||
return fI >= b0.gap && fI < b0.gap + a04 && fJ >= b0.gap && fJ < b0.gap + y9
|
||||
}
|
||||
this.cq = function() {
|
||||
var eD;
|
||||
for (a0R = !1, a0T = a0S = a0Q = 0, a0P = -1, a08 = b7.cv.fv() ? 6 : 10, a0V = (position = 0) === (a0V = b9.dG.data[11].value) ? 10 : 1 === a0V ? 5 : 1, a0O = !1, a0M = new Uint16Array(a08 + 1), a0N = new Uint32Array(a08 + 1), a0C = ed,
|
||||
jG = new Uint16Array(a0C), a03 = new Uint16Array(a0C), eD = a0C - 1; 0 <= eD; eD--) jG[eD] = eD, a03[eD] = eD;
|
||||
this.resize(!0), a0K = new Uint16Array(ed);
|
||||
var a0W = Math.floor(a04 - a0I - a0H - a0B);
|
||||
for (a0L = new Array(ed), a0A.font = a07, eD = ed - 1; 0 <= eD; eD--) a0L[eD] = eD + 1 + ".", jm[eD] = aY.qW.tm(a0X[eD], a07, a0W), a0K[eD] = Math.floor(a0A.measureText(jm[eD]).width);
|
||||
a0Y()
|
||||
}, this.resize = function(cq) {
|
||||
if (y9 = b7.cv.fv() ? (a04 = Math.floor(.335 * aK.fw), Math.floor(a08 * a04 / 8)) : (a04 = Math.floor(.27 * aK.fw), Math.floor(a08 * a04 / 10)), a04 = Math.floor(.97 * a04), (a09 = document.createElement("canvas")).width = a04, a09
|
||||
.height = y9, a0A = a09.getContext("2d", {
|
||||
alpha: !0
|
||||
}), a0D = .025 * a04, a06 = .16 * a04, a0E = 0 * a04, a0F = Math.floor(.45 * a0D + a06), a0G = (y9 - a06 - 2 * a0D - a0E) / a08, a05 = aY.g0.g1(1, Math.floor(.55 * a06)), a0U = Math.floor((b7.cv.fv() ? .67 : .72) * a0G), a07 = aY.g0
|
||||
.g1(0, a0U), a0A.font = a07, a0H = Math.floor(.04 * a04), a0I = Math.floor((b7.cv.fv() ? .195 : .18) * a04), a0B = Math.floor(a0A.measureText("00920600").width), a0A.font = a05, a0J = a04 - a0H, !cq) {
|
||||
a0A.font = a07;
|
||||
for (var eD = ed - 1; 0 <= eD; eD--) a0K[eD] = Math.floor(a0A.measureText(jm[eD]).width);
|
||||
var eD;
|
||||
for (a0R = !1, a0T = a0S = a0Q = 0, a0P = -1, a08 = b7.cv.fv() ? 6 : 10, a0V = (position = 0) === (a0V = b9.dG.data[11].value) ? 10 : 1 === a0V ? 5 : 1, a0O = !1, a0M = new Uint16Array(a08 + 1), a0N = new Uint32Array(a08 + 1), a0C = ed,
|
||||
jG = new Uint16Array(a0C), a03 = new Uint16Array(a0C), eD = a0C - 1; 0 <= eD; eD--) jG[eD] = eD, a03[eD] = eD;
|
||||
this.resize(!0), a0K = new Uint16Array(ed);
|
||||
var a0W = Math.floor(a04 - a0I - a0H - a0B);
|
||||
for (a0L = new Array(ed), a0A.font = a07, eD = ed - 1; 0 <= eD; eD--) a0L[eD] = eD + 1 + ".", jm[eD] = aY.qW.tm(a0X[eD], a07, a0W), a0K[eD] = Math.floor(a0A.measureText(jm[eD]).width);
|
||||
a0Y()
|
||||
}, this.resize = function(cq) {
|
||||
if (y9 = b7.cv.fv() ? (a04 = Math.floor(.335 * aK.fw), Math.floor(a08 * a04 / 8)) : (a04 = Math.floor(.27 * aK.fw), Math.floor(a08 * a04 / 10)), a04 = Math.floor(.97 * a04), (a09 = document.createElement("canvas")).width = a04, a09
|
||||
.height = y9, a0A = a09.getContext("2d", {
|
||||
alpha: !0
|
||||
}), a0D = .025 * a04, a06 = .16 * a04, a0E = 0 * a04, a0F = Math.floor(.45 * a0D + a06), a0G = (y9 - a06 - 2 * a0D - a0E) / a08,
|
||||
a09.height = y9 += a0G, leaderboardFilter.tabBarOffset = Math.floor(a0G * 1.3), leaderboardFilter.verticalClickThreshold = y9 - leaderboardFilter.tabBarOffset, leaderboardFilter.windowWidth = a04,
|
||||
a05 = aY.g0.g1(1, Math.floor(.55 * a06)), a0U = Math.floor((b7.cv.fv() ? .67 : .72) * a0G), a07 = aY.g0.g1(0, a0U), a0A.font = a07, a0H = Math.floor(.04 * a04), a0I = Math.floor((b7.cv.fv() ? .195 : .18) * a04), a0B = Math.floor(a0A
|
||||
.measureText("00920600").width), a0A.font = a05, a0J = a04 - a0H, !cq) {
|
||||
a0A.font = a07;
|
||||
for (var eD = ed - 1; 0 <= eD; eD--) a0K[eD] = Math.floor(a0A.measureText(jm[eD]).width);
|
||||
a0Y()
|
||||
}
|
||||
}, this.zz = function() {
|
||||
return a04
|
||||
}, this.j6 = function(wm) {
|
||||
a0O && (wm || b3.iK() % a0V == 0) && (a0O = !1, a0Y())
|
||||
}, this.i6 = function() {
|
||||
! function() {
|
||||
for (var hZ = a0C - 1; 0 <= hZ; hZ--) 0 === h2[jG[hZ]] && ! function(hZ) {
|
||||
var a0o = jG[hZ];
|
||||
a0C--;
|
||||
for (var eD = hZ; eD < a0C; eD++) jG[eD] = jG[eD + 1], a03[jG[eD]] = eD;
|
||||
jG[a0C] = a0o, a03[jG[a0C]] = a0C
|
||||
}(hZ)
|
||||
}();
|
||||
for (var a0m, kM = a0C - 1, hZ = 0; hZ < kM; hZ++) ez[jG[hZ]] < ez[jG[hZ + 1]] && (a0m = jG[hZ], jG[hZ] = jG[hZ + 1], jG[hZ + 1] = a0m, a03[jG[hZ]] = hZ, a03[jG[hZ + 1]] = hZ + 1);
|
||||
! function() {
|
||||
for (var dZ = a0O, eh = (a0O = !0, a03[eU] >= a08 - 1 ? a08 - 2 : a08 - 1), eD = eh; 0 <= eD; eD--)
|
||||
if (a0M[eD] !== jG[eD] || a0N[eD] !== ez[jG[eD]]) return;
|
||||
(eh != a08 - 2 || a0M[a08] === a03[eU] && a0N[a08] === ez[eU]) && (a0O = dZ)
|
||||
}();
|
||||
for (var eD = a08 - 1; 0 <= eD; eD--) a0M[eD] = jG[eD], a0N[eD] = ez[jG[eD]];
|
||||
a0M[a08] = a03[eU], a0N[a08] = ez[eU]
|
||||
}, leaderboardFilter.scrollToTop = function() {
|
||||
position = 0;
|
||||
}, this.fQ = function(fI, fJ) {
|
||||
return !!vU(fI, fJ) && ((utils.isPointInRectangle(fI, fJ, b0.gap + 12, b0.gap + 12, a0F - 22, a0F - 22) && playerList.display(jm), true) &&
|
||||
!(fJ - b0.gap > leaderboardFilter.verticalClickThreshold && leaderboardFilter.handleMouseDown(fI - b0.gap)) && (a0Q = b3.dY, a0R = !0, a0S = a0T = a0q(fJ), ag.tQ() && (fI = yr(-1, a0T, a08), a0P !== (fI = fI === a08 ? -1 : fI)) &&
|
||||
(a0P = fI, a0Y(), b3.d1 = !0)), !0)
|
||||
}, leaderboardFilter.repaintLeaderboard = function() {
|
||||
a0Y(), b3.d1 = !0;
|
||||
},
|
||||
this.sk = function(fI, fJ) {
|
||||
if (utils.isPointInRectangle(fI, fJ, b0.gap + 12, b0.gap + 12, a0F - 22, a0F - 22)) {
|
||||
playerList.hoveringOverButton === false && (playerList.hoveringOverButton = true, a0Y(), b3.d1 = !0);
|
||||
} else {
|
||||
playerList.hoveringOverButton === true && (playerList.hoveringOverButton = false, a0Y(), b3.d1 = !0);
|
||||
}
|
||||
if (leaderboardFilter.setHovering(
|
||||
utils.isPointInRectangle(fI, fJ, b0.gap, b0.gap + leaderboardFilter.verticalClickThreshold, leaderboardFilter.windowWidth, leaderboardFilter.tabBarOffset), fI - b0.gap
|
||||
)) return;
|
||||
var dZ, a0p = a0q(fJ);
|
||||
return a0R ? (dZ = position, (position = yr(0, position += a0S - a0p, ed - a08)) !== dZ && (a0p = (a0p = yr(-1, a0S = a0p, a08)) !== a08 && vU(fI, fJ) ? a0p : -1, a0P = a0p, a0Y(), b3.d1 = !0), !0) : (a0p = (a0p = yr(-1, a0p, a08)) ===
|
||||
a08 || !vU(fI, fJ) || ag.tQ() ? -1 : a0p, a0P !== a0p && (a0P = a0p, a0Y(), b3.d1 = !0))
|
||||
}, this.tA = function(fI, fJ) {
|
||||
if (!a0R) return !1;
|
||||
a0R = !1;
|
||||
var a0p = a0q(fJ);
|
||||
var isEmptySpace = false;
|
||||
return ag.tQ() && -1 !== a0P && (a0P = -1, a0Y(), b3.d1 = !0), b3.dY - a0Q < 350 && a0T === a0p && -1 !== (a0p = (a0p = yr(-1, a0p, a08)) !== a08 && vU(fI, fJ) ? a0p : -1) && (fI = (leaderboardFilter.enabled ? jG[leaderboardFilter
|
||||
.filteredLeaderboard[a0p + position] ?? (isEmptySpace = true, a03[eU])] : jG[a0p + position]), a0p === a08 - 1 && (leaderboardFilter.enabled ? this.playerPos : a03[eU]) >=
|
||||
position + a08 - 1 && (fI = eU), !isEmptySpace && hM && donationsTracker.displayHistory(fI, jm, im), 0 !== h2[fI] && !isEmptySpace) && f.k7(fI, 800, !1, 0), !0
|
||||
}, this.sn = function(fI, fJ, deltaY) {
|
||||
var a0r;
|
||||
return !(a0R || k9 || (a0r = Math.max(Math.floor(Math.abs(deltaY) / 40), 1), !vU(fI, fJ)) || (fI = (fI = yr(-1, a0q(fJ), a08)) === a08 || ag.tQ() ? -1 : fI, 0 < deltaY ? position < ed - a08 && (position += Math.min(ed - a08 - position,
|
||||
a0r), a0P = fI, a0Y(), b3.d1 = !0) : 0 < position && (position -= Math.min(position, a0r), a0P = fI, a0Y(), b3.d1 = !0), 0))
|
||||
}, this.gD = function() {
|
||||
gE.drawImage(a09, b0.gap, b0.gap)
|
||||
}
|
||||
}, this.zz = function() {
|
||||
return a04
|
||||
}, this.j6 = function(wm) {
|
||||
a0O && (wm || b3.iK() % a0V == 0) && (a0O = !1, a0Y())
|
||||
}, this.i6 = function() {
|
||||
! function() {
|
||||
for (var hZ = a0C - 1; 0 <= hZ; hZ--) 0 === h2[jG[hZ]] && ! function(hZ) {
|
||||
var a0o = jG[hZ];
|
||||
a0C--;
|
||||
for (var eD = hZ; eD < a0C; eD++) jG[eD] = jG[eD + 1], a03[jG[eD]] = eD;
|
||||
jG[a0C] = a0o, a03[jG[a0C]] = a0C
|
||||
}(hZ)
|
||||
}();
|
||||
for (var a0m, kM = a0C - 1, hZ = 0; hZ < kM; hZ++) ez[jG[hZ]] < ez[jG[hZ + 1]] && (a0m = jG[hZ], jG[hZ] = jG[hZ + 1], jG[hZ + 1] = a0m, a03[jG[hZ]] = hZ, a03[jG[hZ + 1]] = hZ + 1);
|
||||
! function() {
|
||||
for (var dZ = a0O, eh = (a0O = !0, a03[eU] >= a08 - 1 ? a08 - 2 : a08 - 1), eD = eh; 0 <= eD; eD--)
|
||||
if (a0M[eD] !== jG[eD] || a0N[eD] !== ez[jG[eD]]) return;
|
||||
(eh != a08 - 2 || a0M[a08] === a03[eU] && a0N[a08] === ez[eU]) && (a0O = dZ)
|
||||
}();
|
||||
for (var eD = a08 - 1; 0 <= eD; eD--) a0M[eD] = jG[eD], a0N[eD] = ez[jG[eD]];
|
||||
a0M[a08] = a03[eU], a0N[a08] = ez[eU]
|
||||
}, this.fQ = function(fI, fJ) {
|
||||
return !!vU(fI, fJ) && (utils.isPointInRectangle(fI, fJ, b0.gap + 12, b0.gap + 12, a0F - 22, a0F - 22) && playerList.display(jm), true) && (a0Q = b3.dY, a0R = !0, a0S = a0T = a0q(fJ), ag.tQ() && (fI = yr(-1, a0T, a08), a0P !== (fI =
|
||||
fI === a08 ? -1 : fI)) && (a0P = fI, a0Y(), b3.d1 = !0), !0)
|
||||
}, this.sk = function(fI, fJ) {
|
||||
if (utils.isPointInRectangle(fI, fJ, b0.gap + 12, b0.gap + 12, a0F - 22, a0F - 22)) {
|
||||
playerList.hoveringOverButton === false && (playerList.hoveringOverButton = true, a0Y(), b3.d1 = !0);
|
||||
} else {
|
||||
playerList.hoveringOverButton === true && (playerList.hoveringOverButton = false, a0Y(), b3.d1 = !0);
|
||||
}
|
||||
var dZ, a0p = a0q(fJ);
|
||||
return a0R ? (dZ = position, (position = yr(0, position += a0S - a0p, ed - a08)) !== dZ && (a0p = (a0p = yr(-1, a0S = a0p, a08)) !== a08 && vU(fI, fJ) ? a0p : -1, a0P = a0p, a0Y(), b3.d1 = !0), !0) : (a0p = (a0p = yr(-1, a0p, a08)) ===
|
||||
a08 || !vU(fI, fJ) || ag.tQ() ? -1 : a0p, a0P !== a0p && (a0P = a0p, a0Y(), b3.d1 = !0))
|
||||
}, this.tA = function(fI, fJ) {
|
||||
if (!a0R) return !1;
|
||||
a0R = !1;
|
||||
var a0p = a0q(fJ);
|
||||
return ag.tQ() && -1 !== a0P && (a0P = -1, a0Y(), b3.d1 = !0), b3.dY - a0Q < 350 && a0T === a0p && -1 !== (a0p = (a0p = yr(-1, a0p, a08)) !== a08 && vU(fI, fJ) ? a0p : -1) && (fI = jG[a0p + position], a0p === a08 - 1 && a03[eU] >=
|
||||
position + a08 - 1 && (fI = eU), hM && donationsTracker.displayHistory(fI, jm, im), 0 !== h2[fI]) && f.k7(fI, 800, !1, 0), !0
|
||||
}, this.sn = function(fI, fJ, deltaY) {
|
||||
var a0r;
|
||||
return !(a0R || k9 || (a0r = Math.max(Math.floor(Math.abs(deltaY) / 40), 1), !vU(fI, fJ)) || (fI = (fI = yr(-1, a0q(fJ), a08)) === a08 || ag.tQ() ? -1 : fI, 0 < deltaY ? position < ed - a08 && (position += Math.min(ed - a08 - position,
|
||||
a0r), a0P = fI, a0Y(), b3.d1 = !0) : 0 < position && (position -= Math.min(position, a0r), a0P = fI, a0Y(), b3.d1 = !0), 0))
|
||||
}, this.gD = function() {
|
||||
gE.drawImage(a09, b0.gap, b0.gap)
|
||||
}
|
||||
}
|
||||
|
||||
function bf() {
|
||||
|
@ -5341,7 +5409,7 @@ function cD() {
|
|||
|
||||
function ug(qf) {
|
||||
jm = new Array(ed), a0X = new Array(ed), h2 = new Uint8Array(ed), hu = new Uint16Array(ed), hx = new Uint16Array(ed), ht = new Uint16Array(ed), hw = new Uint16Array(ed), ez = new Uint32Array(ed), qC = new Uint32Array(ed), eV = new Uint32Array(
|
||||
ed), donationsTracker.reset(), ea = new Array(ed), er = new Array(ed), es = new Array(ed), ev = new Array(ed), h3 = new Uint8Array(ed);
|
||||
ed), donationsTracker.reset(), leaderboardFilter.reset(), ea = new Array(ed), er = new Array(ed), es = new Array(ed), ev = new Array(ed), h3 = new Uint8Array(ed);
|
||||
for (let eD = qf.length - 1; 0 <= eD; eD--) jm[eD] = a0X[eD] = qf[eD].name, h3[eD] = qf[eD].a53
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
<meta itemprop="image" content="https://fxclient.github.io/FXclient/assets/logo.png">
|
||||
|
||||
<!-- FX Client CSS -->
|
||||
<link rel="stylesheet" href="main.css?1715596426779">
|
||||
<link rel="stylesheet" href="main.css?1716214185632">
|
||||
<!-- Game CSS -->
|
||||
<style>
|
||||
html,
|
||||
|
@ -121,8 +121,8 @@
|
|||
<p id="donationhistory_note">Note: donations from bots are not shown here</p>
|
||||
<table><tbody id="donationhistory_content"></tbody></table>
|
||||
</div>
|
||||
<script src="variables.js?1715596426779"></script>
|
||||
<script src="fx_core.js?1715596426779"></script>
|
||||
<script src="game.js?1715596426779"></script>
|
||||
<script src="variables.js?1716214185632"></script>
|
||||
<script src="fx_core.js?1716214185632"></script>
|
||||
<script src="game.js?1716214185632"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue