Лимит (предельное количество) объектов

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Esperanto (eo)Русский (ru)中文 (zh)Translate (Translate)

Из соображений распределения памяти, существует ограничение на количество объектов(en), которыми GoldSrc GoldSrc/Source Source/Source 2 Source 2 может управлять одновременно.

Также следует учитывать общий размер (в байтах) данных об объектах в файле карты, даже если количество объектов находится в указанных пределах. Передача большого объёма данных об объектах(en) от сервера к клиенту может занять значительное время и привести к сбоям.

Tip.pngСовет: При создании очень больших или подробных карт помните, что во время выполнения будет существовать больше объектов, чем было скомпилировано. Такие объекты, как оружие, которым владеют персонажи, снаряды и куклы трупов, тоже являются объектами. Если появляется ошибка "no free edicts", то придётся начать сокращать количество объектов!

Ограничения GoldSrc GoldSrc

Эта статья(раздел) является наброском(en). Вы можете помочь, дополнив её.

По умолчанию лимит составляет 1'200 записей edict_t, но его можно увеличить до 2'048, отредактировав файл liblist.gam модификации, добавив в него edicts "2048".
Этот способ можно использовать для однопользовательских модификаций, но не следует применять для многопользовательских карт существующих игр, поскольку сервер и все клиенты должны иметь одинаковые ограничения.

В Sven Co-op Sven Co-op лимит был увеличен до 8'192.

До выхода обновления в честь 25-летия Half-Life Half-Life, а также в некоторых отдельных играх GoldSrc, лимит по умолчанию составлял 900 записей edict_t.

All entities on the server are edicts, and are networked to clients. Intangible entities can be made clientside-only using MAKE_STATIC, but they will be removed upon loading a saved game.

Ограничения Source Source

Существует 2 группы объектов:

  1. Несетевые объекты, которые существуют только на клиенте или на сервере (например, куклы трупов на клиенте, класс CLogicalEntity(en) на сервере). В предшествующих VScript(en) версиях платформы и в Left 4 Dead 2 их может быть до 2'048, а в Ветвь Team Fortress 2, Alien Swarm, Portal 2, Counter-Strike: Global Offensive до 6144 штук.
  2. Сетевые объекты, ассоциированые с записями edict_t, которые передаются между клиентом и сервером. Всего их может быть до 2'048 штук.

В некоторых играх сторонних производителей эти пределы увеличены, смотрите в разделе Органичения игр сторонних производителей.

Если игра попытается присвоить запись edict сверх предельного количества, она завершит работу с сообщением об ошибке, но при попытке создать несетевой объект, сверх этого предела игра просто проигнорирует и выведет предупреждение в терминал управления. Вполне логично, что динамически созданный объект (т.е. отсутствующий на карте изначально), которому не присвоена запись edict, скорее всего не слишком важен.

The two entity lists are created by CBaseEntityList::CBaseEntityList() using NUM_ENT_ENTRIES and MAX_EDICTS. Neither of those values can be changed without breaking compatibility with the engine. In VScript(en) games, non-networked entities have 2 extra bits reserved compared to edicts. Since the pool of entities is shared between entities and non-entities, this is why non-networked entities have a higher limit.

Tip.pngСовет:
  • Temporary entities and prop_static's, env_sprite_clientside(en), or prop_detail(en) props do not count toward either limit. VBSP(en) enforces limits for these, but these can be raised with a modified VBSP.
  • If you're creating lots of individual objects all the time, consider rolling them all into a single manager entity.
  • In-game, use console commands like report_entities and cl_showents to get an idea of how many entities are present at that current state.
  • Prop entities that use a model with $collisionjoints(en) will generate one phys_bone_follower(en) for every convex piece of their collision model(en). These can quickly eat up the edict count! Enabling the "Disable Bone Followers" keyvalue on the prop will disable bone followers, although the prop will no longer have a functioning collision model, and the model will not be able to ragdoll.

Органичения игр сторонних производителей

Некоторые сторонние игры имеют большие предельные количества объектов:

  • В Garry's Mod Garry's Mod доступно до 8'192 сетевых объектов, и до 8'192 несетевых объектов.
  • В Mapbase Mapbase доступно до 16'384 объектов "отображаемых на стороне клиента". (Внутренние точечные объекты, такие как prop_static) [1]
  • В Jabroni Brawl: Episode 3 Jabroni Brawl: Episode 3, доступно до 65'535 сетевых объектов, и 65'535 несетевых объектов.

Ограничения VMF

В редакторе Hammer(en) нет ограничений на количество объектов, однако лимит компилятора VBSP VBSP зависит от игры:

Note.pngПримечание: Лимит задаётся переменной MAX_MAP_ENTITIES в файле public/bspfile.h. Это программное ограничение, модифицированный компилятор VBSP(en) способен компилировать столько объектов, сколько позволяет память.

Это вдвое превышает поддерживаемый платформой суммарный предел, что может быть связано с тем, что сначала обрабатываются внутренние объекты(en) (например, prop_static и env_cubemap) как обычные объекты, или же из-за создания большого количества объектов мелкого реквизита(en).

VBSP также рекомендует ограничивать размер блока объектов(en) до 384 Кб, однако это требование никак не котролируется.

Ограничения Source 2 Source 2

В Source 2 Source 2, а именно в s&box s&box, количество сетевых объектов ограничено 16'384 записями edict_t.

  • Counter-Strike 2 Counter-Strike 2 - максимум до 16'384 записей edict_t и до 16'384 серверных объектов.

Похоже, что для компиляторов карт нет ограничений, или они связаны с лимитом сетевых объектов.

Смотреть также

Внешние ссылки

Справочные сноски

1. Mapbase 3.1 Release Notes. ModDB. Retrieved on March 6, 2024.