Add safeDictionary (proxy of the disctionary object, throws an error when accessing undefined properties)
							parent
							
								
									7bda5b9c51
								
							
						
					
					
						commit
						b5da526ac4
					
				|  | @ -24,6 +24,13 @@ class ModUtils { | |||
|     script = ""; | ||||
|     /** @type {{[key: string]: string}} */ | ||||
|     dictionary = {}; | ||||
|     safeDictionary = new Proxy(this.dictionary, { | ||||
|         get(target, prop) { | ||||
|             if (typeof prop === 'symbol') prop = prop.toString(); | ||||
|             if (prop in target) return target[prop]; | ||||
|             throw new Error(`Property ${prop} is not defined in dictionary`); | ||||
|         } | ||||
|     }); | ||||
|     /** @type {Function[]} */ | ||||
|     postMinifyHandlers = []; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import ModUtils from '../modUtils.js'; | ||||
| 
 | ||||
| // Custom lobby patches
 | ||||
| export default (/** @type {ModUtils} */ { insertCode, replaceCode, replaceRawCode, dictionary: dict, waitForMinification }) => { | ||||
| export default (/** @type {ModUtils} */ { insertCode, replaceCode, replaceRawCode, safeDictionary: dict, waitForMinification }) => { | ||||
|      | ||||
|     // set player id correctly
 | ||||
|     insertCode(`function aBG(aBE) {
 | ||||
|  |  | |||
|  | @ -6,10 +6,10 @@ export default (/** @type {ModUtils} */ modUtils) => { | |||
| } | ||||
| //export const requiredVariables = ["game", "playerId", "playerData", "rawPlayerNames", "gIsSingleplayer", "playerTerritories"];
 | ||||
| 
 | ||||
| function applyPatches(/** @type {ModUtils} */ { replace, replaceOne, replaceRawCode, dictionary, matchOne, matchRawCode, escapeRegExp }) { | ||||
| function applyPatches(/** @type {ModUtils} */ { replace, replaceOne, replaceRawCode, safeDictionary, matchOne, matchRawCode, escapeRegExp }) { | ||||
| 
 | ||||
|     // Constants for easy usage of otherwise long variable access expressions
 | ||||
|     const dict = dictionary; | ||||
|     const dict = safeDictionary; | ||||
|     const playerId = `${dict.game}.${dict.playerId}`; | ||||
|     const rawPlayerNames = `${dict.playerData}.${dict.rawPlayerNames}`; | ||||
|     const gIsSingleplayer = `${dict.game}.${dict.gIsSingleplayer}`; | ||||
|  | @ -153,7 +153,7 @@ canvas.font=aY.g0.g1(1,fontSize),canvas.fillStyle="rgba("+gR+","+tD+","+hj+",0.6 | |||
| 
 | ||||
|     { // Player list and leaderboard filter tabs
 | ||||
|         // Draw player list button
 | ||||
|         const uiOffset = dictionary.uiSizes + "." + dictionary.gap; | ||||
|         const uiOffset = dict.uiSizes + "." + dict.gap; | ||||
|         const { groups: { drawFunction, topBarHeight } } = replaceOne(/(="";function (?<drawFunction>\w+)\(\){[^}]+?(?<canvas>\w+)\.fillRect\(0,(?<topBarHeight>\w+),\w+,1\),(?:\3\.fillRect\([^()]+\),)+\3\.font=\w+,(\w+\.\w+)\.textBaseline\(\3,1\),\5\.textAlign\(\3,1\),\3\.fillText\(\w+,Math\.floor\()(\w+)\/2\),(Math\.floor\(\w+\+\w+\/2\)\));/g, | ||||
|             "$1($6 + $<topBarHeight> - 22) / 2), $7; __fx.playerList.drawButton($<canvas>, 12, 12, $<topBarHeight> - 22);"); | ||||
|         const buttonBoundsCheck = `__fx.utils.isPointInRectangle($<x>, $<y>, ${uiOffset} + 12, ${uiOffset} + 12, ${topBarHeight} - 22, ${topBarHeight} - 22)` | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue