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

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

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

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

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

DayZPlayerMeleeFightLogic_LightHeavy

Пытаюсь добавить эффект при ударе

modded class DayZPlayerMeleeFightLogic_LightHeavy
{
    override bool HandleFightLogic(int pCurrentCommandID, HumanInputController pInputs, EntityAI pEntityInHands, HumanMovementState pMovementState, out bool pContinueAttack)
    {
        bool ret;
        PlayerBase player = PlayerBase.Cast(m_DZPlayer);
        if (player)
        {
            float stamina_before_hit = player.GetStaminaHandler().GetStamina();
            ret = super.HandleFightLogic(pCurrentCommandID, pInputs, pEntityInHands, pMovementState, pContinueAttack);
            float stamina_after_hit = player.GetStaminaHandler().GetStamina();
            float delta_stamina = stamina_before_hit - stamina_after_hit;
            Print("[HandleFightLogic] Дельта стамины: " + delta_stamina);
            //1. В лог пишет что дельта равна 0 в любом случае (даже учитывая что игрок бил во время теста), должно быть точно не 0
            //2. Print() срабатывает на что-то кроме ударов игрока (видимо эта функция - плановая проверка раз в N секунд и я вообще не то изменяю)
            //Тут была другая логика, она не нужна для понимания ситуации
        }
        else //In case non-players use this function
        {
            Print("[HandleFightLogic] Функция сработала на нпс");
            //Не вызывалась ни разу, то есть как минимум это чисто для игроков
            ret = super.HandleFightLogic(pCurrentCommandID, pInputs, pEntityInHands, pMovementState, pContinueAttack);
        }
        return ret;
    }
}

Вся эта логика довольно сложна для навигации, так что может кто уже с этим разбирался и может подсказать, откуда копать

P.S. можно было бы взять всю ванильную функцию и добавить логику к строчке, где у игрока забирают стамину, но:
-хотелось бы этого избежать
-у меня тут немного манипуляций со стаминой, есть шанс что так это будет работать неправильно

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

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


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

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

  • 0

Решил проблему как-то так

modded class StaminaHandler
{
    override void DepleteStamina(EStaminaModifiers modifier, float dT = -1)
	{
		super.DepleteStamina(modifier, dT);
		if (modifier == EStaminaModifiers.MELEE_HEAVY || modifier == EStaminaModifiers.MELEE_LIGHT)
		{
			float stamina_consumed = m_StaminaModifiers.GetModifierData(modifier).GetMaxValue();
		}
	}
}

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка