Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 01 июн 2015, 08:27

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: id игроков
СообщениеДобавлено: 30 апр 2012, 04:37 
Не в сети
Аватара пользователя
Зарегистрирован:
28 мар 2011, 00:56
Последнее посещение:
04 янв 2015, 01:30
Сообщения: 77
Доброго времени суток!
Подскажите, пожалуйста, решение проблемки, для вас должно быть просто.
Итак, обычно действие над всеми игроками выполняют по такой схеме:
Код:
new iPlayers[32], iPlayerNum
get_players(iPlayers, iPlayerNum, "h") // допустим, без HLTV - не важно
for (new i = 0; i < iPlayerNum; i++)
{   
     ...
     // Какие-то действия и вот это, к примеру:
     user_kill(iPlayers[i])
}
Но почему-то некоторых единичных игроков этот код не убивает, ровно как и не производятся другие прописанные в цикле действия над ними... Эксперементировать с ботами невозможно (на них всё работает), а реальные игроки постоянные рестарты сервера долго терпеть не станут, поэтому для достижения своей цели я решил не тормозить и двигаться дальше. Не задумываясь, на быструю руку подправил код, втупую отказавшись от get_players():
Код:
for (new i = 0; i < 32; i++)
{   
     ...
     user_kill(i)
}
Ура! Всё заработало, никакие игроки не пропускались, все сдохли без исключений.
Тут я понял, что скорее всего задал i от 0 до 31 (включительно) неправильно... Ведь если максимум игроков - 32, а 0 - это id самого сервера (или id всех, кто как трактует), то реальные id игроков, должно быть, лежат в диапазоне [1, 32], это верно? Правильно ли будет в моём конкретном случае писать for (new i = 1; i < 33; i++), если хочу всех потенциальных игроков перебрать?
Но больше меня интересует почему же не все игроки поддаются моим командам, если я получаю их id в массив с помощью get_players() и дальше циклом обращаюсь ко всем из этого списка. В том, что выжившие после моей команды игроки были живы и активны в момент вызова, я уверен (своими глазами видел, несколько раз перепроверял :) ).
Были ли у вас подобные недоразумения со списком id и get_players? В чём может быть проблема?
Наблюдаю явление не впервые, именно поэтому не считаю случайностью. Кроме того, мне удавалось убивать и выполнять другие нужные мне действия на злополучном непослушном игроке, который не хочет умирать вместе со всеми, когда я вручную исполнял на нём этот самый код (но другой командой, получив его id по нику). Именно по этим причинам создаётся впечатление, что get_players() некоторых игроков забывает и не добавляет их id в массив.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: id игроков
СообщениеДобавлено: 30 апр 2012, 07:33 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
01 июн 2015, 02:09
Сообщения: 4973
А количество игроков на сервере не сравнивал с iPlayerNum?
В обычных условиях я не наблюдал чтобы возвращало не всех.
Если использовать обычный вызов, без передачи флагов, то условием включения является только player->ingame (признак который ставится в PitInServer и снимается в Disconnected).
В варианте в перебором всех, как минимум надо перебирать с 1 до get_maxplayers(), ну и хотя бы проверить что игрок приконнекчен (по сути то же самое что и в get_players()).

ЗЫ Возможно тебе имеет смысл обратить внимание на плагин сброса флагов игроков, раз ты ботов используешь: viewtopic.php?f=19&t=680


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: id игроков
СообщениеДобавлено: 30 апр 2012, 20:53 
Не в сети
Аватара пользователя
Зарегистрирован:
28 мар 2011, 00:56
Последнее посещение:
04 янв 2015, 01:30
Сообщения: 77
Lev, спасибо за ответ!
Да, сброс флагов действительно необходим, если есть боты, давно замечал. Может, в моём случае проблема тоже как-то этим была вызвана, хотя я использую только "h" в get_players(), ботов не пропускаю.
Количество игроков на сервере не сравнивал с iPlayerNum, не сообразил вовремя, а теперь лень ждать, пока на моём тестовом сервере (полном ботов) наберётся несколько игроков, чтобы проверить. А то друзей приглашаю - на них как назло всё работает... :)
В общем, сегодня запосчу свой плагин, пока оставлю тупенький перебор for(new i = 1; i < 33; i++) с проверкой, всё равно код не напряжный. Там посмотрим.
Спасибо!

_________________
Изображение


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB