Пилю обалденный скилл супербога черной боли и смерти, он притягивает цель к кастеру и между кастером и целью еще обалденная цепь. Все бы хорошо, но каждый каст, судя по этой системе:
Код
function HandleCounter_Update(<- [color=red]jopa[/color]) takes nothing returns nothing local integer i = 0 local integer id local location array P local real result=0 loop exitwhen i >= 50 set i = i + 1 set P[i] = Location(0,0) set id = GetHandleId(P[i]) set result = result + (id-0x100000) endloop set result = result/i-i/2 loop call RemoveLocation(P[i]) set P[i] = null exitwhen i <= 1 set i = i - 1 endloop call LeaderboardSetItemValue(udg_HandleBoard,0,R2I(result)) endfunction
function InitTrig_HandleCounter takes nothing returns nothing call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions) endfunction
Создает сотню новых хендлов, а это плохо и будет рвать башню в карте если что?????
Добавлено (08 Июня 2014, 03:51:20) --------------------------------------------- Видно, это слишком сложно. Давайте лучше "как сдлеать чтобы моб создавался и шол?" и тему можно закрывать
function Trig_askjdhakjh2_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local unit att = LoadUnitHandle(udg_Hash,GetHandleId(t),1) local unit ett = LoadUnitHandle(udg_Hash,GetHandleId(t),2) local lightning LI = LoadLightningHandle(udg_Hash,GetHandleId(t),3) local real r = AngleBetweenPoints(Location(GetUnitX(att), GetUnitY(att)), Location(GetUnitX(ett), GetUnitY(ett))) local real x = GetUnitX(ett) - 35 * Cos(r * 0.0174532) local real y = GetUnitY(ett) - 35 * Sin(r * 0.0174532) local real jji = LoadReal(udg_Hash,GetHandleId(t),4) if DistanceBetweenPoints(Location(GetUnitX(att),GetUnitX(att)), Location(GetUnitX(ett),GetUnitX(ett))) > 60 and IsUnitAliveBJ(att) == true call SetUnitX(ett,x) call SetUnitY(ett,y) call MoveLightningEx( LI, true, GetUnitX(att), GetUnitY(att), jji, GetUnitX(ett), GetUnitY(ett), 0 ) else call DestroyLightning( LI ) call SetUnitPathing( ett, true ) if GetTerrainTypeBJ(Location(GetUnitX(ett), GetUnitY(ett))) == 'Yrtl' call ExplodeUnitBJ( ett ) endif call FlushChildHashtable(udg_Hash,GetHandleId(t)) call DestroyTimer(t) endif set att = null set ett = null set t = null endfunction
function askjdhakjh2 takes unit att, unit ett, real jji returns nothing local timer t = CreateTimer() local lightning LI = AddLightningEx( "CHIM", true, GetUnitX(att), GetUnitY(att), 0, GetUnitX(ett), GetUnitY(ett), 0 ) call SetUnitPathing( ett, false ) call SaveUnitHandle(udg_Hash,GetHandleId(t),1,att) call SaveUnitHandle(udg_Hash,GetHandleId(t),2,ett) call SaveLightningHandle(udg_Hash,GetHandleId(t),3,LI) call SaveReal(udg_Hash,GetHandleId(t),4,jji) call TimerStart(t,0.05,true,function Trig_askjdhakjh2_Timer) set att = null set ett = null set t = null endfunction
Ужасный код, зачем брать координаты, чтобы потом создать точки, а затем юзать их в БЖ функциях, которые переводят обратно эти точки в координаты и при всём этом, ещё и не удаляя точки за собой? И ещё, ты создаёшь переменные для координат, которые юзаешь в коде один единственный раз, но не создаёшь переменные для функций, которые используешь в коде по 300 раз и каждый раз вызываешь их по новой. Ну и последнее, можно переменные немного покороче писать, чтобы код был немного читабельнее?
Код
function LoopTimer takes nothing returns nothing local timer t=GetExpiredTimer() local integer h=GetHandleId(t) local lightning l=LoadLightningHandle(udg_Hash,h,3) local unit u=LoadUnitHandle(udg_Hash,h,1) local unit e=LoadUnitHandle(udg_Hash,h,2) local real x1=GetWidgetX(u) local real y1=GetWidgetY(u) local real x2=GetWidgetX(e) local real y2=GetWidgetY(e) local real a=bj_RADTODEG*Atan2(y2-y1,x2-x1) if SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))>60. and GetWidgetLife(u)>.405 then call SetUnitX(e,x2-35.*Cos(a*bj_DEGTORAD)) call SetUnitY(e,y2-35.*Sin(a*bj_DEGTORAD)) call MoveLightningEx(l,true,x1,y1,LoadReal(udg_Hash,h,4),x2,y2,.0) else call DestroyLightning(l) call SetUnitPathing(e,true) if GetTerrainType(x2,y2)=='Yrtl'then call SetUnitExploded(e,true) call KillUnit(e) endif call FlushChildHashtable(udg_Hash,h) call PauseTimer(t) call DestroyTimer(t) endif set u=null set e=null set l=null set t=null endfunction function askjdhakjh2 takes unit u,unit e,real z returns nothing local timer t=CreateTimer() local integer h=GetHandleId(t) call SetUnitPathing(e,false) call SaveReal(udg_Hash,h,4,z) call SaveUnitHandle(udg_Hash,h,1,u) call SaveUnitHandle(udg_Hash,h,2,e) call SaveLightningHandle(udg_Hash,h,3,AddLightningEx("CHIM",true,GetWidgetX(u),GetWidgetY(u),.0,GetWidgetX(e),GetWidgetY(e),.0)) call TimerStart(t,.05,true,function LoopTimer) set u=null set e=null set t=null endfunction
Делаю из воды вино, хожу по воде...
Сообщение отредактировал FEARKILLER - Пятница, 01 Августа 2014, 10:07:54
totti20, Да утечек вроде нет никаких, по координатам все сделано. В целом, я нашел какую-то сверхоптимизированную карту с отталкиванием и вставил туда эту систему, за пять минут натекло двести тысяч хэндлов и карту не крашнуло и не залагало, так что есть мнение, что то, что у меня - не критично.
Ты где такое прочитал, что молнии не надо обнулять?
Добавлено (09 Августа 2014, 21:14:42) --------------------------------------------- И у fearkiller'a код тот же что и у тебя (по конечном результате), ток правильнее написан.