Alarms

Tower Alarms

  1. // ==UserScript==
  2. // @name Alarms
  3. // @namespace -
  4. // @version 1.1
  5. // @description Tower Alarms
  6. // @author you
  7. // @match zombs.io
  8. // @icon https://cdn.discordapp.com/attachments/854376044522242059/924865286719557672/BG_Mirai_Light.webp
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. let isOnOrNot = false;
  13. let stashhitalarm = false;
  14. let deadalarm = false;
  15. let disconnectalarm = false;
  16. let onlyOpenOnceOnTimeout;
  17. let health65palarm = false;
  18. let tower65palarm = false;
  19. let entitiesHealth = {};
  20. let pingalarm = false;
  21. let petdeadalarm = false;
  22. let m25health = false;
  23. let videoalert = () => {
  24. let a = new Audio();
  25. a.src = "https://cdn.discordapp.com/attachments/870020008128958525/871587235324117052/Canadian_EAS_Alarm_EXTREME_LOUD.mp3"
  26. a.volume = 1;
  27. a.play();
  28. Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Stop Alert?", 10000, function() {
  29. a.pause();
  30. })
  31. setTimeout(() => {
  32. a.pause();
  33. }, 30000);
  34. }
  35. game.network.addRpcHandler("LocalBuilding", e => {
  36. for (let i in e) {
  37. if (e[i].dead) {
  38. if (e[i].type !== "Wall" && e[i].type !== "Door") {
  39. if (isOnOrNot) {
  40. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  41. }
  42. }
  43. }
  44. }
  45. })
  46.  
  47. game.network.addEntityUpdateHandler((e) => {
  48. let gl = GetGoldStash();
  49. if (gl) {
  50. if (e.entities[gl.uid]) {
  51. if (e.entities[gl.uid].health !== e.entities[gl.uid].maxHealth) {
  52. if (stashhitalarm) {
  53. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  54. }
  55. }
  56. }
  57. }
  58. if((game.network.ping > 2000) && pingalarm) {
  59. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  60. };
  61. if (e.entities[game.world.myUid]) {
  62. if (e.entities[game.world.myUid].health) {
  63. if ((e.entities[game.world.myUid].health / 500) * 100 < 65) {
  64. if (health65palarm) {
  65. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true,videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  66. }
  67. }
  68. }
  69. }
  70. for (let i in e.entities) {
  71. if (e.entities[i].partyId == game.ui.playerTick.partyId) {
  72. if (e.entities[i].model == "Harvester" || e.entities[i].model == "ArrowTower" || e.entities[i].model == "CannonTower" || e.entities[i].model == "BombTower" || e.entities[i].model == "MagicTower" || e.entities[i].model == "MeleeTower") {
  73. entitiesHealth[e.entities[i].uid] = {uid: e.entities[i].uid, health: e.entities[i].health, maxHealth: e.entities[i].maxHealth}
  74. }
  75. }
  76. if (entitiesHealth[i]) {
  77. e.entities[i].health && (entitiesHealth[i].health = e.entities[i].health);
  78. e.entities[i].maxHealth && (entitiesHealth[i].maxHealth = e.entities[i].maxHealth);
  79. }
  80. }
  81. for (let i in entitiesHealth) {
  82. if ((entitiesHealth[i].health / entitiesHealth[i].maxHealth) * 100 < 65) {
  83. if (tower65palarm) {
  84. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  85. }
  86. }
  87. if (!e.entities[i]) {
  88. delete entitiesHealth[i];
  89. }
  90. }
  91. })
  92.  
  93. Game.currentGame.ui._events.playerPetTickUpdate.push(pet => {
  94. if (petdeadalarm && pet.health <= 0) {
  95. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  96. }
  97. if (m25health && pet.health <= 10) {
  98. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  99. }
  100. })
  101.  
  102. game.network.addRpcHandler("Dead", () => {
  103. if (deadalarm) {
  104. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  105. }
  106. })
  107.  
  108. game.network.addCloseHandler(() => {
  109. if (disconnectalarm) {
  110. !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, window.open("https://youtu.be/xvFZjo5PgG0"), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000))
  111. }
  112. })
  113.  
  114. alarm = () => {
  115. isOnOrNot = !isOnOrNot;
  116.  
  117. document.getElementsByClassName("0i9")[0].innerText = document.getElementsByClassName("0i9")[0].innerText.replace(isOnOrNot ? "Enable" : "Disable", isOnOrNot ? "Disable" : "Enable");
  118.  
  119. document.getElementsByClassName("0i9")[0].className = document.getElementsByClassName("0i9")[0].className.replace(isOnOrNot ? "green" : "red", isOnOrNot ? "red" : "green");
  120.  
  121. }
  122.  
  123. stashHitAlarm = () => {
  124. stashhitalarm = !stashhitalarm;
  125.  
  126. document.getElementsByClassName("3i9")[0].innerText = document.getElementsByClassName("3i9")[0].innerText.replace(stashhitalarm ? "Enable" : "Disable", stashhitalarm ? "Disable" : "Enable");
  127.  
  128. document.getElementsByClassName("3i9")[0].className = document.getElementsByClassName("3i9")[0].className.replace(stashhitalarm ? "green" : "red", stashhitalarm ? "red" : "green");
  129.  
  130. }
  131.  
  132. deadAlarm = () => {
  133. deadalarm = !deadalarm;
  134.  
  135. document.getElementsByClassName("6i9")[0].innerText = document.getElementsByClassName("6i9")[0].innerText.replace(deadalarm ? "Enable" : "Disable", deadalarm ? "Disable" : "Enable");
  136.  
  137. document.getElementsByClassName("6i9")[0].className = document.getElementsByClassName("6i9")[0].className.replace(deadalarm ? "green" : "red", deadalarm ? "red" : "green");
  138.  
  139. }
  140.  
  141. disconnectAlarm = () => {
  142. disconnectalarm = !disconnectalarm;
  143.  
  144. document.getElementsByClassName("9i9")[0].innerText = document.getElementsByClassName("9i9")[0].innerText.replace(disconnectalarm ? "Enable" : "Disable", disconnectalarm ? "Disable" : "Enable");
  145.  
  146. document.getElementsByClassName("9i9")[0].className = document.getElementsByClassName("9i9")[0].className.replace(disconnectalarm ? "green" : "red", disconnectalarm ? "red" : "green");
  147. }
  148. health65pAlarm = () => {
  149. health65palarm = !health65palarm;
  150.  
  151. document.getElementsByClassName("11i9")[0].innerText = document.getElementsByClassName("11i9")[0].innerText.replace(health65palarm ? "Enable" : "Disable", health65palarm ? "Disable" : "Enable");
  152.  
  153. document.getElementsByClassName("11i9")[0].className = document.getElementsByClassName("11i9")[0].className.replace(health65palarm ? "green" : "red", health65palarm ? "red" : "grey");
  154.  
  155. }
  156.  
  157. tower65pAlarm = () => {
  158. tower65palarm = !tower65palarm;
  159.  
  160. document.getElementsByClassName("14i9")[0].innerText = document.getElementsByClassName("14i9")[0].innerText.replace(tower65palarm ? "Enable" : "Disable", tower65palarm ? "Disable" : "Enable");
  161.  
  162. document.getElementsByClassName("14i9")[0].className = document.getElementsByClassName("14i9")[0].className.replace(tower65palarm ? "green" : "red", tower65palarm ? "red" : "grey");
  163.  
  164. }
  165. pingAlarm = () => {
  166. pingalarm = !pingalarm;
  167.  
  168. document.getElementsByClassName("16i9")[0].innerText = document.getElementsByClassName("16i9")[0].innerText.replace(pingalarm ? "Enable" : "Disable", pingalarm ? "Disable" : "Enable");
  169.  
  170. document.getElementsByClassName("16i9")[0].className = document.getElementsByClassName("16i9")[0].className.replace(pingalarm ? "green" : "red", pingalarm ? "red" : "grey");
  171.  
  172. }
  173. petdeathalarm = () => {
  174. petdeadalarm = !petdeadalarm;
  175.  
  176. document.getElementsByClassName("17i9")[0].innerText = document.getElementsByClassName("17i9")[0].innerText.replace(petdeadalarm ? "Enable" : "Disable", petdeadalarm ? "Disable" : "Enable");
  177.  
  178. document.getElementsByClassName("17i9")[0].className = document.getElementsByClassName("17i9")[0].className.replace(petdeadalarm ? "green" : "red", petdeadalarm ? "red" : "grey");
  179.  
  180. }
  181. pet10hpalarm = () => {
  182. m25health = !m25health;
  183.  
  184. document.getElementsByClassName("18i9")[0].innerText = document.getElementsByClassName("18i9")[0].innerText.replace(m25health ? "Enable" : "Disable", m25health ? "Disable" : "Enable");
  185.  
  186. document.getElementsByClassName("18i9")[0].className = document.getElementsByClassName("18i9")[0].className.replace(m25health ? "green" : "red", m25health ? "red" : "grey");
  187.  
  188. }