Я не понимаю, почему абилка не скрывается? У меня способность скрывает себя, оставляя другую на своем месте.
Каст без цели, на базе канала.
Вот такое начало способности:
void SpecialCloneActions()
{
	unit u = GetTriggerUnit();
	player p = GetOwningPlayer(u);
	int lvl = GetUnitAbilityLevel(u, 'A0AG');
	int abId = GetSpellAbilityId();
	bool isCloneSwap = false;
	if (abId == 'A0B0')
	{
		isCloneSwap = true;
	}
	SetPlayerAbilityAvailable(p, abId, false);
	//Ну и дальше вся обработка абилки
Самое интересное, что вторая абилка на которую заменяется эта (и которая тоже обрабатывается этой функцией) скрывается и открывается нормально. Получаю SpellID - скрываю для владельца кастера эту абилку. Ну не может быть тут никакой ошибки в коде, почему она не скрывается вопреки всему?
У меня был аналогичный спелл, там всё работало, а тут не хочет.

...
Мне удалось решить проблему, но я не понимаю почему оно так работает.
Когда игроку дается дамми итем, не важно включена ли обработка призыва иллюзий или нет, просто когда он дается - не срабатывает отключение способности которая была закастована только что. Другие - можно отключить, эту - нет.
Но только если она отключалась до выдачи дамми-итема. Если всучить дамми-итем, а потом уже отключить абилку - она отключается. Логика JASS хуже женской логики.
Главный критерий: Отключение обрабатываемой способности ДО выдачи дамми итема не будет работать.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Замени GetTriggerUnit на GetSpellAbilityUnit.

Ещё есть проблема со скрытием способности, что на основе обмена ресурсов, но, как я понял, тут все способности на основе канала.

Ещё. Какое событие регистрирует каст спела? Одинаковые ли приказы у заменяемых способностей?
15
GetSpellAbilityUnit
GetSpellAbilityUnit не помогло. Приказы разные, вторая абилка вообще на базе берсерка. Она скрывается\показывается без проблем этим же триггером.
28
Поставь дебаг на отображение abId и p. Также вопрос про то, какое событие ловит каст, в силе.
15
PT153:
Поставь дебаг на отображение abId и p. Также вопрос про то, какое событие ловит каст, в силе.
EVENT_PLAYER_UNIT_SPELL_EFFECT
Я только что вручную прописал скрыть id этой абилки - не скрывается.
Хотя при выборе героя она должна быть скрытой и скрывается, странно.
Еще попробовал просто так скрыть эту абилку вообще другой абилкой - всё скрывается.
27
попробуй задержку сделать в 0.00 сек. мб не успевает сразу спрятать из-за каких то причин. даже если с другой такой же абилой все норм. мб в этот момент эффект кидают и скрытие блочится. попробуй другое событие - завершается
15
LordDracula:
а канал не паузит юнита? мб из-за этого
Ну оно вообще кастится в течение какого-то времени, всё таки эта абилка сбивает приказ. Но разве это должно влиять на это... Эта абилка же не приказ дает скрыть способность, она вообще не на юнитов, а на игрока влияет, чтобы у всех юнитов подконтрольных игроку скрылась такая-то абилка.
...
Так. Всё работает до тех пор, пока игроку не даётся дамми-итем, который собсна и призывает иллюзию. Попробую проверить дальше что там. Хотя триггер обрабатывающий призыв иллюзии вообще ничего не скрывает\показывает.
16
смени своей абилке ид и проверь еще раз, если бага на месте - проблема в коде, если исчез баг - проблема в ид была/s
не представляю, как связан предмет иллюзий с проблемой, напиши результат потом
28
Так. Всё работает до тех пор, пока игроку не даётся дамми-итем, который собсна и призывает иллюзию. Попробую проверить дальше что там. Хотя триггер обрабатывающий призыв иллюзии вообще ничего не скрывает\показывает.
Это уже что-то. Советую проверить приказы способности того итема и заменяемых способностей, а также продебажить все места где скрываются и открываются способности.
Drulia_san:
EVENT_PLAYER_UNIT_SPELL_EFFECT
Требуемые ресурсы и кд стартуют только после завершения действий в триггере с таким событием, если внутри нет пауз. Если есть, то после старта паузы.
Я ловил баг-не-баг, когда заменял одну способность с каналом на другую с этим событием, у которых одинаковые id приказа, по итогу юнит вечно проигрывал анимацию первого спела. Лови каст событием EVENT_PLAYER_UNIT_SPELL_ENDCAST, если нужно, чтобы всегда срабатывало, или EVENT_PLAYER_UNIT_SPELL_FINISH, если только при успешном применении (если каст был сбит после Cast Point, EVENT_PLAYER_UNIT_SPELL_FINISH не срабатывает).
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.