ACS. Показываем HP босса.

Данный гайд был создан по реквесту (запросу) «Willian Voryger«. Вы также, можете предложить свой реквест в группе ВК, или в комментариях к записи.

Предисловие

Во время битвы с боссом, зачастую, хочется видеть свой прогресс. Для этого в углу экрана, обычно, показывают количество хп босса. В этом уроке, мы как раз и реализуем подобную функцию.

Разбираемся в скрипте.

Перепишите данный скрипт к себе в ACS:

script 15 (int tid)
{
  int maxhp = GetActorProperty(tid,APROP_Health);

  while(true)
  {
    SetHudSize(500,500,0);
    SetFont("BIGFONT");
    int hp = GetActorProperty(tid,APROP_Health);
    int hp2 = FixedMul(FixedDiv(hp,maxhp),100.0);

    HudMessage(s:"Boss hp: ",f:hp2,s:"%";0,1,CR_CYAN,400.0,400.0,1.0);
    if(hp < 1)
    {
	  HudMessage(s:"Dead";0,1,CR_RED,400.0,400.0,3.0);
          break;
    }
    Delay(1);
  }
}

Данный скрипт, показывает HP монстра в процентах.

А теперь, разберем скрипт по порядку.

script 15 (int tid)

В этой строке, мы принимаем tid монстра, у которого будем смотреть HP.

int maxhp = GetActorProperty(tid,APROP_Health);

Получаем изначальное количество HP монстра (maxhp) с помощью GetActorProperty. Cинтаксис у GetActorProperty следующий:

GetActorProperty(tid,property)
  • tid — указывает thing id, идентификатор монстра.
  • property — указыавет проперти (APROP,PROP), полный список проперти доступен на вики.

Далее запускаем бесконечный цикл while, в котором будем выводит хп монстра.

SetHudSize(500,500,0);

Устанавливаем разрешение экрана 500×500.

SetFont("BIGFONT");

Устанавливаем шрифт BIGFONT, свои шрифты можно добавлять в FONTDEFS.

int hp = GetActorProperty(tid,APROP_Health);

Здесь, получаем текущее количество HP монстра.

int hp2 = FixedMul(FixedDiv(hp,maxhp),100.0);

А здесь, получаем количество HP в процентах. Я, для получения процентов использовал формулу:

hp2 = (hp / maxhp) * 100

Но вместо «/» и «*» я использовал «FixedDiv» и «FixedMul«. Я это сделал потому что «/» и «*» округляет все до целых чисел (5, 1), в то время как FixedDiv и FixedMul не округляет, оставляя дробное значение (5.5, 1.3).

Еще, вас может смутить, почему я использовал тип int:

int hp2

Вас это не должно смущать, потому-что ACS сломанный язык. Поэтому, в типе int можно хранить как целочисленные значения, так и дробные.

Проценты получили, теперь их нужно вывести на экран.

HudMessage(s:"Boss hp: ",f:hp2,s:"%";0,1,CR_CYAN,400.0,400.0,1.0);

HudMessage слишком сложная комманда, рассмотрю её в отдельном гайде. Узнать о ней подробно вы можете на вики.

if(hp < 1)
    {
	  HudMessage(s:"Dead";0,1,CR_RED,400.0,400.0,3.0);
          break;
    }

Здесь, если hp у монстра < 1, то выводим сообщение «Dead» на 3 секунды и выходим из цикла (break).

Delay(1);

В конце, ставим минимальную задержку (1 тик), чтобы скрипт не завис.

Ну вот, и все готово, проверяем.

Итоговый результат.

Дополнительный материал.

Также, вы можете округлить значение «boss hp» до целых чисел. Округлять мы будем функцией ceil, которая всегда округляет число в большую сторону. Синтаксис у неё следующий:

ceil(дробное_число)
  • дробное_число — это число, которое мы будем округлять.

Округляем в HudMessage:

HudMessage(s:"Boss hp: ",f:ceil(hp2),s:"%";0,1,CR_CYAN,400.0,400.0,1.0);

В итоге, у нас получилось красивое целое число.

avataravatar

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!