Mob health bars - індикатор здоров'я мобів -1

Mob health bars - індикатор здоров'я мобів -1

Індикатор здоров'я мобів

Отже, ось так виглядає сама формула:

Тепер під спойлером я опишу весь. процес створення механізму, що забезпечують
ного умови для розрахунку здоров'я по


формула для розрахунку здоров'я мобів

де:
PreH - previous health (попереднє здоров'я мобу)
DTake - Damage taken (отриманий мобом шкоди)
MaxH - maximum health (максимальне здоров'я мобу за замовчуванням)
ActH - actual health (фактичне здоров'я мобу, різниця між попереднім здоров'ям мобу до удару і отриманим при ударі втратою)

Тепер для кожного значення у формулі нам потрібно створити подію в системі рахунки ігрових подій для того, щоб за допомогою скорборд визначати ці значення в грі або нараховувати в ці значення окуляри.

1. Подія для значення фактичного здоров'я:

/ Scoreboard objectives add ActH dummy

2. Подія для попереднього здоров'я моба6

/ Scoreboard objectives add PreH dummy

3. Подія, що визначає наноситься гравцем шкоди мобу:

/ Scoreboard objectives add DTake dummy

4. Подія для числа 100:

/ Scoreboard objectives add 100 dummy

5. Подія для максимального здоров'я мобу, яке у нього може бути за замовчуванням:

/ Scoreboard objectives add MaxH dummy

ще створимо подія, в якому гра буде вважати збитки, що завдала гравцем мобу. У цій події критерій damageDealt сам вважатиме наноситься гравцем шкоди. Це значення і буде основним для всіх інших розрахунків у формулі.

6. / scoreboard objectives add Dp stat.damageDealt

і встановимо відразу ж 100 очок для створеного події з ім'ям 100 фіктивному гравцеві, якого також назвемо цифрою 100

7. / scoreboard players set 100 100 100

Отже, всі необхідні події для підрахунку даних у формулі ми задали. Тепер організуємо командами саму механіку підрахунку даних, щоб гра їх вважала і виводила результат на індикатор

1. Додамо всім мобам в радіусі 20 блоків від гравця, які отримали шкоди тег Indicator. Тег цей надаватиметься мобам в момент, коли після отримання ними шкоди пройде 10 тактів, тобто півсекунди, ні раніше, ні пізніше. Це потрібно для того, щоб після отримання шкоди мобам тег надає тільки один раз, а не постійно присуджувався мобу з кожним ігровим тактом.

/ Scoreboard players tag @e [type =! Player, r = 20] add Indicator

2. Далі, щодо гравця, у якого в подію на нанесення шкоди мінімум одне очко, тобто гравець завдав шкоди мобу ударом, ми командою мобу з тегом Indicator. що знаходиться в радіусі п'яти блоків від гравця в подія, яке буде вважати заподіяну мобу шкоди додаємо збитки, що завдала гравцем. Тобто вдарив гравець мобу рукою завдавши йому 2 одиниці шкоди, мобу встановиться в подія на отримання шкоди 2 очка, або гравець ударив мобу мечем, завдавши йому 30 одиниць утрати, тоді мобу встановиться в подія на отримання шкоди 30 одиниць. Для чого потрібна така операція додавання кількості очок в подія на отримання шкоди мобом DTake рівному колічетсво очок у події нанесення шкоди гравцем Dp. У скорборд немає критерію, який вважав би шкоди, одержуваних мобами. А критерій, який вважає нанесений гравцем шкоди є. Тому ми цією операцією і встановлюємо в першу подію окуляри, отримані в другому подію, тим самим самостійно командою вважаємо шкоди, отриманий мобом. Недолік полягає в тому, що в даному випадку мобу в подія будуть додаватися лише окуляри шкоди, отримані від гравця. Шкоду здоров'ю мобу від падіння, горіння, стріли і зілля додаватися в подія не буде.

/ Scoreboard players operation @e [tag = Indicator, r = 5] DTake + = @p Dp

3. Далі нам потрібно відразу скинути окуляри шкоди гравця в подію на нанесення їм шкоди мобу. Це потрібно для того, щоб кількість його очок з кожним тактом далі не додавалося мобу в подія шкоди. Тобто гравець завдав шкоди мобу ударом, кількість нанесеного шкоди гравцем додалося до втрат мобу один раз після удару. Окуляри нанесеного шкоди гравцем скинулися, їх більше немає і вони більше не додаються з кожним ігровим тактом в подія шкоди мобу. Якщо ми цього не скинемо окуляри, то нанесений ударом гравця шкоди буде Плюсувати мобу кожен такт, навіть якщо гравець його більше не чіпає, так як вся наша схема підключена по ланцюгу до генератора імпульсів, який створює перший командний блок, що знаходиться в режимі повторення.

/ Scoreboard players reset @a [score_Dp_min = 1] Dp

4. Наступною командою ми у мобів з тегом Indicator видаляємо цей тег, щоб у мобу не було цього тега. Так як він буде знову даватися після десяти тактів тільки мобу, який отримав шкоди, і саме мобу з цим тегом буде знову додаватися в подія окуляри шкоди, отримані від гравця.

/ Scoreboard players tag @e [tag = Indicator] remove Indicator

5. Тепер всім мобам в радіусі 20 блоків від гравця відкриємо рахунок у подіях на попереднє і на максимальне здоров'я мобу. Рахунок ми встановлюємо потім, що нам потрібні значення в цих подіях у мобів, щоб підставляти їх в формулу. Рахунок ми задаємо шляхом додавання всім мобам в радіусі 20 блоків від гравця по нулю окулярів в цих подіях. Це дуже зручно. З одного боку цими командами ми відкриваємо рахунок мобам в цих подіях, а з іншого боку в наслідку ці команди не будуть впливати на зміни цих значень, так як додають по нулю окулярів. І тому ми можемо без наслідків впливати на цей рахунок іншими потрібними командами і подіями.

/ Scoreboard players add @e [type =! Player, r = 20] PreH 0

/ Scoreboard players add @e [type =! Player, r = 20] MaxH 0

6. Далі за допомогою команди ми виконуємо перша дія у формулі: віднімаємо з попереднього здоров'я мобу отриманий ним шкоди і отримуємо фактичне здоров'я мобу після удару по ньому

/ Scoreboard players operation @e [r = 0, c = 1, type =! Player] PreH - = @e [r = 0, c = 1, type =! Player] DTake

7. Далі відразу скидаємо значення отриманого мобом шкоди, щоб воно постійно не віднімалося з попереднього здоров'я мобу PreH

/ Scoreboard players reset @e [score_DTake_min = 1, type =! Player] DTake

8. Наступним дією ми всім мобам, у яких значення у події PreH (попереднє здоров'я) більше 1 додаємо тег percent. щоб наступні дії виконувалися тільки щодо мобів з таким тегом

/ Scoreboard players tag @e [score_PreH_min = 1, type =! Player] add percent

9. Після цього мобам з цим тегом встановлюємо окуляри в подію ActH (фактичне здоров'я мобу) рівною кількості очок у події PreH (попереднє здоров'я мобу).

/ Scoreboard players operation @e [r = 0, c = 1, type =! Player] ActH = @e [r = 0, c = 1, type =! Player] PreH

10. Тим самим з'являється рахунок у події ActH (фактичне здоров'я мобу) - цей рахунок у формулі є різницею між Pre (попереднім здоров'ям мобу) і DTake (отриманим втратою) і відображає фактичне здоров'я мобу ActH. Ми можемо тепер із цього приводу використовувати в подальших діях у формулі. Множимо тепер цей рахунок на рахунок фіктивного гравця під ім'ям "100" у події під назвою "100". Раніше ми задали цьому фіктивному гравцеві в цю подію рахунок рівним 100. Тобто фактично ми виконуємо такі дії у формулі і множимо фактичне здоров'я мобу на 100

/ Scoreboard players operation @e [r = 0, c = 1, type =! Player] ActH * = 100 100

11. Далі у мобу з тегом percent ділимо фактичне здоров'я, яке він має у даним момент на максимальне значення здоров'я, яке у нього було при Спауном за замовчуванням або яке було задано при Спауном командою.

/ Scoreboard players operation @e [r = 0, c = 1, type =! Player] ActH / = @e [r = 0, c = 1, type =! Player] MaxH

12. І також за допомогою такої команди ми видаляємо у мобу з тегом percent цей тег

[B] / scoreboard players tag @e [tag = percent] remove percent

13. Ми виконали всі дії, щоб формула працювала і вважала здоров'я. Тепер нам потрібно задати значення максимального здоров'я Maxh і попереднього здоров'я мобу до удару PreH. Для прикладу візьмемо здоров'я зомбі - його здоров'я дорівнює 10 сердець, тобто 20 одиниць. Так як формула враховує здоров'я до десятих часток, потрібно помножити на 10 здоров'я мобу, тобто у формулі для цих подій ми поставимо значення 200.

scoreboard players set @e [type = zombie, score_MaxH = 0, score_MaxH_min = 0] Maxh 200

scoreboard players set @e [type = zombie, score_PreH = 0, score_PreH_min = 0] PreH 200

Всі значення у формулі задані. Тепер нам потрібно поставити ланцюжок з команд-
них блоків, які. мінятимуть індикатор. здоров'я над мобом в залежності
від відсотка. що залишився. у. нього. здоров'я. В разі. для. зомбі. для. 100% здо-
ровья - 20 одиниць - ми встановимо йому індикатор з десяти квадратиків. кожен
командний блок буде змінювати індикатор здоров'я при його зменшенні на 5%.

100% - / entitydata @e [type =! Player, score_ActH = 100] # 123; customName: # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611;>

95% - / entitydata @e [type =! Player, score_ActH = 95] # 123; customName: # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9613; # 9642;>

90% - / entitydata @e [type =! Player, score_ActH = 90] # 123; customName: # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9611; # 9644;>

45% - / entitydata @e [type =! Player, score_ActH = 45] # 123; customName: # 9611; # 9611; # 9611; # 9611; # 9613; # 9642; # 9644; # 9644; # 9644; # 9644; # 9644;>

10% - / entitydata @e [type =! Player, score_ActH = 10] # 123; customName: # 9611; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644;>

5% - / entitydata @e [type =! Player, score_ActH = 5] # 123; customName: # 9613; # 9642; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644; # 9644;>

Для різних мобів можна встановлювати різні індикатори. і призначати кожному
квадратику в індикаторі різний відсоток здоров'я. Ми, з прикладу вище, задава-
Чи одному. квадратику на індикаторі. 5% здоров'я. Курці, наприклад, з її 4-ма
одиницями здоров'я можна зробити. індикатор з чотирьох квадратиків і для кож-
дого квадратика встановити значення в 25% здоров'я. Так можна створювати і мо-
бов-босів, встановлюючи їм при Спауном. потрібне здоров'я. і. відповідно, де-
гавкоту різних його індикатор.