ТП при релоге у эпиков

NightSun

Знаменитый
Участник
Сообщения
87
Розыгрыши
0
Решения
2
Репутация
26
Реакции
26
Баллы
1 278
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Acis
Всем привет! Кто мог бы поделиться наработками или может есть уже готовое решение: суть в чем, когда попадаешь в зону эпик-рб (антарас, валакс, баюм) можно уйти в релог и потом зайти хоть через час. Может у кого-то реализовано, что если чар находится в оффлайне в зоне эпиков более чем n-минут, то его телепортирует в ближайший город.
 
Решение
ну такие зоны должны не запрещать выход, а проверяться при входе в игру - если игрок в такой зоне и с момента прошлого выхода прошло больше разрешенного времени - игрока телепортировать нафиг в ближайший город к примеру.
Java:
                if (!DevConfig.DISABLE_ZONE_CHECK_ON_ENTER)
                {
                    List<Zone> zones = new ArrayList<>();
                    World.getZones(zones, player.getLoc(), player.getReflection());

                    if (!zones.isEmpty())
                    {
                        for (Zone zone : zones)
                        {
                            if (zone.getType() == ZoneType.no_restart)
                            {
                                if...
Там это есть, смотри бая закена итд. Хотя может в новых ревах и напортачили там
 
а что в акисе no restart зон нет что ли?

Если что это реализуется простейше - десяток-другой строк добавить в пару классов ядра.
Пример реализации в том же овере можно глянуть - обработку зон типа no_restart
 
NoRestartZone.xml присутствует, но там прописаны только рифты

Протестировал, игроку просто нельзя уйти в релог. Но если окно закрыть принудительно и открыть снова, персонаж остается в зоне эпик рб
 
ну такие зоны должны не запрещать выход, а проверяться при входе в игру - если игрок в такой зоне и с момента прошлого выхода прошло больше разрешенного времени - игрока телепортировать нафиг в ближайший город к примеру.
Java:
                if (!DevConfig.DISABLE_ZONE_CHECK_ON_ENTER)
                {
                    List<Zone> zones = new ArrayList<>();
                    World.getZones(zones, player.getLoc(), player.getReflection());

                    if (!zones.isEmpty())
                    {
                        for (Zone zone : zones)
                        {
                            if (zone.getType() == ZoneType.no_restart)
                            {
                                if (System.currentTimeMillis() / 1000L - player.getLastLogout() > zone.getRestartTime())
                                {
                                    player.setReflection(0);

                                    if (zone.getRestartPoints() == null)
                                        player.setLoc(TeleportUtils.getRestartLocation(player, RestartType.TO_VILLAGE));
                                    else
                                        player.setLoc(zone.getSpawn(player.getKarma() < 0));
                                }
                            }
                            else if (zone.getType() == ZoneType.siege)
                            {
                                SiegeEvent<?, ?> siegeEvent = player.getEvent(SiegeEvent.class);

                                if (siegeEvent != null)
                                    player.setLoc(siegeEvent.getEnterLoc(player));
                                else
                                {
                                    Residence r = ResidenceHolder.getInstance().getResidence(zone.getParams().getInteger("residence"));
                                    player.setReflection(0);
                                    player.setLoc(r.getNotOwnerRestartPoint(player));
                                }
                            }
                            else if (zone.getType() == ZoneType.residence)
                            {
                                if (player.isInSiegeZone())
                                    continue;

                                Residence r = (Residence) zone.getParams().getObject("residence");

                                if (r != null && (r.getOwner() == null || player.getClan() != r.getOwner()))
                                {
                                    player.setReflection(0);
                                    player.setLoc(r.getNotOwnerRestartPoint(player));
                                }
                            }
                        }
                    }

                    zones.clear();
                }
 
Решение
BossZone как-то так это в ацисе называется
 

Похожие темы

Назад
Сверху Снизу