ET Battle Helper

A few interface tweaks to improve your battling experience

当前为 2017-10-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name ET Battle Helper
  3. // @version 0.2
  4. // @description A few interface tweaks to improve your battling experience
  5. // @author jimborino
  6. // @match http*://*.eternitytower.net/*
  7. // @run-at document-end
  8. // @namespace https://greasyfork.org/users/156118
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // Set to false to disable option
  15. window.ETBattleHelper = {
  16. showEnemyTargets: true,
  17. showPlayerTargets: true,
  18. highlightExecuteRange: true,
  19. showEnemyPercentHealth: true,
  20. highlightOwnTarget: true
  21. };
  22.  
  23. // a few styles
  24. $("<style type='text/css'> .playerTarget img { border: 1px solid red !important; } #target { font-size: 14px; text-transform: capitalize; } </style>").appendTo("head");
  25.  
  26. // Enemy HP % and targets
  27. Meteor.connection._stream.on("message", function(json) {
  28. var message = JSON.parse(json);
  29. if(message.msg == "changed" && message.collection == "redis" && message.id.includes("battles-")) {
  30. var battleState = JSON.parse(message.fields.value);
  31.  
  32. battleState.enemies.forEach(function(enemy) {
  33. var enemyTarget = getUnitById(enemy.target, battleState);
  34. if (enemyTarget !== undefined) {
  35. enemyTarget = enemyTarget.name;
  36. var enemyHealth = enemy.stats.health;
  37. var enemyHealthMax = enemy.stats.healthMax;
  38. var enemyHealthPercent = (enemyHealth / enemyHealthMax) * 100;
  39. var enemyImgEl = $("img#" + enemy.id);
  40. if(window.ETBattleHelper.highlightExecuteRange) {
  41. if(enemyHealthPercent < 30) {
  42. enemyImgEl.siblings(".progress.health-bar").css("border", "2px solid red");
  43. } else {
  44. enemyImgEl.siblings(".progress.health-bar").css("border", "none");
  45. }
  46. }
  47.  
  48. if(window.ETBattleHelper.showEnemyPercentHealth) {
  49. var enemyPercentEl = enemyImgEl.siblings("div#percent");
  50. if(enemyPercentEl.length > 0) {
  51. enemyPercentEl.html(enemyHealthPercent.toFixed(2) + "%");
  52. } else {
  53. enemyPercentEl = $("<div id='percent'>" + enemyHealthPercent.toFixed(2) + "%</div>");
  54. enemyPercentEl.insertBefore(enemyImgEl);
  55. }
  56. }
  57.  
  58. if(window.ETBattleHelper.showEnemyTargets) {
  59. var enemyTargetEl = enemyImgEl.siblings("div#target");
  60. if(enemyTargetEl.length > 0) {
  61. enemyTargetEl.html("( " + enemyTarget + " )");
  62. } else {
  63. enemyTargetEl = $("<div id='target'>( " + enemyTarget + " )</div>");
  64. enemyTargetEl.insertBefore(enemyImgEl);
  65. }
  66. }
  67. }
  68. });
  69.  
  70. battleState.units.forEach(function(unit) {
  71. var unitTarget = getUnitById(unit.target, battleState);
  72. var unitTargetId;
  73. if(unitTarget === undefined) { // player targets only change when the target is manually changed
  74. // for attacks after an enemy is dead, the target is always the first enemy
  75. if(battleState.enemies.length < 1) { // we receive an update when all enemies are dead
  76. return;
  77. }
  78. unitTargetId = battleState.enemies[0].id;
  79. unitTarget = battleState.enemies[0].name;
  80. } else {
  81. unitTargetId = unitTarget.id;
  82. unitTarget = unitTarget.name;
  83. }
  84. var unitImgEl = $("img#" + unit.id);
  85. if(window.ETBattleHelper.showPlayerTargets) {
  86. var unitTargetEl = unitImgEl.siblings("div#target");
  87. if(unitTargetEl.length > 0) {
  88. unitTargetEl.html("( " + unitTarget + " )");
  89. } else {
  90. unitTargetEl = $("<div id='target'>( " + unitTarget + " )</div>");
  91. unitTargetEl.insertBefore(unitImgEl);
  92. }
  93. }
  94.  
  95.  
  96.  
  97. if(window.ETBattleHelper.highlightOwnTarget) {
  98. $("img#" + unitTargetId).parent().addClass("playerTarget");
  99. $("img#" + unitTargetId).parent()
  100. .parent()
  101. .siblings()
  102. .children()
  103. .removeClass("playerTarget");
  104. }
  105.  
  106.  
  107. });
  108.  
  109. }
  110. });
  111.  
  112. // Recolor your damage splats
  113. var oldReceive = Meteor.connection._livedata_data;
  114. var userId = Meteor.userId();
  115.  
  116. Meteor.connection._livedata_data = function() {
  117. if(arguments[0].msg == "changed" && arguments[0].collection == "redis") {
  118. var battleState = JSON.parse(arguments[0].fields.value);
  119. battleState.tickEvents.forEach(function(tickEvent) {
  120. if(tickEvent.from == userId)
  121. tickEvent.customColor = "black";
  122. });
  123. arguments[0].fields.value = JSON.stringify(battleState);
  124. }
  125.  
  126. var ret = oldReceive.apply(this, arguments);
  127. return ret;
  128. };
  129.  
  130. function getUnitById(unitId, battleState) {
  131. return battleState.units.concat(battleState.enemies).find(function (el) {
  132. if (el.id == unitId) return true;
  133. });
  134. }
  135. })();