33) Чтобы начать использовать луа-скрипты (в стартере с аддоном.длл), надо из какого-нибудь (Классик-)мода любого с этими скриптами скопировать всю папку lua к себе в мод, оттуда файл default.lua скопировать в основную папку своего мода и переименовать в main.lua, EnableLuaScripts=1 в Config/ai.reg.
В этом дефолтном файле остается ошибка с регенерацией здоровья, которая так или иначе исправляется в конкретных модах (см. Минор-мод).
В main.lua в функции RegenerateHp строки
hp.regen = hp.regen + hp.regen * unit_stats:perkModifier(PerkType.Vitality) * 0.01
hp.regen = hp.regen * regen_spell
unit_stats:heal(common_server_stats_addr, hp.max * hp.regen)
исправить на
local hp_regen = hp.regen + hp.regen * unit_stats:perkModifier(PerkType.Vitality) * 0.01
hp_regen = hp_regen * regen_spell
unit_stats:heal(common_server_stats_addr, hp.max * hp_regen)
Опыт для взятия навыка уровня level с нуля GetSkillPrice(level) почему-то там
return 46 * 1.61 ^ (level / 5)
Тогда как если
return 50 * 1.61 ^ (level / 5)
То при прокачке навыка с 0 до 100 затраты опыта отличаются от оригинала только на 1, это с той округляющей функцией GetSkillPriceDiff(from, to), какая там предложена
return math.floor(GetSkillPrice(to) - GetSkillPrice(from))
Из непонятного, мне не понятно, зачем понадобилось создавать массив с эффектами заклинаний, наложенных на юнита.
local spell_effect_mods = Array(spell_effect_mods_addr, Memory.Type.Float, 40, true)
Тогда как эффекты заклинаний вполне себе берутся и без этого массива из
local unit = UnitServer(unit_addr)
local regen_spell = unit : spellEffect(SpellType.Regeneration)
И зачем и откуда этот массив передается в аргументы функций CalcAttackParamsOnServer и CalcAttackParamsOnClient, где без этого массива тоже можно обойтись.
В Жамевю традиция использования этого массива продолжена, размерность увеличена с 40 до 53.
Ещё в Жамевю появилось (и включаются в настройках) несколько новых функций с дополнительными аргументами вроде unitname (прототип юнита), в безопасности, сколько выбрано штук оружия. Предположительно, достаточно было определить адреса в памяти всех этих новых аргументов, как уже было для прежних всяких значений. И использовать прежние основные функции RecalcUnitStats и прочие, которые только повод, чтобы что угодно посчитать и поменять.
Надо отметить, что с нынешними луа-скриптами больше не предусмотрено распределение получаемого опыта между персонажами как в оригинальной сетевой игре в зависимости от относительного общего набранного опыта персонажей, а только в зависимости от числа персонажей.
В этом дефолтном файле остается ошибка с регенерацией здоровья, которая так или иначе исправляется в конкретных модах (см. Минор-мод).
В main.lua в функции RegenerateHp строки
hp.regen = hp.regen + hp.regen * unit_stats:perkModifier(PerkType.Vitality) * 0.01
hp.regen = hp.regen * regen_spell
unit_stats:heal(common_server_stats_addr, hp.max * hp.regen)
исправить на
local hp_regen = hp.regen + hp.regen * unit_stats:perkModifier(PerkType.Vitality) * 0.01
hp_regen = hp_regen * regen_spell
unit_stats:heal(common_server_stats_addr, hp.max * hp_regen)
Опыт для взятия навыка уровня level с нуля GetSkillPrice(level) почему-то там
return 46 * 1.61 ^ (level / 5)
Тогда как если
return 50 * 1.61 ^ (level / 5)
То при прокачке навыка с 0 до 100 затраты опыта отличаются от оригинала только на 1, это с той округляющей функцией GetSkillPriceDiff(from, to), какая там предложена
return math.floor(GetSkillPrice(to) - GetSkillPrice(from))
Из непонятного, мне не понятно, зачем понадобилось создавать массив с эффектами заклинаний, наложенных на юнита.
local spell_effect_mods = Array(spell_effect_mods_addr, Memory.Type.Float, 40, true)
Тогда как эффекты заклинаний вполне себе берутся и без этого массива из
local unit = UnitServer(unit_addr)
local regen_spell = unit : spellEffect(SpellType.Regeneration)
И зачем и откуда этот массив передается в аргументы функций CalcAttackParamsOnServer и CalcAttackParamsOnClient, где без этого массива тоже можно обойтись.
В Жамевю традиция использования этого массива продолжена, размерность увеличена с 40 до 53.
Ещё в Жамевю появилось (и включаются в настройках) несколько новых функций с дополнительными аргументами вроде unitname (прототип юнита), в безопасности, сколько выбрано штук оружия. Предположительно, достаточно было определить адреса в памяти всех этих новых аргументов, как уже было для прежних всяких значений. И использовать прежние основные функции RecalcUnitStats и прочие, которые только повод, чтобы что угодно посчитать и поменять.
Надо отметить, что с нынешними луа-скриптами больше не предусмотрено распределение получаемого опыта между персонажами как в оригинальной сетевой игре в зависимости от относительного общего набранного опыта персонажей, а только в зависимости от числа персонажей.

Форумы
Вселенная аллодов
