30

» WarCraft 3 / Изменение количества урона

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

» WarCraft 3 / math.ease

она ничего не объясняет.
Каюсь, описание на скорую руку слепил, на днях реализую cubic-bezier и распишу как этим пользоваться.
30

» WarCraft 3 / Заклинание: Волна Воды

Является ли безымянная функция утечкой?
Она умрёт вместе с таймером.
30

» WarCraft 3 / math.ease

дескать, "хотите - доделывайте, но мне лень"
Недоработанные наработки я как-бы не публикую и настройки всегда вынесены для удобства. За комментариями в них я слежу и исправляю ошибки, если таковые имеются. Но что-то никто не спрашивал о том, как привязать их к GUI, значит как-то сами разобрались и делать лишнюю работу мне не нужно.
Но ты ведь сделал упор на какую-то "особенную одаренность", то есть выделил отдельную категорию посетителей ресурса по какому-то признаку как недостойных твоего внимания.
Не делал я никакого упора, это вы на этой фразе внимание акцентируете.
Кто-то помоложе и поглупее, посмотрев на твою позицию и взяв с тебя пример, придумает свой повод отделиться в отдельную группу, но уже, скажем, по национальности.
Сначала ты для GUI не пишешь, а потом Родину продашь?))
Другая проблема может заключаться в том, что человек, который сможет обращаться с этой наработкой, скорее всего, напишет такую самостоятельно.
Зачем писать, если можно взять готовое? Судя по количеству наработок, брать пока нечего, но я пытаюсь это исправить. Даже github для нработок завёл))
Но судить мне сложно, так как я не понимаю Луа
А жаль, он намного удобней чем jass
30

» WarCraft 3 / math.ease

Как минимум странное отношение для ресурса, который вроде позиционирует себя как точку сбора и взаимопомощи, где технари, например, могут помочь гуманитариям.
Судя по Q\A помогают тут всем. Но мне например лень возиться с GUI ради тех, кому лень подправить под свои нужды несколько строчек в коде.
30

» WarCraft 3 / Изменение количества урона

На последнем патче вообще всё просто
do
	local DamageTrigger = CreateTrigger()
	for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
		TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- До вычета брони
		--TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- После вычета брони
	end
	TriggerAddAction(DamageTrigger, function()
		local damage = GetEventDamage() -- число урона
		if damage < 1 then return end
		local target = GetTriggerUnit() -- тот кто получил урон
		local caster = GetEventDamageSource() -- тот кто нанёс урон
		
		if GetHandleId(target) == FourCC('Глыба') then
			-- Что-то делаем
		end
	
	end)
end
30

» WarCraft 3 / math.ease

продвинутых связок GUI + скрипты
Не вижу смысла связываться с GUI из-за особой одарённости большинства гуишников.
При Lua таких проблем как с библиотеками на жасс для гуишников нету
Что-то не заметил я проблем с библиотеками на GUI.
30

» WarCraft 3 / math.ease

если хочется расширить аудиторию, придется расписать как можно проще.
Для большой аудитории нужно пилить наработки в стиле "Находим 10% от любого числа на GUI без утечек".
30

» WarCraft 3 / math.ease

а чего он с разной скоростью летит, казалось бы
Потому что в описании написано:
Надоело запускать снаряды с линейной скоростью
было бы прикольно сделать систему атаки с снарядом для ренжей, и чтобы от атаки можно было уклонятся (можно было подвинуть триггером на чуть-чуть вбок или проиграть анимацию уклонения. это уклонение не только в дальнем, но и ближнем бою) или блокировать щитами (взрыв об щит). и конусную систему снарядов по нескольким целям.
Мне такие недосистемы предлагают писать каждую неделю. Вот как оформите к такой системе полноценное ТЗ, так вот сразу напишу.
30

» WarCraft 3 / Кампания: Другая Сторона (Альянс)

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

» WarCraft 3 / Хэш на Lua ?

Матрица в которой можно даже функции хранить.
В lua нет массивов в привычном понимании, там всё реализовано на таблицах.
30

» WarCraft 3 / Хэш на Lua ?

Хэштаблицы это костыльнй пережиток jass.
На lua можно же и так
a = {
	b = {
		c = {
			d = function()
				print('work')
			end
		}
	}
}
a.b.c.d()
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 / Система с Пилонами(Генераторами) как у Протоссов.

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