MegaBlax
offline
Опыт:
2,352Активность: |
Система скорости
Вообщем покопался в коде доты и вытащил систему скорости.
Для использования нужна глобальная группа MSG и хеш таблицу hash call SetUnitSpeed(юнит,скорость) Скорость ставить выше 522 call RemoveSpeed(юнит) убрать скорость з.ы. если кто-то может оптимизировать код, кидайте сюда.
» код
((код jass
library MoveSystem
function SafeX takes real x returns real local real CX = GetRectMinX(bj_mapInitialPlayableArea) + 50 if (x < CX) then return CX endif set CX = GetRectMaxX(bj_mapInitialPlayableArea) - 50 if (x > CX) then return CX endif return x endfunction function SafeY takes real y returns real
local real CY = GetRectMinY(bj_mapInitialPlayableArea) + 50 if (y < CY) then return CY endif set CY = GetRectMaxY(bj_mapInitialPlayableArea) - 50 if (y > CY) then return CY endif return y endfunction function FL1 takes unit target, real xx, real yy, real sp returns nothing local real x = GetUnitX(target) local real y = GetUnitY(target) local real angle = Atan2(y - yy, x - xx) local real d = SquareRoot(((x-xx)*(x-xx))+((y-yy)*(y-yy))) local real ms = GetUnitMoveSpeed(target) if GetUnitState(target,UNIT_STATE_LIFE)>0 and sp>ms and d>10*0.005 then set x = SafeX(x + (sp - ms) * 0.005 * Cos(angle)) set y = SafeY(y + (sp - ms) * 0.005 * Sin(angle)) call SetUnitX(target, x) call SetUnitY(target, y) endif endfunction function FD4 takes nothing returns boolean
local trigger t = GetTriggeringTrigger() local unit target = LoadUnitHandle(hash,GetHandleId(t),StringHash("unit")) local real x = LoadReal(hash,GetHandleId(t),StringHash("x")) local real y = LoadReal(hash,GetHandleId(t),StringHash("y")) local real speed = LoadReal(hash,GetHandleId(t),StringHash("speed")) if IsUnitInGroup(target,MSG)==false and GetUnitState(target,UNIT_STATE_LIFE)>0 then call FlushChildHashtable(hash,GetHandleId(t)) call DestroyTrigger(t) else call FL1(target, x, y, speed) call SaveReal(hash,GetHandleId(t),StringHash("x"),(GetUnitX(target)*1.00)) call SaveReal(hash,GetHandleId(t),StringHash("y"),(GetUnitY(target)*1.00)) endif set t = null set target = null return false endfunction function RemoveSpeed takes unit target returns nothing if IsUnitInGroup(target,MSG)==true GroupRemoveUnit(MSG,target) endif endfunction function SetUnitSpeed takes unit target,real speed returns nothing local trigger t = CreateTrigger() if IsUnitInGroup(target,MSG)==false call GroupAddUnit(MSG,target) call SaveUnitHandle(hash,GetHandleId(t),StringHash("unit"),target) call SaveReal(hash,GetHandleId(t),StringHash("x"),(GetUnitX(target)*1.00)) call SaveReal(hash,GetHandleId(t),StringHash("y"),(GetUnitY(target)*1.00)) call SaveReal(hash,GetHandleId(t),StringHash("speed"),speed) call TriggerRegisterTimerEvent(t,0.005,true) call TriggerAddCondition(t,function FD4) endif set t = null endfunction endlibrary )) Отредактировано MegaBlax, 29.10.2014 в 06:20. |
27.10.2014, 12:54 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
Вообщем покопался в коде доты и вытащил систему скорости.
function FF4 takes unit TLI,real FS1 returns nothing
local trigger t = CreateTrigger() local integer MKI = GetHandleId(t) слабо хотя бы имена проставить методам? |
28.10.2014, 14:33 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|