Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
aimlock

Регистрация анимации предметов в руках

Рекомендованные сообщения

Всем привет, я заметил что некоторые люди не до конца понимают что такое регистрация анимаций для предметов в руках, как ее правильно делать и для чего она нужна?

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

На момент написания этого поста я знаю 3 вида регистрации анимаций для предметов в руках:
1. PlayerBase
2. JMAnimRegister
3. ModItemRegisterCallbacks

До создания последних 2 способов все использовали PlayerBase :
 

modded class PlayerBase
{
    override void Init()
    {            
        DayzPlayerItemBehaviorCfg     fireArmsItemBehaviour = new DayzPlayerItemBehaviorCfg;        
        fireArmsItemBehaviour.SetFirearms();
        
        GetDayZPlayerType().AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", fireArmsItemBehaviour, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");        
        super.Init();     
    }
}

Но у этого способа есть очень большой минус, это очень нестабильная штука. Нередко крашила сервера и имела ограничения на кол-во регистрации анимаций.
С такими большими минусами, мододеллы начали искать решения как можно сделать это более стабильно и оптимизированно. И такой способ нашли.

DayZPlayerTypeRegisterItems(DayZPlayerType Type) вот наше спасение, но тут тоже не все так просто, полумолчание это функция внутри класса, а для поставленной задачи (иметь возможность безопасно  и стабильно вносить новую регистрацию предметов) это не подходит. Тогда разработчики мода CF создали кастомный класс с использованием схожих функций для регистрации анимаций положений предметов в руках. Этим классом является JMAnimRegister. Стабильная и оптимизированная функция, которой очень просто пользоваться. Разумеется использовать вы сможете этот класс только при наличии в своей сборке CF . Как им пользоваться?
 

modded class JMAnimRegister
{
  override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior )
  {
    super.OnRegisterFireArms( pType, pBehavior );
    pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");    
  }
};

Как самый простой пример. И так можно задавать любому количеству предметов положение в руках :
 

modded class JMAnimRegister
{
  override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior )
  {
    super.OnRegisterFireArms( pType, pBehavior );
    pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");

   pType..AddItemInHandsProfileIK("MyModdedWeapon2", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm");      
  }
};

Прошу обратить внимание, что мы используем modded, мы модифицируем уже существующий класс внутри

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах



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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На самом деле это одна из самых важных тем на этом форуме, но многие этого не поняли.

Если у вас дофига модов и игроков, то вы почти наверняка ловите краши сервера LOAD EXISTING CHAR. Потому что во многих модах до сих пор остается регистрация через PlayerBase.

У некоторых количество крашей снижается с десятков за сутки до одного-двух после внесения правок или перехода на моды, в которых все зависимости сделаны сразу в config.cpp. Конечно же, речь идет в основном об оружейных паках.

Изменено пользователем Moonny (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Moonny сказал:

На самом деле это одна из самых важных тем на этом форуме, но многие этого не поняли.

Если у вас дофига модов и игроков, то вы почти наверняка ловите краши сервера LOAD EXISTING CHAR. Потому что во многих модах до сих пор остается регистрация через PlayerBase.

У некоторых количество крашей снижается с десятков за сутки до одного-двух после внесения правок или перехода на моды, в которых все зависимости сделаны сразу в config.cpp. Конечно же, речь идет в основном об оружейных паках.

Ну как поподробней про регистрацию анимаций в config.cpp ???

Штатная регистрация тут

4_World\Entities\ManBase\DayZPlayer\DayZPlayerCfgBase.c

 

функция в глобальном клссе

DayZPlayerTypeRegisterItems
 

а для модовых

 

class ModItemRegisterCallbacks

и функции для оверрайда

 

пример

 

modded class ModItemRegisterCallbacks
{
    override void RegisterOneHanded(DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior)
    {
        super.RegisterOneHanded(pType, pBehavior);
		pType.AddItemInHandsProfileIK("EarPlugsBase", "dz/anims/workspaces/player/player_main/player_main_1h.asi", pBehavior, "dz/anims/anm/player/ik/vehicles/sparkplug.anm");
    };
};

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за тему. 
Гуглил по тэгу - сразу на форум кинуло..

pType.AddItemInHandsProfileIK

Не работал спавн кастомных предметов, а оказывается всё просто 😁 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
05.08.2021 в 15:11, BorizzK сказал:

Ну как поподробней про регистрацию анимаций в config.cpp ???

Штатная регистрация тут

4_World\Entities\ManBase\DayZPlayer\DayZPlayerCfgBase.c

 

функция в глобальном клссе

DayZPlayerTypeRegisterItems
 

а для модовых

 

class ModItemRegisterCallbacks

и функции для оверрайда

 

пример

 

modded class ModItemRegisterCallbacks { override void RegisterOneHanded(DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior) { super.RegisterOneHanded(pType, pBehavior); pType.AddItemInHandsProfileIK("EarPlugsBase", "dz/anims/workspaces/player/player_main/player_main_1h.asi", pBehavior, "dz/anims/anm/player/ik/vehicles/sparkplug.anm"); }; };


modded class ModItemRegisterCallbacks
{
    override void RegisterOneHanded(DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior)
    {
        super.RegisterOneHanded(pType, pBehavior);
		pType.AddItemInHandsProfileIK("EarPlugsBase", "dz/anims/workspaces/player/player_main/player_main_1h.asi", pBehavior, "dz/anims/anm/player/ik/vehicles/sparkplug.anm");
    };
};

Спасибо! Можно для новичка более конкретный ответ получить ? 
Я добавил новый предмет (консервный нож). В игре, при взятии этого ножа в руку, персонаж не сжимает руку, как в случае с оригиналом. 
 Структура папки с модом такова:
 - папка (название мода):
   - data (текстуры)
   - config.cpp
   - model.cfg

   - "мой новый предмет".p3d
   - 4_World: Entities : ManBase : DayZPlayer: DayZPlayerCfgBase.c      ?

И главный вопрос : как должен выглядеть файл DayZPlayerCfgBase.c внутри, для одного нового предмета, добавленного в игру ?
Все удалить и оставить только
modded class ModItemRegisterCallbacks { override void RegisterOneHanded(DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior) { super.RegisterOneHanded(pType, pBehavior); pType.AddItemInHandsProfileIK("EarPlugsBase", "dz/anims/workspaces/player/player_main/player_main_1h.asi", pBehavior, "dz/anims/anm/player/ik/vehicles/sparkplug.anm"); }; }; ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как изменить анимацию для уже имеющегося предмета? К примеру, я пытался отучить перса бегать с грузовым аккумом, переназначив его на RegisterHeavy и установив itemBehaviour=0 в конфиге, но это работает только если я создаю новый класс на базе ванильного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И вот ещё один момент. Когда меняешь анимацию из другого мода, то нужно ставить строку super в конец функции, а не в начало, как в первом посте. Иначе изменение не будет работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: radical
      Доброго времени суток! Хотел вот поинтересоваться, плюс по возможности чтобы растолковали что к чему.
      Суть вопроса: хочу на сервер сделать те же самые ванильные вещи, но, кхм, размер клеточек у ванильных по меньше прописать, чтоб в инвентаре поместились. Как это сделать я примерно понял, config.cpp я поправлю, но встал вопрос ребром:  но кроме этого файла, что надо делать. Вопросов много появляется, а в интернете информацию сложно накопать. Решил попросить помощи у знающих людей.
      1. По возможности хотелось бы от начала до конца увидеть весь путь изменения одного ванильного предмета
      2. Из просьбы что выше появляется вопрос: с остальными ванильными предметами такое же решение делать? ( Это при условии, если тема 1 решится)
       
      P.S. Если будут какие то файлы, ссылки, да даже просто объяснения, это меня сдвинет с мёртвой точки, а то завис)
    • Автор: alex_good_kaban
      Пытаюсь создать Action который будет принимать данные из созданного JSON конфига на стороне сервера. 
      Пример:
      Создаем конфиг
       

      Json получается в таком формате:
       

      В Action добавляю просто для проверки void GetProxyBuilder() и проверяю его работоспособность

      На стороне клиента я получаю NULL (если добавляю исключение if !=NULL то функция вообще не отрабатывает.
      На стороне сервера значения из конфига получаются, но так как функция z_childNameRPC обрабатывается на стороне клиента то выполнения этого условия не происходит.

      Если не использовать JSON конфиг, а создать массив с данными внутри Action то все отрабатывает нормально.

      Вопрос как возможно использовать данные из конфига JSON
    • Автор: fedotovyasha
      Где можно достать карту в очень высоком разрешении, все в интернете такого себе качества. Хочу сделать свою карту
    • Автор: alex_good_kaban
      Что вы узнаете в этом руководстве:

      - Установка и настройка Workbench с нуля
      - Установка инструментариев Dayz Tolls, Mikera tools
      - Создание своего первого мода
      - Отладка этого мода в игре
      - Изменение мода без перезагрузки

      Что нужно для начала работ:

      1. Установленная игра DayZ - https://store.steampowered.com/agecheck/app/221100/
      2. Установленный сервер DayZ - https://store.steampowered.com/agecheck/app/221100/
      3. Установленный DayZ Tools - https://store.steampowered.com/app/830640/DayZ_Tools/
      4. Установленный Visual Studio Code или Notepad ++(советую первый вариант, бонус в конце статьи)
      5. Установить пакет инструментов от Mikera (галочками отмечено в спойлере) - https://mikero.bytex.digital/Downloads

      Если все вышеперечисленные пункты выполнены приступим к настройке:

      1. Создание диска Р и распаковка файлов игры


      2. Создание первого мода


      3. Упаковка в PBO
      На данном этапе мы забываем окончательно о существовании Addon Builder встроенного в DayZ Tools.
      Используйте pboProject для запаковки модов - он показывает абсолютно все допущенные ошибки, кроме ошибок в скриптах.


      4. Подготовка к Filepatching


      5. Тестирование в одиночной игре/оффлайн режим. (DayZDiag_x64 - client)


      6. Тестирование в многопользовательском режиме. (DayZDiag_x64 - server + client)

      7. Настройка и работа в Workbench
    • Автор: fedotovyasha
      Есть ли возможность сгенерировать и отобразить в ui qr код? Если да, то как?
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.