Я не понимаю, почему абилка не скрывается? У меня способность скрывает себя, оставляя другую на своем месте.
Каст без цели, на базе канала.
Вот такое начало способности:
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 хуже женской логики.
Главный критерий: Отключение обрабатываемой способности ДО выдачи дамми итема не будет работать.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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 не срабатывает).
15
...
Мне удалось решить проблему, но я не понимаю почему оно так работает.
Когда игроку дается дамми итем, не важно включена ли обработка призыва иллюзий или нет, просто когда он дается - не срабатывает отключение способности которая была закастована только что. Другие - можно отключить, эту - нет.
Но только если она отключалась до выдачи дамми-итема. Если всучить дамми-итем, а потом уже отключить абилку - она отключается. Логика JASS хуже женской логики.
Главный критерий: Отключение обрабатываемой способности ДО выдачи дамми итема не будет работать.
Принятый ответ
28
Мне удалось решить проблему, но я не понимаю почему оно так работает.
Когда игроку дается дамми итем, не важно включена ли обработка призыва иллюзий или нет, просто когда он дается - не срабатывает отключение способности которая была закастована только что. Другие - можно отключить, эту - нет.
Но только если она отключалась до выдачи дамми-итема. Если всучить дамми-итем, а потом уже отключить абилку - она отключается. Логика JASS хуже женской логики.
Мистика какая-то, JASS работает именно так, как написано.
Настройки предмета и способности хотелось бы увидеть, а также настройки способностей, что внутри предмета.
15
Настройки предмета и способности хотелось бы увидеть, а также настройки способностей, что внутри предмета.
Держи
Загруженные файлы
28
Держи
Хорошо, а настройки проблемных способностей (что на основе канала и берсерка)?
15
PT153:
Держи
Хорошо, а настройки проблемных способностей (что на основе канала и берсерка)?
Сама абилка вот, всё что ниже - описание кд и мана (остальное по нулям), всё что выше - графика где всё тоже по нулям, кроме иконки.
Берсерк нет смысла кидать, он работает нормально, да и без него баг сам по себе остается.
Загруженные файлы
28
Мне удалось решить проблему, но я не понимаю почему оно так работает.
Когда игроку дается дамми итем, не важно включена ли обработка призыва иллюзий или нет, просто когда он дается - не срабатывает отключение способности которая была закастована только что. Другие - можно отключить, эту - нет.
Но только если она отключалась до выдачи дамми-итема. Если всучить дамми-итем, а потом уже отключить абилку - она отключается. Логика JASS хуже женской логики.
Я смоделировал такую же ситуацию в пустой карте, бага нет. Могу кинуть, если надо.
Нужно продебажить любой кусок кода, где способность разблокируется. Я использую такие функции.
function DebugMsg takes string s returns nothing
    debug call DisplayTimedTextToPlayer(LocalPlayer, 0., 0., 5., s)
endfunction

function DebugMsgIf takes boolean bool, string s returns nothing
    static if DEBUG_MODE then
        if bool then
            call DebugMsg(s)
        endif
    endif
endfunction

function DebugMsgIfElse takes boolean bool, string s1, string s2 returns nothing
    static if DEBUG_MODE then
        if bool then
            call DebugMsg(s1)
        else
            call DebugMsg(s2)
        endif
    endif
endfunction
Выводим сообщения кому и что разблокируется. Вероятнее всего что-то ломается, и сразу после блокировки она снимается.
30
По вашему коду ровным счётом ничерта не понятно.
  • Вынесите его в отдельную карту
  • Точно опишите ожидаемый результат
  • Опишите вашу проблему
Иначе я с полной уверенностью могу заявить, что рабтоспособности вашего кода мешает моя левая пятка и с большой долейуверенности буду прав(
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.