From 140700251ddbab68854f074eecfc6ef6c3b1e86c Mon Sep 17 00:00:00 2001 From: BinarySandia04 Date: Mon, 21 Oct 2024 19:36:34 +0200 Subject: [PATCH] Stability changes --- backend/routes/campaign.js | 2 ++ backend/services/api.js | 6 ++-- client/src/main.js | 29 ++---------------- client/src/services/Api.js | 6 ++-- client/src/services/Game.js | 2 +- client/src/services/i18n.js | 30 +++++++++++++++++++ client/src/views/partials/SystemSelector.vue | 5 ++-- .../windows/campaigns/NewCampaignWindow.vue | 12 +------- plugins/dnd-5e/backend/main.js | 10 +++++-- plugins/dnd-5e/client/main.js | 2 +- plugins/dnd-5e/client/views/Database.vue | 6 ++-- plugins/dnd-5e/client/views/ItemSheet.vue | 19 +++++------- .../data/item/weapons/test_weapon.json | 14 ++++----- .../dnd-5e/datagen/dnd-5e-base/datagen.json | 3 +- plugins/dnd-5e/plugin.json | 3 +- 15 files changed, 75 insertions(+), 74 deletions(-) create mode 100644 client/src/services/i18n.js diff --git a/backend/routes/campaign.js b/backend/routes/campaign.js index a9001206..deb09467 100644 --- a/backend/routes/campaign.js +++ b/backend/routes/campaign.js @@ -17,6 +17,8 @@ router.post('/create', (req, res) => { name, system } = req.body; + console.log(name) + console.log(system) if(!(name && system)){ res.json({ diff --git a/backend/services/api.js b/backend/services/api.js index 698aae4b..739b37e1 100644 --- a/backend/services/api.js +++ b/backend/services/api.js @@ -151,7 +151,7 @@ class BackendModule { // scope => ['campaign'] // coses que es necessiten verificar a tots els models // i s'agafa de req.query - createModelRoutes(model, scope = []){ + createModelRoutes(model, scope = ['campaign']){ this.router.get(`/${model.name}/list`, (req, res) => { let query = {} scope.forEach(k => query[k] = req.query[k]); @@ -183,7 +183,7 @@ class BackendModule { scope.forEach(k => query[k] = req.query[k]); query['_id'] = req.query.id; model.findOneAndUpdate(query, req.body.data).then(data => { - if(req.query.fireUpdate) this.socket.emit(query['campaign'], `update-${model.name}-all`); + this.socket.emit(query['campaign'], `update-${model.name}-all`); this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id); res.json({status: 'ok'}); }) @@ -194,7 +194,7 @@ class BackendModule { scope.forEach(k => query[k] = req.query[k]); query['_id'] = req.query.id; model.deleteOne(query).then(data => { - if(req.query.fireUpdate) this.socket.emit(query['campaign'], `update-${model.name}-all`); + this.socket.emit(query['campaign'], `update-${model.name}-all`); this.socket.emit(query['campaign'], `update-${model.name}`, req.query.id); res.json({status: 'ok'}); }); diff --git a/client/src/main.js b/client/src/main.js index f31d5fd2..1337e99f 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -2,12 +2,12 @@ import './assets/main.css' import './assets/prism.css' import { createApp, defineComponent, reactive } from 'vue' -import { createI18n } from 'vue-i18n' +import i18n from '@/services/i18n' + import App from './App.vue' import router from './router' import mitt from 'mitt'; -import { GetUser, GetUserSetting, LogoutUser } from './services/User' const emitter = mitt(); const app = createApp(App); @@ -24,31 +24,6 @@ app.config.globalProperties.rollWindows = { console.clear(); console.log("%cLoaded!!!", "color: #22ff22; font-size: 24px"); -// Determinem el locale -let locale = 'en-US'; - -let supportedLocales = ['en-US', 'es-ES', 'ca']; -let navLocale = window.navigator.language; - -if(supportedLocales.includes(navLocale)) locale = navLocale; - -try { - if(GetUser()) locale = await GetUserSetting('lang'); -} catch(ex) { - LogoutUser(); -} - -const i18n = createI18n({ - legacy: false, - locale, - fallbackLocale: 'en-US', - messages: { - 'en-US': (await import(`./locales/en-US.json`)).default, - 'es-ES': (await import(`./locales/es-ES.json`)).default, - 'ca': (await import(`./locales/ca.json`)).default, - } -}); - app.use(router) app.use(i18n); diff --git a/client/src/services/Api.js b/client/src/services/Api.js index 710b2bca..610f3e84 100644 --- a/client/src/services/Api.js +++ b/client/src/services/Api.js @@ -8,8 +8,9 @@ import * as _Tooltip from "@/services/Tooltip" import * as _Windows from "@/services/Windows" import Server from '@/services/Server'; import { socket } from '@/services/Socket'; -const { t } = useI18n() +import i18n from '@/services/i18n' +const { t } = i18n.global /** * Class for managing the client api * @hideconstructor @@ -175,7 +176,8 @@ class ClientModule { this.#_previewData = data; } - set onInit(init){ this.#_init = (campaign) => { + set onInit(init){ + this.#_init = (campaign) => { this.#_campaign = campaign; this.#_router._setParam("campaign", campaign._id); init(); diff --git a/client/src/services/Game.js b/client/src/services/Game.js index 052eaf80..bd27adf6 100644 --- a/client/src/services/Game.js +++ b/client/src/services/Game.js @@ -12,7 +12,7 @@ function LaunchGame(){ function ExitGame(){ inGameRef.value = false; - GetCampaignModule().exit(); + if(GetCampaignModule().exit) GetCampaignModule().exit(); } export { diff --git a/client/src/services/i18n.js b/client/src/services/i18n.js new file mode 100644 index 00000000..715ec0f3 --- /dev/null +++ b/client/src/services/i18n.js @@ -0,0 +1,30 @@ +import { createI18n } from 'vue-i18n' + +import { GetUser, GetUserSetting, LogoutUser } from '@/services/User' + +// Determinem el locale +let locale = 'en-US'; + +let supportedLocales = ['en-US', 'es-ES', 'ca']; +let navLocale = window.navigator.language; + +if(supportedLocales.includes(navLocale)) locale = navLocale; + +try { + if(GetUser()) locale = await GetUserSetting('lang'); +} catch(ex) { + LogoutUser(); +} + +const i18n = createI18n({ + legacy: false, + locale, + fallbackLocale: 'en-US', + messages: { + 'en-US': (await import(`../locales/en-US.json`)).default, + 'es-ES': (await import(`../locales/es-ES.json`)).default, + 'ca': (await import(`../locales/ca.json`)).default, + } +}); + +export default i18n; \ No newline at end of file diff --git a/client/src/views/partials/SystemSelector.vue b/client/src/views/partials/SystemSelector.vue index 866ddbaa..57b34d7d 100644 --- a/client/src/views/partials/SystemSelector.vue +++ b/client/src/views/partials/SystemSelector.vue @@ -14,9 +14,10 @@ let windowId = props.windowId; function DisplaySystemSelector(){ CreateChildWindow(windowId, 'system_selector', {'done': (data) => { let module = GetModule(data.selected); + console.log(module); selectedSystem.value = data.selected; - selectedImage.value.src = `modules/${module.id}/icon.png`; - systemTitle.value = module.title; + selectedImage.value.src = `plugins/${module.id}/icon.png`; + systemTitle.value = module.previewData.title; ClearWindow('system-selector'); }}); } diff --git a/client/src/views/windows/campaigns/NewCampaignWindow.vue b/client/src/views/windows/campaigns/NewCampaignWindow.vue index 839fb69b..0d50a354 100644 --- a/client/src/views/windows/campaigns/NewCampaignWindow.vue +++ b/client/src/views/windows/campaigns/NewCampaignWindow.vue @@ -26,23 +26,13 @@ onMounted(() => { SetupHandle(id, handle); SetSize(id, {width: 350, height: 240}); ResetPosition(id, "center"); - GetEmitter().on('select', (system_id) => Select(system_id)) - - console.log(system); }); -function Select(system_id){ - system = system_id; - try { - systemSelector.value.selectedSystem = system_id; - } catch {} -} - function NewCampaign(){ Server().post('/campaign/create', { name: campaignName.value, - system + system: systemSelector.value.selectedSystem }).then((response) => { if(response.data.status == "error"){ errorMessage.value = response.data.msg; diff --git a/plugins/dnd-5e/backend/main.js b/plugins/dnd-5e/backend/main.js index c6fb5f4a..6c4bec85 100644 --- a/plugins/dnd-5e/backend/main.js +++ b/plugins/dnd-5e/backend/main.js @@ -10,10 +10,14 @@ function Main(api){ let itemModel = Api.createModel("item", { name: { type: "String", required: true, default: "New item"}, + description: { type: "String", default: "New description" }, type: { type: "String", required: true, default: "Item" }, - info: { type: "Object" }, // For preview only - data: { type: "Object" }, // Advanced item - book: { type: "ObjectId", ref: "Book"} + icon: { type: "String" }, + rarity: { type: "String", default: "" }, + quantity: { type: "Number", default: "1" }, + weight: { type: "Number", default: "0" }, + price: { type: "Number", default: "0" }, + data: { type: "Object" }, // Advanced properties depending on item type }); let entityDataModel = Api.createModel('entitydata', { diff --git a/plugins/dnd-5e/client/main.js b/plugins/dnd-5e/client/main.js index f311c2be..c8fe124c 100644 --- a/plugins/dnd-5e/client/main.js +++ b/plugins/dnd-5e/client/main.js @@ -58,7 +58,7 @@ function Main(Api){ }); - dndModule.socket.on('update-concepts', () => { + dndModule.socket.on('update-item-all', () => { FetchConcepts(); }); diff --git a/plugins/dnd-5e/client/views/Database.vue b/plugins/dnd-5e/client/views/Database.vue index a7faf147..0e79c105 100644 --- a/plugins/dnd-5e/client/views/Database.vue +++ b/plugins/dnd-5e/client/views/Database.vue @@ -75,18 +75,18 @@ function ElementContext(element){ } function ElementTooltip(element){ - let descHtml = GetKey(element, 'info.description'); + let descHtml = GetKey(element, 'description'); if(descHtml) descHtml = marked.parse(descHtml); else descHtml = ''; return `

${element.name}

- +
${descHtml}
`; } function ElementIcon(element){ - return GetKey(element, "info.icon") ? GetKey(element, "info.icon") : 'icons/game-icons/ffffff/lorc/crossed-swords.svg' + return GetKey(element, "icon") ? GetKey(element, "icon") : 'icons/game-icons/ffffff/lorc/crossed-swords.svg' } diff --git a/plugins/dnd-5e/client/views/ItemSheet.vue b/plugins/dnd-5e/client/views/ItemSheet.vue index ee20152f..5c2de3ff 100644 --- a/plugins/dnd-5e/client/views/ItemSheet.vue +++ b/plugins/dnd-5e/client/views/ItemSheet.vue @@ -75,18 +75,13 @@ let oldInfo; function Upload(){ let params = {id: concept.value._id}; - if(oldInfo != concept.value.info){ - params['fireUpdate'] = true; - oldInfo = structuredClone(concept.value.info); - } - dndModule.router.put('/item/update', params, {data: concept.value}).then(response => { // console.log(response); }); } function SetParam(param, value){ - SetKey(concept.value, `info.${param}`, value); + SetKey(concept.value, `${param}`, value); Upload(); } @@ -106,14 +101,14 @@ function InitValues(){ let rarities = GenRarities(); let weapon_types = GenTypes(["", "Melee", "Ranged", "Martial Melee", "Martial Ranged", "Natural", "Improvised", "Siege Weapon"]); - icon_selector.value.icon = GetKey(concept.value, "info.icon"); - rarity.value.innerHTML = `${GetKey(concept.value, "info.rarity")}`; + icon_selector.value.icon = GetKey(concept.value, "icon"); + rarity.value.innerHTML = `${GetKey(concept.value, "rarity")}`; weaponType.value.innerHTML = `${GetKey(concept.value, "info.weapon_type")}`; - description.value.text = GetKey(concept.value, "info.description"); + description.value.text = GetKey(concept.value, "description"); properties.value.selected = GetKey(concept.value, "info.properties"); - quantity.value.Set(GetKey(concept.value, "info.quantity")); - weight.value.Set(GetKey(concept.value, "info.weight")); - price.value.Set(GetKey(concept.value, "info.price")); + quantity.value.Set(GetKey(concept.value, "quantity")); + weight.value.Set(GetKey(concept.value, "weight")); + price.value.Set(GetKey(concept.value, "price")); item_type_name.value = GetKey(concept.value, "type"); item_name.value.innerHTML = GetKey(concept.value, "name"); diff --git a/plugins/dnd-5e/datagen/dnd-5e-base/data/item/weapons/test_weapon.json b/plugins/dnd-5e/datagen/dnd-5e-base/data/item/weapons/test_weapon.json index d58f1184..c9844fec 100644 --- a/plugins/dnd-5e/datagen/dnd-5e-base/data/item/weapons/test_weapon.json +++ b/plugins/dnd-5e/datagen/dnd-5e-base/data/item/weapons/test_weapon.json @@ -2,15 +2,15 @@ "id": "weapon/test_weapon", "value": { "name": "Test datagen weapon", + "description": "Test test test", + "icon": "icons/weapons/ammunition/shot-round-blue.webp", "type": "Weapon", - "data": {}, - "info": { - "icon": "icons/weapons/ammunition/shot-round-blue.webp", + "rarity": "Rare", + "quantity": "1", + "weight": "10", + "price": "10", + "data": { "weapon_type": "Natural", - "rarity": "Rare", - "quantity": "1", - "weight": "10", - "price": "10", "properties": [ "Finesse" ] diff --git a/plugins/dnd-5e/datagen/dnd-5e-base/datagen.json b/plugins/dnd-5e/datagen/dnd-5e-base/datagen.json index df33d593..07b66302 100644 --- a/plugins/dnd-5e/datagen/dnd-5e-base/datagen.json +++ b/plugins/dnd-5e/datagen/dnd-5e-base/datagen.json @@ -2,5 +2,6 @@ "package": "dnd-5e", "id": "dnd-5e-base", "name": "info.name", - "desc": "info.description" + "desc": "info.description", + "dependencies": [] } \ No newline at end of file diff --git a/plugins/dnd-5e/plugin.json b/plugins/dnd-5e/plugin.json index 9c22c6de..3f54fc27 100644 --- a/plugins/dnd-5e/plugin.json +++ b/plugins/dnd-5e/plugin.json @@ -22,5 +22,6 @@ "desc": "module.desc", "icon": "icon.png" } - ] + ], + "dependencies": [] } \ No newline at end of file