Вис691 663 Опубликовано 5 декабря, 2017 А, ну тут всё понятно. Опять смотрим сюда: http://geck.bethsoft.com/index.php?title=GetButtonPressed Читаем The first time this is called after a ShowMessage button has been pressed, it returns the index of the button that was pressed, starting at zero. At all other times it returns -1. Теперь смотрим на скрипт. Что у нас происходит? Проверка на buttonVar, хорошо. Первый раз мы что-то нажали, сигнал прошёл (переменная стала = 0), выскочил следующий мессадж. Мы жмём окей, игра закрывает окно сообщения, т.е. выходим из менюшек (под менюшками я понимаю пип-бой, контейнеры, мессаджи и т.д.). Получается мы вновь в блоке GameMode. Что происходит теперь? Скрипт вновь упирается в set buttonVar to GetButtonPressed. Что последний раз было нажато? "ОК" из второго мессаджа. Так, и каков же индекс у этой кнопки? Если посмотреть на структуру кнопок в любом мессаге, видно что кнопки нумеруются с 0. Т.е. наш buttonVar вновь равен 0. Ну а там вновь вызывается сообщение и так до бесконечности. Вот тебе и проблема.Как решить? Ну, несложно догадаться вновь заглянуть на Вики и признать полезность переменной awaitingInput. Если сделать по подобию, то всё сработает. Грубо говоря, добавляешь проверку в самом начале блока и в нужное место (после вызова нового мессаджа, например) пихаешь Let awaitingInput := 0 (ну или через set, как тебе больше нравится). UPD: твой вариант тоже имеет место быть, но это тот ещё костыль) Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 5 декабря, 2017 Т.е. я так понимаю, проблема была в том, что в скрипте более 1-го сообщения, но блок ButtonVar не понял, что я имела в виду только первое сообщение, и бесконечно делал проверку на скилы игрока, выводя как результат это же сообщение? Более-менее понятно. Хотя всё равно не очень.) Поделиться сообщением Ссылка на сообщение
Вис691 663 Опубликовано 5 декабря, 2017 Говоря совсем просто, каждое нажатие на "ОК" было для скрипта аналогично нажатию "Попытаться починить дроида", т.к. индексы этих кнопок равны (и равны 0, как видно по твоему скрину). Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 5 декабря, 2017 Ну я, в общем, вроде поняла, в чем дело. Но самой и в голову бы не пришло, почему так, а не иначе.) Поделиться сообщением Ссылка на сообщение
Вис691 663 Опубликовано 5 декабря, 2017 На этот случай я тут и сижу 1 Поделиться сообщением Ссылка на сообщение
PAINKILLER 8 Опубликовано 6 декабря, 2017 Здарова. Такая ерунда - в списке FOMM 1 ESM не выделен, а 1 ESP выделен. Что это значит? Поделиться сообщением Ссылка на сообщение
bildyaev 1 Опубликовано 12 декабря, 2017 Народ, Projectile Count какое максимальное значение? Возможно ли у дробовика выставить значение не 7, а 10? Поделиться сообщением Ссылка на сообщение
Old Vault Boy 560 Опубликовано 13 декабря, 2017 Ребят, у меня вопрос по поводу радио. Из источников на пустоши и в ячейках оно играет, а в пип-бое - нет. Почему так происходит? Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 21 декабря, 2017 Такой вопрос - есть ли какой-то способ заставить фолловера успокоиться и перестать атаковать врага, когда на враге использована команда stopcombat player? Ковыряюсь с харшест старт, пытаясь довести его до ума, и наличие фолловера получается непреодолимым препятствием, в 100% случаев ломающим мод (продолжает лупасить, когда не надо, из-за чего весь скрипт и ивент летит в днище). Поделиться сообщением Ссылка на сообщение
Вис691 663 Опубликовано 21 декабря, 2017 Может быть кинуть врага в Фракцию друзей ГГ? Не знаю, есть ли такая, но вероятнее всего это как-то реализуемо. Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 21 декабря, 2017 Может быть кинуть врага в Фракцию друзей ГГ? Не знаю, есть ли такая, но вероятнее всего это как-то реализуемо. Фиг знает, разве что фракция игрока. Можно попробовать, конечно.) Но вряд-ли сработает - изначально враг к ГГ нейстрален, и фракция его тоже. А фолловер все равно проболжает мутузить и уничтожает мод как таковой. Поделиться сообщением Ссылка на сообщение
Вис691 663 Опубликовано 21 декабря, 2017 Если не сработает, то напишу через ЖИП. Но только не раньше, чем завтра (а мб и вообще на выходных). Больно загружена у меня зачётная неделя, а скрипты с массивами за 5 минут не пишутся. 1 Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 21 декабря, 2017 Так такая фишка нужна в конкретном случае или что бы работало со всеми игровыми случаями со StartCombat? Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 21 декабря, 2017 Так такая фишка нужна в конкретном случае или что бы работало со всеми игровыми случаями со StartCombat? Нет, именно в одном случае, но если это возможно - с любым спутником. Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 21 декабря, 2017 Нет, именно в одном случае, но если это возможно - с любым спутником. Так а зачем тогда с расширителями скриптов мудохаться. Во время старта команды переводим фолловера в левую фракцию, что бы не атаковал, по окончанию боя возвращаем фракцию. Так не пойдет? Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 21 декабря, 2017 Ааа, StopCombat, а не StartCombat! Поделиться сообщением Ссылка на сообщение
Вис691 663 Опубликовано 21 декабря, 2017 Тебе всё равно нужен ID компаньона. В любом случае. Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 21 декабря, 2017 Выкладываю код скрипта, который напрочь отказывается работать без переменной fatique из режима хардкор. Я заменяла ее на процент хп ГГ - блок отрабатывал, но только частично - работала смена одежды ГГ и окончание боя. Пакеты неписей просто не срабатывали как таковые. Проблемный блок - там, где условие if getstage DCCAmbush == 20 && player.getav fatigue scn DCCAmbushScript int TempInteger int iButtonPressed int iMenuUp float fTimer short sAmbushSubmission ; 10 from dialogue choices, 15 from messagebox choices short sEscorting short sSlaveStatus short sRaidersReturn short sStopQuest short DogsStarted begin gamemode ;;;; ;; cleanup for quest over ;;;; if sStopQuest == 1 set sRaidersReturn to 1 DCCAmbushRaider1REF.setrestrained 0 DCCAmbushRaider2REF.setrestrained 0 DCCAmbushRaider1REF.addscriptpackage DCCSandboxMillPackage DCCAmbushRaider2REF.addscriptpackage DCCSandboxRaidShackPackage DCCAmbushRaider3REF.addscriptpackage DCCSandboxMillPackage DCCAmbushRaider4REF.addscriptpackage DCCSandboxSchoolPackage DCCAmbushDog1REF.addscriptpackage DCCSandboxSchoolDogPackage DCCAmbushDog1REF.addscriptpackage DCCSandboxSchoolDogPackage if DCCAmbushDog1REF.getdead == 0 && DCCAmbushDog1REF.isincombat == 0 DCCAmbushDog1REF.moveto DCCDogsMarkerREF endif if DCCAmbushDog2REF.getdead == 0 && DCCAmbushDog2REF.isincombat == 0 DCCAmbushDog2REF.moveto DCCDogsMarkerREF endif DCCAmbushRaider1REF.setav aggression 2 DCCAmbushRaider2REF.setav aggression 2 DCCAmbushRaider3REF.setav aggression 2 DCCAmbushRaider4REF.setav aggression 2 stopquest DCCAmbush endif ;;;; ;;in case player avoids the initial greeting ;;;; if getstage DCCAmbush == 10 && player.getdistance DCCAmbushRaider1REF > 800 DCCAmbushRaider1REF.addtofaction RaiderFaction 1 DCCAmbushRaider2REF.addtofaction RaiderFaction 1 DCCAmbushRaider3REF.addtofaction RaiderFaction 1 DCCAmbushRaider4REF.addtofaction RaiderFaction 1 DCCAmbushDog1REF.addtofaction RaiderFaction 1 DCCAmbushDog2REF.addtofaction RaiderFaction 1 DCCAmbushRaider1REF.startcombat player DCCAmbushRaider2REF.startcombat player DCCAmbushRaider3REF.startcombat player DCCAmbushRaider4REF.startcombat player DCCAmbushDog1REF.startcombat player DCCAmbushDog2REF.startcombat player set sstopquest to 1 endif ;;;; ;;handles whether player is following raider1 while setting up the dogrun ;;;; if getstage DCCAmbush == 19 && player.getdistance DCCAmbushRaider1REF > 600 DCCAmbushRaider1REF.addtofaction RaiderFaction 1 DCCAmbushRaider2REF.addtofaction RaiderFaction 1 DCCAmbushRaider3REF.addtofaction RaiderFaction 1 DCCAmbushRaider4REF.addtofaction RaiderFaction 1 DCCAmbushDog1REF.addtofaction RaiderFaction 1 DCCAmbushDog2REF.addtofaction RaiderFaction 1 DCCAmbushRaider1REF.startcombat player DCCAmbushRaider2REF.startcombat player DCCAmbushRaider3REF.startcombat player DCCAmbushRaider4REF.startcombat player DCCAmbushDog1REF.startcombat player DCCAmbushDog2REF.startcombat player set sstopquest to 1 endif ;;;; ;; handles the dogrun itself ;;;; if getstage DCCAmbush == 20 && player.getdistance DCCAmbushRaider1REF > 600 && TempInteger != 50 && DogsStarted == 0 DCCAmbushRaider1REF.setrestrained 1 DCCAmbushRaider2REF.setrestrained 1 dccAmbushDog1REF.playsound NPCDogBark DCCAmbushDog1REF.startcombat player DCCAmbushDog2REF.startcombat player Let DogsStarted := 1 endif if getstage DCCAmbush == 20 && player.getav fatigue < 0 && TempInteger !=50 ListAddForm SexoutNGSafeClothesM DCCVaultSuit DCCAmbushRaider1REF.setrestrained 0 DCCAmbushRaider2REF.setrestrained 0 DCCAmbushRaider1REF.addscriptpackage DCCDogRunRaiderCatchPCK DCCAmbushRaider2REF.addscriptpackage DCCDogRunRaiderCatchPCK DCCAmbushRaider3REF.addscriptpackage DCCDogRunRaiderCatchPCK DCCAmbushRaider4REF.addscriptpackage DCCDogRunRaiderTalkPCK DCCAmbushDog1REF.addscriptpackage DCCDogRunDogGuardPCK DCCAmbushDog2REF.addscriptpackage DCCDogRunDogGuardPCK DCCAmbushDog1REF.stopcombat player DCCAmbushDog2REF.stopcombat player if player.getequipped Vaultsuit101 player.removeitem VaultSuit101 1 player.additemhealthpercent DCCVaultSuit 1 0.05 1 player.equipitem DCCVaultSuit 0 1 set TempInteger to 50 ;Let DogsStarted := 2 endif endif if getstage DCCAmbush == 20 && player.getav fatigue < 10 && TempInteger == 50 player.restoreav fatigue 25 DCCAmbushDog2REF.playsound NPCDogGrowl endif ;;;;; ;;player escaped to megaton, quest over ;;;;; if getstage DCCAmbush == 20 && player.getincell Megaton set sStopQuest to 1 endif ;killed dogs If DCCAmbushDog1REF.GetDead && DCCAmbushDog2REF.GetDead EnablePlayerControls DCCAmbushRaider1REF.addtofaction RaiderFaction 1 DCCAmbushRaider2REF.addtofaction RaiderFaction 1 DCCAmbushRaider3REF.addtofaction RaiderFaction 1 DCCAmbushRaider4REF.addtofaction RaiderFaction 1 DCCAmbushDog1REF.addtofaction RaiderFaction 1 DCCAmbushDog2REF.addtofaction RaiderFaction 1 DCCAmbushRaider1REF.startcombat player DCCAmbushRaider2REF.startcombat player DCCAmbushRaider3REF.startcombat player DCCAmbushRaider4REF.startcombat player DCCAmbushDog1REF.startcombat player DCCAmbushDog2REF.startcombat player set sstopquest to 1 endif ;run far far away if getstage DCCAmbush == 20 && player.getdistance DCCAmbushRaider1REF > 15000 && TempInteger != 50 DCCAmbushRaider1REF.addtofaction RaiderFaction 1 DCCAmbushRaider2REF.addtofaction RaiderFaction 1 DCCAmbushRaider3REF.addtofaction RaiderFaction 1 DCCAmbushRaider4REF.addtofaction RaiderFaction 1 DCCAmbushDog1REF.addtofaction RaiderFaction 1 DCCAmbushDog2REF.addtofaction RaiderFaction 1 DCCAmbushRaider1REF.startcombat player DCCAmbushRaider2REF.startcombat player DCCAmbushRaider3REF.startcombat player DCCAmbushRaider4REF.startcombat player DCCAmbushDog1REF.startcombat player DCCAmbushDog2REF.startcombat player set sstopquest to 1 endif if getstage DCCAmbush == 30 && player.getav fatigue < 0 && player.getav endurancecondition < 1 DCCAmbushRaider1REF.stopcombat player DCCAmbushRaider2REF.stopcombat player DCCAmbushRaider3REF.stopcombat player DCCAmbushRaider4REF.stopcombat player DCCAmbushDog1REF.stopcombat player DCCAmbushDog2REF.stopcombat player imod FadeToBlack9sISFX set fTimer to getsecondspassed set sstopquest to 5 endif if sstopquest == 5 set fTimer to fTimer + getsecondspassed if fTimer > 3 DCCAmbushRaider1REF.setrestrained 0 DCCAmbushRaider2REF.setrestrained 0 DCCAmbushRaider1REF.removeitem DCCWeapBatNPC 1 DCCAmbushRaider2REF.removeitem DCCWeapPipeNPC 1 DCCAmbushRaider3REF.removeitem DCCWeapIronNPC 1 DCCAmbushRaider4REF.removeitem DCCWeapBatonNPC 1 DCCAmbushRaiderStash1REF.removeallitems DCCAmbushRaider1REF DCCAmbushRaiderStash2REF.removeallitems DCCAmbushRaider2REF DCCAmbushRaiderStash3REF.removeallitems DCCAmbushRaider3REF DCCAmbushRaiderStash4REF.removeallitems DCCAmbushRaider4REF if DCCAmbushRaider1REF.getitemcount OutfitTunnelSnake01 > 0 DCCAmbushRaider1REF.removeitem ArmorRaider01 1 endif DCCAmbushRaider1REF.addscriptpackage DCCSandboxMillPackage DCCAmbushRaider2REF.addscriptpackage DCCSandboxRaidShackPackage DCCAmbushRaider3REF.addscriptpackage DCCSandboxMillPackage DCCAmbushRaider4REF.addscriptpackage DCCSandboxSchoolPackage DCCAmbushDog1REF.addscriptpackage DCCSandboxSchoolDogPackage DCCAmbushDog2REF.addscriptpackage DCCSandboxSchoolDogPackage DCCAmbushRaider1REF.addtofaction RaiderFaction 1 DCCAmbushRaider2REF.addtofaction RaiderFaction 1 DCCAmbushRaider3REF.addtofaction RaiderFaction 1 DCCAmbushRaider4REF.addtofaction RaiderFaction 1 DCCAmbushDog1REF.addtofaction RaiderFaction 1 DCCAmbushDog2REF.addtofaction RaiderFaction 1 DCCAmbushRaider1REF.moveto xmrkPatronWander DCCAmbushRaider2REF.moveto DCCRaidShackREF DCCAmbushRaider3REF.moveto xmrkPatronWander DCCAmbushRaider4REF.moveto DCCSchoolREF DCCAmbushDog1REF.moveto DCCDogsMarkerREF DCCAmbushDog2REF.moveto DCCDogsMarkerREF DCCAmbushRaider1REF.setav aggression 2 DCCAmbushRaider2REF.setav aggression 2 DCCAmbushRaider3REF.setav aggression 2 DCCAmbushRaider4REF.setav aggression 2 player.moveto DCCPlayerDumpREF SET Sstopquest to 6 endif endif if sstopquest == 6 stopquest DCCAmbush endif end P.S. Мопед не мой, так что на табулирование блоков не ругаться. Я итак их тут частично табулировала в местах, где ковырялась.) В оригинале всё шло тупой простыней. Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 29 декабря, 2017 Снова всем драсте. У меня тут затуп - мне нужно добавить в окошко айдл-анимаций новую категорию (топ-левел, верхнюю). Как это сделать? Вот такую: ГЕКК не дает прямо там ничего сделать, только "insert child". Вставляя чайлд - я не могу вытащить его на самый верхний уровень. Как это делается? Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 9 января, 2018 Всем еще раз привет.) Возможно ли вообще в этой игре сделать так, чтобы фолловер стал враждебным к игроку? Перепробовала все известные мне варианты: добавляла ему фракцию, выставляя ее враждебной игроку, выставляла максимальную агрессию, делала startcombat, удаляла его как из фракции игрока, так и из фракции DontTazeMebro - результат всегда абсолютно нулевой. НПС так и остается нейтральным к игроку. Как решать такую проблему? Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 9 января, 2018 Дело не во фракции, а в функция IgnoreCrime. Снимать нужно ее. Забыл, это же Вегас. Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 9 января, 2018 Дело не во фракции, а в функциях Restrained и IgnoreCrime. Снимать нужно их. Забыл, это же Вегас. Ага, а как это сделать?) Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 9 января, 2018 Ага, а как это сделать?) При взятие в напарники, ты в скриптах прописываешь IgnoreCrime 1, при увольнении IgnoreCrime 0. Это функция и отвечает за это. Если помнишь напарники Вегаса полностью игнорируют агрессию игрока. В Fallout 3 такой функции нет, они игнорируют только три выстрела. Поделиться сообщением Ссылка на сообщение
Shadd Ashborn 1 719 Опубликовано 9 января, 2018 При взятие в напарники, ты в скриптах прописываешь IgnoreCrime 1, при увольнении IgnoreCrime 0. Это функция и отвечает за это. Если помнишь напарники Вегаса полностью игнорируют агрессию игрока. В Fallout 3 такой функции нет, они игнорируют только три выстрела. Строка IgnoreCrime 0 всё равно ничего не дала. НПС после прощания стоит, как и стоял. Поделиться сообщением Ссылка на сообщение
Паха007 545 Опубликовано 9 января, 2018 А ты из дружественной фракции выгнала и добавила враждебную, или тупо IgnoreCrime 0 написала? Еще AI надо перезагрузить. Поделиться сообщением Ссылка на сообщение