30

» WarCraft 3 / Ограничение для предметов

да
И зачем вам тогда массив, если в ItemLimit вы уже получаете максимально допустимое количество предметов или 0 если лимит не установлен?
30

» WarCraft 3 / Ограничение для предметов

а если использовать ItemLimit указав в массиве порядковый номер?
Вы вообще понимаете, что в моём триггере происходит?
30

» WarCraft 3 / Ограничение для предметов

Держите. Надеюсь не нужно объяснять, что нормальные люди так не делают))
Загруженные файлы
30

» WarCraft 3 / Ограничение для предметов

мне сложно представить как система будет работать в Хэш Таблице
Статьи для кого пишут?
Лучше так не делать, но вам можно
Заводите два массива
  • ItemId Тип предмета
  • ItemCount Целлочисленная
Настраиваете
ItemId[1] = Маска Смерти
ItemCount[1] = 1
ItemId[2] = Маска Соби
ItemCount[2] = 3
...
При получении предмета пробегаете по массиву и сравниваете тип предмета. Если найдёте, то получаете количество из
ItemId[ForLoopA] и дальше как у вас в триггере.
А потом скрипт падает по оплимиту)
30

» WarCraft 3 / Ограничение для предметов

Cамый простой вариант:
  • выделяете для лимитных предметов категорию, например "Артефакты"
  • уровень предмета = максимальное количество
  • при получении предмета проверяете, если он в нужной категории, по уровню получаете максимальное количество
  • ...
  • Профит))
Плюсы такого подхода, что все настройки в РО находятся, правда и минусы есть.

Немного посложнее:
Заводите хэштаблицу, и по ID предмета устанавливаете лимит, при получении также смотрите в таблицу.
30

» WarCraft 3 / Ограничение для предметов

для КАЖДОГО ПРЕДМЕТА
Для каждого предмета или для каждого типа предмета?
30

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

Странно, что волна не дамажит повторно, а пролетает сквозь юнитов вхолостую.
Волна летит медленно, так что нужно или часто наносить маленький урон или вешать бафф. А переусложнять не хотелось.

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

» WarCraft 3 / Самый производительный Bullet Hell

Без счётчика непонятно количество эффектов. Каждого блэйда по разу прожал.
Я тоже упростил по максимуму))
Загруженные файлы
30

» WarCraft 3 / Самый производительный Bullet Hell

Ошибки в коде шикарные эффекты делают))
https://xgm.guru/files/100/227796/comments/422494/BulletHell.w3x
Загруженные файлы
30

» WarCraft 3 / Самый производительный Bullet Hell

Должно работать)
кстати я не хочу наносить урон через фильтр, как мне наносить урон через
Так же, как я раньше на zinc делал
local e
while true do
	e = FirstOfGroup(perebor)
	if e == nil then breal end
	--наносим урон
	GroupRemoveUnit(perebor,e)
end
Загруженные файлы
30

» WarCraft 3 / Самый производительный Bullet Hell

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

» WarCraft 3 / Самый производительный Bullet Hell

не может ли сборщик мусора косячить и сгребать таймер на помойку?
Скорее всего, глобальный таймер нагребает на себя кучу накладных расходов и прибивается по оплимиту. Посему лучше наплодить таймеров и пусть сами умирают.
30

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

in это непонятная зверушка. Где вы такой for увидели?
Используйте лучше стандартный
for init,max/min value, increment
do
	statement(s)
end

function varName( ) return 0 end
varName = function( ) return 0 end
Это обычный сахар и таки да, вы переобъявили функцию.
Все функции в Lua - переменные?
В lua всё является объектами.
30

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

Также еще заметил, что глобальные переменные можно создавать внутри функции
Глобальные переменные можно создавать откуда угодно. Но лучше так не делать
если переменная может использоваться в замыкающей функции, то она не будет очищена сборщиком мусора
Сборщик мусора очищает всё неиспользуемое. Если не уверены насчёт очистки, всегда есть nil.
Переменная var будет создана 11 раз или 1 раз, а дальше перезаписываться?
Блок do ... end создаёт область видимости и переменная будет создана один раз, потом будет перезаписываться и успешно умрёт вместе с циклом.
30

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

может заменить на девятый вал?
Девятый вал расширяется и выглядит некрасиво, а искать на хайве было лень. Я его вообще для этого вопроса делал)
30

» WarCraft 3 / Самый производительный Bullet Hell

перенести на отдельный таймер по снаряду
Я тоже так думаю.
Bergi_Bear:
какой лимит операций на потоке
Если мне не изменяет память то:
  • 1.26: ~4000
  • 1.30: ~32000
30

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

Если говорить упрощённо, то передавая безымянную функции в TriggerAddAction вы также передаёте копии объектов, из её области видимости, где какраз и находится str.
local str = "one"
function InitDebugTriggers( )
	local trig = CreateTrigger( )
	BlzTriggerRegisterPlayerKeyEvent( trig, Player( 0 ), OSKEY_ESCAPE, 0, true )

	TriggerAddAction( trig, function( )
		print(str) --> two
	end)
end
str = "two"
30

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

локальные переменные в Lua обнулять не нужно?
Нужно уничтожать объекты. Локальные переменные живут внутри своей области видимости и уничтожаются сборщиком мусора. Если хотите побыстрее отправить переменную в мусор, присвойте ей nil.
Переменная str живёт в замыкании от функции InitDebugTriggers( ).
30

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

Каким образом она летит?
По прямой, пока не столкнётся с рельефом.

тогда нужно описание
Описания не моя сильная сторона((