Добавлен Берги,
опубликован
Включаем показ радиуса вышек в своей ТД или делаем адекватные стаки крипов как в дотке, всё очень просто, нажимаем Alt и видим информацию графическим способом, смотрим видео...
Хотите также, вот код, всё работает даже без импорта
весь код
OutPoint=6000
TIMER_PERIOD = 0.03125
do --Инициализация
TimerStart(CreateTimer(), 1, false, function()
--создаёт триггер отлова клавишь
AltIsPressed()
AddSquareArea(-845,-1080,400)
AddSquareArea(567,-1020,800)
end)
end
AltPlayers={}
function AltIsPressed()
-----------------------------------------------------------------OSKEY_ALT
local gg_trg_EventUpALT = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
BlzTriggerRegisterPlayerKeyEvent(gg_trg_EventUpALT, Player(i), OSKEY_LALT, 4, true) -- отлов нажатия альт, работает только при метакей 4
end
TriggerAddAction(gg_trg_EventUpALT, function()
local pid = GetPlayerId(GetTriggerPlayer())
AltPlayers[pid]=true
--print("Аль нажат")
end)
local TrigDepressALT = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
BlzTriggerRegisterPlayerKeyEvent(TrigDepressALT, Player(i), OSKEY_LALT, 0, false)
end
TriggerAddAction(TrigDepressALT, function()
local pid = GetPlayerId(GetTriggerPlayer())
AltPlayers[pid]=false
--print("Аль отпущен")
end)
end
function AddCircleAreaForUnit(unit,radius)
local path="circ" -- для нестандартных кругов
path="replaceabletextures\\selection\\rangeindicator" -- путь до дефолтной иконки
if not radius then
radius=BlzGetUnitWeaponRealField(unit,UNIT_WEAPON_RF_ATTACK_RANGE,0)*2.3 -- коэффициент 2,3 подобран методом тыка и исходит из размеров текстуры
--print(radius)
end
local CircleImage=CreateImage(path,radius,radius,radius,OutPoint,OutPoint,0,0,0,0,4)
SetImageRenderAlways(CircleImage, true)
ShowImage(CircleImage,false)
SetImagePosition(CircleImage,GetUnitX(unit),GetUnitY(unit),0)
TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
if AltPlayers[i]==true then
if GetLocalPlayer()==Player(i) then
ShowImage(CircleImage,true)
local xs,ys=GetUnitX(unit)-radius/2-16,GetUnitY(unit)-radius/2-16
SetImagePosition(CircleImage,xs,ys,0)
--print("Показываем круги")
end
else
if GetLocalPlayer()==Player(i) then
ShowImage(CircleImage,false)
end
end
end
if not UnitAlive(unit) then
DestroyTimer(GetExpiredTimer())
DestroyImage(CircleImage)
ShowImage(CircleImage,false)
end
end)
end
function AddSquareArea(xCenter,yCenter,range)
local image=CreateImage("Square256",range,range,range,OutPoint,OutPoint,0,0,0,0,4)
--print("создан новый маркер")
SetImageRenderAlways(image, true)
ShowImage(image,false)
local x,y=xCenter,yCenter
x,y=x-range/2,y-range/2
SetImagePosition(image,x,y,0)
TimerStart(CreateTimer(), TIMER_PERIOD, true, function()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
if AltPlayers[i]==true then
if GetLocalPlayer()==Player(i) then
ShowImage(image,true)
--SetImagePosition(image,x,y,0)
--print("Показываем круги")
end
else
if GetLocalPlayer()==Player(i) then
ShowImage(image,false)
end
end
end
end)
end
Круги для юнитов добавляются одной строчкой
AddCircleAreaForUnit(unit,radius)
параметр radius необязательный, если его не передать, то берётся радиус атаки юнита, на видео выше он и используется
Вся необходимая инфа в карте примере
Вся необходимая инфа в карте примере
Полезные замечания
Факт отлова ALT багованный, работает благодаря metakey - 4
BlzTriggerRegisterPlayerKeyEvent(gg_trg_EventUpALT, Player(i), OSKEY_LALT, 4, true)
Через простой oskey события нажатия не детектируется.
Толщина линий растёт вместе с размером кругов и квадратов, если это не устраивает, тогда есть 2 варианта:
Толщина линий растёт вместе с размером кругов и квадратов, если это не устраивает, тогда есть 2 варианта:
- Использовать отдельные изображения для отдельных радиусов
- Использовать способ отрисовывания точками (возможно на момент этой статьи он ещё не расписан)
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ScorpioT1000
А что с сайтом? Снизу все съехалоОтредактирован MpW