С Днём России!
  • 1.138
  • 7
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 446
  • 1
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...
Новости Моддеры Oblivion Remastered нашли способ внедрения абсолютно любых скриптов
  • 566
  • 4
Сообщество моддинга Oblivion Remastered (ORM) переживает настоящий расцвет. После долгих месяцев работы, энтузиасты научили игру работать с мощным скриптовым языком Lua, открыв перед создателями...

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

𝒸𝓇𝒶𝒻𝓉𝓎⁷⁷

Злобный Ёж
Команда форума
Куратор раздела
Пользователь VIP
Локализатор
 
Модостроитель
Участник форума
Регистрация
6 Дек 2018
Сообщения
2.495
Реакции
4.660
Баллы
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
Реакции
740
Баллы
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
 
Сверху Снизу