Это работает и даже НЕ лагает
Но я понимаю, что это, мягко говоря, НЕ совсем нормально
В общем, если кто-то сможет переписать это так, чтобы оно было меньше по объёму С СОХРАНЕНИЕМ ВСЕЙ САМОДОКУМЕНТАЦИИ - СПС
Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Мб можно в те же группы заново передобавлять юниты, кстати, ппц башка уже болит после этой волны лавы, как не знаю что, в общем, попробуйте улучшить, если не влом
ну и точки офк если реально убрать, то можно
но С СОХРАНЕНИЕМ И КОРРЕКТИРОВКОЙ САМОДОКУМЕНТАЦИИ - убрали точки, вычеркнули их везде, убрали группы - тоже и т. д. Или вообще не надо
смотреть сюда
function LavaWave2 takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, p2, firewayunits, firewayunits2, afirewayunits, afirewayunits2, bfirewayunits, bfirewayunits2, cfirewayunits, cfirewayunits2, dfirewayunits, dfirewayunits2, efirewayunits, efirewayunits2, ffirewayunits, ffirewayunits2
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local unit u7
local location p
local location p2
local group firewayunits1 = CreateGroup()
local group firewayunits2 = CreateGroup()
local group afirewayunits1 = CreateGroup()
local group afirewayunits2 = CreateGroup()
local group bfirewayunits1 = CreateGroup()
local group bfirewayunits2 = CreateGroup()
local group cfirewayunits1 = CreateGroup()
local group cfirewayunits2 = CreateGroup()
local group dfirewayunits1 = CreateGroup()
local group dfirewayunits2 = CreateGroup()
local group efirewayunits1 = CreateGroup()
local group efirewayunits2 = CreateGroup()
local group ffirewayunits1 = CreateGroup()
local group ffirewayunits2 = CreateGroup()
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
local integer i = LoadInteger(udg_Hash,GetHandleId(t),3)
local integer i2 = LoadInteger(udg_Hash,GetHandleId(t),4)
local real r
set i = i + 1
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
if (i2<120) then
set p = GetUnitLoc (u6)
set p2 = PolarProjectionBJ(p, ( 8.00 ), GetUnitFacing(u6))
call SetUnitPositionLoc (u6, p2)
call RemoveLocation (p)
call RemoveLocation (p2)
else
call KillUnit (u6)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif
if (i>49) and (i<51) then
set p = GetUnitLoc (u6)
set p2 = PolarProjectionBJ(p, ( 4.00 ), GetUnitFacing(u6))
call RemoveUnit(u6)
call CreateNUnitsAtLocFacingLocBJ( 1, 'n394', GetOwningPlayer(u5), p, p2)
set u6 = GetLastCreatedUnit()
call SaveUnitHandle(udg_Hash,GetHandleId(t),2,u5)
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call RemoveLocation (p)
call RemoveLocation (p2)
set i2 = i2 + 1
call SaveInteger(udg_Hash,GetHandleId(t),4,i2)
set i = 0
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
УРОН ПО ГРУППЕ ОТ ЦЕНТРА
set p = GetUnitLoc (u6)
set firewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(firewayunits1)
exitwhen u7==null
call GroupRemoveUnit(firewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(firewayunits2,u7)
else
endif
endloop
call DestroyGroup (firewayunits1)
loop
set u7=FirstOfGroup(firewayunits2)
exitwhen u7==null
call GroupRemoveUnit(firewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (firewayunits2)
call RemoveLocation (p)
УРОН ПО ГРУППЕ ОТ ЦЕНТРА - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, 250.00, GetUnitFacing(u6) + 90)
set afirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(afirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(afirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(afirewayunits2,u7)
else
endif
endloop
call DestroyGroup (afirewayunits1)
loop
set u7=FirstOfGroup(afirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(afirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (afirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, -250.00, GetUnitFacing(u6) + 90)
set bfirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(bfirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(bfirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(bfirewayunits2,u7)
else
endif
endloop
call DestroyGroup (bfirewayunits1)
loop
set u7=FirstOfGroup(bfirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(bfirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (bfirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ ДАЛЬШЕ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, 550.00, GetUnitFacing(u6) + 90)
set cfirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(cfirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(cfirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(cfirewayunits2,u7)
else
endif
endloop
call DestroyGroup (cfirewayunits1)
loop
set u7=FirstOfGroup(cfirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(cfirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (cfirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ ДАЛЬШЕ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, -550.00, GetUnitFacing(u6) + 90)
set dfirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(dfirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(dfirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(dfirewayunits2,u7)
else
endif
endloop
call DestroyGroup (dfirewayunits1)
loop
set u7=FirstOfGroup(dfirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(dfirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (dfirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ ДАЛЬШЕ - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ ЕЩЕ ДАЛЬШЕ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, 850.00, GetUnitFacing(u6) + 90)
set efirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(efirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(efirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(efirewayunits2,u7)
else
endif
endloop
call DestroyGroup (efirewayunits1)
loop
set u7=FirstOfGroup(efirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(efirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (efirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ОДНУ СТОРОНУ ЕЩЕ ДАЛЬШЕ - ЗАКРЫТО.
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ ЕЩЕ ДАЛЬШЕ
set p2 = GetUnitLoc (u6)
set p = PolarProjectionBJ(p2, -850.00, GetUnitFacing(u6) + 90)
set ffirewayunits1 = GetUnitsInRangeOfLocAll(290.00, p)
set r = ( ( 150 + ( 50.00 * I2R(GetUnitAbilityLevelSwapped('A29I', u5)) )))
loop
set u7=FirstOfGroup(ffirewayunits1)
exitwhen u7==null
call GroupRemoveUnit(ffirewayunits1,u7)
if ( ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and ( IsUnitAliveBJ(u7) == true ) and ( IsUnitEnemy(u7,GetOwningPlayer(u5))==true)) then
call GroupAddUnit(ffirewayunits2,u7)
else
endif
endloop
call DestroyGroup (ffirewayunits1)
loop
set u7=FirstOfGroup(ffirewayunits2)
exitwhen u7==null
call GroupRemoveUnit(ffirewayunits2,u7)
call UnitDamageTargetBJ( u5, u7, r, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC )
endloop
call DestroyGroup (ffirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
УРОН ПО ГРУППЕ В ДРУГУЮ СТОРОНУ ЕЩЕ ДАЛЬШЕ - ЗАКРЫТО.
else
endif
call DestroyGroup (firewayunits1)
call DestroyGroup (firewayunits2)
call DestroyGroup (afirewayunits1)
call DestroyGroup (afirewayunits2)
call DestroyGroup (bfirewayunits1)
call DestroyGroup (bfirewayunits2)
call DestroyGroup (cfirewayunits1)
call DestroyGroup (cfirewayunits2)
call DestroyGroup (dfirewayunits1)
call DestroyGroup (dfirewayunits2)
call DestroyGroup (efirewayunits1)
call DestroyGroup (efirewayunits2)
call DestroyGroup (ffirewayunits1)
call DestroyGroup (ffirewayunits2)
call RemoveLocation (p)
call RemoveLocation (p2)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, p2, firewayunits, firewayunits2, afirewayunits, afirewayunits2, bfirewayunits, bfirewayunits2, cfirewayunits, cfirewayunits2, dfirewayunits, dfirewayunits2, efirewayunits, efirewayunits2, ffirewayunits, ffirewayunits2
set t = null
set u5 = null
set u6 = null
set u7 = null
set p = null
set p2 = null
set firewayunits1 = null
set firewayunits2 = null
set afirewayunits1 = null
set afirewayunits2 = null
set bfirewayunits1 = null
set bfirewayunits2 = null
set cfirewayunits1 = null
set cfirewayunits2 = null
set dfirewayunits1 = null
set dfirewayunits2 = null
set efirewayunits1 = null
set efirewayunits2 = null
set ffirewayunits1 = null
set ffirewayunits2 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function LavaWave1 takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, p, p2
local timer t = CreateTimer()
local unit u5 = GetTriggerUnit()
local unit u6
local location p = GetUnitLoc(u5)
local location p2 = PolarProjectionBJ(p, -2500.00, GetUnitFacing(u5))
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
local integer i = 0
local integer i2 = 0
if ( GetSpellAbilityId() == 'A29I' ) then

call CreateNUnitsAtLocFacingLocBJ( 1, 'n394', GetOwningPlayer(u5), p2, p)
set u6 = GetLastCreatedUnit()
call SaveUnitHandle(udg_Hash,GetHandleId(t),2,u5)
call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call SaveInteger (udg_Hash,GetHandleId(t),3,i)
call SaveInteger (udg_Hash,GetHandleId(t),4,i2)
call TimerStart (t, 0.02, true, function LavaWave2)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif
call RemoveLocation (p)
call RemoveLocation (p2)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, p, p2
set t = null
set u5 = null
set u6 = null
set p = null
set p2 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction

Принятый ответ

Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Это вроде должно быть легко поправить, вместо
call DestroyGroup (firewayunits1)
везде ставь
call GroupClear(firewayunits1)
и в самом конце уже, где идет обнуление переменных, там оставляешь DestroyGroup.
И с чего такая нелюбовь к глобалкам? Хештаблица используется, а это ж тоже глобалка, причем даже не просто глобалка, а супер-глобалка. У меня с ней постоянно головная боль была, из-за возникающих после интенсивной работы странных глюков...
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
7 лет назад
0
Поддерживать и улучшать физическую форму намного важнее
0
26
7 лет назад
Отредактирован Hate
0
а это поддержит вашу голову. в частности светлая голова важнее формочки
0
21
7 лет назад
0
Если бы это был высокооплачиваемый язык программирования, это одно
А сейчас JASS учить это макс. хобби
В общем, это оффтопик
2
12
7 лет назад
2
Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Это вроде должно быть легко поправить, вместо
call DestroyGroup (firewayunits1)
везде ставь
call GroupClear(firewayunits1)
и в самом конце уже, где идет обнуление переменных, там оставляешь DestroyGroup.
И с чего такая нелюбовь к глобалкам? Хештаблица используется, а это ж тоже глобалка, причем даже не просто глобалка, а супер-глобалка. У меня с ней постоянно головная боль была, из-за возникающих после интенсивной работы странных глюков...
Принятый ответ
0
21
7 лет назад
0
Sergarr, то, что надо, спасибо.
Если вдруг не влом будет самому переписать - перепиши, если нет - потом я когда-нить.
Ща сил уже нет, Рагнарос все выжал.
Ну хэш-таблица одна и как необходимость, а так по возможности стараюсь избегать лишних глобалок, а если использовать - то только такие вот реально глобальные глобалки и самые нужные.
0
25
7 лет назад
0
ClotPh, глобалки удобно использовать в качестве констант для разных спеллов. В случае любого баланс фикса не вылавливать константу по всему коду, а просто поменять одну глобаклу (код не смотрел)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.