HELP! Автоатака, всё должно быть просто, но нет...

  • Автор темы Автор темы Epselot
  • Дата начала Дата начала

Epselot

Пользователь
11 Янв 2017
34
0
TD карта.
Условно есть 2 башни, одну строит герой, другая это улучшение первого.
Первое строится через:
Код:
"OnSpellStart"
{
	"SpawnUnit"
	{
		"UnitName" 	"npc_dota_building_homebase"
		"Target" 		"POINT"
	}
}

С ним всё нормально, оно автоатакует врагов.

Второе строится через RunScript:

Код:
function TowerUP(keys)

	local tower = keys.caster
	local caster = tower:GetOwnerEntity()
	local ability = keys.ability
	local tower_loc = tower:GetAbsOrigin()
	local player_id = caster:GetPlayerID()

	tower:Kill(ability, caster_up)
	
	local caster_up = CreateUnitByName("npc_dota_building_homebase", tower_loc, false, caster, caster, caster:GetTeam())

	caster_up:SetControllableByPlayer(player_id, true)

end

и вот тут начинаются проблемы, башня не хочет автоатаковать, перепробовал всё что смог найти. Просто нет.
При этом всё дело именно в том что башня создаётся таким образом. Если поменять башни местами то вторая станет атаковать а первая предпочтёт стоять как истукан, даже если её начинают бить.

Пробовал и через команду ReplaceUnit, тот же результат...

И вот тут уже в тупике, третий день пытаюсь с этим что то сделать, но нефига. Уже предположений нет в чём тут дело, что искать и как исправить... HELP!
 
Последнее редактирование модератором:
Кажется понял. При создании юнита у него стоит команда stop, та что если выбрать юнита и нажать клавишу "s".
Теперь всё проще, доскажите что прописать, для снятия юнита с команды stop? Применить ту команду что на клавише "d" стоит?
 
Последнее редактирование модератором:
Кажется понял. При создании юнита у него стоит команда stop, та что если выбрать юнита и нажать клавишу "s".
Теперь всё проще, доскажите что прописать, для снятия юнита с команды stop? Применить ту команду что на клавише "d" стоит?
https://developer.valvesoftware.com...ls/Scripting/API/Global.ExecuteOrderFromTable
 
Последнее редактирование модератором:
[quote author=CryDeS link=topic=1228.msg7399#msg7399 date=1484156709]
https://developer.valvesoftware.com...ls/Scripting/API/Global.ExecuteOrderFromTable
[/quote]

Разобрался с этой штукой, но она не фига не даёт в данном случае. Моя башня просто стоит с командой "stop", мне нужно отменить эту команду. Приказ атаковать в области, не даёт результата, наверное потому что здание не может двигаться.
Пробовал делать:
Код:
ExecuteOrderFromTable({ UnitIndex = caster_up:GetEntityIndex(), OrderType = DOTA_UNIT_ORDER_ATTACK_TARGET, TargetIndex = caster:entindex()})
но тоже если герой при использовании не в зоне атаки, то команда "stop" не отменяется.

Какие ещё варианты есть?
 
Последнее редактирование модератором:
По любому есть способ включить атаку. Ну а пока его не найдешь, или еще кто тебе не найдет, можешь сделать абилку, что будет атаковать за башню (просто создаешь снаряд на месте башни и отправляешь в полет до найденного юнита, а по соприкосновению наносишь урон).
 
По любому есть способ включить атаку. Ну а пока его не найдешь, или еще кто тебе не найдет, можешь сделать абилку, что будет атаковать за башню (просто создаешь снаряд на месте башни и отправляешь в полет до найденного юнита, а по соприкосновению наносишь урон).
Не проще тогда просто искать юнитов в радиусе атаки башни и давать ей приказ атаковать?
PS: попробуй Interrupt()
 
Последнее редактирование модератором:
Не проще тогда просто искать юнитов в радиусе атаки башни и давать ей приказ атаковать?

Ну так он вроде бы так пробовал:

Приказ атаковать в области, не даёт результата, наверное потому что здание не может двигаться.
 
Последнее редактирование модератором:
При применении любой способности команда "stop" отменяется, попробую сделать пустую способность которая скрыта от игрока и при создании юнита, юнит её применит, должно сработать, как то это неказисто конечно, но других идей пока нет...
 
Последнее редактирование модератором:
Реклама: