Вопрос проблема ТВТ

akape

Путник
Участник
Сообщения
29
Розыгрыши
0
Репутация
1
Реакции
5
Баллы
30
Я добавил систему АФК в ТвТ событии: если игрок не наносит игроку никакого урона более 1 минуты, он удаляется из ТвТ, и это работает. Проблема в том, что если игрок был помечен как AFK в предыдущем TvT и попытался принять участие в следующем TvT, как только он впервые принял участие, даже до того, как он телепортировался во время TvT, он получит сообщение о неактивности и будет удален. Я попробовал это на двойных окнах с двумя игроками AFK, оба раза мероприятие было прервано из-за бездействия. Я попробовал несколько вещей, но поскольку у меня ограниченные знания в области кодирования и многих вещей, связанных с Chatgpt, я не могу понять, где ошибка. Любая помощь будет полезна. Я прикрепил код.
 

Вложения

  • tvt.txt
    27,6 КБ · Просмотры: 17

Java:
            ThreadPool.scheduleAtFixedRate(() -> {
                List<String> inactivePlayerNames = new ArrayList<>();

                // Collect names of inactive players
                for (TvTEventTeams team : _teams) {
                    for (String playerName : team.getParticipatedPlayerNames()) {
                        if (isPlayerAFK(playerName)) {
                            inactivePlayerNames.add(playerName);
                        }
                    }
                }

                // Remove inactive players
                for (String playerName : inactivePlayerNames) {
                    removeParticipant(playerName);

                    Player playerInstance = World.getInstance().getPlayer(playerName);
                    if (playerInstance != null) {
                        playerInstance.sendMessage("You have been removed from the TvT event due to inactivity.");
                        new TvTEventTeleport(playerInstance, Config.TVT_EVENT_BACK_COORDINATES, false, false);
                       
                _afkPlayers.remove(playerName);
                       
                    }
                }
            }, 60000, 60000); // This runs every 60 seconds
Инициилизируйте переменную ScheduledFuture<?> чтоб можно было привязать её к коду выше.

И наверное stopFight (вместо resetEvent) нужно добавить _afkPlayers = new HashSet<>(); и отменять таск, о котором я писал вьіше.
 
You need to cancel ThreadPool.scheduleAtFixedRate task in the stopFight method
 
You need to cancel ThreadPool.scheduleAtFixedRate task in the stopFight method

Java:
            ThreadPool.scheduleAtFixedRate(() -> {
                List<String> inactivePlayerNames = new ArrayList<>();

                // Collect names of inactive players
                for (TvTEventTeams team : _teams) {
                    for (String playerName : team.getParticipatedPlayerNames()) {
                        if (isPlayerAFK(playerName)) {
                            inactivePlayerNames.add(playerName);
                        }
                    }
                }

                // Remove inactive players
                for (String playerName : inactivePlayerNames) {
                    removeParticipant(playerName);

                    Player playerInstance = World.getInstance().getPlayer(playerName);
                    if (playerInstance != null) {
                        playerInstance.sendMessage("You have been removed from the TvT event due to inactivity.");
                        new TvTEventTeleport(playerInstance, Config.TVT_EVENT_BACK_COORDINATES, false, false);
                      
                _afkPlayers.remove(playerName);
                      
                    }
                }
            }, 60000, 60000); // This runs every 60 seconds
Инициилизируйте переменную ScheduledFuture<?> чтоб можно было привязать её к коду выше.

И наверное stopFight (вместо resetEvent) нужно добавить _afkPlayers = new HashSet<>(); и отменять таск, о котором я писал вьіше.
спасибо, ребята, за помощь
 
Назад
Сверху Снизу