[SM] Afk Informer

diller110

Добрая душа
Сообщения
353
Реакции
278
Добрый день/вечер. Нужно решить одну задачку. Если человек стоит без движения некоторое время, написать в чат что: %player стоит уже %time без движения на %place.
(Игра CSGO)
Звучит легко, но под %place, я подразумеваю название места на котором стоит игрок, которое выводится так же сверху миникарты. Например: Спавн Т, Зигзак, Длина, Плэнт Б.

И вот вопрос: Возможно ли как-нибудь получить эти названия? Из vot etoy темы, ясно что все названия находятся в nav-файлах соответствующих карт. Так же можно найти консольную команду:
nav_place_list - Данная консольная команда позволяет вам вывести список и количество используемых навигационных местностей в текущей карте.
Но мне её у себя проверить не удалось, возможно из за этого:
Переменная nav_edit (с которой все и будет начинаться) имеет консольный флаг CHEAT, поэтому для ей включения требуется sv_cheats, а также nav_edit работает только на локальном сервере. Проверю это завтра, а пока есть ли какие нибудь предложения?

Да, можно написать для каждой карты свои координаты и к ним названия, но зачем так трудно, когда вроде бы до решения рукой подать...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
PHP:
new g_iOffsLastPlaceName = -1;

public OnPluginStart()
{
		g_iOffsLastPlaceName = FindSendPropOffs("CBasePlayer", "m_szLastPlaceName");
}

//Когда нужно получить место 

decl String:place[24];
GetEntDataString(client, g_iOffsLastPlaceName, place, sizeof(place));
// В place будет место

P.S. Писал с телефона, могут быть ошибки и опечатки
 

diller110

Добрая душа
Сообщения
353
Реакции
278
Спасибо! Принцип понял. Боялся на самом деле что это будет невозможно. Завтра отпишусь и скину плагин. (Для кого-нибудь=) )
 

TolikCorp

Участник
Сообщения
874
Реакции
334
diller110, как-то нецелесообразно искать АФКшника по расположения в секторе карты. Чем вариант с получением координаты игрока и его направлением взгляда не устраивает?
Ведь есть карты, где одна команда должна как правило на одном месте быть, тогда и получится, что все АФКшники.
 

diller110

Добрая душа
Сообщения
353
Реакции
278
с получением координаты игрока и его направлением взгляда
Именно так и задумывалось.

Получать сектор нужно было чтобы определить название места на котором стоит игрок, чтобы потом его вывести на экран например на "Длине". Но теперь когда R1ko скинул мне более простую версию, так заморачиваться не надо.
 

TolikCorp

Участник
Сообщения
874
Реакции
334
Ну так смотри, то, что кинул Рико и есть показ места. Игрок может долго быть в одном секторе, то бишь БАЗА Т, но при этом двигаться, делать какие-либо действия. Т.е. возможны ложные срабатывания.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #7
TolikCorp, прочитай что он написал. А потом ответил на твой вопрос diller110`у.

Получать он будет позицию игрока и углы, по ним проверять афк ли игрок. А имена мест ему нужны для вывода положения афк игрока.
 
Последнее редактирование:

TolikCorp

Участник
Сообщения
874
Реакции
334
Да, перечитал еще раз и теперь разобрался с его идеей :)
 

diller110

Добрая душа
Сообщения
353
Реакции
278
Взял за основу плагин Sammy's Afk Kicker, вырезал все ненужные на мой взгляд проверки, типо Иммунитет админу, Иммунитет опр. игроку. С
new Float:EngineTime = GetEngineTime();
new Float:TimeNeeded = GetConVarFloat(MaxAfkTime);
if(EngineTime - LastMovementTime[index] >= TimeNeeded)
нафиг запутался, поэтому подобные проверки тоже удалил. Создание таймера перенес на начало раунда, в сам таймер вписал условие живости игрока.
Вообщем вроде получилось максимально просто, но чего-то работать не хочет. Предполагаемые ошибки: Неправильное оформление таймера, из-за чего он не повторяется.
Неправильный вызов таймера (незнаю нужно ли его вызывать отдельно для каждого игрока и подобные тонкости).
Если не лень проверьте пожалуйста:
Посмотреть вложение afkinformer.sp

И еще добавил для саморазвития команду, которая выводит координаты и углы обзора игрока. С координатами проблем нет. А с углами обзора периодически angle[0], и всегда angle[2] выдают в чат 0.0. С чем это связано?
 
Сверху Снизу