function EndSupport takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit u = LoadUnitHandle(udg_Hash, id, 0) local unit u2 = LoadUnitHandle(udg_Hash, 5, 0) local integer Agi = (GetHeroStatBJ(bj_HEROSTAT_AGI, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) local integer Str = (GetHeroStatBJ(bj_HEROSTAT_STR, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) local integer Int = (GetHeroStatBJ(bj_HEROSTAT_INT, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) call ModifyHeroStat(bj_HEROSTAT_AGI,u2,bj_MODIFYMETHOD_SUB,Agi) call ModifyHeroStat(bj_HEROSTAT_STR,u2,bj_MODIFYMETHOD_SUB,Str) call ModifyHeroStat(bj_HEROSTAT_INT,u2,bj_MODIFYMETHOD_SUB,Int) call ShowUnitShow(u) call SetWidgetLife(u,GetWidgetLife(u2)) set t = null set u = null set u2 = null endfunction
function Trig_Support_Actions takes nothing returns nothing local unit sUnit = GetSpellAbilityUnit() local unit tUnit = GetSpellTargetUnit() local timer dTimer = CreateTimer() local integer id local integer Agi = (GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer Str = (GetHeroStatBJ(bj_HEROSTAT_STR, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer Int = (GetHeroStatBJ(bj_HEROSTAT_INT, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) call ShowUnitHide(sUnit) call AddSpecialEffectTargetUnitBJ("origin", tUnit, "Abilities\\Spells\\Human\\Avatar\\AvatarCaster.mdl") call ModifyHeroStat(bj_HEROSTAT_AGI, tUnit, bj_MODIFYMETHOD_ADD,Agi) call ModifyHeroStat(bj_HEROSTAT_STR, tUnit, bj_MODIFYMETHOD_ADD,Str) call ModifyHeroStat(bj_HEROSTAT_INT, tUnit, bj_MODIFYMETHOD_ADD,Int) call TimerStart(dTimer, 10, false, function EndSupport) set id = GetHandleId(dTimer) call SaveUnitHandle(udg_Hash, id, 0, sUnit) call SaveUnitHandle(udg_Hash, 5, 0, tUnit)
set sUnit = null set tUnit = null set dTimer = null endfunction
В общем, хотелось это все одной функцией сделать, без хэша. Сможет кто подсказать, как? Или придется записывать статы данные юниты и отнимать их в другой функции? Хотелось бы что-нибудь попроще.
Добавлено (05 Октября 2015, 22:24:32) --------------------------------------------- Вообще, если кто может предложить любую альтернативу триггеру (только без wait'a), пожалуйста, предложите))
Borodach, спасибо, что отозвался. Глобалка здесь не подойдет, я думаю. Попробовал сейвить интегер - не работает:
Код
function EndSupport takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit u = LoadUnitHandle(udg_Hash, id, 0) local integer iId = GetConvertedPlayerId(GetOwningPlayer(u)) local unit u2 = LoadUnitHandle(udg_Hash, 33*iId, 0) local integer Agi = LoadInteger(udg_Hash, iId*13, 0) local integer Str = LoadInteger(udg_Hash, iId*14, 0) local integer Int = LoadInteger(udg_Hash, iId*15, 0) call ModifyHeroStat(bj_HEROSTAT_AGI, u2, bj_MODIFYMETHOD_ADD,Agi) call ModifyHeroStat(bj_HEROSTAT_STR, u2, bj_MODIFYMETHOD_ADD,Str) call ModifyHeroStat(bj_HEROSTAT_INT, u2, bj_MODIFYMETHOD_ADD,Int) call ShowUnitShow(u) call SetUnitLifePercentBJ(u, GetUnitLifePercent(u2)) set t = null set u = null set u2 = null endfunction
function Trig_Support_Actions takes nothing returns nothing local unit sUnit = GetSpellAbilityUnit() local unit tUnit = GetSpellTargetUnit() local timer dTimer = CreateTimer() local integer id local integer iId = GetConvertedPlayerId(GetOwningPlayer(sUnit)) local integer Agi = GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true) local integer Str = GetHeroStatBJ(bj_HEROSTAT_STR, tUnit, true) local integer Int = GetHeroStatBJ(bj_HEROSTAT_INT, tUnit, true) local integer dAgi = (GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer dStr = (GetHeroStatBJ(bj_HEROSTAT_STR, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer dInt = (GetHeroStatBJ(bj_HEROSTAT_INT, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) call ShowUnitHide(sUnit) call AddSpecialEffectTargetUnitBJ("origin", tUnit, "Abilities\\Spells\\Human\\Avatar\\AvatarCaster.mdl") call SaveInteger(udg_Hash, iId*13, 0, Agi) call SaveInteger(udg_Hash, iId*14, 0, Str) call SaveInteger(udg_Hash, iId*15, 0, Int) call ModifyHeroStat(bj_HEROSTAT_AGI, tUnit, bj_MODIFYMETHOD_ADD,dAgi) call ModifyHeroStat(bj_HEROSTAT_STR, tUnit, bj_MODIFYMETHOD_ADD,dStr) call ModifyHeroStat(bj_HEROSTAT_INT, tUnit, bj_MODIFYMETHOD_ADD,dInt) call TimerStart(dTimer, 10, false, function EndSupport) set id = GetHandleId(dTimer) call SaveUnitHandle(udg_Hash, id, 0, sUnit) call SaveUnitHandle(udg_Hash, 33*iId, 0, sUnit)
set sUnit = null set tUnit = null set dTimer = null endfunction
Добавлено (06 Октября 2015, 10:14:40) --------------------------------------------- Сейчас подумал, а ведь все статы - это же реальные числа, почему не выдает ошибок и карта спокойно запускается, когда я их как целочисленные использую?
Добавлено (06 Октября 2015, 10:18:16) --------------------------------------------- Все-таки использую глобалки, понял как нужно. Но вопрос остается, почему статы - целые числа, а не реальные?? В редакторе объектов они же реальные.
Добавлено (06 Октября 2015, 11:33:16) ---------------------------------------------
Код
function EndSupport takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit u = LoadUnitHandle(udg_Hash, id, 0) local integer iId = GetConvertedPlayerId(GetOwningPlayer(u)) local unit u2 = udg_unit[iId] local integer Exp = GetHeroXP(u2) local integer Agi = (GetHeroStatBJ(bj_HEROSTAT_AGI, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) local integer Str = (GetHeroStatBJ(bj_HEROSTAT_STR, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) local integer Int = (GetHeroStatBJ(bj_HEROSTAT_INT, u2, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', u)))))) call ShowUnitShow(u) call SetUnitLifePercentBJ(u, GetUnitLifePercent(u2)) call ModifyHeroStat(bj_HEROSTAT_AGI,u2,bj_MODIFYMETHOD_SUB,Agi) call ModifyHeroStat(bj_HEROSTAT_STR,u2,bj_MODIFYMETHOD_SUB,Str) call ModifyHeroStat(bj_HEROSTAT_INT,u2,bj_MODIFYMETHOD_SUB,Int) call AddHeroXPSwapped(Exp, u, true) call SuspendHeroXPBJ(true, u) call SetUnitPositionLoc(u,GetUnitLoc(u2)) set t = null set u = null set u2 = null endfunction
function Trig_Support_Actions takes nothing returns nothing local unit sUnit = GetSpellAbilityUnit() local unit tUnit = GetSpellTargetUnit() local timer dTimer = CreateTimer() local integer id local integer iId = GetConvertedPlayerId(GetOwningPlayer(sUnit)) local integer dAgi = (GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer dStr = (GetHeroStatBJ(bj_HEROSTAT_STR, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) local integer dInt = (GetHeroStatBJ(bj_HEROSTAT_INT, tUnit, true)*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) set udg_sprt_Agi[iId] = GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true) set udg_sprt_Str[iId] = GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true) set udg_sprt_Int[iId] = GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true) call SuspendHeroXPBJ(false, sUnit) call ShowUnitHide(sUnit) call AddSpecialEffectTargetUnitBJ("origin", tUnit, "Abilities\\Spells\\Human\\Avatar\\AvatarCaster.mdl") call ModifyHeroStat(bj_HEROSTAT_AGI, tUnit, bj_MODIFYMETHOD_ADD,dAgi) call ModifyHeroStat(bj_HEROSTAT_STR, tUnit, bj_MODIFYMETHOD_ADD,dStr) call ModifyHeroStat(bj_HEROSTAT_INT, tUnit, bj_MODIFYMETHOD_ADD,dInt) call TimerStart(dTimer, 10, false, function EndSupport) set id = GetHandleId(dTimer) call SaveUnitHandle(udg_Hash, id, 0, sUnit) set udg_unit[iId] = tUnit
set sUnit = null set tUnit = null set dTimer = null endfunction
В чем дело? Пытался после окончания таймера давать столько статов, сколько в глобалках (указаны), но это как-то странно работает. Всем атрибутам одинаковое значение присваивается. Затем попытался вычислять статы - вообще не работает. Любые действия с юнитами производится, а со статами что-то не так.
Добавлено (06 Октября 2015, 11:51:13) ---------------------------------------------
function EndSupport takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit tUnit = LoadUnitHandle(udg_Hash, id, 3) local unit sUnit =LoadUnitHandle(udg_Hasg,id,4) local integer Agi = LoadInteger(udg_Hash, id, 0) local integer Str = LoadInteger(udg_Hash, id, 1) local integer Int = LoadInteger(udg_Hash, id, 2) call ModifyHeroStat(bj_HEROSTAT_AGI, tUnit, bj_MODIFYMETHOD_ADD,Agi) call ModifyHeroStat(bj_HEROSTAT_STR, tUnit, bj_MODIFYMETHOD_ADD,Str) call ModifyHeroStat(bj_HEROSTAT_INT, tUnit, bj_MODIFYMETHOD_ADD,Int) call ShowUnitShow(tUnit) call SetUnitLifePercentBJ(tUnit, GetUnitLifePercent(sUnit)) call DestroyTimer(t) // удаляешь таймер из памяти call FlushChildHandle(udg_Hash,id) // очищаешь хэш от не нужных данных (писал из памяти) set t = null set sUnit = null set tUnit = null endfunction
function Trig_Support_Actions takes nothing returns nothing local unit sUnit = GetSpellAbilityUnit() local unit tUnit = GetSpellTargetUnit() local timer dTimer = CreateTimer() set id = GetHandleId(dTimer) // ид локального таймера local integer Agi = GetHeroStatBJ(bj_HEROSTAT_AGI, tUnit, true) local integer Str = GetHeroStatBJ(bj_HEROSTAT_STR, tUnit, true) local integer Int = GetHeroStatBJ(bj_HEROSTAT_INT, tUnit, true) set Agi = (Agi *(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) set Str = (Str*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) set Int = (Int*(1+R2I((0.25*I2R(GetUnitAbilityLevelSwapped('A03U', sUnit)))))) call ShowUnitHide(sUnit) call AddSpecialEffectTargetUnitBJ("origin", tUnit, "Abilities\\Spells\\Human\\Avatar\\AvatarCaster.mdl") call SaveInteger(udg_Hash, id, 0, Agi) // сохраняешь в первом столбике номер таймера call SaveInteger(udg_Hash, id, 1, Str) //во втором столбике очередуешь цифры, чтоб не совпадали call SaveInteger(udg_Hash, id, 2, Int) call ModifyHeroStat(bj_HEROSTAT_AGI, tUnit, bj_MODIFYMETHOD_ADD,Agi) call ModifyHeroStat(bj_HEROSTAT_STR, tUnit, bj_MODIFYMETHOD_ADD,Str) call ModifyHeroStat(bj_HEROSTAT_INT, tUnit, bj_MODIFYMETHOD_ADD,Int) call TimerStart(dTimer, 10, false, function EndSupport) call SaveUnitHandle(udg_Hash, id, 3, tUnit) call SaveUnitHandle(udg_Hash, id, 4, sUnit) set sUnit = null set tUnit = null set dTimer = null endfunction
Karamba
Сообщение отредактировал Borodach - Вторник, 06 Октября 2015, 16:08:48