Воскресенье, 22.12.2024, 09:03

logo

Пользовательский поиск

Меню сайта
Категории раздела
Разное [15]
Tutorials
Создание карт [13]
Создание моделей [2]
Кодинг [14]
Создание карт CS [197]
Учебник cs-mapper
Свойства entity HL-CS [117]
Форма входа
Наш сервер CS 1.6
Поиск
Наш опрос
Ваш возраст
Всего ответов: 268
Друзья сайта


Главная » Статьи » HL Development » Создание карт


Смена карт

"Смена карт”


Ну что же, решил я вам написать тутор по смене уровней в халфе. Эта проблема довольно актуальна, поэтому читайте внимательно...
Итак смена уровня состоит в основном из двух энтить наличие которых ОБЯЗАТЕЛЬНО!!! Это trigger_changelevel и info_landmark.
Trigger_changelevel - браш-энтитя или триггер при попадании в который или активации оного происходит смена карты.(Смотри скрин ниже).

Example

* Name - имя триггера, обязательно при флаге Use Only. * New map name - имя следующей карты, например если вы находитесь в map1 и надо попасть в map2, то пишите естественно map2, а в тот же trigger_changelevel с теми же функциями только в map2 пишите наоборот map1 * Landmark Name - имя info_landmark, сведения о которой я приведу ниже, имя ставим например map1tomap2_lm * Change Target - об этой опции напишу позже, сейчас она нам не нужна( и в принципе вообще не очень нужна) * Delay before change target - время перед активации цели написанной в поле выше Флаги *No Intermission - нам сейчас не нужно *Use Only - при активации данного флага trigger_changelevel будет активирован только другим объектом(trigger_once например) - для этого нужно вписать имя trigger_changelevel в поле target активирующего обьекта, а при попадании игрока в этот trigger_changelevel он ничего делать не будет.
Info_landmark - точечная энтитя, которая настраивает постоянный пункт появления игрока на новой карте.Её наличие в обеих картах обязательно, так как относительно положения info_landmark игрок появиться в следующей карте. Например если при смене уровня игрок находиться на расстоянии 1 м и 60 градусов(по оси х\у) то и в следующей карте он появиться на таком же расстоянии от этой энтити поэтому info_landmark следует располагать аккуратно, т.к. если в следующей карте на расстоянии 1 м и 60 градусов от info_landmark будет стена то игрок появиться в этой стене. Я советую копировать и trigger_changelevel и info_landmark, и браши которые находятся рядом в следующую карту, чтобы избежать ошибок.

*Name - имя энтити, в нашем случае map1tomap2_lm, должно быть одинаково в обоих картах.
- Также есть ещё одна брашевая энтитя trigger_transition, которую редко, но используют:

Trigger_transition - бращ-энтитя или триггер, который, так сказать, регулирует действия trigger_changelevel. Чтобы его активировать поставьте ему тоже самое имя что и у info_landmark(в нашем случае map1tomap2_lm). У trigger_transition две основные функции.Во-первых, trigger_changelevel не будет работать если игрок не находиться в зоне trigger_transition. А во-вторых в следующую карту попадут ТОЛЬКО ТЕ ЭНТИТИ, КОТОРЫЕ НАХОДЯТСЯ В ЗОНЕ trigger_transition!

Есть 3 основных типа смен карт:

1) Обычный(линейный)
2) Смещение
3) Односторонний

Итак рассмотрим каждый из них подробно:

1 - Обычный(линейный)

Это самый лёгкий способ смены карты, который был практически описан выше:

Посередине коридора создаём trigger_changelevel(браш с текстурой aaatrigger, затем tie to entity trigger_changelevel), в поле Name не пишем ничего за ненадобностью, в поле New map name пишем map2(карта у нас как помните map1), в поле Landmark Name пишем имя ландмарки map1tomap2_lm. Рядом с триггером создаём точечную энтитьку info_landmark, в которой в поле Name пишем map1tomap2_lm. Затем копируем trigger_changelevel, info_landmark и прилежащие к ним браши в map2 и в поле Name, в trigger_changelevel, пишем map1, чтобы возможен был обратный переход. А затем продолжаем коридор уже в map2. Вот собсно и всё по первому способу, ничего особо сложного нету.

2 - Смещение

Если в обычном способе при смене карты ничего видимого не меняется, то в способе смещения меняется окружающая среда вокруг игрока:

Этот способ используется в случаях, например, с телепортом. Отличие от вышеупомянутого способа в том что вы должны убедиться что при смене уровней игрок не застрянет в какой-нибудь стенке, для этого нужно сделать ясную область вокруг info_landmark, минимум равную той области, где начинается смена уровня в предыдущей карте(от которой игрок например телепортировался). Делаем всё как в предыдущем случае тока по середине корридора ставим спрайт телепорта и вокруг него trigger_changelevel, чтобы вступив в спрайт попасть в map2. Затем копируем ТОЛЬКО trigger_changelevel и info_landmark в map2 и ставим их на место появления игрока на следущей карте.Также меняем с map2 на map1 в поле New Map Name в trigger_changelevel, как в прошлом случае. Единственный совет - место появления игрока должно быть рядом с таким же спрайтом телепорта, чтобы вступив в него уже в map2 можно было вернуться в map1. Реалистика...

3 - Односторонний

Этот случай очень похож на смещение, разница лишь в том что в данном случае игрок не сможет телепортироваться обратно в map1:

Создаём trigger_changelevel с флагом Use Only, Name - map1ch(остальной конфиг такой же, как приведён выше), ландмарку с тем же конфигом, что приведён выше.Также какой нибудь триггер или мультименеджер котрый активирует trigger_changelevel вместе с какими нибудь эффектами.Затем копируем ТОЛЬКО trigger_changelevel и info_landmark в map2 и ставим их на место появления игрока на карте. В поле New Map Name в trigger_changelevel меняем с map2 на map1, это следует делать в любых случаях, даже если обратный переход невозможен!!!Всё дело в привязанности ландмарка с trigger_changelevel. Тут уже ничего не попишешь...

Вот собственно я и описал 3 основных случая смены уровня. Не очень сложно как казалось раньше, не так ли?

Но есть ещё один, более сложный четвёртый способ смены карт - Глобальный, с использованием Глобального имени:

Например вы едете на лифте и хотите сделать смену уровня, но не хотите потерять сам лифт, в этом случае вам как раз надо использовать Глобальное имя.Тогда лифт в map2, несмотря на своё изначальное положение, в начале карты будет двигаться как будто это тот же самый лифт из map1.Для этого обоим func_plat в поле Global Entity Name нужно поставить одинаковое имя, и расположить их в одинаковом расстоянии от info_landmark.В образцах, ссылки на которые будут представлены ниже, вы сможете найти образцы и такой смены карт.

Скачать карты с примером первого способа можно отсюда, с примером второго способа отсюда, с примером третьего метода отсюда и, наконец, четвертого способа отсюда.

Вот так, 90 % всех ошибок по смене уровней происходят по неправильным ссылкам между trigger_changelevel и info_landmark или неаккуратной расстановкой info_landmark в следующих картах.

Однажды я встретил ошибку, где у чувака все ссылки и расположения были правильными но он появлялся где-то в совсем постороннем месте, долго думали над этим, и, чтобы вы думали, он так заострил внимание на этих триггерах и ландмарках, что забыл поместить info_player_start на карте! Это я рассказал, чтобы показать пример того, как иногда,зациклившись на тригерах и ландмарках, забывают элементарные вещи...

Однако есть одна ошибка которая стоит особняком - когда вас выбрасывает из игры и пишет CHANGE LEVEL MAP1 LANDMARK.данная ошибка встречается очень часто и очень трудно сразу понять в чём там дело, появляются мысли с недоработкой самой халфы и т.д. Дело же совсем в другом: Эта проблема происходит когда в месте откуда игрок из map1 переходит в другую карту, в map2 стоит trigger_changelevel, то есть игрок только появившись на новой карте(map2) сразу оказывается в trigger_changelevel и меняется назад в map1, и затем в map1 происходит та же история и так до бесконечности, игра таких поворотов явно не тянет и выбрасывает с ошибкой.

Решение данной проблемы довольно просто - отодвигайте trigger_changelevel дальше от info_landmark в map2 и всё =)

Возникает иногда также и такая трабла( за предоставление данной информации отдельное спасибо хорошему челу,который именует себя Nicord) - После компиляции мапы вы запускаете ее в игре, и при смене карт халфа дохнет. Происходит это потому что включен хаммер\кварк\другой редактор мап. Решение просто - закройте редактор и запустите игру заново!:)

Маленький совет:

Так как смена уровней для игрока это всего лишь небольшой лоадинг, всегда создавайте иллюзию из map1(как пример с коридором) что за стеной что то есть(двери, вентиляция и т.д.) - вобщем что уровень продолжается а лоадинг просто небольшое недоразумение(лол) Поэтому обычные(линейные) смены карт старайтесь делать на поворотах, чтобы во второй карте не воспроизводить карту первую и наоборот. Да и так интересней играть, хотя это моё личное ИМХО...

Спасибо за внимание, ваш Mitoh
Категория: Создание карт | Добавил: SuperStart (18.09.2010)
Просмотров: 3742 | Рейтинг: 0.0/0 |



Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright www.akksimo.net © 2024