ATLYSS TechPendium

Module:TEST/Equipment

Viewing old revision of Module:TEST/Equipment

You are viewing an old revision of this page from 1/26/2026, 4:36:18 PM.

View latest version
No documentation subpage (/doc) found for this module.
// const Utils = await require("Utils");
// const Game = await require("TEST/Game");
// const { latest: latestVersion } = await require("TEST/Versions");
// const { TooltipBuilder } = await require("TEST/Tooltip_Builder");

// function renderTable(items, version) {
//     let wikitext = "";
//     let tooltips = "";

//     const versionTooltip = new TooltipBuilder(`TradeItem:Table:Version:${version.replace(/\./g, '_')}`);
//     versionTooltip.addLine(`Data version: '''${version}''' <span class="${version === latestVersion ? 'latest' : 'outdated'}">(${version === latestVersion ? 'latest' : 'outdated'})</span>`);

//     wikitext += '{| class="wiki-table" style="width: auto;"\n';
//     wikitext += `! colspan=3 | Version: ${Game.versionCode(version, versionTooltip)}\n`;
//     wikitext += '|-\n';
//     wikitext += '! Name !! Rarity !! Max Stack\n';


//     for (const id in items) {
//         const item = items[id];

//         wikitext += '|-\n';

//         const tooltipId = `TradeItem:Table:${id}`;

//         // Name
//         wikitext += `| data-tooltip-id="${tooltipId}" | [[Trade Items/${item.name || id}|${item.name || id}]]\n`;

//         // Rarity
//         if (item.rarity) {
//             wikitext += `| ${Game.wikiRarity(item.rarity)}\n`;
//         } else {
//             wikitext += `| ${Game.wikiRarity("common")}\n`;
//         }

//         // Max Stack
//         if (item.stack?.max) {
//             wikitext += `| ${item.stack.max}\n`;
//         } else {
//             wikitext += `| 1\n`;
//         }

//         // Add tooltip
//         const tooltip = new TooltipBuilder(tooltipId);
//         tooltip.addLine(`'''${item.name || id}'''`);
//         if (item.description) {
//             const lines = item.description.replace(/\n{2,}/g, "\n").split('\n');
//             for (const line of lines) {
//                 tooltip.addLine(line.replace(/<color=(.*?)>(.*?)<\/color>/g, "<span style='color:$1;'>$2</span>"));
//             }
//         }
//         tooltips += tooltip.build();
//     }

//     wikitext += '|}\n';
//     wikitext += tooltips;

//     return wikitext;
// }

// function renderNavbox(items, version) {
//     let wikitext = '';

//     const versionTooltip = new TooltipBuilder(`TradeItem:Navbox:Version:${version.replace(/\./g, '_')}`);
//     versionTooltip.addLine(`Data version: '''${version}''' <span class="${version === latestVersion ? 'latest' : 'outdated'}">(${version === latestVersion ? 'latest' : 'outdated'})</span>`);

//     wikitext += `{| class="wiki-table navbox"\n`;
//     wikitext += `! Version: ${Game.versionCode(version, versionTooltip)}\n`;
//     wikitext += `|-\n`;
//     wikitext += `! Trade Items Navigation\n`;

//     const itemsList = [];
//     let tooltips = "";

//     for (const id in items) {
//         const item = items[id];

//         const tooltipId = `TradeItem:Navbox:${id}`;

//         itemsList.push(`<span data-tooltip-id="${tooltipId}">[[Trade Items/${item.name || id}|${item.name || id}]]</span>`);

//         // Add tooltip
//         const tooltip = new TooltipBuilder(tooltipId);
//         tooltip.addLine(`'''${item.name || id}'''`);
//         if (item.description) {
//             const lines = item.description.replace(/\n{2,}/g, "\n").split('\n');
//             for (const line of lines) {
//                 tooltip.addLine(line.replace(/<color=(.*?)>(.*?)<\/color>/g, "<span style='color:$1;'>$2</span>"));
//             }
//         }
//         tooltips += tooltip.build();
//     }

//     wikitext += `|-\n`;
//     wikitext += `| ${itemsList.join(' • ')}\n`;
//     wikitext += `|}\n`;
//     wikitext += tooltips;

//     return wikitext;
// }

// exports.TEST = async function () {
//     const { data, version } = await Utils.resolveData("Trade_Items", true);

//     if (Utils.isModuleEmpty(data)) {
//         return '⚠️ Trade item data is unavailable for all known versions.';
//     }

//     const sortedData = Utils.sortObjectByKey(data);

//     let output = '';
//     output += renderTable(sortedData, version);

//     return output;
// };

// exports.TEST_navbox = async function () {
//     const { data, version } = await Utils.resolveData("Trade_Items", true);

//     if (Utils.isModuleEmpty(data)) {
//         return '⚠️ Trade item data is unavailable for all known versions.';
//     }

//     const sortedData = Utils.sortObjectByKey(data);

//     let output = '';
//     output += `''Data version: <code>${version}</code>''\n\n`;
//     output += renderNavbox(sortedData, version);

//     return output;
// };

// exports.wikiTooltip = async function (props) {
//     const args = Utils.resolveArgs(props);
//     const { data, version } = await Utils.resolveData("Trade_Items", true);

//     if (Utils.isModuleEmpty(data)) {
//         return '⚠️ Trade item data is unavailable for all known versions.';
//     }

//     const itemId = (args["item"] || args[0])?.toLowerCase()?.replace(/\s+/g, '_');
//     const itemData = data[itemId];

