MediaWiki:CharacterBuilder.js: Difference between revisions

From EQOA Sandstorm Wiki
Jump to navigationJump to search
(Created page with "mw.hook('wikipage.content').add(function () { var app = document.getElementById('character-builder-app'); if (!app) return; if (!window.EQOA_BUILDER_DATA) { app.innerHTML = '<b>Character Builder Error:</b> CharacterBuilderData.js did not load.'; return; } var data = window.EQOA_BUILDER_DATA; var baseStats = data.baseStats; var classes = data.classes; app.innerHTML = '<div class="character-builder-box">' + '<div class="character-builde...")
 
No edit summary
Line 1: Line 1:
mw.hook('wikipage.content').add(function () {
mw.hook('wikipage.content').add(function () {
  var app = document.getElementById('character-builder-app');
  if (!app) return;


  if (!window.EQOA_BUILDER_DATA) {
     var app = document.getElementById('character-builder-app');
     app.innerHTML = '<b>Character Builder Error:</b> CharacterBuilderData.js did not load.';
     if (!app) return;
     return;
  }


  var data = window.EQOA_BUILDER_DATA;
    if (!window.EQOA_BUILDER_DATA) {
  var baseStats = data.baseStats;
        app.innerHTML = '<div style="color:red;">EQOA_BUILDER_DATA failed to load.</div>';
  var classes = data.classes;
        return;
    }


  app.innerHTML =
     var data = window.EQOA_BUILDER_DATA;
     '<div class="character-builder-box">' +
      '<div class="character-builder-title">EQOA Character Builder</div>' +


      '<div class="character-builder-controls">' +
    app.innerHTML = `
        '<label>Race</label>' +
        <div class="character-builder-box">
        '<select id="cb-race"></select>' +
            <div class="character-builder-title">
                EQOA Character Builder
            </div>


        '<label>Class</label>' +
            <div class="character-builder-controls">
        '<select id="cb-class"></select>' +
                <label>Race</label>
      '</div>' +
                <select id="cb-race"></select>


      '<div class="character-builder-stats">' +
                <label>Class</label>
        '<div class="character-builder-section-title">Base Stats</div>' +
                <select id="cb-class"></select>
        '<table class="character-builder-stat-table">' +
             </div>
          '<tr><th>STR</th><th>STA</th><th>AGI</th><th>DEX</th><th>WIS</th><th>INT</th><th>CHA</th><th>HP</th><th>POW</th><th>AC</th></tr>' +
          '<tr>' +
            '<td id="cb-str">0</td>' +
             '<td id="cb-sta">0</td>' +
            '<td id="cb-agi">0</td>' +
            '<td id="cb-dex">0</td>' +
            '<td id="cb-wis">0</td>' +
            '<td id="cb-int">0</td>' +
            '<td id="cb-cha">0</td>' +
            '<td id="cb-hp">0</td>' +
            '<td id="cb-pow">0</td>' +
            '<td id="cb-ac">0</td>' +
          '</tr>' +
        '</table>' +
      '</div>' +
    '</div>';


  var raceSelect = document.getElementById('cb-race');
            <div class="character-builder-section-title">
  var classSelect = document.getElementById('cb-class');
                Base Stats
            </div>


  function addOption(select, value, label) {
            <table class="character-builder-stat-table">
    var option = document.createElement('option');
                <tr>
    option.value = value;
                    <th>STR</th>
    option.textContent = label;
                    <th>STA</th>
    select.appendChild(option);
                    <th>AGI</th>
  }
                    <th>DEX</th>
                    <th>WIS</th>
                    <th>INT</th>
                    <th>CHA</th>
                </tr>


  function loadRaces() {
                <tr>
     raceSelect.innerHTML = '';
                    <td id="cb-str">0</td>
                    <td id="cb-sta">0</td>
                    <td id="cb-agi">0</td>
                    <td id="cb-dex">0</td>
                    <td id="cb-wis">0</td>
                    <td id="cb-int">0</td>
                    <td id="cb-cha">0</td>
                </tr>
            </table>
        </div>
     `;


     Object.keys(baseStats).forEach(function (race) {
    var raceSelect = document.getElementById('cb-race');
      addOption(raceSelect, race, race);
    var classSelect = document.getElementById('cb-class');
 
    function addOption(select, value, label) {
        var option = document.createElement('option');
        option.value = value;
        option.textContent = label;
        select.appendChild(option);
    }
 
     Object.keys(data.baseStats).forEach(function(race) {
        addOption(raceSelect, race, race);
     });
     });
  }


  function loadClassesForRace() {
    function loadClasses() {
    var race = raceSelect.value;
 
    classSelect.innerHTML = '';
        classSelect.innerHTML = '';


    if (!baseStats[race]) return;
        var race = raceSelect.value;


    Object.keys(baseStats[race]).forEach(function (classCode) {
        Object.keys(data.baseStats[race]).forEach(function(classCode) {
      var className = classes[classCode] || classCode;
 
      addOption(classSelect, classCode, classCode + ' - ' + className);
            var className = data.classes[classCode];
    });
 
            addOption(
                classSelect,
                classCode,
                classCode + ' - ' + className
            );
        });
 
        updateStats();
    }


     updateStats();
     function updateStats() {
  }


  function updateStats() {
        var race = raceSelect.value;
    var race = raceSelect.value;
        var classCode = classSelect.value;
    var classCode = classSelect.value;


    if (!baseStats[race] || !baseStats[race][classCode]) return;
        var stats = data.baseStats[race][classCode];


    var stats = baseStats[race][classCode];
        document.getElementById('cb-str').textContent = stats.str || 0;
        document.getElementById('cb-sta').textContent = stats.sta || 0;
        document.getElementById('cb-agi').textContent = stats.agi || 0;
        document.getElementById('cb-dex').textContent = stats.dex || 0;
        document.getElementById('cb-wis').textContent = stats.wis || 0;
        document.getElementById('cb-int').textContent = stats.int || 0;
        document.getElementById('cb-cha').textContent = stats.cha || 0;
    }


     document.getElementById('cb-str').textContent = stats.str || 0;
     raceSelect.addEventListener('change', loadClasses);
    document.getElementById('cb-sta').textContent = stats.sta || 0;
     classSelect.addEventListener('change', updateStats);
     document.getElementById('cb-agi').textContent = stats.agi || 0;
    document.getElementById('cb-dex').textContent = stats.dex || 0;
    document.getElementById('cb-wis').textContent = stats.wis || 0;
    document.getElementById('cb-int').textContent = stats.int || 0;
    document.getElementById('cb-cha').textContent = stats.cha || 0;
    document.getElementById('cb-hp').textContent = stats.hp || 0;
    document.getElementById('cb-pow').textContent = stats.pow || 0;
    document.getElementById('cb-ac').textContent = stats.ac || 0;
  }


  raceSelect.addEventListener('change', loadClassesForRace);
    loadClasses();
  classSelect.addEventListener('change', updateStats);


  loadRaces();
  loadClassesForRace();
});
});

