как сделать чтобы сообщение появлялось в определенное время определенной даты (Число месяц год)
Если решать в лоб - то сидеть, например, в GameMode и без передышки смотреть значение псевдопеременных GameYear, GameMonth, GameDay и GameHour (собственно, достаточно и GameDay без GameHour, в нём часы-минуты на самом деле уже есть). Как только заветное сочетание случилось - бабахать сообщение. Полезно ещё проверять, не пропущен ли ожидаемый момент (мало ли - вдруг в ту минуту ГГ стоял в позе "ждать N часов" или спал или летел в фаст-травеле (есть ещё менюмоды, в которых время идёт? не помню) или вовсе происходило что-то вроде поездки в Пойнт Лукаут и время перепрыгнуло на сколько-то дней вперёд) и прекращать терзать часы когда поезд ушёл.
проверки на GameHour и GameDay исправно работают, но почему-то отказываются работать проверки на GameMonth и GameYear, хотя в игре специально пропускал время до начала нового месяца..
Непонятно, почему они могут не работать; когда играешь с каким-нибудь DUI, эти цифры постоянно на экране и как ни посмотришь вроде правильные, ведут себя как надо - а DUI всего лишь перекидывает значения этих переменных в UI. С другой стороны, где-то в обсуждениях упоминалось, что обновление-синхронизация не всегда происходят быстро и чётко, и около полуночи достоверность всех этих значений (дня недели тоже касается) слегка так снижена...
О птичках - я как-то не задумывался о календаре фолаута. Он вообще соответствует нашему? В оригинальной игре оно практически никогда низачем не нужно знать дату (вспоминается разве что свадьба в Ривет-сити... которую я постоянно пропускаю, поскольку запутываюсь на когда назначена церемония), так что может оказаться, что там в году 12 месяцев ровно по 30 дней - лишнюю луну они при переключении с обливиона выключили, но в целом вся эта астрономия довольно-таки рудиментарная и растёт совсем не из нашего мира. Меня когда-то ужасно огорчило, что если в августе длина дня 14 часов, а ночи 10 - то это весь год так будет, никакого вращения планеты вокруг солнца и результирующих времён года... Что им стоило разрешить переключать климат?..
Это действительно всего лишь традиция, не лишённая рационального смысла. Спору нет, будут загружены все BSA, начало имени которых совпадает с именем модуля - и, в частности, не будет криминалом обойтись единственным архивом, к имени которого никакой хвостик не приделан. В тоже время при упаковке в архивы большого объёма данных сортировка файлов по типам в разные архивы повышает производительность игры - при поиске, допустим, текстуры игра будет пропускать архивы, у которых в заголовке нет флага "тут текстуры имеются" - а сваливание всего в одну кучу такого преимущества лишает.
Как называть архивы? Игра смотрит только на начало имени, ей что "Supermod - Meshes.bsa", что "Supermod2.bsa" едино; при виде Supermod.esp загрузит что тот, что этот, хоть оба сразу. Решающим резоном тут оказывается вежливость. Та самая вежливость, которая требует, чтобы у переменных в скриптах были осмысленные имена (а не AAA, AAB, AAC), заставляет располагать вложенные блоки кода "лесенкой" и исполнять прочие подобные жесты. Компилятору начхать, как звучат переменные и как код разложен по экрану - но тому, кто будет этот исходник читать, оно совсем небезразлично.
Резюмирую. Вежливо делать моды надо не только "тем, кто с MG", а всем, кто не хочет, чтобы другим моддерам перед ответом на вопрос "как тебе вон тот мод?" приходилось просить женщин и детей заткнуть ушки...
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №1207
| Тема: ВОПРОСЫ по моддингу
написано: 17 сентября 2014, 18:29
| Отредактировано: Ipatow - 17 сентября 2014, 18:30
Обращу внимание на два момента, как будто не подчёркнутых в картотеке. В большинстве случаев заменять текстуру можно правкой в любом из двух мест - в файле модели или в объекте предмета наложением Texture Set. Для флага или скамейки годятся оба варианта, но если дело дойдёт до других вещей, нужно знать об исключениях.
Первое - иногда игра игнорирует текстуры, прописанные в NIF. Текстура кожи для брони и текстуры причёсок - распространённый тому пример.
Второе - иногда игра использует только текстуры, прописанные в NIF. Текстуры существ - бросающийся в глаза образец такого.
По началу думал что реакция мин зависит от того, кто ими владеет. И действительно, мине на карте присвоить владельца игрока, она перестанет реагировать.
Там, похоже, хитрость. Сродни SendTrespassAlarm - неважно, кому и про кого посылается алярм, все кидаются бить ГГ. Потому что преступник всегда ГГ. Вот и минами пользуется только ГГ - насколько я понимаю, они не считаются оружием для боя (даже и ГГ убирает мину из рук при активации VATS, поскольку минами не воюют), потому больше никто их даже в руки не берёт.
Если кого-то силой заставить мину положить (FireWeapon 433e например), результат получается любопытный. Некоторые немедленно на своей мине подрываются, а другие и сами не взлетают и друзей не бабахают - причём владелец у мины и так и этак отсутствует (ГГ хотя бы PlayerFaction вписывает). Напрашивается вывод, что поведение прожектиля в первую очередь определяется совершенно невидимым параметром "кто стрелял" (причём параметр сохраняемый - брось мину, обнули ей владельца или выставь постороннего, запишись, выйди из игры, запусти игру, восстановись, дождись прохожего и если он после взрыва выживет получи от него по роже. ) и только если там пусто - проверяется владелец. Попроси Кромвеля бросить мину - он бросит и даже не взорвётся. А ГГ на этой мине будет рваться даже после того, как её владельцем станет Player или PlayerFaction - стрелял-то Кромвель.
Что можно сделать для придания ситуации здравого вида? Обнуление владельцев, которое ты использовал, как будто логично - но народ начнёт рваться на собственных минах. Они в игре не все бесхозные, и неписи привыкли по ним ходить. Если от гранат они ещё хоть как-то шарахаются, то писк мины их не тревожит. Кое-где может выйти неловко. Возможно, лучше всё-таки владельцев не обнулять, пусть уж ходят по минам, у них и так AI не блещет...
Как решить проблему с минами, которые раскладывает ГГ? Наша цель - сделать, чтобы мины ГГ на самого ГГ реагировали. Ну, первое, что не надо бы делать - это заставлять мину мгновенно взводиться, иначе 100% мин будут тут же взрываться, а это как-то компрометирует саму идею минирования. Мы хотим, чтобы мину можно было бросить, отойти - и после этого пусть уж она считает врагами всех. Как убить обоих зайцев одной лопатой? А пусть мина действительно всегда сразу взрывается, с простым таймером, как граната - секунд 10 например. Но только это будет поддельный взрыв, который ничегошеньки не делает кроме того что исчезает оригинальный прожектиль и выкладывает вместо себя Impact Object, который - сюрприз! - и есть настоящая мина, ни из чего не выстреленная, владельца не имеющая и на всех реагирующая. То есть ГГ кладёт "добрую" мину и успевает отойти до её превращения в "злую". Что при этом сломается? Придётся заменить минам нынешний прожектиль на промежуточный - то есть исправить базовые объекты оружия. Возможен конфликт. Промежуточный прожектиль ни с кем ссориться не должен, это новый объект. Окончательный прожектиль будет тот самый, что авторами игры и модов уже разложен по миру, его мы не трогаем. Как будто всё должно получиться изящно и малой кровью?
А если спавнить его через Impact Object, то он вообще появляется намного выше, чем была оригинальная мина ...
Что намного выше - тут претензии к авторам игры, которые Blast Node вынесли на полметра от мины. Задумка была сомнительно логичная (по мотивам мины-лягушки), а на практике получился всего лишь способ убивать врагов сквозь преграду, прислоняя мину к стене/двери взрывточкой на ту сторону и подрывая мину пулей... Взрыв, понятное дело, объекты помещает туда, где он сам.
Это тестовый мод просто для проверки, что как я говорил, так и работает. Не скажу, что за пять минут сделано, поскольку я больно стукнулся несколько раз лбом с этой коллизией, но в общем считай что это лично для тебя и сделано. На каждый тип мины надо прожектиль, взрыв, активатор и скрипт к нему, а также поправить меш прожектиля, сдвинув Blast Node в начало координат.
Вопрос номер 2-Как сделать так, чтобы актер умер именно выбранной анимацией?
Ээ... "Штирлиц выхватил парабеллум и высадил Мюллеру в лоб всю обойму. Мюллер нахмурился. Броневой - догадался Штирлиц." С пулей в голове люди в норме мешковато себя и ведут. То есть обычно не произносят речей и не исполняют красивых антраша... Что не мешает тебе заставить моба просто исполнить определённую анимацию (PlayIdle), а по окончании спектакля тихонько его придушить. Мы подтвердим, что он умер именно от того, от чего его лечили!
как через тригер заставить одного НПС стрелять,а второго падать,да еще и через анимацию?
Что-то вроде...
SHORT Stage FLOAT Timer BEGIN OnTriggerEnter Player …IF Stage == 0 ; тут можно ещё проверять, все ли условия соблюдены - все ли живы и т.п. ……SET Stage TO 1 ……SniperRef.FireWeapon WeapSniperRifle …ENDIF END BEGIN GameMode …IF (Stage == 0) || (Stage == 4) ……RETURN …ENDIF …SET Timer TO Timer + GetSecondsPassed …IF Stage == 1 ……SET Stage TO 2 ……SET Timer TO 0 ……VictimRef.PlayAnim 3rdPHitHead …ELSEIF (Stage == 2) && (Timer > 1.5) ……SET Stage TO 3 ……SET Timer TO 0 ……VictimRef.PlayAnim KnockDownFaceDown …ELSEIF (Stage == 3) && (Timer > 2.5) ……SET Stage TO 4 ……VictimRef.KillActor SniperRef …ENDIF END Да, имя функции написано неправильно. Правильно - PlayIdle
как сделать, чтобы после выполнения квеста через три дня появлялось какое либо сообщение?
Ну, например... Где-то должен крутиться скрипт - квестовый или на активаторе каком-нибудь. И всё время проверять тот квест на GetQuestCompleted. Как поймалось завершение квеста - выставляем флажок, по которому больше квест не проверяем, а начинаем считать время. Хоть секунды с этого момента отсчитываем, пока не наберётся секунд на трое суток, хоть GameDaysPassed смотрим - не отбрасывая дробную часть это будет проверка на 72 часа с момента начала отсчёта, а если присваивать это значение целочисленной переменной и сравнивать уже результат, это будет "третий день с момента". Гмм... Совсем же недавно где-то тут обсуждали эти тикалки...
Добавлено (19 Сентября 2014, 21:46) --------------------------------------------- Да, и как время пришло - там хоть сообщение на экран пиши, хоть контейнеры барахлом набивай - это же скрипт, делай всё что захочется
Да мне бы конкретный пример именно с getdayspassed и который стартует с OnAdd, я как-то делал,что добавляем например планшет в определенный контейнер на планшет вешаем скрипт с GetDaysPassed который с Begin OnAdd,вроде работало,просто не помню как именно делал:(А может и путаю чего:)
Ой что-то ты ленишься, по-моему... Случай не то чтобы буквально азбучный, но ведь нет тут ничего сложного. Сделай например в таком духе -
SCRIPTNAME скрипт-предмета BEGIN OnAdd ref-ящика/моба …IF (GetQuestCompleted квест-будильник) …ELSEIF (GetQuestRunning квест-будильник) …ELSE ……StartQuest квест-будильник …ENDIF END
SCRIPTNAME скрипт-квеста-будильника SHORT Deadline BEGIN GameMode …IF Deadline ……IF GameDaysPassed > Deadline ………CompleteQuest квест-будильник ; и делаем что хотим, время настало ……ENDIF …ELSE ……SET Deadline TO GameDaysPassed +3 …ENDIF END
хочешь накормить голодающего - дай ему не рыбу, а удочку
Это мудро! Но любой граблепроходец тут же напомнит, что за этим последуют вопросы про поплавки, блёсны, прикорм, часы лова, потом он лодку захочет... К рыбе хотя бы дополнительных инструкций не требуется
Fade Duration - Время "жизни" пули. Пуля исчезает по истечении этого времени если до этого ни во что не попала и не взорвалась. Имеет смысл поставить 5.0 для пули и Timer + 0.5 для гранаты.
Это про изображение прожектиля. Пример из учебника - beam бьёт в цель мгновенно, без полётов, но светится на экране в течение Fade Duration. Для других типов параметр не обязательно имеет смысл - взять, например, lobber системы крышкомина: через какое время надо оброненную мину потушить? Да ни через какое! А гранаты - тоже lobber.
при этом урон не будет наноситься следовательно ничего лишнего оторвано не будет, однако попадание как таковое будет засчитано и может быть использовано в скриптах или эффекте самого используемого оружия.
Гмм... Ну поскольку мы снимаем кино, то главный смысл UseWeapon я вижу в том, что стрелок будет стрелять как минимум в сторону цели. А то мало ли вдруг ГГ как раз на крышу смотрит, а снайпер бабах FireWeapon в противоположном направлении В остальном неподдельный выстрел может и испортить кадр - пусть урона нет, но decal-то кровавый нарисуется на пузе?
Гранате ведь ничто не мешает быть Missile'ом верно?
Гмм... Назначить-то её можно хоть на должность flame, но будет ли граната правильно летать? Миссайлы умеют рикошетить?.. Впрочем, это мы уже куда-то отклонились от дальности гранатометания.
обнаружила еще одну довольно серьезную проблему , при выстреле пуля попадает немного левее от точки прицеливания
Надеюсь, ты всё-таки не встаёшь в ряды фанатиков, для которых это действительн серьёзная проблема... Началось оно всё с того, что авторы игры, делая модели оружия (и прицелов), не особенно точно расположили мушку (точку на оптике). Насколько я знаю, ни один стандартный карамультук не стреляет в точности по прицелу. Потом они это компенсировали автонаведением - чтобы достаточно было стрельнуть примерно в направлении врага, а пуля сама свернула, чтобы в цель попасть... Для снайперских дистанций это, правда, не работает, а где работает это работает как "стоит за столбом враг и торчит из-за столба нога; стреляю в ногу, пуля неуклонно бьёт в столб против сердца спрятавшегося"... Много копий (хардкопий) сломано об это, много драк состоялось, много модов изготовлено... Я бы посоветовал как решение модом взять мод прицеливания имени Rogue Hallow https://modgames.net/load/fallout3/gejmplej/1/17-1-0-5518 если хочется эту беду устранить... Ну или если порыться, альтернатив чуть меньше, чем фанатиков.
А вот тут я бы сильно озадачился. Ну то есть когда вся сцена расчитана до миллиметра это не кажется сложным, но если задача отловить координаты головы гуляющего в непонятной позе непися... Это вообще решаемая задача?
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №1223
| Тема: Помощь по моддингу
написано: 20 сентября 2014, 15:37
| Отредактировано: Ipatow - 20 сентября 2014, 15:38
к неписю в непредсказуемый момент игры подходит убийца, втыкает ему точно в ухо
Кабы так, я бы сразу сказал - ищи ветра в поле аниматора, который всю эту сцену в три-дэ-максе нарисует...
А так и рост у персонажей отличается (ну, у меня отличается), и с разным оружием в руках они по разному ходят (в стандартном комплекте для некоторых видов оружия имеется собственная анимация ходьбы, а у ж в нестандартном вовсе лес тёмный)... Пусть уж стреляет через UseWeapon из уникального оружия, которому оторван Impact Data Set во избежание подозрительных отметин на жертве, а остальное жертва сама изобразит.
хотелось полноценную ракету, чтобы и дымный след был и сбивать можно было.
Охохонюшки... Должен со стыдом признаться, как те маляры - это, гражданочка, вам к доктору надо! Я помню, что здешние моделестроители над коллизиями измывались, на лифте ГГ катали, ещё какие-то непотребства творили... Но сам я только краями обширных ушей порой какую крупицу истин уловлю. Слыхивал, что по раскраске layer ( http://niftools.sourceforge.net/wiki/Oblivion/Bhk_Objects/Layer ) можно слёту визуально косяки с коллизиями обнаруживать - ну да не твой как бы случай. Слыхивал, что бывают несовместимые сочетания функционала (вроде того, что броня может быть либо анимированная, либо с расокожаным шейдером, но не одновременно) - может быть, ты на такое наступил и нельзя такую коллизию с дымовыми нодами вместе? Опытный тут шаман нужен, чтоб понимал тонкости Gamebryo в вариации BS... Поговаривают, что не все они работают в Bethesda (хотя и там их меньше, чем надо бы).
Функция IsSwimming для игрока не работает (если она вообще работает, т.к. в игре ее нет), на бетсофт рекомендуется использовать GetPos Z, кстати там ошибка, для плаванья нужна высота не 10500, а 10670 (10666,77 - если совсем точно).
В игре эта функция есть, и моды ей пользуются. Ну, пытаются по крайней мере (например, FWE изо всех сил проверяет Player.IsSwimming - но та же Бриса добросовестно переодевается в купальник, когда доводится свалиться в водоём, и это любой брисофил подтвердит).
Забавный факт - NVSE 4.2 Beta 3 ввела функцию IsPlayerSwimming - так эта беда всех достала... Ну, то в вегасе.
Проверка высоты - ошеломляющая доверчивость. Ну да, мы знаем, на какой высоте автовода в стандартном мире. Но мало того, что каждая ячейка территории может заоверрайдить автоводу в своих пределах, так ещё навалом Placeable Water вокруг...
Кажется, когда в последний раз такого рода проблема тут обсуждалась (кому не лень вбить "IsSwimming" в поиск? где-то в Мастерской вегаса дело было), вроде пришли к выводу, что надо с частотой наглости бросать в ГГ каким-нибудь NPC подходящего роста (с ростом тоже забавно - на глубину, с которой NPC начинает плавать, масштаб влияет, но масштаб базового объекта, а не SetScale на референсе) и проверять - поплыл, нет?
Насчёт атлетики... Не будет вреда, если протестировать, а не работают ли fMoveSwimWalkBase да fMoveSwimRunBase - вдруг работают? Мало ли - ведь сапоги отменили, но fSneakBootWeightBase всякий жив и фурычит.
если после выхода из воды присесть и встать, то скорость восстанавливается сразу до исходного значение, какое было до плаванья
А смена скорости вообще вступает в силу, если способ передвижения не меняется? Попробуй не высоту мерять, а, например, GetPos X и на чётных десятках метров ставь 2.2, а на нечётных 4.2 и беги про прямой - будет на ходу скорость бега меняться? Если не меняется, то, значит, ты поздно поменял скорость на сухопутную (когда ГГ уже успел выйти на сушу), и новая скорость включится после смены способа передвижения (например, сломай ноги и почини или присядь-встань).
Изменение репутации для пользователя Ipatow
IpatowOffline
Сообщение №1229
| Тема: Бункер модмейкеров
написано: 22 сентября 2014, 21:11
| Отредактировано: Ipatow - 22 сентября 2014, 21:22
Досадно! Как там они пишут... "Ваши файлы никогда не пропадут"? Вот чёрт, и правда - из каиновой дюжины семь модов "ушли в сторону моря"... А файлы не могли быть просрочены? Ой, это же из остающейся дюжины, там же что-то уже успели зарепортить и скрыть... Что-то ни слов нет, ни смайла достаточно истерического