HLFX.Ru Forum
Показать все 6 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Посчитать количество энтить (https://hlfx.ru/forum/showthread.php?threadid=2856)


Отправлено FreeSlave 28-05-2011 в 18:16:

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

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

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


Отправлено Дядя Миша 28-05-2011 в 18:31:

есть готовая функция, которая торчит в 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'


Отправлено FreeSlave 28-05-2011 в 18:44:

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


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

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

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


Отправлено Дядя Миша 28-05-2011 в 18:54:

Цитата:
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'


Отправлено FreeSlave 28-05-2011 в 19:12:

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

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


Отправлено Дядя Миша 28-05-2011 в 19:17:

Цитата:
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'


Временная зона GMT. Текущее время 10:45.
Показать все 6 сообщений этой темы на одной странице

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