30

» WarCraft 3 / Набор предметов для проэкта "Последняя Надежда"

даммикаст при физической атаке
Нужно по возможности избегать даммикаста, да и событие при атаке довольно заезжено.
надо описание поменять
С описанием предметов/заклинаний и прочего я не особо дружу, поэтому просто буду копировать предложенное из комментариев))
Шикарно).
Как видите, код там простой и на lua намного проще делать заклинания, чем на GUI.
30

» WarCraft 3 / Триггерный спелл с действием только на определённый тип юнитов

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

» WarCraft 3 / Эволюция юнита через проверку уровня

предыдущий способ это был яркий пример овероптимизации а на событии происходящем достаточно редко
Можно и по старинке без оптимизаций))
TriggerAddAction(levelTrigger, function()
	local hero   = GetTriggerUnit()
	local heroId = GetUnitTypeId(hero)
	local level  = GetUnitLevel(hero)
	
	if heroId == FourCC('Her0') and level >= 3 then
		MorphUnitTo(hero, FourCC('Her1'))
	elseif heroId == FourCC('Her1') and level >= 5 then
		MorphUnitTo(hero, FourCC('Her2'))
	elseif heroId == FourCC('Her2') and level >= 7 then
		MorphUnitTo(hero, FourCC('Her3'))
	end
end)
я делал в качестве способностей порядок равкода
Мне тоже лень заполнять простыни баз данных и если есть возможность, то использую магию равкодов)
8gabriel8:
NazarPunk, а если temp не создавать и удалять, то морфа не будет?
Ой, дошло. Не для каждого уровня есть равкод.
Можно скомбинировать способы
MORPH                     = {}
MORPH[FourCC('Her1') + 3] = true
MORPH[FourCC('Her3') + 5] = true
MORPH[FourCC('Her7') + 7] = true

TriggerAddAction(levelTrigger, function()
	local hero    = GetTriggerUnit()
	local newHero = MORPH[GetUnitTypeId(hero) + GetUnitLevel(hero)]
	if newHero ~= nil then
		MorphUnitTo(hero, newHero)
	end
end)
А вместо true можно записать что-то полезное.
30

» WarCraft 3 / Эволюция юнита через проверку уровня

хорошее решение, но мне что-то не нравится
Тогда можно использовать магию равкодов)
TriggerAddAction(levelTrigger, function()
	local hero    = GetTriggerUnit()
	local newHero = GetUnitTypeId(hero) + GetUnitLevel(hero)
	local temp    = CreateUnit(newHero, Player(PLAYER_NEUTRAL_PASSIVE), 0, 0, 0);
	if temp ~= nil then
		RemoveUnit(temp)
		MorphUnitTo(hero, newHero)
	end
end)
30

» WarCraft 3 / Эволюция юнита через проверку уровня

то есть нужно по триггеру с уровнем для каждого типа юнитов
Можно не плодить триггеры и просто заполнить таблицу
MORPH                 = {}
MORPH[FourCC('Her0')] = { [3] = FourCC('Her1') }
MORPH[FourCC('Her1')] = { [5] = FourCC('Her2') }
MORPH[FourCC('Her3')] = { [7] = FourCC('Her4') }

TriggerAddAction(levelTrigger, function()
	local hero    = GetTriggerUnit()
	local newHero = MORPH[GetUnitTypeId(hero)][GetUnitLevel(hero)]
	if newHero ~= nil then
		MorphUnitTo(hero, newHero)
	end
end)
30

» WarCraft 3 / Размножение

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

» WarCraft 3 / Эволюция юнита через проверку уровня

Но он будет получать морф,при получении любого уровня,а мне нужно именно чтобы когда достигал определенного уровня он получал морф.
Так сложно дописать условие?
Действие:
если уровень = 3 морфим в это
если уровень = 5 морфим в то
если уровень = 7 морфим в сё
30

» WarCraft 3 / Размножение

Можно вообще не заморачиваться с бафом, а дать крестьянке способность завести ребетёнка и при касте на крестьянина таймером отсчитать кд и заспавнить ребёнка.
30

» WarCraft 3 / Можно ли уничтожить hashtable?

это лимит одновременных живых хеш таблиц или таблиц вообще включая убитые?
После InitHashtable() дороги назад нет, так что 257ой вызов просто не пройдёт.
нас просто в детстве (в 2007 или когда там хештаблицы появились) , запугали, что больше 1 нельзя и так пошло, но уже никто и не вспомнит почему
Насколько я помню из-за того что таблица тяжёлая и с её огромным диапазоном значений делать несколько просто нет смысла. Есть даже наработка которая позволяет иметь одну таблицу на все случаи жизни.
30

