WASD контроллер для любого персонажа

Published
» Способ реализации: Lua
» Тип: Наработка
» Версия Warcraft: 1.32.10+
Всем привет, вам надоело однообразное управление в 99% карт? надоело выделять квадратом и двигаться правой кнопкой мыши? А в триггерах только стрелочки? Пришло время сделать WASD управление в 1 строчку
InitWASD(UDG_unit)
Но предварительно нужно будет id юнита добавить в базу анимаций
» раскрыть
 if GetUnitTypeId(data.UnitHero) == FourCC("Hpal") then
        --паладин
        data.AnimDurationWalk = 0.767 --длительность анимации движения, полный круг
        data.IndexAnimationWalk = 12 -- индекс анимации движения
        data.ResetDuration = 2.667 -- время сброса для анимации stand, длительность анимации stand
        data.IndexAnimationQ = 5 -- анимация сплеш удара
        data.IndexAnimationSpace = 12 -- анимация для рывка, если анимации нет, ставь индекс аналогичный бегу
        data.IndexAnimationAttackInDash = 3 --анимация удара в рывке
        data.IndexAnimationThrow = 4 -- индекс анимациии броска чего либо
        data.IndexAnimationAttack1 = 4 --индекс анимации атаки в серии
        data.IndexAnimationAttack2 = 4 --индекс анимации атаки в серии
        data.IndexAnimationAttack3 = 5 --индекс анимации  атаки в серии
        data.IndexAnimationSpin = 3 -- индекс анимации для удара во вращении
    elseif GetUnitTypeId(data.UnitHero) == FourCC("Ewar") then
        -- смотрящая в ночь
        data.AnimDurationWalk = 0.733 --длительность анимации движения, полный круг
        data.IndexAnimationWalk = 2 -- индекс анимации движения
        data.ResetDuration = 2.667 -- время сброса для анимации stand, длительность анимации stand
        data.IndexAnimationQ = 6 -- анимация сплеш удара
        data.IndexAnimationSpace = 2 -- анимация для рывка, если анимации нет, ставь индекс аналогичный бегу
        data.IndexAnimationAttackInDash = 4 --анимация удара в рывке
        data.IndexAnimationThrow = 7 -- индекс анимациии броска чего либо
        data.IndexAnimationAttack1 = 5 --индекс анимации атаки в серии
        data.IndexAnimationAttack2 = 5 --индекс анимации атаки в серии
        data.IndexAnimationAttack3 = 6 --индекс анимации  атаки в серии
        data.IndexAnimationSpin = 4 -- индекс анимации для удара во вращении
    elseif GetUnitTypeId(data.UnitHero) == FourCC("Obla") then
        -- Мастер клинка
        data.AnimDurationWalk = 0.733 --длительность анимации движения, полный круг
        data.IndexAnimationWalk = 6 -- индекс анимации движения
        data.ResetDuration = 1.8 -- время сброса для анимации stand, длительность анимации stand
        data.IndexAnimationQ = 3 -- анимация сплеш удара
        data.IndexAnimationSpace = 6 -- анимация для рывка, если анимации нет, ставь индекс аналогичный бегу
        data.IndexAnimationAttackInDash = 9 --анимация удара в рывке
        data.IndexAnimationThrow = 8 -- индекс анимациии броска чего либо
        data.IndexAnimationAttack1 = 2 --индекс анимации атаки в серии
        data.IndexAnimationAttack2 = 8 --индекс анимации атаки в серии
        data.IndexAnimationAttack3 = 3 --индекс анимации  атаки в серии
        data.IndexAnimationSpin = 13 -- индекс анимации для удара во вращении
    elseif GetUnitTypeId(data.UnitHero) == FourCC("Udre") then
        -- Повелитель ужаса
        data.AnimDurationWalk = 1 --длительность анимации движения, полный круг
        data.IndexAnimationWalk = 5 -- индекс анимации движения
        data.ResetDuration = 1.8 -- время сброса для анимации stand, длительность анимации stand
        data.IndexAnimationQ = 10 -- анимация сплеш удара
        data.IndexAnimationSpace = 5 -- анимация для рывка, если анимации нет, ставь индекс аналогичный бегу
        data.IndexAnimationAttackInDash = 6 --анимация удара в рывке
        data.IndexAnimationThrow = 9 -- индекс анимациии броска чего либо
        data.IndexAnimationAttack1 = 9 --индекс анимации атаки в серии
        data.IndexAnimationAttack2 = 4 --индекс анимации атаки в серии
        data.IndexAnimationAttack3 = 10 --индекс анимации  атаки в серии
        data.IndexAnimationSpin = 5 -- индекс анимации для удара во вращении
    else
        print("Данного героя нет в таблице анимаций")
    end
Как видите я расписал 4х героев заполнение таблички занимает примерно 2 минуты на героя, пока что очень много условностей, очень много не вырезано, потому что как можно догадаться, это управление из пеонов разбойников, пока что доступны:
  1. Полноценно WASD движение + сглаживание, использование хитбокса персонажа и поиск пути варкарфта, отталкивание врагов при столкновении, можно даже использовать в пазл квестах, для толкания юнитов-бочек или камней
  2. Атака левой кнопкой мыши, атака в серии из 5 ударов, финальный удар расталкивает врагов
  3. Атака во вращении, наносит небольшой урон касанием
  4. Бросок молота - правой кнопкой мыши, в принципе бросать можно что угодно, бросок имеет 2 заряда с кулдауном по 10 сек
  5. Рывок Space и атака в рывке
  6. Способность Q для контролируемого удара по площади
  7. Так же тут есть система стазиса, юниты оглушаются при атаке
  8. И куча всяких отталкивание, типа удара о стену и удар в спину для двойного урона
  9. Система складывания урона в 1 общий текстаг даже от нескольких игроков
В бедующем планируется гораздо больше настроек и отключение, того что вшито, но пока что, для первичной настройки достаточно анимаций, как по мне это самое сложное

Установка

Скопировать нестандартный код себе в карту, вызывать через
InitWASD(unit)


Views: 245

Jack-of-shadow #1 - 2 months ago 0
Голосов: +0 / -0
Выглядит очень бодренько! Как на счет прикрутить управление с геймпада ?
Bergi_Bear #2 - 2 months ago 0
Голосов: +0 / -0
легчайше, нужен joy2key или любой аналог, однако это управление идёт специально под мышь в правой руке, сами клавиши геймпада в реф не заложены, так что в любом случае нужно внешнее по
Это сообщение удалено
jasonrus96 #4 - 1 day ago 0
Голосов: +0 / -0
А получится сразу на несколько персов настроить то есть чтобы можно было в мультеплеере юзать , или ток на одного работает?
Bergi_Bear #5 - 1 day ago 0
Голосов: +0 / -0
Это и так для мультиплеера