Вверх Вниз


Модератор форума: КсюXa, ApeX  
Форум » Fallout 3 » Мастерская » Помощь по моддингу (Помощь в нелегком модмейкерском деле)
Помощь по моддингу
КсюXa  Offline Сообщение №1 написано: 09 Июля 2010 в 22:51


Гид по Мастерской


1142


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

Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
4STOP97  Offline Сообщение №1561 написано: 10 Августа 2015 в 17:59


Обращённый


82
Цитата Veldion ()
Поэтому решение твоей проблемы только одно: заменить указанную анимацию на более адекватную - такую где подброс ствола происходит после того, как пуля уже попала в цель (или вообще без подброса) и пристрелять прицел по новой.
Я уже пробовал данный метод раньше - и действительно, проблема исчезала. Но вместе с ней исчезало прицеливание под IronSight, очень классное, кстати...

Ivan_Rozhkov  Offline Сообщение №1562 написано: 13 Августа 2015 в 07:05 | Отредактировано: Ivan_Rozhkov - Четверг, 13 Августа 2015, 07:06


Странник


6
Здравствуйте, уважаемые мододелы. Возник вопрос: Нужно сделать в скрипте(квест) условие, что игрок спит и также узнать, сколько он проспал и в зависимости от того сколько часов он проспал сделать какое-нибудь действие. Пробовал IsPCSleeping, но он не работает.


Код
short DoOnce
float timer

Begin gamemode

if (DoOnce == 0)
               set timer to GameDaysPassed
     if (player.isPCSleeping)
                   set DoOnce to 1
      else
         set DoOnce to 0
      endif
elseif (DoOnceSleep == 1)
      if (GameDaysPassed - timer >= 1/24)
          ;какое-нибудь действие
      elseif (GameDaysPassed - timer >= 1/12)
          ;и так до 24

      ...endif
endif
end

Spalny_Vagon  Offline Сообщение №1563 написано: 13 Августа 2015 в 19:56





988
Цитата Ivan_Rozhkov ()
Пробовал IsPCSleeping, но он не работает
В каком смысле не работает? Эта функция именно для того и предназначена, чтобы выявлять спит ГГ или нет. Применяется она без player и без точки. Просто if ispcleeping. Для того, чтобы узнать, какое время было выставлено на ползунке сна, есть GetPCSleepHours. Засекать время сна можно только во сне, т.е. в menumode. В gamemode ГГ не спит!
Код
short doonce
short sileepingtime

begin menumode
if ispcleeping && doOnce == 0
set doOnce to 1
set sileepingtime to GetPCSleepHours
endif
end

begin gamemode
if doOnce == 1
if sleepingtime == 1
;какое-нибудь действие
elseif sleepingtime == 2
;-------------
endif
set doonce to 0
set sleepingtime to 0
endif
end
Если нужно рассчитать время "по факту" после сна, тогда засекать его нужно в момент начала сна, т.е. в menumode. Имейте в виду, что если скрипт с menumode вы повесите на какую-нибудь кровать, то работать он будет не зависимо от того, на какой кровати ГГ спит в этой или соседней ячейке. Также полезно не забывать, что игрока могут разбудить до того, как время вышло, в этом случае GetPCSleepHours будет не совпадать с реальным временем сна.

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
ncrrainjer  Offline Сообщение №1564 написано: 14 Сентября 2015 в 07:38



193
Всем привет.Недавно скачал флягу убежища 13 и вот теперь хочу сделать ее функциональной.Подскажите пожалуйста как можно сделать, чтобы эту флягу можно было использовать несколько раз,например 5 (она в разряде помощи и исчезает после первого использования)?

Ipatow  Offline Сообщение №1565 написано: 14 Сентября 2015 в 08:21



2337
Цитата ncrrainjer ()
как можно сделать, чтобы эту флягу можно было использовать несколько раз, например 5 (она в разряде помощи и исчезает после первого использования)?
Например, завести в глобальных переменных счётчик числа "зарядов" фляжки, и в каждом OnEquip минусовать и проверять, добавить ли ещё одну фляжку взамен используемой сейчас - или положить в карман предмет "совсем пустой фляжка да".

ncrrainjer  Offline Сообщение №1566 написано: 14 Сентября 2015 в 15:10



193
Ipatow, Я так и пытаюсь сделать но видимо не так что-то.В общем есть глобальная переменная CantineEmptyV13 равная нулю.Есть эффект использования фляжки:

Scn Cantine13EmptyScript

begin ScriptEffectStart
player.additem CentieFoolV13 1
set CantineEmptyV13 to +1
end

И есть эффект добавления пустой фляжки:

scn CantineV13EmtyAdd

begin scripteffectstart
additem CentieV13 1
end

На эффект добавления пустой фляжки хотел поставить условие Get GlobalValue == 5
Но не работает.Я понимаю,что скорее всего пропущена масса условий в скриптах,подскажите какие условия нужно добавить?

Ipatow  Offline Сообщение №1567 написано: 14 Сентября 2015 в 17:59



2337
Цитата ncrrainjer ()
скорее всего пропущена масса условий в скриптах,подскажите какие условия нужно добавить?
Пропущено, судя по показанному, много чего... Например, в "set CantineEmptyV13 to +1" не сказано, к чему прибавляется единица - переменная просто выставляется в плюс единицу и всё. А вообще конструкция затейливая - одних скриптовых эффектов вон не меньше двух - так что по фрагментам восстановить, что ещё там не так, затруднительно.

ncrrainjer  Offline Сообщение №1568 написано: 14 Сентября 2015 в 18:15 | Отредактировано: ncrrainjer - Понедельник, 14 Сентября 2015, 18:17



193
Ipatow, А правильно прибавлять так: set CantineEmptyV13 to CantineEmptyV13 +1? И еще проблема,в первом эффекте должна прибавляться полная фляжка (player.additem CentieFoolV13) но она либо не прибавляется,либо прибавляется один раз и все!

Ipatow  Offline Сообщение №1569 написано: 14 Сентября 2015 в 19:07



2337
Цитата ncrrainjer ()
в первом эффекте должна прибавляться полная фляжка (player.additem CentieFoolV13) но она либо не прибавляется,либо прибавляется один раз и все!
Должна прибавляться, да. Если эффект вообще запускается - то прибавляется. Возможно, что и один раз - зависит от параметров эффекта, которые ты не указал... Вообще, для чего тебе два скриптовых эффекта? Только ради того, чтобы заменить IF в скрипте условием на эффекте? Не думаю, что это рациональный подход... Я бы вместо двух скриптов использовал

BEGIN ScriptEffectStart
IF CantineEmptyV13 > 3 ; выпито по крайней мере четыре, то есть пьём не менее чем пятый глоток
Player.AddItem CentieV13 1
SET CantineEmptyV13 TO 0
ELSE
Player.AddItem CentieFoolV13 1
SET CantineEmptyV13 TO CantineEmptyV13 + 1
ENDIF
END

ncrrainjer  Offline Сообщение №1570 написано: 14 Сентября 2015 в 19:57



193
Ipatow, Спасибо большое,все работает отлично,сам бы не догадался:)

AndrewMulti  Offline Сообщение №1571 написано: 14 Сентября 2015 в 20:20


Странник


2
Всем здорово. Я тут нашел способ создавать катсцены в третьем Fallout.
Для разговоров проставлен тайминг в скриптах. Также можно в катсценах использовать игрока, но он не будет разговаривать вообще, даже если использовать команду say.
А так это тема делать такие вставки в моды, дабы разнообразить игровой процесс.
Для теста взял финальную катсцену из GTA San Andreas.



Что вы об этом думаете?

Ipatow  Offline Сообщение №1572 написано: 14 Сентября 2015 в 22:41



2337
Цитата AndrewMulti ()
Я тут нашел способ создавать катсцены в третьем Fallout
Ну, если твоим модам катсцены полезны - что б их не создавать? А если хочешь, чтобы в "фильмах" участвовал и разговаривал ГГ - просто клонируй его. Клоны немотой не болеют, а настоящий ГГ всё равно в это время работает оператором камеры и потому перед камерой появиться не может.

КсюXa  Offline Сообщение №1573 написано: 15 Сентября 2015 в 07:46 | Отредактировано: КсюXa - Вторник, 15 Сентября 2015, 07:47


Гид по Мастерской


1142
Цитата AndrewMulti ()
взял финальную катсцену

У Аматы походка - отпад!!! lol Типа: - ты с какова раёна, поцанчик?

Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Spalny_Vagon  Offline Сообщение №1574 написано: 15 Сентября 2015 в 09:22 | Отредактировано: Spalny_Vagon - Вторник, 15 Сентября 2015, 13:10





988
Цитата AndrewMulti ()
Что вы об этом думаете?
Я думаю, что трудозатраты были не слабые. Для того, чтобы такие сцены были уместны в каком-нибудь моде, сам мод должен быть о-го-го. Таким, как "Нью-Йорк", например. 

Мод "Нью-Йорк" на русском:
Мод "Нью-Йорк" на английском:
ncrrainjer  Offline Сообщение №1575 написано: 17 Сентября 2015 в 21:37 | Отредактировано: ncrrainjer - Четверг, 17 Сентября 2015, 21:39



193
Всем доброго времени суток,мне опять нужна помощь.В общем проблема такая: создал квест на уничтожение врага.Пометил сами цели (Супермутанты) Реф-именами,при уничтожении всех отмеченных НПС стадия квеста должна завершаться а следующая становиться активной.В самой стадии квеста где нужно убить НПС (в Резалт скрипте) прописываю скрипт:
Begin gamemode
if BoSQ1ML1Ref.getDead && BoSQ1ML2Ref.getDead && BoSQ1ML3Ref.getDead && BoSQ1ML4Ref.getDead && BoSQ1ML5Ref.getDead && BoSQ1ML6Ref.getDead && BoSQ1ML7Ref.getDead && BoSQ1ML8Ref.getDead && BoSQ1ML9Ref.getDead && BoSQ1ML10Ref.getDead && BoSQ1ML11Ref.getDead && BoSQ1ML12Ref.getDead && BoSQ1ML13Ref.getDead && BoSQ1ML14Ref.getDead
setObjectiveCompleted BoS01Quest 4 1
SetObjectiveDisplayed BoS01Quest 6 1
endif
end

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

Ipatow  Offline Сообщение №1576 написано: 18 Сентября 2015 в 01:04



2337
Цитата ncrrainjer ()
В самой стадии квеста где нужно убить НПС (в Резалт скрипте) прописываю скрипт:
Begin gamemode
Вообще, я помню, что эти всяческогого происхождения "результовые" скрипты (диалоги, пакеты, стадии квеста, перки.. где там ещё бывают эти странные скрипты без заголовков?) на самом деле для исполнения ловко всовываются в середину настоящих скриптов (в результате вызывая, например, конфликты имён переменных), определяемых системой невнятным способом... А поскольку правила синтаксиса интепретируют одноимённые блоки как один блок, непринуждённо продолжая какой-нибудь онтриггер следующим онтриггером... То, вероятно, гейммод в "результовом" скрипте куда-то там влипнет и, вполне возможно, отработает... Но вообще "результовые" скрипты по смыслу одноразовые, то есть не повторяющиеся автоматически.

При штатном использовании каждый result script определённой стадии квеста (лога в игре нет, но log entry в одной stage может быть описано множество, каждый со своим скриптом) исполняется один раз от начала до конца в момент вызова функции SetStage (очерёдность исполнения скриптов стадии, когда их больше одного, не документирована) - то есть перед выполнением следующей строчки того скрипта, который вызвал SetStage. Своего рода подобие подпрограммы, только параметры нельзя передать.

