Package com.l2jfrozen.gameserver.datatables.csv

Source Code of com.l2jfrozen.gameserver.datatables.csv.MapRegionTable

/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.datatables.csv;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import java.util.logging.Logger;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.managers.ArenaManager;
import com.l2jfrozen.gameserver.managers.CastleManager;
import com.l2jfrozen.gameserver.managers.ChaoticManager;
import com.l2jfrozen.gameserver.managers.ClanHallManager;
import com.l2jfrozen.gameserver.managers.DmManager;
import com.l2jfrozen.gameserver.managers.EventZoneManager;
import com.l2jfrozen.gameserver.managers.FortManager;
import com.l2jfrozen.gameserver.managers.KamalokaZoneManager;
import com.l2jfrozen.gameserver.managers.TownManager;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.Location;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.ClanHall;
import com.l2jfrozen.gameserver.model.entity.siege.Castle;
import com.l2jfrozen.gameserver.model.entity.siege.Fort;
import com.l2jfrozen.gameserver.model.zone.type.L2ArenaZone;
import com.l2jfrozen.gameserver.model.zone.type.L2ChaoticZone;
import com.l2jfrozen.gameserver.model.zone.type.L2ClanHallZone;
import com.l2jfrozen.gameserver.model.zone.type.L2DmZone;
import com.l2jfrozen.gameserver.model.zone.type.L2EventZone;
import com.l2jfrozen.gameserver.model.zone.type.L2KamalokaZone;
import com.l2jfrozen.gameserver.model.zone.type.L2TownZone;

/**
* @version $Revision: 1.2 $ $Date: 2009/04/29 13:58:30 $
* @author programmos
*/
public class MapRegionTable
{
  private static Logger _log = Logger.getLogger(MapRegionTable.class.getName());

  private static MapRegionTable _instance;

  private final int[][] _regions = new int[19][21];

  private final int[][] _pointsWithKarmas;

  public static enum TeleportWhereType
  {
    Castle,
    ClanHall,
    SiegeFlag,
    Town,
    Fortress
  }

  public static MapRegionTable getInstance()
  {
    if(_instance == null)
    {
      _instance = new MapRegionTable();
    }

    return _instance;
  }

