Магия воздуха не нужна. Она влияет только на диапазон коэффициентов, который доступен в диалоге.
Дело в том, что float в int запихнуть можно (оба 4 байта), но больше туда ничего не влезет. Поэтому хранить там нужно только небольшие целые числа. Уровень Магии Воздуха будет выступать селектором таблицы коэффициентов.
packed_info = Длительность (нужна, т.к. будет уменьшаться) <+> Уровень Магии Воздуха (на момент каста) <+> Положение ползунка (выбранный коэффициент в виде целого числа, т.е. индекс)
Есть идея переделать заклинание Маскировка - давать диалоговое окно с ползунком, примерно как при разделении отрядов. На осн уровне Воздуха шкала с 3 значениями 0.66 - 1 - 1.5, на продв. 7 значений - 0.33 - 0.5 - 0.66 - 1 - 1.5 - 2.0 - 3.0, на эксперте 9 значений 0.2 - 0.33 - 0.5 - 0.66 - 1 - 1.5 -2.0 - 3.0 - 5.0.
- Код: Выделить всё
float coef = 1.00; // Для основного уровня Магии Воздуха можно придумать коэффициент поинтереснее :)
float coefBasic[] = {0.66, 1.00, 1.50};
float coefAdvanced[] = {0.33, 0.50, 0.66, 1.00, 1.50, 2.00, 3.00};
float coefExpert[] = {0.20, 0.33, 0.50, 0.66, 1.00, 1.50, 2.00, 3.00, 5.00};
switch ( lvlAirMagic ) {
case 1: coef = coefBasic[nDialog]; break;
case 2: coef = coefAdvanced[nDialog]; break;
case 3: coef = coefExpert[nDialog]; break;
}
nDialog - выбранное с помощью ползунка значение.
При таком подходе можно не париться насчёт того, какие и сколько коэффициентов (положений ползунка) на заданном уровне Магии Воздуха. Если понадобится изменить коэффициенты или увеличить их кол-во, достаточно будет поправить массивы выше.