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

Sazan's Theme

Вопросы по моддингу Fallout 3 и New Vegas

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

А, ну тут всё понятно. Опять смотрим сюда: 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: твой вариант тоже имеет место быть, но это тот ещё костыль)

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


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

Т.е. я так понимаю, проблема была в том, что в скрипте более 1-го сообщения, но блок ButtonVar не понял, что я имела в виду только первое сообщение, и бесконечно делал проверку на скилы игрока, выводя как результат это же сообщение?

 

Более-менее понятно. Хотя всё равно не очень.) 

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


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

Говоря совсем просто, каждое нажатие на "ОК" было для скрипта аналогично нажатию "Попытаться починить дроида", т.к. индексы этих кнопок равны (и равны 0, как видно по твоему скрину).

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


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

Ну я, в общем, вроде поняла, в чем дело. Но самой и в голову бы не пришло, почему так, а не иначе.)

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


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

Здарова. Такая ерунда - в списке FOMM 1 ESM не выделен, а 1 ESP выделен. Что это значит?

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


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

Народ, Projectile Count какое максимальное значение?  Возможно ли у дробовика выставить значение не 7, а 10?

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


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

Ребят, у меня вопрос по поводу радио. Из источников на пустоши и в ячейках оно играет, а в пип-бое - нет. Почему так происходит?

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


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

Такой вопрос - есть ли какой-то способ заставить фолловера успокоиться и перестать атаковать врага, когда на враге использована команда stopcombat player? Ковыряюсь с харшест старт, пытаясь довести его до ума, и наличие фолловера получается непреодолимым препятствием, в 100% случаев ломающим мод (продолжает лупасить, когда не надо, из-за чего весь скрипт и ивент летит в днище).

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


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

Может быть кинуть врага в Фракцию друзей ГГ? Не знаю, есть ли такая, но вероятнее всего это как-то реализуемо.

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


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

Может быть кинуть врага в Фракцию друзей ГГ? Не знаю, есть ли такая, но вероятнее всего это как-то реализуемо.

 

Фиг знает, разве что фракция игрока. Можно попробовать, конечно.) Но вряд-ли сработает - изначально враг к ГГ нейстрален, и фракция его тоже. А фолловер все равно проболжает мутузить и уничтожает мод как таковой.

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


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

Если не сработает, то напишу через ЖИП. Но только не раньше, чем завтра (а мб и вообще на выходных). Больно загружена у меня зачётная неделя, а скрипты с массивами за 5 минут не пишутся.

  • Нравится 1

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


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

Так такая фишка нужна в конкретном случае или что бы работало со всеми игровыми случаями со StartCombat?

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


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

Так такая фишка нужна в конкретном случае или что бы работало со всеми игровыми случаями со StartCombat?

 

Нет, именно в одном случае, но если это возможно - с любым спутником.

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


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

 

 

Нет, именно в одном случае, но если это возможно - с любым спутником.

Так а зачем тогда с расширителями скриптов мудохаться. Во время старта команды переводим фолловера в левую фракцию, что бы не атаковал, по окончанию боя возвращаем фракцию. Так не пойдет?

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


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

Тебе всё равно нужен ID компаньона. В любом случае.

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


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

Выкладываю код скрипта, который напрочь отказывается работать без переменной 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. Мопед не мой, так что на табулирование блоков не ругаться. Я итак их тут частично табулировала в местах, где ковырялась.) В оригинале всё шло тупой простыней. :crazy:

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


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

Снова всем драсте. У меня тут затуп - мне нужно добавить в окошко айдл-анимаций новую категорию (топ-левел, верхнюю). Как это сделать? Вот такую:

 

b6982bb21a.png

 

 

ГЕКК не дает прямо там ничего сделать, только "insert child". Вставляя чайлд - я не могу вытащить его на самый верхний уровень. Как это делается?

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


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

Всем еще раз привет.)

 

Возможно ли вообще в этой игре сделать так, чтобы фолловер стал враждебным к игроку? Перепробовала все известные мне варианты: добавляла ему фракцию, выставляя ее враждебной игроку, выставляла максимальную агрессию, делала startcombat, удаляла его как из фракции игрока, так и из фракции DontTazeMebro - результат всегда абсолютно нулевой. НПС так и остается нейтральным к игроку.

 

Как решать такую проблему?

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


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

Дело не во фракции, а в функция IgnoreCrime. Снимать нужно ее. Забыл, это же Вегас.

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


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

Дело не во фракции, а в функциях Restrained и IgnoreCrime. Снимать нужно их. Забыл, это же Вегас.

 

Ага, а как это сделать?)

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


Ссылка на сообщение
Ага, а как это сделать?)

При взятие в напарники, ты в скриптах прописываешь IgnoreCrime 1, при увольнении IgnoreCrime 0. Это функция и отвечает за это. Если помнишь напарники Вегаса полностью игнорируют агрессию игрока. В Fallout 3 такой функции нет, они игнорируют только три выстрела.

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


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

При взятие в напарники, ты в скриптах прописываешь IgnoreCrime 1, при увольнении IgnoreCrime 0. Это функция и отвечает за это. Если помнишь напарники Вегаса полностью игнорируют агрессию игрока. В Fallout 3 такой функции нет, они игнорируют только три выстрела.

 

Строка IgnoreCrime 0 всё равно ничего не дала. НПС после прощания стоит, как и стоял.

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


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

 

 

А ты из дружественной фракции выгнала и добавила враждебную, или тупо IgnoreCrime 0 написала? Еще AI надо перезагрузить.

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


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

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

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

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

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

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

Войти

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

Войти


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