30

» WarCraft 3 / Пособие по публикации ресурсов

Всё же речь про те утечки памяти, которые мы можем исправить не пренебрегая функциональностью.
Да всё правильно - если не писать код, то он не создаст утечку))
30

» WarCraft 3 / AdicHelper?

Все элементы массива по умолчанию заполнены нулями.
Если б это было так, то простое объявление массива сжирало всю доступную память.
30

» WarCraft 3 / Пособие по публикации ресурсов

Любые сложные наработки на jass имеют утечки памяти =)
Осталось определиться с понятием все, сложные и утечки. Например моя наработка является сложной и имеет утечки?
30

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

DracoL1ch:
хендл юнита не хранит ничего, это просто номер, юнит исчез - данных нет
будем знать, но PT153 же сохраняет все нужные данные, так что всё норм.
30

» WarCraft 3 / Создание проклятого рудника через триггеры

Я просто не вижу функции перевести в jass
Есть два варианта решения проблемы:
  • разобраться как оно работает
  • каждый раз клянчить о помощи
выбирайте...
30

» WarCraft 3 / AdicHelper?

При обращении к переменной без значения поток обрывается.
Правда? А посему декларация переменных поток не сбрасывается?
Вот у массивов все ячейки имеют дефолтное значение
А не обращение к несуществующему элементу массива возвращало null?
30

» WarCraft 3 / Создание проклятого рудника через триггеры

Принятый ответ
Как видно из blizzard.j они тупо удаляют рудник и ставят порченный.
--===========================================================================
-- Starting Units for Undead Players
-- - 1 Necropolis, placed at start location
-- - 1 Haunted Gold Mine, placed on nearest gold mine
-- - 3 Acolytes, placed between start location and nearest gold mine
-- - 1 Ghoul, placed between start location and nearest gold mine
-- - Blight, centered on nearest gold mine, spread across a "large area"
--
---@param whichPlayer player
---@param startLoc location
---@param doHeroes boolean
---@param doCamera boolean
---@param doPreload boolean
function MeleeStartingUnitsUndead(whichPlayer, startLoc, doHeroes, doCamera, doPreload)
	local useRandomHero = IsMapFlagSet(MAP_RANDOM_HERO) ---@type boolean
	local unitSpacing = 64.00 ---@type real
	local nearestMine = nil ---@type unit
	local nearMineLoc = nil ---@type location
	local nearTownLoc = nil ---@type location
	local heroLoc = nil ---@type location
	local peonX = nil ---@type real
	local peonY = nil ---@type real
	local ghoulX = nil ---@type real
	local ghoulY = nil ---@type real
	
	if (doPreload) then
		Preloader( "scripts\\UndeadMelee.pld" )
	end
	
	nearestMine = MeleeFindNearestMine(startLoc, bj_MELEE_MINE_SEARCH_RADIUS)
	if (nearestMine ~= nil ) then
		-- Spawn Necropolis at the start location.
		CreateUnitAtLoc(whichPlayer, FourCC('unpl'), startLoc, bj_UNIT_FACING)
		
		-- Replace the nearest gold mine with a blighted version.
		nearestMine = BlightGoldMineForPlayerBJ(nearestMine, whichPlayer)
		
		-- Spawn Ghoul near the Necropolis.
		nearTownLoc = MeleeGetProjectedLoc(startLoc, GetUnitLoc(nearestMine), 288, 0)
		ghoulX = GetLocationX(nearTownLoc)
		ghoulY = GetLocationY(nearTownLoc)
		bj_ghoul[GetPlayerId(whichPlayer)] = CreateUnit(whichPlayer, FourCC('ugho'), ghoulX + 0.00 * unitSpacing, ghoulY + 0.00 * unitSpacing, bj_UNIT_FACING)
		
		-- Spawn Acolytes near the mine.
		nearMineLoc = MeleeGetProjectedLoc(GetUnitLoc(nearestMine), startLoc, 320, 0)
		peonX = GetLocationX(nearMineLoc)
		peonY = GetLocationY(nearMineLoc)
		CreateUnit(whichPlayer, FourCC('uaco'), peonX + 0.00 * unitSpacing, peonY + 0.50 * unitSpacing, bj_UNIT_FACING)
		CreateUnit(whichPlayer, FourCC('uaco'), peonX + 0.65 * unitSpacing, peonY - 0.50 * unitSpacing, bj_UNIT_FACING)
		CreateUnit(whichPlayer, FourCC('uaco'), peonX - 0.65 * unitSpacing, peonY - 0.50 * unitSpacing, bj_UNIT_FACING)
		
		-- Create a patch of blight around the gold mine.
		SetBlightLoc(whichPlayer,nearMineLoc, 768, true)
		
		-- Set random hero spawn point to be off to the side of the start location.
		heroLoc = MeleeGetProjectedLoc(GetUnitLoc(nearestMine), startLoc, 384, 45)
	else
		-- Spawn Necropolis at the start location.
		CreateUnitAtLoc(whichPlayer, FourCC('unpl'), startLoc, bj_UNIT_FACING)
		
		-- Spawn Acolytes and Ghoul directly south of the Necropolis.
		peonX = GetLocationX(startLoc)
		peonY = GetLocationY(startLoc) - 224.00
		CreateUnit(whichPlayer, FourCC('uaco'), peonX - 1.50 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
		CreateUnit(whichPlayer, FourCC('uaco'), peonX - 0.50 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
		CreateUnit(whichPlayer, FourCC('uaco'), peonX + 0.50 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
		CreateUnit(whichPlayer, FourCC('ugho'), peonX + 1.50 * unitSpacing, peonY + 0.00 * unitSpacing, bj_UNIT_FACING)
		
		-- Create a patch of blight around the start location.
		SetBlightLoc(whichPlayer,startLoc, 768, true)
		
		-- Set random hero spawn point to be just south of the start location.
		heroLoc = Location(peonX, peonY - 2.00 * unitSpacing)
	end
	
	if (doHeroes) then
		-- If the "Random Hero" option is set, start the player with a random hero.
		-- Otherwise, give them a "free hero" token.
		if useRandomHero then
			MeleeRandomHeroLoc(whichPlayer, FourCC('Udea'), FourCC('Udre'), FourCC('Ulic'), FourCC('Ucrl'), heroLoc)
		else
			SetPlayerState(whichPlayer, PLAYER_STATE_RESOURCE_HERO_TOKENS, bj_MELEE_STARTING_HERO_TOKENS)
		end
	end
	
	if (doCamera) then
		-- Center the camera on the initial Acolytes.
		SetCameraPositionForPlayer(whichPlayer, peonX, peonY)
		SetCameraQuickPositionForPlayer(whichPlayer, peonX, peonY)
	end
end
Вот этой функцией
--===========================================================================
-- Replaces a gold mine with a blighted gold mine for the given player.
--
---@param goldMine unit
---@param whichPlayer player
---@return unit
function BlightGoldMineForPlayerBJ(goldMine, whichPlayer)
	local mineX = nil ---@type real
	local mineY = nil ---@type real
	local mineGold = nil ---@type integer
	local newMine = nil ---@type unit
	
	-- Make sure we're replacing a Gold Mine and not some other type of unit.
	if GetUnitTypeId(goldMine) ~= FourCC('ngol') then
		return nil
	end
	
	-- Save the Gold Mine's properties and remove it.
	mineX = GetUnitX(goldMine)
	mineY = GetUnitY(goldMine)
	mineGold = GetResourceAmount(goldMine)
	RemoveUnit(goldMine)
	
	-- Create a Haunted Gold Mine to replace the Gold Mine.
	newMine = CreateBlightedGoldmine(whichPlayer, mineX, mineY, bj_UNIT_FACING)
	SetResourceAmount(newMine, mineGold)
	return newMine
end
30

» WarCraft 3 / AdicHelper?

ты всегда пытаешься использовать переменную без значения. Это ошибка.
А в чём проблема переменной без значения?

zinc например позволял их объявлять.
local real x, y = 0.5, z
30

» WarCraft 3 / Как сделать для каждого игрока отдельный MultiBoard?

Где? Почему у меня не десинкают?
В комментраиях же. Сам ещё не работал с мультибордами, поэтому ничего сказать не могу.
30

» WarCraft 3 / Как сделать для каждого игрока отдельный MultiBoard?

Через локал плеера можно и в одном МБорде всё всем показывать.
Много раз слышал, что мультиборды десинкают и поэтому для каждого игрока свой создают.
30

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

Может в переменные заносить тип юнита и номер его владельца.
Так хэндл юнита и так хранит эту информацию.
30

» WarCraft 3 / Джас код на удаление точек

и усидеть на двух стульях (GUI/Jass) будет становиться все сложнее
Особенно, когда все перейдут на lua)
30

» Наследие Альянса / Релиз кампании "Последний Страж Лордерона"

а что плохого в невидимых стенах?
Во второй миссии главный герой упирается в невидимую стену и пока не убьёт гулей, пройти не может. Удобно)
30

» Наследие Альянса / Релиз кампании "Последний Страж Лордерона"

Озвучка понравилась, прям как на пиратских дисках.
Но вот клише с неуязвимыми неписями и невидимыми стенами, серьёзно?
30

» WarCraft 3 / Как сделать надпись "загрузка..." другого цвета?

как сменить фон надписи "идёт загрузка" с синего цвета на другой
Вот этот?
Загруженные файлы
30

» WarCraft 3 / Нужно ли собирать триггеры с одинаковым условием в один

При этом, если сделать для двух диалогов переменные Skip1 и Skip2, то всё исправно работает.
После завершения первого диалога Skip возвращается в false?
30

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

Я пока вижу только проблему, когда в одну цель несколько похищений.
И ещё одна проблема, если делать лимит целей: нужно обрывать drain, которому меньше всего жить осталось.
30

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

Это можно сделать через сохранение групп в хеш-таблицу.
К сожалению молнии нельзя сохранять в группы.
В смысле, равномерно? А изначально там неравномерное распределение?
Если одну цель сосут два кастера, то урон/хп происходят только от самой сильной абилки и хп распределяется между кастерами.
Можно записывать кастера в хеш-таблицу с хэндлом цели.
Представьте пять кастеров, каждый из которых применил заклинание один на другого. Притом между двумя кастерами не должно отрисовываться двух молний.
хватит всем сувать Lua, проще всего GUI
Хватит всем набирать код руками, ноги выбор мастеров.