Объект point_template используется для клонирования любого объекта или группы объектов.
Внимание: Этот объект является потенциально опасным, потому что его использование может привести к краху игры. Причина в том, что этот объект может создавать множественные экземпляры одних и тех же объектов. Каждый новый экземпляр прибавляет к счётчику экземпляров +1. Экспериментальным путём было выяснено, что при достижении счётчика значения 100 игра завершится крахом с ошибкой CUtlLinkedList overflow!
(переполнение связанного списка). Это баг движка Source, который проявил себя только для объектов:
Разберём результаты экспериментов над этим объектом:
Ещё раз нужно отметить, что эта ошибка проявляется ТОЛЬКО если в свойствах "Template 1-16" указано имя хотя бы одного объекта "func_physbox" или "func_physbox_multiplayer". Были так же проверены:
Иногда может понадобиться выполнять какие-то действия с клонируемой группой объектов. Например: есть бочка и таймер; бочка удаляется при помощи таймера через 10 секунд. Если указать имена бочки и таймера в одном point_template и установить для него флажок "Preserve Entity Names", то имена всех клонируемых бочек и таймеров будут одинаковые, а это приведёт к тому, что все бочки, клонированные за первые 10 секунд, будут удалены первым же таймером. Если для того же объекта point_template снять флажок "Preserve Entity Names", то при клонировании новых бочек и таймеров им будут автоматически выдаваться новые имена вида "<старое_имя>&0000", где "0000" будут заменяться другими неповторяющимися числами. Благодаря этому каждая клонированная бочка будет удаляться своим таймером ровно через 10 секунд с момента её клонирования. Кстати, не нужно думать, что можно выполнить только "9999" операций клонирования. Тесты показали, что после "9999" объекта счётчик снова начинает идти с "0000".
Обратите внимание, что переименование объектов производится только в том случае, если среди всех объектов "Template 1-16" имеются такие, которые выполняют функции для других – как в примере выше.
Чтобы найти все клонированные объекты можно использовать символы-джокеры * (Wildcard). Например: my_barrel_2* - найдёт все объекты, имя которых начинается на "my_barrel_2".
Смотрите пункт "Ошибки", чтобы избежать ошибок при создании ваших карт.
csssdk_point_template.vmf
На карте размещено четыре пульта, на каждом из которых помещено по две кнопки – большая и маленькая. Большая кнопка запускает процесс клонировании, а маленькая удаляет результат клонирования. Большая кнопка первого пульта левой части карты создаёт обычную бочку, притом в неограниченных количествах. Воспользуйтесь маленькой кнопкой на пульте, когда вам покажется что бочек стало слишком много. Большая кнопка первого пульта в правой части карты создаёт два типа оружия – гранаты и автомат. Обратите внимание, что это оружие можно поднимать и использовать, но если поднять автомат, а затем его выбросить, то его имя сотрётся и удалить такой автомат при помощи маленькой кнопки пульта будет нельзя. Это справедливо для любого типа оружия, потому что в движке Source чётко указано, что при подъёме оружия, его имя стирается.
Большая кнопка второго пульта левой части карты создаёт группу зависимых объектов – бочка barrel3 (prop_physics) и объект relay1 (logic_relay). На relay установлено событие, которое удаляет сам relay и бочку через 3 секунды с момента клонирования. При клонировании этой группы объектов, маленькой кнопочкой на пульте можно вообще не пользоваться, так как каждая бочка и relay будут удаляться автоматически в указанное время. Для объекта point_template, который клонирует эту группу объектов, не установлен флажок "Preserve Entity Names", поэтому имена бочки и таймера будут автоматически изменены в момент клонировании. Смотрите об этом подробнее в пункте "Резервирование имён". При помощи консольной команды "ent_text *" вы можете посмотреть какие имена имеют переименованные бочки. Перед использованием этой команды нужно выполнить в консоли команду "sv_cheats 1".
Большую кнопку на последнем пульте можно вообще не нажимать, потому что объект point_template, рядом с этим пультом, используется неявно объектом env_entity_maker, который автоматически создаёт новую бочку когда старая будет сломана.