====== Оповещение об ошибках ====== Различные функции могут быть использованы неправильно. Когда это происходит, вы можете добавить вывод сообщений об ошибке в функцию. Но будет ли записано это сообщение в журнал (историю команд) сервера в многопользовательской игре? Не забудете ли вы использовать PrintBold вместо Print, если ошибку вызовет не игрок? Что если вы захотите возможность отключения оповещений об ошибках? И вообще, как библиотека должна уведомлять вас об ошибках? Для решения всех этих проблем ACSUtils предоставляет стандартизированный обработчик ошибок. Сообщения об ошибках вызываются с помощью набора функций, которые передают их в пользовательский обработчик ошибок вашего проекта (смотрите статью [[..namedscripts|Именованные скрипты]]). #define ACSUTILS_ERROR_HANDLER myproject_errorhandler #include "acsutils.acs" script myproject_errorhandler (int type, int message) { Log(s:"error: ", s:message); // Запись в историю команд сервера printbold(s:"error: ", s:message); // Вывод ошибки всем игрокам } Обработчик ошибок может делать что угодно с его оповещениями: показывать их только администратору, может скрывать сообщения, если установлен соответствующий CVar или показывать их вообще всем. Обработчик ошибок также принимает тип ошибки. Существуют следующие типы ошибок: * ''ACSERROR_PROGRAM'' -- программная ошибка в скриптах, оно должно быть вызвано, когда функция использована некорректно. * ''ACSERROR_MAPPING'' -- ошибка маппинга, должно быть вызвано, когда, например, нужный актор не присутствует на карте. * ''ACSERROR_LIMIT'' -- лимит был достигнут и должен быть увеличен. Например, ''HudPushState()'' вызовет эту ошибку, если вы попытаетесь сохранить слишком много состояний рендерера. ===== Функции сообщения об ошибках ===== Чтобы сообщить об ошибке, используйте одну из функций ниж, соответствующих вышеописанным типам ошибок: ==== ProgramError (Программная ошибка) ==== ''void ProgramError(str message)'' Вызывает ''ACSERROR_PROGRAM'' с указанным сообщением. ==== MappingError (Ошибка маппинга) ==== ''void MappingError(str message)'' Вызывает ''ACSERROR_MAPPING'' с указанным сообщением. ==== LimitError (Превышение лимитов) ==== ''void LimitError(str message)'' Вызывает an ''ACSERROR_LIMIT'' с указанным сообщением.