ArKaNeMaN / amxx-VipModular-pub

Modular privileges system for AmxModX
5 stars 4 forks source link

VipM-I-Default.sma: Fix behavior of `Health` when `SetHealth` = false #8

Closed Nord1cWarr1or closed 7 months ago

Nord1cWarr1or commented 7 months ago

А теперь у тебя получается так, что MaxHealth это не максимально возможное кол-во хп у игрока, а максимальное кол-во хп, которое может быть выдано. В общем опять мимо) Перепроверяй лучше перед коммитом)

MaxHealth задаёт максимально возможное кол-во хп у игрока как раз. Проверено, всё работает как надо

ArKaNeMaN commented 7 months ago

А теперь у тебя получается так, что MaxHealth это не максимально возможное кол-во хп у игрока, а максимальное кол-во хп, которое может быть выдано. В общем опять мимо) Перепроверяй лучше перед коммитом)

MaxHealth задаёт максимально возможное кол-во хп у игрока как раз

Должно быть да, а на деле после последнего коммита - нет. Ты клампаешь ADDhealth до MaxHealth, а не итоговое кол-во хп (которого тут в принципе нет).

Nord1cWarr1or commented 7 months ago

Я не понял тебя. Что значит "до"? Итоговое кол-во хп не может быть выше MaxHealth, вот и клампится.

ArKaNeMaN commented 7 months ago

Тебе нужно добавить хп, при этом не допустить переполнение итогового значения хп выше MaxHealth.

Вот три кейса:

  1. У игрока 80 хп, MaxHealth = 100, Health = 50.
  2. У игрока 10 хп, MaxHealth = 100, Health = 50.
  3. У игрока 110 хп, MaxHealth = 100, Health = 50.

Буду юзать формулу, которую я написал выше - TakeHealth(clamp(value, 0, max(max-cur, 0))) (немного исправленная). max-cur посчитает сколько хп не хватает до максимального, другими словами - сколько хп максимум можно добавить.

  1. До максимального кол-ва хп игроку не хватает 100-80=20хп. Указанные 50хп обрезаются до 20 и у игрока получается 80+20=100 хп. Переполнения нет - профит.
  2. До максимального кол-ва хп игроку не хватает 100-10=90хп. Указанные 50хп полностью влезают в полученные 90хп. В итоге у игрока 10+50=60хп. Переполнения нет и все хп выданы.
  3. До максимального кол-ва хп игроку не хватает 100-110=-10хп. Указанные 50хп обрезаются от 0 до 0, т.е. в ноль, игроку ничего не выдаётся, у него остаётся 110хп.

P.S. Я, конечно, мог сам это поправить не тратя время на расписывание этого всего, но так было бы неинтересно)