FAQ: частые ошибки при создании плагинов CS 1.6
FAQ: частые ошибки при создании плагинов CS 1.6
Собрали типичные проблемы, с которыми сталкиваются новички при разработке плагинов AMX Mod X и Metamod для Counter-Strike 1.6. Если ваша ошибка не здесь — создайте тему на нашем форуме.
1. Плагин не появляется в amxx plugins
Причина: не добавили строку в plugins.ini ИЛИ скомпилировали с неправильной версией AMXX (новая на старом сервере).
Решение:
- Проверьте, что
plugin_hello.amxxлежит вcstrike/addons/amxmodx/plugins/ - Откройте
cstrike/addons/amxmodx/configs/plugins.iniи добавьтеplugin_hello.amxx - Выполните
amxx reloadили перезапустите сервер - Введите
amxx plugins— статус должен бытьrunning
2. plugin_init не вызывается
Причина: забыли public перед plugin_init, или функция названа с опечаткой.
Решение: должно быть ровно public plugin_init(). AMXX ищет функцию по этому имени.
3. Команда say не перехватывается
Причина: забыли return PLUGIN_HANDLED в обработчике. Без этого движок продолжает обрабатывать команду как обычный чат.
public cmd_hello(id)
{
client_print(id, print_chat, "Hello!");
return PLUGIN_HANDLED; // <- обязательно!
}
4. "index out of bounds" в логах
Причина: обращаетесь к массиву за пределами. Например: name[40] при размере 32. Или индекс игрока > 32.
Решение: проверьте размеры массивов и используйте clamp(value, min, max).
5. "Native is not loaded" — функция не найдена
Причина: вызывается функция из модуля, который не загружен (например, cs_set_user_money из cstrike, а модуль cstrike_amxx отключён).
Решение: проверьте cstrike/addons/amxmodx/configs/modules.ini — раскомментируйте нужный модуль, выполните amxx modules для проверки.
6. Metamod-плагин не загружается (meta list пусто)
Причины:
- Не та разрядность: сервер 32-бит, а плагин 64-бит. Собирайте через
gcc -m32. - Не найдены зависимости: проверьте
ldd myplugin_mm_i386.so— все ли библиотеки разрешены. - Символы не экспортированы: проверьте
nm -D plugin.so | grep Meta_Attach. Должны видетьMeta_Attach(или с ABI-тегом). - Путь в
plugins.iniуказан относительноcstrike/, не от корня сервера. Например:linux addons/myplugin/myplugin.so - На rehlds-сборках Metamod-r читает
cstrike/plugins.iniна верхнем уровне (а неcstrike/addons/metamod/plugins.ini) — это особенность liblist.gam.
7. Плагин крашит сервер
Решение: включите amxx_debug 1 и смотрите addons/amxmodx/logs/error_*.log. Для Metamod — meta_debug 3 в консоли. Краши часто связаны с неверным индексом игрока (0 вместо 1..32) или доступом к несуществующему entity.
8. Плагин виден, но не реагирует на say
Решение: возможно, у вас включён amx_mapfrost или другой плагин перехватывает чат раньше. Проверьте порядок плагинов в plugins.ini — кто выше, тот и обрабатывает первым.
9. Не работает форматирование client_print
Решение: форматы: %s — строка, %d или %i — целое, %f — float, %.2f — float с 2 знаками. Все аргументы должны идти после строки в том же порядке.
10. Как добавить HUD-сообщение?
set_hudmessage(255, 0, 0, -1.0, 0.30, 0, 6.0, 12.0, 0.1, 0.2, -1);
show_hudmessage(id, "Привет, %s!", name);
Где: 255,0,0 — RGB красный; -1.0 — центр по X; 0.30 — позиция по Y; 6.0/12.0 — hold time; -1 — channel (auto).