Форум » TES V: Skyrim » Библиотека модмейкера » Вопросы по Creation Kit. Старая тема (Тут вы можете задать вопросы по редактору Скайрима)

Вопросы по Creation Kit. Старая тема
Морфин  Сообщение №1 написано: 7 февраля 2012, 21:38

Тема по работе с редактором Skyrim Creation Kit.

----------
Полезная информация:

Видео уроки:


Предупреждаю! За оффтоп и флуд буду наказывать беспощадно!

AleksTirex  Offline  Сообщение №5461 написано: 9 сентября 2013, 19:05


Архимаг


371
Цитата anton

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



Disable() - это да, здесь только прорисовка отключается, а сам объект остаётся в игре.
Но Delete() удаляет объект из игры навсегда, т.е. не остаётся записей в сохранке (это в теории, на практике проверить такое крайне затруднительно).

BileraON  Offline  Сообщение №5462 написано: 9 сентября 2013, 23:16 | Отредактировано: BileraON - 9 сентября 2013, 23:18



41
AleksTirex спасибо большое! У меня получилось, как вы и писали вещей больше нет good good :



Но у меня остался один вопрос:

Цитата AleksTirex

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



Как я понял речь идет о файле "aamyOutfitManaken", так вот как его выдрать из Creation Kit? И по какому адресу копировать?

По аналогиии с текстурами это по адресу: \Skyrim\Data\Textures, но ведь не в текстуры же его пихать unsure

AleksTirex  Offline  Сообщение №5463 написано: 10 сентября 2013, 01:48


Архимаг


371
Цитата BileraON

Как я понял речь идет о файле "aamyOutfitManaken", так вот как его выдрать из Creation Kit? И по какому адресу копировать?  По аналогиии с текстурами это по адресу: \Skyrim\Data\Textures, но ведь не в текстуры же его пихать



Не-не, aamyOutfitManaken - это "список одежды", просто "параметр" в моде. Речь ведь шла о скриптах, так в Скайриме скрипты не просто объект, но и отдельный файл (!). Ты писал скрипт с названием aamyManakenXScript, так вот в папке Scripts лежит файл твоего скрипта под названием aamyManakenXScript.pex
Его надо добавлять вместе с ESP, текстурами, нифами, и естественно, в своей папке Data\Scripts\aamyManakenXScript.pex
(текстуры ты добавляешь так: Data\Textures\myMod\LaLaLa.dds)

Stafejew  Offline  Сообщение №5464 написано: 10 сентября 2013, 05:29



21
Цитата AleksTirex

Проверить правильность кейвордов на предмете.

Если я правильно понимаю, то в строке зачарование должно быть "NONE"

Причем оригинальные повязки на лицо, очки из Драгонборна, тоже не зачаровываются, хотя присутствуют в меню зачарования.

anton  Offline  Сообщение №5465 написано: 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


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

Мой Блог
mayor  Offline  Сообщение №5466 написано: 10 сентября 2013, 11:56



194
можно как то музыку активатором включать,выключать?

AleksTirex  Offline  Сообщение №5467 написано: 10 сентября 2013, 12:27


Архимаг


371
Антон, должен тебя огорчить - скрипт не рабочий, точнее некорректно работающий. При такой системе неизбежны рывки камеры, толком вращения не будет, равномерность под очень большим сомнением.
 
1. "сразу блокируем возможность повторного каста этого заклинания до его завершения " - это заблуждение, статусы ничего не заблокируют. При повторном запуске заклинания возникает новый эффект с новым скриптом, и поэтому никакие статусы или переменные на второй скрипт не повлияют. Получится два параллельно работающих скрипта, результат очевиден.
 
2. "ждём, пока камера выполнит перемещение к маркеру Utility.Wait(TimeToWaitForTranslationComplete) " - отсутствие синхронизации, полностью переместилась или ещё где-то в пути, а таймер отработал и запустил новое перемещение. Неизбежны рывки. Для синхронизации можно использовать событие OnTranslationComplete() на актёре-камере, которое будет запускать следующее перемещение.
 
3. Событие финиша надо удалить, оно даст ненужный баг, а толку от него ноль.
 
4. Сам расчёт кругового движения сделан не совсем правильно, толком вращения не будет. Если у тебя вращается, то это исключительно частный случай и на другом железе будет лажа.
 
5. Скорее всего, актёр-камера не будет удаляться из помещения, MoveTo не отработает (сделай камеру видимой и проверь). Возможно, это и есть твой полтергейст.

Если будет время, то я попробую изменить/поправить скрипт.

********************
 
mayor, http://www.creationkit.com/Add_-_MusicType

mayor  Offline  Сообщение №5468 написано: 10 сентября 2013, 12:37



194
AleksTirex, один черт,я не понял как это сделать..я только поня,что с помощью скрипта и что скрипт повесить на рычаг..в самих скриптах я полнейший ноль..

AleksTirex  Offline  Сообщение №5469 написано: 10 сентября 2013, 13:21


Архимаг


371
MusicType Property myMusic auto
bool bDone
 
Event OnActivate(ObjectReference akActionRef)
  if bDone == false
    myMusic.Add()
    bDone = true
  elseif bDone == true
    myMusic.Remove()
    bDone = false
  endif
EndEvent

Artem13  Offline  Сообщение №5470 написано: 10 сентября 2013, 13:50


Mercenaries. Со смертью на ты.


Други, я, конечно, дико извиняюсь, но для Скриптов есть отдельная спец. тема. Нахфига всё в кучу тут валить, а? Потом замучаешься искать нужное.

Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
mayor  Offline  Сообщение №5471 написано: 10 сентября 2013, 13:54



194
Artem13, я там задавал когда то,никто не отвечал.туда никто и не заходит.да и изначально я спросил "как сделать" и понятия не имел,что это через скрипт делается)

Добавлено (10.09.2013, 17:54)
---------------------------------------------
AleksTirex, спасибо большое


AleksTirex  Offline  Сообщение №5472 написано: 10 сентября 2013, 14:21 | Отредактировано: AleksTirex - 10 сентября 2013, 14:21


Архимаг


371
Цитата Artem13

Други, я, конечно, дико извиняюсь, но для Скриптов есть отдельная спец. тема. Нахфига всё в кучу тут валить, а? Потом замучаешься искать нужное.



Здесь ведь есть модератор, надо чтобы он перенёс эти посты в нужную тему. ok

*******
mayor, практически любое действие: переключение, добавление и удаление, одевание и снятие, включение и выключение, и т.д. - всё это делается на основе скриптов (даже стадии квестов переключаются скриптами). ;)

anton  Offline  Сообщение №5473 написано: 10 сентября 2013, 14:48 | Отредактировано: anton - 10 сентября 2013, 14:52



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

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


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

Мой Блог
AleksTirex  Offline  Сообщение №5474 написано: 10 сентября 2013, 16:37


Архимаг


371
Цитата anton

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



Нет, другая ячейка не причём, там скорее проблема в привязке к маркеру + неотработка трансляции + телепортация. Они иногда получаются "несовместимы", т.е. мешают друг другу. Телепортацию можно исключить из скрипта - просто создавать нового актёра и маркеры, потом удалять. Трансляцию заменить на другой принцип (напишу ниже).
Чтобы увидеть невидимого актёра, надо повесить на него способность типа Ghost, тогда по шлейфу эффекта можно определить наличие оного в локации.
 
Антон, у трансляции есть особенность или баг (?) : когда транслируешь не по координатам, а на цель, то объект начинает как бы следовать за перемещающейся целью. Возможно, что это баг, но у меня такое срабатывало. Попробуй этот вариант. Делаешь маленькую скорость трансляции (100-250) на цель-маркер, а саму эту цель постепенно перемещаешь по маршруту не давая её догнать, тогда возможно, что будет достаточно одного запуска трансляции на весь процесс. Более плавного варианта придумать сложно.

anton  Offline  Сообщение №5475 написано: 10 сентября 2013, 18:24 | Отредактировано: anton - 10 сентября 2013, 18:49



362
Цитата AleksTirex

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


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

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

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

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

Мой Блог
alexwar  Offline  Сообщение №5476 написано: 10 сентября 2013, 19:30


Freelancer - White Raven


Цитата anton

Надо будет попробовать как то найти НИФ файл этой камеры

идея вроде отличная


Мой блог-VIDEO-ALEXWAR
The Elder Scrolls Online
anton  Offline  Сообщение №5477 написано: 10 сентября 2013, 20:40 | Отредактировано: anton - 10 сентября 2013, 20:41



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

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

