15

» WarCraft 3 / Где играть в пиратский (осуждаю) варик?

Скачиваешь с сайта irinabot, запускаешь, запускаешь игру, заходишь в локальную сеть. На сайте выбираешь к какой игре подключиться, эта игра появляется в списке клиента игры. Схоже с гареной.
15

» WarCraft 3 / Глобальные переменные и их количество

Можешь хэщтаблицу + хэш строки использовать
Save Handle of Unit as StringHash("Target") of StringHash("MyDickLightning") in AbilityTable
Как глобалки но с экономией места.
15

» WarCraft 3 / Hashtable 8000

Что насчёт возможности стора кастомных типов (vjass types или struct)?
vJass не типобезопасен. Все типы vJass это псевдонимы для integer, поэтому для сохранения данных этого типа используется integer.
15

» WarCraft 3 / Пересечение двух отрезков

как векторы помогут найти точку пересечения?
Что же, давай рассмотрим этот вопрос подробнее
Прелюдия
Проилюстрируем два отрезка, один образованный точками A, B и второй, образованный точками C и D
Нам необходимо найти точку пересечения этих отрезков (если существует). Как это делается? Делается это путем низведения задачи до минимально возможных примитивов, решения задачи на этих примитивах и последующей проверкой полученного ответа в рамках исходной задачи.
В нашем случае, примитивами двух отрезков являются прямые. То есть, нам необходимо найти точку пересечения прямых, на которых лежат наши отрезки, а затем проверить, лежит ли найденная точка в пределах отрезков.
Пунктиром обозначены прямые, на которых лежат отрезки. Я так же буду использовать термин "прямые, пораждаемые отрезками".
Шаг 1
Нам необходимо построить параметрическое уравнение для каждой из наших прямых. Параметрическое уравнение прямой выглядит следущим образом:
P = P1 + k * n
Где P - любая точка на прямой, описанная уравнением, P1 - известная точка на прямой, n - вектор, параллельный прямой, n - произвольный параметр.
Я не знаю, как можно в данном текстовом виде обозначить вектор, ибо форма записи со стрелочкой над буковкой мне недоступна, поэтому придется держать в уме, что вектора и параметры обозначаются строчными буками, а точки - прописными. Чтобы было проще отличить вектора от параметров, условимся, что параметр я всегда буду записывать слева, а вектор справа.
Как мы можем построить аналогичное уровнение для наших прямых? Для начала, было бы неплохо получить вектора, параллельные нашим прямым. Это может быть сделано путем вычитания координат точек наших отрезков. То есть, для отрезка AB, вектор будет иметь вид (B - A), а для отрезка CD (D - C)
В таком случае, мы можем составить уровнение для каждой прямой
A + k * (B - A)
C + n * (D - C)
Для простоты записи, обозначим вектор (B - A) как вектор a, и вектор (D - C) как вектор b
A + k * a
C + n * b
Таким образом мы можем составить систему уравнений
P = A + k * a
P = C + n * b
Где P, есть точка пересечения двух прямых, порожденных нашими отрезками. Осталось решить эту систему уравнений.
Шаг 2
Итак, дана система уравнений
P = A + k * a
P = C + n * b
Чтобы найти точку пересечения P, нам необходимо найти неизвестный параметр k первой прямой, либо параметр n второй прямой. Я буду искать параметр k:
P = A + k * a
P = C + n * b

// Составим уравнение
A + k * a = C + n * b

// Решаем
k * a = C + n * b - A

// Видим, в правой половине у нас образуется вектор (C - A),
// для простоты записи, дадим ему имя c
k * a = n * b + c
Необходимо найти параметр k, для этого избавимся от n * b во второй половине уравнения. Сделать это можно путем скалярного произведения вектора b, на другой, перпендикурярный ему вектор (одно из определений скалярного произведения векторов гласит - произведение длин векторов на косинус угла между ними - следовательно, скалярное произведение перпендикулярных векторов дает 0, поскольку косинус 90 градусов равен нулю). Найти этот вектор мы можем путем простой перестановки координат x и y вектора b и изменением знака одной из этих координат. Назовем новый вектор b' (читать "б штрих") = (-b[y], b[x]).
k * a = n * b + c

