Иногда может понадобится убрать с героя все косметические предметы(например что бы надеть другие, или что бы не прекешировать их, экономия ресурсов же!).
Собственно весь процесс можно разбить на несколько логичных частей:
Собственно сама функция:
Собственно используя данную функцию можно очистить нужного героя от всех косметических предметов.
Когда это может понадобится? Например когда вы заменяете модель одного героя, на другую.
Например я заменил модель бруды на модель антимага без удаления косметических предметов, и вышло ЭТО:
PS. hero - объект героя, не его имя
PSS. Автор данной функции некий Noya, я только разжевал ее по частям.
Собственно весь процесс можно разбить на несколько логичных частей:
[li]Выборка всех моделей с героя с классом "dota_item_wearable" и последующая запись в массив на удаление[/li]
[li]Собственно, само удаление предметов.[/li]
Чутка отойду от темы и разберу несколько стандартных функций
Дальнейшие функции рассматривают все параметры героя, будь то надетые на нем предметы или же его способности.
Код:
void UTIL_Remove(handle) -- удаляет какую либо вещь(а точнее объект, будь то модель(model), частица(particle), или же произвольный юнит (unit))
Код:
handle FirstMoveChild() -- возвращает первый указатель на часть содержащуюся в другом обьекте(в нашем примере она будет возвращать класс, который мы и будем проверять на совпадения его названия с "dota_item_wearable")
Код:
handle NextMovePeer() --то же что и предыдущая, только возвращает не первый указатель, а следующий(по порядку)
Код:
string GetClassname() - возвращает название класса по указателю на объект(смотри дальше по примеру)
Код:
#TABLE - выдаст длинну TABLE
Собственно сама функция:
Код:
function RemoveWearables(hero)
print('#RemoveWearables')
local wearables = {} -- объявление локального массива на удаление
local cur = hero:FirstMoveChild() -- получаем первый указатель над подобъект объекта hero ()
while cur ~= nil do --пока наш текущий указатель не равен nil(пустота/пустой указатель)
cur = cur:NextMovePeer() -- выбираем следующий указатель на подобъект нашего обьекта
if cur ~= nil and cur:GetClassname() ~= "" and cur:GetClassname() == "dota_item_wearable" then -- проверяем, елси текущий указатель не пуст, название класса не пустое, и если этот класс есть класс "dota_item_wearable", то есть надеваемые косметические предметы
table.insert(wearables, cur) -- добавляем в таблицу на удаление текущий предмет(сверху проверяли класс текущего объекта)
end
end
for i = 1, #wearables do -- собственно цикл для удаления всего занесенного в массив на удаление
UTIL_Remove(wearables[i]) -- удаляем объект
end
end
Когда это может понадобится? Например когда вы заменяете модель одного героя, на другую.
Например я заменил модель бруды на модель антимага без удаления косметических предметов, и вышло ЭТО:
PSS. Автор данной функции некий Noya, я только разжевал ее по частям.
Последнее редактирование модератором: