Перейти к содержанию

  • 0
pz_4

MQ05 "ЖИВАЯ ВОДА", Не ошибка, кривые руки.

Вопрос

Не акутально.

Изменено пользователем pz_4

Поделиться сообщением


Ссылка на сообщение

16 ответов на этот вопрос

Рекомендуемые сообщения

  • 0
3 часа назад, FNVFUN сказал:

Если эта переменная багуется, то лучше создать другую переменную и ей манипулировать. Баг движка какой-то.

Нет никакой ошибки, есть криворукий идиот (я) который напрочь забыл, что сделал перезапись скрипта(я забыл, что я использовал именно этот скрипт для личных целей), в которой не было обновленного механизма подсчета, и развел панику.

  • Нравится 1
  • Спасибо! 1

Поделиться сообщением


Ссылка на сообщение
  • 0
В 23.08.2026 в 12:30, pz_4 сказал:

MQ03.bodyCount = 0 нужно сделать только один раз. А он вынесен в начало кода после проверки if eval MQ03.bodyCount < 14 и постоянно сбрасывается в ноль.

А полный скрипт можешь скинуть? А то сижу на другом компе теперь, где не установлен SFW)

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, FNVFUN сказал:

А полный скрипт можешь скинуть? А то сижу на другом компе теперь, где не установлен SFW)

Под спойлером полный текст. Он без scn навзания т.к. это не полноценный скрипт а элемент квеста, через внутриквестовую систему скриптов написан.

PXbUauv.png

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, pz_4 сказал:

Под спойлером полный текст. Он без scn навзания т.к. это не полноценный скрипт а элемент квеста, через внутриквестовую систему скриптов написан.

Ну так он же 1 раз срабатывает, и далее идет проверка на MQ03.Bodycount >= 14

 

У тебя этот этап квеста забагался что ли? Там еще похожая проверка есть в скрипте квеста.

 

Попробуй к каждому суперу тпшнуться и проверить, убит ли он. В Ротонде смотрел, все ли убиты?

 

А то у меня этот квест ни разу не багался, а сохранение так никто и не скинул)

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, FNVFUN сказал:

Попробуй к каждому суперу тпшнуться и проверить, убит ли он. В Ротонде смотрел, все ли убиты?

См. скриншот в шапке темы. Я каждого из 14 мутных перебрал по REF и проверил, все getdead 1 , но переменная стоит в нуль.

Повторюсь, я уверен, что дело именно в обнулении которое стоит в начале скрипта. Да, я понимаю твою логику когда ты писал код, что мол оно должно обнулить, потом пробить мутных, получить число 14 и уйти на следующую стадию до очередной проверки есть ли 14 и обнуления - но это не работает. Переменная просто бесконечно скидывается в ноль.

Изменено пользователем pz_4

Поделиться сообщением


Ссылка на сообщение
  • 0
2 часа назад, MagnuMspec сказал:

Впихнул проверку.

 

GRA_MG05_SMcountDoonce.esp


Всё еще веселее. У нас фикс задвоился вообще. в MQ05Script [SCPT:0001B52E] вынесен такой же блок
 

Спойлер

ScriptName MQ05Script

;Quest script for MQ05
;contains information about associated scripts for MQ05, and general, non-object-specific scripting for quest MQ05


;MQ05 Object Scripts:
;- MQ05FuseBoxScript
;- MQ05FloodControlPumpScript
;- MQ05MainframeControlScript
;- MQ05PipeControlScript
;- MQ05IntercomScript


;Related Scripts:
;- ColonelAutumnScript
;- DoctorLiScript
;- RivetCityGarzaScript
;-MQ05GarzaTriggerWallScript