// Находим скалярное произведение с обеих сторон
// на перпендикулярный вектор b'
k * (a • b') = (n * b + c) • b'
k * (a • b') = n * (b • b') + c • b'
k * (a • b') = c • b'

// Находим параметр k
k = (c • b') / (a • b')
Символ • есть символ скалярного произведения векторов, найдеюсь он корректно отображается в браузере.
Показанные выше вычисления могут показаться немного неожиданными для начинающего, как я тут выражаю ПАРАМЕТР, через ВЕКТОРА, да еще ДЕЛЮ вектора на вектора? Лишь напомню, что результатом скалярного произведения векторов есть скаляр (почему оно так и называется).
Готово, мы нашли формулу вычесления параметра k для прямой, поражденной отрезком AB. Теперь мы можем подставить этот параметр в изначальную формулу A + k * (B - A) и получить точку пересечения наших прямых.
Шаг 3 (есть прямые, а нужны отрезки)
Изначальная задача требовала от нас поиска пересечения отрезков, а не прямых, мы же нашли точку пересечения прямых - бесконечных прямых, бесконечно длинных прямых. Теперь нам нужно проверить, принадлежит ли найденная точка обоим отрезкам. Как это сделать?
Если мы снова взглянем на параметрическое уравнение прямой
P = P1 + k * n
Мы сможем сделать следующий вывод - точка P1, это известная нам точка на прямой, вектор n, есть направляющий вектор до точки P, а параметр k, будет выступать длинной вектора n (или есть говорить совсем твердолобо - количество векторов n, которое помещается между точкой P1 и точкой P).
Вернемся к формуле прямой, поражденной отрезком AB
P = A + k * (B - A)
Где P - найденная нами точка пересечения прямых, A - начальная точка отрезка, k - найденный параметр, а (B - A) вектор из точки A в точку B. Поскольку, в нашем случае, вектор (B - A) был получен из координат точек отрезка, его длина соответствует длине отрезка. Это значит, что параметр k будет принимать значение от 0.0 до 1.0, если найденная точка пересечения P, лежит на отрезке. В противном случае, мы можем завершить наши вычисления, поскольку, хоть прямые и пересекаются, точка пересечения не лежит в пределах обоих отрезков одновременно.
Из этого можно сделать простой вывод, что необходимо решить систему уравнений повторно, выразив параметр n второй прямой, и проверив его на вхождение в диапазон от 0.0 до 1.0
P = A + k * a
P = C + n * b

C + n * b = A + k * a
n * b = A + k * a - C

// Запишем образующийся вектор (A - C) как d
n * b = k * a + d

// Избавимся от параметра k путем скалярного
// произведения вектора a на вектор a' = (-a[y], a[x])
n * (b • a') = (k * a + d) • a'
n * (b • a') = d • a'
n = (d • a') / (b • a')
Готово, теперь остается проверить параметр n на интервал от 0.0 до 1.0.
if k >= 0 and k <= 1 and n >= 0 and n <= 1 then
    // Точка пересечения прямых лежит в пределах
    // обоих отрезков.
    return true
else
    return false
endif
Пара оговорок
В финале, хотелось бы добавить
  1. Мы могли бы отказаться от скалярного произведения на перпендикулярный вектор в пользу векторного произведения, но мне показалось, что это лишь усложнит понимание для неопытных пользователей.
  2. В процессе решения системы уравнений в первый раз, нам необходимо добавить проверку скалярного произведения вектора b' с обоими векторами (B - A) и (D - C), ведь если произведение вектора b' на вектор (B - A) дает нуль и на вектор (D - C) дает нуль, это значит что оба вектора перпендекулярны вектору b', а значит они параллельны и пересекаться не могут.
  3. Реализуя данный алгоритм в программе, помните о неточности чисел с плавающией точкой и вместо сравнения с нулем используйте сравнение модуля числа с каким-то минимильным значением, например Abs(x) < 0.0001
15

» Dota 2 / Dota 2 Classic

Ах, классическая д2. Эпоха становления мерзостного снг-комьюнити массовым. Стримеры, поднявшиеся на демонстрации своих конвульсивных припадков, захлебываясь второсортной матершиной. Сколько славных граждан с инфо превратилось в говно начав играть в это. Столько воспоминаний.
15

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

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

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

Мне бы патч чтобы игра из редактора быстрее запускалась и закрывать через диспетчер задач не приходилось.
15

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

ты хотел сказать, что они не осилили вставку базовых функций браузера
А зачем? Есть отработанная технология, зачем каждый раз тратить ресурсы на изобретение велосипеда? Какой в этом объективный смысл?
15

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

но чем могло не угодить старое, но отзывчивое и быстрое меню?
Там нет функций браузера, необходимых для реализации трансляций, новостей, магазина.
15

» WarCraft 3 / Warcraft 3 Reforged: Патч 1.32.9

Была ли необходимость в меню на хромиуме? Не дает покоя этот вопрос всякий раз
Это простая технология которая давно вошла в обиход. ЛоЛ использует, приложение Близзард использует, прочие лаунчеры используют. Жалоб не слышно.
15

» WarCraft 3 / Reforged - мышь в центре экрана

GetLocalPlayer, так таймер с малым периодом чем не угодил?
Регулярным выполнением набора команд, с малым периодом, вместо разового вызова функции.
15

» WarCraft 3 / Reforged - мышь в центре экрана

Можно создать в центре экрана фрейм размерами 0,0001х0,0001 и ограничить передвижение мыши этим фреймом вызовом
BlzFrameCageMouse
15

» WarCraft 3 / Релиз Warcraft 3: Reforged

Как работает импорт иконок между рефоржом и классикой? Классический импорт иконок идет в пути
replaceabletextures\commandbuttons\
в рефорже
_hd.w3mod:replaceabletextures\commandbuttons\
Рефорж подсасывает иконку по классическим путям, если ХД вариант отсутствует, или теперь оба варианта ипортировать придется?
15

» WarCraft 3 / Редактор кода vJass в рефоржеде

работаешь с одним куском кода
Размещай в разных файлах и импортируй через
//! import "my_script.j"
в CustomScript карты.
15

» WarCraft 3 / Изменение сопротивления магии в 1.32?

Можно дать одну способность рунных браслетов или благославения элуны всем юнитам и уже этой способности изменять поле резиста через BlzSetAbilityRealLevelField. Если работает, конечно.
15

» WarCraft 3 / Изменение сопротивления магии в 1.32?

потому что там не очень очевидная совместимость с предметами, дающими резист
Помимо этого, если бонусное ХП получаемое от улучшений достигает или превосходит базовый максимальный запас здоровья, выдача этого дела приведет к суициду юнита.
15

» WarCraft 3 / Универсальные хоткеи для абилок.

Делать все способности триггерными на основе канала. Редактировать поля канала (иконку, описание, дальность каста, манкост и т.д.) в процессе игры (Действие -> Ability -> Set Real/Integer Field). Тогда в карте будет только 7 абилок на всех героев.
PT153:
Там же вроде можно менять хоткей у способности.
Не, ничего такого не вводили.