Add automatic error reporting
							parent
							
								
									998ecc3bd4
								
							
						
					
					
						commit
						ade2d45708
					
				|  | @ -2,6 +2,15 @@ import assets from '../assets.js'; | |||
| import ModUtils from '../modUtils.js'; | ||||
| 
 | ||||
| export default (/** @type {ModUtils} */ modUtils) => { | ||||
| 
 | ||||
|     // Disable built-in Territorial.io error reporting
 | ||||
|     modUtils.insertCode( | ||||
|         `window.removeEventListener("error", err);
 | ||||
|         msg = e.lineno + " " + e.colno + "|" + getStack(e); /* here */`,
 | ||||
|         `__fx.utils.reportError(e, msg);
 | ||||
|         return alert("Error:\\n" + e.filename + " " + e.lineno + " " + e.colno + " " + e.message);` | ||||
|     ) | ||||
| 
 | ||||
|     modUtils.waitForMinification(() => applyPatches(modUtils)) | ||||
| } | ||||
| //export const requiredVariables = ["game", "playerId", "playerData", "rawPlayerNames", "gIsSingleplayer", "playerTerritories"];
 | ||||
|  | @ -301,10 +310,6 @@ canvas.font=aY.g0.g1(1,fontSize),canvas.fillStyle="rgba("+gR+","+tD+","+hj+",0.6 | |||
|     replaceRawCode(`,this.hostnameIsValid=0<=window.location.hostname.toLowerCase().indexOf("territorial.io"),`, | ||||
|         `,this.hostnameIsValid=true,`) | ||||
| 
 | ||||
|     // Disable built-in Territorial.io error reporting
 | ||||
|     replaceOne(/window\.addEventListener\("error",function (\w+)\((\w+)\){/g, | ||||
|     '$& window.removeEventListener("error", $1); return alert("Error:\\n" + $2.filename + " " + $2.lineno + " " + $2.colno + " " + $2.message);'); | ||||
| 
 | ||||
|     console.log('Removing ads...'); | ||||
|     // Remove ads
 | ||||
|     replace('//api.adinplay.com/libs/aiptag/pub/TRT/territorial.io/tag.min.js', ''); | ||||
|  |  | |||
|  | @ -1,23 +1,43 @@ | |||
| import { getSettings } from "./settings.js"; | ||||
| import { getVar } from "./gameInterface.js"; | ||||
| 
 | ||||
| const utils = new (function() { | ||||
|     this.getMaxTroops = function(playerTerritories, playerID) { return (playerTerritories[playerID]*150).toString(); }; | ||||
|     this.getDensity = function(playerID, playerBalances = getVar("playerBalances"), playerTerritories = getVar("playerTerritories")) { | ||||
|         if (getSettings().densityDisplayStyle === "percentage") return (((playerBalances[playerID] / ((playerTerritories[playerID] === 0 ? 1 : playerTerritories[playerID]) * 150)) * 100).toFixed(1) + "%"); | ||||
|         else return (playerBalances[playerID] / (playerTerritories[playerID] === 0 ? 1 : playerTerritories[playerID])).toFixed(1); | ||||
|     }; | ||||
|     this.isPointInRectangle = function(x, y, rectangleStartX, rectangleStartY, width, height) { | ||||
|         return x >= rectangleStartX && x <= rectangleStartX + width && y >= rectangleStartY && y <= rectangleStartY + height; | ||||
|     }; | ||||
|     /** @param {CanvasRenderingContext2D} canvas @param {string} text */ | ||||
|     this.fillTextMultiline = function(canvas, text, x, y, maxWidth) { | ||||
|         const lineHeight = parseInt(canvas.font.split(" ").find(part => part.endsWith("px")).slice(0, -2)); | ||||
|         text.split("\n").forEach((line, index) => canvas.fillText(line, x, y + index * lineHeight, maxWidth)); | ||||
|     } | ||||
|     this.textStyleBasedOnDensity = function(playerID) { | ||||
|         const playerBalances = getVar("playerBalances"), playerTerritories = getVar("playerTerritories"); | ||||
|         return `hsl(${playerBalances[playerID] / (playerTerritories[playerID] * 1.5)}, 100%, 50%, 1)`; | ||||
|     } | ||||
| }); | ||||
| export default utils | ||||
| // Example usage from game script: __fx.utils.getMaxTroops(...)
 | ||||
| 
 | ||||
| function getMaxTroops(playerTerritories, playerID) { | ||||
|     return (playerTerritories[playerID] * 150).toString(); | ||||
| }; | ||||
| function getDensity(playerID, playerBalances = getVar("playerBalances"), playerTerritories = getVar("playerTerritories")) { | ||||
|     if (getSettings().densityDisplayStyle === "percentage") return (((playerBalances[playerID] / ((playerTerritories[playerID] === 0 ? 1 : playerTerritories[playerID]) * 150)) * 100).toFixed(1) + "%"); | ||||
|     else return (playerBalances[playerID] / (playerTerritories[playerID] === 0 ? 1 : playerTerritories[playerID])).toFixed(1); | ||||
| }; | ||||
| function isPointInRectangle(x, y, rectangleStartX, rectangleStartY, width, height) { | ||||
|     return x >= rectangleStartX && x <= rectangleStartX + width && y >= rectangleStartY && y <= rectangleStartY + height; | ||||
| }; | ||||
| /** @param {CanvasRenderingContext2D} canvas @param {string} text */ | ||||
| function fillTextMultiline(canvas, text, x, y, maxWidth) { | ||||
|     const lineHeight = parseInt(canvas.font.split(" ").find(part => part.endsWith("px")).slice(0, -2)); | ||||
|     text.split("\n").forEach((line, index) => canvas.fillText(line, x, y + index * lineHeight, maxWidth)); | ||||
| } | ||||
| function textStyleBasedOnDensity(playerID) { | ||||
|     const playerBalances = getVar("playerBalances"), playerTerritories = getVar("playerTerritories"); | ||||
|     return `hsl(${playerBalances[playerID] / (playerTerritories[playerID] * 1.5)}, 100%, 50%, 1)`; | ||||
| } | ||||
| function reportError(e, message) { | ||||
|     message = e.filename + " " + e.lineno + " " + e.colno + " " + e.message + "\n" + message; | ||||
|     fetch("https://fx.peshomir.workers.dev/stats/errors", { | ||||
|         body: JSON.stringify({ | ||||
|             message, | ||||
|             context: { | ||||
|                 swState: navigator.serviceWorker?.controller?.state, | ||||
|                 location: window.location.toString(), | ||||
|                 userAgent: navigator.userAgent, | ||||
|                 dictionary, | ||||
|                 buildTimestamp, | ||||
|                 scripts: Array.from(document.scripts).map(s => s.src) | ||||
|             } | ||||
|         }), | ||||
|         method: "POST" | ||||
|     }).catch(e => alert("Failed to report error: " + e)); | ||||
| } | ||||
| 
 | ||||
| export default { getMaxTroops, getDensity, isPointInRectangle, fillTextMultiline, textStyleBasedOnDensity, reportError } | ||||
		Loading…
	
		Reference in New Issue