Kepper, 1. Про тюрьму не знаю, до сих пор туда ни разу не попал . Function EquipItem() - это если скриптом надевать, а если игрок сам это делает ?
2. Event OnEffectFinish() не подходит, он срабатывает в момент завершающей анимации, когда когти только начали прятаться. А мне нужно чтобы анимация полностью завершилась + АртОбьект когтей пропал. И только тогда стартовать другой маг. эффект. "HasMagicEffect" должна была быть отличным решением, но она совсем не работает.
AleksTirex, спасибо за подсказку! не знал что свои переменные тоже можно включать в такие проверки. Поэтому я полистал список условий и по аналогии нашёл ещё "GetGlobalValue" и "GetQuestRunning", которые тоже должны подойти для этой цели. В итоге "GetGlobalValue" заработал именно так как нужно ! (и очень просто, и без квестов). Я надеюсь такое решение не будет иметь "подводных камней", пока что всё чётко работает...
По поводу квестовых предметов: Попал сегодня в тюрьму и оказалось, что из инвентаря пропали все предметы, включая квестовые. Так что мне кажется предмет насильственно оставить на персонаже никак не получится. Ну разве что вообще отказаться от идеи предмета как одежды и возможности его быстрого снятия. Тогда можно один раз нацепить на себя маг-способность выпускать когти используя например зелье или книгу, а снять когти можно будет только заклинанием диспелла (или другим зельем). Но это только в том случае если при попадании в тюрьму диспелл не происходит автоматически...
LordVadim, тут ещё проблемка будет, нельзя чтобы движок самостоятельно снимал когти с игрока (ГГ так и помереть случайно может). Я думаю можно найти скрипт, отвечающий за раздевание при попадании в тюрьму, и попробовать модифицировать его. Конечно нехорошо ванильные скрипты править, но как вариант... Вот если бы ещё мне кто подсказал, как найти этот скрипт ?
Мне вот стало интересно, а как добавить физику для других костей скелета, например [NPC Belly]. (а то я попробовал привязать её к [NPC R Butt] и она даже симпатично шевелилась, но пузо при этом совсем к спине прилипло)))
alexwar, я пока глубоко не вникал, но похоже что XML файлы создают как то через 3Dmax, так что мне с Блендером ничего не светит. Придётся ждать готовый XML с задействованным животом... И ещё - уменьшив немного вес точек, у меня получилось добиться того, чтобы грудь не вдавливалась в тело, так что теперь всё красиво работает.
fish69, а у тебя какие косточки задействованы, [NPC Belly] случайно нету ?
ПС: Попробовал сегодня Анимированные волосы - вообще шикарно ! Анимация такая естественная, и коллизия присутствует (в тело не проваливается) ! Прямо, не ожидал.
Ну животу ведь тоже можно добавить таким же образом немного физики, в скелете XPMS для этого есть косточка [NPC Belly], осталось чтобы кто то добавил поддержку этой косточки в "hdtPhysicsExtensionsDefaultBBP.xml". Развесовка у меня уже готова
Вчера попробовал самостоятельно добавить в файл "hdtPhysicsExtensionDefaultBBP.xml" новую косточку [NPC Belly]. Взял за донора ветку [NPC L Butt] и продублировал её, изменив только её номер блока и имя косточки. Потом добавил её номер в ветку "hpkPhysicsSystem".
Но вместо того чтобы нормально прыгать, живот провалился в бесконечность.
Но я на этом не остановился. Добавил новую косточку и в "skeleton_female.hkx" (её там почему то небыло, хотя в файле XPMS скелета "skeleton_female.nif" она есть). Теперь, когда HDT не действует (если нажать кнопку "~"), живот стоит на месте. Но как только возвращаюсь в игру (HDT включается) - живот снова сползает вниз.
Вот теперь сижу и думаю, чего ему ещё не хватает ... ?
alexwar, Как дамп делать тоже не знаю, а в логе вроде ничего такого нету:
hdtPhysicsExtensions [12/21/13 18:50:24]INFO: Queue OK [12/21/13 18:50:24]INFO: System run with 8 threads [12/21/13 18:50:24]INFO: Havok simulated world created. [12/21/13 18:50:24]INFO: SKSEPlugin_Load [12/21/13 18:50:54]INFO: Cell changed... [12/21/13 18:50:54]INFO: Add character 02002f6d [12/21/13 18:50:54]INFO: Add character 0200f4bb [12/21/13 18:50:54]INFO: Add character 0201a536 [12/21/13 18:50:54]INFO: Add character 0201a533 [12/21/13 18:50:54]INFO: Add character 0201a526 [12/21/13 18:51:08]INFO: Cell changed... [12/21/13 18:51:08]INFO: Add character 00000014 [12/21/13 18:51:24]INFO: Cell changed... [12/21/13 18:51:24]INFO: Add character 00000014
fish69, Я полностью скопировал рабочую ветку "RigidBody", если там были координаты, они бы тоже перенеслись. Координаты для новой косточки я задавал только в "skeleton_female.hkx" (а также связь с родительской косточкой).
Спешу поделиться радостной новостью - у меня всё получилось !!! Новая косточка определилась и нормально работает, больше ничего никуда не стекает. (просто надо было ещё блок констрейнов и косточку спины для привязки живота создать)
Правда всё равно остаётся побороть эффект втягивания "офизиченных" областей тела ... (уменьшение веса вертексов не совсем помогает, особенно это заметно при виде сбоку на бегущего персонажа (на шагающем - почти не заметно), похоже надо что то делать с массой в XML файле)
alexwar, а я как то и не заметил, чтобы анимации сильно влияли. Что есть "skeleton_female.hkx", что нет его - всё одинаково работает. Говорят, что "прыгучесть" уменьшается, но я такого пока не заметил.
alexwar, а как на счёт моей просьбы ? Поможешь переэкспортировать ЛБ_1 тело с моей развесовкой (последнее, что я тут выложил) в правильный игровой формат (с 3-мя патишинами) ? (а то мне так лениво переделывать свой экспортёр ... )
В общем, получается чтобы устранить эффект вогнутости, надо сами задействованные в скине вертексы смещать в обратном направлении. Тело при этом корёжится, но зато в игре с HDT хорошо выглядит. (угадать правда сложно, на сколько эти точки двигать надо)
И ещё заметил, самая лучшая физика получается, при скине, не превышающем 0,1~0,2. При этом деформации тела - минимальные, а физика - реалистичная.
Неожиданно столкнулся с проблемкой: - предмет, который я сделал, при одевании не отображается на персонаже в виде от 1-го лица, но прекрасно виден в виде от 3-го лица.
Кто нибудь встречался с чем то подобным, как это можно попробовать решить ?
ПС: должен сказать, что предмет мой не совсем обычный. Это наруч, статическая модель которой прикручивается к персонажу через слот одежды № 59. и сама модель не имеет скина на тело, а привязывается к косточке руки с помощью спец блока [NiStringData] в самом НИФ файле...
DarkVetal, я это это пробовал и к сожалению - не работает. Думаю тут вся фишка в том что моделька не имеет скина, как любая другая одежда. Но при виде с боку всё ведь нормально рисуется ...
...
Йес, сам докопался ! Оказывается этот "пи-пи-пи" движок показывает от 1-го лица только те предметы, которые привязаны к именованным слотам. Я использовал слот 59 (unnamed), но когда поменял его на 36 (Ring) всё встало на свои места.
Пришла мне в голову очередная безумная идея, и захотелось узнать такую штуку: - возможно ли при надетой определённой вещице сделать так, чтобы игровая анимация менялась на мою ?
Например если я надену шапку, то когда подпрыгну - буду висеть в воздухе в позе "лотоса"; а без шапки прыжок оставался бы обычным. Может кто ни будь встречался с чем то подобным и сможет подсказать как это правильно сделать и какие возможно возникнут проблемы ?
Вот какие функции я думаю использовать: словить прыжок = RegisterForAnimationEvent() + Event OnAnimationEvent() запустить свою анимацию = SendAnimationEvent() или PlayAnimation() +FNIS
AleksTirex, спасибище тебе огромное за идею с "JumpRoot" !!!
Хотя сам "JumpRoot" мне продублировать не удалось, но зато всё что внутри него - менялось как положено. Для создания полноценного эффекта пришлось задействовать ещё "FallRoot" и "LandRoot". Менял я прыжок из неподвижного состояния. В "JumpRoot" и "LandRoot" я продублировал имеющиеся эвенты и прописал в них одноразовую анимацию. В "FallRoot" - продублировал и прописал циклическую. (ну и во всех задействованных эвентах добавил проверку на надетую "шапку").
Теперь без "шапки" работает обычный игровой прыжок. Но если прыгнуть с надетой "шапкой", то запускается вводная анимация из "JupmRoot" плавно переходящая в зацикленную анимацию из "FallRoot". И анимация играет до тех пор, пока не будет активирована боевая стойка (это моё спец. условие на завершение цикличной анимации). Хотя можно сделать направленный прыжок и цикл тоже прервётся, но тогда не отыграет анимация из "LandRoot".
Всё отлично заработало, и даже скрипты писать не пришлось !
Я подозреваю, что таким же образом можно поменять анимацию атаки для уникального оружия, например такого как копьё. (взял копьё в руки и атаки двуручного меча поменялись на тыканье копьём...)
ПС: непонятно, правда, как игра определяет, когда нужно проиграть анимацию приземления, ведь прыжки могут быть c разной высоты ... (там какая то переменная "VelocityZ" для этого стоит)
Окончание анимации прыжка определяет движок по столкновению с коллизией
Значит в Бихейвиор файле для прыжка должен быть эвент на это событие, попробую его найти...
И ещё, мне показалось, что высота прыжка не зависит от анимации, и определяется как то иначе, возможно через переменные типа SpeedMult (такую я где то видел). Интересно, можно ли будет в прыжке подкинуть своего ГГ повыше, не реализуя это в анимации ?
Добавлено (04 Апреля 2014, 20:37) --------------------------------------------- Отчёт о проделанной работе :
1. Коллизия у "статика" сама всё таки не перемещается. (перемещаю триггером со скриптом, командой Stone.TranslateToRef(Place, StoneSpeed)) 2. К сожалению да, условия не определяют окончание циклической анимации. Ну и ладно, и так хорошо. 3. Сам не понял чего я там в Бихейвиоре собрался искать и зачем ... но зато (4.) 4. Нашёл в СK "Gameplay"->"Settings" переменную "fJumpHeightMin" отвечающую за высоту прыжка. (интересно, будет ли работать "SetAnimationVariableFloat("fJumpHeightMin", 200.0)"...) ..... --> не работает
Поменял - всё равно не работает, коллизия осталась на месте Когда то читал на форумах, ребята пытались побороть эту проблему, но ни у кого так ничего и не вышло. Я удивляюсь как у тебя лодка работает ?
AleksTirex, действительно работает ! это я сам был виноват. Я использовал сейв файл, но забыл что изменил скрипт. А ведь в этой **** игре если скрипт уже попал в сейв, то просто так уже он не изменится. И в итоге скрипт продолжал двигать старый обьект, а я этого в упор не замечал, пока форму ему не сменил на лодку (до этого они были одинаковые и стояли в одном месте).
Так что покатался я и на твоей лодке и на своём камушке Вот только если просто стоять на статике во время движения, то ГГ начинает трясти как паралитика вверх-вниз. Но если в это время двигаться, то анимация остаётся нормальной. Наверное это так в игре "инверсная кинематика" ног действует, или скорее всего движок начинает считать, что я падаю и пытается проиграть анимацию приземления. (т.к. мой камень по диагонали вниз спускается). Интересно можно ли его будет как то обмануть ...
Цитата AleksTirex
Кстати, сам ковёр сделан вообще "активатор",
А я заметил, когда изменил объект из обычного в "Movable Static", у него появилась возможность активации. Когда на него курсор наводишь, он пишет своё имя и предлагает нажать кнопку "Е" (взять). Правда ничего при этом не происходит )).
ПС: Эх, жаль, хотел бы посмотреть на катающегося на ковре кота ! Для компаньона озвучка и уникальное поведение - очень важны. Я за такими компаньонами "охочусь". )) Может попробовать тут на сайте кастинг провести ? наверняка найдутся таланты ! Или ещё вариант - можно попробовать связаться с ребятами, которые анимешки озвучивают ( анидаб / анимереактор ...). У них голоса есть просто потрясающие ! Может и не откажутся озвучить несколько строчек...
интересно, не думал, что так можно, считал что для этого камень должен быть типа "лошадь" и иметь нод в НИФ-е для привязки, но попробую...
================================================================================== А тем временем я продолжаю собирать материал для будущей "шапки" :
* задача: подпрыгнуть высоко в воздух и там зависнуть, пока ... пока "шапку" не сниму
* решение: прыжок увеличил и падение вроде как отключил: --> "Game.SetGameSettingFloat("fJumpHeightMin", 200.0)" --> "Utility.SetIniFloat("fInAirFallingCharGravityMult:Havok",0)" но мой ГГ всё равно по тихоньку начинает падать вниз (медленно, но уверенно)
* вопрос: есть ли способ перевести ГГ в режим парения на месте (как у драконов) ? (чтобы не отключать силу притяжения всей игре) (может есть ещё какая то переменная, типа "bFlyingState", куда надо 1-ку записать ? ) (ведь есть же функция "GetFlyingState()", а вот "SetFlyingState()" я не нашёл)
И ещё интересные моды сегодня нашёл, связанные с полётом: "Flyable Dragon Races 3 - BURNING SKIES" и "Festive Flight - A Flying Mount for Christmas" (кстати в обоих коллизии при полёте прекрасно работают) Интересно №1, я так понял, что в моде, где ГГ-дракон, для полёта используется невидимый обьект к которому ГГ-дракон и направляется скриптом, выходит так он и летает ? (ну то есть не по настоящему, не с помощью движка игры)(но как то же он тут парит, и не падает) Интересно №2, как олень из 2-го мода набирает высоту ? Ему невидимую плоскость с коллизией подставляют под ноги ? (кстати в обоих модах есть упоминание фейк-поверхности, может это и есть решение для парения в воздухе...)
AleksTirex, попробовал я SetVehicle() - она привязала ГГ к камню (с низу) или к лодке (нормально), но в обоих случаях без возможности двигаться (хотя анимация движения есть но ГГ стоит при этом на месте)
то надо изменить ниф: коллизию и видимую часть сдвинуть
Да, это я попробовал, но угадать куда улетит коллизия довольно сложно. Отношение где то 1 юнит смещения коллизии для 100 юнитов смещения меша. В общем, проще новую сделать. С EnablePlayerControls() тоже не работает. ГГ стоит в центре лодки, лодка едет, а он всё стоит... В общем пока без SetVehicle() лучше (по крайней мере если двигаться по прямой). В этом случае ГГ бегает по камню как угодно, только выпадает часто ; особенно от первого лица - даже по прямой, даже если не двигаться ! Но если использовать коллизию как у лодки, то все проблемы отпадают. ГГ цепляется ногой за одно из сидений лодки и прекрасно едет в любом из видов.
AleksTirex, с маркером, ГГ и SetVehicle() всё получилось, и работает именно так как ты описывал - ГГ свободно двигается в плоскости, и проходит сквозь все обьекты кроме НПС. Есть ещё особенность: ГГ не прилипает к коллизии маркера (как было с "Movable Static"), а фиксируется на той высоте, на которой сработала команда SetVehicle(). (я ставил маркер по PlaceAtMe(ГГ) + MoveTo(ГГ,0,0,800) на высоте 800 юнитов над ГГ, но ГГ туда не поднялся, а остался на высоте прыжка)
Ещё одно маленькое наблюдение для SetVehicle(): - при привязке к маркеру, команда TranslateTo() двигает только ГГ, но не Маркер. - при привязке к MovableStatic(лодка/камень), команда TranslateTo() двигает только этот Статик (вместе с ГГ), самого ГГ переместить ею уже нельзя. - при привязке к MovableStatic(ванильная черепушка), команда TranslateTo() вообще ничего не двигает, а ГГ валяется на полу как какая нибудь фурнитура.
И попутно вопросик: а может ли команда TranslateToRef() перестить к маркеру, который находится за пределами загруженных ячеек ? Например, если ГГ стоит в Рифтене, а маркер - в Вайтране, станет ли эта команда перемещать ГГ в Вайтран ?
Вопросик есть: "Idle Marker" работает на ГГ ? (а то я его кинул в СК на землю, загрузился в свою локацию и встал на то место, где лежит этот маркер, но ГГ не стал исполнять заданную маркером анимацию)
И ещё, где можно почитать про карту высот, используемую при полётах ? (хочется разобраться как сделать летающего рядом с ГГ НПС или животное ...)