» WarCraft 3 / Можно ли уничтожить hashtable?

Ну если ты скажешь как перевести полторы сотни тысяч строк кода cJass на луа с сохранением комментариев, имен переменных и отступов, то буду рад перейти на луа
Достать war3map.j, сконвертировать в lua, ужаснуться кривости кода и переписать начисто.
Сколько раз мне написать что мне нужна отдельная таблица на каждый экземпляр структуры, и даже на каждый массив внутри структуры
Не забывайте о лимите в 256 таблиц на игру. А вообще такой подход очень пахнет велокостылями.
30

» WarCraft 3 / Размножение

Запускаете таймер и проверяете наличие бафа и текущую ману.
30

» WarCraft 3 / [lua] Двигаем снаряды

но лень и хочу подождать выхода ремастера
лень злая штука, а вот врятли в ремастере сильно что-то изменится.
Вообще, странно, что за 17 лет игры об этом мало информации.
Так потому-что никто статьи не пишет, последняя статья от 26.06.2017 JASS: Курс молодого бойца и новичёк при прочтении сломает себе мозг ещё в предисловии. Единственная информация о событиях была найдена здесь:
раскрыть
Unit - A unit Begins casting an ability – Это событие запускает триггер сразу же после каста спелла (Прим. перев. Мана еще не проплачена, кулдаун еще не начался). Это значит, что такое событие может и должно применяться только для запуска триггеров проверки дополнительных условий (проверка возможен ли каст в данный момент, например, расстояние между кастером и целью слишком мало и так далее). Если вы используете это событие как основное событие каста спелла, ловкие игроки получают возможность сжульничать и запустить триггер спелла, без начала кулдауна и проплаты маны.
Unit - A unit Starts the effect of an ability – Это событие запускает триггер в тот момент, когда спелл уже скастован, кулдаун уже начался и мана проплачена. Это событие идеально подходит для запуска триггера спелла.
Unit - A unit Finishes casting an ability – Это событие запускает триггер в момент, когда юнит завершил кастовать спелл. Это полезно в случаях когда, например, вам нужно удалить юнита, который скастовал определенный спелл, и вы хотите быть уверены, что эффект спелла появится. Например, вам нужно удалить юнита, кастующего спелл Heal, вы должны использовать именно это событие, иначе цель не будет вылечена.
30

» WarCraft 3 / Характеристика предмета

PT153, тоже о торнадо подумал, только там ещё нужно в разрешённых целях указать Сам воин.
Загруженные файлы
30

» Гильдия «Черамор» / Чародейка Иона

будет преодоление 4-ой стены
Иона испугается, свернёт варкарфт и начнёт играть в сапёра?))
30

» WarCraft 3 / [lua] Двигаем снаряды

PT153, поправил. Форматирование сломалось из-за невнимательности. Хук на уничтожение таймера хорошая вешь, нужно будет статью по хукам запилить и накидать туда полезных примеров. А то начнёшь писать статью, а сослаться некуда и вся полезная информация оказывается в комментариях, которые никто не читает((
30

» WarCraft 3 / Характеристика предмета

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

» WarCraft 3 / Характеристика предмета

Прошу прощения, я не знал, что это так работает.
Я так понимаю, гуглить нынче не модно((
Загруженные файлы
30

» WarCraft 3 / Характеристика предмета

Да я про это и говорил
Я случайно отправил пост без картинки, вот и пришлось ваши слова проиллюстрировать)
30

» WarCraft 3 / Характеристика предмета

Сделать способность с отрицательным показателям и дать предмету эту способность
Загруженные файлы
30

» WarCraft 3 / Сохранение Игры

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

» WarCraft 3 / [lua] Двигаем снаряды

prog, одним словом, нужно пилить статью "Все способы перебора юнитов" с тестами))
30

» WarCraft 3 / [lua] Двигаем снаряды

ты сказал что хочешь локальную переменную в цикле - я сказал как её получить.
Так я её и получил, а ты предлагаешь ещё пилить функцию, которая по твоим словам дорогое удовольствие.
А BlzGroupUnitAt потестить, конечно, тоже стоит.
Нужно все переборы потестить и repeat не забыть
repeat
	local target = FirstOfGroup(whichGroup)
	if target ~= nil then
		GroupRemoveUnit(whichGroup,target)
		-- action
	end
until target ~= nil