From 0a7b920bb5cb246a32c6fe30a35415388c02ef02 Mon Sep 17 00:00:00 2001 From: FragginWagon Date: Wed, 28 Jan 2026 19:07:35 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20function=20to=20categorize=20?= =?UTF-8?q?gamemaster=20data=20into=20Pok=C3=A9mon,=20forms,=20and=20moves?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pokedex.online/server/gamemaster-api.js | 67 +++++++++++++++++++ .../src/views/GamemasterManager.vue | 14 ++-- 2 files changed, 73 insertions(+), 8 deletions(-) diff --git a/code/websites/pokedex.online/server/gamemaster-api.js b/code/websites/pokedex.online/server/gamemaster-api.js index d4e5c44..24c88e3 100644 --- a/code/websites/pokedex.online/server/gamemaster-api.js +++ b/code/websites/pokedex.online/server/gamemaster-api.js @@ -85,6 +85,73 @@ function loadFile(filename) { return JSON.parse(content); } +/** + * Break up gamemaster into separate categories + * @param {Array} gamemaster - Full gamemaster data + * @returns {Object} Separated data {pokemon, pokemonAllForms, moves} + */ +function breakUpGamemaster(gamemaster) { + const regionCheck = ['alola', 'galarian', 'hisuian', 'paldea']; + + const result = gamemaster.reduce( + (acc, item) => { + const templateId = item.templateId; + + // POKEMON FILTER + if ( + templateId.startsWith('V') && + templateId.toLowerCase().includes('pokemon') + ) { + const pokemonSettings = item.data?.pokemonSettings; + const pokemonId = pokemonSettings?.pokemonId; + + acc.pokemonAllForms.push(item); + + const form = pokemonSettings?.form; + const isRegionalForm = + form && typeof form === 'string' + ? regionCheck.includes(form.split('_')[1]?.toLowerCase()) + : false; + + if ( + !acc.pokemonSeen.has(pokemonId) || + (acc.pokemonSeen.has(pokemonId) && isRegionalForm) + ) { + acc.pokemonSeen.add(pokemonId); + acc.pokemon.push(item); + } + } + + // POKEMON MOVE FILTER + if ( + templateId.startsWith('V') && + templateId.toLowerCase().includes('move') + ) { + const moveSettings = item.data?.moveSettings; + const moveId = moveSettings?.movementId; + if (!acc.moveSeen.has(moveId)) { + acc.moveSeen.add(moveId); + acc.moves.push(item); + } + } + + return acc; + }, + { + pokemon: [], + pokemonAllForms: [], + moves: [], + pokemonSeen: new Set(), + moveSeen: new Set() + } + ); + + delete result.pokemonSeen; + delete result.moveSeen; + + return result; +} + // ============================================================================ // ROUTES // ============================================================================ diff --git a/code/websites/pokedex.online/src/views/GamemasterManager.vue b/code/websites/pokedex.online/src/views/GamemasterManager.vue index 07c5a7d..a0c12c1 100644 --- a/code/websites/pokedex.online/src/views/GamemasterManager.vue +++ b/code/websites/pokedex.online/src/views/GamemasterManager.vue @@ -257,17 +257,12 @@ async function saveToServer() { error.value = null; try { - const response = await fetch('/api/gamemaster/save', { + // Call the server endpoint to fetch and process on the server + const response = await fetch('/api/gamemaster/process', { method: 'POST', headers: { 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - pokemon: processedData.value.pokemon, - pokemonAllForms: processedData.value.pokemonAllForms, - moves: processedData.value.moves, - raw: rawGamemaster.value - }) + } }); if (!response.ok) { @@ -275,7 +270,10 @@ async function saveToServer() { throw new Error(err.error || 'Failed to save to server'); } + const result = await response.json(); saveSuccess.value = true; + console.log('✅ Files saved to server:', result); + // Reload server status await loadServerStatus(); } catch (err) {