Важно 9 мая - День Победы - 80-летия Великой Победы!
  • 676
  • 5
Поздравляю всех, кому искренне небезразличен этот день! С днём Великой Победы!
Новости Анонс The Elder Scrolls VI уже этим летом?
  • 506
  • 1
По данным инсайдера eXtas1s, Bethesda может впервые показать The Elder Scrolls VI летом 2025 года Обсуждается возможность анонса игры на одной из крупных презентаций Xbox - в июне или августе...
Новости Of Ash and Steel: разработка в цифрах
  • 478
  • 0
На днях авторы игры Of Ash and Steel поблагодарили игроков за поддержку и положительные отклики, а также поделились цифрами во время разработки. В игре будут: 300+ квестов; 30 000+ строк...
Новости Clair Obscur: Expedition 33 – новая ролевая игра, ломающая стереотипы
  • 706
  • 3
Clair Obscur: Expedition 33 – уникальная ролевая игра, которая могла появиться только у инди-разработчика Раз в год Художница просыпается и рисует на Монолите. Выводит свое проклятое число. И...

В процессе Вызов компаньона

𝒸𝓇𝒶𝒻𝓉𝓎⁷⁷

Злобный Ёж
Команда форума
Куратор раздела
Пользователь VIP
Локализатор
 
Модостроитель
Участник форума
Регистрация
6 Дек 2018
Сообщения
2.495
Реакции
4.659
Баллы
476
Лучшие ответы
30
#11
@UberSoldat777, привет.
Неважно, каким образом будет реализовываться в игре изучение (получение) Заклинания вызова для компаньона и его работа, будь то добавление каждому из них
в отдельности возможности быть призванным с помощью магического эффекта путем установки флага Summonable
в1 в1.jpg
или реализация эффекта призыва путем добавления возможности телепортации с помощью скрипта и дополнительного заклинания для всех потенциальных компаньонов непосредственно в игре, как в моде Recall Followers (видео в предыдущем посте), наши действия по созданию (изменению) заклинания и его эффекта будут практически идентичны.

Итак, нам требуется создать (или изменить имеющееся) Заклинание призыва для компаньона, при котором во время каста руки главного героя будут свободны (или заняты оружием) и добавить свист в качестве звукового сопровождения.

В моем примере каст Заклинания "Вызов компаньонов" будет осуществляться с использованием Малой способности без затрат маны.

Создание заклинания "Вызов компаньонов".

Запускаем наш Creation Kit и в окне Object Window открываем вкладку Magic-Spell, на любой строке кликаем ПКМ и в выпадающем списке нажимаем New
в2 в2.jpg
и создаем наше заклинание.
в3 в3.jpg
В поле ID прописываем уникальный идентификатор для этого заклинания. У меня это _aaaCallFollower01Spell.
В поле Name пишем название заклинания. У меня это "Вызов компаньонов" (на кракозябры не обращай внимания).
В поле Type из выпадающего списка я выбираю Малая способность (этот тип дает неограниченное количество использований в сутки и допускает
вариант каста заклинания без затрат магии), вы можете использовать и другие типы.
В поле Casting выбираем Fire and Forget (заклинание выполняется единовременным нажатием клавиши).
В поле Delivery из выпадающего списка выбираем способ применения заклинания к цели "На цель".
В поле Menu Display Object выбираем визуальное отображение нашего заклинания, которое будет отображаться в разделе Магии в игре.
У меня это MAGINVSummon - стандартная сине-фиолетовая сфера от призыва любого существа.
В поле Equip Type выбираем каким образом будет экипироваться наше заклинание (руками, криком и т.д.). Раз уж нам нужен свист в качестве звукового сопровождения,
то тут я выберу экипировку голосом (Voice).

На этом этапе все наши действе в окне Spell закончены. Потому нажимаем ОК и сохраняем изменения в плагине.

To be continued...
 

Test Level

Призрак отца Гамлета
Пользователь VIP
Участник форума
Регистрация
12 Ноя 2011
Сообщения
886
Реакции
739
Баллы
261
Лучшие ответы
2
#12
@crafty77, ну да, согласен, в Simple Horse всего-то 6 скриптов. В принципе, вот этот за призыв отвечает

Код:
Scriptname aaaSimpleHorseCallScript extends activemagiceffect 

Actor CurrentHorse
ReferenceAlias property HorseAlias auto
Actor property Player auto
Scene property aaaSimpleHorseMovetoPlayerScene auto
ObjectReference property HorsePosition auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
    player.CreateDetectionEvent(player, 70)
    if akCaster.IsInInterior()
        return
    endif

    if CurrentHorse != Game.GetPlayersLastRiddenHorse()
        CurrentHorse = Game.GetPlayersLastRiddenHorse()
        HorseAlias.Clear()
        HorseAlias.ForceRefIfEmpty(CurrentHorse)
    endif

    if !Player.HasLOS(CurrentHorse)
        if CurrentHorse.GetDistance(Player) >= 1000.0
            MovetoBehindPlayer()
        endif
        MoveMarker()
    else
        HorsePosition.MoveTo(player)
    endif
    aaaSimpleHorseMovetoPlayerScene.Start()

EndEvent

Function MoveMarker()
    float angle = Player.GetAngleZ()
    float xoffset = 300.0 * math.sin(angle)
    float yoffset = 300.0 * math.cos(angle)
    HorsePosition.MoveTo(Player, xoffset, yoffset, abMatchRotation = true)
EndFunction

Function MovetoBehindPlayer()
    float angle = Player.GetAngleZ()
    float xoffset = -(300.0  * math.sin(angle))
    float yoffset = -(300.0  * math.cos(angle))
    CurrentHorse.MoveTo(Player, xoffset, yoffset, abMatchRotation = true)
EndFunction
 
Сверху Снизу