initialize Ikonis system module with motherboard configuration and feature management UI
This commit is contained in:
commit
7bffeacaac
16 changed files with 1008 additions and 0 deletions
61
scripts/ikonis-data.js
Normal file
61
scripts/ikonis-data.js
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
export const DEFAULT_AUGMENTS = [
|
||||
{ id: "force", name: "Kinetic Amplifier", effect: "+1 Damage on Melee attacks", cost: "2 Iron", precompile: 1 },
|
||||
{ id: "fire", name: "Thermal Core", effect: "Deals Fire damage instead of Physical", cost: "1 Blaze Glass", precompile: 1 },
|
||||
{ id: "shock", name: "Static Coil", effect: "Targets hit are Dazed", cost: "3 Copper", precompile: 2 },
|
||||
{ id: "shield", name: "Reactive Plating", effect: "+1 Armor while equipped", cost: "2 Steel", precompile: 1 },
|
||||
{ id: "range", name: "Long-Range Optics", effect: "Increases Range by 1 step", cost: "1 Lens", precompile: 2 },
|
||||
{ id: "crit", "name": "Precision Chip", "effect": "+1 to Crit range", "cost": "1 Gold", "precompile": 3 },
|
||||
{ id: "multi", "name": "Burst Module", "effect": "Can target 2 enemies (Half damage)", "cost": "2 Gears", "precompile": 4 },
|
||||
{ id: "drain", "name": "Siphon Link", "effect": "Recover 1 Hope on kill", "cost": "1 Soul Gem", "precompile": 4 },
|
||||
{ id: "weight", "name": "Gravity Plate", "effect": "Weapon is Heavy (more damage)", "cost": "4 Lead", "precompile": 2 }
|
||||
];
|
||||
|
||||
export function getAugments() {
|
||||
return game.settings.get('dh-ikonis', 'augmentsList') || DEFAULT_AUGMENTS;
|
||||
}
|
||||
|
||||
export function getSlotCount(item) {
|
||||
const flags = item.getFlag('dh-ikonis') || {};
|
||||
if (typeof flags.slotOverride === "number") return flags.slotOverride;
|
||||
|
||||
// Daggerheart Tier detection (can be system.tier.value or system.tier)
|
||||
let tier = item.system?.tier?.value;
|
||||
if (tier === undefined) tier = item.system?.tier;
|
||||
|
||||
// Ensure we have a number
|
||||
const tierNum = parseInt(tier) || 1;
|
||||
|
||||
console.log(`DH-Ikonis | Detecting slots for Tier ${tierNum} (Raw: ${tier})`);
|
||||
|
||||
const settingKey = `slotsTier${tierNum}`;
|
||||
try {
|
||||
const slots = game.settings.get('dh-ikonis', settingKey);
|
||||
console.log(`DH-Ikonis | Setting [${settingKey}] returned: ${slots}`);
|
||||
return slots;
|
||||
} catch (e) {
|
||||
return tierNum >= 2 ? 3 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Robust feature fetching with timeout to prevent sheet hangs.
|
||||
*/
|
||||
export async function getAttachedFeature(uuid) {
|
||||
if (!uuid) return null;
|
||||
|
||||
const timeout = new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error("Timeout fetching feature")), 2000)
|
||||
);
|
||||
|
||||
try {
|
||||
const item = await Promise.race([fromUuid(uuid), timeout]);
|
||||
return item;
|
||||
} catch (err) {
|
||||
console.warn(`DH-Ikonis | Failed or timed out fetching feature [${uuid}]:`, err.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function patchDHWeapon() {
|
||||
console.log("DH-Ikonis | Patching DH Weapon system...");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue