[HL2/CS:S] Кодовый замок/Coded lock (advanced)

  • Чтобы отвечать, сперва войдите на форум

    Винни

  • Пользователь
    С нами с 3 мая 10
  • 143
    0
    51

2d17b0c5cf14.png
В этом уроке я предоставляю Вам самый простой, самый удобный
и самый функциональный способ создания кодового замка на Ваших картах.
Работа этого кодового замка настолько проста для понимания,
что про неё можно просто рассказать, не предоставляя при этом графический материал.

 

1. Подготовка
aedb4c929538.jpg

И так, создадим карту, на которой поставим стену с дверью (prop_door_rotating) со стандартными настройками. Имя двери - door1.

Рядом с дверью на стене установим кодовый замок.
Каким образом будет создан кодовый замок и как он будет выглядеть - остаётся на Ваше усмотрение, главное, чтобы на кодовом замке было 10 кнопок (func_button).
Для удобства можете "налепить" на кнопки изображения цифр. Имена кнопкам задавать не нужно.

2. logic_compare, math_counter и logic_case
ecf9f900f58c.jpg

Создадим объект logic_compare со стандартными настройками. Имя compare1.
Создадим объект math_counter со стандартными настройками. Имя counter1.

На этом этапе нужно определиться из скольких цифр будет состоять Ваш код. Или другими словами: "какой длины пароль"?
Максимальная длина пароля может быть равна 16 цифр!
Пусть для нашего примера длина пароля будет равна 5 цифрам  ;) 

Создадим объект logic_case. Имя case1.
В зависимости от длины нашего пароля, в свойствах объекта case1 нужно указать соответствующее количество цифр от 0 до 15.
Так как наш пароль длиной 5 цифр, то в свойствах от "Case 01" до "Case 05" последовательно ставятся цифры от 0 до 4.
Настройки Case 01:

Case 01 0<br>Case 02 1<br>Case 03 2<br>Case 04 3<br>Case 05 4<br>Case 06<br>Case 07<br>Case 08<br>Case 09<br>Case 10<br>Case 11<br>Case 12<br>Case 13<br>Case 14<br>Case 15<br>Case 16<br><br>Если бы длина пароля была равна 10 цифр, то настройки были бы такими:<br>Case 01 0<br>Case 02 1<br>Case 03 2<br>Case 04 3<br>Case 05 4<br>Case 06 5<br>Case 07 6<br>Case 08 7<br>Case 09 8<br>Case 10 9<br>Case 11<br>Case 12<br>Case 13<br>Case 14<br>Case 15<br>Case 16<br>и т.д.&#91


3. Логика работы кодового замка
447652ac32e2.jpg

Создадим взаимосвязи между всеми элементами кодового замка.

Зайдем в Outputs кнопки №1 и добавим ей всего один Output:
OnIn | compare1 | SetValueCompare | 1
Для остальных кнопок добавляем по одному аналогичному Output'у:
для кнопки №2 - OnIn | compare1 | SetValueCompare | 2
для кнопки №3 - OnIn | compare1 | SetValueCompare | 3
и т.д.

Зайдем в Outputs объекта compare1 и добавим ему 2 Output'а:
OnEqualTo | counter1 | Add | 1
OnNotEqualTo | case1 | InValue | 0


Зайдем в Outputs объекта counter1 и добавим ему всего один Output:
OutValue | case1 | InValue

Зайдем в Outputs объекта case1 и добавим ему Output'ы:
OnCase01 | counter1 | SetValueNoFire | 0
OnCase01 | compare1 | SetCompareValue | 5
OnCase02 | compare1 | SetCompareValue | 0
OnCase03 | compare1 | SetCompareValue | 7
OnCase04 | compare1 | SetCompareValue | 5
OnCase05 | compare1 | SetCompareValue | 5
OnDefault | !self | InValue | 0
OnDefault | door1 | Unlock
OnDefault | door1 | Open | 0.01

