30

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

не вижу смысла сохранять двумерные массивы в хеш-таблицу.
Делал заклинание и хотел сделать множественное применение, но возникла проблема хранения всех целей на кастере и всех кастеров на цели. Плюс ещё кучу всего, чтоб равномерно распределять хп между всеми применившими заклинание. Притом хотел ещё учесть такой вариант, что если два кастера применяют заклинание у одной цели, то первый применивший дамажил второго. Тут то мне таблиц и нехватило.
Функции? Их разве можно вообще куда-либо сохранять?
В lua их даже возвращать можно)
function sum(a)
	return function(b)
		return a + b
	end
end
print(sum(2)(3)) --> 5

Ещё можно удобно сохранять данные
Загруженные файлы
30

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

Хеш-таблица — универсальный хранитель информации.
Как сможете без лишних сущностей сохранить n двумерных массивов на хэндл юнита, тогда я вам поверю. За сохранение в хэштаблице безымянной функции я вообще молчу.
30

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

но хеш-таблицы очень легко освоить
Хэштаблицы это неповоротливый костыль, который можно использовать только для хранения this структуры по хэндлу таймера.
30

» WarCraft 3 / Конвертация в строку

trim обычно убирает символы отступа вначале и конце.
Так передайте в found пробел, он и уберёт. Я его для комманд чата писал и посему перевод строки не предусматривал.
30

» WarCraft 3 / Конвертация в строку

PT153, я целую библиотеку хороших функций накатал)
// Выводим сообщения
MessageTimed(string str, real time)
Message(string str)
MessageForPlayerTimed(player p, string str, real time)
MessageForPlayer(player p, string str)

// Очищаем строку сообщения
ClearTextMessagesForPlayer(player p)

// Получаем имя игрока
GetPlayerColorString(player p) -> string
GetPlayerNameColored(player p)  -> string

// Обрезаем крайние символы
LTrim(string str, string found) -> string
RTrim(string str, string found) -> string
Trim(string str, string found) -> string
// Примеры
LTrim("---T-r-i-m---", "-"); // T-r-i-m---
RTrim("---T-r-i-m---", "-"); // ---T-r-i-m
Trim("---T-r-i-m---", "-"); // T-r-i-m

// Конвертируем boolean в строку
B2S(boolean b) -> string
// Примеры
B2S(true); // true
B2S(!true); // false

// Превращаем строку в равкод
S2RAW(string ObjectId) -> integer
// Пример
S2RAW("hfoo"); // 1751543663
    
// Превращаем равкод в строку
RAW2S(integer ObjectId) -> string
// Пример
RAW2S(1751543663); // hfoo

// Заменяем подстроку
StringReplaceCounted(string str, string found, string replace, integer count) -> string
StringReplace(string str, string found, string replace) -> string
// Примеры
StringReplaceCounted("old old old old old", "new", 2); // new new old old old
StringReplaceCounted("old old old old old", "new", -2); // old old old new new
StringReplace("old old old old old", "new"); // new new new new new

// Склоняем строку в зависимости от числа
Declension(integer number, string dec1, string dec4, string dec5);
/* Описание
number - число, от которого склонять
dec1 - вариант склонения для числа 1, например "предмет"
dec4 - вариант склонения для числа 4, например "предмета"
dec5 - вариант склонения для числа 5, например "предметов"
*/
// Пример
Declension(100500, "предмет", "предмета", "предметов") // предметов

// Склоняем строку в зависимости от числа с заменой подстроки и учётом нуля
Declenser(integer number, string found, string dec0, string dec1, string dec4, string dec5) -> string
/* Описание
number - число, от которого склонять
found - подстрока, которая будет заменена на number
dec0 - вариант строки для number == 0, например "Рюкзак пуст"
dec1 - вариант склонения для числа 1, например "В рюкзаке %count% предмет"
dec4 - вариант склонения для числа 4, например "В рюкзаке %count% предмета"
dec5 - вариант склонения для числа 5, например "В рюкзаке %count% предметов"
*/
// Пример
Declenser(
	100500,
	"%count%",
	"Рюкзак пуст", 
	"В рюкзаке %count% предмет",
	"В рюкзаке %count% предмета",
	"В рюкзаке %count% предметов"
); // В рюкзаке 100500 предметов
30

» WarCraft 3 / отлов момента урона\доступ к значению урона.

