Многократное использование рычагов - Версия для печати +- Город Джунов (https://www.gipat.ru/forum) +-- Форум Обсуждение Проклятых Земель (https://www.gipat.ru/forum/forum-19.html) +--- Форум MODный форум (https://www.gipat.ru/forum/forum-9.html) +--- Темы: Многократное использование рычагов (/thread-3314.html) |
Многократное использование рычагов - Devastator - 23.09.2009 Делаю свой мод. И в одном из квестов мне понадобилось сделать многократное использование рычагов ( в моём случае дверей ). Разбирался с Mob'Surgeon и с Mob Reversing Tool и в результате удалось реализовать это следующим образом: В Mob Reversing Tool в разделе Lever на этот рычаг в параметре ID LEVER IS CYCLED установил значение 1( без этого после активации двери её можно было использовать, но при этом она не закрывалась). В мобе прописал скрипт: GlobalVars ( NULL : object, VSS#i#val : object, i : object, Door : object ) Script Door ( if ( IsEqual( GetLeverState( Dооr ) , 1 ) ) then ( KillScript( ) EnableLever( GetObjectByID( "ID" ) , 1 ) Door#1#1( this ) ) ) Script Door#1#1 ( if ( IsEqual( GetLeverState( Door ) , 0 ) ) then ( KillScript( ) EnableLever( GetObjectByID( "ID" ) , 1 ) Door( this ) ) ) World Script( Sleep(2) Door = GetObjectByID( "ID" ) Door(NULL) ) Всё бы хорошо но при этом дважды проигрывается звук открытиязакрытия двери. Уважаемые может подскажете как сделать что бы звук проигрывался по одному разу. Многократное использование рычагов - ALtair - 25.09.2009 Так ты тут сделал рекурсивное автоматическое цикличное открывание-закрывание без участия игрока %) Если тебе просто нужна дверь, которую можно открывать/закрывать, то в скрипте тебе ничего писать не надо, тебе надо только настроить саму дверь (собственно прописать ей ID LEVER IS CYCLED = 1). Далее, если ты хочешь навесить на открытие/закрытие какие-то события, то делай так: Код: Script CheckDoor Соответственно в обработчиках DoSomethingOnDoor[Opened/Closed]() можешь написать чо угодно. Однако там же прям переключать состояния этой же двери я бы крайне не рекомендовал. Пусть переключением занимается игрок, а не скрипт. Использовать SetLeverState() надо только тогда, когда ты хочешь из скрипта автоматически "переключить" состояние рычага. Поднять/опустить мост, например. Или открыть/закрыть дверь, как в этом примере. Многократное использование рычагов - Devastator - 25.09.2009 Цитата:Так ты тут сделал рекурсивное автоматическое цикличное открывание-закрывание без участия игрока %)Ну вообще-то дверь даже не шелохнётся без использования её игроком. Команда EnableLever делает рычаг доступным для повторного использования. Она бы постоянно хлопала только если бы я использовал команду SetLeverState. А вообще Altair спасибо за совет. Дело в том, что если поставить лишь ID LEVER IS CYCLED = 1, то при попытке закрыть дверь курсор использования даже не появляется. Именно по этому я добавил данный скрипт. А проверку на состояние открытиязакрытия двери я осуществлял другим скриптом и там всё понятно. Попробуй сам зациклить рычаг если не веришь. Многократное использование рычагов - ALtair - 26.09.2009 Да, сорри, я перепутал EnableLever со SwitchLever. Флажок IsCycled говорит о том, что рычаг этот будет переключаться в начальное состояние при его использовании в случае, когда он уже находится в конечном. При ЛЮБОМ УСПЕШНОМ использовании рычага, он выключается (вызывается аналог EnableLever(LeverObject, 0)), поэтому его постоянно надо включать, да. А по поводу звука - это глюки такие в движке. На любое изменение своего состояния (в том числе и enabled/disabled) рычаг может (даже должен) проиграть звук. С этим ниче не поделаешь %) |