Kittens Game Data output

A script for outputting additional information in the kittens game

当前为 2015-06-06 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Kittens Game Data output
  3. // @namespace https://greasyfork.org/en/scripts/10234-kittens-game-data-output
  4. // @version 0.2.4
  5. // @description A script for outputting additional information in the kittens game
  6. // @author Yuriy
  7. // @match http://bloodrizer.ru/games/kittens/
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. function initiate_script() {
  12. var data_out = document.createElement('div');
  13. data_out.id = 'data_container';
  14. data_out.style.width = '100%';
  15. data_out.style.bottom = '0px';
  16. data_out.style.verticalAlign = 'bottom';
  17. data_out.innerHTML = '<div style="width: 340px;"> <table id="food_table_season" table-layout: fixed;></table></div></div><div> <p id="food_balance_info"></p> </div>';
  18. right_col = document.getElementById('rightColumn')
  19. right_col.style.width = '360px';
  20. before_child = document.getElementById('clearLog')
  21. right_col.insertBefore(data_out, before_child);
  22. }
  23.  
  24. if (!document.getElementById('data_container')) {
  25. initiate_script();
  26. }
  27.  
  28. function calculate_food_income_data(weather_ratio_val, seconds) {
  29. var total = 0;
  30. var subtotal = 0;
  31. total += gamePage.getEffect("catnip" + "PerTickBase")*5
  32. total *= 1+weather_ratio_val;
  33. var resMapProduction = gamePage.village.getResProduction();
  34. subtotal = resMapProduction['catnip']*5 || 0;
  35. subtotal *= (1 + gamePage.workshop.getEffect('catnip' + "Ratio"))
  36. total += subtotal;
  37. total *= (1 + gamePage.bld.getEffect('catnip' + "Ratio"))
  38. total *= (1 + gamePage.space.getEffect('catnip' + "Ratio"))
  39. total *= (1 + gamePage.religion.getEffect('catnip' + "Ratio"))
  40. var paragonRatio = gamePage.resPool.get("paragon").value * 0.01;
  41. paragonRatio = gamePage.bld.getHyperbolicEffect(paragonRatio, 2);
  42. total *= 1+paragonRatio
  43. if (gamePage.religion.getRU("solarRevolution").researched){
  44. total *= 1+(gamePage.religion.getProductionBonus() / 100)
  45. }
  46. total *= seconds;
  47. return total;
  48. }
  49.  
  50. function calculate_food_data(weather_ratio_val, seconds) {
  51. var total = calculate_food_income_data(weather_ratio_val, seconds);
  52. var resMapConsumption = gamePage.village.getResConsumption();
  53. var resConsumption = resMapConsumption['catnip'] || 0;
  54. resConsumption = resConsumption * (1 + gamePage.bld.getEffect('catnip' + "DemandRatio", true));
  55. resConsumption *= 5;
  56. resConsumption *= seconds;
  57. total += resConsumption;
  58. return total
  59. }
  60.  
  61. function val_to_printable(total) {
  62. var total_value = '';
  63. if(Math.abs(total)>1000){
  64. total = total / 1000;
  65. total = total.toFixed(1);
  66. total_value += total;
  67. total_value += ' k';
  68. }else{
  69. total = total.toFixed(2);
  70. total_value += total;
  71. }
  72. return total_value;
  73. }
  74.  
  75. function generate_food_table(seconds, label) {
  76. var contents = '';
  77. //Define the table colomn widths
  78. contents += '<col width="100">';
  79. contents += '<col width="60">';
  80. contents += '<col width="60">';
  81. contents += '<col width="60">';
  82. contents += '<col width="60">';
  83. //The top of the table, describing what it is showing. Leave once cell blank at the start
  84. contents += '<tr>';
  85. contents += '<td style="text-align:center">'
  86. contents += ' '
  87. contents += '</td>';
  88. contents += '<td style="text-align:center" colspan="4">'
  89. contents += label
  90. contents += '</td>';
  91. contents += '</tr>';
  92. //Second level of the top of the table, describing what it is showing. Leave once cell blank at the start
  93. contents += '<tr>';
  94. contents += '<td style="text-align:center">'
  95. contents += ' '
  96. contents += '</td>';
  97. contents += '<td style="text-align:center">'
  98. contents += 'Winter'
  99. contents += '</td> <td style="text-align:center">'
  100. contents += 'Spring'
  101. contents += '</td> <td style="text-align:center">'
  102. contents += 'Summer'
  103. contents += '</td> <td style="text-align:center">'
  104. contents += 'Fall'
  105. contents += '</td>';
  106. contents += '</tr>';
  107. //Data for a good season
  108. contents += '<tr>';
  109. contents += '<td style="text-align:center">'
  110. contents += 'Good season'
  111. contents += '</td>';
  112. contents += '<td style="text-align:center">'
  113. contents += val_to_printable(calculate_food_data(-0.60, seconds))
  114. contents += '</td> <td style="text-align:center">'
  115. contents += val_to_printable(calculate_food_data(0.65, seconds))
  116. contents += '</td> <td style="text-align:center">'
  117. contents += val_to_printable(calculate_food_data(0.15, seconds))
  118. contents += '</td> <td style="text-align:center">'
  119. contents += val_to_printable(calculate_food_data(0.15, seconds))
  120. contents += '</td>';
  121. contents += '</tr>';
  122. //Data for an average season
  123. contents += '<tr>';
  124. contents += '<td style="text-align:center">'
  125. contents += 'Normal season'
  126. contents += '</td>';
  127. contents += '<td style="text-align:center">'
  128. contents += val_to_printable(calculate_food_data(-0.75, seconds))
  129. contents += '</td> <td style="text-align:center">'
  130. contents += val_to_printable(calculate_food_data(0.50, seconds))
  131. contents += '</td> <td style="text-align:center">'
  132. contents += val_to_printable(calculate_food_data(0.0, seconds))
  133. contents += '</td> <td style="text-align:center">'
  134. contents += val_to_printable(calculate_food_data(0.0, seconds))
  135. contents += '</td>';
  136. contents += '</tr>';
  137. //Data for a bad season
  138. contents += '<tr>';
  139. contents += '<td style="text-align:center">'
  140. contents += 'Bad season'
  141. contents += '</td>';
  142. contents += '<td style="text-align:center">'
  143. contents += val_to_printable(calculate_food_data(-0.90, seconds))
  144. contents += '</td> <td style="text-align:center">'
  145. contents += val_to_printable(calculate_food_data(0.35, seconds))
  146. contents += '</td> <td style="text-align:center">'
  147. contents += val_to_printable(calculate_food_data(-0.15, seconds))
  148. contents += '</td> <td style="text-align:center">'
  149. contents += val_to_printable(calculate_food_data(-0.15, seconds))
  150. contents += '</td>';
  151. contents += '</tr>';
  152. return contents
  153. }
  154.  
  155. function generate_food_balance_data() {
  156. var contents = '';
  157. contents += "Yearly food produced (avg): ";
  158. contents += val_to_printable(calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200))
  159. contents += "<br>";
  160. var resMapConsumption = gamePage.village.getResConsumption();
  161. var resConsumption = resMapConsumption['catnip'] || 0;
  162. resConsumption = resConsumption * (1 + gamePage.bld.getEffect('catnip' + "DemandRatio", true));
  163. resConsumption *= 5;
  164. resConsumption *= 800;
  165. contents += "Yearly food consumed (avg): ";
  166. contents += val_to_printable(-resConsumption);
  167. contents += "<br>";
  168. contents += "Surplus (or deficit): ";
  169. contents += val_to_printable(calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption);
  170. contents += "<br>";
  171. contents += "Surplus/consumed: ";
  172. if((calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100 >= 15) {
  173. contents += '<span style="color: green;">'
  174. }else if((calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100 <= 5 && (calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100 >= 0) {
  175. contents += '<span style="color: yellow;">'
  176. }else if((calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100 <= 5 && (calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100 < 0) {
  177. contents += '<span style="color: red;">'
  178. }else{
  179. contents += '<span">'
  180. }
  181. contents += val_to_printable((calculate_food_income_data(-0.75, 200)+calculate_food_income_data(0.50, 200)+calculate_food_income_data(0.0, 200)+calculate_food_income_data(0.0, 200)+resConsumption)/(-resConsumption)*100);
  182. contents += "%";
  183. contents += '</span>'
  184. contents += "<br>";
  185. return contents;
  186. }
  187.  
  188. function output_data() {
  189. document.getElementById('food_table_season').innerHTML = generate_food_table(200, 'Food during seasons (/season)');
  190. document.getElementById('food_balance_info').innerHTML = generate_food_balance_data();
  191. }
  192.  
  193. setInterval(output_data, 200);