Добро пожаловать на форум по игре Torchlight!

Новости: Магазин - Гамазавр, скидки на игры

Автор Тема: [TUTORIAL] Сундук с кодовым замком  (Прочитано 5007 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн S_Kleer

  • Пользователь
  • **
  • Автор темы
  • Сообщений: 192
  • Репутация: 15
  • Лорд Тьмы
  • Класс: Берсерк
[TUTORIAL] Сундук с кодовым замком
« : 11 Сентябрь 2015, 16:04:24 »
Всем привет! Так как я недавно разобрался со статами, я осуществил давнюю мечту - связать действия UI с игровым миром.
Сегодня я вас научу делать сундук с кодовым замком. Единственный минус данного метода в том, что на каждый сундук придётся делать свои статы, так как я пока не придумал, как устанавливать новый случайный код, после взлома сундука.

Для начала, создайте мод с пустой локацией. Далее, создайте группу LockedChest. В неё добавим два UnitTrigger'a, Logic Block, три Stat Evaluator'a и Menu Controller.

Первый Unit Trigger назовём UnlockedChest и выберем какой-нибудь сундук в поле MODEL. Установим флаг ENABLED на FALSE.

Второй Unit Trigger назовём LockedChest и выберем в поле MODEL - Invisible Lever. В поле TEXT впишем Locked Chest. Данный Locked Chest должен всегда располагаться там же, где и основной сундук! Если, конечно, это не тайная кнопка.
Stat Evaluator'ы назовём StatValid1, StatValid2, StatValid3.


Переходим в редактор статов. Data Editors -> Stats. Там нажмите на зелёный плюсик. Назовём новый стат PuzzleStat1.
В поле ValueType оставляем TYPE_INT, так как это целое число для кодового замка.
В поле Value, Default Value и Min Value установим 1.
В поле Max Value установим 10.
В поле Increment Value установим 1. (При изменении значения стата, оно будет изменяться на это число)
Создайте по этому принципу ещё два стат - PuzzleStat2 и PuzzleStat3.
И не забывайте нажимать на дискету, для сохранения изменений в стате.


Теперь мы можем настроить код для сундука! Допустим, он у нас будет 883.
В StatValid1 в поле TYPE установим EQUAL.
В поле STAT 1 DYNAMIC найдём наш PuzzleStat1.
И наконец в полях FLOAT, INT и STRING установим 8.
Повторите это для StatValid2 и StatValid3, Только не забывайте, что в StatValid3 у нас будет число для сравнения 3.


К логике пока не будем переходить, потому что нужно создать менюшку для взаимодействия с сундуком.
Перейдём в редактор UI. Для начала набросайте какое нибудь приятное окошко, например, у меня такое:


Как видите, в центре у меня какие-то непонятные символы. Это элемент управления Stat (UI -> Stat). Он нам нужен для отображения наших статов. Всего у меня их 3.
Настроить их довольно просто. В поле STAT ONE найдите _DY_PUZZLESTAT1 (Все созданные статы через редактор, начинаются с префикса _DY_), а в поле TEXT оставьте только <STAT1>. Таким же образом, настройте ещё 2 панели для отображения второго и третьего стата.

Так же, нам понадобиться 3 кнопки, для изменения значения статов. Я их назвал Button1, Button2 и Button3. И одна кнопка для закрытия окна.

Ах да, ещё у меня есть 2 текста. Первый скрыт, но имеет текст Chest Unlocked, второй вы уже видели, он имеет текст Chest is Lock.

Думаю, теперь можно перейти к логике окна. Создайте группу LogicWindow и добавьте в неё шесть Stat Evaluatpr'a и шесть Stat Operator'ов.
Stat Evaluator'ы назовите Stat1, Stat2, Stat3, Stat1=10, Stat2=10, Stat3=10. Настройте Stat1, Stat2 и Stat3 так же, как и StatValid'ы.
Stat1=10, Stat2=10 и Stat3=10 тоже настройте так же, только в полях FLOAT, INT, STRING установите 10.
Stat Operator'ы назовите StatReset1, StatReset2, StatReset3, StatAdd1, StatAdd2 и StatAdd3.

Настроим все StatReset:
В поле OPERATOR установите SET EQUAL.
В полях FLOAT и INT установите 1.
В поле STAT 1 DYNAMIC установите PUZZLESTAT (1,2,3) (Для каждого StatReset свой стат соответственно)

Теперь настроим все StatAdd:
В поле OPERATOR установите ADD.
В полях FLOAT и INT установите 1.
В поле STAT 1 DYNAMIC установите PUZZLESTAT (1,2,3) (Для каждого StatAdd свой стат соответственно)


Для удобства, можно создать 4 группы. Stats, StatsReset, StatsAdd, StatsValid.


Уф, совсем забыл. Добавьте Menu Definition (UI -> Menu Definition) и Menu Controller (UI -> Menu Controller).
В Menu Definition установите флаг MODAL DIALOG на True, чтобы персонаж не мог перемещаться, а в поле MENU NAME укажем имя PuzzleMenu.
В Menu Controller, в поле MENU NAME выберите наше созданное меню - PuzzleMenu. Если его нет в списке, то всё сохраните и перезапустите редактор.
И ещё, данное меню нужно сохранять в папку ui -> menus -> ingamemenus. Иначе оно не будет работать.

Наконец, можно перейти к созданию логики. Откройте Logic Group и добавьте туда все кнопки, stat operator'ы и stat evaluator'ы, а так же Menu Controller и 2 текста, которые показывают, открыт ли замок или нет.
Словами всё долго объяснять, поэтому прицеплю картинку:


И так, при нажатии на кнопку, мы прибавляем к стату единицу. Далее, проверяем, если этот стат равен 10 (Evaluated True), то его сбрасываем, инчае (Evaluated False), начинаем проверку на правильность пароля (Evaluate в Stat1). Проверка довольно проста, если первый стат верный, т.е. равен 8, то проверяем следующий, иначе, скрываем текст о том, что сундук открыт и отображаем текст, что сундук закрыт. В итоге, когда проверка доберётся до 3-го стата и он окажется верным, то показываем текст о том, что мы взломали сундук!

Наконец, можем перейти к сцене и настроить всю логику.
В Menu Controller установите наше PuzzleMenu. Откройте Logic Group и добавьте LockedChest, Menu Controller, StatValid1, StatValid2, StatValid3 и UnlockedChest.
Логика здесь по проще:


Как видите, тут тоже строгая проверка статов по цепочке, если хоть один не верен (Evaluated False), то сбрасываем наш нивидимый рычаг, чтобы его можно было по новой использовать и открываем меню для взлома замка.

Да, ну и статью я накатал. Если всё сделано правильно, сохраните всё, перезапустите редактор, откройте локацию и проверяйте!

<a href="http://www.youtube.com/watch?v=90UT79gaL3M" target="_blank">http://www.youtube.com/watch?v=90UT79gaL3M</a>

Так же, с этой системой можно делать не только запертые сундуки, но и интересные головоломки для квестов. Или головоломки для открытия тайной комнаты.

Надеюсь, статья вам понравилась. Всем спасибо за внимание!  8)
« Последнее редактирование: 11 Сентябрь 2015, 16:22:24 от S_Kleer »

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #1 : 12 Сентябрь 2015, 08:14:34 »
Ого, круто.  8) Надо будет подумать, как можно реализовать случайно генерируемые коды и их проверку.
Еще хорошо бы Кнопку "Открыть сундук" - без подсказки "открыто". Т.е. если код верный - то сундук открывается, а если нет - то появлятеся сообщение об ошибке открытия. Ну тут проблем особых быть не должно - это просто надо повозиться с логикой и UI.
Но идея отличная, я.

Еще бы как-то связать это с подсказкой к замку - записка или книжка. Думаю, это можно было бы реализовать через систему "Золотой сундук - Ключ", т.е. когда есть 2 связанных между собой объекта на карте сундук и ключ к нему.


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #2 : 12 Сентябрь 2015, 08:26:19 »
Хм... а что если использовать только 2 стата - т.е. некие трехзначные числа ХХХ. Т.е. код замка задается одним статом - Стат1, а потом происходит проверка второго стата(Стат2) с первым? А сам подбор второго стата будет работать следующим образом - каждый плюсик будет прибавлять сотни, десятки и единички? Т.е. первый плюс прибавляет ко 2 стату по сотне, второй по десятке, а третий - по единичке? После каждого изменения идет проверка Стат1 = Стат2?

Наверняка при таком варианте можно попробовать реализовать рэндомную генерацию Стат1. Вообще, надо подумать как это можно вписать в игру...
Например на локации должно сгенерировать 5 сундуков с кодовым замков - значит нам нужно 5шт Стат1 и 5(возможно 1 динамический) Стат2. Т.е. при создании у нас появятся 5 сундуков каждый из которых получит случайно сгенерированный Код(Стат1) при нахождении этих сундуков нам необходимо будет подобрать пароль (Стат2). Если использовать 5 разных Статов2, то особых сложностей нет, если же Стат2 у нас только 1 - то его надо будет сбрасывать каждый раз в ноль, после взаимодействия с сундуком.
« Последнее редактирование: 12 Сентябрь 2015, 08:32:19 от Kva3imoda »


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #3 : 12 Сентябрь 2015, 08:48:37 »
Я даже знаю, как бы я мог это использовать в моем моде.  ;D Кодовые замки отлично вписываются в стимпанк, они не выглядят технологически чужеродно, как в каком-нибудь фэнтази-мире.
Есть у меня идея с изобретателем, и я склоняюсь к тому, что это будет один из пассажиров - красная панда по имени Тинкер. Этот гений изобрел Виталайзер и направлялся в Индастриум, чтобы представить свое изобретение. Но, к несчастью, он погиб во время аварии, так как его личный девайс получил повреждения и не сработал. Наш герой найдет погибшего Тинкера, поломанный виталайзер(который можно будет починить позже) и записи изобретателя. Эти записи объяснят принцип работы устройства и то, что несколько образцов готовых устройств находятся в его сундуке который заперт на кодовый замок - чтоб никто не смог добраться до этого мощного устройства. Появится квест - найти Виталайзер.


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #4 : 12 Сентябрь 2015, 08:58:20 »
И что круто, если реализовать систему генерации стата1, то можно будет сделать так, что сундук каждый раз будет иметь новый код. А в записях Тинкера этот код тоже будет обновляться.  :)
« Последнее редактирование: 12 Сентябрь 2015, 09:06:08 от Kva3imoda »


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #5 : 12 Сентябрь 2015, 11:02:47 »
Я вот тут подумал, что можно ведь сделать не только кодовый замок, но и замок с отмычками!  :)
Принцип работы примерно тот же самый, что и в случае с кодовым замком, только взлом происходит иначе + нужны отмычки. За основу я взял схему реализации взлома в игре Готика, может кто помнит - там надо было нажимать вправо-влево в правильной комбинации, иначе отмычка ломалась.

Концепция:
При наличии отмычки появляется меню взлома.
Меню взлома представляет из себя простое меню состоящее из 2х кнопок "Вправо" и "Влево"
Принцип работы взлома заключается в том, что когда вы нажимаете "Влево" - то это означает 0, а если "Вправо" - то 1
Комбинация замка могла бы выглядеть следующим образом - 10110 - по сути число в бинарном коде. (кстати 10110 = 22 в десятичной системе, что весьма интересно и может пригодиться!)
Т.е. задача сводится к тому, чтобы реализовать как посредством нажимания 2х кнопок "Вправо" и "Влево" получить число 10110 в меню взлома и это число сравнить с кодом замка. + добавить проверку на наличие отмычки в инвентаре + удаление отмычки при неудаче.


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн S_Kleer

  • Пользователь
  • **
  • Автор темы
  • Сообщений: 192
  • Репутация: 15
  • Лорд Тьмы
  • Класс: Берсерк
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #6 : 12 Сентябрь 2015, 12:04:12 »
Оу, отмычка это круто.  8) *побежал пытаться это реализовывать*

И да, об замке через один стат я тоже думал, после того, как уже написал статью. XD Ведь же ничего не мешает прибавлять сотни, десятки и единицы.

--- UPD
И идея сравнения двух статов тоже понравилась. Возможно, это можно как-то реализовать. Нужно по-пробовать.

Уф. Пока с отмычками ничего не придумывается... Хотел сделать прибавление 1, если нажать влево и 2, если нажать вправо, а потом проверить полученное число (после ввода всего пароля), но что мешает тупо по-нажимать влево и получить точно такое же число? А делать проверку правильности числа при каждом нажатии не вариант. Получится та же ситуация, что и с сундуком - никакого рандомного пароля...

Если бы стат можно было использовать как строку и прибавлять к этой строке символ, то вполне можно было сделать систему с отмычками. Я не говорю, что это невозможно, просто нужно придумать другой подход.
« Последнее редактирование: 12 Сентябрь 2015, 12:38:52 от S_Kleer »

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #7 : 12 Сентябрь 2015, 13:23:22 »
Хотел сделать прибавление 1, если нажать влево и 2, если нажать вправо, а потом проверить полученное число (после ввода всего пароля), но что мешает тупо по-нажимать влево и получить точно такое же число? А делать проверку правильности числа при каждом нажатии не вариант. Получится та же ситуация, что и с сундуком - никакого рандомного пароля...
Мне кажется нужно действовать следующим образом:
код 1011
1. Нажимем Вправо - + 1000
2. Наживаем Влево - +0(если нажимаем Вправо то +100)
3. Нажимаем Вправо - +10
4. Нажимаем Вправо - +1

Т.е. нужна ступенчатая система связанных stat evaluatorов которые прибавляют разные значения - порядки числа. :)


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн S_Kleer

  • Пользователь
  • **
  • Автор темы
  • Сообщений: 192
  • Репутация: 15
  • Лорд Тьмы
  • Класс: Берсерк
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #8 : 12 Сентябрь 2015, 14:53:32 »
Первая идея это добавить ещё один стат.
Если он равен 1, то прибавляем к введённому паролю 1000
Если равен 2, прибавляем 100
Если равен 3, прибавляем 10
Если равен 4, прибавляем 1

На словах вроде просто, нужно в гутсе проверить.

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #9 : 12 Сентябрь 2015, 15:03:28 »
Первая идея это добавить ещё один стат.
Если он равен 1, то прибавляем к введённому паролю 1000
Если равен 2, прибавляем 100
Если равен 3, прибавляем 10
Если равен 4, прибавляем 1

На словах вроде просто, нужно в гутсе проверить.
Может это можно реализовать каким-то счетчиком? Который бы считал операции/действия? Вроде в ГУТСе есть счетчик.


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн S_Kleer

  • Пользователь
  • **
  • Автор темы
  • Сообщений: 192
  • Репутация: 15
  • Лорд Тьмы
  • Класс: Берсерк
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #10 : 12 Сентябрь 2015, 15:33:47 »
В общем реализовал эту систему (частично) с использованием 5 StatEvaluator'ов и 8 StatOperator'ов. Для замка из 4 цифр. Ужас какой-то...
А про счётчики я что-то не подумал, может и можно, сейчас проверим.

---UPD
Не со счётчиком вряд ли получится (Counter), т.к. там нет отправки данных на конкретном значении, а только на одном. Т.е. если мы задали 10, то именно тогда сработает счётчик, а если делать проверку при каждом добавлении в счётчик, я не знаю, как отловить это число, чтобы, например, прибавить 1000 или 10.
« Последнее редактирование: 12 Сентябрь 2015, 15:39:56 от S_Kleer »

Оффлайн S_Kleer

  • Пользователь
  • **
  • Автор темы
  • Сообщений: 192
  • Репутация: 15
  • Лорд Тьмы
  • Класс: Берсерк
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #11 : 12 Сентябрь 2015, 15:58:48 »
Оу. Вроде я придумал систему случайных паролей для сундуков, в данном случае, буду рассматривать вариант с отмычками, где пароли имеют вид 10110.

В гутсе есть объект Random Choice, который выбирает 1 из 5 вариантов. В данном случае, нам нужно 2 варианта.
Работает это так:
Нужно завести опять дополнительный стат, для проверки, сколько нужно прибавить к паролю.
Если он равен 1 -> Переходим в объект рандома -> Если первая ветка, то прибавляем 1000, если вторая, то ничего не делаем.
Если он равен 2 -> Переходим в объект рандома -> Если первая ветка, то прибавляем 100, если вторая, то ничего не делаем.
Если он равен 3 -> Переходим в объект рандома -> Если первая ветка, то прибавляем 10, если вторая, то ничего не делаем.
Если он равен 4 -> Переходим в объект рандома -> Если первая ветка, то прибавляем 1, если вторая, то ничего не делаем.

Но опять же один минус.  ;D Куда же без них. При открытии UI для взлома, пароль будет всегда уникальным.  ;D

--- UPD
А хотя... Можно завести (да, да, вы уже поняли  ;D) ещё один стат. При первом открытии UI, проверяем, если у него 1, то ставим 2 и генерируем пароль. Вот так вот. А если сундук будет взломан, то устанавливаем его снова на 1, и когда найдём новый сундук, он будет иметь новый пароль.
И опять же минус. Да, данный способ будет хорош, но если мы пытались взломать один сундук, то и все остальные будут иметь такой же пароль, но думаю, это не будет особо смертельно.
« Последнее редактирование: 12 Сентябрь 2015, 16:05:15 от S_Kleer »

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #12 : 12 Сентябрь 2015, 16:31:54 »
Думаю, что надо сделать рэндомный генератор комбинации для замка. :)


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #13 : 12 Сентябрь 2015, 16:39:22 »
Работает это следующим образом:
Стат1 - комбинация замка представленная в виде 1 и 2 - да, лучше использовать эти цифры, а не 1 и 0, так как число начинающееся с 0 сделать невозможно в текущем варианте.
Предположим нам нужна комбинация 21112 - т.е. пятизначное число, которое представляет из себя сумму 5 чисел:
20000 + 1000 + 100 + 10 + 2

Игрок активирует триггер, чем запускает генератор
Генератор должен работать следующим образом:
Шаг1 Генерация первого числа (в нашем случае 20000, но это должно быть случайное число 1 или 2 *10000)
Шаг2 Стат1=Стат1+первое число
Шаг3 Генрация второго чисоа (в нашем случае 1000, т.е. 1 или 2*1000)
Шаг4 Стат1=Стат1 + второе число
и так далее
На выходе имеем Стат1=21112(т.е. случайное число подчиняющееся правилу - состоящему из 1 или 2)


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

Оффлайн Kva3imoda

  • Главный Модератор
  • *****
  • Сообщений: 5325
  • Репутация: 162
  • Ломай, круши!
  • Класс: Разрушитель
Re: [TUTORIAL] Сундук с кодовым замком
« Ответ #14 : 12 Сентябрь 2015, 16:41:48 »
В общем, я думаю, что нет нужды усложнять систему дополнительными статами, вполне можно обойтись стандартными функциями и операциями.


«Если вы не убиваете врагов обеими руками, значит, не используете оружие на полную мощность».

 

Яндекс.Метрика SPRINTHOST.RU: быстрый и надежный хостинг!
SMF 2.0.5 | SMF © 2011, Simple Machines
| Карта сайта | Форум фан-сайта mytorchlight.ru
При использовании материалов гиперссылка на mytorchlight.ru обязательна.