Sidebar

Сложный кодовый замок в CS 1.6 с экраном для ввода и случайным кодом

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=/forums/pomosch.12/]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
Сложный кодовый замок в CS 1.6 с экраном для ввода и случайным кодом

...извращенцам над энтитями посвящается...(с)
Перед тем как открывать bsp, прочитайте в конце!!!
----------------------------------------------------
Обычные кодовые замки, такие как в предыдущей теме, являются "одноразовыми", т.е. один раз узнал пароль и от него нету пользы. Их можно использовать для всяких модов(как автор и делал), но многим может пригодиться хороший кодовый замок для своей карты. Я предлагаю вам разработанную мной довольно крупную систему для генерирования 3-значного кода для замка и циферблата.
3 знака я взял, так как 2 угадать можно,а 4-слишком много :)
----------------------------------------------------
Итак начнем.Так как подобную систему мало кто сможет сделать сам(не хватит терпения или времени :) ), то я объясню принцип ее работы, чтоб вы могли переделать ее под свои идеи.

В карте я объединил группы энтити в визуальные группы, чтоб проще было их искать.

Начинается все с загрузки карты, после чего активируется trigger_auto. Он запускает "вечный двигатель"=2 multi_manager (visgroup "task(0.5sec)"), которые активируют друг друга, а первый активирует 3 счетчика counter1,2,3.Т.е. счетчики активируются каждые 0.5 секунд(время можно увеличить в multi_manager, это нужно чтоб обеспечить случайность кода).

Каждый счетчик имеет разный предел(я взял 2,3,5), чтоб случайность была больше. Каждый из них активирует свою цепочку смены кода(visgroup firstkey random, secondkey random, thirdkey random). Для начала генерирования кода нужно активировать multi_manager "counteron" (visgroup "turn on randomize"), в примере он активируется кнопкой возле респа, на карте надо ставить trigger_multiple, чтоб человек прошел через него, а возле клавиатуры надо поставить триггер, который будет выключать генерацию кода, т.е. активировать counteroff(трудно будет угадать код, который меняется постоянно %) ).

Теперь о принципе их работы. Расскажу про первую цепочку, остальные аналогично.
Во главе цепочки стоит trigger_breakable m1, который является "указателем" на цифру кода. Можно использовать любой другой энтити, который активирует target после активации(func_door можно брать с флагом toggle). m1 имеет target on break t11, первая пара trigger_changetarget в цепочке. Первый из них(тот, что выше) меняет target у m1 на t12(продвижение по цепочке), а второй меняет target у объекта func_breakable firstkey, который отвечает за первую цифру в коде. После активации указатель двигается вперед, меняя первую цифру в коде(чуть позже будет). Каждая из цепочек имеет свою последовательность цифр, она записана в нижних trigger_changetarget(а именно в поле new target). В примере я для каждой цифры кода использовал разные последовательности.

После остановки генерации( когда игрок подойдет в циферблату) мы имеем 3 func_breakable(firstkey,secondkey,thirdkey, visgroup "random init"), в target которых записана нужная цифра. В той же visgroup мы видим по 10 trigger_changetarget для каждой цифры. С этим пока все.

Теперь о циферблате. Каждая цифра(func_button) активирует func_door с такой же цифрой(у меня в примере кнопки-белые цифры, двери-красные цифры), что будет нашим "экраном", который показывает что мы ввели. Сначала все кнопки имеют в target func_door с именем 1digitN, где N-цифра на кнопке, а "1" обозначает первую цифру, которую мы вводим. Каждая func_door для каждой цифры кода имеет в target некий game_counter(limit=2) resetMd(M=1,2,3). При этом мы заранее установили эти счетчики в позицию 1 через game_counter_set "setcounter", который активируется вместе с первой цифрой кода(когда игрок подошел). Эти game_counter нужны, так как func_door активирует target при открытии и закрытии, а нам нужно только 1 раз, а game_counter_set нужен, потому что если в счетчике взять initial value 1, то он будет сбиваться не к 0, как нам надо, а к этой 1.

После нажатия кнопки активируется один из счетчиков. В случае неверной кнопки счетчик активирует func_breakable "reset", а если правильно, то активируется multi_manager okm1(visgroup normkey), который делает 3 вещи:

1)активирует target1ok - trigger_changetarget, который меняет цель для func_breakable "1wrong?"(visgroup check keys) на 1right. Это необходимо для того, чтоб игрок видел какую цифру он угадал. После ввода 3 цифр будет вызваны 1wrong? 2wrong? 3wrong?, которые активируют зеленую дверь, если их target 1right,2right,3right, и красную, если цель не изменялась. После вызова их target возвращается к начальным(в той же visgroup).
2)активирует счетчик ok, который фиксирует кол-во правильных цифр. Он обнуляется после нажатия 3 кнопок.
3)активирует reset, который мы упоминали.

func_breakable "reset" имеет цепочку, на подобии той, что была в начале(visgroup keycounter(3)). После нажатия клавиш она перемещается вперед, вызывая:

а)multi_manager, который прячет нужное "окошко" циферблата 1blat, 2blat, 3blat(чтоб цифра, которую мы нажали, была видна). Еще он активирует инициализацию второй и третьей цифры в коде secondkey и thirdkey, visgroup "random init"(первую мы инициализировали в начале);
б)10 trigger_changetarget, которые меняют target у кнопок с цифрами на следующую колонку, visgroup "goto second/third key"(1digit1->2digit1,..,1digit9->2digit9,..2digit1->3digit1...).

После 3ей активации reset(3 кнопки нажали) вызывается multi_manager 3keys(visgroup "end of turn"). Он делает много вещей:

1) Отключает клавиатуру, делая target у всех кнопок 111(visgroup turn off keypad), а после 4 секунд включает ее через resetkeypad(visgroup "return to first key")
2) Убирает черную полоску вверху для отображения правильных цифр(выше было упомянуто о 1wrong? и т.д.) и вызывает цветные, после чего обнуляет их значения.
3) Обнуляет счетчик правильно набранных цифр reset_ok(visgroup "norm key counter").
4) Возвращает обратно таблички через 2 сек, которые закрывают набранные цифры, 1blat, 2blat, 3blat.
5) Через 2 сек активирует func_door access, который имеет target "denied"( табличка с надписью "access denied"). Если 3 цифры правильно введены, то target меняется на другую табличку "access accept", и внизу экрана мы видим открыт доступ или нет.
6) Вызывает группу trigger_changetarget resetkeypad. Они возвращают target у кнопок на первую группу func_door(табличек с цифрами) 1digitN(N=0..9).

Если мы ввели 3 цифры правильно, то нам пишут "access accept", дверь открывается и клавиатура блокируется до след активации multi_manager presskey(в начале о нем рассказывал). Он активирует resetkeypad, который опять запускает клавиатуру. Еще он активирует resetdigits(группа trigger_changetarget, visgroup "reset digits"), которые обнуляют предыдущий код(убирает указатели на ok1,ok2,ok3).
-----------------------------------------------------
Надеюсь методы, которые я использовал здесь, помогут кому-то воплотить в жизнь чьи-то идеи, ну или украсят карту небольшим кодовым замком( всего 207 точечных и 63 брашевых этнини).

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

:umnik: На счет bsp!!! Когда появляетесь, нажмите на кнопку перед собой( запускает генератор кода), подождите немного. Вы будете видеть как на краю карты бьется стекло. А перед набором кода нажмите кнопку рядом с циферблатом, чтоб остановить генерацию.

Прикрепил исходник с вадом, бсп и скрин с плантациями триггеров в хаммере =)
p.s. если вы используете это в своей карте и все точечные энтити положите в 1 место, то не думаю что кто-то сможет понять принцип его работы %)
p.p.s. Саму систему можно еще усовершенствовать и оптимизировать(я, пока писал это сообщение, делал изменения больше 3 раз в уже хорошо рабочем замке).
 

Вложения

Последнее редактирование:

HoRRoR

...
05.01.2006
4 593
7
38
мдааа..... всего 207 точечных и 63 брашевых этнини.... всего-то... и пофих что лимит в игре 512
но работа по-ходу огромная проделана, так что держи в репу
 

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
лимит(как написано у Дмитрича) >400 брашевых и >1000 точечных =), так что можно еще парочку таких взять)
 

TwisteR

VIP
VIP
24.07.2006
4 045
  • Серебряная медаль 311
  • Золотая медаль 115
  • Серебряная медаль 215
Брашевый извращенец у нас уже есть. Вот теперь появился и извращенец над энтитями :agy:

Молодец, отличная работа!
 

DaGgeR

Win7+SourceSDK=@%$!!
03.05.2009
223
33
0
16
эээ а как узнать правильный пароль?
Оффтоп
 

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
DaGgeR сказал(а):
эээ а как узнать правильный пароль?
после того как запустил и выключил "генератор", вводишь пароли и смотришь какие цифры совпали :roll: вообще самый быстрый способ-вводить по 3 одинаковые цифры и за 10 вводов уже будешь знать код
 

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
кому что непонятно-пишите, попытаюсь объяснить как можно лучше ;)
 

DaGgeR

Win7+SourceSDK=@%$!!
03.05.2009
223
33
0
16
2 Monyak:
а сможешь реализовать, чтоб код к двери прописывался где нить на экранчике?
 

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
DaGgeR сказал(а):
2 Monyak:
а сможешь реализовать, чтоб код к двери прописывался где нить на экранчике?
я вообще сначала так и хотел, но потом перехотелось по причине плавления мозга :D
немного примитивно, но думаю сойдет: после активации presskey(остановка генерации кода) вместе с инициализацией кода нужные цифры вылазят на 200 секунд(т.е. только на текущий раунд, время можешь поменять в visgroup "show code digits").
 

Вложения

  • 10.9 КБ Просмотров: 305

Z-RAY-Z

New member
16.04.2010
185
31
А я не знал, что движок Халф-Лайф позволяет собрать и реализовать столь сложную систему из ентитей.
 

Game Server

Доноры Красавчики

Пользователи онлайн