  private MapRegionTable()
  {
    FileReader reader = null;
    BufferedReader buff = null;
    LineNumberReader lnr = null;
   
    try
    {
      File fileData = new File(Config.DATAPACK_ROOT+"/data/csv/mapregion.csv");
     
      reader = new FileReader(fileData);
      buff = new BufferedReader(reader);
      lnr = new LineNumberReader(buff);
     
      String line = null;

      int region;

      while((line = lnr.readLine()) != null)
      {
        //ignore comments
        if(line.trim().length() == 0 || line.startsWith("#"))
        {
          continue;
        }

        StringTokenizer st = new StringTokenizer(line, ";");

        region = Integer.parseInt(st.nextToken());

        for(int j = 0; j < 10; j++)
        {
          _regions[j][region] = Integer.parseInt(st.nextToken());
        }
      }
    }
    catch(FileNotFoundException e)
    {
      if(Config.ENABLE_ALL_EXCEPTIONS)
        e.printStackTrace();
     
      _log.warning("mapregion.csv is missing in data folder");
    }
    catch(NoSuchElementException e1)
    {
      _log.warning("Error for structure CSV file: ");
      e1.printStackTrace();
    }
    catch(IOException e0)
    {
      _log.warning("Error while creating table: " + e0);
      e0.printStackTrace();
    }
    finally
    {
      if(lnr != null)
        try
        {
          lnr.close();
        }
        catch(Exception e1)
        {
          e1.printStackTrace();
        }
     
      if(buff != null)
        try
        {
          buff.close();
        }
        catch(Exception e1)
        {
          e1.printStackTrace();
        }
     
      if(reader != null)
        try
        {
          reader.close();
        }
        catch(Exception e1)
        {
          e1.printStackTrace();
        }
     
    }

    _pointsWithKarmas = new int[19][3];
    //Talking Island
    _pointsWithKarmas[0][0] = -79077;
    _pointsWithKarmas[0][1] = 240355;
    _pointsWithKarmas[0][2] = -3440;
    //Elven
    _pointsWithKarmas[1][0] = 43503;
    _pointsWithKarmas[1][1] = 40398;
    _pointsWithKarmas[1][2] = -3450;
    //DarkElven
    _pointsWithKarmas[2][0] = 1675;
    _pointsWithKarmas[2][1] = 19581;
    _pointsWithKarmas[2][2] = -3110;
    //Orc
    _pointsWithKarmas[3][0] = -44413;
    _pointsWithKarmas[3][1] = -121762;
    _pointsWithKarmas[3][2] = -235;
    //Dwalf
    _pointsWithKarmas[4][0] = 12009;
    _pointsWithKarmas[4][1] = -187319;
    _pointsWithKarmas[4][2] = -3309;
    //Gludio
    _pointsWithKarmas[5][0] = -18872;
    _pointsWithKarmas[5][1] = 126216;
    _pointsWithKarmas[5][2] = -3280;
    //Gludin
    _pointsWithKarmas[6][0] = -85915;
    _pointsWithKarmas[6][1] = 150402;
    _pointsWithKarmas[6][2] = -3060;
    //Dion
    _pointsWithKarmas[7][0] = 23652;
    _pointsWithKarmas[7][1] = 144823;
    _pointsWithKarmas[7][2] = -3330;
    //Giran
    _pointsWithKarmas[8][0] = 79125;
    _pointsWithKarmas[8][1] = 154197;
    _pointsWithKarmas[8][2] = -3490;
    //Oren
    _pointsWithKarmas[9][0] = 73840;
    _pointsWithKarmas[9][1] = 58193;
    _pointsWithKarmas[9][2] = -2730;
    //Aden
    _pointsWithKarmas[10][0] = 44413;
    _pointsWithKarmas[10][1] = 22610;
    _pointsWithKarmas[10][2] = 235;
    //Hunters
    _pointsWithKarmas[11][0] = 114137;
    _pointsWithKarmas[11][1] = 72993;
    _pointsWithKarmas[11][2] = -2445;
    //Giran
    _pointsWithKarmas[12][0] = 79125;
    _pointsWithKarmas[12][1] = 154197;
    _pointsWithKarmas[12][2] = -3490;
    // heine
    _pointsWithKarmas[13][0] = 119536;
    _pointsWithKarmas[13][1] = 218558;
    _pointsWithKarmas[13][2] = -3495;
    // Rune Castle Town
    _pointsWithKarmas[14][0] = 42931;
    _pointsWithKarmas[14][1] = -44733;
    _pointsWithKarmas[14][2] = -1326;
    // Goddard
    _pointsWithKarmas[15][0] = 147419;
    _pointsWithKarmas[15][1] = -64980;
    _pointsWithKarmas[15][2] = -3457;
    // Schuttgart
    _pointsWithKarmas[16][0] = 85184;
    _pointsWithKarmas[16][1] = -138560;
    _pointsWithKarmas[16][2] = -2256;
    //TODO Primeval Isle
    _pointsWithKarmas[18][0] = 10468;
    _pointsWithKarmas[18][1] = -24569;
    _pointsWithKarmas[18][2] = -3645;
  }

  public final int getMapRegion(int posX, int posY)
  {
    return _regions[getMapRegionX(posX)][getMapRegionY(posY)];
  }

  public final int getMapRegionX(int posX)
  {
    return (posX >> 15) + 4;// + centerTileX;
  }

  public final int getMapRegionY(int posY)
  {
    return (posY >> 15) + 10;// + centerTileX;
  }

  public int getAreaCastle(L2Character activeChar)
  {
    int area = getClosestTownNumber(activeChar);
    int castle;

    switch(area)
    {
      case 0:
        castle = 1;
        break;//Talking Island Village
      case 1:
        castle = 4;
        break; //Elven Village
      case 2:
        castle = 4;
        break; //Dark Elven Village
      case 3:
        castle = 9;
        break; //Orc Village
      case 4:
        castle = 9;
        break; //Dwarven Village
      case 5:
        castle = 1;
        break; //Town of Gludio
      case 6:
        castle = 1;
        break; //Gludin Village
      case 7:
        castle = 2;
        break; //Town of Dion
      case 8:
        castle = 3;
        break; //Town of Giran
      case 9:
        castle = 4;
        break; //Town of Oren
      case 10:
        castle = 5;
        break; //Town of Aden
      case 11:
        castle = 5;
        break; //Hunters Village
      case 12:
        castle = 3;
        break; //Giran Harbor
      case 13:
        castle = 6;
        break; //Heine
      case 14:
        castle = 8;
        break; //Rune Township
      case 15:
        castle = 7;
        break; //Town of Goddard
      case 16:
        castle = 9;
        break; //Town of Shuttgart
      case 17:
        castle = 4;
        break; //Ivory Tower
      case 18:
        castle = 8;
        break; //Primeval Isle Wharf
      default:
        castle = 5;
        break; //Town of Aden
    }
    return castle;
  }

  public int getClosestTownNumber(L2Character activeChar)
  {
    return getMapRegion(activeChar.getX(), activeChar.getY());
  }

  public String getClosestTownName(L2Character activeChar)
  {
    int nearestTownId = getMapRegion(activeChar.getX(), activeChar.getY());
    String nearestTown;

    switch(nearestTownId)
    {
      case 0:
        nearestTown = "Talking Island Village";
        break;
      case 1:
        nearestTown = "Elven Village";
        break;
      case 2:
        nearestTown = "Dark Elven Village";
        break;
      case 3:
        nearestTown = "Orc Village";
        break;
      case 4:
        nearestTown = "Dwarven Village";
        break;
      case 5:
        nearestTown = "Town of Gludio";
        break;
      case 6:
        nearestTown = "Gludin Village";
        break;
      case 7:
        nearestTown = "Town of Dion";
        break;
      case 8:
        nearestTown = "Town of Giran";
        break;
      case 9:
        nearestTown = "Town of Oren";
        break;
      case 10:
        nearestTown = "Town of Aden";
        break;
      case 11:
        nearestTown = "Hunters Village";
        break;
      case 12:
        nearestTown = "Giran Harbor";
        break;
      case 13:
        nearestTown = "Heine";
        break;
      case 14:
        nearestTown = "Rune Township";
        break;
      case 15:
        nearestTown = "Town of Goddard";
        break;
      case 16:
        nearestTown = "Town of Shuttgart";
        break; ////TODO@ (Check mapregion table)[Luno]
      case 18:
        nearestTown = "Primeval Isle";
        break;
      default:
        nearestTown = "Town of Aden";
        break;

    }

    return nearestTown;
  }

  public Location getTeleToLocation(final L2Character activeChar, TeleportWhereType teleportWhere)
  {
    int[] coord;

    if(activeChar instanceof L2PcInstance)
    {
      L2PcInstance player = (L2PcInstance) activeChar;

      // If in Monster Derby Track
      if(player.isInsideZone(L2Character.ZONE_MONSTERTRACK))
        return new Location(12661, 181687, -3560);

      Castle castle = null;
      Fort fort = null;
      ClanHall clanhall = null;

      if(player.getClan() != null)
      {
        // If teleport to clan hall
        if(teleportWhere == TeleportWhereType.ClanHall)
        {

          clanhall = ClanHallManager.getInstance().getClanHallByOwner(player.getClan());
          if(clanhall != null)
          {
            L2ClanHallZone zone = clanhall.getZone();
            if(zone != null)
              return zone.getSpawn();
          }
        }

        // If teleport to castle
        if(teleportWhere == TeleportWhereType.Castle)
        {
          castle = CastleManager.getInstance().getCastleByOwner(player.getClan());
        }

        // If teleport to fort
        if(teleportWhere == TeleportWhereType.Fortress)
        {
          fort = FortManager.getInstance().getFortByOwner(player.getClan());
        }

        // Check if player is on castle&fortress ground
        if(castle == null)
        {
          castle = CastleManager.getInstance().getCastle(player);
        }

        if(fort == null)
        {
          fort = FortManager.getInstance().getFort(player);
        }

        if(castle != null && castle.getCastleId() > 0)
        {
          // If Teleporting to castle or
          // If is on caslte with siege and player's clan is defender
          if(teleportWhere == TeleportWhereType.Castle || teleportWhere == TeleportWhereType.Castle && castle.getSiege().getIsInProgress() && castle.getSiege().getDefenderClan(player.getClan()) != null)
          {
            coord = castle.getZone().getSpawn();
            return new Location(coord[0], coord[1], coord[2]);
          }

          if(teleportWhere == TeleportWhereType.SiegeFlag && castle.getSiege().getIsInProgress())
          {
            // Check if player's clan is attacker
            List<L2NpcInstance> flags = castle.getSiege().getFlag(player.getClan());
            if(flags != null && !flags.isEmpty())
            {
              // Spawn to flag - Need more work to get player to the nearest flag
              L2NpcInstance flag = flags.get(0);
              return new Location(flag.getX(), flag.getY(), flag.getZ());
            }
            flags = null;
          }
        }

        else if(fort != null && fort.getFortId() > 0)
        {
          // teleporting to castle or fortress
          // is on caslte with siege and player's clan is defender
          if(teleportWhere == TeleportWhereType.Fortress || teleportWhere == TeleportWhereType.Fortress && fort.getSiege().getIsInProgress() && fort.getSiege().getDefenderClan(player.getClan()) != null)
          {
            coord = fort.getZone().getSpawn();
            return new Location(coord[0], coord[1], coord[2]);
          }

          if(teleportWhere == TeleportWhereType.SiegeFlag && fort.getSiege().getIsInProgress())
          {
            // check if player's clan is attacker
            List<L2NpcInstance> flags = fort.getSiege().getFlag(player.getClan());

            if(flags != null && !flags.isEmpty())
            {
              // spawn to flag
              L2NpcInstance flag = flags.get(0);
              return new Location(flag.getX(), flag.getY(), flag.getZ());
            }

            flags = null;
          }
        }

      }

      castle = null;
      fort = null;

      // teleport RED PK 5+ to Floran Village
      if(player.getPkKills() > 5 && player.getKarma() > 1)
        return new Location(17817, 170079, -3530);

      //Karma player land out of city
      if(player.getKarma() > 1)
      {
        int closest = getMapRegion(activeChar.getX(), activeChar.getY());

        if(closest >= 0 && closest < _pointsWithKarmas.length)
          return new Location(_pointsWithKarmas[closest][0], _pointsWithKarmas[closest][1], _pointsWithKarmas[closest][2]);
        return new Location(17817, 170079, -3530);
      }

      // Checking if in arena
      L2ArenaZone arena = ArenaManager.getInstance().getArena(player);
      if(arena != null)
      {
        coord = arena.getSpawnLoc();
        return new Location(coord[0], coord[1], coord[2]);
      }
     
      L2ChaoticZone chaotic = ChaoticManager.getInstance().getChaotic(player);
      if(chaotic != null)
      {
        coord = chaotic.getSpawnLoc();
        return new Location(coord[0], coord[1], coord[2]);
      }
      L2EventZone event = EventZoneManager.getInstance().getEventZone(player);
      if(event != null)
      {
        coord = event.getSpawnLoc();
        return new Location(coord[0], coord[1], coord[2]);
      }
      L2KamalokaZone kama = KamalokaZoneManager.getInstance().getKamaZone(player);
      if(kama != null)
      {
        coord = kama.getSpawnLoc();
        return new Location(coord[0], coord[1], coord[2]);
      }
      L2DmZone dm = DmManager.getInstance().getChaotic(player);
      if(dm != null)
      {
        coord = dm.getSpawnLoc();
        return new Location(coord[0], coord[1], coord[2]);
      }
    }

    // Get the nearest town
    L2TownZone local_zone = null;
    if(activeChar!=null && (local_zone = TownManager.getInstance().getClosestTown(activeChar))!=null)
    {
      coord = local_zone.getSpawnLoc();
      return new Location(coord[0], coord[1], coord[2]);
    }
   
    local_zone = TownManager.getInstance().getTown(9); //giran
    coord = local_zone.getSpawnLoc();
    return new Location(coord[0], coord[1], coord[2]);
   
   
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.datatables.csv.MapRegionTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.