Как отправить крипов по точкам, что бы они дрались когда нету прохода?

Captain_Pan

Пользователь
20 Авг 2015
21
0
Я уже наверн всех достал, но как отпраить крипов, чтобы они дрались когда им закрыли проход?
У меня прописано так
Код:
local unit = CreateUnitByName(creep, point1, true, nil, nil, DOTA_TEAM_BADGUYS)
			
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, Position = Wp1_1, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, Position = Wp1_2, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, Position = Wp1_3, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION, Position = Wp1_4, Queue = true})

Они идут по точкам, но если их заблочить, то они просто встают.
 
Илья, если отправлять черезunit:SetInitialGoalEntity( waypoint ) крипы почемуто не доходят до точки. гдето в радиусе 300 начинают идти к следующей.
 
К следующей начнут бежать, если ты задержку не ставишь (в самом waypoint блоке )
 
Илья, Еще они бегут и сразу бить начинают. Даже если есть проход.
Задержка была 1 секунда, поставил 2, ничего не изменилось(
 
В смысле бегут и бить начинают? Естественно будут бить, они же из противоположной команды.

Что не так то? : )
 
Мне нужно сделать так, чтобы они просто бежали по точкам. Но, если прохода нету, они злятся и крушат все подряд. Как во многих тд.
 
Ммм, я тебя понял, хочешь сделать "туннель" - тропу, по которой ходят крипы.

В Tower Defense я не играю и не пробовал делать что-то подобное, поэтому могу посоветовать только гитхаб. Вон, у MNoya есть TD, глянь его код.
 
Последнее редактирование модератором:
И обрати внимание на само игровое поле в этих режимах: если где-то нельзя строить объекты или ходить, то это не спроста.

Возможно, что туннель делают именно через блокировку соседних клеток различными simple point abstraction и т.д.
 
Илья, Элемент тд немного другая) В моей тд можно строить лабиринты, как в гем тд. Но гемка не подходит, там строиться можно только между волнами, и там проверка на блокировку прохода. Еще есть Faction TD но я не смог в ее коде найти почему крипы начинают драться только, если нету прохода.
Можно ли как-то узнать стоит ли крип на месте не через ордер?
 
Иди сюда и ищи. Раз работаешь с "CDOTA_BaseNPC", то ищи там.

Еще есть событие OnUnitMoved(). Можешь тут глянуть, как проще всего с ним работать.
 
Последнее редактирование модератором:
Проблему решил) Всем спасибо) Вот код если кому будет нужен:
Код:
if TeNum == 2 then 
			local unit = CreateUnitByName(creep, point1, true, nil, nil, DOTA_TEAM_BADGUYS)
			order_type = DOTA_UNIT_ORDER_MOVE_TO_POSITION
			
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = order_type, Position = Wp1_1, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = order_type, Position = Wp1_2, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = order_type, Position = Wp1_3, Queue = true})
			ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = order_type, Position = Wp1_4, Queue = true})
			
			local position_now = Vector(1, 1, 1)
			local position_last = Vector(11, 11, 11)
			if not unit:IsRealHero() then 
				print ("Check block")
				Timers:CreateTimer(function()
				position_now = unit:GetAbsOrigin()
				if position_last ~= position_now then
					position_last = position_now
				else
					print ('Block!!!!')
					order_type = DOTA_UNIT_ORDER_ATTACK_MOVE
					unit:Stop()
					ExecuteOrderFromTable({ UnitIndex = unit:GetEntityIndex(), OrderType = order_type, Position = Wp1_4, Queue = true})
				end
				return 1.0
				end)
			end
Вобщем сделал таймер проверяющий координаты крипа, если долго не менялись, то меняю ордер идти к точке на ордер идти и атаковать к последней точке. :)
 
Последнее редактирование модератором:
Реклама: