PerformAttack | Краш игры

  • Автор темы Автор темы Danis
  • Дата начала Дата начала
  • Официальное уведомление администрации CustomGames.RU
    В связи с масштабным техническим сбоем в инфраструктуре прежнего хостинг-провайдера (Beget), работа форума CustomGames.RU была оперативно перенесена на новую серверную площадку и развёрнута из резервной копии базы данных.

    • Безопасность данных: учётные записи и данные пользователей находятся в полной безопасности. Все пароли и защищаемые параметры хранятся исключительно в криптографически зашифрованном (хэшированном) виде — никаких критических инцидентов для аккаунтов пользователей не произошло.
    • Временные технические ограничения: на этапе синхронизации файлового хранилища часть статических материалов (пользовательские аватары и архивные вложения) временно недоступна. По мере получения доступа к файловым архивам все материалы будут восстановлены в полном объёме.

Danis

Продвинутый
12 Июн 2016
285
0
Проект
Custom Hero Arena
При использовании PerformAttack крашит игру, без ошибок в консоли, и дота вылетает оставляя за собой только окошко вылета (слева кнопка "отладка" справа закрыть программу)
Эта штука написана в полностью луа итеме.
Код:
if ability:IsCooldownReady() and caster:GetAttackCapability() == DOTA_UNIT_CAP_MELEE_ATTACK then
			caster:PerformAttack(target, true, true, true, false, false)
			target:AddNewModifier(caster,ability,"modifier_echotic_sabre_slow",{duration = ability:GetSpecialValueFor("duration")})
			ability:StartCooldown(ability:GetCooldown(ability:GetLevel()))
		end
 
Последнее редактирование модератором:
Такие вылеты бывают при рекурсивных вызовах, но ability:IsCooldownReady() не располагает к этому.
 
Принтани перед перформатаком какую нибудь белеберду. Если выводится овердофига раз то у тебя косяк с рекурсией. Иначе хрен знает.
 
Дофига раз выводит, что делать?
 
Дофига раз выводит, что делать?
После этой строки принтани кулдаун абилки и так же ability:GetCooldown(ability:GetLevel())
После этой строки:
Код:
ability:StartCooldown(ability:GetCooldown(ability:GetLevel()))
 
Последнее редактирование модератором:
CryDeS, Оно ничего не принтит, вылетает раньше чем принтит.
 
Короче
Код:
if ololo then
	if not caster.performFlag then
        caster.performFlag = true
		caster:PerformAttack
	end
	caster.performFlag = nil
end
Или просто начни кд перед PerformAttack
 
А я реализовывал подобное через модификатор атаки: когда носитель атакует, запускал скрипт, что осуществляет perfom attack, в котором снимал с кастера модификатор на время perfom attack, а затем возвращал на место :)
 
Зачем снимать модификатор когда можно одной проверкой обойтись?
 
В моем случае модификатор выступал проверкой.
 
Реклама: