• Оплата через QIWI больше недоступна (возможно временно)

Полезность для игры на распродаже Steam

Broccoli

Проверенный
Забанен
Регистрация
10 Окт 2016
Сообщения
95
Реакции
43
Баллы
18
Возраст
25
Информация для игры на распродаже: заходите через браузер, открываете консоль (в опере пкм>Просмотреть код элемента>Console) и перед боем - пишете туда: CEnemyManager.prototype.BuildEnemy = function(){};
Мобы пропадут, и можно в течении нескольких минут заниматься своими делами, не утруждая себя закликиванием мобов. Очки дают просто за прожитое время. Наличие мобов на получение очков не влияет. Нет мобов - нет возможности умереть, а значит - халявный фарм.
Способ был найден в свободном доступе, выложу сюда, мб кому-нибудь пригодится.
 

NoName

Бывалый малый
Регистрация
5 Янв 2018
Сообщения
114
Реакции
160
Баллы
43
Возраст
103
Спасибо

UPD: Можно и более честным (тоже читерским) путём пойти:

setInterval(() => gGame.m_State.m_EnemyManager.m_rgEnemies.forEach(enemy => enemy.Die(true)), 1000);

Убивает всех мобов каждую секунду
 
Последнее редактирование:
  • Like
Реакции: /Ice/Storm/

Alekcan

Бывалый малый
Регистрация
23 Дек 2017
Сообщения
117
Реакции
98
Баллы
43
Адрес
Ukraine
Еще вот так можно, но если изменить очки, то выбьет под конец игры и их все равно не дадут:
- Установить кол-во хп:
gGame.m_State.m_PlayerHealth = 1000000;
- Установить кол-во убитых врагов:
gGame.m_State.m_EnemyManager.m_nDefeatedEnemies = 99999999;
- Установить счёт:
gGame.m_State.m_Score = 9999999;
- Закончить игру:
gGame.m_State.m_rtBattleEnd = Date.now();
- Бесконечный раунд:
gGame.m_State.m_rtBattleEnd = Date.now() + 100000000000000000;
- Установить имбо psycho оружие:
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.speed = 9999;
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.cooldown = 0;
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.damage = 99999;
Бот для автоматической игры:
Код:
(function(context) {
const pixi = gApp;
const GAME = gGame;
const SERVER = gServer;
const SetMouse = function SetMouse(x, y) { pixi.renderer.plugins.interaction.mouse.global.x = x; pixi.renderer.plugins.interaction.mouse.global.y = y;
}
const EnemyManager = function EnemyManager() { return GAME.m_State.m_EnemyManager;
}
const AttackManager = function AttackManager() { return GAME.m_State.m_AttackManager;
}
const TryContinue = function Continue() { let continued = false; if (GAME.m_State.m_VictoryScreen) { GAME.m_State.m_VictoryScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State.m_LevelUpScreen) { continued = false; GAME.m_State.m_LevelUpScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } return continued;
}
const CLICKS_PER_SECOND = 10;
const InGame = function InGame() { return GAME.m_State.m_bRunning;
}
const InZoneSelect = function InZoneSelect() { return GAME.m_State instanceof CBattleSelectionState;
}
const WORST_SCORE = -1 / 0;
const START_POS = pixi.renderer.width;
let isJoining = false;
const EnemySpeed = function EnemySpeed(enemy) { return enemy.m_Sprite.vx;
}
const EnemyDistance = function EnemyDistance(enemy) { return (enemy.m_Sprite.x - k_nDamagePointx) / (START_POS - k_nDamagePointx);
}
class Attack { constructor() { this.nextAttackDelta = 0; } shouldAttack(delta) { throw new Error("shouldAttack not implemented"); } process(enemies) { throw new Error("process not implemented"); }
}
class ClickAttack extends Attack { shouldAttack(delta) { this.nextAttackDelta -= delta; return this.nextAttackDelta <= 0;; } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return 1 - EnemyDistance(enemy); } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target); } attack(enemy) { enemy.m_Sprite.click(); this.nextAttackDelta = 1 / CLICKS_PER_SECOND; }
}
class SpecialAttack extends Attack { getCurrent() { if (gSalien.m_BodyType == "slime") return "slimeattack"; else if (gSalien.m_BodyType == "beast") return "beastattack"; else return "psychicattack"; } getData() { return AttackManager().m_AttackData[this.getCurrent()]; } shouldAttack(delta) { let Manager = AttackManager().m_mapCooldowns.get(this.getCurrent()); let lastUsed = Manager.m_rtAttackLastUsed; let canAttack = Manager.BAttack(); Manager.m_rtAttackLastUsed = lastUsed; return canAttack } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return enemy.m_nHealth; } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target.m_Sprite.x, target.m_Sprite.y); } attack(x, y) { SetMouse(x, y) AttackManager().m_mapKeyCodeToAttacks.get(this.getData().keycode)() }
}
let attacks = [ new ClickAttack(), new SpecialAttack()
]
if (context.BOT_FUNCTION) { pixi.ticker.remove(context.BOT_FUNCTION); context.BOT_FUNCTION = undefined;
}
context.BOT_FUNCTION = function ticker(delta) { delta /= 100; if(GAME.m_IsStateLoading) { return; } if (InZoneSelect()) { if (context.lastZoneIndex !== undefined && !isJoining) { isJoining = true; SERVER.JoinZone( lastZoneIndex, function ( results ) { gGame.ChangeState( new CBattleState( GAME.m_State.m_PlanetData, context.lastZoneIndex ) ); }, GameLoadError ); return; } } if (!InGame()) { if (TryContinue()) { console.log("continued!"); } return; } isJoining = false; context.lastZoneIndex = GAME.m_State.m_unZoneIndex; let state = EnemyManager(); let enemies = state.m_rgEnemies; for (let attack of attacks) if (attack.shouldAttack(delta)) attack.process(enemies);
}
pixi.ticker.add(context.BOT_FUNCTION);
})(window);
 