Revision as of 02:29, 14 May 2026

mw.hook('wikipage.content').add(function () {

    var app = document.getElementById('character-builder-app');
    if (!app) return;

    if (!window.EQOA_BUILDER_DATA) {
        app.innerHTML = '<div style="color:red;">EQOA_BUILDER_DATA failed to load.</div>';
        return;
    }

    var data = window.EQOA_BUILDER_DATA;

    app.innerHTML = `
        <div class="character-builder-box">
            <div class="character-builder-title">
                EQOA Character Builder
            </div>

            <div class="character-builder-controls">
                <label>Race</label>
                <select id="cb-race"></select>

                <label>Class</label>
                <select id="cb-class"></select>
            </div>

            <div class="character-builder-section-title">
                Base Stats
            </div>

            <table class="character-builder-stat-table">
                <tr>
                    <th>STR</th>
                    <th>STA</th>
                    <th>AGI</th>
                    <th>DEX</th>
                    <th>WIS</th>
                    <th>INT</th>
                    <th>CHA</th>
                </tr>

                <tr>
                    <td id="cb-str">0</td>
                    <td id="cb-sta">0</td>
                    <td id="cb-agi">0</td>
                    <td id="cb-dex">0</td>
                    <td id="cb-wis">0</td>
                    <td id="cb-int">0</td>
                    <td id="cb-cha">0</td>
                </tr>
            </table>
        </div>
    `;

    var raceSelect = document.getElementById('cb-race');
    var classSelect = document.getElementById('cb-class');

    function addOption(select, value, label) {
        var option = document.createElement('option');
        option.value = value;
        option.textContent = label;
        select.appendChild(option);
    }

    Object.keys(data.baseStats).forEach(function(race) {
        addOption(raceSelect, race, race);
    });

    function loadClasses() {

        classSelect.innerHTML = '';

        var race = raceSelect.value;

        Object.keys(data.baseStats[race]).forEach(function(classCode) {

            var className = data.classes[classCode];

            addOption(
                classSelect,
                classCode,
                classCode + ' - ' + className
            );
        });

        updateStats();
    }

    function updateStats() {

        var race = raceSelect.value;
        var classCode = classSelect.value;

        var stats = data.baseStats[race][classCode];

        document.getElementById('cb-str').textContent = stats.str || 0;
        document.getElementById('cb-sta').textContent = stats.sta || 0;
        document.getElementById('cb-agi').textContent = stats.agi || 0;
        document.getElementById('cb-dex').textContent = stats.dex || 0;
        document.getElementById('cb-wis').textContent = stats.wis || 0;
        document.getElementById('cb-int').textContent = stats.int || 0;
        document.getElementById('cb-cha').textContent = stats.cha || 0;
    }

    raceSelect.addEventListener('change', loadClasses);
    classSelect.addEventListener('change', updateStats);

    loadClasses();

});