через if else или свитч конструкцию, или написать свою функцию, которая будет принимать юнита, а возвращать string
типа такого:
function PrintType takes unit u returns string
local string s =""
if IsUnitType(u,UNIT_TYPE_ANCIENT) then
s="ANCIENT"
elseif IsUnitType(u,UNIT_TYPE_ATTACKS_FLYING) then
s="ATTACKS_FLYING"
endif
return s
endfunction
и добавляешь все свои типы через elseif которые хочешь поймать.... самый простейший вариант и 10 возможных =)
NazarPunk, спасибо что начал, а то я уже 3 день Прога мучаю, всё какие-то проблемы всплывают (вернее 1 проблема, падения потока таймера) NazarPunk, а insert и remove это стандартный методы структур lua (аналог самописных .create и .destroy), а так даже всё понятно!
ну карту приложи чтоли...
попробуй те же модели на другой карте, мб что-то перекосило
У меня однажды после краша редактора все модели и текстуры стали 0 кб, мб у тебя что-то похожее
Больше инфы, нужно от тебя
да, но мб для снарядов от которых надо увернуться это достаточно, в любом случае уже сделал триггерное движение, это так экспериментик был
Кароче, пока что больше 200 юнитов снарядов не держит используется (просто не держит 200 юнитов не важно движутся ли они), использовался:
lua+ юниты +1 таймер + детект урона через жар,
Следующий на очереди:
lua + смещение позиций эффектов + loopfirstOfGroup
БезликийСектант, если у тебя способность на основе гидры рождает новых юнитов то удали её вообще и сделай триггерно, а вместо способности выдавай пустышку (если он изучаемая или же надо чтобы игрок знал, что юнит переродится)
[C] любой юнит умирает
[У] умирающий юнит владеет способностью пустышкой, на рождение новых при смерти
[Д] создать двух новых юнитов в позиции умирающего юнита и не забывай про точки
Если мне кто-то даст гарантии что луа не измениться, и у меня не отберут, то что есть сейчас, а только улучшат, то можно и начинать хоть сегодня делать карту!
Как сложно... к этому в пту меня не готовили
но вроде понял, спасибо ещё раз
думаю мне достаточно писать nil по хендлу, это ближайший аналог к FlushChildHashatable
надо ковырять, в любом случае не плохо для первого дня знакомства с lua, я очень доволен, весьма удобно
if (data==nil) then data = {} HandleData[GetHandleId(u)] = data end
Чтобы повторно не создавать запись для юнита, а извлечь текущую? prog, просто я раньше начал писать чем ты отправил и я не видел твоего того сообщения =)
гарантии что это будет работать и не будет вызывать десинки т.к. сборщику мусора синхронизация не указ
я конечно лишь примерно представляю как это всё работает, но скорее всего не должно быть десинхов, если данные не использются больше, вроде бы как даже это логично, но будет десинх, если кривым кодом куда-то не туда обратится и попытаться получить какие либо данные
Такс, prog, не получается =(
HandleData={}
gforce=CreateGroup()
function ForceUnit (u,a,d,s,flag)
print("start")
GroupAddUnit(gforce, u)
local datan = HandleData[GetHandleId(u)]
datan.a = a
datan.d = d
datan.s = s
datan.flag = flag
end
TimerStart(CreateTimer(), 0.04, true, function()
ForGroup(gforce, function()
local u=GetEnumUnit()
local h=GetHandleId(u)
local data = HandleData[h]
local a=data.a
local d=data.d
local s=data.s
local flag=data.flag
print("period")
Дебага с надписью период нет, значит даже таймер не стартует =(
prog, ну да, через точку писать более удобней, чем через [скобочки], но мне можно себе такой вариант забрать или надо ещё что-то дополнительно записать? пошёл пробовать prog:
Сборщик сам не настолько крут, поэтому у меня там есть функции Purge и Reset для сноса данных из таблицы, а также целая либа CleanUp для перехвата смертей и удаления юнита, на которую либа хранения данных вешает свой хук в котором и подчищаются данные для таких юнитов.
Это печально, новые костыли, а я уже обрадовался, что ничего обнулять и чистить не нужно =(
prog, в любом случае свой вариант я хотя бы понимаю и это его главный плюс, но в понял тебя, можно же сделать многомерный массив prog:
одна таблица в которой внутри по таблице на каждый хендл
Насчет удобства я пока не могу оценить ибо вообще ничего не понимаю, что происходит, но очищать ничего не надо? юнит умер, его записи остались в таблице, сборщик мусора все сделает? тот самый сборщик о котором все говорят?
prog, спасибо сам тоже только что до этого дошёл, даже всё работает prog:
1 - массив-таблица с индексами по хендлу и еще одной таблицей в качестве значений
примерно так сделал:
------ новая толкалка
do
af={}
df={}
sf={}
flagf={}
gforce=CreateGroup()
function ForceUnit (u,a,d,s,flag)
GroupAddUnit(gforce, u)
af[GetHandleId(u)]=a
df[GetHandleId(u)]=d
sf[GetHandleId(u)]=s
flagf[GetHandleId(u)]=flag
end
TimerStart(CreateTimer(), 0.04, true, function()
ForGroup(gforce, function()
local u=GetEnumUnit()
local h=GetHandleId(u)
local a=af[h]
local d=df[h]
local s=sf[h]
local flag=flagf[h]
--action
local x=GetUnitX(u)
local y=GetUnitY(u)
df[h]=d-s
--Условия прекращения движения
if d <= 0 or Out(MoveX(x , s * 2 , a) , MoveY(y , s * 2 , a)) == false or IsUnitDeadBJ(u) then --or GetPointZ(x , y) <= GetPointZ(MoveX(x , s * 2 , a) , MoveY(y , s * 2 , a)) - 30
GroupRemoveUnit(gforce, u)
if flag==0 then
KillUnit(u)
end
end
-- движение выполняется всегда за исключением условий прекращения движения
SetUnitX(u, MoveX(x , s , a))
SetUnitY(u, MoveY(y , s , a))
---------
end)--group
end)--timer
end
» WarCraft 3 / отображение на экран класификацые юнита
типа такого:
Ред. Берги
» WarCraft 3 / Самый производительный Bullet Hell
NazarPunk, а insert и remove это стандартный методы структур lua (аналог самописных .create и .destroy), а так даже всё понятно!
» WarCraft 3 / Проблема с защитой карты
если защиту снимешь GUI уже не вернуть
копию доставай лучше =)
» WarCraft 3 / Heart of Tides
» WarCraft 3 / if (GetOrderPointLoc() == HeroUnit)
» WarCraft 3 / Туман войны, черная маска
» WarCraft 3 / Почему модели не работают но когда то работали что делать?
что за стихии копировал.... в чем проблема триггерного копирования....
» WarCraft 3 / Почему модели не работают но когда то работали что делать?
попробуй те же модели на другой карте, мб что-то перекосило
У меня однажды после краша редактора все модели и текстуры стали 0 кб, мб у тебя что-то похожее
Больше инфы, нужно от тебя
» Огонёк Феникса / Список конкурсов от Феникса
» WarCraft 3 / Самый производительный Bullet Hell
Кароче, пока что больше 200 юнитов снарядов не держит используется (просто не держит 200 юнитов не важно движутся ли они), использовался:
lua+ юниты +1 таймер + детект урона через жар,
Следующий на очереди:
lua + смещение позиций эффектов + loopfirstOfGroup
» WarCraft 3 / Удаление 6 лет работы с сайта, авторское право.
» WarCraft 3 / Heart of Tides
- Сделать ИИ
- заолдскулить рельеф
- больше водных боёв
- новые юниты (на твоих моделях) и к юниту по 1 новой способности
пс, я не играл» WarCraft 3 / Призыв юнитов со способность "Перерождение"
» WarCraft 3 / Призыв юнитов со способность "Перерождение"
» XGM Конкурсы / Warcraft 3 Custom Maps Contest 2019
» WarCraft 3 / Переделка кода на Lua
но вроде понял, спасибо ещё раз
думаю мне достаточно писать nil по хендлу, это ближайший аналог к FlushChildHashatable
надо ковырять, в любом случае не плохо для первого дня знакомства с lua, я очень доволен, весьма удобно
» WarCraft 3 / Переделка кода на Lua
А вот наверное понял
» WarCraft 3 / Переделка кода на Lua
» WarCraft 3 / Переделка кода на Lua
prog, просто я раньше начал писать чем ты отправил и я не видел твоего того сообщения =)
» WarCraft 3 / Переделка кода на Lua
Такс, prog, не получается =(
» WarCraft 3 / Переделка кода на Lua
пошёл пробовать
prog:
» WarCraft 3 / Удаление 6 лет работы с сайта, авторское право.
Прикольно будет видеть блокировку карт, в которые и так никто не играет, но могло бы сыграть человека 3 =)
» WarCraft 3 / Переделка кода на Lua
prog:
тот самый сборщик о котором все говорят?
» WarCraft 3 / Переделка кода на Lua
prog:
» WarCraft 3 / Отлов урона на 131 PTR