Spirit_VoLk

Любитель жаловаться по любому поводу..
Участник
Регистрация
7 Май 2015
Сообщения
431
Реакции
488
Баллы
63
Адрес
Parts Unknown
Еще вот так можно, но если изменить очки, то выбьет под конец игры и их все равно не дадут:
- Установить кол-во хп:
gGame.m_State.m_PlayerHealth = 1000000;
- Установить кол-во убитых врагов:
gGame.m_State.m_EnemyManager.m_nDefeatedEnemies = 99999999;
- Установить счёт:
gGame.m_State.m_Score = 9999999;
- Закончить игру:
gGame.m_State.m_rtBattleEnd = Date.now();
- Бесконечный раунд:
gGame.m_State.m_rtBattleEnd = Date.now() + 100000000000000000;
- Установить имбо psycho оружие:
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.speed = 9999;
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.cooldown = 0;
gGame.m_State.m_AttackManager.m_AttackData.psychicattack.damage = 99999;
Бот для автоматической игры:
Код:
(function(context) {
const pixi = gApp;
const GAME = gGame;
const SERVER = gServer;
const SetMouse = function SetMouse(x, y) { pixi.renderer.plugins.interaction.mouse.global.x = x; pixi.renderer.plugins.interaction.mouse.global.y = y;
}
const EnemyManager = function EnemyManager() { return GAME.m_State.m_EnemyManager;
}
const AttackManager = function AttackManager() { return GAME.m_State.m_AttackManager;
}
const TryContinue = function Continue() { let continued = false; if (GAME.m_State.m_VictoryScreen) { GAME.m_State.m_VictoryScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State.m_LevelUpScreen) { continued = false; GAME.m_State.m_LevelUpScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } return continued;
}
const CLICKS_PER_SECOND = 10;
const InGame = function InGame() { return GAME.m_State.m_bRunning;
}
const InZoneSelect = function InZoneSelect() { return GAME.m_State instanceof CBattleSelectionState;
}
const WORST_SCORE = -1 / 0;
const START_POS = pixi.renderer.width;
let isJoining = false;
const EnemySpeed = function EnemySpeed(enemy) { return enemy.m_Sprite.vx;
}
const EnemyDistance = function EnemyDistance(enemy) { return (enemy.m_Sprite.x - k_nDamagePointx) / (START_POS - k_nDamagePointx);
}
class Attack { constructor() { this.nextAttackDelta = 0; } shouldAttack(delta) { throw new Error("shouldAttack not implemented"); } process(enemies) { throw new Error("process not implemented"); }
}
class ClickAttack extends Attack { shouldAttack(delta) { this.nextAttackDelta -= delta; return this.nextAttackDelta <= 0;; } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return 1 - EnemyDistance(enemy); } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target); } attack(enemy) { enemy.m_Sprite.click(); this.nextAttackDelta = 1 / CLICKS_PER_SECOND; }
}
class SpecialAttack extends Attack { getCurrent() { if (gSalien.m_BodyType == "slime") return "slimeattack"; else if (gSalien.m_BodyType == "beast") return "beastattack"; else return "psychicattack"; } getData() { return AttackManager().m_AttackData[this.getCurrent()]; } shouldAttack(delta) { let Manager = AttackManager().m_mapCooldowns.get(this.getCurrent()); let lastUsed = Manager.m_rtAttackLastUsed; let canAttack = Manager.BAttack(); Manager.m_rtAttackLastUsed = lastUsed; return canAttack } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return enemy.m_nHealth; } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target.m_Sprite.x, target.m_Sprite.y); } attack(x, y) { SetMouse(x, y) AttackManager().m_mapKeyCodeToAttacks.get(this.getData().keycode)() }
}
let attacks = [ new ClickAttack(), new SpecialAttack()
]
if (context.BOT_FUNCTION) { pixi.ticker.remove(context.BOT_FUNCTION); context.BOT_FUNCTION = undefined;
}
context.BOT_FUNCTION = function ticker(delta) { delta /= 100; if(GAME.m_IsStateLoading) { return; } if (InZoneSelect()) { if (context.lastZoneIndex !== undefined && !isJoining) { isJoining = true; SERVER.JoinZone( lastZoneIndex, function ( results ) { gGame.ChangeState( new CBattleState( GAME.m_State.m_PlanetData, context.lastZoneIndex ) ); }, GameLoadError ); return; } } if (!InGame()) { if (TryContinue()) { console.log("continued!"); } return; } isJoining = false; context.lastZoneIndex = GAME.m_State.m_unZoneIndex; let state = EnemyManager(); let enemies = state.m_rgEnemies; for (let attack of attacks) if (attack.shouldAttack(delta)) attack.process(enemies);
}
pixi.ticker.add(context.BOT_FUNCTION);
})(window);
Зачем кидать старую версию кода который обновляется каждый час, ещё и без указания автора...

Ссылки на гитхаб у нас, не запрещены.
 

Broccoli

Проверенный
Забанен
Регистрация
10 Окт 2016
Сообщения
95
Реакции
43
Баллы
18
Возраст
25
Еще один код, похожий на тот, что давали выше. Запуск тот же, что и в первом скрипте.
Для полноценной работы нужен Tampermonkey. Можете найти в магазине расширений. Ничего плохого этот Tampermonkey не делает, он лишь нужен для работы ваших скриптов.
Код:
// ==UserScript==
if (typeof GM_info !== "undefined" && (GM_info.scriptHandler || "Greasemonkey") == "Greasemonkey") { alert("It's not possible to support Greasemonkey, please try Tampermonkey or ViolentMonkey.");
}
(function(context) {
"use strict";
CSalien.prototype.UpdateCustomizations = function()
{ this.SetBodyType(BODY_TYPES[gSalienData.body_type]); this.LoadAttachments();
}
const APP = context.gApp;
const GAME = context.gGame;
const SERVER = context.gServer;
const PIXI = context.PIXI;
const Option = function Option(name, def) { if (window.localStorage[name] === undefined) { context.localStorage[name] = def; } return context.localStorage[name];
}
Option("forceLevellingMode", false);
const SetMouse = function SetMouse(x, y) { APP.renderer.plugins.interaction.mouse.global.x = x; APP.renderer.plugins.interaction.mouse.global.y = y;
}
const EnemyManager = function EnemyManager() { return GAME.m_State.m_EnemyManager;
}
const AttackManager = function AttackManager() { return GAME.m_State.m_AttackManager;
}
let isJoining = false;
const TryContinue = function TryContinue() { let continued = false; if (GAME.m_State.m_VictoryScreen) { GAME.m_State.m_VictoryScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State.m_LevelUpScreen) { continued = false; GAME.m_State.m_LevelUpScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State instanceof CBootState) { // First screen gGame.m_State.button.click(); } if (GAME.m_State instanceof CPlanetSelectionState && !isJoining) { // Planet Selectiong GAME.m_State.m_rgPlanetSprites[0].click(); isJoining = true; setTimeout(() => isJoining = false, 1000); continued = true; } if (GAME.m_State instanceof CBattleSelectionState && !isJoining) { let bestZoneIdx = GetBestZone(); if(bestZoneIdx) { console.log(GAME.m_State.m_SalienInfoBox.m_LevelText.text, GAME.m_State.m_SalienInfoBox.m_XPValueText.text); console.log("join to zone", bestZoneIdx); isJoining = true; SERVER.JoinZone( bestZoneIdx, (results) => { GAME.ChangeState(new CBattleState(GAME.m_State.m_PlanetData, bestZoneIdx)); isJoining = false; console.log(results); }, () => { console.log("fail"); isJoining = false; } ); } console.log(bestZoneIdx); return; } return continued;
}
const CanAttack = function CanAttack(attackname) { let Manager = AttackManager().m_mapCooldowns.get(attackname); let lastUsed = Manager.m_rtAttackLastUsed; let canAttack = Manager.BAttack(); Manager.m_rtAttackLastUsed = lastUsed; return canAttack;
}
const GetBestZone = function GetBestZone() { let bestZoneIdx; let highestDifficulty = -1; let isLevelling = context.gPlayerInfo.level < 9 || Option("forceLevellingMode"); let maxProgress = isLevelling ? 10000 : 0; for (let idx = 0; idx < GAME.m_State.m_Grid.m_Tiles.length; idx++) { let zone = GAME.m_State.m_Grid.m_Tiles[idx].Info; if (!zone.captured) { if (zone.boss) { console.log(`zone ${idx} (${bestZoneIdx % k_NumMapTilesW}, ${(bestZoneIdx / k_NumMapTilesW) | 0}) with boss`); return idx; } if(isLevelling) { if(zone.difficulty > highestDifficulty) { highestDifficulty = zone.difficulty; maxProgress = zone.progress; bestZoneIdx = idx; } else if(zone.difficulty < highestDifficulty) continue; if(zone.progress < maxProgress) { maxProgress = zone.progress; bestZoneIdx = idx; } } else { if(zone.progress > maxProgress) { maxProgress = zone.progress; bestZoneIdx = idx; } } } } if(bestZoneIdx !== undefined) { console.log(`${GAME.m_State.m_PlanetData.state.name} zone ${bestZoneIdx} (${bestZoneIdx % k_NumMapTilesW}, ${(bestZoneIdx / k_NumMapTilesW) | 0}) progress: ${GAME.m_State.m_Grid.m_Tiles[bestZoneIdx].Info.progress} difficulty: ${GAME.m_State.m_Grid.m_Tiles[bestZoneIdx].Info.difficulty}`); } return bestZoneIdx;
}
const GetBestPlanet = function GetBestPlanet() { let bestPlanet; let maxProgress = 0; if (!GAME.m_State.m_mapPlanets) return; for (let planetKV of GAME.m_State.m_mapPlanets) { let planet = planetKV[1]; if(planet.state.active && !planet.state.captured && planet.state.capture_progress > maxProgress) { maxProgress = planet.state.capture_progress; bestPlanet = planet; } } if(bestPlanet) { console.log(`selecting planet ${bestPlanet.state.name} with progress: ${bestPlanet.state.capture_progress}`); return bestPlanet.id; }
}
const CLICKS_PER_SECOND = 15;
const InGame = function InGame() { return GAME.m_State.m_bRunning;
}
const WORST_SCORE = -1 / 0;
const START_POS = APP.renderer.width;
const EnemySpeed = function EnemySpeed(enemy) { return enemy.m_Sprite.vx;
}
const EnemyDistance = function EnemyDistance(enemy) { return (enemy.m_Sprite.x - k_nDamagePointx) / (START_POS - k_nDamagePointx);
}
const EnemyCenter = function EnemyCenter(enemy) { return [ enemy.m_Sprite.x + enemy.m_Sprite.width / 2, enemy.m_Sprite.y + enemy.m_Sprite.height / 2 ];
}
class Attack { constructor() { this.nextAttackDelta = 0; } shouldAttack(delta, enemies) { throw new Error("shouldAttack not implemented"); } process(enemies) { throw new Error("process not implemented"); } getAttackName() { throw new Error("no current attack name"); } canAttack() { return CanAttack(this.getAttackName()); } getAttackData() { return AttackManager().m_AttackData[this.getAttackName()]; }
}
class ClickAttack extends Attack { shouldAttack(delta) { if (GAME.m_State.m_PlayerHealth <= 0) return false; this.nextAttackDelta -= delta; return this.nextAttackDelta <= 0;; } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return 1 - EnemyDistance(enemy); } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target); } attack(enemy) { enemy.m_Sprite.click(); this.nextAttackDelta = 1 / CLICKS_PER_SECOND; }
}
class ProjectileAttack extends Attack { shouldAttack(delta) { return CanAttack(this.getAttackName()); } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return enemy.m_nHealth; } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack.apply(this, EnemyCenter(target)); } attack(x, y) { SetMouse(x, y) AttackManager().m_mapKeyCodeToAttacks.get(this.getAttackData().keycode)() }
}
class SpecialAttack extends ProjectileAttack { getAttackName() { if (gSalien.m_BodyType == "slime") return "slimeattack"; else if (gSalien.m_BodyType == "beast") return "beastattack"; else return "psychicattack"; }
}
class BombAttack extends ProjectileAttack { getAttackName() { return "explosion"; }
}
class BlackholeAttack extends ProjectileAttack { getAttackName() { return "blackhole"; }
}
class FreezeAttack extends Attack { getCurrent() { return "flashfreeze"; } shouldAttack(delta, enemies) { let shouldAttack = false; if (CanAttack(this.getCurrent())) { enemies.forEach((enemy) => { if (EnemyDistance(enemy) <= 0.05) { shouldAttack = true; } }); } return shouldAttack; } getData() { return AttackManager().m_AttackData[this.getCurrent()]; } process() { AttackManager().m_mapKeyCodeToAttacks.get(this.getData().keycode)() }
}
let attacks = [ new ClickAttack(), new SpecialAttack(), new FreezeAttack(), new BombAttack(), new BlackholeAttack()
]
if (context.BOT_FUNCTION) { APP.ticker.remove(context.BOT_FUNCTION); context.BOT_FUNCTION = undefined;
}
let reloadingPage = false;
context.BOT_FUNCTION = function ticker(delta) { delta /= 100; let difficulties = PIXI.loader.resources['level_config']; if (difficulties) for (let difficulty in difficulties.data) { let freq = difficulties.data[difficulty].enemies.spawn_frequency; freq.min = freq.max; } let buttonsOnErrorMessage = document.getElementsByClassName("btn_grey_white_innerfade btn_medium"); if(buttonsOnErrorMessage[0] != null) { if (!reloadingPage) { setTimeout(() => buttonsOnErrorMessage[0].click(), 1000); } return; } if(GAME.m_IsStateLoading || !context.gPlayerInfo) { return; } if (!InGame()) { if (TryContinue()) { console.log("continued!"); } return; } let state = EnemyManager(); let enemies = state.m_rgEnemies; for (let attack of attacks) if (attack.shouldAttack(delta, enemies)) attack.process(enemies);
}
APP.ticker.add(context.BOT_FUNCTION);
})(window);

