Beispiel #1
0
  public PrimevalIsle() {
    super("ai/group");

    for (L2Spawn npc : SpawnTable.getInstance().getSpawnTable())
      if (Util.contains(MOBIDS, npc.getNpcId())
          && npc.getLastSpawn() != null
          && npc.getLastSpawn() instanceof L2Attackable)
        ((L2Attackable) npc.getLastSpawn()).seeThroughSilentMove(true);

    registerMobs(SPRIGANTS, EventType.ON_AGGRO, EventType.ON_KILL);
    addAttackId(ANCIENT_EGG);
    addSpawnId(MOBIDS);
  }
  public void deleteSpawn(L2Spawn spawnDat, boolean updateDb) {
    if (spawnDat == null) return;

    final int bossId = spawnDat.getNpcId();
    if (!_spawns.containsKey(bossId)) return;

    SpawnTable.getInstance().deleteSpawn(spawnDat, false);
    _spawns.remove(bossId);

    if (_bosses.containsKey(bossId)) _bosses.remove(bossId);

    if (_schedules.containsKey(bossId)) {
      final ScheduledFuture<?> f = _schedules.remove(bossId);
      f.cancel(true);
    }

    if (_storedInfo.containsKey(bossId)) _storedInfo.remove(bossId);

    if (updateDb) {
      try (Connection con = L2DatabaseFactory.getInstance().getConnection()) {
        PreparedStatement statement =
            con.prepareStatement("DELETE FROM raidboss_spawnlist WHERE boss_id=?");
        statement.setInt(1, bossId);
        statement.execute();
        statement.close();
      } catch (Exception e) {
        // problem with deleting spawn
        _log.log(
            Level.WARNING,
            "RaidBossSpawnManager: Could not remove raidboss #"
                + bossId
                + " from DB: "
                + e.getMessage(),
            e);
      }
    }
  }
  public void addNewSpawn(
      L2Spawn spawnDat, long respawnTime, double currentHP, double currentMP, boolean storeInDb) {
    if (spawnDat == null) return;

    final int bossId = spawnDat.getNpcId();
    if (_spawns.containsKey(bossId)) return;

    final long time = Calendar.getInstance().getTimeInMillis();

    SpawnTable.getInstance().addNewSpawn(spawnDat, false);

    if (respawnTime == 0L || (time > respawnTime)) {
      L2RaidBossInstance raidboss = null;

      if (bossId == 25328) raidboss = DayNightSpawnManager.getInstance().handleBoss(spawnDat);
      else raidboss = (L2RaidBossInstance) spawnDat.doSpawn();

      if (raidboss != null) {
        currentHP = (currentHP == 0) ? raidboss.getMaxHp() : currentHP;
        currentMP = (currentMP == 0) ? raidboss.getMaxMp() : currentMP;

        raidboss.setCurrentHp(currentHP);
        raidboss.setCurrentMp(currentMP);
        raidboss.setRaidStatus(StatusEnum.ALIVE);

        _bosses.put(bossId, raidboss);

        final StatsSet info = new StatsSet();
        info.set("currentHP", currentHP);
        info.set("currentMP", currentMP);
        info.set("respawnTime", 0L);

        _storedInfo.put(bossId, info);
      }
    } else {
      long spawnTime = respawnTime - Calendar.getInstance().getTimeInMillis();
      _schedules.put(
          bossId,
          ThreadPoolManager.getInstance().scheduleGeneral(new spawnSchedule(bossId), spawnTime));
    }

    _spawns.put(bossId, spawnDat);

    if (storeInDb) {
      try (Connection con = L2DatabaseFactory.getInstance().getConnection()) {
        PreparedStatement statement =
            con.prepareStatement(
                "INSERT INTO raidboss_spawnlist (boss_id,loc_x,loc_y,loc_z,heading,respawn_time,currentHp,currentMp) values(?,?,?,?,?,?,?,?)");
        statement.setInt(1, spawnDat.getNpcId());
        statement.setInt(2, spawnDat.getLocx());
        statement.setInt(3, spawnDat.getLocy());
        statement.setInt(4, spawnDat.getLocz());
        statement.setInt(5, spawnDat.getHeading());
        statement.setLong(6, respawnTime);
        statement.setDouble(7, currentHP);
        statement.setDouble(8, currentMP);
        statement.execute();
        statement.close();
      } catch (Exception e) {
        // problem with storing spawn
        _log.log(
            Level.WARNING,
            "RaidBossSpawnManager: Could not store raidboss #"
                + bossId
                + " in the DB:"
                + e.getMessage(),
            e);
      }
    }
  }