Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
А у меня вот такой вопрос- команда "SwapTexture player" как именно она работает? Судя по тому что выяснил- меняет текстуру в указанном блоке модели. Пример: Swaptexture player "##LaserSightBeam:1" "effects\0alpha" где "##LaserSightBeam:1"- это узел НиТриСтрипс в модели, а "effects\0alpha"- сама текстура в этом узле. Но. В выдранном куске из плагина-донора команда работает. А вот мои текстуры менять не хочет.
Добавлено. А.... всё, заработало. Выдрал узел НиНоде целиком с модели-донора, изменил названия узлов НиТриСтрипс. Немного. И пошла подмена текстур. Магия какая то. Чёрная или белая- х.з.
Не соображу, как в квесте непися заставить сделать что то, ну, например чтобы он сел на стул, короче отправить его к Idle маркеру. Подскажите скриптик, заставляющий его идти по ссылке.
Знатоки -модмейкеры, у меня такой вопрос: Какой функцией возможно вернуть значение урона, который был нанесен игроку в данный момент? Просто мне нужно сделать скрипт, который не позволял бы игроку умереть, если ему был нанесен урон больше, чем его собственное текущее здоровье
bruner, как вариант, можно дать этому твоему неписю пакет Trevel, привязанный к нужному предмету (к стулу), а в условиях указать стадию квеста, по достижении которой этот пакет должен начать действовать. Можно дать сразу, можно добавить скриптом в процессе игры.
Мосье, же не манж па сис жур... Умер 23.04.2019
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №816
написано: 6 сентября 2012, 15:09
| Отредактировано: Joopeeter - 6 сентября 2012, 15:10
Какой функцией возможно вернуть значение урона, который был нанесен игроку в данный момент? Просто мне нужно сделать скрипт, который не позволял бы игроку умереть, если ему был нанесен урон больше, чем его собственное текущее здоровье
Насколько мне известно, стандартными средствами такой фокус не провернёшь. Однажды я решал аналогичную задачу и там пришлось на время "бессмертия" тупо скриптово задирать здоровье и скриптово же снижать его до нужного процента (чтобы полоска оставалась той же длины). В пип-бое, правда, всё равно было видно реальное положение дел, но в принципе, несложно в режиме меню временно вернуть как было.
Привет всем! Помогите пожалуйста, написать скрипт для кнопки открывания автопарника (дверь). По замыслу, в этом парнике раз в сутки вырастает гриб и его можно сорвать (еда) На грибе такой скрипт
scn AAATestFundusScript
float TimeStart float TimeStop short State
Begin onActivate if (State == 0) AAATestFungusARef.Disable player.additem AAATestFungusA 1 set TimeStart to GameDaysPassed set State to 1 endif End
Begin GameMode if (State == 1) set TimeStop to GameDaysPassed if TimeStop - TimeStart >= 1 AAATestFungusARef.Enable set State to 0 endif endif End Не знаю правильно или не правильно написано, я изменил готовый скрипт Graf - скрипт работает.
А на кнопке такой
scn AAATestSwitchScript
short Open
Begin OnActivate if Open==0 AAATestDoorRef.SetOpenState 1 set Open to 1 else AAATestDoorRef.SetOpenState 0 set Open to 0 endif Activate End
Ещё на двери автопарника есть стандартный скрипт не дающий открывать дверь активацией напрямую.
scn GenericDoorOpenedElsewhereSCRIPT
; Don't pass a '1' parameter in your terminal's activate script ; This script will not allow NPCs to use the door. ; It's intended for sneaky/hacky players to be able to use the door for gameplay purposes
;**********************
Begin onLoad
lock 255 ;in case someone forgets to lock the door in the editor
End
;**********************
Begin onActivate
if (IsActionRef player == 1) ShowMessage GenericDoorActivatedElsewhereMsg else Activate endif
End
Мне нужно, сделать так, что бы пока гриба нет в автопарнике, дверь не открывалась и выводилось одно соообщение: -Гриб ещё не вырос! А когда гриб есть выводилось второе сообщение: -Гриб готов! Не знаю как связать два события (из разных скриптов) Пока.
Мы вышли из дома, когда во всех... Поздно вышли!
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №819
написано: 7 сентября 2012, 05:48
| Отредактировано: Joopeeter - 7 сентября 2012, 06:30
Наличие/отсутствие гриба - это переменная State на том грибе. Тогда на кнопке будет так:
Code
scn AAATestSwitchScript
short Open
Begin OnActivate if AAATestFungusARef.State==0 if Open==0 AAATestDoorRef.SetOpenState 1 ShowMessage [Есть гриб!] set Open to 1 else AAATestDoorRef.SetOpenState 0 set Open to 0 endif Activate else if Open==1 AAATestDoorRef.SetOpenState 0 set Open to 0 endif ShowMessage [Нету гриба!] endif End
Кстати, этот скрипт, насколько я помню, для двери с выключателем в другой локации. Если выключатель этой двери - вон тот слева, то можно просто связать их через Activate Parent:
Code
scn AAATestSwitchScript
Begin OnActivate if AAATestFungusARef.State==0 AAATestDoorRef.Activate ShowMessage [Есть гриб!] Activate else if AAATestDoorRef.GetOpenState==1 AAATestDoorRef.Activate endif ShowMessage [Нету гриба!] endif End
И ещё кстати. Не ясно зачем вообще там дверь, гриб, как видно из его скрипта, прекрасно растёт и при открытой. Чтоб не рос:
Code
scn AAATestFundusScript
float TimeStart float TimeStop short State
Begin onActivate if (State == 0) Disable player.additem AAATestFungusA 1 set State to 1 endif End
Begin GameMode if State>0 if State==1 if AAATestDoorRef.GetOpenState==3 set TimeStart to GameDaysPassed set State to 2 endif elseif State==2 set TimeStop to GameDaysPassed if TimeStop - TimeStart >= 1 Enable set State to 0 endif endif endif End
Joopeeter, Привет! Спасибо за помощь! Всё работает отлично. А скрипт открывания двери с выключателя из другой локации действительно твой! Неужто не узнал!? Богатым будет! Шутка!
Цитата Joopeeter
Не ясно зачем вообще там дверь, гриб, как видно из его скрипта, прекрасно растёт и при открытой
Я просто добавил в твой скрипт на грибе строчку закрывания двери после "срывания" гриба. Теперь не видно, растёт там гриб или нет, а пока гриб не "вырос" дверь кнопкой не открыть. Ещё раз спасибо! Пока.
bruner, как вариант, можно дать этому твоему неписю пакет Trevel, привязанный к нужному предмету (к стулу), а в условиях указать стадию квеста, по достижении которой этот пакет должен начать действовать. Можно дать сразу, можно добавить скриптом в процессе игры.
Честно не пойму, как это можно реализовать в реальном времени, мне нужно в диалоге дать команду и чтобы непись сразу пошел ее выполнять. По моему скрипт с реф ссылкой на объект было бы оптимально.
bruner, есть непись, у него есть пакет НеписьSandBox, где в условиях указана стадия квеста, к примеру, 10. Еще у него есть пакет Trevel, у которого в качестве цели указан нужный объект, а в условиях - стадия квеста 20. В результирующем скрипте диалога (после которого ты хочешь отправить непися к объекту) написано: SetStage IDQuest 20. Ну, или можно переменную в качестве условия для пакетов использовать.
bruner, есть непись, у него есть пакет НеписьSandBox, где в условиях указана стадия квеста, к примеру, 10. Еще у него есть пакет Trevel, у которого в качестве цели указан нужный объект, а в условиях - стадия квеста 20. В результирующем скрипте диалога (после которого ты хочешь отправить непися к объекту) написано: SetStage IDQuest 20. Ну, или можно переменную в качестве условия для пакетов использовать.
Это понятно, но не всегда удобно и оптимально. Меня другое интересовало, именно скрипт, вернее команды скрипта. Если реализовывать команды к неписю пакетами их два десятка наберется, скриптом проще, как мне кажется? Ну к примеру: пойди туда, сядь там, выполни анимацию тут, открой холодильник, сорви банан, умри наконец))) Это сложно скриптом?
все суета, сует...
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №824
написано: 8 сентября 2012, 12:11
| Отредактировано: Joopeeter - 8 сентября 2012, 12:14
Всё кроме "умри" - пакеты. Чтобы пакет начался сразу, надо либо добавить его скриптово AddScriptPackage, либо в нужном месте дать команду на переоценку пакетов EvaluatePackage.
тогда еще вопросик, вот есть команды бартера: ShowBarterMenu - диалог торговли OpenTeammateContainer - бартер
но все они завязаны через контейнер, а как к неписю в инвентарь залезть? чтобы тоже типа бартера, положить что нить или взять, как с напарниками, какая команда используется?
Дык OpenTeammateContainer это и есть залаз в инвентарь. Просто надо читать что там про синтаксис пишут.. OpenTeammateContainer 1 открывает инвентарь как если бы непись был напарником.
Изменение репутации для пользователя bruner
brunerOffline
Сообщение №827
написано: 8 сентября 2012, 18:59
| Отредактировано: bruner - 9 сентября 2012, 05:23
ITU, подозреваю, что можно, но не с тем эффектом, что ты хочешь - он добавит именно ИД списка, а не его содержимое. Соответственно, при переборе листа сравнение будет с ИД добавленного, а не его компонентами Буду рад, если ошибся. Только эксперимент покажет...
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя rizys-mod
rizys-modOffline
Сообщение №830
написано: 7 октября 2012, 19:51
| Отредактировано: rizys-mod - 7 октября 2012, 19:57
Привет всем! Вот такая проблема, запутался в скрипте... Вот скрипт на еффект:
Code
begin scripteffectstart player.additem zzUnderWorldPowerArmorAdvancedNoBackpackFoodAbility 1 Set zzunderworldquest.Maintenance to 1 End
Ну и вот где запутался:
Code
Short Option Short Button Short Choice
Short AbilityNumber1 Short AbilityNumber2 Short AbilityNumber3 Short AbilityNumber4 Short AbilityNumber5
short Maintenance short MaintenanceGood short BatteryCount float CurrentBatteryLife short LastBattery short BatteryPercent short PlayerBatteries
if Maintenance == 1 set Button to GetButtonPressed if (Button == 0) ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled BatteryCount, PlayerBatteries ;установка батарей Set Maintenance to 2
elseif ( Button == 1 ) ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGAbility ;выбор способностей Set Maintenance to 3 else ; Set Maintenance to 0 endif
if Maintenance == 2 set Option to GetButtonPressed if Option == 0 Player.RemoveItem FissionBattery 1 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries - 1 set BatteryCount to BatteryCount + 1 set LastBattery to 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled, BatteryCount, PlayerBatteries elseif Option == 1 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.RemoveItem FissionBattery 1 Player.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries + 1 set BatteryCount to BatteryCount - 1 if BatteryCount == 0 set LastBattery to 1 else set LastBattery to 0 endif ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled, BatteryCount, PlayerBatteries elseif Option == 2 set Maintenance to 0 endif endif
if Maintenance == 3 set Choice to GetButtonPressed if Choice == 0 ;стелс if AbilityNumber1 == 0 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.addspell StealthBoyInvisibilitySpell set AbilityNumber1 to 1 set zzUnderWorldQuest.MaintenanceGood to 1 endif
if AbilityNumber1 == 1 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.removespell StealthBoyInvisibilitySpell set AbilityNumber1 to 0 set zzUnderWorldQuest.MaintenanceGood to 0 endif
elseif Choice == 1 ;ускорение if AbilityNumber2 == 0 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else Player.Setav SpeedMult 150 set AbilityNumber2 to 1 set zzUnderWorldQuest.MaintenanceGood to 1 endif
if AbilityNumber2 == 1 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else Player.Setav SpeedMult 150 set AbilityNumber2 to 0 set zzUnderWorldQuest.MaintenanceGood to 0 endif
elseif Choice == 2 ;замедление if AbilityNumber3 == 0 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else sgtm 0.25 set AbilityNumber3 to 1 set zzUnderWorldQuest.MaintenanceGood to 1 endif
if AbilityNumber3 == 1 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else sgtm 1 set AbilityNumber3 to 0 set zzUnderWorldQuest.MaintenanceGood to 0 endif
elseif Choice == 3 ;кулак ярости if AbilityNumber4 == 0 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 100 player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 set AbilityNumber4 to 1 set zzUnderWorldQuest.MaintenanceGood to 1 endif
if AbilityNumber4 == 1 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 set AbilityNumber4 to 0 set zzUnderWorldQuest.MaintenanceGood to 0 endif
elseif Choice == 4 ;защитный режим if AbilityNumber5 == 0 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 100 player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 set AbilityNumber5 to 1 set zzUnderWorldQuest.MaintenanceGood to 1 endif
if AbilityNumber5 == 1 elseif zzUnderWorldQuest.CurrentBatteryLife <= 60 && zzUnderWorldQuest.BatteryCount == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGlow Else player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 100 set AbilityNumber5 to 0 set zzUnderWorldQuest.MaintenanceGood to 0 endif endif endif endif
Почему-то мессаг не появляется. И вопрос: Будут ли работать варианты при выборе способностей? Хотел вот таким способом отчитывать батареи, от которых будут работать способности:
Code
if MaintenanceGood == 1 if CurrentBatteryLife <= 0 && BatteryCount > 0 set CurrentBatteryLife to 3600 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.RemoveItem FissionBattery 1 set BatteryCount to BatteryCount - 1 if BatteryCount == 0 set LastBattery to 1 else set LastBattery to 0 endif endif endif
if LastBattery == 1 set BatteryPercent to CurrentBatteryLife / 36 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGleft BatteryPercent set LastBattery to 2 elseif LastBattery == 2 if CurrentBatteryLife / 360 > 1 if CurrentBatteryLife / 360 < BatteryPercent / 10 set LastBattery to 1 endif elseif CurrentBatteryLife / 36 < BatteryPercent set LastBattery to 1 endif endif
Слишком запутался, вот и прошу помощи. А то уже голова не варит.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №831
написано: 8 октября 2012, 06:41
| Отредактировано: Spalny_Vagon - 8 октября 2012, 06:42
Слишком запутался, вот и прошу помощи. А то уже голова не варит
Вот так попробуйте:
Code
begin gamemode if CurrentBatteryLife <= 0 && BatteryCount > 0 set CurrentBatteryLife to 3600 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.RemoveItem FissionBattery 1 set BatteryCount to BatteryCount - 1 endif
if BatteryCount == 0 set LastBattery to 1 else set LastBattery to 0 endif
if LastBattery == 1 set BatteryPercent to CurrentBatteryLife / 36 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGleft BatteryPercent set LastBattery to 2 elseif LastBattery == 2 if CurrentBatteryLife / 360 > 1 if CurrentBatteryLife / 360 < BatteryPercent / 10 set LastBattery to 1 endif elseif CurrentBatteryLife / 36 < BatteryPercent set LastBattery to 1 endif endif end
А что касается первого скрипта, я где-то читал, что если в блоке проверяются нажатые кнопки, то ничего другого проверять в этом же блоке уже нельзя, т.к. движок все равно может это воспринять как проверку нажатия, возвращая при этом -1 (ничего не нажато). Т.е., если Вы проверяете, какие кнопки Option нажаты (set Option to GetButtonPressed), то проверка числа батарей (if BatteryCount == 0 ) должна быть ВНЕ этого блока, уже после того, как проверка всех вариантов кнопки Option закончена.
====================== Мод "Нью-Йорк" на русском: 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
Spalny_Vagon, понятно. Проглядев скрипт на мессаг я понял что он и не мог работать. Но правда он и не работает даже вроде в правильном варианте:
Code
Short Option Short Button ;Short Choice
short Maintenance short Maintenance2 ;short Maintenance3
if Maintenance == 1 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGChoice set Button to GetButtonPressed if (Button == 0) Set Maintenance2 to 1 Set Maintenance to 0 elseif (Button == 1) ; Set Maintenance3 to 1 Set Maintenance to 0 elseif (Button == 2) Set Maintenance to 0 endif
if Maintenance2 == 1 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled BatteryCount, PlayerBatteries set Option to GetButtonPressed if (Option == 0) Player.RemoveItem FissionBattery 1 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries - 1 set BatteryCount to BatteryCount + 1 set LastBattery to 0 elseif (Option == 1) zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.RemoveItem FissionBattery 1 Player.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries + 1 set BatteryCount to BatteryCount - 1 ; if BatteryCount == 0 ; set LastBattery to 1 ; else ; set LastBattery to 0 ; endif ; ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled, BatteryCount, PlayerBatteries elseif Option == 2 set Maintenance2 to 0 endif endif endif
Первый мессаг появляется, а вот при любом выборе на мессаге нечего не происходит. Не могу найти причину.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Spalny_Vagon
Spalny_VagonOffline
Сообщение №833
написано: 9 октября 2012, 12:58
| Отредактировано: Spalny_Vagon - 9 октября 2012, 13:02
Первый мессаг появляется, а вот при любом выборе на мессаге нечего не происходит. Не могу найти причину.
Трудно сказать, что там не так, особенно есели учесть, что я не в курсе, что именно должно происходить. Я могу предложить отделить все блоки друг от друга жестко с помощью двух дополнительных переменных, примерно так:
Code
scn GdeOnoTormozit Short Option Short Button ;Short Choice
short doChoise short doOptions
short Maintenance short Maintenance2 ;short Maintenance3 begin gamemode
if Maintenance == 1 && doChoise == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGChoice set doChoise to 1 endif if doChoise == 1 set Button to GetButtonPressed set doChoise to 2 endif if doChoise == 2 if (Button == 0) Set Maintenance2 to 1 Set Maintenance to 0 elseif (Button == 1) ; Set Maintenance3 to 1 Set Maintenance to 0 elseif (Button == 2) Set Maintenance to 0 endif set doChoise to 0 endif
if Maintenance2 == 1 && doOptions == 0 ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled BatteryCount, PlayerBatteries set doOptions to 1 endif if doOptions == 1 set Option to GetButtonPressed set doOptions to 2 endif if doOptions == 2 if (Option == 0) Player.RemoveItem FissionBattery 1 zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries - 1 set BatteryCount to BatteryCount + 1 set LastBattery to 0 elseif (Option == 1) zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesRef.RemoveItem FissionBattery 1 Player.AddItem FissionBattery 1 set PlayerBatteries to PlayerBatteries + 1 set BatteryCount to BatteryCount - 1 ; if BatteryCount == 0 ; set LastBattery to 1 ; else ; set LastBattery to 0 ; endif ; ShowMessage zzUnderWorldPowerArmorAdvancedNoBackpackContainerBatteriesMSGBatteriesInstalled, BatteryCount, PlayerBatteries elseif Option == 2 set Maintenance2 to 0 endif set doOptions to 0 endif end
А еще в процессе отладки можно отследить, где именно получается затор, вставляя дополнительный вспомогательный message - если он в игре появляется, значит скрипт, по крайней мере до той строчки, где он стоит, выполняется.
====================== Мод "Нью-Йорк" на русском: 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
Spalny_Vagon, сейчас попробую по разным вариантам. Может что и получится.
Цитата Spalny_Vagon
Short AbilityNumber1 Short AbilityNumber2 Short AbilityNumber3 Short AbilityNumber4 Short AbilityNumber5
Short Choice
short Maintenance short Maintenance2
begin scripteffectstart player.additem zzUnderWorldPowerArmorAdvancedNoBackpackFoodAbility 1 set Maintenance to 1 End
Begin GameMode if (Maintenance == 1) ShowMessage zzUnderWorldPowerArmorAdvancedMESGAbility Set Maintenance2 to 1 endif
if (Maintenance2 == 1) && zzunderworldquest.lastbattery >= 2 Set Maintenance to 0 Set Choice to GetButtonPressed if (Choice < 0) Return elseif Choice == 0 && AbilityNumber1 == 0 ;стелс player.addspell StealthBoyInvisibilitySpell set AbilityNumber1 to 1 Set Maintenance2 to 0
elseif Choice == 0 && AbilityNumber1 == 1 player.removespell StealthBoyInvisibilitySpell set AbilityNumber1 to 0 Set Maintenance2 to 0 endif
elseif Choice == 1 && AbilityNumber2 == 0 ;ускорение Player.Setav SpeedMult 250 set AbilityNumber2 to 1 Set Maintenance2 to 0
elseif Choice == 1 && AbilityNumber2 == 1 Player.Setav SpeedMult 100 set AbilityNumber2 to 0 Set Maintenance2 to 0
elseif Choice == 2 && AbilityNumber3 == 0;замедление sgtm 0.25 set AbilityNumber3 to 1 Set Maintenance2 to 0
elseif Choice == 2 && AbilityNumber3 == 1 sgtm 1 set AbilityNumber3 to 0 Set Maintenance2 to 0
elseif Choice == 3 && AbilityNumber4 == 0;кулак ярости ; player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 ; player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 set AbilityNumber4 to 1 Set Maintenance2 to 0
elseif Choice == 3 && AbilityNumber4 == 1 ; player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 set AbilityNumber4 to 0 Set Maintenance2 to 0
elseif Choice == 4 && AbilityNumber5 == 0 ;защитный режим ; player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1 ; player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 set AbilityNumber5 to 1 Set Maintenance2 to 0
elseif Choice == 4 && AbilityNumber5 == 1 ; player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 100 set AbilityNumber5 to 0 Set Maintenance2 to 0 elseif Choice == 5 Set Maintenance2 to 0 endif endif End
Но почему то работает каждая кнопка без второй проверки на отключение функций (полагаю, надо было делать в мессаге 2 выбора с разными проверками?). И вернее работает только первая кнопка, с чем это может быть связано?
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя JupiterJour
JupiterJourOffline
Сообщение №835
написано: 15 октября 2012, 19:02
| Отредактировано: Joopeeter - 15 октября 2012, 19:11
Это может быть связано с endif между elseif'ами, которые проверяют Choice насчёт Choice ==0 и Choice ==1. Хм, ScriptEffectStart и GameMode в одном скрипте? O_o
Хм, ScriptEffectStart и GameMode в одном скрипте? O_o
Удивлен? Вот такой вариант работает стабильно:
Code
Short Maintenance Short Maintenance2 Short Option
begin scripteffectstart player.additem zzUnderWorldPowerArmorAdvancedFoodAbility2 1 ; set zzunderworldquest.Maintenance to 1 Set Maintenance2 to 1 End
Begin GameMode if (Maintenance2 == 1) set zzUnderWorldQuest.PlayerBatteries to Player.GetItemCount FissionBattery Showmessage zzUnderWorldPowerArmorAdvancedMESGBattery, zzUnderWorldQuest.PlayerBatteries Set Maintenance to 1 endif
if (Maintenance == 1) Set Maintenance2 to 0 Set Option to GetButtonPressed ; if (Option < 0) ; Return if (Option == 0) ;Подключить ядерную батарею Player.removeitem FissionBattery 1 player.removeitem zzUnderWorldPowerArmorAdvancedFoodAbility2 10 player.additem zzUnderWorldPowerArmorAdvancedNoBackpackFoodAbility 1 zzUnderWorldPowerArmorAdvancedContainerBatteryRef.additem FissionBattery 1 Set Maintenance to 0 elseif (Option == 1) Set Maintenance to 0 endif endif End
А тот что в сообщении 846 (последний), почему-то не работает не в какую, ну как, всмысле работает, но вот включаю например стелс, а выключить уже не выключишь. И остальные варианты не работают. Хотя это наверно из-за ендифа.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Решил задать этот вопрос сюда, т.к. данная тема специализирована на скриптописании.
Ранее в скриптовом языке Oblivion существовала такая функция как GetActiveMenuSelection, она представляла собой условие для объекта на который наведен курсор мыши в меню инвентаря (или для любого другого меню кстати). Существует ли аналогичная функция для Fallout, и если да, то как она работает?
Вопрос... наверное тоже по скриптам, хотя возможно есть и способ попроще. Как сделать терминал одноразовым? То есть - активировал терминал, прошёлся по нескольким суб-меню, долез до нужной по квесту кнопки в терминале (допустим - "включить самоунитожение"), вышел из терминала, активировал его снова, а там вместо предыдущего меню что-нибудь типа "терминал заблокирован". Как это сделать?
Cleric, можно скриптом действие на 1 раз сделать. А можно просто кондифцию сделать на дисабл объекта (disable), и в сообщении его енаблить и тоже уже не будет повторяться.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Demolir
DemolirOffline
Сообщение №840
написано: 20 октября 2012, 21:44
| Отредактировано: Demolir - 20 октября 2012, 22:19