30

» WarCraft 3 / Вопрос физической сложности проверки карты

Какого же теститить карту тем, у кого она грузится около 10 минут.
Никто не мешает разбить карту на максимально независимые системы и тестить каждую по отдельности.
30

» WarCraft 3 / Реген

Ну если оно будет отключать реген от айтемов и триггерный реген - то наверное проще.
По идее REGENERATION_TYPE_NONE отрубает весь реген. Только нужно осмотреть здесь возможно ли изменить реген юниту.
30

» WarCraft 3 / Реген

Триггерный реген у всех на карте - на хэндл каждого/через структуры вешаешь индивидуальный реген, а командой в чате просто меняешь значение переменной, которая отвечает за реген (то есть ставишь 0 и все)
Можно и не триггерный, а использовать ABILITY_RLF_LIFE_REGEN_RATE или UNIT_IF_HIT_POINTS_REGENERATION_TYPE.
30

» WarCraft 3 / Дать и забрать способность без локалок

а так, клон синтаксита, да кое каких фишечек языка
Да ладно, вы думаете что близы не скомпилировали lua и вставили в игру, а допилили jass до синтаксиса lua?
а напротив урезать и убирать утечки (методом вырезания, имхо они делают что проще на тяп, ляп)
Ну порезали они потенциально опасные вещи, как например io и что?
30

» WarCraft 3 / Установка локальной переменой для силы

1.Создать локальную переменую\ установить её равной текущей силе юнита применяющего способность.
После определённых манипуляций повторить.
Отнять результат первой локалки от второй.
На полученую сумму уменьшить применяющему герою силу.
Почему на гуи нельзя локалки делать....
Никто вам не мешает костылить на гуи. Но думаю вы вообще не понимаете принцип работы локальных переменных. В последнем патче вместо кривого jass ввели lua, на котором всё делается в разы быстрее и проще чем на гуях.
30

» WarCraft 3 / Установка локальной переменой для силы

В файлах common.j и blizzard.j. Или установить силу на гуи и конвертировать триггер в текст. Если используете JNGP, то Ctrl+click по функции открывает справку. Нужные вам функции выглядят так:
---@param whichHero unit
---@param newStr integer
---@param permanent boolean
---@return nothing
function SetHeroStr(whichHero, newStr, permanent) end    -- (native)


---@param whichHero unit
---@param newAgi integer
---@param permanent boolean
---@return nothing
function SetHeroAgi(whichHero, newAgi, permanent) end    -- (native)


---@param whichHero unit
---@param newInt integer
---@param permanent boolean
---@return nothing
function SetHeroInt(whichHero, newInt, permanent) end    -- (native)

И вообще, для таких базовых вещей существуют статьи.
30

» WarCraft 3 / Дать и забрать способность без локалок

либо сами на ГУИ не пробовали устанавливать эти локалки и переменые глобальные...
ГУИ это непостижимая субстанция, постичь которую могут только избранные. Простым смертным только и остаётся, что писать на lua и не мучаться.
30

» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?

Конечно я могу ошибаться, но в этом случае счетчик ссылок объекта u никогда не достигнет нуля.
Объект u всего лишь указатель на созданного юнита, который повиснет в памяти, если не сделать set a = null. Какой ещё счётчик ссылок у него может быть?
30

» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?

не могли бы вы ответить на тему самого вопроса?
Могу и я ответить
Нужно ли обнулять handle в хеш-таблице?
Нужно.

Неужели так уж сложно немного подумать?
local handle a = GetHandleId() -- создаём хэндл
call SaveHashtableHandle( Hashtable, id , 0, val ) -- в хэштаблице по ключам id,0 появилось значение этого хэндла
call FlushChildHashtable( Hashtable, id ) -- все записи по ключу id исчезли из таблицы
set a = null -- хэндл никуда не делся и его нужно обнулить
30

» WarCraft 3 / Нужно ли обнулять handle в хеш-таблице?

а вы?
А я не задаю вопросов, ответ на которые есть в статьях.

SaveHashtableHandle( Hashtable, id , 0, val )
FlushChildHashtable( Hashtable, id )
Откуда здесь утечки, если вы не создаёте хэндлов, которые повиснут в памяти?
30

» WarCraft 3 / Как сделать респ мобов?

Даже если принудительно вызвать сборку мусора после старта игры?
Я ж сборщик для этого в чат и выводил. Он убивает триггер, если его принудительно вызвать до TriggerAddAction()
30

