Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
MapRegionTable
#1
Доброго дня ув. форумчане!!!
Начал копать фаил MapRegionTable.java, который отвечает за кнопочку "To Village" и другие телепорты и сразу столкнулся с проблемами:

Хочу сделать, что бы по проверке лвла чара его телепортировало в другую локацию, вот что получилось(см код ниже).

В первом случае у меня получилось: все ОК, перса телепортиирует в указанную точку, но как только его реснуло - телепортирует вновь в бесконечном цикле, т.е. не возможно даже с места сдвинуться, ресает и ресает... Это было, когда я закомментировал строчку player = null;
Подумал, что дело в ней, игрок не очищается и как-то все это входит в цикл (извиняюсь за возможные глупости которые несу, просто не могу понять толком в чем дело).

Попробовал разкомментировать и получил на каждом шаге ошибки: "Unreachable statement error player = null;"
перенес код проверки в самый верх (до этого был в самом низу до player= nullWink, и получил ту же ошибку (unreachable statement error) только уже с обьектом castle = null;

Пожалуйста растолкуйте что я делаю не так. Пол дня бьюсь с такой простой фигней=(

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

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

            if(player.getLevel() < 20)
            {
                return new Location(5554, 3332, 777);
            }
            if(player.getLevel() < 40)
            {
                return new Location(646, 993, 221);
            }
            else
            {
                return new Location(1, 5, -3);
            }
            
            // 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]);
            //    else
            //        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]);
            //}
            //arena = null;

            [B]player = null;[/B]
        }

        // 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]);
            return new Location(17711, 112619, -5672);
        }
        else
        {
            local_zone = TownManager.getInstance().getTown(9); //giran
            coord = local_zone.getSpawnLoc();
            return new Location(coord[0], coord[1], coord[2]);
        }*/
        
        
        // Get the nearest town
        // TODO: Maybe we should add some checks to prevent exception here.
        coord = TownManager.getInstance().getClosestTown(activeChar).getSpawnLoc();
        _log.info("notregistred OVER");
        return new Location(coord[0], coord[1], coord[2]);
    }
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)