Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Изменение репутации для пользователя ncrrainjer
ncrrainjerOffline
Сообщение №1291
написано: 25 февраля 2014, 05:28
| Отредактировано: ncrrainjer - 25 февраля 2014, 09:44
Товарищи мододелы, просмотрел список тем в мастерской, думаю что не сильно ошибся темой, если ошибся поправьте. Спрашивал у локализатора YikxX насчёт этого вопроса, вот его ответ:
"Я не знаю, как такое реализовать. Видимо какая-то заумная скриптовая заморочка. А я больше переводчик, чем модмейкер. Возможность посмотреть, как это сделано в убежище из Fallout 3 полностью отсекается отсутствием наличия у меня установленного Fallout 3 и отсутствием желания его устанавливать только лишь ради такой мелочи. Так что, к сожалению, ничем помочь не могу - обратитесь к спецам, в Мастерскую. " Поэтому обращаюсь сюда, если куда или к кому обратится конкретно, буду благодарен.
А это задумка: Есть мысль по дополнению к этому бункеру Underground Hideout New Vegashttps://modgames.net/load....-0-7437 в нём есть сортировщик материалов для крафта и сортировщик для патронного верстака которые используют отдельные шкафы. а вот в этом бункере (это Fallout 3) Underground Hideouthttps://modgames.net/load....-0-1398 при создании вещей на верстаке предлагается в меню выбрать откуда будут браться детали, из инвентаря или из шкафа, в который складывается хлам если это не сложно или долго просьба сделать такое дополнение . Так как верстаки отличаются ( ID разные ) хотя-бы на тот что стоит в оружейной зоне, и патронный верстак рядом с ним также привязать к соответствующим ящикам. Очень уменьшит время по созданию вещей, так как я поклонник всевозможного крафта, установил почти все моды с созданием вещей, долго ищу рецепт а потом к нему запчасти. Если это сложно, значит не судьба:).
Ребят,кто знает подскажите почему не катит этот скрипт?
Ну, по идее, надо бы так:
Код
Begin OnActivate If GetCurrentTime >= 19.00 || GetCurrentTime <= 8.00 MylinkXmarker.enable elseif GetCurrentTime > 8.00 || GetCurrentTime < 22.00 MylinkXmarker.disable endif end
или так:
Код
Begin OnActivate If GetCurrentTime >= 19.00 || GetCurrentTime <= 8.00 MylinkXmarker.enable endif if GetCurrentTime > 8.00 || GetCurrentTime < 22.00 MylinkXmarker.disable endif end
И, кстати, если в одном условии есть "больше или равно", значит в другом не должно быть "меньше или равно", иначе в некий момент времени оба условия будут выполняться одновременно.
====================== Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294 Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Изменение репутации для пользователя ncrrainjer
ncrrainjerOffline
Сообщение №1295
написано: 4 марта 2014, 15:21
| Отредактировано: ncrrainjer - 4 марта 2014, 15:22
В общем этот скрипт должен идти на работу света в определенный промежуток времени!Я уже понял,что на Хмаркер его не поставить.А как в таком случае сделать,чтобы ламп на которых висит этот скрипт сначала небыло а потом они появлялись в силу каких либо действий?
Добавлено (04 Марта 2014, 19:09) --------------------------------------------- Spalny_Vagon, Оу,спасибо,сейчас попробую.
Добавлено (04 Марта 2014, 19:21) --------------------------------------------- Spalny_Vagon, Все равно некатит:( Тут нужна такая ситуация:Есть Хмаркер,к нему подключены 7 ламп.Маркер изначально отключен!Его нужно включить один раз и сним включатся лампы - которые должны в дальнейшем работать по графику!Как это сделать?А то получается Маркер работает,а лампы не по графику.
Да и я отрезки времени неправильно указал (поторопился) нужно с 18:00 до 6:00
Graf, Маркер установлен как инейбл перент для ламп изначально он отключен,когда его включаешь через терминал,он срабатывает (включается),но не по графику,а горит бесконечно!(А нужно,чтобы по графику)
Тогда тут объектовым скриптом, наверное, не обойтись - нужен квестовыйц (глобальный). Ибо OnActivate по определению отрабатывает однократно в момент активации.
Добавлено (05 Марта 2014, 13:21) --------------------------------------------- Хотя м.б. я и туплю - попробуй следующую конструкцию:
Создаешь глобальную переменную, например MyFlag. Изначально равна нулю.
В резалт-скрипте рисуешь конструкцию вида
Код
Begin OnActivate set MyFlag to 10 end
а на сам терминал повесить скрипт вида
Код
scn MyFunctionalScript
short sOnceOn short sOnceOff
begin GameMode
if MyFlag == 10 If GetCurrentTime >= 19.00 || GetCurrentTime <= 8.00 if sOnceOn != 10 MylinkXmarker.enable set sOnceOn to 10 set sOnceOff to 0 endif elseif GetCurrentTime > 8.00 || GetCurrentTime < 22.00 if sOnceOff != 10 MylinkXmarker.disable set sOnceOn to 0 set sOnceOff to 10 endif endif endif
end
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1299
написано: 5 марта 2014, 11:59
| Отредактировано: ITU - 5 марта 2014, 12:03
ITU, я не уверен, что GameMode можно использовать в резалт-скриптах. Твой то вариант для обычного рубильника-активатора, как я понял.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Как разблокировать армейский магазин из DLC Lonesome Road, через скрипты?
Код
SCN NVDLC04EDECommissarySCRIPT
; ED-E's special access panel to allow him to unlock barter points for the player. ; TLS 03/21/2011 ; TLS 04/07/2011 - Complete optional commissary objective. ; TLS 05/19/2011 - Added timer to set animation states. ; CES 6/23/11 - Updated the add script package to work for each individual commissary so EdE will travel to the terminal, not the player. ; TLS 07/18/2011 - Removed obsolete code for weapon use. ; ABR 07/22/2011 - Added scripting to reset Vendor Container's Caps if they get to high to prevent Barter issues. ; TLS 08/02/2011 - Added commissary 6 ; ABR 08/09/2011 - Fixed scripting to check the Number of Caps in the Repair Merchant as well as the Vendor Container.
Short bUnlocked; ; Flag for whether ED-E has unlocked the terminal yet. Short nDisplay; ; Flag for whether the Commissary message box is popped up - 1 = locked message, 2 = unlocked message. Short nButton; ; Controller for button functionality. Ref rLinkedRef; ; Reference used for Merchant/Repair NPC Ref rSelf; ; Reference for telling ED-E what to shoot. Short bRunTimer; Float fTimer; Int nNumCapsVendor; ; Number of Caps in the Commissary Vendor Container. Int nNumCapsRepair; ; Number of Caps the Commissary Repair Merchant has.
BEGIN OnActivate
If (IsActionREF Player == 1) && (bUnlocked == 0) Set nDisplay to 1; Set rSelf to GetSelf; ShowMessage NVDLC04EDECommissaryLockedMSG; ElseIf (IsActionREF Player == 1) && (bUnlocked == 1) Set nDisplay to 2; Set rLinkedRef to GetLinkedRef; ShowMessage NVDLC04EDECommissaryUnlockedMSG; EndIf
; Reset Caps if the get to High. set nNumCapsVendor to NVDLC04VendorContainerCommissaryREF.getitemcount caps001 set nNumCapsRepair to rLinkedRef.getitemcount caps001
If (bUnlocked == 0) ShowMessage NVDLC04EDECommissaryMSG; PlaySound OBJComputerTerminalArc; PlayGroup Left 1; PlaySound OBJComputerTerminalForward; Set bUnlocked to 1; Set bRunTimer to 1; If (GetObjectiveCompleted NVDLC04MQ01a 25 == 0) SetObjectiveCompleted NVDLC04MQ01a 25 1; EndIf NVDLC04EDEREF.ResetAI; EndIf
END
BEGIN GameMode
If (nDisplay == 1) Set nButton to GetButtonPressed ; Cancel Option If (nButton == 0) Set nDisplay to 0; ; Commissary Option ElseIf (nButton == 1) PlayGroup Forward 1; If (NVDLC04EDEREF.GetInCell NVDLC04Silo01 == 1) ;Commissary 1 - Silo01 NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary01; ElseIf (NVDLC04EDEREF.GetInCell NVDLC04SLHopeVilleMensBarracks == 1) ;Commissary 2 - Hopeville Men's Barracks NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary02; ElseIf (NVDLC04EDEREF.GetInCell NVDLC04RoadHQ == 1) ;Commissary 3 - Hopeville HQ NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary03; ElseIf (NVDLC04EDEREF.GetInCell NVDLC04Silo02 == 1) ;Commissary 4 - Silo02 NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary04; ElseIf (NVDLC04EDEREF.GetInCell NVDLC04DivideTempleMaint == 1) ;Commissary 5 - Ulysses' Temple NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary05; ElseIf (Player.GetInWorldspace NVDLC04Road02World == 1) ;Commissary 6 - High Road NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary06; Else ;Fall back to just moving to the player if the above doesn't work. NVDLC04EDEREF.AddScriptPackage NVDLC04EDEMoveToPlayerCommissary; EndIf EndIf ElseIf (nDisplay == 2) Set nButton to GetButtonPressed ; Cancel Option If (nButton == 0) Set nDisplay to 0; ; Commissary Option ElseIf (nButton == 1) rLinkedRef.Activate Player 1; Set nDisplay to 0; ; Repair Option ElseIf (nButton == 2) rLinkedRef.ShowRepairMenu; Set nDisplay to 0; EndIf EndIf
If (bRunTimer == 1) If (fTimer >= 1) PlayGroup SpecialIdle 0; Set bRunTimer to 0; Else Set fTimer to (fTimer + GetSecondsPassed); EndIf EndIf
END
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1304
написано: 11 марта 2014, 16:12
| Отредактировано: ITU - 11 марта 2014, 16:18
If (GetStageDone NVDLC01MQ01 5 && NVDLC01SlideBoxRef.bEndingDone == 0)
думаю ответ где-то тут лежит, проверка на окончание квеста, выполнять если квесты не завершены
Добавлено (11 Марта 2014, 20:12) --------------------------------------------- Reider76, заменить весь скрипт на следующий:
Код
Short bUnlocked; ; Flag for whether ED-E has unlocked the terminal yet. Short nDisplay; ; Flag for whether the Commissary message box is popped up - 1 = locked message, 2 = unlocked message. Short nButton; ; Controller for button functionality. Ref rLinkedRef; ; Reference used for Merchant/Repair NPC Ref rSelf; ; Reference for telling ED-E what to shoot. Short bRunTimer; Float fTimer; Int nNumCapsVendor; ; Number of Caps in the Commissary Vendor Container. Int nNumCapsRepair; ; Number of Caps the Commissary Repair Merchant has.
BEGIN OnActivate Set rLinkedRef to GetLinkedRef; rLinkedRef.Activate Player 1 end
если я правильно понял... вместо какой-то менюшки и использования EDE, просто активация по ссылаемой ссылке, скорее всего это NPC торговец но это без ремонта в этом случаи
можно вставить set bUnlocked to 1 после BEGIN OnActivate, не меняя ничего другово
If (IsActorRefEssential != 1) If (Player.HasPerk NVDLC01GhostHunter != 1) SetActorRefEssential 1; ; Since the checks above all force a Return; call when they run, we can safely here re-apply the Essential flag Endif ; otherwise, loading a savegame will reset it to 0 (this flag does not get stored in the savegame data for each ref). Endif Endif
Может из-за этого, если есть какой-то перк тогда они бессмертны. Но хз, много переменных лень пересматривать.
...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1306
написано: 11 марта 2014, 16:35
| Отредактировано: ITU - 11 марта 2014, 16:36
Begin GameMode if (Player.GetItemCount aaaobjectz > 0) if ((GameDaysPassed - CurrentDay) >= 1) set CurrentDay to GameDayPassed aaacontzRef.AddItem Caps001 КолВоКрышек endif endif End
Вот этот скрипт позволяет чтобы имея объект (aaaobjectz) в инвентаре, в шкафу (aaacontz) появлялись крышки. А как сделать, чтобы вместо крышек появлялась вода и еда? Например: раз в день появилось 6 бутылок чистой воды, 2 мясо брамина и 1 антирадин?!
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1308
написано: 12 марта 2014, 11:58
| Отредактировано: ITU - 12 марта 2014, 11:58
должны быть не ИД предметов, а ID референсе (на скрине есть поля в свойстве шкафа, в самом вверху) а так же не должны начинаться и заканчивается цифрой ЗЫ. и такие скрипты еще обычно вешаются на квест
Изменение репутации для пользователя LonelyTraveler
Graf, ура! Сохранилось. Только теперь оно почему-то пополняет не раз в день, а раз в долю секунды, из-за чего в шкафу через минуту обнаруживается тысячи бутылок))
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №1314
написано: 12 марта 2014, 13:25
| Отредактировано: Artem13 - 12 марта 2014, 13:27
LonelyTraveler, внимательно рисуй скрипт. У тебя внутри условия вместо GameDaysPassed написано GameDayPassed. И убери лишнее объявление, которое тебе Граф посоветовал, не до конца вникнув в суть GameDaysPassed - встроенная глобальная переменная, хранящая количество прошедших с начала игры игровых дней.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
if (bActivated == 0) If ( player.GetAV InventoryWeight < 15 ) ShowMessage Msg1 Else ShowMessage Msg2 Endif else Activate endif
END ;OnActivate
BEGIN GameMode
set bButton to GetButtonPressed
if ( bButton == 1 ) && (bActivated == 0)
set bActivated to 1 Activate
endif
END ;GameMode
Обработка кнопок - в блоке GameMode
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя LonelyTraveler
ГГ должен прилечь спать на матрас, но когда просыпается он оказывается в другом месте и без инвентаря (весь инвентарь появляется в специальном ящике). Подскажите, пожалуйста!
Самое простое - это привязать всё действо к конкретному матрасу. Тогда всё просто - пишется в блоке OnActivate. Он обрабатывается ДО стандартной обработки активатора. Если надо сохранить возможность стандартной обработки, командуешь в конце Activate и всё. Но лучше, конечно, в случае с кровать этого не совмещать, ибо может выглядеть не очень. Лучше как то так:
Код
if(Условие) Тут переносим ГГи отбираем вещи else Activate endif
Условие придумайте сами - это м.б. определенные игровые сутки, определённое время суток, завершение определённого квеста и т.п.
Если нужно для любого, то создаешь глобальный скрипт и используешь проверку IsPCSleeping
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Приветствую всех! Может сможет кто-нибудь подсказать: как в скриптом изменить прическу ГГ или НПС? Например, у ГГ имеется прическа Х, а после диалога меняется на Y.