33

» WarCraft 3 / отображение на экран класификацые юнита

Принятый ответ
через 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 возможных =)
33

» WarCraft 3 / Самый производительный Bullet Hell

NazarPunk, спасибо что начал, а то я уже 3 день Прога мучаю, всё какие-то проблемы всплывают (вернее 1 проблема, падения потока таймера)
NazarPunk, а insert и remove это стандартный методы структур lua (аналог самописных .create и .destroy), а так даже всё понятно!
33

» WarCraft 3 / Проблема с защитой карты

ахаха а зачем ты её протектил то?
если защиту снимешь GUI уже не вернуть
копию доставай лучше =)
33

» WarCraft 3 / Heart of Tides

DarkClaw, не обращай внимания, это наш местный "компетентный" разработчик
33

» WarCraft 3 / if (GetOrderPointLoc() == HeroUnit)

Принятый ответ
Что это за условие ужасное такое?
на JNGP ручками выбирается
Загруженные файлы
33

» WarCraft 3 / Туман войны, черная маска

Принятый ответ
Cкрыть области частично видимые, если на русском, галку офф
33

» WarCraft 3 / Почему модели не работают но когда то работали что делать?

вообще ничего не понятно...
что за стихии копировал.... в чем проблема триггерного копирования....
33

» WarCraft 3 / Почему модели не работают но когда то работали что делать?

ну карту приложи чтоли...
попробуй те же модели на другой карте, мб что-то перекосило
У меня однажды после краша редактора все модели и текстуры стали 0 кб, мб у тебя что-то похожее
Больше инфы, нужно от тебя
33

» WarCraft 3 / Самый производительный Bullet Hell

да, но мб для снарядов от которых надо увернуться это достаточно, в любом случае уже сделал триггерное движение, это так экспериментик был
Кароче, пока что больше 200 юнитов снарядов не держит используется (просто не держит 200 юнитов не важно движутся ли они), использовался:
lua+ юниты +1 таймер + детект урона через жар,
Следующий на очереди:
lua + смещение позиций эффектов + loopfirstOfGroup
33

» WarCraft 3 / Heart of Tides

так пилите ЕЩЁ, по фанился и остановился? зачем останавливаться, я смотрю если ты модель той королевы наг сам делал или перерабатывал:
  • Сделать ИИ
  • заолдскулить рельеф
  • больше водных боёв
  • новые юниты (на твоих моделях) и к юниту по 1 новой способности
пс, я не играл
33

» WarCraft 3 / Призыв юнитов со способность "Перерождение"

БезликийСектант, если у тебя способность на основе гидры рождает новых юнитов то удали её вообще и сделай триггерно, а вместо способности выдавай пустышку (если он изучаемая или же надо чтобы игрок знал, что юнит переродится)
[C] любой юнит умирает
[У] умирающий юнит владеет способностью пустышкой, на рождение новых при смерти
[Д] создать двух новых юнитов в позиции умирающего юнита и не забывай про точки
33

» WarCraft 3 / Призыв юнитов со способность "Перерождение"

там видимо на основе гидры способность, которая не прокает в случае перерождения
33

» XGM Конкурсы / Warcraft 3 Custom Maps Contest 2019

Если мне кто-то даст гарантии что луа не измениться, и у меня не отберут, то что есть сейчас, а только улучшат, то можно и начинать хоть сегодня делать карту!
33

» WarCraft 3 / Переделка кода на Lua

Как сложно... к этому в пту меня не готовили
но вроде понял, спасибо ещё раз
думаю мне достаточно писать nil по хендлу, это ближайший аналог к FlushChildHashatable
надо ковырять, в любом случае не плохо для первого дня знакомства с lua, я очень доволен, весьма удобно
33

» WarCraft 3 / Переделка кода на Lua

prog, так, тока я не понял как чистить, смотрю в твой код и вижу фигу, мне нужно будет в каждую ячейку таблицы записать nill ?
А вот наверное понял
function CleanUp.OnDeath()
  local unit u = GetTriggerUnit()
  local id = GetHandleId(u)
 ** for n,h in ipairs(CleanUp.DeathHandlers) do h(u,id) end**
end
а как это для меня в минимальном варианте будет выглядеть?
33

» WarCraft 3 / Переделка кода на Lua

а вот это ?
  if (data==nil) then data = {} HandleData[GetHandleId(u)] = data end
Чтобы повторно не создавать запись для юнита, а извлечь текущую?
prog, просто я раньше начал писать чем ты отправил и я не видел твоего того сообщения =)
33

» WarCraft 3 / Переделка кода на Lua

гарантии что это будет работать и не будет вызывать десинки т.к. сборщику мусора синхронизация не указ
я конечно лишь примерно представляю как это всё работает, но скорее всего не должно быть десинхов, если данные не использются больше, вроде бы как даже это логично, но будет десинх, если кривым кодом куда-то не туда обратится и попытаться получить какие либо данные
Такс, 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")
Дебага с надписью период нет, значит даже таймер не стартует =(
33

» WarCraft 3 / Переделка кода на Lua

prog, ну да, через точку писать более удобней, чем через [скобочки], но мне можно себе такой вариант забрать или надо ещё что-то дополнительно записать?
пошёл пробовать
prog:
Сборщик сам не настолько крут, поэтому у меня там есть функции Purge и Reset для сноса данных из таблицы, а также целая либа CleanUp для перехвата смертей и удаления юнита, на которую либа хранения данных вешает свой хук в котором и подчищаются данные для таких юнитов.
Это печально, новые костыли, а я уже обрадовался, что ничего обнулять и чистить не нужно =(
33

» WarCraft 3 / Удаление 6 лет работы с сайта, авторское право.

Ну вы-то все за, пока халявой пахнет
это же Россия, детка
Прикольно будет видеть блокировку карт, в которые и так никто не играет, но могло бы сыграть человека 3 =)
33

» WarCraft 3 / Переделка кода на Lua

prog, в любом случае свой вариант я хотя бы понимаю и это его главный плюс, но в понял тебя, можно же сделать многомерный массив
prog:
одна таблица в которой внутри по таблице на каждый хендл
Насчет удобства я пока не могу оценить ибо вообще ничего не понимаю, что происходит, но очищать ничего не надо? юнит умер, его записи остались в таблице, сборщик мусора все сделает?
тот самый сборщик о котором все говорят?
33

» WarCraft 3 / Переделка кода на Lua

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
33

» WarCraft 3 / Отлов урона на 131 PTR

prog, а например имунные к магии или физическому урону, будут ли зарегистрированны в событии?