Advertisement
opl

Steam's Tower Attack Helper

opl
Jun 13th, 2015
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. window.opl = window.opl || {};
  2.  
  3. if (window.opl.towerattack) window.opl.towerattack.end();
  4.  
  5. // g_Minigame.m_CurrentScene.GetEnemy(g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane, g_Minigame.m_CurrentScene.m_rgPlayerData.target)
  6. // g_Minigame.m_CurrentScene.m_rgGameData.lanes[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane]
  7.  
  8. // TODO: go to lane with medics when low health
  9. // TODO: smart(er) target
  10.  
  11. window.opl.towerattack = {
  12.     init: function() {
  13.         var $ = window.jQuery;
  14.  
  15.         $('#upgradescontainer>div').append(
  16.             $('<span id="opl-helper-settingslabel" class="title_upgrates abilities">Helpers</span>')
  17.         ).append(
  18.             $('<div id="opl-helper-settings">')
  19.         );
  20.  
  21.         for (var k in this.hooks) this.hooks[k].hook();
  22.  
  23.         for (var k in this.modules) this.addModuleToggle(this.modules[k]);
  24.     },
  25.     hooks: {
  26.         doClickEffect: {
  27.             showText: true,
  28.             hook: function() {
  29.                 var that = this;
  30.  
  31.                 this.func = this.func || g_Minigame.m_CurrentScene.DoClickEffect;
  32.  
  33.                 g_Minigame.m_CurrentScene.DoClickEffect = function() {
  34.                     if (that.showText) return that.func.apply(this, arguments);
  35.                 }
  36.             },
  37.             unhook: function() {
  38.                 if (!this.func) return;
  39.                 g_Minigame.m_CurrentScene.DoClickEffect = this.func;
  40.                 this.func = undefined;
  41.             }
  42.         },
  43.         doCritEffect: {
  44.             listeners: [],
  45.             showText: true,
  46.             hook: function() {
  47.                 var that = this;
  48.  
  49.                 this.func = this.func || g_Minigame.m_CurrentScene.DoCritEffect;
  50.  
  51.                 g_Minigame.m_CurrentScene.DoCritEffect = function() {
  52.                     var that2 = this;
  53.                     var args = arguments;
  54.                     that.listeners.forEach(function(listener) {
  55.                         listener.apply(that2, args);
  56.                     });
  57.                     if (that.showText) return that.func.apply(this, arguments);
  58.                 }
  59.             },
  60.             unhook: function() {
  61.                 if (!this.func) return;
  62.                 g_Minigame.m_CurrentScene.DoCritEffect = this.func;
  63.                 this.func = undefined;
  64.             },
  65.             listen: function(listener) {
  66.                 this.listeners.push(listener);
  67.             },
  68.             stopListening: function(listener) {
  69.                 this.listeners.splice(this.listeners.indexOf(listener), 1);
  70.             }
  71.         },
  72.         calculateDmg: {
  73.             listeners: [],
  74.             hook: function() {
  75.                 var that = this;
  76.  
  77.                 this.func = this.func || g_Minigame.m_CurrentScene.CalculateDamage;
  78.  
  79.                 g_Minigame.m_CurrentScene.CalculateDamage = function() {
  80.                     var dmg = that.func.apply(this, arguments);
  81.                     that.listeners.forEach(function(listener) {
  82.                         listener(dmg);
  83.                     });
  84.                     return dmg;
  85.                 }
  86.             },
  87.             unhook: function() {
  88.                 if (!this.func) return;
  89.                 g_Minigame.m_CurrentScene.CalculateDamage = this.func;
  90.                 this.func = undefined;
  91.             },
  92.             listen: function(listener) {
  93.                 this.listeners.push(listener);
  94.             },
  95.             stopListening: function(listener) {
  96.                 this.listeners.splice(this.listeners.indexOf(listener), 1);
  97.             }
  98.         }
  99.     },
  100.     modules: {
  101.         autorespawn: {
  102.             name: 'AutoRespawn',
  103.             enable: function() {
  104.                 this.intervalID = window.setInterval(function() {
  105.                     if (g_Minigame.m_CurrentScene.m_bIsDead) RespawnPlayer();
  106.                 }, 1000);
  107.             },
  108.             disable: function() {
  109.                 window.clearInterval(this.intervalID);
  110.             }
  111.         },
  112.         autoclicker: {
  113.             name: 'AutoClicker',
  114.             enable: function() {
  115.                 this.click();
  116.             },
  117.             disable: function() {
  118.                 window.clearTimeout(this.timeoutID);
  119.             },
  120.             click: function() {
  121.                 if (!g_Minigame.m_CurrentScene.m_bIsDead) g_Minigame.m_CurrentScene.DoClick({
  122.                     data: {
  123.                         getLocalPosition: function() {
  124.                             switch (g_Minigame.m_CurrentScene.m_rgPlayerData.target + (g_Minigame.m_CurrentScene.m_nCurrentLevel % 10 === 9 ? 1 : 0)) {
  125.                                 case 0: return {x: 650, y: 300}
  126.                                 case 1: return {x: 510, y: 450}
  127.                                 case 2: return {x: 650, y: 450}
  128.                                 case 3: return {x: 780, y: 450}
  129.                             }
  130.                         }
  131.                     }
  132.                 });
  133.  
  134.                 var that = this;
  135.                 this.timeoutID = window.setTimeout(function() {
  136.                     that.click();
  137.                 }, 23 + ~~(Math.random() * 5));
  138.             }
  139.         },
  140.         silentdamager: {
  141.             name: 'Silent Damager',
  142.             enable: function() {
  143.                 this.tick();
  144.             },
  145.             disable: function() {
  146.                 window.clearTimeout(this.timeoutID);
  147.             },
  148.             doLater: function(delay) {
  149.                 var that = this;
  150.  
  151.                 this.timeoutID = window.setTimeout(function() {
  152.                     that.tick();
  153.                 }, delay);
  154.             },
  155.             tick: function() {
  156.                 if (g_Minigame.m_CurrentScene.m_rgPlayerData.hp <= 0 || !g_Minigame.m_CurrentScene.m_rgGameData) return this.doLater(2000);
  157.  
  158.                 var enemy = g_Minigame.m_CurrentScene.GetEnemy(g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane, g_Minigame.m_CurrentScene.m_rgPlayerData.target);
  159.                 if (!enemy || enemy.m_data.hp <= 0) return this.doLater(200);
  160.  
  161.                 //g_Minigame.m_CurrentScene.m_nClicks = ~~(Math.random() * 6 + 39) - (~~(Math.random() * 1.1) * 3);
  162.                 g_Minigame.m_CurrentScene.m_nClicks = 20 - ~~(Math.random() * 1.2);
  163.  
  164.                 var nClickGoldPct = g_Minigame.m_CurrentScene.m_rgGameData.lanes[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane].active_player_ability_gold_per_click;
  165.                 if (nClickGoldPct > 0 && enemy.m_data.hp > 0) {
  166.                     var nClickGold = enemy.m_data.gold * nClickGoldPct * g_Minigame.m_CurrentScene.m_nClicks;
  167.                     g_Minigame.m_CurrentScene.ClientOverride('player_data', 'gold', g_Minigame.m_CurrentScene.m_rgPlayerData.gold + nClickGold);
  168.                     g_Minigame.m_CurrentScene.ApplyClientOverrides('player_data', true);
  169.                 }
  170.  
  171.                 for (var c = 0; c < g_Minigame.m_CurrentScene.m_nClicks; c++) g_Minigame.m_CurrentScene.CalculateDamage(g_Minigame.m_CurrentScene.m_rgPlayerTechTree.damage_per_click, g_Minigame.m_CurrentScene.m_rgGameData.lanes[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane].element)
  172.  
  173.                 if (g_Minigame.m_CurrentScene.m_rgStoredCrits.length > 0) {
  174.                     var rgDamage = g_Minigame.m_CurrentScene.m_rgStoredCrits.splice(0,1);
  175.                     g_Minigame.m_CurrentScene.DoCritEffect(rgDamage[0], parseInt(enemy.m_HealthBar.m_nLastPositionX), parseInt(enemy.m_HealthBar.m_nLastPositionY), 'Crit!');
  176.                 }
  177.  
  178.                 this.doLater(1000);
  179.             }
  180.         },
  181.         playerdps: {
  182.             name: 'Player DPS',
  183.             dmg: 0,
  184.             enable: function(towerattack) {
  185.                 var that = this;
  186.                 var $ = window.jQuery;
  187.  
  188.                 $('head').append($('<style id="opl-helper-playerdpsstyle">').text(
  189.                     '#col_right>.playerdpscontainer{display:inline-block;width:147px;vertical-align:top;margin-left:21px}' +
  190.                     '#col_right>.playerdpscontainer>.title_playerdps{font-size:8px;color:#aaa}' +
  191.                     '#playerdps{font-size:16px;color:#fff;margin-top:6px}'
  192.                 ));
  193.  
  194.                 $('<div class="playerdpscontainer">').on('click', function() {
  195.                     $('#col_right>.playerdpscontainer').hide();
  196.                     $('#col_right>.teamdpscontainer').show();
  197.                 }).append(
  198.                     $('<span class="title_playerdps">').text('Player DPS')
  199.                 ).append(
  200.                     $('<div id="playerdps">')
  201.                 ).insertAfter($('#col_right>.teamdpscontainer').hide());
  202.  
  203.                 $('#col_right>.teamdpscontainer').on('click', (this.teamClickListener = function() {
  204.                     $('#col_right>.teamdpscontainer').hide();
  205.                     $('#col_right>.playerdpscontainer').show();
  206.                 }));
  207.  
  208.                 towerattack.hooks.calculateDmg.listen((this.calcDmgListener = function(dmg) {
  209.                     that.dmg += dmg;
  210.                 }));
  211.  
  212.                 towerattack.hooks.doCritEffect.listen((this.critEffectListener = function(dmg) {
  213.                     that.dmg += dmg;
  214.                 }));
  215.  
  216.                 this.intervalID = window.setInterval(function() {
  217.                     $('#playerdps').text(FormatNumberForDisplay(that.dmg, 5));
  218.                     that.dmg = 0;
  219.                 }, 1000);
  220.             },
  221.             disable: function(towerattack) {
  222.                 towerattack.hooks.calculateDmg.stopListening(this.calcDmgListener);
  223.                 towerattack.hooks.doCritEffect.stopListening(this.critEffectListener);
  224.  
  225.                 jQuery('#col_right>.playerdpscontainer,#opl-helper-playerdpsstyle').remove();
  226.                 jQuery('#col_right>.teamdpscontainer').off('click', this.teamClickListener);
  227.                 jQuery('#col_right>.teamdpscontainer').show();
  228.                 window.clearInterval(this.intervalID);
  229.             }
  230.         },
  231.         automedics: {
  232.             name: 'AutoMedics',
  233.             enable: function() {
  234.                 this.intervalID = window.setInterval(function() {
  235.                     if (!g_Minigame.m_CurrentScene.m_bIsDead && !g_Minigame.m_CurrentScene.m_rgLaneData[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane].abilities[7] && g_Minigame.m_CurrentScene.GetCooldownForAbility(7) <= 0) g_Minigame.m_CurrentScene.TryAbility(jQuery('<a>').data('type',' 7'));
  236.                 }, 5000);
  237.             },
  238.             disable: function() {
  239.                 window.clearInterval(this.intervalID);
  240.             }
  241.         },
  242.         autolane: {
  243.             name: 'AutoLane',
  244.             enable: function() {
  245.                 this.intervalID = window.setInterval(function() {
  246.                     for (var l = 0; l < 3; l++) if (g_Minigame.m_CurrentScene.m_rgLaneData[l].has_boss > 0) return g_Minigame.m_CurrentScene.TryChangeLane(l);
  247.                     for (var l = 0; l < 3; l++) if (g_Minigame.m_CurrentScene.m_rgLaneData[l].has_treasure_mob > 0) return g_Minigame.m_CurrentScene.TryChangeLane(l);
  248.  
  249.                     var emptyLanes = [];
  250.                     laneLoop: for (var l = 0; l < 3; l++) {
  251.                         for (var j = 0; j < g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].enemies.length; j++) if (g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].enemies[j].hp > 0) continue laneLoop;
  252.                         emptyLanes.push(l);
  253.                     }
  254.  
  255.                     for (var l = 0; l < 3; l++) if (g_Minigame.m_CurrentScene.m_rgLaneData[l].abilities[17] && emptyLanes.indexOf(l) === -1) return g_Minigame.m_CurrentScene.TryChangeLane(l);
  256.  
  257.                     var elementalDmg = [];
  258.                     for (var i = 0; i < 4; i++) elementalDmg[i] = {id: i + 1, lvl: g_Minigame.m_CurrentScene.GetUpgradeLevel(i + 3)};
  259.                     elementalDmg.sort(function(a, b) {
  260.                         return a.lvl < b.lvl ? 1 : -1;
  261.                     });
  262.  
  263.                     for (var l = 0; l < 3; l++) {
  264.                         for (var i = 0; i < g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].enemies.length; i++) {
  265.                             if (g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].enemies[i].hp > 0 && g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].enemies[i].hp - g_Minigame.m_CurrentScene.m_rgLaneData[l].friendly_dps * 2 < 0) {
  266.                                 return g_Minigame.m_CurrentScene.TryChangeLane(l);
  267.                             }
  268.                         }
  269.                     }
  270.  
  271.                     for (var i = 0; i < elementalDmg.length; i++) for (var l = 0; l < 3; l++) {
  272.                         if (emptyLanes.indexOf(l) !== -1) continue;
  273.                         if (g_Minigame.m_CurrentScene.m_rgGameData.lanes[l].element === elementalDmg[i].id) return g_Minigame.m_CurrentScene.TryChangeLane(l);
  274.                     }
  275.                 }, 1000);
  276.             },
  277.             disable: function() {
  278.                 window.clearInterval(this.intervalID);
  279.             }
  280.         },
  281.         noparticles: {
  282.             name: 'No Particles',
  283.             enable: function() {
  284.                 this.spawnEmitter = CSceneGame.prototype.SpawnEmitter;
  285.                 CSceneGame.prototype.SpawnEmitter = function() {};
  286.             },
  287.             disable: function() {
  288.                 CSceneGame.prototype.SpawnEmitter = this.spawnEmitter;
  289.             }
  290.         },
  291.         nodmgtext: {
  292.             name: 'No Damage Text',
  293.             enable: function(towerattack) {
  294.                 towerattack.hooks.doClickEffect.showText = false;
  295.                 towerattack.hooks.doCritEffect.showText = false;
  296.             },
  297.             disable: function(towerattack) {
  298.                 towerattack.hooks.doClickEffect.showText = true;
  299.                 towerattack.hooks.doCritEffect.showText = true;
  300.             }
  301.         }
  302.     },
  303.     toggleModule: function(module) {
  304.         if (module.enabled === true) {
  305.             module.disable(this);
  306.             module.enabled = false;
  307.             module.button.addClass('cantafford').find('.upgrade_text').text('Enable');
  308.         } else {
  309.             module.enable(this);
  310.             module.enabled = true;
  311.             module.button.removeClass('cantafford').find('.upgrade_text').text('Disable');
  312.         }
  313.     },
  314.     addModuleToggle: function(module) {
  315.         if (module.button) return;
  316.  
  317.         var that = this;
  318.         var $ = window.jQuery;
  319.  
  320.         $('#opl-helper-settings').append(
  321.             (module.button = $('<div>').addClass(module.enabled ? '' : 'cantafford').append(
  322.                 $('<div class="upgrade purchase">').append(
  323.                     $('<div class="info">').append(
  324.                         $('<div>').append(
  325.                             $('<div class="name">').text(module.name)
  326.                         )
  327.                     )
  328.                 ).append(
  329.                     $('<a class="link" href="#">').on('click', function(e) {
  330.                         e.preventDefault();
  331.                         that.toggleModule(module);
  332.                     }).append(
  333.                         $('<span>').append(
  334.                             $('<span class="upgrade_text">').text(module.enabled ? 'Disable' : 'Enable')
  335.                         )
  336.                     )
  337.                 )
  338.             ))
  339.         );
  340.     },
  341.     end: function() {
  342.         for (var k in this.modules) if (this.modules[k].enabled) this.modules[k].disable(this);
  343.         for (var k in this.hooks) this.hooks[k].unhook();
  344.         jQuery('#opl-helper-settingslabel,#opl-helper-settings').remove();
  345.     }
  346. };
  347.  
  348. window.opl.towerattack.init();
  349.  
  350. /*
  351. function opl_click() {
  352.     if (g_Minigame.m_CurrentScene.m_rgPlayerData.hp <= 0 || !g_Minigame.m_CurrentScene.m_rgGameData) {
  353.         if (new Date().getTime() - g_Minigame.m_CurrentScene.m_rgPlayerData.time_died > 5000) RespawnPlayer();
  354.         return setTimeout(opl_click, 2000);
  355.     }
  356.  
  357.     var enemy = g_Minigame.m_CurrentScene.GetEnemy(g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane, g_Minigame.m_CurrentScene.m_rgPlayerData.target);
  358.     if (!enemy || enemy.m_data.hp <= 0) return setTimeout(opl_click, 200);
  359.  
  360.     g_Minigame.m_CurrentScene.m_nClicks = ~~(Math.random() * 6 + 39) - (~~(Math.random() * 1.1) * 3);
  361.  
  362.     var nClickGoldPct = g_Minigame.m_CurrentScene.m_rgGameData.lanes[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane].active_player_ability_gold_per_click;
  363.     if (nClickGoldPct > 0 && enemy.m_data.hp > 0) {
  364.         var nClickGold = enemy.m_data.gold * nClickGoldPct * g_Minigame.m_CurrentScene.m_nClicks;
  365.         g_Minigame.m_CurrentScene.ClientOverride('player_data', 'gold', g_Minigame.m_CurrentScene.m_rgPlayerData.gold + nClickGold);
  366.         g_Minigame.m_CurrentScene.ApplyClientOverrides('player_data', true);
  367.     }
  368.  
  369.     for (var c = 0; c < g_Minigame.m_CurrentScene.m_nClicks; c++) g_Minigame.m_CurrentScene.CalculateDamage(g_Minigame.m_CurrentScene.m_rgPlayerTechTree.damage_per_click, g_Minigame.m_CurrentScene.m_rgGameData.lanes[g_Minigame.m_CurrentScene.m_rgPlayerData.current_lane].element)
  370.  
  371.     if (g_Minigame.m_CurrentScene.m_rgStoredCrits.length > 0) {
  372.         var rgDamage = g_Minigame.m_CurrentScene.m_rgStoredCrits.splice(0,1);
  373.         g_Minigame.m_CurrentScene.DoCritEffect(rgDamage[0], parseInt(enemy.m_HealthBar.m_nLastPositionX), parseInt(enemy.m_HealthBar.m_nLastPositionY), 'Crit!');
  374.     }
  375.  
  376.     if (opl_c) setTimeout(opl_click, 1000)
  377. }
  378. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement