Как многим известно в ТЧ есть возможность открывать двери при помощи нужного кода, вводя его на клавиатурной панели. Собственно эта самая панель и является ключевым элементом, самый интересный из которых набор кода. Отвечает за это действо схема ph_code (ph_code.script). При вводе пароля выдаётся инфопоршень, а в логике двери есть условие на наличие данного инфопоршня, при котором дверь откроется. Для тайников используется схема ph_idle, а для схемы ph_code как такового, перехода на другую схему нет. Т.е. вся загвоздка состоит в возможности перехода со схемы ph_code на другую. Ну что же давайте добавим эту возможность... Переход будем осуществлять непосредственно в параметре on_code, т.е. при вводе правильного пароля будет происходить переход на другую схему, при которой появится возможность использовать тайник по назначению.
За работу параметра on_code отвечает метод OnNumberReceive, а именно вот эта проверка: Original if self.st.on_code then printf("ph_code <OnNumberReceive>: on_code [%s]", text) xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.on_code.condlist) end Чтобы для данного параметра была возможность перехода на другую схему, эту проверку нужно заменить вот этой:
Modified if self.st.on_code ~= nil then printf("ph_code <OnNumberReceive>: on_code [%s]", text) --<# Возможность перехода на другую схему при правильном вводе пароля (on_code). local section = xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.on_code.condlist) xr_logic.switch_to_section(self.object, self.st,section) return true --#> end Вот таким не хитрым способом добавляется возможность использовать схему ph_code для более широкого спектра действий.
Теперь приступим непосредственно к тайнику. Для примера я взял синий ящик, который стоит у забора в Деревне новичков. Слегка изменил его секцию спавна: Spawn section [2297] ; cse_abstract properties section_name = inventory_box name = level_prefix_inventory_box position = -212.106658935547,-20.0091133117676,-141.916839599609 direction = -0.0120084341615438,1.90779304504395,-0.0344137884676456
; cse_alife_object properties game_vertex_id = 0 distance = 0 level_vertex_id = 594270 object_flags = 0xffffff3b custom_data = <<END [spawn] wpn_pm ammo_9x18_fmj [logic] cfg = scripts\coded_treasure.ltx END story_id = 2000
; cse_visual properties visual_name = physics\equipment_cache\equipment_box_01_case Изменения коснулись лишь добавлением для него custom_data. (Секция spawn была добавлена для демонстрации). Логика выглядит следующим образом: Coded_treasure.ltx [logic] active = ph_code@close
[ph_code@close] code = 123 on_code = ph_idle@enable
[ph_idle@enable] nonscript_usable = true tips = st_search_treasure Собственно всё. При вводе пароля "123" мы получим открытый тайник. Вот небольшое видео для демонстрации: Видео димонстрация [video] http://youtube.com/watch?v=DbzFNj8HVmc [/video]
Источник: http://www.amk-team.ru/forum/index.php?showtopic=6458&st=40 |