MAp management and helpers
This commit is contained in:
+72
-10
@@ -6,6 +6,8 @@
|
||||
*/
|
||||
|
||||
import { SectorMapApp } from './SectorMapApp.js';
|
||||
import { postWorldCardToChat } from './worldCard.js';
|
||||
import { CommerceDialog } from './CommerceDialog.js';
|
||||
|
||||
const MODULE_ID = 'mgt2-compendium-amiral-denisov';
|
||||
const ChatLogV2 = foundry.applications?.sidebar?.tabs?.ChatLog;
|
||||
@@ -23,15 +25,11 @@ async function handleSectorCommand(sector, subsector) {
|
||||
if (_pendingHandle) return;
|
||||
_pendingHandle = true;
|
||||
try {
|
||||
if (!sector?.trim()) {
|
||||
ui.notifications.warn('Usage : /sector <nom du secteur> (ex: /sector "Spinward Marches")');
|
||||
return;
|
||||
}
|
||||
if (!game.user?.isGM) {
|
||||
ui.notifications.error('Seul le MJ peut utiliser cette commande');
|
||||
return;
|
||||
}
|
||||
await openMap(sector.trim());
|
||||
await openMap(sector?.trim());
|
||||
} catch (err) {
|
||||
console.error(`${MODULE_ID} | Erreur /sector :`, err);
|
||||
ui.notifications.error(`Erreur : ${err.message}`);
|
||||
@@ -40,6 +38,14 @@ async function handleSectorCommand(sector, subsector) {
|
||||
}
|
||||
}
|
||||
|
||||
async function handleSystemCommand(sector, hex) {
|
||||
if (!sector || !hex) {
|
||||
ui.notifications.warn('Usage : /system <secteur> <hex> (ex: /system "Spinward Marches" 1910)');
|
||||
return;
|
||||
}
|
||||
await postWorldCardToChat(sector, hex);
|
||||
}
|
||||
|
||||
async function handleSubsectorCommand(raw) {
|
||||
if (_pendingHandle) return;
|
||||
_pendingHandle = true;
|
||||
@@ -75,11 +81,8 @@ if (ChatLogV2?.CHAT_COMMANDS) {
|
||||
rgx: /^\/sector(?:\s+(.*))?$/i,
|
||||
fn: function() {
|
||||
const raw = arguments[1]?.[1]?.trim?.();
|
||||
if (raw) {
|
||||
handleSectorCommand(raw);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
handleSectorCommand(raw || undefined);
|
||||
return false;
|
||||
},
|
||||
};
|
||||
console.log(`${MODULE_ID} | Commande /sector enregistrée`);
|
||||
@@ -96,6 +99,20 @@ if (ChatLogV2?.CHAT_COMMANDS) {
|
||||
},
|
||||
};
|
||||
console.log(`${MODULE_ID} | Commande /subsector enregistrée`);
|
||||
|
||||
ChatLogV2.CHAT_COMMANDS['system'] = {
|
||||
rgx: /^\/system\s+(.+?)\s+(\d{4})\s*$/i,
|
||||
fn: function() {
|
||||
const sector = arguments[1]?.[1]?.trim?.();
|
||||
const hex = arguments[1]?.[2]?.trim?.();
|
||||
if (sector && hex) {
|
||||
handleSystemCommand(sector, hex);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
};
|
||||
console.log(`${MODULE_ID} | Commande /system enregistrée`);
|
||||
}
|
||||
|
||||
/* ───── Hooks de secours (v13 / fallback v14) ───── */
|
||||
@@ -114,6 +131,12 @@ Hooks.on('preCreateChatMessage', (message, data, options) => {
|
||||
handleSubsectorCommand(m[1]?.trim());
|
||||
return false;
|
||||
}
|
||||
|
||||
m = c?.match(/^\/system\s+(.+?)\s+(\d{4})\s*$/i);
|
||||
if (m) {
|
||||
handleSystemCommand(m[1]?.trim(), m[2]?.trim());
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
/* ───── Socket (synchronisation MJ → joueurs) ───── */
|
||||
@@ -124,6 +147,39 @@ Hooks.once('ready', () => {
|
||||
if (game.user?.isGM) return;
|
||||
openMap(data.sector, data.subsector);
|
||||
});
|
||||
|
||||
// Clics sur les liens de monde dans les journals de trajet
|
||||
document.addEventListener('click', (event) => {
|
||||
const link = event.target.closest('.mgt2-world-link');
|
||||
if (!link) return;
|
||||
event.preventDefault();
|
||||
const sector = link.dataset.sector;
|
||||
const hex = link.dataset.hex;
|
||||
if (sector && hex) {
|
||||
handleSystemCommand(sector, hex);
|
||||
}
|
||||
});
|
||||
|
||||
// Clics sur le bouton Commerce dans les cartes de monde
|
||||
document.addEventListener('click', (event) => {
|
||||
const btn = event.target.closest('.mgt2-world-commerce');
|
||||
if (!btn) return;
|
||||
event.preventDefault();
|
||||
const uwp = btn.dataset.uwp;
|
||||
const zone = btn.dataset.zone;
|
||||
const name = btn.dataset.name;
|
||||
const sector = btn.dataset.sector;
|
||||
const hex = btn.dataset.hex;
|
||||
if (uwp) {
|
||||
const existing = Object.values(ui.windows).find(w => w.id === 'mgt2-commerce');
|
||||
if (existing) { existing.bringToTop(); return; }
|
||||
const dialog = new CommerceDialog({
|
||||
defaultWorld: { uwp, zone, name, sector, hex },
|
||||
initialTab: 'trade',
|
||||
});
|
||||
dialog.render({ force: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Hooks.on('chatMessage', (...args) => {
|
||||
@@ -143,4 +199,10 @@ Hooks.on('chatMessage', (...args) => {
|
||||
handleSubsectorCommand(m[1]?.trim());
|
||||
return false;
|
||||
}
|
||||
|
||||
m = msg?.trim()?.match(/^\/system\s+(.+?)\s+(\d{4})\s*$/i);
|
||||
if (m) {
|
||||
handleSystemCommand(m[1]?.trim(), m[2]?.trim());
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user