» WarCraft 3 / Как сделать респ мобов?

Ну и сколько можно показывать людям код, в котором триггеры создаются до инициализации, падать же будет при сборке мусора.
Только вот у меня почему-то не падает.
Тем более, у тебя даже инжект в InitGlobals есть, но в нем почему-то только юниты создаются, хотя можно было бы и триггер там создавать...
Инжект там только с одной целью - чтоб создание юнитов работало даже если его перенесут выше объявления функции.
Луа это хорошо, сам на нем пишу, но гуишникам от него пользы мало.
Звучит так, как будто "гуишник" это диагноз. Не спорю, есть особо одарённые личности, но думаю адекватные смогут подправить несколько строк в тексте под свои нужды.
30

» WarCraft 3 / Как сделать респ мобов?

Возможно пациент не знает что такое хэндл (как и я)
Для таких случаев существуют статьи.
сделать тоже самое но только в проверке указать тип следующего юнита, и так столько раз сколько у тебя типов юнитов
В самом же вопросе указано:
например 20 разных областей и 20 одинаковых юнитов

Так как я не разбираюсь в гуях, то напишу пример на lua без идиотских проверок на тип юнита

do
	local table = {} -- используем таблицу для сзапоминания юнитов
	
	-- создаём функцию для удобного спавна
	---@param player player
	---@param raw integer
	---@param rct rect
	function SpawnGuard(player, raw, rct)
		-- получаем координаты рэкта
		local minX, maxX, minY, maxY = GetRectMinX(rct), GetRectMaxX(rct), GetRectMinY(rct), GetRectMaxY(rct)
		-- создаём юнита
		local unit                   = CreateUnit(player, raw, math.random(minX, maxX), math.random(minY, maxY), math.random(0, 359))
		-- сохраняем хэндл в таблицу
		table[GetHandleId(unit)]     = rct
	end
	
	-- отлавливаем смерть юнитов
	local trigger = CreateTrigger() -- создаём триггер
	for i = 0, bj_MAX_PLAYER_SLOTS-1 do
		-- перебираем все слоты игрока
		TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_DEATH) -- регистрируем событие смерти
	end
	TriggerAddAction(trigger, function()
		-- добавляем действия в триггер
		local unit   = GetTriggerUnit() -- получаем юнита
		local handle = GetHandleId(unit) -- получаем хэндл юнита
		if table[handle] == nil then return end -- проверяем его наличие в таблице
		local raw    = GetUnitTypeId(unit) -- запоминаем тип юнита на случай внезапного исчезновения хэндла
		local player = GetOwningPlayer(unit) -- запоминаем владельца по той же причине
		
		-- стартуем таймер
		TimerStart(CreateTimer(), 20, false, function()
			SpawnGuard(player, raw, table[handle]) -- спавним юнита по новой
			table[handle] = nil -- подчищаем за собой
			DestroyTimer(GetExpiredTimer()) -- не забываем удалять отработанные таймеры
		end)
	
	end)

end

-- Где-то ниже по коду
do
	local InitGlobalsOrigin = InitGlobals
	function InitGlobals()
		InitGlobalsOrigin()
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect1)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect2)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect3)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect4)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect5)
		SpawnGuard(Player(PLAYER_NEUTRAL_AGGRESSIVE), FourCC('hfoo'), gg_rct_myGuardRect6)
	end
end 
30

» WarCraft 3 / Как изменить скорость анимации у спрайта перезарядки?

о да, это то, ради чего мы ждали кастомный интерфейс... гуд
Вам никто не обещал золотые горы и простоту разработки кастомного интерфейса.
30

» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?

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

» WarCraft 3 / Космодесантник

Огненная атака и почему ее не возможно дать другому персонажу. В чем прикол именно этого персонажа?
В том что огонь часть модели юнита.
30

» WarCraft 3 / Глючит карта

Редактор вылетает, если выделять курсором. Но можно же тупо нажать Ctrl+A.

Сейчас проверил, вылетает, но я точно так делал на 1.31. Наверно кольца Юпитера не под благоприятным углом.
30

» WarCraft 3 / двумерный массив lua

И если хочешь получать/посылать число указывая номер игрока и число - тогда либо хеш-таблица (именно так они и работают)
Хэштаблицы в lua это глупо