Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
Решил добавить в Lozza's gasmasks (он же Gas Masks of the world), переделанного для Project Nevada, противогаз из другого мода и добавить ему визоры и эффекты дыхания как и остальным. Проблема возникла с первым же скриптом, отвечающим за эффекты дыхания. По сути туда просто нужно было добавить в соответствующие строчки наименование предмета (благо примеры имелись и косяков с орфографией не возникло), но при попытке сохранения в "чистом" GECK'е скрипт вообще отказывается сохраняться, а при попытке сохранить его в The G.E.C.K. PowerUp выдает ошибку "script command label not found" которая относится к строке скрипта, которую я вообще не трогал. Самое интересное в том, что те же проблемы наблюдаются даже при попытке сохранить исходную версию скрипта.
Изменение репутации для пользователя ITU
ITUOffline
Сообщение №1565
написано: 7 ноября 2016, 00:52
| Отредактировано: ITU - 7 ноября 2016, 00:59
Zess, что за скрипт? скинул бы, написал какую ошибку выдает, было бы проще подсказать И да, скрипты оригинальной игры не все компилируются... а еще бывает что некоторые мододелы прячут изходный код, удаляя или меняя в fnvedit а еще могут быть что это команда из NVSE, запускать гекк коммандой "nvse_loader -editor""
SOS! Такая вот проблемка: скачала мод, позволяющий видеть игрока со стороны, когда он спит. Всё работает, но не устраивает (лично меня) один момент: когда игрок спит - ускоряется течение времени. Звезды водят быстрый хоровод, луна пролетает по небосклону шустрым болидом... Автор это сделал для того, чтобы не смотреть целую минуту или две, ничего не делая, на спящего Курьера. А мне фиолетово, я могу и посмотреть. Начала ковыряться в скриптах, неделю тыкалась - ничего не получается. Может кто-нибудь из более понимающих людей подсказать, что надо сделать? Ну чтобы течение времени было стандартным во время сна. Скрипт, конечно, ого-го-го какой большой, но вдруг?
short Stage
short PlDuCombat
short DummyHealth ; Health of Dummy to damage the player
short SelSleeptTime ; time which was selected in the original sleep dialogue
short SlEventChance ; sets the chance if someting is happening while sleeping -2 lower , 0 normal, 2 higher short SlEventIndoor ; no indoor events short SlEvenetHome ; no events at home short SlSnorr ; no snorring
short WellRested ; wellrested perk control short DogPee ; Dog Spell control
short OneSecond ; control for one second timer short SecCnt ; one second timer for sleep process short TalkCnt ; timer for idletalk while sleeping short SnorrFreq ; frequency of snorring (calculated with endurance)
short SleepDisturbed ; is sleep interrupted short SleepDisturbedChance ; chance of interruption short SleepPlayerChance short SleepDisturbedType ; type of interruption (with instant wake up 0 or continuing sleep 1) short SleepDisturbedStart ; when is the sleep interupted
short SleepNotCancled
float hcSleepdep ; Sleep Dep Value float hcHunger float hcDehydration
float RealSleepStartTime ; Start of Sleep float RealSleepStopTime ; End of Sleep float RealSleepTime ; How long the player slept
short DummyPlBedMove ; Invisible Bed to activate Sleep Menu ref DummyPlBedMoveRef
Begin GameMode
; ---------------------------- Stage 1: preperations for later ani stages & teddy settings
If Stage == 1
Set DummyRef to FNNsys0.DummyRef
; ------- get the Hardcore Values because they get lost if sleep is canceld for a strange reason
Set hcHunger to PlayerRef.GetAv hunger Set hcDehydration to PlayerRef.GetAv Dehydration
; ------- 'goto sleep' ani is running, rotate dummyXmH pos at begin for later
If FNNsys0.organgle > 180 ; rotate dummy pos (actualy the XMH) for end animation set FNNsys0.fangle to FNNsys0.organgle - 180 Else set FNNsys0.fangle to FNNsys0.organgle + 180 EndIf DummyXMHRef.SetAngle Z FNNsys0.fangle
Set DummyHealth to DummyRef.GetAv Health ; get health from Dummy
; ------- calculate the chance of disturbance
Set SleepDisturbedChance to 1 + GetRandomPercent * 9 / 99 ; calculate a random number 1 to 10 Set SleepPlayerChance to (PlayerRef.GetAv Luck) + SlEventChance
If SleepPlayerChance <= SleepDisturbedChance ; check against player luck Set SleepDisturbed to 1 ; is it a disturbed 1 one or a normal 0 ; PrintC "FNNsys: Stage 1 Disturbed" EndIf
; Set SleepDisturbed to 1 ; -------------------------> Debug
; ------- check the configuration settings made by the player
If PlayerRef.GetAv Perception < GetrandomPercent/10 ; perception deciedes if the player wakes up instantly after the event Set SleepDisturbedType to 0 ; can be overriden by ambushscript Else Set SleepDisturbedType to 1 EndIf
If SlEvenetHome == 1 ; home config If WellRested == 1 ; is player at home is checked by wellrested script on beds Set SleepDisturbed to 0 ; let him sleep EndIf EndIf
If SlEventIndoor == 1 ; Interior config If PlayerRef.IsInInterior == 1 ; is player in an interior Set SleepDisturbed to 0 ; let him sleep EndIf EndIf
If PlayerRef.Getav Endurance <= 5 ; snorr frequency depends on characters endurance Set SnorrFreq to 4 ; snorr every cycle ElseIf PlayerRef.Getav Endurance <= 7 Set SnorrFreq to 8 ; snorr every second cycle Else Set SnorrFreq to 12 ; snorr every third ... EndIf
Set TimerC to 12 ; get in bed time timer for the fallback (if dummy is a real dummy) Set Stage to 2
EndIf
; ---------------------------- Stage 2: Wait till dummy has found the Bed if he is sleeping ask the player how long
If Stage == 2
If DummyRef.IsInCombat == 1 || PlayerRef.IsInCombat == 1 Set TimerE to 4 Set Stage to 5 ; Get out EndIf
If DummyRef.GetSleeping == 3 ; check if dummy has arrived and is sleeping
If DummyPlBedMove == 0 ; PrintC "FNNsys: Stage2 Fake Bed for Player is produced" Set DummyPlBedMoveRef to PlayerRef.Placeatme FNNsysCardBedFake 1 ; make a fake bed for the 'player' to click on DummyPlBedMoveRef.Setscale 0.01 ; it is made small so it isn't found normally Set DummyPlBedMove to 1 Endif
If DummyPlBedMoveRef.HasLoaded3d If DummyPlBedMove == 1 ; PrintC "FNNsys: Stage2 Dummy Sleeps Player has activated the bed" DummyPlBedMoveRef.Activate PlayerRef ; he is so ask the player how long stage advance in menumode Set DummyPlBedMove to 2 EndIf EndIf
If DummyPlBedMove == 3 ; We are out of menumode Set Stage to 3 EndIf
EndIf
if ( TimerC > 0 ) ; fall back timer if the dummy doesn't find the bed Set TimerC to ( TimerC - GetSecondsPassed ) else ; PrintC "FNNsys: Stage2 TimeOut Dummy hasn't found the bed" showmessage FNNsysFilthyMsg ; message to inform player we pretend the bed is filthy DummyRef.RemoveScriptpackage FNNsysSleepWalkPackage ; dummy walks to already rotated dummypos DummyRef.AddScriptpackage FNNsysWakeWalkPackage DummyRef.evp
Set TimerE to 10 ; 10 seconds for the animations Set Stage to 5 ; skip sleep endIf
; PrintC "FNNsys: Menumode 1012 FakeBed is removed"
DummyPlBedMoveRef.Disable DummyPlBedMoveRef.MarkforDelete Set DummyPlBedMove to 0
EndIf
If DummyRef.IsInCombat == 1 || PlayerRef.IsInCombat == 1 Set TimerE to 4 Set Stage to 5 EndIf
If DummyRef.GetSleeping == 3 ; check if dummy has arrived and is sleeping
If SelSleeptTime == 0
; ------- Player canceld sleep?
; PrintC "FNNsys: Stage 3 Player canceled sleep"
Set TimerE to 10 DummyRef.RemoveScriptpackage FNNsysSleepWalkPackage ; dummy should walk to already rotated dummypos DummyRef.AddScriptpackage FNNsysWakeWalkPackage Set WellRested to 0 ; player didn't sleep here: No well rested set Stage to 5 ; to 5
Else
; ------- Set the sleep timescale
Set OrgTimeScale to TimeScale ; get the timescale Set SleepTimeScale to 1920 ; change the timescale 1890
; ------- Is it disturbed sleep?
If SleepDisturbed == 1 ; player gets disturbed ; PrintC "FNNsys: Stage3 Sleep disturbance is calculated" set SleepDisturbedStart to 3 + ( GetRandomPercent * (SelSleeptTime -3) / 99) ; between 3 & Sleeptime If SleepDisturbedStart == SelSleeptTime Set SleepDisturbedStart to SleepDisturbedStart - 1 EndIf EndIf
Set TimerD to (SelSleeptTime - 1) * 2 ; set the timer to the selected double sleeptime in seconds Set SecCnt to TimerD Set Stage to 4 ; to main sleeping stage
EndIf
EndIf
EndIf
; ---------------------------- Stage 4: Main Sleep Stage, Snorr, Disturbance,
If Stage == 4
If DummyRef.IsInCombat == 1 || PlayerRef.IsInCombat == 1 Set PlDuCombat to 1 Set TimerE to 4 Set Stage to 5 EndIf
If OneSecond == 0 ; prepare one second timer for idle talk and time passing Set OneSecond to 1 Set TimerF to 1 Set Timescale to SleepTimeScale ; set the sleep timescale EndIf
If TalkCnt == SnorrFreq ; do the snorring with constitution based frequency If SlSnorr == 0 ; config menu check ; PrintC "FNNsys: Stage4 Player Snorrs" DummyRef.Say IdleChatter EndIf Set TalkCnt to 0 EndIf
if ( TimerF > 0 ) ; one second timer disturbance and idle talk Set TimerF to ( TimerF - GetSecondsPassed ) else Set OneSecond to 0
If PlayerRef.GetAv SleepDeprevation > 38 PlayerRef.DamageAv SleepDeprevation -36 ; restore Sleep to the player EndIf
Set TalkCnt to TalkCnt + 1 ; counter for idle chatter Set SecCnt to SecCnt - 1 ; counts only the seconds for random events Set Timescale to OrgTimescale EndIf
If SecCnt == SleepDisturbedStart ; time for disturbance is reached start the action If SleepDisturbedStart > 1 ; PrintC "FNNsys: Stage4 Disturbance has started" set SleepDisturbedStart to -1 set FNNsysAmbush.Stage to 1 startquest FNNsysAmbush stopquest FNNsys EndIf EndIf
; ------- Main sleep timer
if ( TimerD > 0 ) ; main timer for dummy sleep Set TimerD to ( TimerD - GetSecondsPassed ) else
; ------- end dummy sleep cycle DummyRef.RemoveScriptpackage FNNsysSleepWalkPackage ; dummy should walk to already rotated dummypos DummyRef.AddScriptpackage FNNsysWakeWalkPackage DummyRef.evp
Set TimerE to 12 ; 15 seconds as fallback if something goes wrong Set Stage to 5
EndIf
EndIf
If Stage == 5
If DummyPlBedMove == 2
; ---- get rid of the fake bed
; PrintC "FNNsys: Stage 5 FakeBed is removed"
DummyPlBedMoveRef.Disable DummyPlBedMoveRef.MarkforDelete Set DummyPlBedMove to 0
EndIf
If Timescale == SleepTimescale Set Timescale to OrgTimescale EndIf
If ( TimerE > 0 ) Set TimerE to ( TimerE - GetSecondsPassed ) Else
If PlDuCombat == 1 PlayerRef.moveto DummyRef Set PlDuCombat to 0 EndIf
PlaySound UIItemsClothingUp ; for immersion
Set FNNsys0.fAngle to DummyRef.GetAngle Z ; get angle of dummy player PlayerRef.SetAngle Z FNNsys0.fAngle ; correct player angle to fit dummy angle
DummyRef.RemoveAllItems FNNsysSleeepWearContRef 1 ; get sleepwear back DummyRef.stopcombat ; to make it harder for the player
Set DummyHealth to DummyHealth - (DummyRef.GetAV Health)
PlayerRef.SetPos X FNNsys0.orgxpos ; place player back PlayerRef.SetPos Y FNNsys0.orgypos PlayerRef.SetPos Z FNNsys0.orgzpos
PlayerRef.setActorAlpha 1 ; make player visible again
DummyRef.ResetHealth ; heal the dummy before it is sent back to holding DummyRef.restoreav perceptioncondition 100 DummyRef.restoreav endurancecondition 100 DummyRef.restoreav leftattackcondition 100 DummyRef.restoreav leftmobilitycondition 100 DummyRef.restoreav rightattackcondition 100 DummyRef.restoreav rightmobilitycondition 100
DummyRef.moveto DummyPrepareRef ; remove dummy back in hidden cell PrepareNPCBedXmRef.moveto DummyPrepareRef ; remove markers back to hidden cell DummyXMHRef.moveto DummyPrepareRef
If DummyRef.GetDead == 1 PlayerRef.Killactor ; dummy dead, player dead Else ; PrintC "FNNsys: Stage5 Player gets damage of Dummy" PlayerRef.Damageav Health DummyHealth ; give player some nice surprises from dummy EndIf
EnablePlayerControls ; cutscene is over
If WellRested == 1 ; PrintC "FNNsys: Stage5 Player gets Well Rested" Set WellRested to 0 PlayerRef.CastImmediateOnSelf WellRestedSpell EndIf
If DogPee == 1 ; PrintC "FNNsys: Stage5 Player gets DogStinkSpell" Set DogPee to 0 PlayerRef.CastImmediateOnSelf FNNsysAmbDogStinkSpell EndIf
Set RealSleepStopTime to GameDayspassed Set RealSleepTime to (RealSleepStopTime/ 0.041667) - (RealSleepStartTime/ 0.041667) ; PrintC "RealSleepTime %f" RealSleepTime
Set hcSleepdep to PlayerRef.GetAv SleepDeprevation
; ------- compensate the last sleep hour the Deprevation should be 2 like in the original game after a full sleep If hcSleepdep < 38 && hcSleepdep > 2 Set hcSleepdep to 2 - hcSleepdep PlayerRef.DamageAv SleepDeprevation hcSleepdep ; restore Sleep to the player EndIf
Set SelSleeptTime to 0 Set SleepNotCancled to 0 Set SleepDisturbed to 0 ; back to default Set Stage to 0
If FNNsys0.FNNsysSave == 0 AutoSave EndIf
StopQuest FNNsys EndIf
EndIf
End
Begin Menumode 1012
If DummyPlBedMove == 2 Set DummyPlBedMove to 3 EndIf
If GetPCSleepHours > 0 ; get the hours the PC tries to sleep
; PrintC "FNNsys: Menumode 1012 Player tries to sleep"
set SelSleeptTime to GetPCSleepHours ; get the adjusted value set RealSleepStartTime to GameDaysPassed ; get the actual Time (lay down included)
SetPCSleepHours 0 ; set the hours to 0 set Stage to 3 ; start the dummy sleep
WakeUpPc ; get rid of the menu
EndIf
End
В строчке, которая выделена желтым, я меняла значения, но никакого эффекта.
Ой, всё...
Изменение репутации для пользователя MaxwellDemon
MaxwellDemonOffline
Сообщение №1567
написано: 24 ноября 2016, 17:15
| Отредактировано: MaxwellDemon - 24 ноября 2016, 17:16
КсюXa, есть глобальная переменная TimeScale, которая и задаёт скорость течения времени в игре. По умолчанию TimeScale == 30, отсюда вопрос - в каком диапазоне ты изменяла переменную скрипта SleepTimeScale? Если (судя по скрипту) ты сменила значение с 1890 на 1920 (при стандартном значении 30), думается мне - разница действительно будет незаметна глазу... Бегло просмотрев все действия в скрипте с переменной TimeScale - задаётся она (set TimeScale to ...) 3 раза, один раз на ускоренный и в двух случаях на стандартный.
Думается мне если написать ту строчку так:
Set SleepTimeScale to 30 ; change the timescale 1890
Скрипт будет работать "в холостую", при этом не меняя скорость течения времени вообще.
Изменение репутации для пользователя КсюXa
КсюXaOffline
Сообщение №1568
написано: 25 ноября 2016, 14:37
| Отредактировано: КсюXa - 26 ноября 2016, 06:17
MaxwellDemon, попробовала сделать Set SleepTimeScale to 30 Сработало наполовину. Ну то есть - небо с луной стали вращаться с нормальной скоростью, а вот временная шкала стала глючить. При стандартном сне появляется черный экран и шкала времени. Ложишься, к примеру, в 8 часов вечера, задаешь время сна - 12 часов, спишь, ползунок шкалы двигается. В 8 утра - пробуждение, шкала и черный экран исчезают, появляется игрок. Если посмотреть на часы и на местность вокруг после пробуждения - да, 8 утра на дворе. В моде при стандартных его настройках, когда ложишься спать - черный экран не появляется, а игрок сразу ложится в кровать. Только после этого появляется шкала времени (прямо поверх изображения, без черного экрана) и можно указать длительность. Указываешь, жмешь "Спать" - шкала исчезает и на экране только игрок в кроватке. Ложишься в 8 вечера на 12 часов - вокруг все быстро вертится, сам сон проходит в реальном времени быстрее, чем стандартный сон, но неписи вокруг не убыстряются, изменение скорости течения времени их не затрагивает. И игрок просыпается спустя 12 часов примерно в положенное время, где-то в 7-45 - 8-15 . (есть небольшое расхождение). При значении в 30, как оказалось - время вокруг вроде течет стандартно, небо и луна вращаются как положено. Но время сна по реальному времени осталось очень коротким (что, впрочем, меня устраивает), но вот временная шкала сбивается очень и очень сильно. Лег спать в 8 вечера на 12 часов, полежал в кроватке, проснулся, посмотрел на часы (во время сна шкала не показывается) - а по часам прошло всего 2 часа и время сейчас 10 утра. И вокруг визуально - всё тоже утреннее, солнце на 10 утра. Хотя, может быть, это шкала глючит - указываешь спать 12 часов, а реально срабатывает сон на 2 часа. Поэтому так быстро и просыпаешься. Что-то где-то еще меняется. Смотрела остальные скрипты мода, но там чистая топография - повернуть игрока туда, подсунуть ложного игрока туда... И ничего связанного с изменением таймера. Сам мод, если чё.
При значении в 30, как оказалось - время вокруг вроде течет стандартно, небо и луна вращаются как положено. Но время сна по реальному времени осталось очень коротким (что, впрочем, меня устраивает), но вот временная шкала сбивается очень и очень сильно. Лег спать в 8 вечера на 12 часов, полежал в кроватке, проснулся, посмотрел на часы (во время сна шкала не показывается) - а по часам прошло всего 2 часа и время сейчас 10 утра. И вокруг визуально - всё тоже утреннее, солнце на 10 утра. Хотя, может быть, это шкала глючит - указываешь спать 12 часов, а реально срабатывает сон на 2 часа. Поэтому так быстро и просыпаешься.
Там, насколько я понял, имитация дрыхнущего плеера контролируется таймером реального времени (переменная TimerD) А увеличенная глобальная TimeScale и таймер так подогнаны друг к другу, чтобы за время сна пролетало положенное количество часов игрового времени. Set TimerD to (SelSleeptTime - 1) * 2 ; set the timer to the selected double sleeptime in seconds Ты замедляешь "сонное" игровое время до 30. Соответственно за то же число реальных секунд фальшивого сна проходит меньше игрового времени, чем при "сонном" времени 1920. Тогда для соответствия надо либо увеличить таймер, подогнав его к TimeScale == 30 (наверное, тогда и сама успеешь вздремнуть, пока игрок спит ), либо вернуть 1920 на место, либо подобрать какое-то компромиссное соотношение таймера и времени.
Изменение репутации для пользователя BsX
BsXOffline
Сообщение №1570
написано: 1 декабря 2016, 12:46
| Отредактировано: BsX - 1 декабря 2016, 12:51
Что по утрам, спросонья, конечно приводит в некоторое замешательство, а поздним вечером вообще может напугать до смерти Вот рассмотрим 8 утра, например. Оно меньше, чем 10 утра или оно меньше, чем 9 вечера?
Некоторое время они не реагировали. Эдик курил, пуская дым в потолок, Витька неподвижно лежал на животе, а Роман бессмысленно смотрел на меня. Потом глаза его расширились. - Полночь! - сказал он страшным шепотом. Все вскочили. (с)
Ты рассматриваешь 8 утра, так, как будто распорядок дня таков: утро, день, вечер, ночь, новое утро и считаешь, что 8 часов нового утра больше чем 9 часов предыдущего вечера. Но ведь эти девять вечера остались в прошлых сутках! В полночь отчет начался заново. И в новых сутках 8 часов этого нового утра сравниваются уже с 9-ю вечера ЭТИХ новых суток и они меньше (8 < 21). К тому же у тебя стоит оператор "|| (Или)". Для примера опять же возьмем текущий момент 8 утра и посмотрим, что делает скрипт в этот момент времени:
Если 8 утра >=10 утра (неверно)ИЛИ 8 утра <= 21 вечера (верно) И если отключено (верно. Был изначально отключен) включить лампу (Включает) иначе если 8 утра >= 21 вечера (неверно)ИЛИ 8 утра <= 10 утра (верно) И если включено (верно. Был включен в предыдущей строке) выключить лампу (выключает)
Упрощаем выражение, убрав подчеркнутое (как проигнорированное движком из-за неверности на данный момент) и получаем:
Если (8 утра <= 21 вечера (верно) И если отключено) (верно. Был изначально отключен) включить лампу (Включает) иначе если (8 утра <= 10 утра (верно) И если включено) (верно. Был включен в предыдущей строке) выключить лампу (выключает)
Итог: обе строки скрипта одновременно в текущий момент соответствуют истине, обе срабатывают по очереди и оно так и получается - входит-выходит вкл\выкл каждую секунду. Первая включила - вторая тут же выключила. Первая обиделась и снова включила - вторая сказала - "Нет, моё" и снова выключила.
ЗЫ. Походу, в оригинальном скрипте из Картотеки происходит то же самое. Проверять на практике лень.
Да. Нужно ведь одни и те же сутки считать от полуночи до полуночи, т.е. - с 0000 до 2400 часов. И цифры рассматривать именно в таком диапазоне, от 0 до 24. Время с 10 утра до 9(21) вечера будет как (GetCurrentTime >= 10 утра И GetCurrentTime <= 21 вечера). А все остальные часы в сутках будут ИЛИ (или меньше 10 утра или больше 21 вечера)
Я создал рубильник, который..... Как сделать, чтобы он через какое-то время отключался?
Свет или рубильник? Вопрос задан как-то двояко и расплывчато. Если свет, то через какое время? И как выключался - навсегда или на определенное время? И если выключился - то что его должно включать обратно - тот же рубильник или он сам автоматически? Если рубильник (ну в смысле - активировал, а он через N-ое время исчез) - тут уже другое.
КсюXa, ну я создал генератор, который нужно починить. Только после этого рубильник начинает работать и можно включить свет. Но мне нужно, чтобы после включения рубильника, через какое-то время "выбивало пробки" и все отключалось. И нужно было заново прожать рубильник. И, кстати да, я уэе все сделал.)
Добавлено (12 Декабря 2016, 08:29) --------------------------------------------- КсюXa, а как сделать, чтобы после прохождения определенной точки все напарники возвращались на базу?
Я тебя проинтегрировал, я тебя и продифференцирую...
MaxwellDemon, ну и как это сделать? Мне нужно, что когда я наживаю на дверь и перемещаюсь на локацию, все напарники сразу удалялись и возвращались на базу.
Я тебя проинтегрировал, я тебя и продифференцирую...
Изменение репутации для пользователя КсюXa
КсюXaOffline
Сообщение №1581
написано: 12 декабря 2016, 10:22
| Отредактировано: КсюXa - 12 декабря 2016, 15:34
Напарники ванильные или модовые? Тут ведь как - ванильных напарников отслеживают переменные из их квестового скрипта (нанят\не нанят, ждет\ не ждет и т.п.). Как их отсеивать - это можно посмотреть в скрипте телепортера на Большую Гору из ДЛС ОВБ. Модовый напарник может быть сделан без всего этого, чаще всего он просто тупо добавлен в команду и всё. В этом случае его просто скриптово выгоняем из команды. И он останется перед дверью. А чтобы непись ушел к себе домой - как было сказано, нужно дать ему принудительный пакет АИ с указанием, где его дом. Если напарник именно такой, просто член команды, (или ноги команды, уж не знаю...) - то при прохождении игрока сквозь дверь, в скрипт двери вписать команду отсева компаньонов. Для этого надо заранее создать АИ-пакет ХХХ типа Travel с указанием маркера, куда непись должен отправиться, маркер тоже заранее скинуть в нужное место. Пакет неписю в профиль не давать. А в скрипте двери вписать команды: Непись Реф.SetPlayerTeammate 0 НеписьРеф.addscriptpackage XXX НеписьРеф.evp Это заставит этого самого НеписяРеф переоценить свое поведение и выполнить новый пакет путешествия к маркеру.
Про нужные\ненужные уточнения объекта захотелось спросить, теоретически. Есть многолетний, давно уже "в среднем" работающий(на ~80%), большой мод (в составе большой системы), который тащит в одиночку явно неглупый человек (я пытаюсь сказать, что не команда "лебедь-рак-щука", и не "артистическая натура", от которой можно ожидать случайных взбрыков). И там есть тема определения\классификации прикида пц\нпц, решаемая через скрипт-эффекты с сотнями GetEquipped {имяСпискаКатегорииШмота}. Очень долго были именно 'безличные' GetEquipped - но несколько бет назад бОльшая часть их "обросла" префиксами (nActor.GetEquipped .., причем этот реф явно получен вначале, от getself). ** причем бОльшая - в очень странной пропорции: в самом начале каждого скрипта пара GetEquipped осталась "без рефов", а затем ~180 - "уточнились". В тамошнем сопровождающем треде я не нашел комментариев на эту тему, а спрашивать - ну, отчасти стесняюсь "отвлекать ерундой", отчасти опасаюсь длинной переписки на английском (чел весьма коммуникабелен, да мой уровень слабоват и мало времени постоянно там висеть-чатиться). Так что, по вашему - что могло подвигнуть автора на такое уточнение? Смешная версия "страховка от развеивания эффекта, раз так много проверок" не катит, эффект нарочно длинный, в конце скрипта явный dispel стоит.
emo877, обычно персонализация - страховка не от развеивания, а наоборот, от наложения на ненужные объекты. Видимо были случаи, когда в процессе работы скрипта подхватывался посторонний актор. Поэтому в начале и оставлены безликие - они после старта отрабатывают быстро и сбойнуть не успевают. Это чисто моё мнение, ессно.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Здравствуйте, нужна помощь со скриптом включения/выключения света при определенном времени суток в игре (для фонарей на улице). Сам скрипт простенький и его образец в интернете я нашел. Но осталось два вопроса: 1) Как сделать, чтобы свет включался плавно (плавное нарастание яркости)? 2) Как сделать, чтобы вместе с появлением лампочки появлялся и эффект свечения, типа FXLightBeam или FXLightGlow? Я хотел сделать скрипт аналогичный как в Нью-Вегасе, где и лампочка и эффект свечения привязаны к Х-Маркеру, ему присвоено имя и это имя упоминается в скрипте включения/выключения света, но там скрипт очень сложный. Буду очень благодарен за помощь.
Изменение репутации для пользователя tundruck73
tundruck73Offline
Сообщение №1585
написано: 29 апреля 2017, 11:40
| Отредактировано: tundruck73 - 29 апреля 2017, 11:44
Я привязывал все источники света и "световые эффекты" типа LightBeam к маркеру (не забывая отметить чек-бокс initially disabled), давал ему уникальное имя, потом писал скрипт и вешал его на квест. В скрипте много разных маркеров упомянуто, ибо много локаций освещено, тот, который на моей картинке, в их числе:
tundruck73, я понял, то есть точно также как и в Нью-Вегасе. Просто там в скрипте много чего написано было, я не понял что там нужно было, а что нет. В твоем же примере всё понятно. Всё сводится к тому, что при достижении определенного времени происходит активация Х-маркера и привязанных к нему объектов. Я так понял? Остался еще 1 вопрос - как сделать плавное зажигание лампочки?
Да, все верно. Что касается плавного зажигания, то оно и так получается слегка растянутым по времени, так что, я полагаю, не нужно ничего дополнительно придумывать.
Плавное включение уличных фонарей при наступлении темноты делается при помощи использования солнечного света. На небе солнце заходит, в фонарях солнце восходит. Солнце для фонарей помещается в специальную погоду (например, [WTHR:000BC39B]). Эта погода назначается специальному региону (например, [REGN:000BC39D]). Хорошо его в отдельный мир засунуть (например, [WRLD:000B3625]). Для использования этот регион прописывается на закладку Emittance экземпляра (reference) любимого фонаря типа Light.
Доброго времени суток. Мне вдруг стало интересна одна вешь - возможно ли привязать эффект увеличения роста (на подобие команды "setscale") к силовой броне? К примеру рост обычного персонажа равен 1, а если он наденет силовую броню, то его рост станет 1.3
P.S. я плохо разбираюсь в моддинге, работе со скриптами, поэтому и отправился сюда.