Как убрать денай союзного юнита

TRex

Пользователь
8 Авг 2018
38
0
Ну в загаловке всё сказано, у меня стоит босс которого надо защищать от волн противника, но при 50% хп его можно заденаить а я не хочу такого.
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
Могу подсказать сложное решение, однако я уверен найдется что-то более легкое, просто надо подумать.

Моё решение: перехватывать приказ игрока через модификатор висящий на боссе, через событие OnOrder.

Далее в отношений босса запретить все ордера, которые отвечают за атаку. Или вообще все ордера (при условии что в игре босса нельзя хилить или выполнять с ним какие-либо манипуляции)
 

TRex

Пользователь
8 Авг 2018
38
0
Могу подсказать сложное решение, однако я уверен найдется что-то более легкое, просто надо подумать.

Моё решение: перехватывать приказ игрока через модификатор висящий на боссе, через событие OnOrder.

Далее в отношений босса запретить все ордера, которые отвечают за атаку. Или вообще все ордера (при условии что в игре босса нельзя хилить или выполнять с ним какие-либо манипуляции)

function GameMode:FilterExecuteOrder(filterTable)
local order = filterTable["order_type"]
local units_table = filterTable["units"]
local target = filterTable["entindex_target"]
if order == 3 and target == "wr_treant" return nil else return true
end
if order == 4 and target == "wr_treant" return nil else return true
end



end
ну я чёто типа этого написал токо хз куда вставить
и работает ли это
 

TRex

Пользователь
8 Авг 2018
38
0
Ты не учишься ничему...
ну фигли у меня куча этих луа файлов хз в какой имено вставить, вставил в gamemode.lua не сработало, да и 5 дней всего работаю над кастомкой особо не понимаю луа пока что
 
Последнее редактирование:

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
target - это entindex юнита. Это просто набор цифер, типо айдишника юнита. А ты сравниваешь цифры со строкой wr_treant. Молодец
 

TRex

Пользователь
8 Авг 2018
38
0
target - это entindex юнита. Это просто набор цифер, типо айдишника юнита. А ты сравниваешь цифры со строкой wr_treant. Молодец
тобишь мне это надо сделать дописать?
local HTargetIndex = EntIndexToHScript(Target)
local HTargetName = HTargetIndex:GetUnitName()
и сравнивать уже htargetname?
if order == 3 and HTargetName == "wr_treant" return nil else return true
end
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
типо target:GetUnitName() == "wr_treant"
А ордер == 3 напиши адекватно order == DOTA_UNIT_ORDER_ATTACK_MOVE or order == DOTA_UNIT_ORDER_ATTACK_TARGET
Это поможет для удобночитаемости в будущем, когда проект обрастет большим количеством кода.

И загони под один if.

Lua:
function GameMode:FilterExecuteOrder(filterTable)

local order = filterTable["order_type"]

local units_table = filterTable["units"]

local target = filterTable["entindex_target"]



     if order == DOTA_UNIT_ORDER_ATTACK_MOVE or order == DOTA_UNIT_ORDER_ATTACK_TARGET  and target:GetUnitName() == "wr_treant"

          return

     end



return true

end

лишние else я убрал, они были не нужны
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
А вообще я предлагал не писать это всё в основной фильтр приказов, а сделать через модификатор.
Потому как случай-то локальный, не было смысла прям глобально его прописывать.
К тому же в чем прикол твоего фильтра, теперь и враги не смогут получить приказ его бить. Условие чтобы враги смогли допишешь сам) будет тебе задание)
 
Реклама: