alex120 escribió:Como has obtenido la insignia de salien de nivel 2??
Indajaus escribió:psyco752 escribió:han sacado algun script para lo del mini juego del alien?
https://www.reddit.com/r/Saliens/
melocotonera escribió:Pero esto que ehhhh Los mundos esos de Salien... ya están "cerradas" la mayoría de las casillas por el tema de los grupos grandes con scripts jugando.. y aún no ha pasado ni 1 día :S Que desastre no?? Todos ya reclamados... vaya mierda mas grande
Chun-Li escribió:Yo me he dejado 30€ por 8 juegos
T-elos escribió:ya me he gastado 45 napos, la mayoria en juegos de sonic y otroas cosas y en los figthing games estoy esperando a ver si hacen algun bundle pero huele que me gastare 70 pavos mas, cuando me llegue la gpd win 2 le voy a prender fuego!!!
evilkainn_ escribió:The Evil Within 4.99€
https://store.steampowered.com/sub/65812/
Si lo quieres con todos los DLCs 12.49€
Alejandro_Tomas escribió:evilkainn_ escribió:The Evil Within 4.99€
https://store.steampowered.com/sub/65812/
Si lo quieres con todos los DLCs 12.49€
Carete, no?
Llevo detrás de estos y los Dishonored mucho tiempo, pero tela con los precios para tener tanto años ya.
Ismsanmar escribió:@Chun-Li @melocotonera Lo suyo es que os vayáis metiendo en el planeta que tenga los juegos que os interesan. Lo que cuenta para el sorteo es el tiempo que paséis en el planeta hasta que se conquista, y haber realizado al menos una batalla. Mientras que no este reclamada da igual la casilla y los que estén participando en la conquista de la misma, hasta que no se llene la barrita blanca podéis participar en cualquiera.
Para que os suelten los cromos diarios si que tendréis que hacer más de una batalla.
Silverquick85 escribió:
se me abre un enlace para subir imagenes
exitfor escribió:Chun-Li escribió:Yo me he dejado 30€ por 8 juegos
Cuáles has pillado?
polnuman escribió:vaya perdida de tiempo l odel juego del alien, con loss cripts de medio mundo ya ni se puede jugar para sacar cromos proque esta todo reclamado.
Maravilloso todo.
Aqui l odejo y que les den por culo.
polnuman escribió:vaya perdida de tiempo l odel juego del alien, con loss cripts de medio mundo ya ni se puede jugar para sacar cromos proque esta todo reclamado.
Maravilloso todo.
Aqui l odejo y que les den por culo.
melocotonera escribió:Ismsanmar escribió:@Chun-Li @melocotonera Lo suyo es que os vayáis metiendo en el planeta que tenga los juegos que os interesan. Lo que cuenta para el sorteo es el tiempo que paséis en el planeta hasta que se conquista, y haber realizado al menos una batalla. Mientras que no este reclamada da igual la casilla y los que estén participando en la conquista de la misma, hasta que no se llene la barrita blanca podéis participar en cualquiera.
Para que os suelten los cromos diarios si que tendréis que hacer más de una batalla.
Si, si entiendo como funciona... y no es por el sorteo del juego. Es por el tema de las insignias. Si los grupos arrasan durante 1 día con todas las casillas... ya no tendremos opción a poder subir de nivel con tranquilidad y obtener insignia, y tampoco cromos, ya que no podremos jugar. Eso es lo que me jode.
alex120 escribió:Ah, parece ser que el sorteo es casi inmediato.
Una vez se acaba el planeta se sortean los juegos.
Los ganadores del planeta pirata.
https://store.steampowered.com/prizes/w ... 6106807890
AlexRow escribió:alex120 escribió:Ah, parece ser que el sorteo es casi inmediato.
Una vez se acaba el planeta se sortean los juegos.
Los ganadores del planeta pirata.
https://store.steampowered.com/prizes/w ... 6106807890
¿Y donde anuncian esos gandores? más que nada para enterarme de cuando dan los ganadores en los otros planetas para entonces cambiarse de planeta.
Ismsanmar escribió:melocotonera escribió:Ismsanmar escribió:@Chun-Li @melocotonera Lo suyo es que os vayáis metiendo en el planeta que tenga los juegos que os interesan. Lo que cuenta para el sorteo es el tiempo que paséis en el planeta hasta que se conquista, y haber realizado al menos una batalla. Mientras que no este reclamada da igual la casilla y los que estén participando en la conquista de la misma, hasta que no se llene la barrita blanca podéis participar en cualquiera.
Para que os suelten los cromos diarios si que tendréis que hacer más de una batalla.
Si, si entiendo como funciona... y no es por el sorteo del juego. Es por el tema de las insignias. Si los grupos arrasan durante 1 día con todas las casillas... ya no tendremos opción a poder subir de nivel con tranquilidad y obtener insignia, y tampoco cromos, ya que no podremos jugar. Eso es lo que me jode.
Subir la insignia del salien sin un bot es un "suicidio" y una perdida de tiempo. El calculo esta en creo que 20 horas seguidas hasta llegar al nivel 10 jugando todo el tiempo en las pantallas difíciles, y hay mas... Mira, entra en un planeta, dale en el teclado a F12, le das a la pestaña Console y pegas este código: https://github.com/meepen/salien-bot/bl ... ex.user.js en la consola y le das a intro. Sin instalar ni programas ni extensiones.
Alguna vez que otra tendrás que darle un vistazo por si se producen errores. Pero es volver a entrar al juego, pegar de nuevo e intro.
Necrofero escribió:PepeAlboroto escribió:¿Cómo se sube la insignia de rango Salien? ¿Subiendo cada cierto nivel del Salien?
Según he leído por ahí, al llegar al lvl 6 te dan la insignia de rango 2. Quizás el lvl 10 sea rango 3.
A mi no me aparece esa insignia. Es jugando solo?
PepeAlboroto escribió:Así es. Si llegas en el juego al lvl 2, insignia de rango 1.
lvl 6, insignia de rango 2.
lvl 9, insignia de rango 3.
Y no sé si hay más, pero me imagino que no.
Medu75 escribió:PepeAlboroto escribió:Así es. Si llegas en el juego al lvl 2, insignia de rango 1.
lvl 6, insignia de rango 2.
lvl 9, insignia de rango 3.
Y no sé si hay más, pero me imagino que no.
Hay hasta rango 6
https://www.reddit.com/r/salien/comment ... knowledge/
Vamos que tienes que vivir en el juego si eso
PepeAlboroto escribió:Medu75 escribió:PepeAlboroto escribió:Así es. Si llegas en el juego al lvl 2, insignia de rango 1.
lvl 6, insignia de rango 2.
lvl 9, insignia de rango 3.
Y no sé si hay más, pero me imagino que no.
Hay hasta rango 6
https://www.reddit.com/r/salien/comment ... knowledge/
Vamos que tienes que vivir en el juego si eso
Gracias por la info. En ese caso, no voy a tener más remedio que usar el script hasta en la cuenta principal. Porque si subir al lvl 6 en el juego (insignia de rango 2) son 30.000 puntos de experiencia y cuesta la vida, no me quiero ni imaginar lo que sería subir a mano la insignia de rango 6, que sería el lvl 18 del juego o más.
Ismsanmar escribió:@PepeAlboroto En cuanto recargues la pagina desaparece. Y no, lo siento, no se como pausarlo.
@ivanjmg Como dije en mi post, tienes que estar dentro de un planeta, donde la cuadricula, y luego aplicar el bot.
// ==UserScript==
// @name Saliens bot
// @namespace http://tampermonkey.net/
// @version 15
// @description Beat all the saliens levels
// @author https://github.com/meepen/salien-bot
// @match https://steamcommunity.com/saliengame
// @match https://steamcommunity.com/saliengame/
// @match https://steamcommunity.com/saliengame/play
// @match https://steamcommunity.com/saliengame/play/
// @downloadURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @updateURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @grant none
// ==/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";
// when the error is fixed we should remove the following
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.****)
return;
for (let planetKV of GAME.m_State.****) {
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;
}
}
// Let's challenge ourselves to be human here!
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()];
}
}
// Basic clicking attack, attack closest
class ClickAttack extends Attack {
shouldAttack(delta) {
// Can't do basic attack when station is down
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)()
}
}
// the '1' button (SlimeAttack PsychicAttack BeastAttack - depends on body type of your salien)
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 MeteorAttack extends ProjectileAttack {
getAttackName() {
return "boulder";
}
}
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 MeteorAttack(),
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);
Ismsanmar escribió:@ivanjmg Tal vez porque es "este" código?:// ==UserScript==
// @name Saliens bot
// @namespace http://tampermonkey.net/
// @version 15
// @description Beat all the saliens levels
// @author https://github.com/meepen/salien-bot
// @match https://steamcommunity.com/saliengame
// @match https://steamcommunity.com/saliengame/
// @match https://steamcommunity.com/saliengame/play
// @match https://steamcommunity.com/saliengame/play/
// @downloadURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @updateURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @grant none
// ==/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";
// when the error is fixed we should remove the following
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.****)
return;
for (let planetKV of GAME.m_State.****) {
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;
}
}
// Let's challenge ourselves to be human here!
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()];
}
}
// Basic clicking attack, attack closest
class ClickAttack extends Attack {
shouldAttack(delta) {
// Can't do basic attack when station is down
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)()
}
}
// the '1' button (SlimeAttack PsychicAttack BeastAttack - depends on body type of your salien)
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 MeteorAttack extends ProjectileAttack {
getAttackName() {
return "boulder";
}
}
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 MeteorAttack(),
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);
Indajaus escribió:psyco752 escribió:han sacado algun script para lo del mini juego del alien?
https://www.reddit.com/r/Saliens/
ivanjmg escribió:Ismsanmar escribió:@ivanjmg Tal vez porque es "este" código?:// ==UserScript==
// @name Saliens bot
// @namespace http://tampermonkey.net/
// @version 15
// @description Beat all the saliens levels
// @author https://github.com/meepen/salien-bot
// @match https://steamcommunity.com/saliengame
// @match https://steamcommunity.com/saliengame/
// @match https://steamcommunity.com/saliengame/play
// @match https://steamcommunity.com/saliengame/play/
// @downloadURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @updateURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @grant none
// ==/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";
// when the error is fixed we should remove the following
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.****)
return;
for (let planetKV of GAME.m_State.****) {
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;
}
}
// Let's challenge ourselves to be human here!
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()];
}
}
// Basic clicking attack, attack closest
class ClickAttack extends Attack {
shouldAttack(delta) {
// Can't do basic attack when station is down
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)()
}
}
// the '1' button (SlimeAttack PsychicAttack BeastAttack - depends on body type of your salien)
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 MeteorAttack extends ProjectileAttack {
getAttackName() {
return "boulder";
}
}
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 MeteorAttack(),
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);
Gracias, es raro porque me sale esto: Uncaught SyntaxError: Unexpected token **
Newbell escribió:Indajaus escribió:psyco752 escribió:han sacado algun script para lo del mini juego del alien?
https://www.reddit.com/r/Saliens/
Muchas gracias!
En la página de reddit veo que existen muchos scripts. ¿Cuál estáis utilizando?
Gracias!!!!
Ismsanmar escribió:ivanjmg escribió:Ismsanmar escribió:@ivanjmg Tal vez porque es "este" código?:// ==UserScript==
// @name Saliens bot
// @namespace http://tampermonkey.net/
// @version 15
// @description Beat all the saliens levels
// @author https://github.com/meepen/salien-bot
// @match https://steamcommunity.com/saliengame
// @match https://steamcommunity.com/saliengame/
// @match https://steamcommunity.com/saliengame/play
// @match https://steamcommunity.com/saliengame/play/
// @downloadURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @updateURL https://github.com/meepen/salien-bot/raw/master/index.user.js
// @grant none
// ==/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";
// when the error is fixed we should remove the following
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.****)
return;
for (let planetKV of GAME.m_State.****) {
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;
}
}
// Let's challenge ourselves to be human here!
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()];
}
}
// Basic clicking attack, attack closest
class ClickAttack extends Attack {
shouldAttack(delta) {
// Can't do basic attack when station is down
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)()
}
}
// the '1' button (SlimeAttack PsychicAttack BeastAttack - depends on body type of your salien)
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 MeteorAttack extends ProjectileAttack {
getAttackName() {
return "boulder";
}
}
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 MeteorAttack(),
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);
Gracias, es raro porque me sale esto: Uncaught SyntaxError: Unexpected token **
Copialo directamente del enlace y te debería ir.