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

Sazan's Theme

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

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

Вот что выдало:

 

 

 

 

eeac223f70.jpg

 

 

 

 

 

Через scof тупо не успеваю словить, оно мгновенно в момент прогрузки игры уже уплывает далеко вверх.

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


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

Цикл под этой строкой (с дампом) замени на 

If iArraySize != -1
  foreach arrEntry <- arrActiveTeammates
    let rActor := arrEntry["value"]
    if eval !(rActor)
      continue
    endif
    if eval GetType rActor == 0
      continue
    endif
    if eval !(rActor.IsActor)
      continue
    endif
    let iIndex := Ar_Find rActor alxUDCompanions.arrActiveCompanions
    if eval iIndex != Ar_BadNumericIndex
      Ar_Erase alxUDCompanions.arrActiveCompanions iIndex
    endif
    let iIndex := Ar_Find rActor alxUDCompanions.arrFormerCompanions
    if eval iIndex != Ar_BadNumericIndex
      Ar_Erase alxUDCompanions.arrFormerCompanions iIndex
    endif
  loop
Endif

Сейчас бы пытаться идти по массиву, которого не существует  :facepalm:

  • Нравится 1

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


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

Заменила - да, вроде как пошло гладко.

 

 

 

 

55033f5525.png

 

 

 

 

Доходит до 5 блока, потом через какое-то время снова прогоняет до 5-го. Я так понимаю, остальные блоки уже работают с фолловером, которого пока нет.

 

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

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


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

 

 

Я так понимаю, остальные блоки уже работают с фолловером, которого пока нет.
 

Остальные блоки работают в дебаг режиме. Не знаю, только для разрабов мода он или нет, но это не важно.

Не за что. На самом деле, нам крупно повезло, что просто массив не существует. Я думал тут что-то серьёзнее.

  • Нравится 1

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


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

 

Остальные блоки работают в дебаг режиме. Не знаю, только для разрабов мода он или нет, но это не важно.

Не за что. На самом деле, нам крупно повезло, что просто массив не существует. Я думал тут что-то серьёзнее.

 

 

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

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


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

Я тут опять с тупыми вопросами. Все больше понимаю, что код - уж точно не мое. х_х

 

Есть скрипт на раздевание игрока и одевание нуд-суита, собсно из базы со. Хочу сделать так, чтобы при условии, что целевой актер - игрок, одевался другой нудсуит.

 

Скрипт такой:

 

 

 

scn SexoutNGUndressSpellSCRIPT

int nFlag
int nStage
int nLastStage
int bRaping
int bRaped
int nGSUndress
int nGSRedress
int idx
int bHadClothes
int HasNudeAlready
ref actor
ref item
int remItem
float fDelay
array_var element
array_var items
int nActId
ref MaleBodySuit
int bUnequippedClothes

Begin ScriptEffectUpdate
  ; delay

  if (0 == nActId)
    let nActID := NX_GetEVFl "Sexout:Started::actid"
  endif

  if (0 == actor)
    let actor := GetSelf
  endif

  let fDelay -= ScriptEffectElapsedSeconds
  if fDelay > 0
    Return
  endif

  if nStage != nLastStage
    DebugPrint "SNGUndress (%g): %n (%i) undress stage transition from %g -> %g" nActID actor actor nLastStage nStage
    let nLastStage := nStage
  endif

  if 2000 == nStage
    ; Waiting on dispel

  elseif 1000 == nStage
    let nStage := 2000
    let element := ar_Null
    let items  := ar_Null

    ; Clear flags
    call fnSexoutSetFlag actor "Undress" 0 0 1
    call fnSexoutSetFlag actor "Undressed" 0 0 1
    Dispel SexoutNGUndress

  elseif 200 == nStage
    ; Redressing
    let nStage := 1000

    ; Remove nude bodysuit if any - fnSexoutActorCleanup does this, but its too slow to hit
    if MaleBodySuit
        actor.RemoveItem MaleBodySuit, 1, 1
    endif
    ; Redress if desired
    if 2 == nGSRedress || (1 == nGSRedress && 0 == bRaped)
      foreach element <- items
        if eval(element["key"] != 6) ; skip pipboy
          let item := element["value"]
          DebugPrint "SNGUndress (%g): Equipping '%n' on %n (%i)" nActID item actor actor
          actor.EquipItem item 0 1
        endif
      loop
    else
      ; Fix auto-reequipping
      let item := actor.GetEqObj 2
      if item && bUnequippedClothes
        actor.UnequipItem item, 0, 1
      endif
    endif

  elseif 110 == nStage
    ; Waiting on main spell to indicate naked time is over
    let nFlag   := call fnSexoutGetFlag actor "Undress" 1

    if nFlag == 0
      ; wait
      let fDelay := 0.1
    elseif 1 == nFlag
      ; redress
      let nStage := 200
    elseif 2 == nFlag
      ; end without redressing
      let nStage := 1000
      ; Fix auto-reequipping
      let item := actor.GetEqObj 2
      if item && bUnequippedClothes
        actor.UnequipItem item, 0, 1
      endif
    else
      DebugPrint "SNGUndress (%g): Unknown undress flag %g on %n (%i)!" nActID nFlag actor actor
      let fDelay := 1
    endif

  elseif 100 == nStage
    ; Set flag to trigger main script to continue
    call fnSexoutSetFlag actor "Undressed" 1 0 1
    let nStage := 110

  elseif 20 == nStage
    ; Add a bodysuit for males
    let nStage := 100


	if actor == PlayerRef
        let MaleBodySuit := SexoutNudePlayer
    else
        let MaleBodySuit := SexoutNude
    actor.AddItem MaleBodySuit, 1, 1
    actor.EquipItem MaleBodySuit, 1, 1
	endif



    let fDelay := 0.2

  elseif 10 == nStage
    ; Backstop
    let nStage := 1000

    foreach element <- items
      if eval(element["key"] != 6)
        ; skip pipboy
        let item := element["value"]
        DebugPrint "SNGUndress (%g): Removing '%n' from %n (%i)" nActID item actor actor
        actor.UnequipItem item 0 1
      endif
    loop

    if (actor.GetIsSex Male) && (0 == HasNudeAlready) && (2 == SexoutNG.iMaleBody)
      let nStage := 20
    else
      let nStage := 100
    endif
    let fDelay := 0.2

  elseif 0 == nStage
    ; Backstop
    let nStage  := 1000

    if 0 == actor.GetIsCreature
      let nStage  := 10
      let actor   := GetSelf
      let items   := Ar_Construct "map"
      let bRaping := call fnSexoutGetFlag actor "Raping" 1
      let bRaped  := call fnSexoutGetFlag actor "Raped" 1

      ; Get undress/redress lettings
      if bRaping || bRaped
        if actor == playerREF
          let nGSUndress := SexoutNG.nPNUndress
          let nGSRedress := SexoutNG.nPRedress
        elseif actor.GetIsSex Male
          let nGSUndress := SexoutNG.nMNUndress
          let nGSRedress := SexoutNG.nMRedress
        else
          let nGSUndress := SexoutNG.nFNUndress
          let nGSRedress := SexoutNG.nFRedress
        endif
      else
        if actor == playerREF
          let nGSUndress := SexoutNG.nPCUndress
          let nGSRedress := SexoutNG.nPRedress
        elseif actor.GetIsSex Male
          let nGSUndress := SexoutNG.nMCUndress
          let nGSRedress := SexoutNG.nMRedress
        else
          let nGSUndress := SexoutNG.nFCUndress
          let nGSRedress := SexoutNG.nFRedress
        endif
      endif

      ; Store item ids.  These are checked against lists and rules and zeroed
      ; out if they appear there.  If they are not zero when checks are done,
      ; they are removed to inventory.
      while (idx < 19)
        let idx += 1
        if (idx != 6) ; skip pipboy
          ;DebugPrint "SNGUndress (%g): Checking index %g on %n (%i)" nActID idx actor actor
          let item := actor.GetEquippedObject idx
          if (item)
            DebugPrint "SNGUndress (%g): Found %n (%i) on %n (%i)" nActID item item actor actor
            let remItem := call fnSexoutUndressItem actor item
            if eval(Ar_BadNumericIndex == (ar_Find item items))
              ; item not currently in list, do we undress it?
              if -1 == ListGetFormIndex SexoutNGNudeBodies item
                if (idx == 2)
                  let bHadClothes := 1
                endif

                ; not in nude bodies list
                if ((3 != nGSUndress) && (1 != nGSUndress || 1 == remItem))
                  ; undress is always, or undress is check-list and item not in lists
                  DebugPrint "SNGUndress (%g): Added %n (%i) on %n (%i)" nActID item item actor actor
                  let items[idx] := item
                  if idx == 2
                    let bUnequippedClothes := 1
                  endif
                endif
              else
                let HasNudeAlready := 1
              endif
            endif
          endif
        endif
      loop

      let nStage := 10
    endif
  endif
End

 

 

 

Мной тут добавлено только это:

 

    if actor == PlayerRef
let MaleBodySuit := SexoutNudePlayer
   else
let MaleBodySuit := SexoutNude
actor.AddItem MaleBodySuit, 1, 1
actor.EquipItem MaleBodySuit, 1, 1
   endif

 

В оригинале на месте этого условия было другое (там условие на то, из какого мода были анимации), но оно тоже у меня в игре не работало. Что может быть не так? Почему такое простое условие просто не работает?

 

Примечательно то, что выглядит это так: нуд-суит работает для НПС, но вообще не работает для игрока. Не одевается и всё тут. Т.е. как-то это условие вроде соблюдается, но не так.

 

Разумеется, этот самый SexoutNudePlayer я сделала, модельку нужныю, отличную от оригинальной, прописала.

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


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

UPD чорд. Кажись это таки тот самый затуп с блоками и ифами. Оно вообще добавляло актеру суит ТОЛЬКО при втором условии. :facepalm:

 

Счас посмотрю в игре.

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


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

В общем, сама спросила, сама поняла, где лоханулась, сама исправила. :crazy: Смотрите внимательно на блоки if, в общем. :D

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


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

Всем привет. Мне нужно добавить много предметов в form id списки, но добавлять по одному предмету очень долго, есть функция или скрипт в FNVEdit, чтобы добавлять предметы в списки автоматом?

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


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

Насчёт FNVEdit не скажу, но в GECK можно выделить все нужные предметы и перенести их в Form List за один раз.

  • Нравится 1

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


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

 

 

Насчёт FNVEdit не скажу, но в GECK можно выделить все нужные предметы и перенести их в Form List за один раз.

Боже... как?!

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


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

Насчёт FNVEdit не скажу, но в GECK можно выделить все нужные предметы и перенести их в Form List за один раз.

Спасибо большое, уйму времени сэкономил мне)

  • Нравится 1

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


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

Боже... как?!

Я так понял, ты по старинке действуешь, перетаскиваешь предметы по одному?)

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


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

Да я редактирую  мод  underground hideout под себя, хотел добавить в список сортировщика предметы из nvinteriors project

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


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

Ребят. Проблема такая. У пары стволов пули летят выше прицела на дальних расстояниях (целишься в туловище, сносишь в голову). Вблизи все норм. Хочу исправить, чтобы пули ложились точно по мушке. В Гэкке можно это поправить, или саму модель надо править?

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


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

Ребят. Проблема такая. У пары стволов пули летят выше прицела на дальних расстояниях (целишься в туловище, сносишь в голову). Вблизи все норм. Хочу исправить, чтобы пули ложились точно по мушке. В Гэкке можно это поправить, или саму модель надо править?

http://tiarum.com/wiki/Fallout3_GECK:Weapons

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


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

Если речь идет о радиоприемнике, то они находятся во вкладке Activator.

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


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

Если речь идет о радиоприемнике, то они находятся во вкладке Activator.

Нужны и в пип бой и так, разберусь. Спасибо за ресурсы кстати

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


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

Опять нужна помощь по скриптам. Ну не могу я в код.)

 

Итак, я сделала активатор, при юзании которого вылазит мессадж. Попыталась прицепить скрипт так, чтобы при нажатии первой кнопки шла проверка на скилы ГГ, и если их недостаточно, отображался мессадж а-ля "ты пытался, но не смог" и окно закрывалось, а при успешной проверке шел скрипт на квест, дисейбл-инейбл и т.д. На картинке видно, что я пыталась сделать:

 

324903a9af.png

 

 

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

 

Что я опять делаю не так?

 

 

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

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


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

UPD да, я заметила, что допустила ошибку с переменными DoOnce, но исправление не помогло.

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


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

UPD Вроде кое-как заставила работать. Скрипт вышел такой:

 

 

Наверняка костылявый, но лучше не умею.

 

 

 

 

scn EROSBrokenDroidScript

short ButtonVar
short DoOnceMess


Begin OnActivate

ShowMessage EROSMess01
Let DoOnceMess := 0
SetObjectiveDisplayed EROSQuest01 10 1
SetStage EROSQuest01 10

End


Begin GameMode

	set ButtonVar to GetButtonPressed
	if (ButtonVar == 0)
	   if (PlayerRef.GetActorValue Repair >=50 && PlayerRef.GetActorValue Science >=65 && DoOnceMess == 0)
		   ShowMessage EROSMess02
		   EROSRef.Enable
		   EROSBrokenDroidRef.Disable
		   SetStage EROSQuest01 15
		   Let DoOnceMess := 1
	   else
		If DoOnceMess == 0
		   ShowMessage EROSMess02Fail
		   Let DoOnceMess := 1
		endif
	   endif
	endif

	If (buttonVar == 1)
		;donothing
	endif

End

 

 

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


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

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

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

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

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

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

Войти

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

Войти


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