Снеси его и поставь EN версию игры, если собираешься заниматься только созданием карт.
Судя по
на тригерах стоял эта строчка тупо пробелом была
скорей всего просто стояли "криворуские триггеры", тогда на выбор JNGP или последний патч.
30

» WarCraft 3 / Очередная проблема рывка

Принятый ответ
У вас там проблем целый ворох, а именно эта возникает из-за:
Которая вызывает SetUnitPosition(), которая сбивает приказ и учитывает коллизии юнитов. Вам нужно использовать SetUnitXY, примеры чего есть в статьях.

На досуге прочитайте Правила создания вопросов, а то мало ли...
Загруженные файлы
30

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

DracoL1ch, нужно стремиться к светлому будущему, а не утягивать всех в пучину 1.26 с костылями и гареной с полтора землекопа.
30

» WarCraft 3 / Проблема с переменной типа group

Принятый ответ
Вы хотя бы BJ разворачивали.
local unit q                       			  //Юнит, который добавляется в группу
local unit w = GetTriggerUnit()      //Юнит, который триггерит триггер
local group g = CreateGroup()                      			  //Группа, в которую все юниты входят
local integer j = GetHandleId(w)    //Узнаём ID юнита, который триггерит триггер

set q = CreateUnit(GetOwningPlayer(w), 'h00C', GetUnitX(w), GetUnitY(w), bj_UNIT_FACING)
GroupAddUnit(g, q)

// дальше сами...
30

» WarCraft 3 / Передвижение юнитов через спел на Хеш-таблице

Я Save Handle of (Last created unit) as 0 of (а дальше я не нашёл, как добавть "Key(Constructed structure))" in Hash
и соответсвенно любое другое действие, где прописанно Key
Если у вас 1.26, то Key не работает из GUI, так что переходите на последний патч с lua, там геммороя намного меньше.
30

» WarCraft 3 / Конвертация в строку

Принятый ответ
common.j
-- String Utility API

---@param i integer
---@return real
function I2R(i) end

---@param r real
---@return integer
function R2I(r) end

---@param i integer
---@return string
function I2S(i) end

---@param r real
---@return string
function R2S(r) end

---@param r real
---@param width integer
---@param precision integer
---@return string
function R2SW(r, width, precision) end

---@param s string
---@return integer
function S2I(s) end

---@param s string
---@return real
function S2R(s) end

---@param h handle
---@return integer
function GetHandleId(h) end

---@param source string
---@param start integer
---@param ending integer
---@return string
function SubString(source, start, ending) end

---@param s string
---@return integer
function StringLength(s) end

---@param source string
---@param upper boolean
---@return string
function StringCase(source, upper) end

---@param s string
---@return integer
function StringHash(s) end


---@param source string
---@return string
function GetLocalizedString(source) end

---@param source string
---@return integer
function GetLocalizedHotkey(source) end
30

» WarCraft 3 / Хеш-таблица

он не писал о том, что у него будут создаваться новые юниты
Зато о группе он писал
Я сделал, что бы они возникали, но теперь мне нужно добавить их в группу

Да и в вопросах как-то уместней давать более гибкие решения, чтоб люди не парились.
30

» WarCraft 3 / Хеш-таблица

в его вопросе указано, что возникают только 3 юнита.
Возникают три, а затем ещё могут создаваться, добавляться и удаляться. Группа более эластичное решение и поэтому лучше создать её, чем заставлять автора париться с ключами, потом создавать новый вопрос и переделывать всё заново.
30

» WarCraft 3 / Хеш-таблица

Black Soul, выше два человека написали, что нужно создавать группу. Если здание будет создавать юнитов, то человек задолбётся ключи указывать.
30

» WarCraft 3 / Как триггерно призвать иллюзию героя?

Решил вопрос сам.
Смотрю создать вопрос намного легче чем тупо загуглить.
30

» WarCraft 3 / Процентный хил

БезликийСектант, неужто проценты в школе не проходили?
Хорошо ещё что числа складывать не разучились.
30

» WarCraft 3 / Хеш-таблица

Принятый ответ
Сохраняете на хэндл здания группу юнитов и дело в шляпе.
30

» WarCraft 3 / Способности прыгают со своего места

Не исключено, что координаты некоторых способностей совпадают, в таком случае, у тебя способности обновляются, и самая новая попадает в правую ячейку.
Координаты не учитываются для спэллбука. Способности будут в том порядке, в котором они первый раз добавлены. Поэтому создайте дамми и дайте ему все способности в нужном порядке.