Well, I can honestly say, this level hates my guts, and bug after bug tried to stop me… But I finally made it to the skeleton king… aaand…
No waves spawn, the skeleton king isn’t in the enemy list, and rushes at me straight away. Seeing it doesn’t show up in the array of enemies, I can’t really make my hero ‘run’ from it, or attack it, or anything of the sorts… What am I supposed to do here?
Here is my script:
var neutralEnemy = {'sand-yak':true, 'raven':true};
var rangedEnemy = {'brittle-skeleton-archer':true, 'archer':true, 'thrower':true, 'shaman':true};
var maxRange = this.attackRange+2;
var moveSpeed = this.maxSpeed;
var bashDamage = 74;
var mapswaps = 0;
var lastDist = 0;
var sameDist = 0;
var triggered = false;
loop {
var enemies = this.findEnemies();
var selected = null;
var closest = 999;
var count = 0;
var closestNeutral = 20;
var closeEnemies = 0;
var closeEnemiesHealth = 0;
var closestRanger = null;
var closestRangerDist = 999;
for(var en = 0; en < enemies.length; en++){
var enemy = enemies[en];
var distance = this.distanceTo(enemy);
if(neutralEnemy[enemy.type]){
if(distance < closestNeutral){
closestNeutral = distance;
}
}else if(enemy.health > 0){
count++;
if(distance <= closest){
selected = enemy;
closest = distance;
}
if(distance < maxRange || rangedEnemy[enemy.type]){
closeEnemies++;
closeEnemiesHealth += enemy.health;
if(rangedEnemy[enemy.type] && distance < closestRangerDist){
closestRangerDist = distance;
closestRanger = enemy;
}
}
}
}
if(count > 0 && selected){
if(lastDist == closest){
sameDist++;
}else{
sameDist = 0;
lastDist = closest;
}
if(this.hasEffect("hide")){
if(closestRanger && closestRangerDist > maxRange){
this.move(closestRanger.pos);
}
}else{
if(closest <= maxRange){
if(selected.health > this.attackDamage){
if(this.isReady("bash")){
this.bash(selected);
}else{
this.attack(selected);
}
}else{
this.attack(selected);
}
}else{
//this.move(selected.pos);
if(closestRanger && closestRangerDist > maxRange){
if(this.canCast("invisibility", this)){
this.cast("invisibility", this);
}
if(closestRangerDist < maxRange+moveSpeed){
this.move(closestRanger.pos);
}else{
if(this.isReady("jump")){
this.jumpTo(closestRanger);
}else{
this.move(closestRanger.pos);
}
}
/*
if(this.distanceTo(closestRanger) > maxRange){
if(this.canCast("invisibility", this)){
this.cast("invisibility", this);
}
}
*/
}else{
//this.move(selected.pos);
if(sameDist > 4){
this.move(selected.pos);
}else{
this.shield();
}
}
}
}
}else{
if(mapswaps < 4){
var moveTo = {x:this.pos.x+moveSpeed, y:this.pos.y};
if(moveTo.x >= 118 || this.isPathClear(this.pos, moveTo)){
this.move(moveTo);
}else{
if(this.pos.y > 37){
moveTo = {x:this.pos.x, y:this.pos.y-moveSpeed};
}else{
moveTo = {x:this.pos.x, y:this.pos.y+moveSpeed};
}
if(this.isPathClear(this.pos, moveTo)){
this.move(moveTo);
}else{
this.say("I'm stuck...");
this.wait(5);
}
}
//this.wait(0.1);
if(this.pos.x < 10 && prevX > 100){
mapswaps++;
this.jumpTo({x:45, y:36});
}
prevX = this.pos.x;
}else{
if(triggered){
this.shield();
this.say(enemies.length);
}else{
if(this.distanceTo({x:60, y:15}) < 1){
triggered = true;
}else{
this.move({x:60, y:15});
}
}
}
}
}