diff --git a/src/DarkNet/effects/cacheFiles.ts b/src/DarkNet/effects/cacheFiles.ts index 2f032a518..f067b74c6 100644 --- a/src/DarkNet/effects/cacheFiles.ts +++ b/src/DarkNet/effects/cacheFiles.ts @@ -25,6 +25,9 @@ export const addCacheToServer = (server: DarknetServer, isPhishingCache: boolean if (!cacheFilename) { return { success: false, message: `Cannot generate path. prefix: ${prefix}` }; } + if (server.caches.includes(cacheFilename)) { + return { success: false, message: `Duplicate cache file: ${cacheFilename}` }; + } server.caches.push(cacheFilename); return { success: true, cacheFilename }; }; diff --git a/src/DarkNet/effects/effects.ts b/src/DarkNet/effects/effects.ts index 72bbc77fe..dd9878d22 100644 --- a/src/DarkNet/effects/effects.ts +++ b/src/DarkNet/effects/effects.ts @@ -125,7 +125,7 @@ export const addClue = (server: DarknetServer) => { // Basic mechanics hints if ((Math.random() < 0.7 && server.difficulty <= 3) || Math.random() < 0.1) { const hint: LiteratureName = hintLiterature[Math.floor(Math.random() * hintLiterature.length)]; - if (hint) { + if (hint && !server.messages.includes(hint)) { server.messages.push(hint); } } diff --git a/src/Server/BaseServer.ts b/src/Server/BaseServer.ts index eb21907c8..148d703fc 100644 --- a/src/Server/BaseServer.ts +++ b/src/Server/BaseServer.ts @@ -322,6 +322,12 @@ export abstract class BaseServer implements IServer { if (value.data.runningScripts != null && Array.isArray(value.data.runningScripts)) { server.savedScripts = value.data.runningScripts; } + // Remove duplicate .lit and .msg files. + const messageSet = new Set(server.messages); + if (messageSet.size !== server.messages.length) { + console.warn("Found duplicate messages in ", server.messages); + server.messages = [...messageSet]; + } // If textFiles is not an array, we've already done the 2.3 migration to textFiles and scripts as maps + path changes. if (!Array.isArray(server.textFiles)) return server; diff --git a/src/Server/DarknetServer.ts b/src/Server/DarknetServer.ts index 970801e86..cc5fa751b 100644 --- a/src/Server/DarknetServer.ts +++ b/src/Server/DarknetServer.ts @@ -89,7 +89,14 @@ export class DarknetServer extends BaseServer implements DarknetServerData { } static fromJSON(value: IReviverValue): DarknetServer { - return BaseServer.fromJSONBase(value, DarknetServer, includedKeys); + const server = BaseServer.fromJSONBase(value, DarknetServer, includedKeys); + // Remove duplicate .cache files. + const cacheSet = new Set(server.caches); + if (cacheSet.size !== server.caches.length) { + console.warn("Found duplicate cache files in ", server.caches); + server.caches = [...cacheSet]; + } + return server; } }