You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
5.3 KiB

  1. {% extends "base.html" %}
  2. {% set active_page = "shares_calc" %}
  3. {% block title %}Spoil Shares Calculator{% endblock %}
  4. {% block content %}
  5. <div class="uk-flex uk-flex-center uk-margin-bottom uk-margin-top">
  6. <h1 class="uk-text-center"><strong>Adventurer Conqueror King</strong>Spoil Shares Calculator</h1>
  7. </div>
  8. <div class="uk-grid-divider" uk-grid>
  9. <div class="uk-width-1-3">
  10. <h3>Session Info</h3>
  11. <form class="uk-form-horizontal uk-margin-large">
  12. <div class="uk-margin">
  13. <label class="uk-form-label" for="player_count">Number of players</label>
  14. <div class="uk-form-controls">
  15. <select name="player_count" id="player_count" class="uk-select">
  16. <option value="1">1</option>
  17. <option value="2">2</option>
  18. <option value="3">3</option>
  19. <option value="4">4</option>
  20. <option value="5">5</option>
  21. <option value="6">6</option>
  22. <option value="7">7</option>
  23. <option value="8">8</option>
  24. </select>
  25. </div>
  26. </div>
  27. <div class="uk-margin">
  28. <label class="uk-form-label" for="hench_count">Number of henchmen</label>
  29. <div class="uk-form-controls">
  30. <input class="uk-input" id="hench_count" name="hench_count" type="number" value="0">
  31. </div>
  32. </div>
  33. <div class="uk-margin">
  34. <label class="uk-form-label" for="gp_recovered">GP value recovered</label>
  35. <div class="uk-form-controls">
  36. <input class="uk-input" id="gp_recovered" name="gp_recovered" type="number" value="0">
  37. </div>
  38. </div>
  39. <div class="uk-margin">
  40. <label class="uk-form-label" for="xp_earned">XP earned from monsters</label>
  41. <div class="uk-form-controls">
  42. <input class="uk-input" id="xp_earned" name="xp_earned" type="number" value="0">
  43. </div>
  44. </div>
  45. <button type="button" id="share_calc_button" class="uk-button uk-button-primary">Calculate</button>
  46. </form>
  47. </div>
  48. <div class="uk-width-1-3">
  49. <h4>Henchmen GP Shares</h4>
  50. <table id="hench_shares" class="uk-table">
  51. <thead>
  52. <tr>
  53. <th>Bonus XP Rate</th>
  54. <th>Share Per-Henchman</th>
  55. </tr>
  56. </thead>
  57. <tbody></tbody>
  58. </table>
  59. </div>
  60. <div class="uk-width-1-3">
  61. <h4>Player XP Shares</h4>
  62. <table id="player_shares" class="uk-table">
  63. <thead>
  64. <tr>
  65. <th>Bonus XP Rate</th>
  66. <th>Share Per-Player</th>
  67. </tr>
  68. </thead>
  69. <tbody></tbody>
  70. </table>
  71. <h4>Player GP Share</h4>
  72. <span id="pc_gp_share"></span>
  73. </div>
  74. </div>
  75. {% endblock %}
  76. {% block head %}
  77. <style>
  78. </style>
  79. {% endblock %}
  80. {% block scripts %}
  81. <script type="text/javascript">
  82. window.addEventListener('DOMContentLoaded', () => {
  83. var calc = document.querySelector('button#share_calc_button');
  84. calc.addEventListener("click", calculateShares);
  85. });
  86. function calculateShares() {
  87. var player_shares = document.querySelector('table#player_shares > tbody');
  88. var hench_shares = document.querySelector('table#hench_shares > tbody');
  89. player_shares.innerHTML = '';
  90. hench_shares.innerHTML = '';
  91. var player_count = parseInt(document.querySelector('select#player_count').value);
  92. var hench_count = parseInt(document.querySelector('input#hench_count').value);
  93. var gp = parseInt(document.querySelector('input#gp_recovered').value);
  94. var xp = parseInt(document.querySelector('input#xp_earned').value);
  95. let total_xp = gp + xp;
  96. let pc_base_xp_share = total_xp / (player_count + hench_count / 2.0);
  97. let response = '';
  98. for(let i = 0; i < 5; i ++) {
  99. // Build player rows
  100. const row = document.createElement("tr");
  101. const c1 = document.createElement("td");
  102. const c2 = document.createElement("td");
  103. c1.appendChild(document.createTextNode(`@ ${5 * i}%`));
  104. c2.appendChild(document.createTextNode(`${Math.floor(pc_base_xp_share * (1 + 0.05 * i))} xp`));
  105. row.appendChild(c1);
  106. row.appendChild(c2);
  107. player_shares.appendChild(row);
  108. // Build hench rows
  109. const hrow = document.createElement("tr");
  110. const hc1 = document.createElement("td");
  111. const hc2 = document.createElement("td");
  112. hc1.appendChild(document.createTextNode(`@ ${5 * i}%`));
  113. hc2.appendChild(document.createTextNode(`${Math.floor(pc_base_xp_share * (1 + 0.05 * i) / 2.0)} xp`));
  114. hrow.appendChild(hc1);
  115. hrow.appendChild(hc2);
  116. hench_shares.appendChild(hrow);
  117. }
  118. var pc_gp_share = document.querySelector('span#pc_gp_share');
  119. let gpshare = Math.floor(gp / (player_count + hench_count / 6.0))
  120. pc_gp_share.appendChild(document.createTextNode(`${gpshare} gold per player.`));
  121. }
  122. </script>
  123. {% endblock %}