HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Посчитать количество энтить
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1077

Рейтинг



Посчитать количество энтить

Есть ли в SDK готовая функция, подсчитываются количество энтить на карте или нужно подсчитывать с помощью UTIL_FindEntityByClassname ? Как она вообще работает - возвращает первую, которую найдет? И зачем туда посылать CBaseEntity * ?

__________________
I'm on github
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 78591

Старое сообщение 28-05-2011 18:16
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 392 ед.

Рейтинг



есть готовая функция, которая торчит в engineface - это pfnNumberOfEntities. Также, в ксаше узнать статистику можно введя в консоль команду edicts_info. Для GoldSrc такая команда вроде бы тоже есть, но я её непомню.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 78592

Старое сообщение 28-05-2011 18:31
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1077

Рейтинг



Цитата:
Дядя Миша писал:
есть готовая функция, которая торчит в engineface - это pfnNumberOfEntities. Также, в ксаше узнать статистику можно введя в консоль команду edicts_info. Для GoldSrc такая команда вроде бы тоже есть, но я её непомню.


Извини, я не совсем точно выразился. Я имел в виду подсчёт количества конкретных энтить, а не всех.

В коде оспри вроде есть нечто такое для подсчёта хгрюнтов на карте, но я не совсем разобрался.

__________________
I'm on github
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 78597

Старое сообщение 28-05-2011 18:44
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FreeSlave писал:
Я имел в виду подсчёт количества конкретных энтить, а не всех.

тогда уж не конкретных, а энтить с определенным класснеймом?
нет, в движке такой функции нету, придется немного покодить самостоятельно.
Для наглядности возьмем код из поиска сатчелов и немного видоизменим его:
C++ Source Code:
1
int UTIL_CountNamedEdicts( const char *pClassname )
2
{
3
  edict_t *pFind;
4
 
5
  if( !pClassname || !*pClassname )
6
    return 0;
7
 
8
  int numEdicts = 0;
9
  pFind = FIND_ENTITY_BY_CLASSNAME( NULL, pClassname );
10
 
11
  while ( !FNullEnt( pFind ) )
12
  {
13
    CBaseEntity *pEnt = CBaseEntity::Instance( pFind );
14
    if ( pEnt ) numEdicts++;
15
 
16
    pFind = FIND_ENTITY_BY_CLASSNAME( pFind, pClassname );
17
  }
18
  return numEdicts;
19
}

Собственно вот это вот CBaseEntity::Instance по большому счету и не нужно, но на всякий случай оставлю.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 78601

Старое сообщение 28-05-2011 18:54
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1077

Рейтинг



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

__________________
I'm on github
I'm on opendesktop.org

Сообщить модератору | | IP: Записан
Сообщение: 78603

Старое сообщение 28-05-2011 19:12
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32202
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FreeSlave писал:
А не подскажешь зачем в FIND_ENTITY_BY_CLASSNAME первый аргумент?

указывает с какого эдикта начинать поиск. С этим делом в квейке вообще путаница. Некоторые функции возвращали указатель на эдикт, у которого значение pent->v.chain было ненулевым. Таким образом идя по цепочке можно было просмотреть все найденные эдикты.
Другие функции, такие как FIND_ENTITY_BY_STRING возвращали лишь первую найденную энтить, начиная искать с самого начала, т.е. с ворлдспавна. Легко заметить, что для продолжения поиска мы должны начать с того самого места, на котором он закончился. Именно для этого и был введен первый аргумент - указатель на энтитю, с которой следует начать поиск.

Добавлено 28-05-2011 в 23:17:

ЗЫ. В терминологии программиста это не первый, а нулевой аргумент

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 78604

Старое сообщение 28-05-2011 19:17
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 11:54. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Посчитать количество энтить
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024