Предположительно, то, что ты хотел сделать, традиционно делается так. Скрипт самого квеста крутит гейммод-блок с примерно такой конструкцией:

IF LocalCounter == 0
SetObjectiveDisplayed 1
SET LocalCounter TO 1
ELSEIF LocalCounter ==1
IF сделано что надо для первого этапа
SetObjectiveCompleted 1
SetObjectiveDisplayed 2
SET LocalCounter TO 2
ENDIF
ELSEIF LocalCounter ==2
IF сделано что надо для второго этапа
SetObjectiveCompleted 2
SetObjectiveDisplayed 3
SET LocalCounter TO 3
ENDIF
ELSEIF повторяем столько раз, сколько этапов у квеста
ENDIF

Стадии по такой технологии как бы и ни к чему...

ncrrainjer  Offline Сообщение №1577 написано: 18 Сентября 2015 в 06:00 | Отредактировано: ncrrainjer - Пятница, 18 Сентября 2015, 06:12



193
Ipatow, То есть если я правильно понял,то скрипт с такой конструкцией вешается на сам квест?И что такое LocalCounter?

Ipatow  Offline Сообщение №1578 написано: 18 Сентября 2015 в 07:16



2337
Цитата ncrrainjer ()
если я правильно понял,то скрипт с такой конструкцией вешается на сам квест?И что такое LocalCounter?
Да, как я и написал, такое пишется в скрипт самого квеста. Это просто переменная
SHORT LocalCounter
при запуске квеста инициализируется нулём, как и все переменные...

ncrrainjer  Offline Сообщение №1579 написано: 20 Сентября 2015 в 21:49 | Отредактировано: ncrrainjer - Пятница, 18 Сентября 2015, 18:50



193
Ipatow, Ясно,спасибо большое,буду пробовать.Еще вопрос такой,как создать ЛОД на свое игровое пространство?Я скопировал DCWarld15,но в отличии от оригинала дальние объекты не прорисовываются,Гек не хочет сам ЛОД создавать,пишет что создано,а на деле ничего не меняется.
П.С. С ЛОДами вроде разобрался:)

Добавлено (20 Сентября 2015, 21:49)
---------------------------------------------
Задался вопросом как сделать череду событий не зависящих от ГГ?Например как очиститель восстановили через неделю происходит какое-то событие,через две недели другое и т.д.Возможно ли такое сделать?И как?Нужно отдельный квест создавать чтобы все эти события туда вписывать?Если кто знает,помогите,очень надо:)))Заранее спасибо:)


JupiterJour  Offline Сообщение №1580 написано: 21 Сентября 2015 в 14:00


_


1037
Ну хоть по образцу из Картотеки. Только вместо "при входе в игру" будет "при первом событии". То есть весь скрипт заворачиваем в дополнительное условие if-endif. Если под это дело создаётся отдельный квест, то можно дополнительных условий не ставить, а просто запускать его одновременно с первым событием. А вместо "получает сообщение" будет "второе событие". То есть вместо ShowMessage пишем что там требуется для наступления второго события.

КсюXa  Offline Сообщение №1581 написано: 29 Сентября 2015 в 14:58 | Отредактировано: КсюXa - Вторник, 29 Сентября 2015, 15:00


Гид по Мастерской


1142
Цитата YikxX ()
а в Фол3 такое оЧуЧение, что скрипт вообще не работает.
 Может потому что две команды в скрипте, а именно getNumKeysPressed и getKeyPress - это экстендеровские функции? Скрипт не компилируется из-за них и, соответственно, не работает (если грузить плагин в редактор не через FOSE)

Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
YikxX  Offline Сообщение №1582 написано: 29 Сентября 2015 в 18:21


Местный Дон Кихот Ламанчский


2640
КсюXa, дело не в этом. Естественно, FOSE подключен и в игре и в гекке. Самое странное то, что на этот же скрипт, сокращенный тупо до

Код
scn YCBTHotkeySetupSCRIPT  

  short YCBTmainKey  
  short YCBTchangeKey  
  short YCBTchangeKeyMsg  

  begin GameMode  
      ShowMessage YCBTHotkeyChangeMessage  
end

Игра тоже совершенно не реагирует, хотя мод подключен в FOMM и все дела... Я в тупике и в шоке - никогда таких чудес не видал. о_О

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
ncrrainjer  Offline Сообщение №1583 написано: 29 Сентября 2015 в 19:44 | Отредактировано: ncrrainjer - Вторник, 29 Сентября 2015, 19:44



193
Всем привет,подскажите как можно сделать, чтобы один НПС мог лечить остальных в радиусе например в 1000?Например подходишь к врачу говоришь "Вылечи всех нуждающихся"-тот по очереди подходит и ставит манту:)Ну или хотя бы кого-то конкретного,например подходишь говоришь "Бобу нужна помощь вылечи его"-врач подходит и лечит??

Galko  Offline Сообщение №1584 написано: 29 Сентября 2015 в 20:45 | Отредактировано: Galko - Вторник, 29 Сентября 2015, 20:52


GALAктическая мартышка


1889
Цитата ncrrainjer ()
один НПС мог лечить остальных в радиусе например в 1000?Например подходишь к врачу говоришь "Вылечи всех нуждающихся"-тот по очереди подходит и ставит манту
... а в это время ГГ стоит, зевая и поглядывая на часы, в ожидании, пока эта мать Тереза обойдет всех страждущих и немощных. Ибо уходить ему нельзя, потому как , если помнишь, - жизнь на Пустоши "кипит" только вокруг главгероя. Покинет тот локацию, отойдя на определенное расстояние - практически вся обстановка местности, вместе с персонажами выгружается из памяти, пакеты "замораживаются" и т.п.

Ваше счастье, что я не ваше счастье
Ipatow  Offline Сообщение №1585 написано: 29 Сентября 2015 в 21:01



2337
Цитата Galko ()
.. а в это время ГГ стоит, зевая и поглядывая на часы, в ожидании, пока эта мать Тереза обойдет всех страждущих и немощных.
Да ты видела, как наш фельдшер стимпаки бросает? Не успеваешь договорить "Васе плохо" - а он уже метнул в Васю самонаводящийся шприц, не в бровь а в глаз! ok Поговаривают, у него и шприцемёт гатлинговый есть для массхила ;)

Galko  Offline Сообщение №1586 написано: 29 Сентября 2015 в 21:06 | Отредактировано: Galko - Вторник, 29 Сентября 2015, 21:07


GALAктическая мартышка


1889
Цитата Ipatow ()
шприцемёт гатлинговый есть для массхила

Ну.... Так-то да.
Но идея-то фонтанировала такая, чтобы не из пулеметамантумёта пациентов мочить, а по-старинке, со стетоскопом: - дышите-не дышите... Реализмъ, мать его.
Иначе можно было бы вообще одной магией обойтись. Раззз - и все здоровы.

Ваше счастье, что я не ваше счастье
Ipatow  Offline Сообщение №1587 написано: 29 Сентября 2015 в 21:35



2337
Цитата Galko ()
идея-то фонтанировала такая, чтобы не из пулеметамантумёта пациентов мочить, а по-старинке, со стетоскопом
Строго говоря... Оно ведь - дым, зеркала и ассистентка в купальнике в нашей профессии незаменимы... Да, могут оказаться не-Persistent и дохтур, и пациенты, и потому при выходе движение останавливается. Но ведь мы знаем, что на самом деле бегемот только пасть открывает, а поёт тоже крокодил. То есть на самом деле исцеление производится в момент завершения реплики разговора - доктор ещё идёт вразвалочку, нашаривая в кармане свой резиновый молоток, а на пациенте уже повис спелл, который его вылечит по таймауту. Поэтому если ГГ вышел на пару часиков, то по возвращении и пациенты здоровы, и все свидетели присягают, что - да, ходил дохтур, ходил-ходил, лечил-лечил!

YikxX  Offline Сообщение №1588 написано: 29 Сентября 2015 в 21:43


Местный Дон Кихот Ламанчский


2640
Решение пришло во сне и я сразу проснулся - а скрипт на квест (специально созданный под это дело) за меня Вася будет вешать? :D

Все люди - курьеры. Просто некоторые не понимают, какие сообщения они несут...

«Перед тем как начать писать, некоторое время читал». © В. Шендерович
ncrrainjer  Offline Сообщение №1589 написано: 29 Сентября 2015 в 22:17



193
Galko, Чего-то непонятно, что такое CureAll ?И как эта команда должна работать?

Добавлено (29 Сентября 2015, 22:17)
---------------------------------------------
У меня Geck ругается, пишет, что не знает такой функции:((


JupiterJour  Offline Сообщение №1590 написано: 29 Сентября 2015 в 22:40 | Отредактировано: Joopeeter - Вторник, 29 Сентября 2015, 22:43


_


1037
Цитата ncrrainjer ()
как можно сделать, чтобы один НПС мог лечить остальных в радиусе например в 1000?Например подходишь к врачу говоришь "Вылечи всех нуждающихся"-тот по очереди подходит и ставит манту:)Ну или хотя бы кого-то конкретного,например подходишь говоришь "Бобу нужна помощь вылечи его"-врач подходит и лечит??

Одного Бобу вылечить не проблема вообще. В результ-скрипте фразы "Бобу нужна помощь" активируешь у доктора какой-нибудь пакет, нацеленный на пациента, а в результ-скрипте пакета Боба исцеляешь, если тот ещё жив. То же самое с несколькими конкретными бобами - несколько пакетов по очереди.
С неопределёнными "всеми нуждающимися" интереснее. Определить их мы можем , но назначить их целями пакета - нет. Обход неопределённого числа (больше одного) потенциальных пациентов пакетом Find тоже не получится - мы не можем пометить уже обойдённых, доктор будет доматываться всё время до одного и того же.
Я бы сделал типа такого. После диалога "Лечи нуждающихся в радиусе 1000" под игрока помещаем фальшивый взрыв радиусом 1000 с эффектом-маркером. Эффект действует на неписей со здоровьем, скажем, меньше 50%, следующим образом. Во-первых, под непися помещается некий "материальный" маркер, например, активатор (ему не обязательно быть видимым). Во-вторых, неписю добавляется скриптовый пакет охранять своё текущее место расположения. В-третьих, некая переменная, хранящая число больных, увеличивается на единицу. У доктора после диалога активируется пакет Find, побуждающий его найти по ID маркер-активатор 1 штуку. По нахождении маркера у доктора активируется пакет Find, побуждающий его найти любого NPC 1 штуку, при этом он заговорит с найденным. А рядом с маркером как раз ошивается наш больной. В диалоге "Встань и иди" (должен быть диалог с высоким приоритетом) на всякий случай проверяем, тот ли больной (имеет ли на себе эффект-маркер), лечим его, снимаем эффект-маркер (а он забирает с собой "материальный" маркер и пакет охраны), вычитаем из числа пациентов единицу и если это число пока ещё больше нуля, снова отправляем доктора искать "материальный" маркер 1 штуку. Или даже без диалога, в результ-скрипте пактета. "Встань и иди" тоже можно в пакете прописать.
Проще было бы отправлять всех страждущих в путешествие к врачу. Доктор в режиме поголовного исцеления бегает по полю боя и время от времени кастует на себя фальшивый взрыв с эффектом. Эффект добавляет полумёртвым неписям пакет идти лечиться. А доктор уже известен заранее и прописан в пакете.

Форум » Fallout 3 » Мастерская » Помощь по моддингу (Помощь в нелегком модмейкерском деле)
Поиск: