30

» WarCraft 3 / [lua] Pathable

ура, хоть где-то я могу нормально тестить производительность.
Мелкие тесты я запускаю здесь.
local loop, xa, ya, xb, yb = 10000000, 1.3, 2.3, 3.3, 4.3

local sum, start           = 0, os.clock()
for i = 0, loop do
	local dx = xb - xa
	local dy = yb - ya
	sum      = sum + dx * dx + dy * dy
end
print(os.clock() - start, sum) --> ~0.22

sum, start = 0, os.clock()
for i = 0, loop do
	sum = sum + (xb - xa) ^ 2 + (yb - ya) ^ 2
end
print(os.clock() - start, sum) --> ~0.56
Правда в игре немного другие значения
Загруженные файлы
30

» WarCraft 3 / [lua] Pathable

примерно равны, слева два поиска переменных и операнд, справа одна переменная, константа и использование функции Pow
Написал маленький тест, оказалось степень тяжёлая.
loop = 10000000
xa = 1.3
ya = 2.3
xb = 3.3
yb = 4.3

s = 0
start = os.clock()
for i=0, loop do
	local dx = xb-xa
	local dy = yb-ya
	s = s + dx * dx + dy * dy
end
print(os.clock()-start, s) --> 0.55 - 0.59

s = 0
start = os.clock()
for i=0, loop do
	s = s + (xb-xa)^2 + (yb-ya)^2
end
print(os.clock()-start, s) --> 0.9 - 0.95
30

» WarCraft 3 / Заклинание: Случайная Молния

Capitan Alex:
Объясните для чайников, что значит "Создать локальный аналог переменной"
Это заклинание писалось как только lua появился на PTR и функции, которая превращает равкод в число близы не завезли. Поэтому в локальной области видимости была создана функция AbilityId. На момент последнего патча уже завезли функцию FourCC.
Обновлённый код заклинания
---@author https://xgm.guru/p/wc3/random-lightning
do
	local InitGlobalOrigin = InitGlobals
	function InitGlobals()
		InitGlobalOrigin()
		
		-- Настройки
		local ABILITY_ID      = FourCC('SRaL')
		local RANGE           = 200
		local DELAY           = 1
		local COLOR           = { 'Blue', 'Nature', 'Orange', 'Red', 'Void' }
		local ICON_PATH       = 'ReplaceableTextures/CommandButtons/BTNSpellRandomLightning'
		
		-- Заклинание
		local GROUP_ENUM_ONCE = CreateGroup()
		local COLOR_CURRENT   = COLOR[math.random(1, #COLOR)]
		BlzSetAbilityIcon(ABILITY_ID, ICON_PATH .. COLOR_CURRENT .. '.blp')
		
		local trigger = CreateTrigger()
		for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
			TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
		end
		TriggerAddAction(trigger, function()
			if GetSpellAbilityId() ~= ABILITY_ID then return end
			
			local caster = GetTriggerUnit()
			local damage = BlzGetUnitBaseDamage(caster, 1) * GetUnitAbilityLevel(caster, ABILITY_ID)
			local x, y   = GetSpellTargetX(), GetSpellTargetY()
			local effect = AddSpecialEffect('Abilities/Spells/Human/MassTeleport/MassTeleportCaster.mdl', x, y)
			
			TimerStart(CreateTimer(), DELAY, false, function()
				DestroyEffect(effect)
				DestroyEffect(AddSpecialEffect('Effect/Spell/RandomLightning' .. COLOR_CURRENT .. '.mdx', x, y))
				
				GroupEnumUnitsInRange(GROUP_ENUM_ONCE, x, y, RANGE)
				while true do
					local target = FirstOfGroup(GROUP_ENUM_ONCE)
					if target == nil then break end
					
					if UnitAlive(target) and
							IsPlayerEnemy(GetOwningPlayer(caster), GetOwningPlayer(target)) and
							not IsUnitType(target, UNIT_TYPE_MAGIC_IMMUNE) and
							not IsUnitType(target, UNIT_TYPE_FLYING)
					then
						UnitDamageTarget(caster, target, damage, false, true, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
					end
					
					GroupRemoveUnit(GROUP_ENUM_ONCE, target)
				end
				
				COLOR_CURRENT = COLOR[math.random(1, #COLOR)]
				BlzSetAbilityIcon(ABILITY_ID, ICON_PATH .. COLOR_CURRENT .. '.blp')
				DestroyTimer(GetExpiredTimer())
			end)
		end)
	end
end
30

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

Ты говоришь, что с нижнего клиффа на верхний поле не идёт.
Имеется ввиду такая вот разница:
Загруженные файлы
30

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

PT153, не забывайте, что когда строишь здание, должна подсвечиваться карта путей.
И поле пилона не распространяется на здания, которые находятся на клифе выше пилона.
30

» WarCraft 3 / Как начать писать код на Lua в WC3 1.31.1 PT

Принятый ответ
! beginusercode LUA-code ! endusercode
Это пережитки PTR, в последнем патче beginusercode не нужны.
И карту нужно переключить в lua режим.
Загруженные файлы
30

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

Для других игроков имеешь ввиду?
Для других игроков, ну и два пилона рядом же можно поставить. Главное здание также не нуждаетя в пилоне и генерирует поле.
30

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

8gabriel8, пилоно в отличии от порчи/слизи не мешает строить здания вокруг себ. Поэтому выключать строительство возле него не подойдёт.
30

» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.

Без кучи костылей такое сделать не получится.
То есть как у Нежити с порчей?
Почти, только тэррэйн не изменяется.
Загруженные файлы
30

» WarCraft 3 / native и constant native

constant в варкрафте ничего вообще не делает
А как же ошибка при попытке переназначить?)
30

» WarCraft 3 / Крепление юнита к эффекту

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

» WarCraft 3 / Крепление юнита к эффекту

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

» WarCraft 3 / Крепление юнита к эффекту

или вообще по другому сделать, что бы данный эффект работал
Напишите заклинание на jass/lua и будет вам счастье.
так же нужно и маштабирование, которое кроме создание базы с номерами айди и их маштабированием
А так же ещё все аттачи...
30

» WarCraft 3 / Крепление юнита к эффекту

Эти заклинания не крепят юнита к эффекту а тупо поднимают его и снизу подсовывают эффект.
Сам юнит невидимый на месте стоит
Кто вам такое наврал? Юнит же выделяемый.
30

» WarCraft 3 / Получить физ. размер.

Только им, в 1.31 нет поля для этого.
BlzGetUnitCollisionSize() случайно не оно?
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

Прохождение 1.2

Жаль, что не заглянул в Бездонную Яму.
В этот раз заглянул)
30

» WarCraft 3 / Knights & Rogues COMPLETE EDITION

друг Ксардаса, это карта, а не кампания, посмотрите на разрешение .w3x. Да и версия последнего патча:
Загруженные файлы
30

» WarCraft 3 / Оптимальная способность с самонаводящимся снарядом

Оптимально писать самому снаряд ибо эти все способности можно отловить только по бафу в EVENT_PLAYER_UNIT_DAMAGED.
30

» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua

Т.е. это еще и парсер нужен который будет парсить wct и wtg на предмет изменений...
Код передаётся через гитхаб и посему парсить ничего не нужно. Но над картой ещё работают люди, которым код какраз не нужен, а нужно чтоб просто карта работала.
30

» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua

привязка к обязательному нормальному сохранению карты из редактора это автоматическая потеря всех плюшек, которые дает возможность обрабатывать карту внешним сборщиком и компилятором
Если нужно открытие карты редактором из-за совместной работы, а плюшки не нужны, то привязка будет в самый раз.
Это адов ад, тогда либо придется эти списки компиляции вручную писать постоянно либо после каждого добавления файла кода лезть в редактор, двигать его там, сохранять карту, парсить wct и wtg и формировать новый список сборки. Очень "удобное" решение.
А шаблоны зачем? Нужно пихать всё подряд, указываешь **/*.lua и не мучаешься, если нужен особый порядок, то это так же можно указать. wct и wtg не нужно парсить, их нужно генерировать в IDE, формировать war3map.lua и засовывать в карту. Чтоб в последстивии карту можно было открыть и изменить поля в РО.
30

» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua

зачем тебе тогда wct и wtg руками трогать?
Чтоб в редакторе нормально открывалось и сохранялось.
в IDE строго алфавитный порядок, а в варе их можно свободно менять местами
Если использовать например gulpfile.js, то можно и вручную указывать порядок сборки кода.
Загруженные файлы