예제 #1
0
  public Monster getClosestWithinMax(Point p, int r) {
    Monster monster = null;
    Monster closestMonster = null;

    double closestDistance = 0;

    try {
      for (String key : monsters.keySet()) {
        monster = (Monster) monsters.get(key);
        if (!monster.getName().equals("Pig")
            && !monster.getName().equals("BlueThorn")
            && !monster.getName().equals("VineThorn")) {
          if (monster.getIsInPanel()) {
            double distance = p.distance(monster.getCenterPoint());
            if ((distance < closestDistance || closestDistance == 0) && distance <= r) {
              closestMonster = monster;
              closestDistance = distance;
            }
          }
        }
      }
    } catch (ConcurrentModificationException concEx) {
      // another thread was trying to modify monsters while iterating
      // we'll continue and the new item can be grabbed on the next update
    }

    return closestMonster;
  }
예제 #2
0
  public Monster getMostAggroInPanel(Point p) {
    Monster monster = null;
    Monster mostAggroMonster = null;

    double mostAggro = 0;

    try {
      for (String key : monsters.keySet()) {
        monster = (Monster) monsters.get(key);
        if (!monster.getName().equals("Pig")
            && !monster.getName().equals("BlueThorn")
            && !monster.getName().equals("VineThorn")) {
          if (monster.getIsInPanel()) {
            double distance = p.distance(monster.getCenterPoint());
            if (monster.getPlayerDamage() > mostAggro) {
              mostAggroMonster = monster;
              mostAggro = monster.getPlayerDamage();
            }
          }
        }
      }
    } catch (ConcurrentModificationException concEx) {
      // another thread was trying to modify monsters while iterating
      // we'll continue and the new item can be grabbed on the next update
    }

    return mostAggroMonster;
  }
예제 #3
0
 public Monster getSelectedMob() {
   if (selectedMob != null) {
     if (selectedMob.getIsDead() || selectedMob.isDirty) {
       selectedMob = null;
     } else {
       if (!this.isInPlayerView(selectedMob.getCenterPoint())) {
         selectedMob = null;
       }
     }
   }
   return selectedMob;
 }
예제 #4
0
  private void spawnPlants() {
    if (gameController.multiplayerMode != gameController.multiplayerMode.CLIENT) {
      // Blue Thorns
      int blueThornCount = this.getCountByType("BlueThorn");
      if (blueThornCount < 200) {
        for (int i = 0; i < 200 - blueThornCount; i++) {
          boolean canSpawn = true;
          int level = Rand.getRange(1, 3);
          Point vinePosition = new Point();
          vinePosition.x = Rand.getRange(1, gameController.getMapWidth());
          vinePosition.y =
              Rand.getRange(
                  registry.getBlockManager().getLevelBottom(level),
                  registry.getBlockManager().getLevelTop(level));

          vinePosition.y = this.findNextFloor(vinePosition.x, vinePosition.y, 60);

          if (this.doesRectContainBlocks(vinePosition.x, vinePosition.y + 100, 17, 16)) {
            Monster monster = null;
            try {
              for (String key : monsters.keySet()) {
                monster = (Monster) monsters.get(key);
                if (monster.getName().equals("BlueThorn")
                    || monster.getName().equals("VineThorn")) {
                  double distance = vinePosition.distance(monster.getCenterPoint());
                  if (distance < 750) {
                    canSpawn = false;
                    break;
                  }
                }
              }
            } catch (ConcurrentModificationException concEx) {
              // another thread was trying to modify monsters while iterating
              // we'll continue and the new item can be grabbed on the next update
            }
            if (canSpawn) {
              spawn("BlueThorn", "Roaming", vinePosition.x, vinePosition.y);
            }
          }
        }
      }

      // Vine Thorns
      int vineThornCount = this.getCountByType("VineThorn");
      if (vineThornCount < 200) {
        for (int i = 0; i < 200 - vineThornCount; i++) {
          boolean canSpawn = true;
          int level = Rand.getRange(1, 3);
          Point vinePosition = new Point();
          vinePosition.x = Rand.getRange(1, gameController.getMapWidth());
          vinePosition.y =
              Rand.getRange(
                  registry.getBlockManager().getLevelBottom(level),
                  registry.getBlockManager().getLevelTop(level));

          vinePosition.y = this.findNextFloor(vinePosition.x, vinePosition.y, 60);

          if (this.doesRectContainBlocks(vinePosition.x, vinePosition.y + 100, 17, 16)) {
            Monster monster = null;
            try {
              for (String key : monsters.keySet()) {
                monster = (Monster) monsters.get(key);
                if (monster.getName().equals("BlueThorn")
                    || monster.getName().equals("VineThorn")) {
                  double distance = vinePosition.distance(monster.getCenterPoint());
                  if (distance < 750) {
                    canSpawn = false;
                    break;
                  }
                }
              }
            } catch (ConcurrentModificationException concEx) {
              // another thread was trying to modify monsters while iterating
              // we'll continue and the new item can be grabbed on the next update
            }
            if (canSpawn) {
              spawn("VineThorn", "Roaming", vinePosition.x, vinePosition.y);
            }
          }
        }
      }
    }
  }
