Плагин свой надо не забывать отмечать при загрузке "Активным". Тогда всё молча, без вопросов, будет сохраняться в этот активный плагин. Один раз забудешь отметить и загрузишь неактивным - все вроде бы откроется и всё "увидится" в редакторе, но при сохранении будет предложено сохранить сделанные изменения в НОВЫЙ плагин. И останется часть работы там, в старом плагине - часть работы тут, в новом. А ты, как сам написал, старый плагин удалил. А в новом, надо полагать - только один объект и остался Который хотел добавить к старым. PS. Даже если ты сохраняешь под тем же именем - это ничего не меняет. Данные перезапишутся, что аналогично удалению старого плагина.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №2
| Тема: Скрипты
написано: 30 марта 2014, 03:32
| Отредактировано: ValLео - 30 марта 2014, 12:28
ГГ должен прилечь спать на матрас, но когда просыпается он оказывается в другом месте
Тут хотелось бы уточнить ситуацию - где и как ГГ ложится спать. Может быть четыре варианта: а) ГГ ложится спать в одном интерьере - просыпается в другом интерьере b) ГГ ложится спать в интерьере - просыпается на Пустоши (внешняя ячейка) с) ГГ ложится спать на Пустоши - просыпается в интерьере d) ГГ ложится спать в одном месте на Пустоши - просыпается в другом месте Пустоши
Первые два варианта можно решить "инженерно-строительным способом".
Игрок входит в хижину - просыпается в пещере. Создаешь новую ячейку интерьера и в ней строишь сначала стены и всё прочее от хижины. Ставишь там же кровать. Привязываешь всё построенное к ХМаркеру-родителю, даешь маркеру реф-имя. Скрываешь всё построенное, чтоб не мешалось (как это сделать - ответ в Картотеке), затем в этом же месте, в тех же пределах строишь стены пещеры и все остальное для неё. И тоже привязываешь всё это к другому Хмаркеру-родителю, даешь этому маркеру реф-имя и отмечаешь как изначально отключенный. Далее связываешь телепортом дверь от хижины с дверью во внешней локации, а дверь от пещеры - с другой дверью в той локации, где должен выйти наружу игрок, когда проспится. Затем на кровать хижины вешаешь скрипт, который дизейблит маркер хижины и енейблит маркер пещеры и заодно отбирает вещи игрока в нужный контейнер. Команды прописываются в блоке MenuMode 1012 чтобы подмена стен происходила во время сна и была незаметна. Получается: лег спать - стены и дверь хижины исчезли, появились стены и дверь пещеры. Вроде как проснулся в другом месте.
Скачать образец для разбора Там в Гудспрингс возле заправки поставлена хижина. Заходишь в неё, ложишься спать на кровать, просыпаешься в пещере. Выходишь из пещеры уже далеко на севере от Гудспрингс
Игрок входит в хижину - просыпается в Мохаве. Принцип тот же самый. В том месте Мохаве (или другого мира) где должен проснуться ГГ ставишь кровать, вокруг неё строишь стены, всякую обстановку, ставишь двери - в общем создаешь как бы "псевдоинтерьер". Точно так же всё построенное привязываешь к Хмаркеру-родителю. Даешь маркеру имя и отмечаешь изначально отключенным. Далее в том месте, где игрок должен, типа, зайти поспать, ставишь домик, дверь к нему и связываешь телепортом с дверью "псевдоинтерьера". Перед дверью в домик ставишь триггер, скрипт которого при входе в него игрока включает маркер "псевдоинтерьера". А на кровать в этом "псевдоинтерьере" вешаешь скрипт, который в меню-моде отключает маркер "псевдоинтерьера". В итоге: заходишь вроде бы в домик в одном месте Мохаве, но дверь-телепорт переносит тебя совершенно в другую местность. А вокруг - якобы стены интерьера, которые во время сна расстают без следа. И оказываешься в пустыне.
Скачать образец для разбора. Там возле заправки Гудспрингс стоит хижина. Входишь в неё, ложишься спать, просыпаешься в пустыне далеко на северо-востоке. Внимание! Не подключать оба образца в игру или редактор одновременно!
Конечно оба плагина созданы на скорую руку, чтобы только проверить в работе сам принцип. Есть еще нюансы по отработке ситуаций, к примеру - если вдруг игрок зашел в хижину, но не стал ложиться спать и снова вышел, а "псевдоинтерьер уже "материализовался" и на него можно наткнуться по ходу игры ну и т.д. и т.п. Но это уже по ходу работы решается. Насчет двух последних вариантов - тут сложнее. Пока не придумал ничего
Добавлено (30 Марта 2014, 07:32) --------------------------------------------- Что-то я затормозил Вариант С аналогичен варианту В, только делается наоборот: в нужном месте Пустоши размещаешь заскриптованный матрас, строишь вокруг него изначально отключенный "псевдоинтерьер", а телепорт двери из интерьера выводишь в ту местность, куда должен выйти ГГ после пробуждения. В итоге игрок натыкается на матрас, ложится спать, во время сна появляются стены якобы комнаты или пещеры. Проснувшись, игрок выходит из этой, якобы пещеры, а дверь телепорт переносит туда, где нужно тебе, чтоб он появился.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №3
| Тема: Скрипты
написано: 30 марта 2014, 12:32
| Отредактировано: ValLео - 30 марта 2014, 12:58
q2werty, в этом моде аж целых 70 (семьдесят!) с хвостиком Эми Вонгов При выборе прически в диалоге скрипт "подсовывает" новую Эми с нужным хайером.
if AWQAmy.hair == 1 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA01 elseif AWQAmy.hair == 2 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA02 elseif AWQAmy.hair == 3 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA03 ... ... ... ... ... elseif AWQAmy.hair == 69 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA69 elseif AWQAmy.hair == 70 set xREF to AWContRecycleREF.placeAtMe AWActorAmyWongA70
Разместил звук анимации по тому же пути из сборника, но в игре озвучки нет
Точно такая же проблема была у одного пользователя. Оказалось - какой-то из модов "гасит" озвучку. А как переносить оружие, анимацию и звук перезарядки он расписал тут. Если делать так, как там описано - то все должно работать-озвучиваться.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №6
| Тема: ВОПРОСЫ по моддингу
написано: 7 апреля 2014, 13:33
| Отредактировано: ValLео - 7 апреля 2014, 15:38
Да, в третьем фоле было несколько финальных bik-роликов, которые в зависимости от концовки скриптово включались к показу. В вегасе этот скрипт присутствует, но не работает. Вместо него работает квест VEnding, скрипт которого переносит игрока к финальному маркеру в специальную ячейку интерьера под названием Endgame. Игрок там попадает в триггер, который активирует непися Рона-рассказчика (Рон Перлман ), и Рон произносит нужные фразы в зависимости от установленной квестовой переменной из соответствующего квеста для каждой ситуации. А в это время идет показ соответствующего слайда, который запускается результ-скриптом сказанной реплики. Файлы-картинки слайдов лежат в папке textures\interface\endgame\нужный слайд[***. dds].
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №7
| Тема: Скрипты
написано: 9 апреля 2014, 11:51
| Отредактировано: ValLео - 9 апреля 2014, 16:05
Tyddyner, ifMenuMode - пишется раздельно if MenuMode а также в остальных строчках тоже есть слияния (если текст скрипта приведен вточности) Попробуй так begin OnEquip player if MenuMode 1002 ShowMessage a13RailwayAmmoChoice endif end
begin MenuMode 1002 set A13Key to GetButtonPressed if A13Key < 1 return elseif A13Key == 1 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifle 1 1 player.EquipItem WeapRailwayRifle 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme elseif A13Key == 2 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifleDart 1 1 player.EquipItemWeap RailwayRifleDart 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme elseif A13Key == 3 set A13WeaponCond to player.GetWeaponHealthPerc player.AddItem WeapRailwayRifleTrash 1 1 player.EquipItem WeapRailwayRifleTrash 1 0 player.SetWeaponHealthPerc A13WeaponCond removeme endif end ============================= ну или еще: - попробуй убрать последнюю единичку player.EquipItemWeap RailwayRifleDart 1 0 1
насколько понимаю - у equipitem два параметра, а не три
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №8
| Тема: Скрипты
написано: 9 апреля 2014, 16:07
| Отредактировано: ValLео - 9 апреля 2014, 16:25
в функции EquipItem последние аргументы должны быть 0 1
Точно. Я, честно говоря, не вчитывался в описание на Беседке, поелику мне сие зело не важно было по причине равнодушия в силу личной незаинтересованности
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №9
| Тема: Помощь по моддингу
написано: 10 апреля 2014, 15:28
| Отредактировано: ValLео - 11 апреля 2014, 12:36
==========Добавлено============ Как я понял - можно обойтись и без СтартКвест в скрипте заметки. Беседка пишет : If the quest is not currently running, SetObjectiveDisplayed ... 1 will automatically start it. Получается, что если указать задание квеста - то незапущенный квест стартует.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №10
| Тема: Помощь по моддингу
написано: 10 апреля 2014, 17:18
| Отредактировано: ValLео - 10 апреля 2014, 16:50
Прохожу первую стадию,переключаюсь на вторую,а первая числится в пипбое как не завершенная
Ты немного недопонял. Ты проходишь не стадию квеста, а выполняешь первое ЗАДАНИЕ, которое и отмечено в Пип-бое. Стадия - это не спектакль с участием игрока, который начался, идет а потом заканчивается Стадия - это и есть стадия, текущее состояние квеста, можно сказать, метка для каких-то скриптов, пакетов и прочего, что организует "жизнедеятельность" игрока . Ну например - диалог произносится только если у него в условиях стоит проверка стадии (если квест находится в нужной стадии - будет беседа) Или же заскриптованная дверь откроется только тогда, когда некий квест находится в определенной стадии. Ну и так далее.
Ну попробуй, что ли, добавить справа в поле Choice. Гриттинг- это приветствие непися игроку. Когда игрок нажимает "Е" для разговора с НПС - тот непись произносит первым свою фразу из топика Гриттинг. Справа в настройках топиков есть поле выбора топика (Choice), который будет произнесен после гритинга. Топик предварительно нужно создать, расписать в нем тексты ответов игрока и непися и добавить в список топиков квеста. Каша у тебя получается возможно потому, что ты следующий топик добавлял через поле AddTopic. А в таком случае такой топик будет добавлен и показан в игре во всех диалогах данного непися, особенно если у топика нет дополнительных условий произнесения.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №12
| Тема: Помощь по моддингу
написано: 11 апреля 2014, 15:52
| Отредактировано: ValLео - 11 апреля 2014, 15:56
ncrrainjer, советую проштудировать вот эти странички на сайте Беседки: Blocktypes, подкатегорию Begin, особенно страничку Functions и для общего развития - Scripting Многое станет ясным. В частности - по твоему вопросу можно почитать тут - GetDead
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №13
| Тема: Помощь по моддингу
написано: 12 апреля 2014, 13:31
| Отредактировано: ValLео - 12 апреля 2014, 13:39
Сам скрипт прописываю в самом квесте в result script
Результ-скрипт - это и есть результ-скрипт, т.е. - результирующий скрипт данной фразы, скрипт того, что происходит при произнесения этой фразы (в начале или конце - по выбору). В результ-скрипте не указываются типы блоков, а только функции. И если говорят, что нужно что-то прописать в квестовом скрипте - это имеют в виду именно квестовый скрипт, скрипт, который назначается квесту на первой вкладке настроек квеста.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №14
| Тема: Помощь по моддингу
написано: 12 апреля 2014, 13:55
| Отредактировано: ValLео - 12 апреля 2014, 14:25
ncrrainjer, да я спокоен, как дохлый лев. А насчет примеров - увы, невозможно в туториалах расписать все ситуации, которые начинающий мододел задумал. Даются лишь общие принципы , а дальше уже надо "включать логику", как говорил доктор Быков. Насчет подсчета количества убиенных рейдеров был разговор на форуме. Если надо - могу поискать страничку. А общий принцип именно таков, как расписал мастер Спальный Вагон.: если все рейдеры - это n-ое количество одних и тех же копий одного базового рейдера, то достаточно в скрипте указать проверку на количество убитых копий (GetDeadСount.Базовый рейдер >= n). Если это разные рейдеры, разные базовые объекты - нужно каждой копии в локации дать свое уникальное реф-имя и перечислить эти имена в скрипте (if Первый рейдер.getDead И Второй рейдер.getDead И Третий рейдер.getDead и т.д.)
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №15
| Тема: ВОПРОСЫ по моддингу
написано: 12 апреля 2014, 14:28
| Отредактировано: ValLео - 13 апреля 2014, 05:55
STELS_BOY, трудно сказать.. Геймсеттинг iHUDMaxCompassNPCTicks установленный в ноль вообще отключает показ ВСЕХ неписей, врагов и друзей на компасе. Если устроит, то можно воспользоваться скриптовой командой SetGameSetting iHUDMaxCompassNPCTicks 0 чтобы отключить показ неписей на компасе в нужном месте (например, в определенной локации). Или реализовать, к примеру, через получение перка, который меняет указанное значение. Главное - не забыть потом вернуть значение этой настройки по-умолчанию.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №16
| Тема: Помощь по моддингу
написано: 12 апреля 2014, 14:50
| Отредактировано: ValLео - 12 апреля 2014, 19:42
нужно отдать предмет персонажу,но для этого нужно,чтобы этот персонаж об этом предмете заговорил
Предмет уже у ГГ Тогда нужно создать приветственную фразу непися в Гриттинге (О! Я, вижу, у тебя есть Пип-Бой) и поставить для этой фразы условие на наличие у ГГ данного предмета Непись произнесет данную фразу приветствия только тогда, когда у ГГ есть нужный предмет. В противном случае непись скажет другую, приписанную ему фразу.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №17
| Тема: Помощь по моддингу
написано: 12 апреля 2014, 15:23
| Отредактировано: ValLео - 12 апреля 2014, 15:58
Проверять нет времени, но приблизительно так: Создаешь квест, создаешь топик Гриттинг. В Гриттинге создаешь первую приветственную фразу, типа: "- Привет, меня зовут старый Грег. Я ищу человека, который сможет подойти вон к тому терминалу и прочитать, что там написано." Отметить у фразы галочку Say to Once (говорить один раз). Добавляешь через Choice еще ветки диалога, если надо. Игрок после беседы идет к терминалу, читает запись. В результ-скрипте строчки терминала вставить команду о показе задания и установки квеста в некую стадию, скажем в стадию 10. Пока игрок не нашел голодиск - стадия квеста остается номер 10. Под эту стадию можно расписать дополнительно еще топики Грега ("Ты нашел голодиск?" или "Чё так долго ищешь?". Игрок идет туда - не знаю куда, находит винтовку старого Грега голодиск , при добавлении голодиска устанавливается стадия квеста, ну скажем в 20. Как устанавливается - варианты разные. Можно голодиску повесить скрипт, который при OnAdd меняет стадию квеста (рекомендуется), можно в квестовом скрипте вставить строчку на проверку у ГГ данного голодиска (If Player.GetItemCount [ID голодиска] >= 1 SetStage [ID квеста] 20 ) (не рекомендуется, поскольку если голодиск по каким-либо причинам останется у игрока (мало ли, вдруг модмейкер забыл указать команду передачи диска от Гг к неписю) - то квест снова установится в стадию 20 и снова Грег будет произносить дежурную по этому поводу фразу) Потом в топике Гриттинг создаешь еще одну фразу: "-О! ты принес голодиск!) и в условиях произнесения ставишь GetStage [ID квеста] == 20. И далее через Choice добавляешь нужные фразы последующей беседы. И никакой мешанины. Первую фразу и последующие ответы Гг будут показаны в начале, когда еще нет задания, другие гриттинги, у которых в условиях стоит стадия 10, будут произнесены, пока еще голодиск не найден, а третий гриттинг и дальнейшая беседа будут показаны если только стадия квеста будет 20 (Гг принес голодиск). Можно после приноса голодиска установить через результ-скрипт фразы стадию 30 и привязать к этой стадии еще диалоги: "-А! Помню-помню тебя! Это ты принес голодиск." PS. Полное повторение туториала о старом Греге Только вместо винтовки - голодиск и вместо добавления задания через диалог - добавление через строчку терминала.
е понял,что SetStage имеется в виду как установка стадии
Рейнджер, функции ведь не "от фонаря" названы именно так, а не иначе. Все переводится с английского вполне осмысленно. Set - означает настроить, установить. Stage стадия. Поэтому SetStage - это установить стадию. SetObjectiveCompleted - Установить цель (задание) как завершенное. Ну и так далее. Поэтому читая тексты скриптов даже со словарем, можно вполне точно узнать, что скрипт делает.
VIPerMX, делай два отдельных интерьера 1 и 2, две отдельные ячейки. Ставь снаружи две двери, расположенные "одна в другой" в одном и том же дверном проеме. Дверь 1 ведет в интерьер 1, дверь 2 ведет, соответственно в интерьер 2. Одна дверь по-умолчанию отключена, например дверь 2. Если игрок где-то ранее, по сюжету, выбрал проживать в интерьере 2, то в момент выбора скрипт дизейблит дверь 1 и енеблит дверь 2. И игрок входит во второй интерьер. Так, кстати, будет проще строить сам интерьер - не будут мешаться "лишние" детали.
Добавлено (13 Апреля 2014, 11:55) --------------------------------------------- Я так понимаю, что решил дополнить номер в Новаке мужским люксом? Введи тогда в игру риэлтора. Пусть во всем том же многострадальном Гудспрингсе риэлтор подкатит к игроку с предложением снять комнату. А в строчках диалога предложить выбрать и тип обстановки (мужской\женский) и место проживания (Новак, Примм, Фрисайд, добавить по вкусу). И в результ скрипте фраз подключать-отключать те или иные двери, чтоб задействовались только нужные, ведущие в выбранный интерьер. Самих интерьеров, в принципе, потребуется только два - мужской и женский стиль. Все дальнейшие переключения при выборе различных мест проживания будут производится только за счет переподключения дверей-телепортов.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №21
| Тема: ВОПРОСЫ по моддингу
написано: 13 апреля 2014, 08:20
| Отредактировано: ValLео - 13 апреля 2014, 08:33
VIPerMX, а если попробовать скинуть в ячейку еще один Х-маркер, который будет, так сказать главным. Затем выделить все объекты, которые внес в интерьер, включая и маркер-родитель для лампочек и обе оппонентные лампы, а затем через меню VIEW-Reference Batch Action Window назначить этот новый Х-маркер родителем для всего выделенного. А в скрипте указать енейбл\дизейбл именно этого нового Х-маркера. Я сейчас попробовал на первом попавшемся интерьере: привязал к существующему там х-маркеру два объекта, прямой и инверсный, затем выделил эти объекты и их родителя и через указанное окно назначил всей этой кучке новый родитель-маркер. В редакторе все получилось, но в игре не проверял
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №22
| Тема: ВОПРОСЫ по моддингу
написано: 13 апреля 2014, 08:40
| Отредактировано: ValLео - 13 апреля 2014, 09:02
Попробуй приблизить\отдалить поверхность ландшафта, чтобы ячейка локации перегрузилась. Обычно отказ в копке ямы происходит, когда "шаришься" в поисках места, тыкаешься туда-сюда, особенно где-нибудь близко к границе ячейки и ячейка как бы подвисает.
В интерьере есть аудиомаркер но в нем вообще никай инфо о музыке
В этом маркере есть инфа о том, что он привязан к контроллеру расположений медиа-данных. А к контролеру приписан набор медиа-сет. А в наборе медиа-сет указан тип музыки и конкретный звуковой файл, звучащий в тот или иной момент.
Добавлено (13 Апреля 2014, 20:46) --------------------------------------------- Сергей успел раньше
Добавлено (13 Апреля 2014, 20:47) --------------------------------------------- Что-то вспомнилось знаменитое изречение генерала Иволгина: "- Рыба в реке есть. Ловить надо уметь"
BsX, в простейшем случае можно сделать так: сначала создать сообщение (Message), в котором пишешь необходимое предупреждение. Затем создаешь новый квест и отмечаешь у него галочку "Start Game Enabled". Не переходя на другие вкладки сохраняешь квест. Затем создаешь новый скрипт. Текст скрипта: scn [Имя скрипта] ; по-английски, без пробелов и без квадратных скобок
short DoOnce
Begin GameMode if DoOnce == 0 showmessage [ID твоего месседжа] ; без квадратных скобок set DoOnce to 1 StopQuest [ID твоего квеста] ; без квадратных скобок endif end
Тип скрипта - квестовый. Открываешь квест и назначаешь ему созданный скрипт. Всё.
Изменение репутации для пользователя ValLео
ValLеоOffline
Сообщение №28
| Тема: ВОПРОСЫ по моддингу
написано: 14 апреля 2014, 15:42
| Отредактировано: ValLео - 15 апреля 2014, 14:27
Примерно так же. Только вместо GameMode нужно написать OnActivate player и вместо строчки СтопКвест вставить строчку Activate. Изменить тип скрипта с квестового на объектный и приписать скрипт к двери (к базовому объекту) Поэтому лучше создать для этого новую дверь, а то если используешь какую-нибудь уже существующую - то получится, что при активации любой копии такой двери в любой локации, будет выскакивать твой месседж. Создать новую дверь можно простой сменой ID у любой понравившейся двери и сохранением, как новый объект.
Кстати, если у месседжа в настройках не отмечать галочку Message Box, то сообщение будет показываться не в отдельной рамке с кнопкой ОК, а просто в левом верхнем углу экрана.
Добавлено (14 Апреля 2014, 18:58) --------------------------------------------- Стоп. Из-за переменной DoOnce дверь можно будет активировать только один раз. Надо скрипт чуть-чуть подправить. Как-то так: scn ИмяСкрипта
short DoOnce
Begin OnActivate Player if DoOnce == 0 showmessage Твой месседж set DoOnce to 1 endif if DoOnce == 1 activate endif end В этом случае сообщение будет показано один раз, но пользоваться дверью можно постоянно
Чтоб было понятней - распишу, что ты делаешь. Если хочешь, чтоб со стартом игры появлялось сообщение - нужно сделать "технический" квест, вся задача которого запуститься при старте игры и через свой квестовый скрипт запустить показ нужного сообщения. Для этого у квеста и отмечается чек-бокс "Включаться при старте игры". Переменная DoOnce, которую ввели в скрипт (имя может быть любое, просто принято называть "одноразовую" переменную именно так) , нужна для того, чтоб сообщение показалось только один раз, а не каждую секунду. По-умолчанию значение переменной равно 0, а в скрипте написано - если переменная равна 0 (if DoOnce == 0) - то показать сообщение (showmessage xxx) и установить значение равное 1 (set DoOnce to 1). Т.е. - после показа сообщения значение переменной станет 1 и в последующем условие показа сообщения выполняться не будут и сообщение больше не покажется. Ну а команда СтопКвест - это чтоб остановить квест, дабы он не "отгрызал" свой, пусть и крохотный, кусочек ресурсов. Для двери примерно то же самое, только квест не нужен. Скрипт вешается на саму дверь. В скрипте условием показа сообщения при активации двери игроком (OnActivate Player) является то, что переменная DoOnce равна 0 (if DoOnce == 0). Раз она по-умолчанию изначально равно 0 - показывается сообщение и значение переменной устанавливается в 1 (set DoOnce to 1). А условием "открывания" двери является значение переменной равное 1 (if DoOnce == 1). Раз после показа сообщения скрипт установил значение в 1 - то выполняются условия для открывания. "Открывает" дверь команда Activate, которая и поставлена в конце. При повторной активации двери условие для показа сообщения не выполняется (поскольку переменная не равно 0, скрипт его установил в 1 при первой активации двери), но выполняется условие открывания (DoOnce == 1).
А ничего и не произойдет При нажатии на значок сохранения (дискетка) будет задан вопрос - Сохранять или нет, и если в скрипте нет ошибок - скрипт молча сохранится. Останется только закрыть окно скрипта крестиком.