Различные функции могут быть использованы неправильно. Когда это происходит, вы можете добавить вывод сообщений об ошибке в функцию. Но будет ли записано это сообщение в журнал (историю команд) сервера в многопользовательской игре? Не забудете ли вы использовать PrintBold вместо Print, если ошибку вызовет не игрок? Что если вы захотите возможность отключения оповещений об ошибках? И вообще, как библиотека должна уведомлять вас об ошибках?
Для решения всех этих проблем ACSUtils предоставляет стандартизированный обработчик ошибок. Сообщения об ошибках вызываются с помощью набора функций, которые передают их в пользовательский обработчик ошибок вашего проекта (смотрите статью Именованные скрипты).
#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()
вызовет эту ошибку, если вы попытаетесь сохранить слишком много состояний рендерера.Чтобы сообщить об ошибке, используйте одну из функций ниж, соответствующих вышеописанным типам ошибок:
void ProgramError(str message)
Вызывает ACSERROR_PROGRAM
с указанным сообщением.
void MappingError(str message)
Вызывает ACSERROR_MAPPING
с указанным сообщением.
void LimitError(str message)
Вызывает an ACSERROR_LIMIT
с указанным сообщением.