function TK1 takes nothing returns nothing local unit u=GetEnumUnit() if(GetTerrainType(GetUnitX(u),GetUnitY(u))==1131442035)then call KillUnit(u) endif set u=null endfunction function TK0 takes nothing returns nothing local group g=CreateGroup() call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null) call ForGroup(g,function TK1) call GroupClear(g) call DestroyGroup(g) set g=null endfunction function TerrainKill takes nothing returns nothing local timer t=CreateTimer() call TimerStart(t,0.03,true,function TK0) endfunction
Та это я так..) Код далёк до идеала, но это не важно Если этот код относится к этой "статье", нужно писать комментарии что к чему! Не все же имбожассеры как ты
Ближе к сути, что именно(если ты про локальную группу то это пример в виде наработки, а так лучше что-бы была глобалка конечно). Дальше смотреть только автору
Code
function Spell_A000_Filter takes nothing returns boolean local unit f=GetFilterUnit() local real x=GetUnitX(f) local real y=GetUnitY(f) set f=null return GetTerrainType(x,y)==1231643493 endfunction function Move takes nothing returns nothing local unit c=GetEnumUnit() local real a=GetUnitFacing(c)*0.017453292 call SetUnitX(c,GetUnitX(c)+5.*Cos(a)) call SetUnitY(c,GetUnitY(c)+5.*Sin(a)) set c=null endfunction function Action takes nothing returns nothing local real x=GetRectCenterX(bj_mapInitialPlayableArea) local real y=GetRectCenterY(bj_mapInitialPlayableArea) local group g=CreateGroup() local boolexpr b=Condition(function Spel_A000_Filter) call GroupEnumUnitsInRange(g,x,y,999999999,b) call ForGroup(g,function Move) call GroupClear(g) call DestroyGroup(g) call DestroyBoolExpr(b) set b=null set g=null endfunction function InitTrig_trg takes nothing returns nothing local timer t=CreateTimer() call TimerStart(t,.01,true,function Action) endfunction
Banzay89, пле! Я забыл таймер обнулить! Ёмаё! Вот с обнулённым таймером:
Code
function TK1 takes nothing returns nothing local unit u=GetEnumUnit() if(GetTerrainType(GetUnitX(u),GetUnitY(u))==1131442035)then call KillUnit(u) endif set u=null endfunction function TK0 takes nothing returns nothing local group g=CreateGroup() call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null) call ForGroup(g,function TK1) call GroupClear(g) call DestroyGroup(g) set g=null endfunction function TerrainKill takes nothing returns nothing local timer t=CreateTimer() call TimerStart(t,0.03,true,function TK0) set t=null endfunction
Местами здесь.
Сообщение отредактировал EdiTTORR - Суббота, 25 Декабря 2010, 14:30:56
EdiTTORR, локалка лучше потому, что это дает нам мультиплеерность наработки (МУИ) По сабжу:
Quote
call GroupClear(g)
действие в принцепи лишнее, так как сразу после этого группа удаляеться..ОО
Quote
call ForGroup(g,function Move)
а это уже плохо. тут цыклом делать нужно:
Code
local unit gg // еще одна локалка в начале // другие локалки call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null) loop set gg=FirstOfGroup(g) exitwhen gg==null // дальше можешь ставить нужные условия //действия над юнитом в группе call GroupRemoveUnit(g,gg) endloop // другие действия
Quote
function TK0 takes nothing returns nothing local group g=CreateGroup() call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null) call ForGroup(g,function TK1) call GroupClear(g) call DestroyGroup(g) set g=null endfunction function TerrainKill takes nothing returns nothing local timer t=CreateTimer() call TimerStart(t,0.03,true,function TK0) endfunction
вот ты запускаешь таймер call TimerStart(t,0.03,true,function TK0) на функцию TK0 а где local timer t=GetExpiredTimer() ???
Зачем тебе? Тем более что ссылок на этот таймер нету(раз), и таймер зацикленный(два), и он уже создан до конца игры и по этому имеет одну ссылку(три).
Quote (Banzay89)
а это уже плохо. тут цыклом делать нужно:
В принципе ты прав... Но ForGroup вреда большого не несёт.
Quote (Banzay89)
локалка лучше потому, что это дает нам мультиплеерность наработки (МУИ)
Это тоже правда, но в этой наработке берутся абсолютно все юниты на карте, поэтому она не может быть муи(она не имеет возможности перезапуска раньше окончания работы, значит переменная не перезапишется,(даже если и нет то группа всё-равно содержит всех юнитов на карте)). И кстати мультиплеерность это MPI
Quote (Banzay89)
действие в принцепи лишнее, так как сразу после этого группа удаляеться..ОО
Вроде надо её подчищать перед удалением(насколько я помню)...
И таймерстарт не создаёт таймер, таймер создан(CreateTimer()) и обнулён в конце(t=null), а функцией GetExpiredTimer() на таймер создаётся ссылка.
Quote (Banzay89)
я понятия не имею что там на карте. я вижу только этот код, по - этому и говорю, что локалки всегда муи, а глобалки ток с массивом вот и все. =О
Так я же тоже не вижу карты, я просто читал посты и "уловил месседж"(с)Mr.Freeman
Quote (Banzay89)
а глобалки ток с массивом вот и все. =О
К тому что нужно автору топика относится фраза : "Зимой и летом одним цветом"(ему надо на протяжении ВСЕГО игрового процесса убивать ВСЕХ юнитов на карте которые стоят на льду)
Местами здесь.
Сообщение отредактировал EdiTTORR - Суббота, 25 Декабря 2010, 15:14:39
call removeDestroyDamage inreger unit local == true return boolean nothing
Вхахаха!!!
Quote (Banzay89)
это немножко не из той оперы. это просто переодический таймер и GetExpiredTimer() все равно нужен
Pa3apT правильно говорит, таймер - обьект который создается функцией CreateTimer(), TimerStart всего лишь навсего запускает его, в моём случае я оборвал хендл на него(обнулил), после этого в таблице хендлов не должно быть на него ссылки, GetExpiredTimer() создаёт в таблице хендлов ссылку на этот таймер, и лишний гемор это делать.