예제 #5
0
  public void spawnNearPlayers() {
    Monster monster = null;
    float prob, rand;
    int count;
    HashMap<String, Player> players = registry.getPlayerManager().getPlayers();
    Player player = null;
    Integer spawnCoolDown = null;
    for (String key : players.keySet()) {
      player = (Player) players.get(key);

      // check for spawning Melvin
      if (registry.currentTime >= nextBossOrcSpawn && nextBossOrcSpawn != 0) {
        // to spawn melvin, player must have 40 AP, be within a range on the map and be on the
        // surface
        if (player.getMapX() >= 2000
            && player.getMapX() <= 5000
            && player.getLevel() >= 10
            && player.getMapY() == this.findFloor(player.getMapX())) {
          spawnBossOrc(player);
        }
      }

      if (spawnCoolDowns.containsKey(key)) {
        spawnCoolDown = spawnCoolDowns.get(key);
      } else {
        spawnCoolDown = new Integer(0);
        spawnCoolDowns.put(key, spawnCoolDown);
      }
      spawnCoolDown--;
      if (spawnCoolDown < 0) {
        int x = player.getMapX();
        int y = player.getMapY();
        int groundLevel = registry.getBlockManager().getLevelByY(y);
        count = -groundLevel;
        try {
          for (String key2 : monsters.keySet()) {
            monster = (Monster) monsters.get(key2);
            if (monster.getCenterPoint().distance(player.getCenterPoint())
                < MonsterManager.mobSpawnRangeMax * 3 / 2) {
              if (monster.getTouchDamage() > 0
                  && !monster.getName().equals("BlueThorn")
                  && !monster.getName().equals("VineThorn")) {
                count++;
              }
            }
          }
        } catch (ConcurrentModificationException concEx) {
          // another thread was trying to modify monsters while iterating
          // we'll continue and the new item can be grabbed on the next update
        }
        if (count < 4) {
          for (MonsterType monsterType : MonsterType.values()) {
            if (count < 4) {
              rand = Rand.getFloat();
              prob = getShouldSpawn(monsterType, groundLevel);
              if (prob > 0.0f) {
                if ((prob - count * spawnRatioDiff) > 0.005f) {
                  prob += -count * spawnRatioDiff;
                } else {
                  prob = 0.005f;
                }
              }
              if (rand <= prob) {
                // System.out.println("spawn near player " + monsterType.name());
                spawn(monsterType.name(), "Roaming", x, y);
                count++;
              }
            }
          }
        } else {
          // EIError.debugMsg("too many to spawn");
          spawnCoolDown = 20;
        }
      }
    }
  }