30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

Кстати, держи, сгенерил тебе картинку для превью и основу для иконки.
Загруженные файлы
30

» WarCraft 3 / [JASS] - Буран

этот момент пока что отпустим так сказать.
А зачем его опускать? Так же будет намного круче. Эволюция так сказать. В этом спеле ты дал новичкам базу, а в спеле с отдельными плямбами уже немного математики за пятый класс.
30

» WarCraft 3 / [JASS] - Буран

то полетит не 1 выстрел, а чуть больше половины от всего спелла.
Читай комментарий выше. Если сделать с плямбами, то у тебя будет индекс последней плямбы и флаг о том, что плямбы больше плодить не нужно. Когда ты ловишь отмену приказа, то просто ставишь флаг горшочек не вари и ждёшь когда текущий тик станет больше последнего.
30

» WarCraft 3 / [JASS] - Буран

не дружу с математикой на самом деле.
Ну смотри, значения в виде равкодов 'cstr' и прочих очень большие. Значит у тебя свободно начало индексов. Тебе нужно хранить массив точек, куда ты направляешь плямбы. Вот например есть у тебя индексы:
[0,1,2,3,4,5,6,7,8,9]
Но у точки же две координаты - [x,y]
[[0,1],[2,3],[4,5],[6,7],[8,9]]
Ну и изи ищем индексы иксов:
x0 = 0*2 = 0
x1 = 1*2 = 2
x2 = 2*2 = 4
x3 = 3*2= 6
x4 = 4*2 = 8
Ну а игрик будет тупо идти следующим.
Ну а дальше всё вообще просто. В таблицу целых чисел, которая не пересекается с реальными, в ячейку номера тика ложишь индекс плямбы.
Например, на 24 тике должна бахнуть плямба номер 1. Вот и сохраянешь по ключу 24 значение 1. А потом просто проверяешь каждый тик, есть ли плямба.
30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

это всё конечно хорошо, но вот это...
Что именно? Каст после отмены или спавн в одну точку?
30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

код норм ?
Вполне. Для новичка вообще идеальный. Отдельный лайк за то, что догадался считать тики таймера и работать с целыми числами.
call SaveInteger( HT, TimerId, 'time', LoadInteger( HT, TimerId, 'time' ) + 1 )
30

» WarCraft 3 / [JASS] - Буран

ну тут у тебя в спелле моментальный эффект удара
А маркировки точки удара тоже моментальная?
30

» WarCraft 3 / [JASS] - Буран

OVOgenez, ну я хз. Тригорные спелы конечно весело, но они сферические в вакууме. А хочется больше синергии и разных клёвых механик. А это в рамках одного спела не реализуешь,
30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

в целом лучше просто фор груп прям в конец переместить. Мб так лучше будет
Ты забыл что ForGroup наносит поочерёдно урон? На втором юните всё сломается. А вот урон с задержкой решит проблему в корне. И можно будет перемещать как угодно. Тригер уже отработает и на переменные будет глубоко.
30

» WarCraft 3 / [JASS] - Буран

LastUchiha, не, ну красота же. Можно публиковать следующую версию. Ну и в этом и следующем ресурсе лучше видео вместо скриншота делать.
30

» WarCraft 3 / [JASS] - Буран

KaneThaumaturge, можно вообще решить этот вопрос эллегантно - создать DamageDeal систему с 0.1 таймером. Которая будет отложенно наносить урон.
Но здесь уже мы ступаем в область архитектуры.
30

» WarCraft 3 / [JASS] - Буран

не я про то, что в этом коде коллизия может быть с глобалками потому что он исполняется после нанесения урона
Именно в этом не может. Потому что после урона нет работы с глобалками и тик таймера завершается. А следующий тик таймера перепишет глобалки заново.
Стопе, забыл. Чтоб точно не было коллизий нужно урон в самый низ отправить:
function SpellBlizzardCallback takes nothing returns nothing
	set Timer = GetExpiredTimer()
	set TimerId = GetHandleId(Timer)
    
	set Caster = LoadUnitHandle(HT, TimerId, 'cstr')

	if GetUnitCurrentOrder(Caster) != 0xd0079 then // blizzard
		call PauseTimer(Timer)
		call DestroyTimer(Timer)
		call FlushChildHashtable(HT, TimerId)
       return
	endif 

	set CasterX = LoadReal(HT, TimerId, 'cstX')
	set CasterY = LoadReal(HT, TimerId, 'cstY')

	call GroupEnumUnitsInRange(Group, CasterX, CasterY, SpellBlizzardRange, null)
	call ForGroup(Group, function SpellBlizzardEnum) 
	call GroupClear(Group)    
endfunction 
30

» WarCraft 3 / [JASS] - Буран

ну дак как сделать это нормально ?
Запускаешь таймер с минимальным периодом, например 0.1 и спавнишь чё надо. Заодно приказ проверяешь. Гемороя не сильно больше чем сейчас, но правда требует аккуратности.
30

» WarCraft 3 / [JASS] - Буран

не понял сарказм, а этот код шутка?
Это простая и эллегантная проверка на какст channel. Что не так то?
30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [JASS] - Буран

то можно таймер и кастера потерять после строки нанесения урона.
Посмотрел я после строки нанесения урона, как жаль, там столько использования этих переменных...
30

» WarCraft 3 / [JASS] - Буран

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

» WarCraft 3 / [WarCraft III] Jass identifier renamer

Хм, а почему просто не переименовать в редакторе?
Загруженные файлы