• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №841
написано: 3 апреля 2014, 03:54
| Отредактировано: nepewka - 3 апреля 2014, 04:11
AlexTirex, ну для начала огромное спасибо, за такие развернутые посты! А теперь всё по порядку, ведь главное чтобы мы понимали друг друга
Насчет пунктов сразу скажу, это не перечисление того, как хочется сделать что то 1, а скорее перечисление того, сколько машин я хочу видеть в своем гараже. Разных по своей работе и уникальных. Насколько я понял, ты предлагаешь все эффекты делать через onEffectStart. В дальнейшем так, чтобы было понятнее я буду не название эвента писать, а задумку
Теперь по пунктам.
1) OnEffectStart со скоростью прожектайла ~ 25000. Ну как я и говорил выше - не хватает контроля над спеллом...
визуально выглядит конечно, как я изначально и хотел от onEffectStart'a Вот только вместо двух - трех взрывов, там их штук 20-30 в течении 0.5-1сек происходит, естественно цель моментально умирает. Причем от бедного стражника Вайтрана, даже тела не остается. Кучка пепла, а порой и её нет.
Мне даже трудно представить, сколько раз срабатывает этот эвент в течении этих несчастных 0.5сек Из за такой скорости прожектайла.. . Это всего лишь 3 каста в эвенте, а что будет если больше поставить? Бедные стражники...
Вообщем сам эффект мне впринципе понравился, именно то что я хотел видеть от onEffectStart, но нужны какие то интервалы и временные задержки между срабатыванием эвента, предыдущий способо который описывал LordVadim явно не поможет тут.
2) Не меняя скорость прожектайла, изменил кол-во кастов на стандартный 1
Event OnEffectStart(Actor akTarget, Actor akCaster)
akSpell.Cast(akCaster, akTarget)
endEvent
Ну сам по себе эффект, мне опять же понравился. Было похоже на то, что я хотел видеть от OnSpellCast
Визуально стало видно не взрывы, а то как из моих рук один за одним после первого каста вылетают фаерболлы..
Вот только опять, за 1 секунду штук 15-20 их вылетело. Как из пулемета строчил... Хех, ну тебе самому надо это увидеть, то ещё зрелище
Из этого следует, что раз я их визуально стал замечать, то в 1 пункте, явно больше 20-30 вылетало. Бедная игра, этот эвент повторяется с какой то космической скоростью.
Этим мне и не нравится onEffectStart, чуть что попал 1 кастом, эвент в скрипте срабатывает и запускает свой каст, дальше мнгновенно идет 2, 3, 4, 5 и так далее...
Что с этим можно сделать? Повторюсь, хочется именно чтобы в 1 варианте был 1 прожектайл от меня и 3 взрыва его на цели.ъ
"Если Тебе надо один видимый Projecticle и несколько взрывов от него, то это совсем другой вариант, нежели ты описывал ранее. Вот здесь и нужен именно вариант с OnEffectStart в основном эффекте. Тогда при его срабатывании жертва сама на себя кастанёт нужные заклинания и в любом количестве. И не будет лишних визуальных Projecticle, а будет эффект, как будто твой спелл имеет несколько эффектов. "
- Вот вот, это именно то чего я хочу от 1 пункта. PS. (Что прописать в скрипте, чтобы жертва сама на себя кастовала мой фаерболл?)
А от 2 варианта, вот что то типо пулемёта, только не 20 прожектайлов за 1 каст, а скажем 3
3) Вариант. OnHit проехали, переходим сразу к 4 пункту. Постараюсь обьяснить тебе задумку..)
Actor property selfRef auto hidden Spell Property DLC2BloodskalBladeSpellHoriz auto Spell Property DLC2BloodskalBladeSpellVert auto weapon property selfWeapon auto hidden hidden ammo property DLC2BloodskalAmmo auto ReferenceAlias Property BloodskalBlade auto objectReference Property ObjSelf auto hidden
Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) if akNewContainer as Actor selfWeapon = (self.getReference().getBaseObject() as weapon) utility.wait(0.1) if (akNewContainer as Actor).isEquipped(selfWeapon) OnEquipped(akNewContainer as Actor) endif endif BloodskalBlade.ForceRefTo(objSelf) endEvent
Пока правда не совсем понимаю, чем CastStop отличается от InterruptCast.
Пойми меня правильно Мне понравилась твоя идея с прожектайлом, но смысл этого варианта в том, чтобы без стандартной анимации каста, у нас сработал спелл и вылетел фаерболл.
Как бы тебе обьяснить))
Думаю для тебя не секрет, что у спелла помимо каст тайма (Charge Time в CK), есть ещё кое какая задержка, связанная с анимацией, когда поднимается рука при касте.
Даже если мы поставим каст тайм спеллу 0.0 в ките, все равно будет какая то задержка, где то 0.3-0.5 сек, не знаю сколько точно. Это стандартные файлы анимации .hkx их никак не заменить, кроме как замены.
Кароче чтобы кастануть спелл с Charge time 0, все равно приходится задерживать кнопку на мышке на время в предыдущем предложении чтобы каст прошел.
Я хочу сделать, чтобы при малейшем нажатии мышки, не задерживая её, у нас срабатывал animation event, один из тех, которые выше и он же вызывал инстантный фаерболл.
Как думаешь получится сделать?
З.Ы. Извиняюсь за стену, пойми меня правильно [2]. Хочется подхватить побольше знаний, пока есть возможность
Заранее спасибо за ответ!
З.Ы.2
может показаться не вежливым с моей стороны, но можно ли твой скайп или icq в ЛС? Чтобы ускорить обмен информацией и убрать стены с форума, если ты конечно не против и есть свободная минутка
Изменение репутации для пользователя Alliria
AlliriaOffline
Сообщение №842
написано: 3 апреля 2014, 06:35
| Отредактировано: Alliria - 3 апреля 2014, 06:39
AleksTirex, LordVadim, путем манипуляций с блоком OnUpdate выяснила несколько забавных вещей: - скрипт AleksTirex, который он давал (где цикл внутри цикла) не работал потому, что циклы запускались в блоке OnInit; если его запускать в блоке OnUpdate, то он работает, но AleksTirex сказал, что так делать нельзя, ибо циклы начнут плодиться и -> CTD; - скрипт LordVadim и любые его модификации, сделанные мной, работал, но вызывал частые вылеты; похоже, CTD происходил при запуске нового цикла проверки, если ГГ в бою, и при очистке мертвых актеров. Предложите вЫпить йАду и убиться аПстИну? А вот вигвам. Квестовый скрипт: Обратите внимание, чистка трупов в одной функции с раздачей. В итоге в бою не вылетает. С расстоянием пока непонятно, к тому же яхз, куда его пихать.
aaAlliriaRCRPlayerQuestScript Property aaAlliriaRCRPlayerQuest Auto Spell Property aaARCRWeapArmMatSpecBase auto Spell Property aaARCRabilityUndead auto
Function StartSpecsNPC(Actor akActor) If (akActor != None) && (!akActor.IsDead()) && (akActor != Game.GetPlayer()) If !akActor.HasSpell(aaARCRWeapArmMatSpecBase) akActor.AddSpell(aaARCRWeapArmMatSpecBase) ElseIf !akActor.HasSpell(aaARCRabilityUndead) akActor.AddSpell(aaARCRabilityUndead) EndIf EndIf If akActor.IsDead() akActor.RemoveSpell(aaARCRWeapArmMatSpecBase) akActor.RemoveSpell(aaARCRabilityUndead) EndIf EndFunction
Скрипт алиаса: Да, я запускаю цикл в OnUpdate, и он работает!
Perk Property aaAlliriaRCRSilverPerk Auto Actor Property aaARCRplayerRef Auto Hidden Actor Property aaARCRnpcRef Auto Hidden Bool StartSpecsPlayerIdent = False
Event OnInit() aaARCRplayerRef = Game.GetPlayer() If !StartSpecsPlayerIdent;;;- не выдано aaARCRplayerRef.AddPerk(aaAlliriaRCRSilverPerk) StartSpecsPlayerIdent = True ;;;- выдано Debug.Notification("ReVamp applyed Specs") EndIf RegisterForSingleUpdate(6.0) EndEvent Event OnUpdate() UnregisterForUpdate() Debug.Notification("ReVamp Cicle Started") int iIndex = 40 While(iIndex > 0) ; поиск актёров около ГГ iIndex -= 1 aaARCRnpcRef = Game.FindRandomActorFromRef(aaARCRplayerRef, 7500.00) (GetOwningQuest() as aaAlliriaRCRPlayerQuestScript).StartSpecsNPC(aaARCRnpcRef) Utility.Wait(0.5) ;;;- задержка перед переходом к поиску следующего актера, в итоге на цикл уходит 20 секунд; EndWhile Debug.Notification("ReVamp Cicle Completed") ;;;- интервал обновления, т.е. пауза между окончанием первого цикла и запуском второго RegisterForSingleUpdate(6.0) EndEvent
Что-то у меня это не сработало... Буду признателен, если объяснишь, что еще необходимо выполнить. Заранее благодарю!
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Но если ты повесишь этот скрипт на основной спелл и назначишь akSpell этот же самый спелл, то получишь цикл, почти бесконечный цикл.
Ты на одно из свойств akSpell назначил этот же спелл, на котором висит этот скрипт, т.е. самого себя. Вот ты и получил цикл. В итоге этот спелл плодит сам себя. А надо назначать любой другой спелл, хоть самодельный, хоть дефолтный. Тогда при одном касте полетят только те спеллы, что прописаны в свойствах и в количестве равном количеству команд каста. И не будет ГГ строчить как из пулемёта. (я же всё это писал, надо только внимательно читать)
OnEffectEtart работает только один раз, и команды в нём срабатывают тоже только один раз.
Если хочешь сделать "очередь" как из пулемёта, но не бесконечную очередь, а 1-2-3 секунды, то можно так:
Event OnEffectStart(Actor akTarget, Actor akCaster) int index = 5 While index > 0 index -= 1 akSpellXX.Cast(akCaster, akTarget) Utility.Wait(0.2) endWhile endEvent
akSpellXX - другой спелл, не этот, на котором висит скрипт (!) В течении одной секунды вылетит 5 файерболов. Количество кастов и задержку меняй сам по своему желанию.
************************
Твой пример скрипта не совсем корректный. Там при начале анимации ГГ кастует сам на себя заклинание. Тебе это не подходит, у тебя целевые заклинания (!). А где ты возьмёшь референс цели, на которую должны полететь заряды? Всё упирается именно в это. Пока ты не решишь вопрос с получением референса цели, что-либо дальше делать бесполезно. А вот когда в своём скрипте будет известен этот референс, то можно хоть сотню разных вариантов напридумывать.
Вот для этого и нужен скоростной невидимый спелл, который и определит этот референс. Этот спелл/эффект может просто отдать/передать значение референса в любой твой скрипт, и уже в нём можешь как угодно развлекаться с кастами по цели, она ведь будет уже определена.
************* Внимательно прочитай самую первую строчку этого поста и хорошо запомни её.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №846
написано: 3 апреля 2014, 12:26
| Отредактировано: nepewka - 3 апреля 2014, 13:21
AlexTirex, я понял, благодарю. Всё же когда ты пишешь вот так вот с примерами, всё становится намного понятнее
Благодарю за скрипт! add: IT really works!
Последнее, что я могу у тебя попросить, помощи вот с этим
Цитата AleksTirex
Вот для этого и нужен скоростной невидимый спелл, который и определит этот референс. Этот спелл/эффект может просто отдать/передать значение референса в любой твой скрипт, и уже в нём можешь как угодно развлекаться с кастами по цели, она ведь будет уже определена.
В упор не понимаю что нужно сделать.
То есть мне нужно создать совершенно новый спелл, с новым эффектом? Ок. Скоростной. Я так понимаю velocity в projectile надо ставить что то в районе 100 тысяч, чтобы прожектайла совсем небыло видно?
Невидимый. Что конкретно ты имеешь ввиду? Поставить скорость прожектайла настолько высокой, чтобы его совсем небыло видно? Или же в настройках Magic Effect этого заклинания, все пункты отвечающие за визуальность поставить как None?
Создали мы этот спелл, что дальше. Как сделать из него референс?
Короче говоря, я не могу понять: а) как конкретно спелл может стать референсом? б) Чем спелл может помочь в определении референса цели? (в упор просто не пойму) в)Как в дальнейшем этот референс можно будет использовать в моих скриптах? Хотя с моим текущим пониманием ситуации, рано об этом говорить ...)
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №847
написано: 3 апреля 2014, 13:17
| Отредактировано: AleksTirex - 3 апреля 2014, 14:35
Создали мы этот спелл, что дальше. Как сделать из него референс?
Короче говоря, я не могу понять: а) как конкретно спелл может стать референсом? б) Чем спелл может помочь в определении референса цели? (в упор просто не пойму)
Из спелла никак не сделать, как и из любого объекта. Референс - это типа как имя, номер изделия, и т.д. У тебя есть имя? Есть, но ведь из тебя не получится сделать твоё имя, его можно только узнать, но не сделать (!). Так же и с референсом, его можно узнать, какой именно референс у данного объекта, типа "какое имя у объекта". Каждому объекту в игре назначается свой референс, типа имени или номера, а иначе как бы движок различал объекты в игре. И если надо что-то сделать с объектом, например с Алдуином, надо знать какой у него референс в игре.
Так вот при попадании на НПС заклинания на нём/НПС возникает магический эффект, это ты знаешь, так этот эффект непосредственно висит на этом НПС и он/эффект "знает", на ком именно он висит, что логично. Так можно узнать у этого эффекта, на ком именно он висит, как бы спросить у него.
При возникновении на НПС-жертве маг.эффекта возникает событие - "старт-эффект" Event OnEffectStart(Actor akTarget, Actor akCaster) , которое знает, кто послал это заклинание и в кого оно попало.
Так вот: akCaster - это кто послал этот спелл/заклинание, т.е. кто кастовал его. akTarget - это цель спелла/зклинания, т.е. в кого оно попало и на ком возник данный маг.эффект. Т.е. есть референсы кастующего и жертвы.
Вот этот референс akTarget и надо использовать как цель ГГ для каста новых заклинаний.
****** Сперва пойми и вникни в это. И пойми/разберись, что такое референс и что такое заклинание и маг.эффект. Тогда сможешь дальше сам писать скрипты и делать заклинания.
Как отследить момент, когда ГГ дает указание спутнику, чтоб тот взаимодействовал с миром, например обыскал сундук или колол дрова или крафтил ченить? Благодарю!
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Как отследить момент, когда ГГ дает указание спутнику, чтоб тот взаимодействовал с миром, например обыскал сундук или колол дрова или крафтил ченить?
Твой созданный спутник или вообще любой?
В Скайриме всё построено на событиях, так вот их и надо отслеживать. Т.е. события, возникающие на НПС-спутнике. Для этого надо записать НПС в свой алиас и в нём отслеживать события, происходящие с НПС. Отслеживать можно изменение пакетов, активацию неписем каких-то объектов (это проще через перк на НПС) и т.д.
Если спутник твой, то просто в каждом топике/команде результирующий скрипт, который отдаст "описание" команды, которую даёт ему ГГ.
Если НПС может и без приказа что-то начать делать (колоть дрова, крафтить и т.д.), то только первый вариант.
Изменение репутации для пользователя VALKNUT
VALKNUTOffline
Сообщение №850
написано: 3 апреля 2014, 14:32
| Отредактировано: VALKNUT - 3 апреля 2014, 14:36
Ну, к примеру, я хочу защитить созданного мной персонажа от принесения в жертву Боэтии. Как решить вопрос игнором этого действия я знаю, но я еще хотел бы встроить в свой мод актуальный ответ ГГ на такой вандализм. А именно, при указании спутнику на алтарь Боэтии сделать агр персонажа с неизбежной смертью ГГ.
То есть все довольно узко.. Конкретный НПС, конкретная ситуация.
А еще лучше, чтоб вместо НПС к алтарю "примагнитило" ГГ.
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
А именно, при указании спутнику на алтарь Боэтии сделать агр персонажа с неизбежной смертью ГГ.
Не ругайтесь и не смейтесь - опять заклинание-абилка.
Делаешь абилку и даёшь алиасу НПС (дак угодно даёшь). В условиях заклинания (не на эффекте !) ставишь: Target - референс_Боэтии - ==1. И другие нужные условия (если надо). На эффекте скрипт с нужными тебе командами.
Т.е. когда у НПС целью станет статуя Боэтии, тогда запустится эффект и отработает скрипт с твоими командами. Произвольно целью статуя стать не сможет, т.к. цель-Target возникает у НПС в момент, когда НПС "решил" активировать объект и пошёл к нему (вплоть до окончания взаимодействия с этим объектом). Сам по себе НПС ну очень вряд ли пойдёт активировать статую, пока ГГ не даст на это команду.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №852
написано: 3 апреля 2014, 15:06
| Отредактировано: nepewka - 3 апреля 2014, 14:55
AlexTirex, ну я так, примерно понимаю что референс это существо. Просто ты так написал предыдущий пост, что я подумал что ты знаешь выход))
akTarget как обьект для референса не подходит же? остается только для каждого обьекта в скрипте указывать индивидуальный референс цели, будь то охраник, дракон или грязекраб
Добавлено (03 Апреля 2014, 19:06) --------------------------------------------- такой вот вопрос, а если через автостартовый квест задавать референс, такое может прокатить в моем случае?
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №853
написано: 3 апреля 2014, 15:11
| Отредактировано: LordVadim - 3 апреля 2014, 15:55
Что-то у меня это не сработало... Буду признателен, если объяснишь, что еще необходимо выполнить. Заранее благодарю!
Проверил скрипт, у меня работает. Но лучше отслеживать не числовое, а процентное состояние здоровья:
Scriptname aaTestCastSCRIPT extends Actor;- Скрипт на компаньоне
Spell Property HealOther Auto;- Лечение
Event OnInit() While !IsDead() if Game.GetPlayer().GetAVPercentage("Health") < 0.5;- Если здоровье ГГ < 50% While Game.GetPlayer().GetAVPercentage("Health") < 1 HealOther.Cast(Self, Game.GetPlayer());- Лечим Utility.Wait(0.5) EndWhile EndIf Utility.Wait(3);- Задержка перед очередной проверкой EndWhile EndEvent
nepewka, "выход"... какой выход? Получение референса цели? Так я же всё подробно расписал.
Вот этот референс akTarget и надо использовать как цель ГГ для каста новых заклинаний.
Референс - это не существо, это идентификационный номер объекта, любого объекта: НПС, грязекраб, статуя, камень на дороге, валяющаяся палка или монетка и т.д. Референс есть у каждого объекта в игровом мире.
LordVadim, RegisterForUpdate(3)так нельзя. (читай свой собственный пост немного раньше)
Циклы и постоянное обновление вместе делать нельзя. В данном случае это не критично, но всё же не стоит (народ привыкнет так делать и... результат предсказуем )
Циклы и постоянное обновление вместе делать нельзя. В данном случае это не критично, но всё же не стоит (народ привыкнет так делать и... результат предсказуем )
А так всегда на собственные грабли... Сейчас подправлю.
import Utility Actor Property PlayerREF Auto Float Property xOffset Auto ; Relative X position for the target Float Property yOffset Auto ; Y Offset for Target Float Property zOffset Auto ; Z offset for Target Float Property RandomOffsetX Auto ; Randomness applied to X Offset. Initializes at 0. Float Property RandomOffsetY Auto ;Randomness applied to Y Offset. Initializes at 0. Float Property RandomOffsetZ Auto ; Randomness applied to Z Offset. Initializes at 0. Float Property PulseRate = 1.0 Auto ; How often do we shoot? Float Property RandomRate Auto ; Add random delay to pulse rate, capped at this value Activator Property TargetType Auto ; What type of object are we zapping if we're spawning a node? ObjectReference Property CurrentTarget Auto ; The actual target we're shooting at Bool Property SpawnNode Auto ; Do we spawn a target? If not, zap the nearest valid target. Initializes 'False' Spell Property Zap Auto ; What spell shall we use for the effect? FormList Property TargetTypeList Auto ; List of potential targets Float Property SeekRange = 1000.0 Auto ; The range it will "Lock into" a target if not making a node.
Event OnUpdate() ; find something nearby to shoot at if we're not making our own target. if !SpawnNode && !TargetTypeList && GetDistance(PlayerREF) < SeekRange ; No list given, Default to the player if he is in range. CurrentTarget = PlayerREF elseif TargetTypeList CurrentTarget = Game.FindClosestReferenceOfAnyTypeInListfromRef(TargetTypeList, Self, SeekRange) endif if CurrentTarget ; it's possible that there is no target Zap.Cast(Self,CurrentTarget) endif RegisterForSingleUpdate(PulseRate + RandomFloat(0.0, RandomRate)) EndEvent
Пришла мне в голову очередная безумная идея, и захотелось узнать такую штуку: - возможно ли при надетой определённой вещице сделать так, чтобы игровая анимация менялась на мою ?
Например если я надену шапку, то когда подпрыгну - буду висеть в воздухе в позе "лотоса"; а без шапки прыжок оставался бы обычным. Может кто ни будь встречался с чем то подобным и сможет подсказать как это правильно сделать и какие возможно возникнут проблемы ?
Вот какие функции я думаю использовать: словить прыжок = RegisterForAnimationEvent() + Event OnAnimationEvent() запустить свою анимацию = SendAnimationEvent() или PlayAnimation() +FNIS
Подскажите, повесил на дракона камеру и послал далеко. ГГ остался на месте, в итоге локация не подгружается и с дракона видно только лоды. Есть ли команда которая подгружала бы локацию там где находится камера а не гг?
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №860
написано: 3 апреля 2014, 20:33
| Отредактировано: AleksTirex - 3 апреля 2014, 20:41
Например если я надену шапку, то когда подпрыгну - буду висеть в воздухе в позе "лотоса"; а без шапки прыжок оставался бы обычным.
Анимация в Скайриме работает довольно глючно. Отследить событие своей анимации вряд ли получится, разрабы об этом позаботились. Отслеживать событие прыжка тоже... не факт, что сможешь зарегистрировать и получить его событие, ведь довольно мало событий анимации можно так получить. Если же ты не против SKSE, то всё гораздо проще - следишь за нажатием кнопки "пробел", а это работает стабильно.
Добавлять свою анимацию прыжка и подменять ей дефолтную, скорее всего можно (я именно прыжки не пробовал подменять). Открываешь в СК анимацию, нужный бехавиор, ActionJamp. Дублируешь JumpRoot и вставляешь его выше родного. Там добавляешь новое условие: "subject - если надета шапка == 1". Возможно, в родной JumpRoot придётся добавить обратное условие: "если не надета шапка". (чаще всего порядок расположения анимаций движком игнорируется) Далее внутри своего JumpRoot прописываешь свои события анимации. Естественно, что СК надо запускать только после создания своего бехавиора и после обновления мастер-бехавиора FNIS-сом, иначе СК не увидит этих событий. Названия файлов анимации и события должны быть исключительно уникальными, иначе однозначно возникнут лажи (IdleJamp - так писать нельзя).
Далее уже сам крути как хочешь, но зарегистрировать и получить событие этой анимации не получится, просто не сработает, увы.
Кстати, если ты хочешь сделать последовательную анимацию прыжок+висит, то забудь, FNIS это очень глючно прописывает, и как правило, стартовая анимация (s -a) пропускается и сразу начинает работать бесконечная (+). Это происходит с шансом ~20%, а при первом запуске этой анимации за сеанс ~95%. Т.е. такую цепочку из анимаций лучше запускать отдельно, каждую анимацию отдельно, а не запускать стартовую в цепочке связанных анимаций.
********************************************
сергей007788, в играх, и Скайрим не исключение, весь мир крутится вокруг игрока, так что... не ищи ответа на этот вопрос. Разве что, телепортировать туда ГГ.
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №861
написано: 3 апреля 2014, 21:06
| Отредактировано: LordVadim - 3 апреля 2014, 21:07
Подскажите, повесил на дракона камеру и послал далеко. ГГ остался на месте, в итоге локация не подгружается и с дракона видно только лоды. Есть ли команда которая подгружала бы локацию там где находится камера а не гг?
Попробуй так:
На месте ГГ создаешь Xmarker, чтобы потом его вернуть обратно. ГГ делаешь невидимым: Game.GetPlayer().SetAlpha(0) Отключаешь коллизию: Debug.ToggleCollisions() Цепляешь камеру, отправляешь дракона Регистрируешь OnUpdate() И периодически отправляешь ГГ к Дракону: Game.GetPlayer().TranslateToRef(akDragon, 100000) ... Потом возвращаешь все обратно: Отключаешь OnUpdate(), возвращаешь ГГ к Xmarker, включаешь коллизию и видимость игрока.
LordVadim, безумный вариант: делаешь тестовый мод, копируешь в него свой ЗЭ, остальные удаляешь (!), сохраняешься и проверяешь. Поскольку твой там один (и оставь экран майн-меню), то и срабатывать он будет постоянно. Потом ESP удалишь.
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №863
написано: 3 апреля 2014, 21:40
| Отредактировано: LordVadim - 4 апреля 2014, 08:23
LordVadim, безумный вариант: делаешь тестовый мод, копируешь в него свой ЗЭ, остальные удаляешь (!), сохраняешься и проверяешь. Поскольку твой там один (и оставь экран майн-меню), то и срабатывать он будет постоянно. Потом ESP удалишь.
Так уже пробовал, почему то не сработало. Сейчас в тестовом моде хочу попробовать в остальные экраны добавить невыполнимое условие. Может так получится.
Если не ошибаюсь, стакаются не только скрипты на одном маг.эффекте, но и одинаковые маг.эффекты. Соответственно, если на одну цель наложить один эффект n-цать раз (подозреваю, что 256), двиг вылетит в трубу.
Если не ошибаюсь, стакаются не только скрипты на одном маг.эффекте, но и одинаковые маг.эффекты. Соответственно, если на одну цель наложить один эффект n-цать раз (подозреваю, что 256), двиг вылетит в трубу.
Спасибо за дракона, и еще вопросик, Когда используешь команду Translate то перемещаемый объект проходит сквозь стены, если гг поместить на этот объект то гг падает сквозь, есть только лодки из
MovableStatik сквозь них нпк не проваливаются. Есть ли какие команды или способы сделать чтобы объект к которому применена команда Translate не проходил сквозь стены. Заранее благодарен.
Изменение репутации для пользователя anton
antonOffline
Сообщение №868
написано: 4 апреля 2014, 10:47
| Отредактировано: anton - 4 апреля 2014, 11:54
AleksTirex, спасибище тебе огромное за идею с "JumpRoot" !!!
Хотя сам "JumpRoot" мне продублировать не удалось, но зато всё что внутри него - менялось как положено. Для создания полноценного эффекта пришлось задействовать ещё "FallRoot" и "LandRoot". Менял я прыжок из неподвижного состояния. В "JumpRoot" и "LandRoot" я продублировал имеющиеся эвенты и прописал в них одноразовую анимацию. В "FallRoot" - продублировал и прописал циклическую. (ну и во всех задействованных эвентах добавил проверку на надетую "шапку").
Теперь без "шапки" работает обычный игровой прыжок. Но если прыгнуть с надетой "шапкой", то запускается вводная анимация из "JupmRoot" плавно переходящая в зацикленную анимацию из "FallRoot". И анимация играет до тех пор, пока не будет активирована боевая стойка (это моё спец. условие на завершение цикличной анимации). Хотя можно сделать направленный прыжок и цикл тоже прервётся, но тогда не отыграет анимация из "LandRoot".
Всё отлично заработало, и даже скрипты писать не пришлось !
Я подозреваю, что таким же образом можно поменять анимацию атаки для уникального оружия, например такого как копьё. (взял копьё в руки и атаки двуручного меча поменялись на тыканье копьём...)
ПС: непонятно, правда, как игра определяет, когда нужно проиграть анимацию приземления, ведь прыжки могут быть c разной высоты ... (там какая то переменная "VelocityZ" для этого стоит)
Есть ли какие команды или способы сделать чтобы объект к которому применена команда Translate не проходил сквозь стены.
Заранее благодарен.
Чтобы объект перемещался с сохранением коллизии, надо делать MovableStatik с изменённым нифом, т.е. немного поправить нужный ниф:
bhkRigidBody Layer: Заменить OL_STATIC на OL_ANIM_STATIC. Layer Copy: Заменить OL_STATIC на OL_ANIM_STATIC. Motion System: Заменить MO_SYS_BOX_STABILIZED на MO_SYS_BOX.
В этом случае можно стоять на таком движущемся объекте и не проваливаясь двигаться вместе с ним, т.е. на нём. При команде TranslateTo() коллизия статиков игнорируется, и объект проходит сквозь них. К сожалению, пока неизвестен вариант это изменить без багов.
Изменение репутации для пользователя anton
antonOffline
Сообщение №870
написано: 4 апреля 2014, 16:37
| Отредактировано: anton - 4 апреля 2014, 16:51
Окончание анимации прыжка определяет движок по столкновению с коллизией
Значит в Бихейвиор файле для прыжка должен быть эвент на это событие, попробую его найти...
И ещё, мне показалось, что высота прыжка не зависит от анимации, и определяется как то иначе, возможно через переменные типа SpeedMult (такую я где то видел). Интересно, можно ли будет в прыжке подкинуть своего ГГ повыше, не реализуя это в анимации ?
Добавлено (04 Апреля 2014, 20:37) --------------------------------------------- Отчёт о проделанной работе :
1. Коллизия у "статика" сама всё таки не перемещается. (перемещаю триггером со скриптом, командой Stone.TranslateToRef(Place, StoneSpeed)) 2. К сожалению да, условия не определяют окончание циклической анимации. Ну и ладно, и так хорошо. 3. Сам не понял чего я там в Бихейвиоре собрался искать и зачем ... но зато (4.) 4. Нашёл в СK "Gameplay"->"Settings" переменную "fJumpHeightMin" отвечающую за высоту прыжка. (интересно, будет ли работать "SetAnimationVariableFloat("fJumpHeightMin", 200.0)"...) ..... --> не работает