Мне нужно имитировать обычную атаку герою, у которого нету обычной атаки. К тому же я настроил что бы если героя атакуют, то он сам юзал приказ "smart" на атакующего.
Когда вы кликаете правой кнопкой по местности, герой начинает туда идти. Полученный приказ = "smart". Но не в этом суть. Приказ получается юнитом 1 раз, и герой идёт в указанную точку, а когда доходит - останавливается. Раньше я думал, что когда он останавливается, юнит получает приказ "stop", но оказывается - в данном случае нету приказа. Проверить, двигается ли юнит в данный момент невозможно...
Таймером тоже не возможно, потому что юниту можно приказать идти хоть в конец карты. А мне нужно, что бы пока юнит ходит, если конечно это был принудительный приказ, то есть правой кнопкой по местности, то он не отвлекался на юнитов которые атакуют его по дороге.
Вообщем как проверить, двигается ли юнит в данный момент?
Сообщение отредактировал FatalBlade - Четверг, 05 Января 2012, 21:47:46
С предыдущей координатой) Каждые 0.2 секунды получать координату персонажа, записывать её в переменную 1, Сравнивать переменную 1 с переменной 2, если координата изменилась, то приравнять переменную 2 к переменной 1 и выполнить нужное тебе действие, если при сравнении значения одинаковые, ничего не делать. Как-то так
Сообщение отредактировал Fox3 - Четверг, 05 Января 2012, 22:55:34
local integer uid local unit un local group g = CreateGroup() local real x1 local real y1 local real x2 local real y2
set un = FirstOfGroup(udg_MagesGroup) exitwhen un == null set uid = GetHandleId(un) call GroupRemoveUnit( udg_MagesGroup, un ) call GroupAddUnit( g, un ) set x1 = LoadReal(udg_Hash, uid, 460) set y1 = LoadReal(udg_Hash, uid, 461) set x2 = GetWidgetX(un) set y2 = GetWidgetY(un) if x1 == x2 and y1 == y2 then (Тут мои действия) elseif x1 != x2 or y1 != y2 then (Тут тоже мои действия) endif call SaveReal(udg_Hash, uid, 460, x2) call SaveReal(udg_Hash, uid, 461, y2) endloop
loop set un = FirstOfGroup(g) exitwhen un == null set uid = GetHandleId(un) call GroupRemoveUnit( g, un ) call GroupAddUnit( udg_MagesGroup, un ) endloop
call DestroyGroup(g) set g = null set un = null
Как можно улучшить этот код ради производительности? По максимуму. Тут событие периодический таймер 0.2 Вроде фильтром можно, но как это сделать?
Вместо цикла, в группе при пике udg_MagesCreeps напиши просто filter(function FilterFunction) создай функцию FilterFunction и там в функции делай все действия с юнитами.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 06 Января 2012, 15:24:54
Вместо цикла, в группе при пике udg_MagesCreeps напиши просто filter(function FilterFunction) создай функцию FilterFunction и там в функции делай все действия с юнитами.