Обратите внимание на Output'ы "SetCompareValue". Именно в них указывается наш пароль! Так как наш пароль состоит из 5 цифр, то и Output'ов тоже создано пять (OnCase01 - OnCase05).
Как не сложно заметить, пароль от двери "50755".

Зайдем в Outputs двери door1 и добавим ей всего один Output:
OnFullyClosed | !self | Lock
Это заставит дверь "захлопываться".

Теперь о том, как всё это работает.
<br>- Изначально в объект counter1 устанавливается значение 0, а в объект compare1 устанавливается первая цифра из пароля.<br>- Когда игрок нажимает на кнопку на пульте, в объект compare1 "приходит" соответствующее значение от 0 до 9, и сравнивается с первой цифрой пароля. Если значения НЕ равны, то кодовый замок сбрасывается в начальное состояние. Если значения равны, то к значению объекта counter1 прибавляется +1.<br>- Логика работы объекта counter1 такова, что сразу же после прибавления +1 он автоматически создает Output в котором пересылает своё изменёное значение другому объекту. В нашем случае, объект counter1 "присылает" своё новое значение объекту case1.<br>- Когда в объект case1 приходит новое значение, он сравнивает его со списком уже имеющихся значений. Эти значения могут быть простыми числами от 0 до 15. Мы их указывали в п.2 для объекта case1<br>настройки case1<br>- В зависимости от входного значения объект case1 автоматически выполняет свои Output'ы: "OnCase02", "OnCase03", "OnCase04", "OnCase05" или "OnDefault". Output'ы "OnCase02-OnCase05" устанавливают в объект counter1 следующую цифру пароля и на этом цикл работы кодового замка прекращается - замок ждёт нажатия следующей кнопки на пульте.<br>Output "OnDefault" может быть выполнен только тогда, когда игрок правильно набрал весь пароль. Поэтому при выполнении Output'а "OnDefault" параметры кодового замка вновь сбрасываются в начальное состояние, а дверь door1 отперается. &#91


Для подготовки кодового замка к работе необходимо сбросить все его параметры в начальное состояние.
Создайте где-нибудь на карте объект logic_auto со стандартными настройками. Добавьте ему один Output:
OnMapSpawn | case1 | InValue | 0
Таким образом в начале каждого раунда кодовый замок будет автоматически выставлять свои начальные значения.

Для подготовки кодового замка к работе необходимо сбросить все его параметры в начальное состояние.
Создайте где-нибудь на карте объект logic_auto со стандартными настройками. Добавьте ему один Output:
OnMapSpawn | case1 | InValue | 0
Таким образом в начале каждого раунда кодовый замок будет автоматически выставлять свои начальные значения.

4. Положительные стороны этого метода
cde220847692.jpg

+ Простота реализации.
+ Простота и наглядность изменения пароля.
+ Допустимость использования в пароле повторяющихся символов. Как в нашем примере: 3 раза используется цифра 5.
+ Метод одинаково прост для паролей любой допустимой длины - хоть из одного символа, хоть из шестнадцати.
+ Имеется возможность удобного и простого контроля за всеми циклами работы замка и за ошибками набора пароля.
+ Имеется возможность использовать в качестве пароля любую последовательность символов. Можно создать в игре хоть целую клавиатуру и использовать буквенно-циферные пароли типа таких: "hello world".  :) 
+ Расширяемость. Пароль для кодового замка может автоматически выбираться из нескольких вариантов, подготовленных заранее. Т.е. у одного и того же кодового замка в разных раундах может быть разный пароль с различной длиной символов.
+ Расширяемость. У одного и того же кодового замка одновременно может быть сразу несколько "активных" паролей с различной длиной символов.

5. Скачать карты-примеры:

Временно недоступно.

6. Про тему:

Поставь "Нравится" за тему ;)


Изменено: Винни, 14 февраля 2018 - 06:37

Делаю/переношу модели, карты и пр.
    • 8
  • Наверх
03 июня 2011 - 05:52


0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 невидимых