Мой Блог
Ichimar  Offline  Сообщение №5478 написано: 10 сентября 2013, 22:20



20
Народ, копировал измерение, очистил его, создал 2 комнаты. Первая комната трофейная, а 2 для сна крафта и шмоток, но когда я сохраняюсь у меня сохраняется она рандомными отрывками, либо подчти полная одна комната, либо подчти полная другая, что я не так делаю, как мне сохранить обе комнаты и чтобы все было хорошо объясните плиз! :(

Imperator3  Offline  Сообщение №5479 написано: 10 сентября 2013, 22:33 | Отредактировано: Imperator3 - 10 сентября 2013, 22:36





Ichimar, То есть при заходе в комнату ты видишь лишь часть моделей, но стоит отойти в другое место - и ты уже видишь другие модели? Ты не падаешь в пустоту? Если все верно, то делаешь так: кликаешь View > Show/hide window:

В появившемся окне отмечаешь галочкой Portals and Rooms:

Закрываешь окно. После этого можно увидеть, что в Render Window появились большие кубы:

Они называются Room Marker. Удаляешь их всех. После этого  можно будет встретить вот такие полупрозрачные модели с черной обводкой, они по большей части стоят в проходах:

Это Portal Marker. Их ты тоже удаляешь. После этого все должно быть нормально.

Ichimar  Offline  Сообщение №5480 написано: 11 сентября 2013, 08:21



20
Imperator3, нет я захожу в комнату и вижу что одна комната есть а от другой только там часть потолка или пара маникенов только есть и все

mayor  Offline  Сообщение №5481 написано: 11 сентября 2013, 08:55



194
Ichimar, ты каждый раз новое сохранение делал в ск?при загрузке,выбери свой плагин и нажми set as active file.что то типо того

Ichimar  Offline  Сообщение №5482 написано: 11 сентября 2013, 09:03



20
mayor, да каждый раз новое, в каком окне это выбрать и что это даст?

anton  Offline  Сообщение №5483 написано: 11 сентября 2013, 09:11



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

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

Мой Блог
Artem13  Offline  Сообщение №5484 написано: 11 сентября 2013, 09:20


Mercenaries. Со смертью на ты.


Ichimar, прежде чем задавать вопросы здесь, советую ВНИМАТЕЛЬНО изучить это По вашему последнему вопросу ответ в сообщении номер 2 под спойлером "Редактирование существующего плагина"

anton, аккуратнее, если потом соберёшься поиграть :) Я подозреваю, что эти настройки влияют на взаимодействие игрока в виде от первого лица с миром.

Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Ichimar  Offline  Сообщение №5485 написано: 11 сентября 2013, 09:40



20
Artem13, не сочти за труд ткни носом что изучить, а то я 1 раз формумом пользуюсь не понимаю еще ни черта ) :mellow:

StanislavD  Offline  Сообщение №5486 написано: 11 сентября 2013, 10:21



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

mayor  Offline  Сообщение №5487 написано: 11 сентября 2013, 11:18



194
Ichimar, когда выбираешь в ск какие файлы будешь загружать.короче при старте ск.сделав это,ты будешь все изменения сохранять в один (свой) плагин.сейчас ты при каждом перезапуске делаешь новое сохранение и они потом перебивают изменения друг друга.выдели свой плагин и сделай активным

Ichimar  Offline  Сообщение №5488 написано: 11 сентября 2013, 11:20



20
mayor Я вообше из стима удалил и скайрим и СК так как я запутался, буду сегодня с 0 пробовать делать, и кстати как обновить стимовский ск до последней версии?

mayor  Offline  Сообщение №5489 написано: 11 сентября 2013, 11:41



194
Ichimar, так ты спрашивай у людей совета.мне лично тут часто помогают хорошие люди.на счет стима не подскажу,я парень с повязкой на глазу и попугаем на плече))

Ichimar  Offline  Сообщение №5490 написано: 11 сентября 2013, 13:21



20
Ребят поможете с СК стимовским?

Форум » TES V: Skyrim » Библиотека модмейкера » Вопросы по Creation Kit. Старая тема (Тут вы можете задать вопросы по редактору Скайрима)
Поиск:





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