Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26
Со временем буду его обновлять в качестве наработке бонуса и дата юнитов.
Пока существует 4 вида бонуса:
MAX_LIFE - Максимальное здоровье
SPEED_ATTACK - Скорость атак
SPEED_MOVE - Скорость передвежения
SIGHT_RANGE - Обзор радиус
Как добавить новые бонусы достаточно копировать
			// Bonus Mod - Max Life Abilities
			// Копируем код
            set i = MAX_LIFE * ABILITY_COUNT * 2
            set abilities[i + 0] = 'ZxL0' // +1
            set abilities[i + 1] = 'ZxL1' // +2
            set abilities[i + 2] = 'ZxL2' // +4
            set abilities[i + 3] = 'ZxL3' // +8
            set abilities[i + 4] = 'ZxL4' // +16
            set abilities[i + 5] = 'ZxL5' // +32
            set abilities[i + 6] = 'ZxL6' // +64
            set abilities[i + 7] = 'ZxL7' // +128
            set abilities[i + 8] = 'ZxL8' // +256
            set abilities[i + 9] = 'ZxL9' // +512
            set abilities[i + 10] = 'ZxLa' // +1024
            set abilities[i + 11] = 'ZxLb' // +2048
            set abilities[i + 12] = 'ZxLc' // +4096
            set abilities[i + 13] = 'ZvL0' // -1
            set abilities[i + 14] = 'ZvL1' // -2
            set abilities[i + 15] = 'ZvL2' // -4
            set abilities[i + 16] = 'ZvL3' // -8
            set abilities[i + 17] = 'ZvL4' // -16
            set abilities[i + 18] = 'ZvL5' // -32
            set abilities[i + 19] = 'ZvL6' // -64
            set abilities[i + 20] = 'ZvL7' // -128
            set abilities[i + 21] = 'ZvL8' // -256
            set abilities[i + 22] = 'ZvL9' // -512
            set abilities[i + 23] = 'ZvLa' // -1024
            set abilities[i + 24] = 'ZvLb' // -2048
            set abilities[i + 25] = 'ZvLc' // -4096
Заменяем равкод каждого способности на свой, а также MAX_LIFE на свой например MAX_MANA
Как создать способности через макрос:
// BonusMod - Max Life
//============================================================================================
//! textmacro MaxLifeAbility takes RAWCODE, DISPLAYVALUE, VALUE
//! external ObjectMerger w3a AIlf $RAWCODE$ Ilif 1 $VALUE$ anam "BonusMod - Max Life ($DISPLAYVALUE$)" aite 0 ansf "" aart ReplaceableTextures\CommandButtons\BTNPeriapt.blp
//! endtextmacro

//! runtextmacro MaxLifeAbility("ZxL0", "+0001", "1")
//! runtextmacro MaxLifeAbility("ZxL1", "+0002", "2")
//! runtextmacro MaxLifeAbility("ZxL2", "+0004", "4")
//! runtextmacro MaxLifeAbility("ZxL3", "+0008", "8")
//! runtextmacro MaxLifeAbility("ZxL4", "+0016", "16")
//! runtextmacro MaxLifeAbility("ZxL5", "+0032", "32")
//! runtextmacro MaxLifeAbility("ZxL6", "+0064", "64")
//! runtextmacro MaxLifeAbility("ZxL7", "+0128", "128")
//! runtextmacro MaxLifeAbility("ZxL8", "+0256", "256")
//! runtextmacro MaxLifeAbility("ZxL9", "+0512", "512")
//! runtextmacro MaxLifeAbility("ZxLa", "+1024", "1024")
//! runtextmacro MaxLifeAbility("ZxLb", "+2048", "2048")
//! runtextmacro MaxLifeAbility("ZxLc", "+4096", "4096")
//! runtextmacro MaxLifeAbility("ZvL0", "-0001", "-1")
//! runtextmacro MaxLifeAbility("ZvL1", "-0002", "-2")
//! runtextmacro MaxLifeAbility("ZvL2", "-0004", "-4")
//! runtextmacro MaxLifeAbility("ZvL3", "-0008", "-8")
//! runtextmacro MaxLifeAbility("ZvL4", "-0016", "-16")
//! runtextmacro MaxLifeAbility("ZvL5", "-0032", "-32")
//! runtextmacro MaxLifeAbility("ZvL6", "-0064", "-64")
//! runtextmacro MaxLifeAbility("ZvL7", "-0128", "-128")
//! runtextmacro MaxLifeAbility("ZvL8", "-0256", "-256")
//! runtextmacro MaxLifeAbility("ZvL9", "-0512", "-512")
//! runtextmacro MaxLifeAbility("ZvLa", "-1024", "-1024")
//! runtextmacro MaxLifeAbility("ZvLb", "-2048", "-2048")
//! runtextmacro MaxLifeAbility("ZvLc", "-4096", "-4096")
Умеет очишать абилок если бонус изменили...
Я выложил карту (Сырое) месте с мемхаком который вы можете тестировать процент здоровья от максимальной здоровья или значение здоровья с помошью DataUnit.setState(...) можете посмотреть пример кода GameCommand
Пример 1 вариант:
если у юнита имеет 100 здоровья и 5% от максимальной здоровья то получит в игре 105 здоровья, если у юнита изменилост максимальное здоровье то и обновляет от процента в игре.
Чтобы правильно данные обновляли необходимо выполнить
set rpg_DataUnit = DataUnit.find(gg_unit_Hmkg_0001) // Ишем данные юнита 
        
call rpg_DataUnit.disable() // Отключаем старые данных юнита
call rpg_DataUnit.setState(false, STATE_MAX_HP, S2I(SubString(s, 7, StringLength(s)))) // Добавляем количество здоровья 
false - Устанавливает целые значения здоровья
true - Устанавливает процентное здоровье
call rpg_DataUnit.enable() // Включаем новвые данных юнита
call rpg_DataUnit.update() // Апдейтим результат от старого и нового сверяем что изменилось и уже реально запрашиваем к мемхаку или бонусу смотря на что пользуем....
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
30
6 лет назад
2
Почему по куче абилок на каждый бонус? Намного логичнее и удобнее пользоваться уровнями одной и той же.
2
37
6 лет назад
2
Опиши материал доступно, что он делает, для новичков.
И орфографию поправь - перечитай сам же свой пост.
2
1
6 лет назад
2
ScorpioT1000, Я же инвалид по слухам для меня это поздный язык поправлю как доделаю..
Суть том что можно добавлять бонусы и заодно следить проценты здоровья как я выше описал. Таким обрзаом и другие виды бонусов возможно менять физически.
Макс здоровья 100 едениц на 1 уровне и 5% здоровья то у героя появит 105 единиц здоровья. Когда героя апнул уровень некоторые может изменилось данные о здоровья то обновляем по проценту. Если герой апнул и имеет 150 единиц и 5% то даем героя оригинальную здоровья 157 единиц и так далее удобно для эпикировки и апгрейда не нарушая стандартный апгрейд здоровья от силы по умолчание там 15 хп 1 сила и так далее... Даже силу может превратить в процент.
PS Исправлю пока не публикуй ресурс как доделаю все бонусы стандартные
  • Реген маны (Через bonus)
  • Реген здоровья (Через bonus)
  • Макс. Здоровья (Через bonus)
  • Макс. Маны (Через bonus)
  • Защита (Memchack)
  • Мин. и Макс. Атака (Memchack)
  • Радиус обзора (Через bonus)
  • Скорость атака (Через bonus)
  • Скорость передвежения (Через bonus)
  • Атрибуты STR AGI INT
Например герой за 1 уровень получил 5 силу это равен 75 здоровья который должегн расти оно и так выросло по умолчание терь расчитивает процент и добавляем остаток здоровья (Не будет постоянно запрашивать физическую функцию если данные не изменилось)
ScorpioT1000, и да забыл что мой старый акк pro100master просто пока в него не могу войди...
2
37
6 лет назад
2
JMacTep, это нужно в описание добавить, а не мне рассказать.
Про аккаунт обращаться в техподдержку
2
15
6 лет назад
2
И как заставить работать ObjectMerger ? Информации об этом актуальной найти не могу.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.