Собственно нужны предложения по улучшению быстродействия выполнения следующего кусочка кода:
Code
void UpdateHeroStats(int id)
{
int itid
int i = 0
HeroesBonusDamage[id] = 0
HeroesBonusAS[id] = 0.0
itid = GetItemTypeId(HeroesItem1[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
itid = GetItemTypeId(HeroesItem2[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
itid = GetItemTypeId(HeroesItem3[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
itid = GetItemTypeId(HeroesItem4[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
itid = GetItemTypeId(HeroesItem5[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
itid = GetItemTypeId(HeroesItem6[id])-'I000'
HeroesBonusDamage[id] += ItemDamage[itid]
HeroesBonusAS[id] += ItemAS[itid]
loop
{
UnitRemoveAbility(Heroes[id], 'A00J'-i)
exitwhen(i == 10)
i++
}
i = 0
int j = 1024
loop
{
if(HeroesBonusDamage[id] >= j)
{
UnitAddAbility(Heroes[id], 'A00J'-i)
HeroesBonusDamage[id]-=j
}
exitwhen(i == 10)
i++
j = j/2
}
i=0
loop
{
UnitRemoveAbility(Heroes[id], 'A008'-i)
exitwhen(i == 8)
i++
}
i=0
real k = 2.56
loop
{
if(HeroesBonusAS[id] >= k)
{
UnitAddAbility(Heroes[id], 'A008'-i)
HeroesBonusAS[id]-=k
}
i++
k = k/2
}
}
собственно из названий переменных всё понятно, HeroesItem1..6 - 6 предметов(шлем...оружие), если одеты, то это item, если нет - null
предметы зарегестрированы в базу таким образом, что в массивы ItemAS/ItemDamage записываются их урон/+ к скорости атаки в ячейку, равную номеру предмету(ItemId - 'I000') в Р.О.
на счёт абилок в циклах:
это триггерное изменение + к урону и скорости атаки
глобалки не предлагать, кое кто очень умный часто намекает на их медлительность относительно локалок
HeroesBonusDamage - int array
HeroesBonusAS - real array
ух чуть не забыл, передаваемый аргумент id - номер игрока владельца героя, Heroes - массив героев, у каждого игрока по 1му герою
соответственно Heroes[0] - герой первого игрока
эта функция вызывается при подборе предмета, в случаях если инвентарь изменился, лаг происходит именно в этой функцииДобавлено (27 Августа 2012, 15:46:02)
---------------------------------------------
ой, это из-за первого получения абилок, глобалки локалками заменил
клоуз