[QUOTE=ADOLF]оптимизированный вариант? - база данных
начнем с того что если у юнита броня в серьезном минусе и мало хп его просто может убить
[/QUOTE]
Вот именно поэтому нужна строчка
RMaxBJ(1, life + Value*10)
Она не позволит убить юнита при любом кол-ве ХП и отрицательном показателе брони.
На счет оптимизации БД, ваша правда. Но давайте представим, что в карте более 50героев и более 100 предметов. При таком раскладе оче-е-ень трудно учесть все вариации. Так же забивать БД ради одного лишь спелла не совсем правильный подход.
Я не претендую на безупречность этого алгоритма, это далеко не так. Но все же в большинстве случаев, картостроителям будет вполне достаточно этой функции.
З.Ы. Хотелось бы узнать, уж очень стало интересно, зачем нулить входные параметры функции? ([i]set u = null !!![/i])
Очень информативный ответ.. А как на счет того чтобы указать где именно, а еще лучше предложить свой более "оптимизированный" вариант. Главное здесь то, что функция определяет код-во брони, остальное, имхо, уже не столь важно.
Функция возвращает кол-во брони юнита:
Точность ~ 97%
function UnitArmor takes unit u returns real
local real Value = 10.00
local real Factor = 0.0
local real MHP = 0.0
local real HP = 0.0
local real Damage = 0.0
local real life = GetUnitState(u, UNIT_STATE_LIFE)
call SetUnitState( u, UNIT_STATE_LIFE, RMaxBJ(1, life + Value*10) )
set MHP = GetUnitState(u, UNIT_STATE_LIFE)
call UnitDamageTarget( u, u, Value, true, false, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS )
set HP = GetUnitState(u, UNIT_STATE_LIFE)
call SetUnitState( u, UNIT_STATE_LIFE, life )
set Damage = Value + HP - MHP
set Factor = Damage / Value
set Factor = (Factor * 0.06) / ( 1 - Factor )
return Factor
endfunction
function UnitArmorInt takes unit u returns integer
local real R = UnitArmor(u)
if ( ModuloReal(R, I2R(R2I(R))) > 0.5 ) then
return R2I(R) + 1
endif
return R2I(R)
endfunction
З.Ы. Была написана для использования в пассивном спелле, когда кол-во дамага наносимого аурой зависело от кол-ва брони.
» WarCraft 3 / Библиотека функций
На счет оптимизации БД, ваша правда. Но давайте представим, что в карте более 50героев и более 100 предметов. При таком раскладе оче-е-ень трудно учесть все вариации. Так же забивать БД ради одного лишь спелла не совсем правильный подход.
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
Точность ~ 97%