CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Captain_Pan

  • 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})

Они идут по точкам, но если их заблочить, то они просто встают.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16

Оффлайн Captain_Pan

  • 21
  • Мощь: 0
Илья, если отправлять через unit:SetInitialGoalEntity( waypoint ) крипы почемуто не доходят до точки. гдето в радиусе 300 начинают идти к следующей.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
К  следующей начнут бежать, если ты задержку не ставишь (в самом waypoint блоке )

Оффлайн Captain_Pan

  • 21
  • Мощь: 0
Илья, Еще они бегут и сразу бить начинают. Даже если есть проход.
Задержка была 1 секунда, поставил 2, ничего не изменилось(
« Последнее редактирование: 11-10-2016, 19:36:40 от Captain_Pan »

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
В смысле бегут и бить начинают? Естественно будут бить, они же из противоположной команды.

Что не так то? : )

Оффлайн Captain_Pan

  • 21
  • Мощь: 0
Мне нужно сделать так, чтобы они просто бежали по точкам. Но, если прохода нету, они злятся и крушат все подряд. Как во многих тд.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Ммм, я тебя понял, хочешь сделать "туннель" - тропу, по которой ходят крипы.

В Tower Defense я не играю и не пробовал делать что-то подобное, поэтому могу посоветовать только гитхаб.  Вон, у MNoya есть TD, глянь его код.
« Последнее редактирование: 11-10-2016, 23:38:34 от Илья »

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
И обрати внимание на само игровое поле в этих режимах: если где-то нельзя строить объекты или ходить, то это не спроста.

Возможно, что туннель делают именно через блокировку соседних клеток различными simple point abstraction и т.д.

Оффлайн Captain_Pan

  • 21
  • Мощь: 0
Илья, Элемент тд немного другая) В моей тд можно строить лабиринты, как в гем тд. Но гемка не подходит, там строиться можно только между волнами, и там проверка на блокировку прохода. Еще есть Faction TD но я не смог в ее коде найти почему крипы начинают драться только, если нету прохода.
Можно ли как-то узнать стоит ли крип на месте не через ордер?
« Последнее редактирование: 12-10-2016, 03:44:49 от Captain_Pan »

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Иди сюда и ищи. Раз работаешь с  "CDOTA_BaseNPC", то ищи там.

Еще есть событие OnUnitMoved(). Можешь тут глянуть, как проще всего с ним работать.
« Последнее редактирование: 12-10-2016, 12:44:27 от Илья »

Оффлайн Captain_Pan

  • 21
  • Мощь: 0
Проблему решил) Всем спасибо) Вот код если кому будет нужен:
Код
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
Вобщем сделал таймер проверяющий координаты крипа, если долго не менялись, то меняю ордер идти к точке на ордер идти и атаковать к последней точке. :)