//     if (!itemData) {
//         return `⚠️ Trade item '${args["item"] || args[0]}' not found in data version ${version}.`;
//     }

//     const tooltip = new TooltipBuilder(`TradeItem:item:${itemId}`);
//     tooltip.addLine(`'''${itemData.name || args["item"] || args[0]}'''`);
//     if (itemData.description) {
//         const lines = itemData.description.replace(/\n{2,}/g, "\n").split('\n');
//         for (const line of lines) {
//             tooltip.addLine(line.replace(/<color=(.*?)>(.*?)<\/color>/g, "<span style='color:$1;'>$2</span>"));
//         }
//     }

//     return `<span data-tooltip-id="TradeItem:item:${itemId}">[[Trade Items/${itemData.name || args["item"] || args[0]}|${itemData.name || args["item"] || args[0]}]]</span>` + tooltip.build();
// }

/* Module:Equipment */
const Utils = await require("Utils");
const Game = await require("TEST/Game");
const { latest: latestVersion } = await require("TEST/Versions");
const { TooltipBuilder } = await require("TEST/Tooltip_Builder");

function renderTable(items, type = "weapon", version) {
    let wikitext = "";
    let tooltips = "";

    const versionTooltip = new TooltipBuilder(`Equipment:Table:${type}:Version:${version.replace(/\./g, '_')}`);
    versionTooltip.addLine(`Data version: '''${version}''' <span class="${version === latestVersion ? 'latest' : 'outdated'}">(${version === latestVersion ? 'latest' : 'outdated'})</span>`);

    const filteredItems = Utils.filterObjectByProperty(items, 'type', type);

    if (Object.keys(filteredItems).length === 0) {
        return `''No equipment of type '''${type}''' found in data version ${version}.''`;
    }

    if (type == "weapon") {
        wikitext += '{| class="wiki-table" style="width: auto;"\n';
        wikitext += `! colspan=5 | Version: ${Game.versionCode(version, versionTooltip)}\n`;
        wikitext += '|-\n';
        wikitext += '! Name !! Level !! Rarity !! Element !! Base Damage\n';

        for (const id in filteredItems) {
            const item = filteredItems[id];

            wikitext += '|-\n';

            const tooltipId = `Equipment:${type}:Table:${id}`;

            // Name
            wikitext += `| data-tooltip-id="${tooltipId}" | [[Equipment/${item.name || id}|${item.name || id}]]\n`;

            // Level
            wikitext += `| ${item.requirements.level || 'Unknown'}\n`;

            // Rarity
            wikitext += `| ${Game.wikiRarity(item.rarity)}\n`;

            // Element
            wikitext += `| ${item.element || 'Normal'}\n`;

            // Base Damage
            wikitext += `| ${item.damage.min || '0'} - ${item.damage.max || '0'}\n`;

            // Add tooltip
            const tooltip = new TooltipBuilder(tooltipId);
            tooltip.addLine(`'''${item.name || id}'''`);

            if (item.description) {
                const lines = item.description.replace(/\n{2,}/g, "\n").split('\n');
                for (const line of lines) {
                    tooltip.addLine(line.replace(/<color=(.*?)>(.*?)<\/color>/g, "<span style='color:$1;'>$2</span>"));
                }
            }
            tooltips += tooltip.build();
        }
    } else if (type == "armor") {
        wikitext += '{| class="wiki-table" style="width: auto;"\n';
        wikitext += `! colspan=4 | Version: ${Game.versionCode(version, versionTooltip)}\n`;
        wikitext += '|-\n';
        wikitext += '! Name !! Level !! Rarity !! Class\n';

        for (const id in filteredItems) {
            const item = filteredItems[id];

            wikitext += '|-\n';

            const tooltipId = `Equipment:${type}:Table:${id}`;

            // Name
            wikitext += `| data-tooltip-id="${tooltipId}" | [[Equipment/${item.name || id}|${item.name || id}]]\n`;

            // Level
            wikitext += `| ${item.requirements.level || 'Unknown'}\n`;

            // Rarity
            wikitext += `| ${Game.wikiRarity(item.rarity)}\n`;

            // Class
            wikitext += `| ${item.requirements.class || 'Any'}\n`;

            // Add tooltip
            const tooltip = new TooltipBuilder(tooltipId);
            tooltip.addLine(`'''${item.name || id}'''`);

            if (item.description) {
                const lines = item.description.replace(/\n{2,}/g, "\n").split('\n');
                for (const line of lines) {
                    tooltip.addLine(line.replace(/<color=(.*?)>(.*?)<\/color>/g, "<span style='color:$1;'>$2</span>"));
                }
            }
            tooltips += tooltip.build();
        }
    } else {
        return `''Equipment type '''${type}''' is not supported for table rendering.''`;
    }

    wikitext += '|}\n';
    wikitext += tooltips;

    return wikitext;
}

exports.TEST = async function () {
    const { data, version } = await Utils.resolveData("Equipment", true);

    if (Utils.isModuleEmpty(data)) {
        return '⚠️ Equipment data is unavailable for all known versions.';
    }

    const sortedData = Utils.sortObjectByKey(data);

    return `<div style="display: flex; flex-direction: row; justify-content: space-between;">${renderTable(sortedData, "weapon", version)}${renderTable(sortedData, "armor", version)}</div>`;
}
Last Edited by LiveGobe on 1/26/2026, 4:36:18 PM