short doonce
short DadEscort                    ;flag set to 1 if player agrees to go with Dad to Rivet City
short AutumnTrigger
short ConvVar
short LiGreet
short LiFollow
short LiWait
short NoWay20
short DanGun
short LiEnd
short LiGarzaConv
short DadLiConv
short Broadcast
short MutantsKilled                ;incremented as mutants inside PPurity are killed; scientists won't enter until they're all dead 
short DeathScene                    ;flag set on Colonel Autumn's script; used for running death packages on related NPCs
short AutumnMove                ;flag set when moving Autumn to Raven Rock
Short DadMove                    ;flag set if moving dad directly to PPurity
Short LiMove                        ;flag set if moving Dr. Li directly to PPurity
Short AnnaMove                    ;flag set if moving Anna directly to PPurity
Short GarzaMove                    ;flag set if moving Garza directly to PPurity
short NoFighting                    ;flag set when player's ability to fight is removed in stage 75
short GarzaKillPostSit            ;flag set if Garza is killed by the player after his situation has been resolved
short SciMove                        ;flag set when moving Scientists to Project Purity (if player fast travels)
short AllClear                        ;flag set if Scientists are on the way to PPurity but mutants are not all dead
short GateOpen                    ;flag set to 1 when Citadel Gate is opened, used for Li's packages
short CueMusic                    ;flag set to 1 when Enclave invades and we start action music.  set to 0 to cut music off when player exits Taft

short RCBridgeOpened            ; sesom: Bethesda assumed the bridge variables are loaded while the cell isn't. This is wrong sometimes in FO3 and everytime in NV
                                        ;             I added a indicator here (quest script everytime loaded) to check if the bridge was already opened. It replaces the doonce in 
                                        ;             RCExBridge1SCRIPT

float AutumnTimer
float greettimer                    ;timer used to control when Dr. Li greets the player after dad is dead (uses quest delay to pad the time)


;the following vars are for taft tunnel, and the situation that arises with Garza

short GarzaSit

 

;    values:
;    10 - Garza Healed
;    20 - Garza Drugged
;     30 - Garza Left Behind
;    40 - Garza Stays Behind
;    99 - Killed by other
;    100 - Killed by player

 

 

 

Begin GameMode

;>>>Добавлено 07.12.25 Фикс незасчитывающихся убийств суперов
if eval GetStage MQ05 == 20 || GetStage MQ05 == 25

    if eval MQ03.bodyCount < 14
        MQ03.bodyCount = 0
        if eval MQ03Mutant01.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant02.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant03.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant04.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant05.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant06.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant07.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant08.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant09.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant10.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant11.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant12.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant13.GetDead
            MQ03.bodyCount += 1
        endif
        if eval MQ03Mutant14.GetDead
            MQ03.bodyCount += 1
        endif
    endif
endif
;<<<


;If player gets to Project Purity before the scientists, move them to a marker nearby to shorten the wait

    if ( GetStage MQ05 == 20 )
        if ( SciMove == 0 )
            ;If mutants aren't all dead, check for player near exterior marker and move NPCs to a marker down the path
            if ( MQ03.bodycount < 14 )
                Set AllClear to 1
                if ( Player.GetDistance3D MQ05ScientistExteriorWaitMarker < 1000 )
                    if ( MQDadRef.GetDistance3D MQ05ScientistExteriorWaitMarker >= 10000 )
                        MQDadRef.Moveto MQ05ScientistCatchUpMarker
                    endif
                    if ( DoctorLiRef.GetDistance3D MQ05ScientistExteriorWaitMarker >= 10000 )
                        DoctorLiRef.Moveto MQ05ScientistCatchUpMarker
                    endif
                    if ( JaniceKaplinskiRef.GetDistance3D MQ05ScientistExteriorWaitMarker >= 10000 )
                        JaniceKaplinskiRef.Moveto MQ05ScientistCatchUpMarker
                    endif
                    if ( AnnaHoltRef.GetDistance3D MQ05ScientistExteriorWaitMarker >= 10000 )
                        if ( AnnaHoltRef.GetDead == 0 )
                            AnnaholtRef.Moveto MQ05ScientistCatchUpMarker
                        endif
                    endif
                    if ( GarzaRef.GetDistance3D MQ05ScientistExteriorWaitMarker >= 10000 )
                        if ( GarzaRef.GetDead == 0 )
                            GarzaRef.Moveto MQ05ScientistCatchUpMarker
                        endif
                    endif
                endif


        ;If mutants are all dead, move everyone to the outside marker close to the building
            else
                if ( Player.GetInCell PPurity == 1 )
                    if ( MQDadRef.GetInCell PPurity == 0 )
                        if ( DadMove == 0 )
                            MQDadRef.MoveTo MQ05ScientistExteriorWaitMarker
                            set DadMove to 1
                        endif
                    endif
                    if ( DoctorLiRef.GetInCell PPurity == 0 )
                        if ( LiMove == 0 )
                            DoctorLiRef.Moveto MQ05ScientistExteriorWaitMarker
                            set LiMove to 1
                        endif
                    endif
                    if ( AnnaHoltRef.GetInCell PPurity == 0 )
                        if ( AnnaMove == 0 )
                            if ( AnnaHoltRef.GetDead == 0 )
                                AnnaHoltRef.Moveto MQ05ScientistExteriorWaitMarker
                                set AnnaMove to 1
                            endif
                        endif
                    endif
                    if ( GarzaRef.GetInCell PPurity == 0 )
                        if ( GarzaMove == 0 )
                            if ( GarzaRef.GetDead == 0 )
                                GarzaRef.Moveto MQ05ScientistExteriorWaitMarker
                                set GarzaMove to 1
                            endif
                        endif
                    endif
                endif        ;/ player in cell PPurity    

            endif             ;/ bodycount check    

        endif             ;/SciMove == 0
    endif                ;/ getStage MQ05 == 20

;If player has to kill mutants, check for MQ03.Bodycount and update stage when they're all dead.

    if ( GetStage MQ05 == 25 )
        if ( MQ03.BodyCount >= 14 )
            SetStage MQ05 26
            Set MQ05.AllClear to 2
        endif
    endif

;also check for player having killed mutants before talking to Dad and getting Stage 25 update

    if ( GetStage MQ05 == 20 )
        if ( AllClear == 1 )
            if ( MQ03.BodyCount >= 14 )
                SetStage MQ05 26
                Set MQ05.AllClear to 2
            endif
        endif
    endif


        


;If player has left the cell for any reason during stage 75, re-disable fighting when he comes back in

;    if ( GetStage MQ05 == 75 )
;        if ( NoFighting == 2 )
;            if ( Player.GetInCell PPurity01 == 1 )
;                DisablePlayerControls 0 0 1
;                set NoFighting to 1
;            endif
;        endif
;    endif


;When vars are initially set, count down AutumnTimer. When it runs out, move Autumn's ref to Dad
;Note: Rest of this sequence is handled by ColonelAutumnScript, on NPC ColonelAutumn


    if ( MQ05.AutumnTrigger == 1 )
        PPBulkhead01Ref.SetOpenState 0
        set MQ05.AutumnTrigger to 2
        JaniceKaplinskiRef.SetRestrained 1
    endif
    
;Have DoctorLi force-greet the player once dad is dead

    if ( LiGreet == 1 )
        DoctorLiRef.EVP
        set LiGreet to 2
    endif


;if player is a smart-ass and moves away from Li while at the Citadel, set vars as if he'd been there

    if ( LiEnd > 0 )
        if ( Player.GetDistance3D DoctorLiRef > 5000 )
            if ( GateOpen == 0 )
                set GateOpen to 1
                Set MQ05.LiEnd to 6
;                    SetEnemy PlayerFaction EnclaveFaction 1 1 ;Makes the Enclave neutral to the player again.
            endif
        endif
    endif

;Loop to perpetuate action/battle music during Enclave Invasion and Pursuit.

        ; MQ05.cueMusic set to 1 by MQ05EnclaveSceneSCRIPT - to allow appropriate delay after stage 75 is set.

        if cueMusic == 1 && getStage MQ05 < 100                        ; Music has been cued
            playMusic defaultBattle                                            ; calling every frame to ensure it remains queued.
        elseif cueMusic == 1 && getStage MQ05 >= 100                ; stage 100 hit - cut the music
            playMusic defaultExplore
            set cueMusic to 2
        endif

 

End

 


Но что важнее - еще и я не прав был таки.

Таки дело не в обнулении, а в том, что не срабатывает само начисление очков за трупы. Попробовал из консоли толкнуть             MQ03.bodyCount += 1 - оно сработало, в т.ч. и на коде без DoOnce(т.е. я был не прав, обнуления нет) но от убийства мутных - не происходит увеличения.

Попробовал грохнуть дубликат из MQ05Script [SCPT:0001B52E] - ноль эффекта вобщем не срабатывает вся конструкция
        if eval MQ03Mutant0x.GetDead
            MQ03.bodyCount += 1
        endif

Изменено пользователем pz_4

Поделиться сообщением


Ссылка на сообщение
  • 0
38 минут назад, pz_4 сказал:

Таки дело не в обнулении, а в том, что не срабатывает само начисление очков за трупы.

Ну я так думал, что дело в чем-то таком. Почему-то у некоторых этот баг проявляется. Иначе работали бы родные скрипты суперов и не пришлось бы вообще какой-либо фикс делать.

Можешь скинуть сохранение?

 

38 минут назад, pz_4 сказал:


        if eval MQ03Mutant0x.GetDead
            MQ03.bodyCount += 1
        endif

Конкретно что не работает, условие или команда?

Можешь проверить таким кодом:
        if eval MQ03Mutant0x.GetDead
            print "test"
        endif

Изменено пользователем FNVFUN

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, FNVFUN сказал:

Конкретно что не работает, условие или команда?

Пока что не знаю(вручную то команда срабатывает. Если в консоль вбить. Значит условие не срабатывает, но я еще перепроверю пару раз всё), - завтра посижу поэкспериментирую.

 

Изменено пользователем pz_4

Поделиться сообщением


Ссылка на сообщение
  • 0

Всем привет! Если это stage скрипт, то он срабатывает ровно один раз при переходе на соответствующую стадию. Соответственно, если на эту стадию перейти до убийства всех мутантов, то 14 не насчитается никогда. Ну а раз там 0, то похоже переход происходит до убийства хотя бы одного (либо до стадии вообще не дошли). Подобные проверки надо в главный скрипт вставлять, который постоянно крутится.

 

P.S. У меня тоже пока игры нет, т.к. комп недавно поменял, поэтому сам посмотреть не могу.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
  • 0
1 час назад, Вис691 сказал:

Если это stage скрипт, то он срабатывает ровно один раз при переходе на соответствующую стадию.

Спасибо. Вот это очень полезное лично для меня замечание, о котором я если и знал - то забыл благополучно.

Делаем вывод, что нужно курить MQ05Script [SCPT:0001B52E], как основной метод подсчета. А этот в стадии, полагаю, нужен для подсчета если игрок перебьет мутных до квеста.

Поделиться сообщением


Ссылка на сообщение
  • 0

*Обновлено*

Я не так понял, тему разговора, сори)

Изменено пользователем FNVFUN

Поделиться сообщением


Ссылка на сообщение
  • 0

Окей, я долбоеб максимальный. Нашел у себя левый плагин который перезаписывал MQ05Script [SCPT:0001B52E] и руинил обновленный счетчик. Проблемы нет, сам дурак.

Прошу прощения у всех, кого дернул разбираться.

Изменено пользователем pz_4

Поделиться сообщением


Ссылка на сообщение
  • 0

Если эта переменная багуется, то лучше создать другую переменную и ей манипулировать. Баг движка какой-то.

Поделиться сообщением


Ссылка на сообщение
  • 0
8 часов назад, pz_4 сказал:

Нет никакой ошибки, есть криворукий идиот (я) который напрочь забыл, что сделал перезапись скрипта(я забыл, что я использовал именно этот скрипт для личных целей), в которой не было обновленного механизма подсчета, и развел панику.

Т.е. проблемы нет?)

Поделиться сообщением


Ссылка на сообщение
  • 0
4 часа назад, MagnuMspec сказал:

Т.е. проблемы нет?)

Нет. Проблемы нет. Есть кривые руки.

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


×
×
  • Создать...

Важная информация

Мы используем файлы cookie для обеспечения корректной работы сайта. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек. Узнать больше об обработке данных поможет Политика конфиденциальности