HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 24.03.2024, 19:17
akape
Участник форума
Регистрация: 29.02.2024
Сообщений: 111
С нами: 1162090

Репутация: 1
По умолчанию

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

  #2  
Старый 24.03.2024, 19:43
MrKirill1232
Флудер
Регистрация: 31.10.2018
Сообщений: 2,776
С нами: 3966734

Репутация: 1904


По умолчанию

Java:


Код:
ThreadPool
.
scheduleAtFixedRate
(
(
)
->
{
List

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<>();
и отменять таск, о котором я писал вьіше.
 
Ответить с цитированием

  #3  
Старый 24.03.2024, 19:44
verbrannt
Участник форума
Регистрация: 29.04.2018
Сообщений: 197
С нами: 4233258

Репутация: 503
По умолчанию

You need to cancel ThreadPool.scheduleAtFixedRate task in the stopFight method
 
Ответить с цитированием

  #4  
Старый 24.03.2024, 20:40
akape
Участник форума
Регистрация: 29.02.2024
Сообщений: 111
С нами: 1162090

Репутация: 1
По умолчанию

Цитата:
Сообщение от verbrannt  

You need to cancel ThreadPool.scheduleAtFixedRate task in the stopFight method
Цитата:
Сообщение от MrKirill1232  

Java:


Код:
ThreadPool
.
scheduleAtFixedRate
(
(
)
->
{
List

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<>();
и отменять таск, о котором я писал вьіше.
спасибо, ребята, за помощь
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.