исходник здесь. Может обновляться:
p.s. еще инфа, если вечно перезапускается игра: попробуйте вынести её в отдельную вкладку, в браузере.
Вот пример, как должно быть:
PY6962S.png
 
Последнее редактирование:

Spirit_VoLk

Любитель жаловаться по любому поводу..
Участник
Регистрация
7 Май 2015
Сообщения
431
Реакции
488
Баллы
63
Адрес
Parts Unknown
Еще один код, похожий на тот, что давали выше. Запуск тот же, что и в первом скрипте.
Код:
// ==UserScript==
if (typeof GM_info !== "undefined" && (GM_info.scriptHandler || "Greasemonkey") == "Greasemonkey") { alert("It's not possible to support Greasemonkey, please try Tampermonkey or ViolentMonkey.");
}
(function(context) {
"use strict";
CSalien.prototype.UpdateCustomizations = function()
{ this.SetBodyType(BODY_TYPES[gSalienData.body_type]); this.LoadAttachments();
}
const APP = context.gApp;
const GAME = context.gGame;
const SERVER = context.gServer;
const PIXI = context.PIXI;
const Option = function Option(name, def) { if (window.localStorage[name] === undefined) { context.localStorage[name] = def; } return context.localStorage[name];
}
Option("forceLevellingMode", false);
const SetMouse = function SetMouse(x, y) { APP.renderer.plugins.interaction.mouse.global.x = x; APP.renderer.plugins.interaction.mouse.global.y = y;
}
const EnemyManager = function EnemyManager() { return GAME.m_State.m_EnemyManager;
}
const AttackManager = function AttackManager() { return GAME.m_State.m_AttackManager;
}
let isJoining = false;
const TryContinue = function TryContinue() { let continued = false; if (GAME.m_State.m_VictoryScreen) { GAME.m_State.m_VictoryScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State.m_LevelUpScreen) { continued = false; GAME.m_State.m_LevelUpScreen.children.forEach(function(child) { if (child.visible && child.x == 155 && child.y == 300) {// TODO: not this continued = true; child.click(); } }) } if (GAME.m_State instanceof CBootState) { // First screen gGame.m_State.button.click(); } if (GAME.m_State instanceof CPlanetSelectionState && !isJoining) { // Planet Selectiong GAME.m_State.m_rgPlanetSprites[0].click(); isJoining = true; setTimeout(() => isJoining = false, 1000); continued = true; } if (GAME.m_State instanceof CBattleSelectionState && !isJoining) { let bestZoneIdx = GetBestZone(); if(bestZoneIdx) { console.log(GAME.m_State.m_SalienInfoBox.m_LevelText.text, GAME.m_State.m_SalienInfoBox.m_XPValueText.text); console.log("join to zone", bestZoneIdx); isJoining = true; SERVER.JoinZone( bestZoneIdx, (results) => { GAME.ChangeState(new CBattleState(GAME.m_State.m_PlanetData, bestZoneIdx)); isJoining = false; console.log(results); }, () => { console.log("fail"); isJoining = false; } ); } console.log(bestZoneIdx); return; } return continued;
}
const CanAttack = function CanAttack(attackname) { let Manager = AttackManager().m_mapCooldowns.get(attackname); let lastUsed = Manager.m_rtAttackLastUsed; let canAttack = Manager.BAttack(); Manager.m_rtAttackLastUsed = lastUsed; return canAttack;
}
const GetBestZone = function GetBestZone() { let bestZoneIdx; let highestDifficulty = -1; let isLevelling = context.gPlayerInfo.level < 9 || Option("forceLevellingMode"); let maxProgress = isLevelling ? 10000 : 0; for (let idx = 0; idx < GAME.m_State.m_Grid.m_Tiles.length; idx++) { let zone = GAME.m_State.m_Grid.m_Tiles[idx].Info; if (!zone.captured) { if (zone.boss) { console.log(`zone ${idx} (${bestZoneIdx % k_NumMapTilesW}, ${(bestZoneIdx / k_NumMapTilesW) | 0}) with boss`); return idx; } if(isLevelling) { if(zone.difficulty > highestDifficulty) { highestDifficulty = zone.difficulty; maxProgress = zone.progress; bestZoneIdx = idx; } else if(zone.difficulty < highestDifficulty) continue; if(zone.progress < maxProgress) { maxProgress = zone.progress; bestZoneIdx = idx; } } else { if(zone.progress > maxProgress) { maxProgress = zone.progress; bestZoneIdx = idx; } } } } if(bestZoneIdx !== undefined) { console.log(`${GAME.m_State.m_PlanetData.state.name} zone ${bestZoneIdx} (${bestZoneIdx % k_NumMapTilesW}, ${(bestZoneIdx / k_NumMapTilesW) | 0}) progress: ${GAME.m_State.m_Grid.m_Tiles[bestZoneIdx].Info.progress} difficulty: ${GAME.m_State.m_Grid.m_Tiles[bestZoneIdx].Info.difficulty}`); } return bestZoneIdx;
}
const GetBestPlanet = function GetBestPlanet() { let bestPlanet; let maxProgress = 0; if (!GAME.m_State.m_mapPlanets) return; for (let planetKV of GAME.m_State.m_mapPlanets) { let planet = planetKV[1]; if(planet.state.active && !planet.state.captured && planet.state.capture_progress > maxProgress) { maxProgress = planet.state.capture_progress; bestPlanet = planet; } } if(bestPlanet) { console.log(`selecting planet ${bestPlanet.state.name} with progress: ${bestPlanet.state.capture_progress}`); return bestPlanet.id; }
}
const CLICKS_PER_SECOND = 15;
const InGame = function InGame() { return GAME.m_State.m_bRunning;
}
const WORST_SCORE = -1 / 0;
const START_POS = APP.renderer.width;
const EnemySpeed = function EnemySpeed(enemy) { return enemy.m_Sprite.vx;
}
const EnemyDistance = function EnemyDistance(enemy) { return (enemy.m_Sprite.x - k_nDamagePointx) / (START_POS - k_nDamagePointx);
}
const EnemyCenter = function EnemyCenter(enemy) { return [ enemy.m_Sprite.x + enemy.m_Sprite.width / 2, enemy.m_Sprite.y + enemy.m_Sprite.height / 2 ];
}
class Attack { constructor() { this.nextAttackDelta = 0; } shouldAttack(delta, enemies) { throw new Error("shouldAttack not implemented"); } process(enemies) { throw new Error("process not implemented"); } getAttackName() { throw new Error("no current attack name"); } canAttack() { return CanAttack(this.getAttackName()); } getAttackData() { return AttackManager().m_AttackData[this.getAttackName()]; }
}
class ClickAttack extends Attack { shouldAttack(delta) { if (GAME.m_State.m_PlayerHealth <= 0) return false; this.nextAttackDelta -= delta; return this.nextAttackDelta <= 0;; } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return 1 - EnemyDistance(enemy); } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack(target); } attack(enemy) { enemy.m_Sprite.click(); this.nextAttackDelta = 1 / CLICKS_PER_SECOND; }
}
class ProjectileAttack extends Attack { shouldAttack(delta) { return CanAttack(this.getAttackName()); } score(enemy) { if (enemy.m_bDead) return WORST_SCORE; return enemy.m_nHealth; } process(enemies) { let target, target_score = WORST_SCORE; enemies.forEach((enemy) => { if (!enemy.m_Sprite.visible) return; let now_score = this.score(enemy); if (now_score > target_score) { target = enemy, target_score = now_score; } }); if (target) this.attack.apply(this, EnemyCenter(target)); } attack(x, y) { SetMouse(x, y) AttackManager().m_mapKeyCodeToAttacks.get(this.getAttackData().keycode)() }
}
class SpecialAttack extends ProjectileAttack { getAttackName() { if (gSalien.m_BodyType == "slime") return "slimeattack"; else if (gSalien.m_BodyType == "beast") return "beastattack"; else return "psychicattack"; }
}
class BombAttack extends ProjectileAttack { getAttackName() { return "explosion"; }
}
class BlackholeAttack extends ProjectileAttack { getAttackName() { return "blackhole"; }
}
class FreezeAttack extends Attack { getCurrent() { return "flashfreeze"; } shouldAttack(delta, enemies) { let shouldAttack = false; if (CanAttack(this.getCurrent())) { enemies.forEach((enemy) => { if (EnemyDistance(enemy) <= 0.05) { shouldAttack = true; } }); } return shouldAttack; } getData() { return AttackManager().m_AttackData[this.getCurrent()]; } process() { AttackManager().m_mapKeyCodeToAttacks.get(this.getData().keycode)() }
}
let attacks = [ new ClickAttack(), new SpecialAttack(), new FreezeAttack(), new BombAttack(), new BlackholeAttack()
]
if (context.BOT_FUNCTION) { APP.ticker.remove(context.BOT_FUNCTION); context.BOT_FUNCTION = undefined;
}
let reloadingPage = false;
context.BOT_FUNCTION = function ticker(delta) { delta /= 100; let difficulties = PIXI.loader.resources['level_config']; if (difficulties) for (let difficulty in difficulties.data) { let freq = difficulties.data[difficulty].enemies.spawn_frequency; freq.min = freq.max; } let buttonsOnErrorMessage = document.getElementsByClassName("btn_grey_white_innerfade btn_medium"); if(buttonsOnErrorMessage[0] != null) { if (!reloadingPage) { setTimeout(() => buttonsOnErrorMessage[0].click(), 1000); } return; } if(GAME.m_IsStateLoading || !context.gPlayerInfo) { return; } if (!InGame()) { if (TryContinue()) { console.log("continued!"); } return; } let state = EnemyManager(); let enemies = state.m_rgEnemies; for (let attack of attacks) if (attack.shouldAttack(delta, enemies)) attack.process(enemies);
}
APP.ticker.add(context.BOT_FUNCTION);
})(window);

исходник здесь. Может обновляться:
Это он и есть, просто парень кинул старый код без исходников.

Стоит уточнить что код писался на JavaScript, и стабильно работает только через обезьян (tampermonkey, greasemonkey и тд)
 
  • Like
Реакции: Broccoli

<<TOXA>>

Главный флудер форума;)
Регистрация
12 Ноя 2015
Сообщения
1,479
Реакции
1,212
Баллы
113
А можно для совсем далекого - о чем вся тема и сообщения и что дают эти коды?
 

Broccoli

Проверенный
Забанен
Регистрация
10 Окт 2016
Сообщения
95
Реакции
43
Баллы
18
Возраст
25
Если кто использовал скрипт, и видели новость про возможный VAC-ban в некоторых группах - не переживайте, это фэйк.
Вот так, примерно, выглядит фэйк:
59fBYOPwh2U.jpg
Всё было несколько раз перепроверено, с разными людьми. Не у одного такой надписи нет, хотя скрипты использовались.
Вот пруфы:
unknown.png

unknown.png
 
  • Like
Реакции: NoName

NoName

Бывалый малый
Регистрация
5 Янв 2018
Сообщения
114
Реакции
160
Баллы
43
Возраст
103
Интересно, кто верил про VAC-ban :D

Встроить VAC защиту в браузерную игру это что то новое
 
  • Like
Реакции: Broccoli и - Pn.

Alekcan

Бывалый малый
Регистрация
23 Дек 2017
Сообщения
117
Реакции
98
Баллы
43
Адрес
Ukraine
Valve же не банят за баги всякие . Разве что в показательных целях , но это нужно чтобы пару человек заюзало дыру, а не сотни тысяч. Музыка в профиле через шмотку доты не банили никого, хотя в теории можно было много чего придумать с тем способом. Желтый ник кажись или рамка - тоже не банили. Значок разработчика игр просто отобрали и все .Игры с ошибкой в цене не отзывают (если не сотни копий для продажи куплено, уже не актуально). Даже не знаю кто мог предположить что они за бота в фармилке кого-то накажут. Да они даже за смену валюты не банят, можно спокойно на рубли перейти и не переплачивать, максимум вернут как было и пригрозят пальчиком, если верить в мифы .
 
Последнее редактирование: