ScorpioT1000, ок понял. Тут сильно изменили сайт. Теперь непривычно. Нажимаешь на ник, и тебя перенаправляют на профиль, вместо ответа. Раньше это было цитирование всего сообщения, боялся этой кнопки как огня
function InterLineLine(x1,y1,x2,y2,a1,b1,a2,b2)
local p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
local x,y
if ( p == 0 ) then --отрезки параллельны
return false
end
x = ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
return x,y
end
function IsPointOnBeam2(x,y,x1,y1,x2,y2)
return ((x-x1)*(y2-y1) == (x2-x1)*(y-y1)) and ((x-x1) * (x2-x1) >= 0) and ((y-y1)*(y2-y1) >= 0)
end
function IsPointInSegment(x,y,x1,y1,x2,y2)
return((x1-x)^2+(y1-y)^2)^0.5 + ((x2-x)^2+(y2-y)^2)^0.5 == ((x2-x1)^2+(y2-y1)^2)^0.5
end
function RayIntersectSegment(rayx,rayy,dirx,diry,x1,y1,x2,y2)
--находим точку пересечения прямых
local x,y=InterLineLine(rayx,rayy,dirx,diry,x1,y1,x2,y2)
if x then
--проверка, что точка пересечения на отрезке, и принадлежит лучу
return IsPointInSegment(x,y,x1,y1,x2,y2)and IsPointOnBeam2(x,y,rayx,rayy,dirx,diry)
else
--иначе, если прямые не пересекаются, то точки пересечения нет.
--если луч и отрезок лежат на одной линии
return IsPointOnBeam2(x1,y1,rayx,rayy,dirx,diry) and IsPointOnBeam2(x2,y2,rayx,rayy,dirx,diry)
end
return false
end
print('p1=1: '..tostring(RayIntersectSegment(0,0,0,1,100,0,-100,0))..' луч направлен вверх, луч пересекает горизонтальный отрезок')
print('p1=0: '..tostring(RayIntersectSegment(0,0,0,1,100,-1,-100,-1))..' луч направлен вверх, луч не пересекает горизонтальный отрезок, расположенный ниже'')
Ок понял😅
ScorpioT1000, ок понял. Тут сильно изменили сайт. Теперь непривычно. Нажимаешь на ник, и тебя перенаправляют на профиль, вместо ответа. Раньше это было цитирование всего сообщения, боялся этой кнопки как огня
Можно притяжение всех пеонов к звезде, только в 3d. Прежставим себе галактику. И все пеоны притягиваются к звезде, вращаясь хаотично, как молекулы газа. Пеоны друг от друга бьются еще, ударясь, вращаясь. и звезда растет при вхождении пеона в нее
Если нужно посадить героя в клетку, то нужно его заблочить, скрыть и сделать неуязвимым (мало ли что). Аналогично с крипом, если это какой уникум. Но обычных юнитов можно было удалить, и позже пересоздать, это проще всего делается, тк юнит от этого ничего не теряет (ни предметы, ни статы, выученные скилы - нету ничего из этого, то все ок). Но вдруг, этот юнит обладает важными предметами, или изменяли ему базовые урон/защиту/скорость и пр поэтому из за этих условии юнита тоже как и героя скрываем.
--Угол между 2 векторами, угол между направлениями этих векторов (наименьший угол).
--По определению, угол между двумя векторами находится в промежутке [0°; 180°].
--Косинус угла между ними равен
--@param real dx1,dy1,dx2,dy2
---@return real
function AngleBetweenTwoVectors(dx1,dy1,dx2,dy2) --в радианах (для превращения в градусы заверните в Acos)
return math.acos((dx1*dx2+dy1*dy2)/((dx1^2+dy1^2)^0.5 * (dx2^2+dy2^2)^0.5))
end
--Угол между двумя отрезками
function BlzAngleBetweenSegments(Ax1,Ay1,Ax2,Ay2,Bx1,By1,Bx2,By2)
local dx1,dx2,dy1,dy2=Ax2-Ax1,Bx2-Bx1,Ay2-Ay1,By2-By1
return AngleBetweenTwoVectors(dx1,dy1,dx2,dy2)
end
--угол между диагоналями четырехугольника/сторонами треугольника и пр
--cx,cy - точка пересечения диагоналей A и B
--Ax,Ay,Bx,By - одна из крайних точек диагоналей
function BlzAngleBetweenDiagonals(cx,cy,Ax,Ay,Bx,By)
local dx1,dx2,dy1,dy2=Ax-cx,Bx-cx,Ay-cy,By-cy --4 опер
return AngleBetweenTwoVectors(dx1,dy1,dx2,dy2)
end
Что то весь текст монотонной подсветкой изукрашен, почти весь код белым штрифтом. Почему комменты не закрашиваются зеленьким или сереньким? Можно было ключевые слова local return и др подсвечивать, не белым
--угол лежит между двумя углами
function IsAngleBetweenAngles(angle,angle1,angle2)
N = angle%360 --normalize angles to be 1-360 degrees
a = angle1%360
b = angle2%360
if (a < b)then
return a <= N and N <= b;
else
return a <= N or N <= b;
end
end
print(IsAngleBetweenAngles(150, 80, 320)) --=> true
print(IsAngleBetweenAngles(30, 80, 320)) --=> false
print(IsAngleBetweenAngles(340, 80, 320)) --=> false
print(IsAngleBetweenAngles(140, 0, 160)) --=> true
print(IsAngleBetweenAngles(180, 0, 160)) --=> false
print(IsAngleBetweenAngles(1, 0, 360)) --=> true
Пример где значок процента %, в луа это модуль, это странный стиль. Заметил, что ключевые слова, цифры и пр при слтином писании кода очень не красиво получается, какая то часть строчки резко выделяется на фоне остального
Или тут
function ascii2decimal(str)
str = string.reverse(str)
local result = 0
local pw = 1
for i=1, #str do
local c = str:sub(i,i)
result = result + string.byte(c)*pw
pw = pw*256
end
return result
end
function area(x1,y1,x2,y2,x3,y3)
return (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1);
end
function intersect_1 (a,b,c,d)
if (a > b)then a,b=b,a end
if (c > d)then c,d=d,c end
return math.max(a,c) <= math.min(b,d);
end
function intersect(x1,y1,x2,y2,x3,y3,x4,y4)
return intersect_1 (x1, x2, x3, x4)
and intersect_1 (y1, y2, y3, y4)
and area(x1,y1,x2,y2,x3,y3) * area(x1,y1,x2,y2,x4,y4) <= 0
and area(x3,y3,x4,y4,x1,y1) * area(x3,y3,x4,y4,x2,y2) <= 0;
end
Ниже я заметил странность, что ключевые слова как if then почему то голубым светом отсвечивается. Ошибка или нет это
function InterLineLine(x1,y1,x2,y2,a1,b1,a2,b2)
local p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
local x,y
if ( p == 0 ) then --отрезки параллельны
return false
end
x = ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
return x,y
end
function IsPointOnBeam2(x,y,x1,y1,x2,y2)
return ((x-x1)*(y2-y1) == (x2-x1)*(y-y1)) and ((x-x1) * (x2-x1) >= 0) and ((y-y1)*(y2-y1) >= 0)
end
function IsPointInSegment(x,y,x1,y1,x2,y2)
return((x1-x)^2+(y1-y)^2)^0.5 + ((x2-x)^2+(y2-y)^2)^0.5 == ((x2-x1)^2+(y2-y1)^2)^0.5
end
function RayIntersectSegment(rayx,rayy,dirx,diry,x1,y1,x2,y2)
--находим точку пересечения прямых
local x,y=InterLineLine(rayx,rayy,dirx,diry,x1,y1,x2,y2)
if x then
--проверка, что точка пересечения на отрезке, и принадлежит лучу
return IsPointInSegment(x,y,x1,y1,x2,y2)and IsPointOnBeam2(x,y,rayx,rayy,dirx,diry)
else
--иначе, если прямые не пересекаются, то точки пересечения нет.
--если луч и отрезок лежат на одной линии
return IsPointOnBeam2(x1,y1,rayx,rayy,dirx,diry) and IsPointOnBeam2(x2,y2,rayx,rayy,dirx,diry)
end
return false
end
print('p1=1: '..tostring(RayIntersectSegment(0,0,0,1,100,0,-100,0))..' луч направлен вверх, луч пересекает горизонтальный отрезок')
print('p1=0: '..tostring(RayIntersectSegment(0,0,0,1,100,-1,-100,-1))..' луч направлен вверх, луч не пересекает горизонтальный отрезок, расположенный ниже'')
function LinesIntersect(a1,b1,c1, a2,b2,c2)
local x = (b1 * c2 - b2 * c1) / (a1 * b2 - a2 * b1);
local y = (a2 * c1 - a1 * c2) / (a1 * b2 - a2 * b1);
return x,y
end
print(LinesIntersect(1, 1, -1, 1, -1, 0))
function kramer(a1,b1,c1,a2,b2,c2)
local d = a1 * b2 - a2 * b1;
local dx = c1 * b2 - c2 * b1;
local dy = a1 * c2 - a2 * c1;
local x,y = dx / d, dy / d;
return x,y
end
Кстати, я заметил, что вы убрали вездел внутри спойлеров внутренние спойлеров. Раскрыв их. Но это не везде такое. Кое где это осталось без изменении, и внутри спойлеров можно сохранить спойлеры. Как это получилось))
В карте Impossible Missions Squad все юниты создаются триггерно, но зачем?
Какой-то глупый вопрос. Все крипы создаются кодом, или ты хочешь заранее расставить их на карте? Тут по-любому придеться создавать через триггер.
Я не знаю, что это за карта, но если автор расставляет юнитов на карте с нуля кодом, мб есть какая-то причина. Я пока не знаю зачем так делать, и не вижу смысла, если я о том, о чем подумал. Но внутри карты все равно кодом программа расставляет всех юнитов на карте, зачем еще и триггерами усложнять.
А зачем тебе ловить получение способности? Да такого ивента нет, но это легко исправляется. Ты же не часто меняешь абилу герою? Поэтому нужно конкретные ивенты
Тут надо ловить повышение геройской способности. => даем или повышаем скиллы
Или получение итема => можно дать
Или юнит входит в игру, при сохдании => даем скилл
Если ты сам меняешь, то легко кодом исправить. Поэтому проблемой никонда не было в условиях ограниченности
Если нет, не устраивает этот вариант, тогда выбираем сложный вариант. Ибо надо много чего сделать. Ну смотри, делаем это так:
Заметка: можно было взять готовую не-целевую способность, но вызывы абилки не всегда удобны: нажатие сразу вызывают каст, а по идее должно вызвать прицел. Поэтому я бы отошел от абилки, и сделал бы на фреймах, но тут очень много надо работы сделать.
делаем обычную кнопку
изучаем как сделать tooltip (подсказку для кнопки). Можно научиться и делать с ресурсами. Смотрим пример
Все пустышка готова, нужно внести еще и штрихи.
кнопка должна появляться когда юнит выделен, верно? Иначе, кнопка так и будет висеть на экране. Для этого нужно сделать проверку. Вот здесь показано как выследить какой юнит выбран
ну, и последнее. Нужно как-то вызвать прицел. К сожалению, в рефе нет возможности менять прицелы, подсвечивать и пр. А тем более вызвать напрямую прицел. Есть один способ, но не очень приятен. Использовать хоткей (hotkey, горячую кнопку). Почему это не хороший способ? Он не очень удобный, и требует еще лишних махинации. нужно, чтобы иконка способности была видима, иначе хоткей не работает, нельзя скрывать ее никаким образом. Единственный вариант, который нашелся - это мы должны будем перетащить кнопку за пределы экрана, так кнопка все еще считается "видимой" для игры, но мы не видим эту настоящую способность. и только тогда можно форсить хоткей игроком прицел. Что и сделал в примере с инвентарем
Проще все это сделать было бы в ujapi. Все, до свидания. С вами был Мрачный Ворон!
» Администрация XGM / Нарушена подсветка lua
» Администрация XGM / Нарушена подсветка lua
» WarCraft 3 / Кривая Безье
Ред. MpW
» WarCraft 3 / Кривая Безье
» WarCraft 3 / Кривая Безье
» Администрация XGM / Нарушена подсветка lua
» WarCraft 3 / Кривая Безье
Ред. MpW
» WarCraft 3 / Не пустая клетка.
Ред. MpW
» Администрация XGM / Нарушена подсветка lua
» CliCli / Закрытие глобальных серверов
Ред. MpW
» Администрация XGM / Нарушена подсветка lua
Ред. MpW
» Администрация XGM / Нарушена подсветка lua
» Администрация XGM / Быстрое раскрытие спойлеров
Ред. MpW
» WarCraft 3 / Зачем создавать юнитов триггерно, а не через редактор?
Ред. MpW
» WarCraft 3 / Несколько способностей в одной
Или получение итема => можно дать
Или юнит входит в игру, при сохдании => даем скилл
Если ты сам меняешь, то легко кодом исправить. Поэтому проблемой никонда не было в условиях ограниченности
Ред. MpW
» WarCraft 3 / карты в варкрафт 3 все версии
Ред. MpW
» WarCraft 3 / Несколько способностей в одной
Ред. MpW
» Рецепториум / Праздничная Индейка
Ред. MpW
» WarCraft 3 / Определение хоста карты
Ред. MpW
» WarCraft 3 / Способность требующая золото
» Рецепториум / Праздничная Индейка
» WarCraft 3 / Определение хоста карты
» Кузня Волчачки / С Новым Годом!
Ред. MpW
» WarCraft 3 / Как использовать boolean variable в Хэш таблице.