Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Наработка
Версия Warcraft:
Reforged
Рекомендуется использовать доработанную версию.
Наработка, позволяющая изменять бонусные характеристики юнита в диапазоне +-4096. По сути является BonusMod переписанной на lua.
Типы праметров:
- 1 Сила
- 2 Ловкость
- 3 Интеллект
- 4 Урон
- 5 Броня
- 6 Регенерация здоровья
- 7 Регенерация маны
- 8 Модификатор видимости
Список функций
---@param target unit
---@param mod integer
function UnitClearBonus (target, mod) end
---@param target unit
---@param mod integer
---@param ammount integer
---@return boolean
function UnitSetBonus (target, mod, ammount) end
---@param target unit
---@param mod integer
---@return integer
function UnitGetBonus (target, mod) end
---@param target unit
---@param mod integer
---@param ammount integer
---@return boolean
function UnitAddBonus (target, mod, ammount) end
Перенос в свою карту
Способности
- Все нестандартные способности. Их много, но простого способа переноса я пока не нашёл.
Триггеры
- BonusMod
Код
do
local POWERS = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 }
local MAX, MIN = POWERS[#POWERS], -POWERS[#POWERS]
local ABILITY = {
--STR: 1 [1-13]
FourCC('ZxF0'), -- +1
FourCC('ZxF1'), -- +2
FourCC('ZxF2'), -- +4
FourCC('ZxF3'), -- +8
FourCC('ZxF4'), -- +16
FourCC('ZxF5'), -- +32
FourCC('ZxF6'), -- +64
FourCC('ZxF7'), -- +128
FourCC('ZxF8'), -- +256
FourCC('ZxF9'), -- +512
FourCC('ZxFa'), -- +1024
FourCC('ZxFb'), -- +2048
FourCC('ZxFc'), -- -4096
-- AGI 2 [14-26]
FourCC('ZxG0'), -- +1
FourCC('ZxG1'), -- +2
FourCC('ZxG2'), -- +4
FourCC('ZxG3'), -- +8
FourCC('ZxG4'), -- +16
FourCC('ZxG5'), -- +32
FourCC('ZxG6'), -- +64
FourCC('ZxG7'), -- +128
FourCC('ZxG8'), -- +256
FourCC('ZxG9'), -- +512
FourCC('ZxGa'), -- +1024
FourCC('ZxGb'), -- +2048
FourCC('ZxGc'), -- -4096
-- INT 3 [27-39]
FourCC('ZxH0'), -- +1
FourCC('ZxH1'), -- +2
FourCC('ZxH2'), -- +4
FourCC('ZxH3'), -- +8
FourCC('ZxH4'), -- +16
FourCC('ZxH5'), -- +32
FourCC('ZxH6'), -- +64
FourCC('ZxH7'), -- +128
FourCC('ZxH8'), -- +256
FourCC('ZxH9'), -- +512
FourCC('ZxHa'), -- +1024
FourCC('ZxHb'), -- +2048
FourCC('ZxHc'), -- -4096
-- DAMAGE 4 [40-52]
FourCC('ZxB0'), -- +1
FourCC('ZxB1'), -- +2
FourCC('ZxB2'), -- +4
FourCC('ZxB3'), -- +8
FourCC('ZxB4'), -- +16
FourCC('ZxB5'), -- +32
FourCC('ZxB6'), -- +64
FourCC('ZxB7'), -- +128
FourCC('ZxB8'), -- +256
FourCC('ZxB9'), -- +512
FourCC('ZxBa'), -- +1024
FourCC('ZxBb'), -- +2048
FourCC('ZxBc'), -- -4096
-- ARMOR 5 [53-65]
FourCC('ZxA0'), -- +1
FourCC('ZxA1'), -- +2
FourCC('ZxA2'), -- +4
FourCC('ZxA3'), -- +8
FourCC('ZxA4'), -- +16
FourCC('ZxA5'), -- +32
FourCC('ZxA6'), -- +64
FourCC('ZxA7'), -- +128
FourCC('ZxA8'), -- +256
FourCC('ZxA9'), -- +512
FourCC('ZxAa'), -- +1024
FourCC('ZxAb'), -- +2048
FourCC('ZxAc'), -- -4096
-- HP 6 [66-78]
FourCC('ZxE0'), -- +1
FourCC('ZxE1'), -- +2
FourCC('ZxE2'), -- +4
FourCC('ZxE3'), -- +8
FourCC('ZxE4'), -- +16
FourCC('ZxE5'), -- +32
FourCC('ZxE6'), -- +64
FourCC('ZxE7'), -- +128
FourCC('ZxE8'), -- +256
FourCC('ZxE9'), -- +512
FourCC('ZxEa'), -- +1024
FourCC('ZxEb'), -- +2048
FourCC('ZxEc'), -- -4096
-- MP 7 [79-91]
FourCC('ZxC0'), -- +1
FourCC('ZxC1'), -- +2
FourCC('ZxC2'), -- +4
FourCC('ZxC3'), -- +8
FourCC('ZxC4'), -- +16
FourCC('ZxC5'), -- +32
FourCC('ZxC6'), -- +64
FourCC('ZxC7'), -- +128
FourCC('ZxC8'), -- +256
FourCC('ZxC9'), -- +512
FourCC('ZxCa'), -- +1024
FourCC('ZxCb'), -- +2048
FourCC('ZxCc'), -- -4096
-- SIGHT 8 [92-104]
FourCC('ZxC0'), -- +1
FourCC('ZxC1'), -- +2
FourCC('ZxC2'), -- +4
FourCC('ZxC3'), -- +8
FourCC('ZxC4'), -- +16
FourCC('ZxC5'), -- +32
FourCC('ZxC6'), -- +64
FourCC('ZxC7'), -- +128
FourCC('ZxC8'), -- +256
FourCC('ZxC9'), -- +512
FourCC('ZxCa'), -- +1024
FourCC('ZxCb'), -- +2048
FourCC('ZxCc') -- -4096
}
local TYPES = #ABILITY / #POWERS
---@param target unit
---@param mod integer
function UnitClearBonus (target, mod)
if type(mod) ~= 'number' or mod < 1 or mod >= TYPES then
return print('UnitGetBonus: Invalid mod', mod)
end
for i = 1, #POWERS do
UnitRemoveAbility(target, ABILITY[(mod - 1) * #POWERS + i])
end
end
---@param target unit
---@param mod integer
---@param ammount integer
---@return boolean
function UnitSetBonus (target, mod, ammount)
if type(mod) ~= 'number' or mod < 1 or mod >= TYPES then
print('UnitSetBonus: Invalid mod', mod)
return false
elseif type(ammount) ~= 'number' or ammount < MIN or ammount > MAX then
print('UnitSetBonus: Bonus too high or low', ammount)
return false
end
local ability = ABILITY[(mod - 1) * #POWERS + #POWERS]
if ammount < 0 then
ammount = MAX + ammount
UnitAddAbility(target, ability)
UnitMakeAbilityPermanent(target, true, ability)
else
UnitRemoveAbility(target, ability)
end
for i = #POWERS - 1, 1, -1 do
ability = ABILITY[(mod - 1) * #POWERS + i]
if ammount >= POWERS[i] then
UnitAddAbility(target, ability)
UnitMakeAbilityPermanent(target, true, ability)
ammount = ammount - POWERS[i]
else
UnitRemoveAbility(target, ability)
end
end
return true
end
---@param target unit
---@param mod integer
---@return integer
function UnitGetBonus (target, mod)
local ammount = 0
if type(mod) ~= 'number' or mod < 1 or mod >= TYPES then
return print('UnitGetBonus: Invalid mod', mod)
end
if GetUnitAbilityLevel(target, ABILITY[(mod - 1) * #POWERS + #POWERS]) > 0 then
ammount = MIN
end
for i = 1, #POWERS do
if GetUnitAbilityLevel(target, ABILITY[(mod - 1) * #POWERS + i]) > 0 then
ammount = ammount + POWERS[i]
end
end
return ammount
end
---@param target unit
---@param mod integer
---@param ammount integer
---@return boolean
function UnitAddBonus (target, mod, ammount)
return UnitSetBonus(target, mod, UnitGetBonus(target, mod) + ammount)
end
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
ТОесть ты выбрал вражеского юнита,прописал команду и он перешел перед твое командование,
Сделать разоединение союза - тоесть например -unally 4-8 тоесть если написать то эти игроки не будут в союзе
Просто хочется более "фановых" модов
НО!Впринципе этот мод очень хороший,ничего не имею против,каким-нибудь могущественным картоделам может эта идея понравится,если захотите можете её воплотить,думаю будет реально забавно (пусть эти моды и ломают механику,но чисто поугарать над фигней в соло режимах всё же хочется)
А то что написал ты, моды да, но они достаточно простые и делаются на гуи и не достойны какой либо отдельной наработки, (хотя чую NazarPunk уже пошёл делать)
Отредактирован MpW
Отредактирован Берги
Так вот, что за ошибка?
А конкретно неработоспособность 8 Мода - Радиуса видимости
либо вместо
Отредактирован MpW
MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask + другие бонусы типа чародейской ауры - общий реген (так как у героя работает только реген от инты и от других бонусов, а вот базовый реген не учитывается. Так как базовый реген не работает на герое)
MANA_REGEN_Common = mana_regen_Intellect + MANA_REGEN_SobiMask1 + MANA_REGEN_SobiMask2 + другие бонусы типа чародейской ауры - общий реген ((если абилок от маски соби несколько, они суммируются вот так)
Какие бонусы есть в игре? Это пассивки (чародейская аура, аура фонтана, маска соби не учитывается), активных заклинании с постепенным восстановлением не много (рев, леденящий крик, омоложение не учитывается,
base_mana_regen - базовый реген, который указан в РО юнита "Характеристики - Восстановление маны". Работает только у обычных юнитов, тестировал этот момент у героя. У героя показывает реген от интеллекта (базовый не работает у героя), но когда он одевает маску соби учитывается базовый реген. Благодаря базовому регену, можно сделать героя с уникальным регеном.
mana_regen_Intellect = Intellect * k - реген от интеллекта (где Intellect - кол-во интеллекта героя, k - константа "Характеристики героя: увеличение скорости восстановления за единицу разума", которая за каждую единицу маны восстанавливает заданное число)
p - процент от абилки
Отредактирован MpW
Отредактирован MpW
AS - attack speed - Скорость атаки, кол-во ударов в сек
BAS - basic attack speed - Базовая скорость атаки, кол-во ударов в сек
IAS - increase attack speed дополнительный процент. Складывается из ловкости героя и бонусов скорости атаки. Не может быть выше 400 или ниже -80. Изначально скорость не измерялась в процентах, но так пошло в варкрафте. Понижение и увеличение скорости осуществляется с помощью модификаторов-способностей. А еще дополнительно от ловкости через константы. Изначальная скорость юнитов равно 1.00 (100%). Максимум бонусом можно задать 4.00 (400%). Это в сумме: изначальная + бонусная = 100+400 = 500%. В варкрафте в максимум упирается в в этот потолок, это 5 ударов в сек. больше никак не сделать. ниже 100% нормы - уже скорость идет на понижение. самый минимальный предел = 20%. Ниже 20% никак нельзя поставить.
Time - время задержки после добавления модификации бонусов, сек. Этот параметр добавил специально, чтобы смотреть как меняется время задержки между атаками после добавления модификаторов.
Magina - The Anti-Mage (Антимаг) – 1.45 сек.
Shandelzare Silkwood - The Vengeful Spirit (Венга) – 1.77 сек.
Balanar - The Night Stalker (Сталкер) – 1.8 сек.
Terrorblade - The Soul Keeper (Террорблейд) – 1.5 сек.
Чтобы вычислить базовую скорость атаки (BAS), нужно количество выстрелов (ударов) разделить на время, за которое они произведены. За основу мы берем единицу, т.е. один удар, которым совершаем атаку за определенное время. То есть мы должны 1 разделить на Delay, так как пауза между выстрелами (ударами) равна 1.7 сек., отсюда: BAS =1/Delay=1/1.7 ≈ 0.6 выстрелов в секунду. Для вышеуказанных героев с отличающимися задержками от стандартной, все рассчитывается точно так же по формуле BAS =1/Delay.
AS = BAS* (1 + Σ IAS)=1/Delay*(1 + Σ IAS)
Silencer с ловкостью в 20 ед., тогда:
Σ IAS = 20 * 1% = 20%,
AS = 0.6 * (1+ 20%) ≈ 0,7 выстрелов (ударов) в секунду
Time = Delay / (1+ 20%) = 1.7 / 1.2 % = 1.4 сек - задержка между ударами
Σ IAS = 35 * 1% + 30% + 15% = 80%,
AS = 0.6* (1+80%) ≈ 1.1 выстрел (удар) в секунду
Time = Delay / (1+80%) = 1.7 / 1.8 % = 0.94 сек - задержка между ударами
https://xgm.guru/p/wc3/228035
https://zhyk.ru/forum/showthread.php?t=94549
Отредактирован MpW
можно вообще работать только с BAT (AttackSpeed). а бонусы просто в интерфейс через фреймы информировать зелеными циферками.