• Страница 3 из 9
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 8
  • 9
  • »
Форум » Записи участника [anton]

Результаты поиска
anton  Offline  Сообщение №61 | Тема: Вопросы по Creation Kit. Старая тема написано: 5 сентября 2013, 08:25



362
Подскажите пожалуйста, как можно сделать такую штуку (какие функции использовать), чтобы камера отвязалась от ГГ и начала двигаться по кругу вокруг выбранного объекта ?
Это бы очень пригодилось для обзорной видео съёмки какой нибудь цели, т.к. мышкой выписывать круги нормально не получается, изображение дёрганное выходит.
Хотя, может уже есть такой мод который это делает ?

Мой Блог
anton  Offline  Сообщение №62 | Тема: Вопросы по Creation Kit. Старая тема написано: 5 сентября 2013, 19:25



362
alexwar, пока что я нашёл только пример, где камеру можно привязать к другому объекту и переместить её в пространстве к указанному маркеру, но свободно ей так не подвигаешь, маркер надо ставить в СК:

Мой Блог
anton  Offline  Сообщение №63 | Тема: Вопросы по Creation Kit. Старая тема написано: 6 сентября 2013, 07:11 | Отредактировано: anton - 6 сентября 2013, 07:12



362
alexwar, да я вот тоже думаю как лучше использовать данный метод. По идее можно через PlaceAtMe() вызвать себе штук 50 маркеров. Потом расставить их вокруг выбранного объекта (его координаты можно взять например из направленного заклинания, там вроде возвращается Target). Радиусом будет расстояние от объекта до ГГ. Ну и потом запустить в цикле TranslateTo() по этим маркерам.

А вращение камеры вокруг игрока можно настроить в "skyrim.ini" файле:
Код

[Camera]
fAutoVanityModeDelay=60.0000 ; через сколько секунд запускать вращение (0 = выключает её совсем)
fAutoVanityIncrement=0.0030 ; скорость вращения камеры (0.0030 = 40sec; Default = 12sec = 0.01)

Мой Блог
anton  Offline  Сообщение №64 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 сентября 2013, 11:19



362
Как можно сделать актёра не реагирующего на коллизии ?

А то я создал нового НПС по умолчанию (просто add->new), выставил ему флаг "IsGost". Поместил в локацию. Актёр получился невидимым (но это хорошо). Потом скриптом приаттачил к нему камеру через Game.SetCameraTarget(akCamera).
И вот когда эта камера двигается к маркеру через TranslateTo() она сбивает все горшки на своём пути.
Команда akCamera.SetMotionType( akCamera.Motion_Keyframed ) - не помогает :(

Мой Блог
anton  Offline  Сообщение №65 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 сентября 2013, 16:11



362
alexwar, камера с коллизией ... хм, очень на это похоже. Я вообще больше на невидимого актёра думал, но может и правда камера ...
Кажется, когда включается режим свободной камеры, то она тоже взаимодействует с объектами в мире. По крайней мере при упирании в стену изображение приближается, а значит какое то взаимодействие есть.

Да у меня бы уже всё идеально работало, если бы ни этот недостаток ! :(

А так при вращении камера может и тарелку уронить, и какого ни будь НПС подвинуть. facepalm

Мой Блог
anton  Offline  Сообщение №66 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 сентября 2013, 19:05 | Отредактировано: anton - 7 сентября 2013, 19:26



362
StanislavD, тут у меня особый случай. Мой актёр - это пустышка, без тела и всего прочего. Он в принципе видимым стать не может. Так было задумано, т.к. он мне нужен только для отвязки камеры от ГГ. В некотором смысле - это оператор камеры :)

Ну а теперь ТА-ДАМ, :D у меня таки получилось отключить коллизию с помощью "SetIniBool("bDisablePlayerCollision:Havok",true)" !!!
Теперь ничего не падает и камера об НПС не спотыкается ! music

Вот маленькое видео с примером работы данного мода:

Мой Блог
anton  Offline  Сообщение №67 | Тема: Вопросы по Creation Kit. Старая тема написано: 7 сентября 2013, 19:18



362
alexwar, спасибо ! сам тут сижу и балдею как оно получилось. :) и главное всего один день потратил ! такое редко бывает ^_^

Ещё одно видео, демонстрирующее процесс инициализации вращения камеры:

Мой Блог
anton  Offline  Сообщение №68 | Тема: Вопросы по Creation Kit. Старая тема написано: 9 сентября 2013, 06:36 | Отредактировано: anton - 9 сентября 2013, 06:42



362
AleksTirex, маленький уточняющий вопросик: если я создам маркер командой "ObjectReference akObject = akActor.PlaceAtMe(xMarker)", то будет ли корректным его последующее удаление через akObject.Disable() плюс akObject.Delete() ?
Я раньше всегда так делал, но вдруг есть способ получше ?

ПС: кстати я ещё раз проверил, то вроде НПС не останавливаются, и продолжают двигаться куда шли. Я запускал камеру в Вайтране, среди стражников - камера крутилась, стражники ходили...

Мой Блог
anton  Offline  Сообщение №69 | Тема: Вопросы по Creation Kit. Старая тема написано: 9 сентября 2013, 18:00 | Отредактировано: anton - 9 сентября 2013, 18:07



362
Цитата AleksTirex

там неписи стоят на месте и перебирают ногами, типа идут.



Тогда я посчитал, что это случайный глюк. В той комнате было около пяти НПС и они все потихоньку разошлись по своим делам (та же Эйла, в которую я стрельнул в начале своим спелом).

Но сегодня я смог повторить этот глюк опять. Вот мои действия (я уже внёс коррекцию с SetVehicle(), которую ты мне предложил):

0. Запустил игру с севом, где нет моего мода; добавил свой спелл консолью.
1. зашёл в Йорваскр (игра сделала автосохранение)
2. стрельнул по НПС, камера отработала отлично (посуда на месте, НПС ходят).
3. вышел из игры на рабочий стол (через "qqq")
4. зашёл в игру снова и запустил последний сейв (который Автосейв)
5. стрельнул по НПС, камера отработала отлично, НО:
5.1 когда управление вернулось игроку, посуда в радиусе действия камеры медленно поползла по одной из осей координат (по моему это глобальный Х).
5.2 НПС упёрся/споткнулся об такую посуду - и застрял, точь в точь как на моём видео. Ногами шевелит но вперёд не идёт. Когда я его пнул пару раз в другую сторону от этой посуды, НПС нормально пошёл себе дальше.

Эта бочина с посудой была и в моей версии, до предложенной модификации, и проявляется только если взять автосейв с установленным модом.
Правда в моей версии была ещё одна бочинка с Автосейвом - переставала действовать команда отключения коллизий, и посуда падала со стола толкаемая камерой.

Вот так вот. К сожалению, мне это ни о чём не говорит. Но может ты сможешь по моему описанию определить что за Полтергейст вселяется в обьекты ? mellow

ПС: кстати, когда посуда ползёт выглядит это очень эффектно ! (особенно когда её много). Медленно ползёт по столу, потом одна за одной падает на пол, и потом снова продолжает ползти, в одну сторону, сторону двери. И даже когда упирается в порог, движение не прекращается. Видно как она подёргивается на одном месте.

Мой Блог
anton  Offline  Сообщение №70 | Тема: Вопросы по Creation Kit. Старая тема написано: 10 сентября 2013, 06:51 | Отредактировано: anton - 10 сентября 2013, 07:13



362
AleksTriex, вот мой скрипт, висящий на магическом эффекте:

Код
Scriptname _Anton_CameraSpell extends activemagiceffect

Import Math

GlobalVariable Property _Anton_TranslationComplete Auto
Actor Property akCamera Auto
Actor Property akPlayer Auto
ObjectReference Property CameraPathMarker Auto
ObjectReference Property ReturnMarker Auto
ObjectReference Property CollisionMarker Auto

Int  i
Int  IterationCounter

Int   Iterations  = 64   ; на сколько частей мы поделим круг (чем больше - тем плавнее будет поворот)
Float SpeedT   = 75.0
Float SpeedR   = 180.0
Float TimeToWaitForTranslationComplete = 0.1

Float Radius
Float X_position
Float Y_position
Float Z_position
Float Angle
Float StartAngle
Float X_angle
Float Y_angle
Float Z_angle
Float PI = 3.1415926535897
Float TargetPosition_X
Float TargetPosition_Y
Float TargetPosition_Z
Float PlayerAngle_X
Float PlayerAngle_Y
Float PlayerAngle_Z
Float PlayerPosition_X
Float PlayerPosition_Y
Float PlayerPosition_Z

Auto State WaitingForCameraToBeCasted

      Event OnEffectStart(Actor akTarget, Actor akCaster)
       ; сразу блокируем возможность повторного каста этого заклинания до его завершения
       GoToState("CameraAlreadyCasted")
            
       ; заполняем рабочие переменные
       akPlayer = Game.GetPlayer()
       TargetPosition_X = akTarget.GetPositionX()
       TargetPosition_Y = akTarget.GetPositionY()
       TargetPosition_Z = akTarget.GetPositionZ()
       PlayerPosition_X = akPlayer.GetPositionX()
       PlayerPosition_Y = akPlayer.GetPositionY()
       PlayerPosition_Z = akPlayer.GetPositionZ()
       PlayerAngle_X = akPlayer.GetAngleX()
       PlayerAngle_Y = akPlayer.GetAngleY()
       PlayerAngle_Z = akPlayer.GetAngleZ()    ; 0.0
            
            
       ; вызываем невидимого актёра, к которому привяжем нашу камеру (из хранилища)
       akCamera.MoveTo( akPlayer, 50.0, 0.0, 0.0, True )
       Utility.Wait(0.1)
            
       ; вызываем невидимый маркер, к которому будем двигать нашу камеру (из хранилища)
       CameraPathMarker.MoveTo( akPlayer, 50.0, 0.0, 0.0, True )
       Utility.Wait(0.1)
            
       ; создаём невидимый маркер, к которому привяжем коллизию Актёра с камерой
       CollisionMarker = akCamera.PlaceAtMe( ReturnMarker, 1 )
       Utility.Wait(0.1)
            
       ; отключаем управление ГГ
       Game.DisablePlayerControls(True, True, True, True, True, False, True, True) ; Disable all controls except looking (4) and Menu (6).
       Utility.Wait(0.1)

       ; привязываем камеру к нашему обьекту "Camera"
       Game.SetCameraTarget(akCamera)
       Game.ForceThirdPerson()
       Utility.Wait(0.1)
            
       ; усаживаем Актёра на маркер, чтобы его коллизия оставалась на месте и не двигалась
       akCamera.SetVehicle(CollisionMarker)
       Utility.Wait(0.1)
            
       ; вычисляем радиус круга, по которому будем вращать камеру
       Radius = sqrt(  pow( PlayerPosition_X - TargetPosition_X, 2 ) + \       
           pow( PlayerPosition_Y - TargetPosition_Y, 2 ) + \
           pow( PlayerPosition_Z - TargetPosition_Z, 2 ) )
       ; добавка к радиусу, чтобы камера свободно обходила ГГ сзади
       Radius += 50
            
       ; угол расположения Камеры относительно Цели в глобальной игровой системе координат
        If (PlayerPosition_Y - TargetPosition_Y) >= 0
    StartAngle = acos( (PlayerPosition_X - TargetPosition_X) / Radius )
   Else
    StartAngle = 180.0 + (180.0 - acos( (PlayerPosition_X - TargetPosition_X) / Radius ) )
   EndIf

       Debug.Notification(" [CameraSP]StartAngle=" + StartAngle + "PlayerAngleZ=" + PlayerAngle_Z + "Radius=" + Radius)
            
       ; =====================================================================
       ; перемещаем камеру по заданному маршруту
       ; =====================================================================
       i = 0
       While i < 1
        IterationCounter = 0
        While IterationCounter <= Iterations
         ; вычисляем новое положение маркера для камеры
         Angle = ( 360.0 / Iterations as Float ) * IterationCounter
              
         X_position = Radius * cos(Angle - StartAngle)
         Y_position = Radius * sin(Angle - StartAngle)
         Z_position = 0.0
              
         X_angle = 0.0
         Y_angle = 0.0
         Z_angle = -Angle
              
         ; перемещаем маркер в новую позицию
         CameraPathMarker.TranslateTo(  TargetPosition_X + X_position, \
                       TargetPosition_Y + Y_position, \
                       TargetPosition_Z + Z_position, \
                       PlayerAngle_X + X_angle, \
                       PlayerAngle_Y + Y_angle, \
                       PlayerAngle_Z + Z_angle, \
                       100000.0, 360.0 )
              
         ; двигаем камеру к маркеру
         if IterationCounter == 0
          akCamera.TranslateToRef(CameraPathMarker, 100000.0, 360.0)
         Else
          akCamera.TranslateToRef(CameraPathMarker, SpeedT, SpeedR)
         EndIf
              
         ; ждём, пока камера выполнит перемещение к маркеру      
         Utility.Wait(TimeToWaitForTranslationComplete)

         IterationCounter += 1
        EndWhile
        i += 1
       EndWhile
            
       ; отвязываем коллизию Актёра с камерой от маркера
       akCamera.SetVehicle( None )
       Utility.Wait(0.1)
            
       ; убираем вызванную камеру и маркеры
       akCamera.MoveTo( ReturnMarker, 0.0, 0.0, 0.0, True )
       CameraPathMarker.MoveTo( ReturnMarker, 0.0, 0.0, 0.0, True )
       CollisionMarker.Disable()
       CollisionMarker.Delete()
       Utility.Wait(0.1)
            
       ; возвращаем управление игроку      
       Game.SetCameraTarget(akPlayer)      
       Game.ForceFirstPerson()      
       Game.EnablePlayerControls()
       Utility.Wait(0.1)
      endEvent

      Event OnEffectFinish(Actor akTarget, Actor akCaster)
      endEvent

EndState

State CameraAlreadyCasted

      Event OnEffectStart(Actor akTarget, Actor akCaster)
      endEvent

      Event OnEffectFinish(Actor akTarget, Actor akCaster)
       ; отвязываем коллизию Актёра с камерой от маркера
       akCamera.SetVehicle( None )
       Utility.Wait(0.1)
       ; убираем вызванную камеру и маркеры
       akCamera.MoveTo( ReturnMarker, 0.0, 0.0, 0.0, True )
       CameraPathMarker.MoveTo( ReturnMarker, 0.0, 0.0, 0.0, True )
       CollisionMarker.Disable()
       CollisionMarker.Delete()
       Utility.Wait(0.1)
       ; переводим скрипт назад в рабочий режим, чтобы камеру можно было вызвать снова
       GoToState("WaitingForCameraToBeCasted")
      endEvent
           
EndState


ПС: сам Актёр и два маркера уже добавлены в игру в спец ячейку, и оттуда вызываются при касте и по окончании эффекта возвращаются назад.

Мой Блог
anton  Offline  Сообщение №71 | Тема: Вопросы по Creation Kit. Старая тема написано: 10 сентября 2013, 14:48 | Отредактировано: anton - 10 сентября 2013, 14:52



362
AleksTirex, спасибо за подробный анализ, но по некоторым пунктам я хочу попробовать оправдаться:
Цитата AleksTirex

Скорее всего, актёр-камера не будет удаляться из помещения


Это интересно, проверю обязательно ... это может быть из за использования другой ячейки для хранения объектов ?
(я не уверен что смогу сделать своего Актёра назад видимым, я там столько всего наменял, когда пытался избавить его от коллизии... :) )

Мой Блог
anton  Offline  Сообщение №72 | Тема: Вопросы по Creation Kit. Старая тема написано: 10 сентября 2013, 18:24 | Отредактировано: anton - 10 сентября 2013, 18:49



362
Цитата AleksTirex

объект начинает как бы следовать за перемещающейся целью


Так на этом эффекте весь мой мод и построен ! :) Только я камеру постоянно подталкиваю, на тот случай если она всё таки догонит свой маркер.

Да, вот ещё забыл отметить, сегодня крутил камеру вокруг лошадки, так камера эту лошадку постоянно двигала, но когда я убрал "SetVihecle()" и вернул "SetIniBool("bDisablePlayerCollision:Havok",true)" всё стало нормально.
Хотя коллизии со стенами, деревьями и землёй никуда не делись. Надо будет попробовать как то найти НИФ файл этой камеры, грохнуть оттуда коллизионный блок и посмотреть что получится...

Невидимку засветить мне пока не удалось. Добавил в СК ему кейворд "ActorTypeGhost", добавил способность "GhostAbility" и "GhostAbilityViolet" - ничего. Наверное этот эффект на нём надо через "myeffect.play()" запускать...

Ещё немного похвалюсь: сегодня модернизировал скрипт системой динамического расчёта квоты времени на выполнение камерой заданного интервала перемещения. Теперь круги получаются практически идеальные, прямо "как доктор прописал" ! (особенно по сравнению с тем что было :) )
Вот как я это сделал:

Мой Блог
anton  Offline  Сообщение №73 | Тема: Вопросы по Creation Kit. Старая тема написано: 10 сентября 2013, 20:40 | Отредактировано: anton - 10 сентября 2013, 20:41



362
AleksTirex, я нацепил таки спецэффект на актёра-оператора. Эффект появляется и движется вместе с "оператором", и пропадает, когда "оператор" возвращается назад, в свою ячейку. Так что вроде бы всё работает как надо.

alexwar, ага, осталось только найти её, если она вообще существует.

Мой Блог
anton  Offline  Сообщение №74 | Тема: Вопросы по Creation Kit. Старая тема написано: 11 сентября 2013, 09:11



362
Нашёл в СК ветку "Collision Objects", и в ней объект "L_CAMERA". Внутри свойств этого объекта есть большой список того, с чем эта камера будет взаимодействовать в игре (на сколько я понял по логике).
И в описании этого объекта есть запись, что этот объект и есть камера игрока. Выходит это то что мне нужно (ещё не успел проверить).

Я думаю если удалить из этого списка все записи, то камера перестанет взаимодействовать с миром и будет плавно вертеться вокруг игрока.
Мне интересно, если кто работал с такими объектами - прав ли я в своей догадке, можно ли удалить всё что там есть, или что то нужно оставить ?

Мой Блог
anton  Offline  Сообщение №75 | Тема: Вопросы по Creation Kit. Старая тема написано: 11 сентября 2013, 17:13 | Отредактировано: anton - 11 сентября 2013, 18:23



362
Цитата alexwar

может все же дублировать...а то удалять как то стремно



Та ради работы моего ненаглядного мода ничего не жалко ! :D
(тем более что копировать всё равно некуда, объект коллизий для камеры имеет строго заданное имя, поэтому копия с другим именем просто ни на что влиять не будет)

А теперь отчёт о проделанной работе:
- опыт с очисткой списка коллизий камеры завершился полной победой разума над окружающей действительностью !!! music
Теперь камера проходит сквозь объекты как по маслу и не взаимодействует с ними !

Так что по большому счёту мод уже готов.
Теперь осталось самое нудное - проверка его работы в реальных условиях и выявление "особенностей" ... не найдётся ли желающих помочь мне в этом деле ? ^_^

(одну "особенность" я уже споймал - моя формула расчёта времени не очень хорошо работает на очень маленьких или очень больших дистанциях до цели, так что с коэффициентом придётся ещё немного поработать ...)

PS: немного подправил, теперь если движение камеры будет в радиусе до 2000 юнитов, всё будет плавненько. (для справки: высота НПС где то 120-130 юнитов)

Мой Блог
anton  Offline  Сообщение №76 | Тема: Вопросы по Creation Kit. Старая тема написано: 16 сентября 2013, 11:10 | Отредактировано: anton - 16 сентября 2013, 12:14



362
Цитата AleksTirex

использовать дефолтную вращающуюся камеру


Попробовал, но ничего толкового не получилось.
Пока действует магический эффект - обзорная камера вообще не включается.
Единственно как её можно применить, это выставить в ИНИ файле задержку на включение в секунд пять и потом в игре подойти к объекту съёмки и подождать. Но снимать не очень удобно т.к. при нажатии на кнопку записи эта камера автоматом отключается.

Ну а тем временем я снова переделал подход к движению. Вернулся к идее с OnTranslationComplete(). Только ловлю я его теперь не от камеры, а от маркера. Маркер двигается до выбранной точки, генерит это событие, а потом уже камера едет к этому маркеру (скорости маркера и камеры - одинаковы). Тем временем камеру я не жду, а назначаю маркеру новую точку и запускаю движение. Таким образом камера постоянно догоняет маркер, постоянно отставая от него на один шаг (сегмент круга).

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

Мой Блог
anton  Offline  Сообщение №77 | Тема: Вопросы по скриптам Papyrus написано: 6 октября 2013, 10:35



362
С помощью команды Debug.SendAnimationEvent(Game.GetPlayer(), "MyAnimation") я запускаю свою анимацию.
Как определить момент времени, когда она закончится ? (чтобы вовремя запустить другую анимацию)

Сейчас у меня там просто Utility.Wait(30.0) стоит, потому что я знаю продолжительность этой анимации.

Я так понял, что для этого можно использовать функцию RegisterForAnimationEvent(). Но что ей указать в параметре asEventName ? Если имя своей анимации указать, то словится её начало, а нужен конец...

Мой Блог
anton  Offline  Сообщение №78 | Тема: Вопросы по скриптам Papyrus написано: 7 октября 2013, 17:34 | Отредактировано: anton - 7 октября 2013, 17:35



362
Artem13, в анимациях нельзя прописать свои "ивенты" (я такого до сих пор не встречал), но с помощью "аннотаций" есть возможность выполнять кое какие движения, заданные где то в дебрях BHV файлов. Их совсем немного (около 10) и в основном они используются для синхронизации движений ног и вынимания оружия. Да, ещё звуки можно в "аннотациях" прописать.
А "Reset" и "IdleFurnitureExit" как мне кажется это не что иное как те же анимации. Только они вызываются в связке с основной анимацией, при её завершении.

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

Добавлено (07.10.2013, 21:34)
---------------------------------------------
Подскажите, можно ли в Папирусе можно создать двухмерный массив ( матрицу [m][n]) не прибегая в "виртуализации" ?

И ещё, можно ли как нибудь быстро заполнить массив, не указывая каждый элемент, т.е. можно ли как то записать Array = {1,2,3}, а не Array[1]=1, Array[2]=2, Array[3]=3 ?

Мой Блог
anton  Offline  Сообщение №79 | Тема: Вопросы по скриптам Papyrus написано: 8 октября 2013, 08:54



362
Цитата AleksTirex

Если это для времени анимации


Нет, не для времени анимации, но для определения какая анимация может запустится следующей, в зависимости от того, какая только что закончилась. :)

В общем, идея мода такая:
Должно получиться развлекалочка, типа "Emotes", как оно есть в ММО типа Тера, Аион и т.п..
ГГ получает "малую способность", при активации которой стартует моя анимация (а точнее их набор) добавленные в игру с помощью FNIS. Анимация имеет начало, несколько лупов, которые рандомно меняются, и конец. Анимация играет бесконечно, до тех пор, пока пользователь снова не нажмёт кнопку использования "малой способности". Только тогда проигрывается конец.
Основа уже есть и прекрасно работает. Осталось подкорректировать анимации, чтобы были плавные переходы, и написать правила их вызова. Вот чтобы эти правила было легче писать я и хотел создать матрицу допустимых вариантов, и потом после каждого рандома проверять, можно ли запустить новую анимацию, или запустить рандом снова.

Мой Блог
anton  Offline  Сообщение №80 | Тема: Вопросы по скриптам Papyrus написано: 8 октября 2013, 18:30 | Отредактировано: anton - 8 октября 2013, 18:32



362
Цитата AleksTirex

а что, есть несовместимые анимации? И много ли таких вариантов?



Ещё как есть, и чем больше вариантов анимаций - тем больше несовместимостей.

К примеру, у меня уже готовы 4 повторяемые анимации:
(1) Есть луп покачивания в положении лёжа.
(2) Есть переход из положения лёжа в положение сидя.
(3) Есть луп покачивания в положении сидя.
(4) Есть переход из положения сидя в положение лёжа.

Так вот:
- если выполнилась анимация (1), то следующей можно выполнить только анимации (1) или (2).
- если выполнилась анимация (2), то следующей можно выполнить только анимацию (3).
- если выполнилась анимация (3), то следующей можно выполнить только анимации (3) или (4).
- если выполнилась анимация (4), то следующей можно выполнить только анимацию (1).

Если эти правила не прописать, переходы будут дёрганные и не логичные. Выглядеть это будет ужасно. Я проверял :)

Как их упорядочить пока не представляю. Тем более, что на подходе ещё 4 анимации. А там может и больше добавлю...

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

Алгоритм вроде бы достаточно линеен и прост. Реализовать не сложно. Жаль только что с массивами подизвратиться придётся.

Мой Блог
anton  Offline  Сообщение №81 | Тема: Вопросы по скриптам Papyrus написано: 29 октября 2013, 08:54 | Отредактировано: anton - 29 октября 2013, 08:56



362
Подскажите, как можно в скрипте указать на обьект типа "Art Object" находящийся в разделе "Miscellanious" ?
Пробовал тип "MiscObject Property _MyNewSuperArtObject Auto" - но СК его не видит, и заполнить свойство не даёт.

Этот обьект мне нужен, т.к. в его НИФ файл можно напихать анимаций, и мне хотелось бы в последствии перебирать эту анимацию скриптом, с помощью функции "PlayGamebryoAnimation()"

Мой Блог
anton  Offline  Сообщение №82 | Тема: Вопросы по скриптам Papyrus написано: 29 октября 2013, 14:34 | Отредактировано: anton - 29 октября 2013, 19:10



362
Цитата AleksTirex

ArtObject akArtObject = ListArtObject.GetAt(iIndex) as ArtObject


Так в этом то всё и дело, что нету такого типа как  "ArtObject" и компилятор ругается... :(

Попробовал: form myForm = Game.GetFormFromFile(0x00000D62, "_MyMod.esp") as Form
В переменной myForm что то появилось, но что - не знаю как проверить (и анимация с ней не меняется...).

Я тут ещё подумал, и мне кажется что понадобится не только FormID но и ObjectID, т.к. именно он отвечает за уже существующий обьект в игре, и именно ему надо будет давать команду на смену анимации.
А вот как его из  FormID получить пока не знаю...

Мой Блог
anton  Offline  Сообщение №83 | Тема: Вопросы по скриптам Papyrus написано: 30 октября 2013, 10:50 | Отредактировано: anton - 30 октября 2013, 10:52



362
Цитата AleksTirex

ObjectReference closestObject = Game.FindClosestReferenceOfTypeFromRef(myForm, Game.GetPlayer(), 512.0)


Ничего у меня не получилось. Как я только не добавлял обьект в поиск, всё равно ничего не находится. Ни арт обьект, ни обьект самой одежды, ни через прямое указание на форму, ни через форм лист.
В общем всё равно мне кажется в "Art Object" анимацию таким способом не изменить. У меня функция "PlayGamebryoAnimation()" работала только на "активаторах" или чём то относящемуся к типу "Object Reference". Так что пока заброшу эту идею, трёх анимаций управляемых ванильным BHV файлом и так будет достаточно...

У меня тут вопрос попроще образовался: Как можно заставить Актёра скриптом "ойкнуть" в заданное время, как будто его щипнули/ударили ?
(звука типа "Ай" среди звуковых эффектов нету, может можно его как то виртуально ударить, чтобы воспроизвёлся стандартный звук НСП для такой ситуации...)

Мой Блог
anton  Offline  Сообщение №84 | Тема: Вопросы по скриптам Papyrus написано: 30 октября 2013, 15:16



362
Цитата AleksTirex

Для этих целей есть команда Say()

Да эта команда хоть что то бы произнесла. Выбирал на угад несколько ванильных топиков, но ГГ молчит как рыба. Наверное сделаю проще, через "саунд маркер". Запишу свою Wav-ку и буду её запускать...

Мой Блог
anton  Offline  Сообщение №85 | Тема: Вопросы по скриптам Papyrus написано: 30 октября 2013, 20:36



362
Цитата AleksTirex

И во время боя и нет, маг.эффекты сами будут меняться,


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

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

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

Мой Блог
anton  Offline  Сообщение №86 | Тема: Вопросы по скриптам Papyrus написано: 30 октября 2013, 21:52



362
Цитата AleksTirex

А вот теперь повесь на свой эффект условие

Так я так и делал... именно на "маг-эффект" внутри окошка свойств каждого "маг-эффекта" ...  и эффект включается только при изначальном совпадении условия и один раз и на всегда.

Может надо на "маг-эффект", но внутри окошка свойств "спела", запускающего их... завтра проверю.

Мой Блог
anton  Offline  Сообщение №87 | Тема: Вопросы по скриптам Papyrus написано: 31 октября 2013, 08:59



362
Artem13AleksTirex,  ДАааааа !!!!!   good    ТАК    работает !!!!!      ok

Абалдеть просто !   сколько новых возможностей открывается !!!   ^_^

( так всё, у меня начинается очередной приступ счастья, ближайшие пару часов меня не беспокоить !  :D )

Мой Блог
anton  Offline  Сообщение №88 | Тема: Вопросы по скриптам Papyrus написано: 31 октября 2013, 14:17



362
А у меня ещё вопросы возникли:
- по событию isInCombat или GetCombatState когти вылазят только если ударить кого то, а хотелось бы чтобы вылазили при принятии ГГ боевой стойки. Какую ещё переменную можно попробовать ?
- как проверить, что перк, назначенный скриптом, работает ? Я назначаю FistsOfSteel и DeftMovement, но они нигде не отображаются... По идее должен увеличится урон при рукопашном бое, но если с мечом игра урон показывает, то без оружия пишет просто "0" и всё. В списке активных способностей ГГ тоже пусто.

Мой Блог
anton  Offline  Сообщение №89 | Тема: Вопросы по скриптам Papyrus написано: 31 октября 2013, 15:58 | Отредактировано: anton - 31 октября 2013, 16:04



362
Цитата LordVadim

Сходи и отлупи кого нибудь

Так и сделал, разница вроде есть. Перки усилил, так что теперь и стражника в рукопашку можно попробовать налупить ! :)

Можете меня поздравить ! Теперь мод полностью готов, и именно так как мне и хотелось !
Реализована и интерактивная анимация предмета одежды, и добавлена анимация для ГГ при надевании, и озвучены
события, связанные с предметом (в том числе и "Ай" для ГГ), спецэффекты присутствуют, перки - на месте. Ляпота !...
Осталось только играть и получать удовольствие  ^_^ !

AleksTirex, тебе, как всегда, огромное спасибо за помощь и вагон печенек впридачу ! :) что бы я без тебя делал !

Мой Блог
anton  Offline  Сообщение №90 | Тема: Вопросы по скриптам Papyrus написано: 21 ноября 2013, 08:53



362
После релиза мода с "когтями", благодаря отзывам пользователей, у меня появилось два вопроса:

1. А возможно ли сделать так, чтобы надетый предмет невозможно было снять?
(цель: когда ГГ попадает например в тюрьму, инвентарь у него отбирают, а вот когти должны остаться)
(сейчас когти имеют тип - драгоценность, занимают предпоследний слот (который перед "FX01"))

2. Как поймать момент, когда магический эффект закончился (и пропадёт его АртОбьект) ?
Я хотел бы вызвать коготь другой формы, когда полностью скроется предыдущая (а значит закончится маг. эффект её вызвавший).
Я написал в спеле для вызова маг. эффекта проверку с "HasMagicEffect", но она не работает.
(т.е. если проверять на 0 - новый эффект никогда не вызывается, если на 1 - вызывается всегда, даже если проверяемый маг. эффект ещё не закончен)

Мой Блог
Форум » Записи участника [anton]
  • Страница 3 из 9
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 8
  • 9
  • »
Поиск:





Ответ на жалобу смотрите в разделе жалоб