//================================
// Название: UAIO (Ultimate All-In-One) Admin Menu
// Версия перевода: 1.0.0
// Автор перевода: MastaMan
// Источник: lukuanenko.blogspot.com
//================================//
//
////////////////////////////////////////////////////////////////////////////////////////////
//   uaio_admin.sma                    Версия 1.51                       Дата: Авг/01/2006
//
//   RS UAIO (Универсальная) Система Меню Администратора (Мультиязычная)
//   Файл: UAIO Admin - Програмный код
//
//   Создано:    Rob Secord, B.Sc.
//   Код: xeroblood (aka; Achilles; sufferer)
//   Эл. почта: xeroblood@msn.com
//
//   Обновлено:    Dan Weeks
//   Код: $uicid3
//   Эл. Почта: suicid3m3@gmail.com
//
//   Работает на:  AMXX 1.50, 1.55, 1.60, 1.65, 1.70, 1.75 >
//   Модули:    Fun
//                     Engine
//                     CStrike
//
//   Тестировалось:    CS 1.6 (STEAM)
//                     Linux HLDS
//                     Windows HLDS/ListenServer
//
//  На данный момент внутренних команд: 81
//
////////////////////////////////////////////////////////////////////////////////////////////
//UAIO Менеджер Администраторов: $uicid3
//     -- Отдельный плагин; uaio_manager.sma   (укомплектован с UAIO)
//
//     Хостинг:			     RAD Clan, Mad Dog (v3x), $uicid3, Abhishek,GodLike
//
//     Идея и тестирование:                     Mad Dog (v3x), $uicid3, Abhishek, GodLike,
//				WillZ, FaDe, MattCook
//
//   Баг фиксы:			jtp10181
//
//     Примеры кода от:
//       - Набор ныряльщика		AssKicR, Lazy
//       - Солнечные очки, Отрава  	AssKicR
//       - Огонь, Ракета		f117bomb
//       - Запрета покупки		AssKicR, Scarzzurs
//       - Следы игроков		Lazy
//       - Следы гранат                 	AssKicR
//       - Наркотики			Twilight Suzuka
//       - Сумасшедший прицел		Mad Dog (v3x)
//       - Наборы гранат		VEN
//
//     Перевод:
//       - Голландский:		Proach
//       - Шведский:			[ --<-@ ] Black Rose
//       - Русский:			MastaMan
//
//     Особая благодарость:
//        AMX Mod X команда разработчиков!     <-- Visit: http://www.amxmodx.org
//        Разработчики оригинального AMX Mod!    <-- Visit: http://www.amxmod.net
//
////////////////////////////////////////////////////////////////////////////////////////////
//   История плагина:
//
//     -  Дек/20/2004 -- Проэкт стартовал. Вскоре остановлен из за нехватки времени.
//     - Июнь/07/2005 -- Проэкт продолжен. Первый бета-тест в.1.0 в полном режиме на нескольких серверах.
//     - Июнь/20/2005 -- 90% Завершено. 3/4 командных типов сделаны (51 внутренних команд на данный момент).
//     - Июнь/24/2005 -- 95% Завершено. Релиз кандидат 1.  (69 внутренних команд, продлжаем работать).
//     - Июль/06/2005 -- Обновлены вып. клиентов/вып. сервера, добавлен редактор смертей
//                    -- Исправлены мелкие ошибки, как сообщалось на форуме плагина
//     - Июль/08/2005 -- Релиз кандидат 2. (уже сделано 73 внутренние команды).
//                    -- Добавлены бесконечные слеповые гранаты/дымовые гранаты (по просьбе: d3adlythegame)
//                    -- Добавлена информация новобранца MOTD (по просьбе: Axyo)
//     - Июль/15/2005 -- Первый релиз -- Все релизы кандидаты были успешны.
//                    -- Добавлена команда отравления ядом (работает как огонь).
//     - Июль/24/2005 -- Обновлено до версии 1.1
//                    -- Исправлены крупные ошибки: Команды авто-выполнения должны теперь работать безупречно!
//     - Сент/15/2005 -- Обновлено до версии 1.2
//                    -- Добавлена поддержка администраторов по IP адресам!
//                    -- Добавлена переменная: sv_uaio_show_activity (имитирует amx_show_activity)
//                    -- Добавлена возможность для автоматического вывода HUD сообщений.
//                    -- Исправлены ошибки: подключ./отключ сообщения, Режим пророка.
//                    -- Добавлено 6 новых команд:
//                          - Запрет покупок, Следы игрока, Следы гранат, Наркотики,
//                            Сумасшедший прицел, Троссирющее оружие
//     - Сент/29/2005 -- Обновлено до версии 1.3
//                    -- Исправлено несколько незначительных ошибок (Спасибо jtp10181).
//                    -- Обновлено до версии AMXX 1.60
//     -  Окт/08/2005 -- Обновлено до версии 1.4
//                    -- Добавлена поддержка мультиязычности.
//                    -- Исправлена ошибка в троссирующем оружии.
//     -  Окт/18/2005 -- Обновлено до версии 1.41
//                    -- Еще раз исправлено несколько ошибок!
//                          - Спасибо jtp10181, указывающих на них еще раз!  :D
//     -  Нояб/20/2005 -- Исправлены проблемы с мультиязычностью не работающей должным образом.
//                          - Первое обновление от $uicid3.
//     -  Дек/20/2005 -- Обновление до версии 1.50
//                    -- Исправлена ошибка с положением
//                    -- Исправлен Турбо баг
//                    -- Изменено меню бана Команда/Все
//                    -- Полностью настраиваемая арена (вплоть до гранат)
//                    -- Добавлена команда 'uaio_motd'
//                    -- Исправлены проблемы с безопасностью в uaio_manager.amxx
//                    -- Исправлено изменение модели на VIP которое не работало
//     - Авг/01/2006  -- Обновлено до версии 1.51
//                    -- Исправлена ошибка в авто объявлении
//                    -- Подстроен под AMXX 1.75
//
//   Проверить наличие новой версии тут:
//      http://forums.alliedmods.net/forumdisplay.php?f=95
//
////////////////////////////////////////////////////////////////////////////////////////////
//
//   Будущие релизы
//     - G - Кластерные гранаты                   (код: boomy)
//     - G - ESP круги                          (код: Mad Dog [v3x])
//     - M - Изменение освещения на карте
//     - M - Всять все эффекты с игрока
//     - M - Пользовательская арена                      (идея: $uicid3)
//
////////////////////////////////////////////////////////////////////////////////////////////


#include "uaio_inc/config.inc"          //Предварительное составление конфигурации
                                        // (Внесите некоторые изменения в этот файл)

#include <amxmodx>
#include <engine>
#include <cstrike>
#include <amxmisc>
#include <fun>

// UAIO Custom Includes
#include "uaio_inc/const.inc"           // Constant Defines
#include "uaio_inc/global.inc"          // Global Variables
#include "uaio_inc/stocks_common.inc"   // Common Stock Functions
#include "uaio_inc/stocks_player.inc"   // Player Stock Functions
#include "uaio_inc/stocks_exec.inc"     // Execution Stock Functions
#include "uaio_inc/files.inc"           // File Access Functions
#include "uaio_inc/commands.inc"        // Client Commands
#include "uaio_inc/actions_vote.inc"    // Vote Command Actions
#include "uaio_inc/actions_good.inc"    // Good Command Actions
#include "uaio_inc/actions_evil.inc"    // Evil Command Actions
#include "uaio_inc/actions_misc.inc"    // Misc Command Actions
#include "uaio_inc/menus.inc"           // Client Menu System
#include "uaio_inc/events.inc"          // Hooked Events
#include "uaio_inc/effects.inc"         // Command Special Effects

//    _______________
//___/ plugin_init() \______________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public plugin_init()
{
    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
    register_cvar( PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SERVER )
    register_dictionary( "uaio_admin.txt" )

    // Команды Супер-Администратора
    register_clcmd( "uaio_mode",   "ClCmd_UAIOMode",   UAIO_LVL_SUPER, "<on|off> - Toggles UAIO On/Off." )
    register_clcmd( "uaio_groups", "ClCmd_UAIOGroups", UAIO_LVL_SUPER, "- Displays All UAIO-Groups Information." )
    register_clcmd( "uaio_admins", "ClCmd_UAIOAdmins", UAIO_LVL_SUPER, "- Displays All UAIO-Admins Information." )

    // Регулярные команды администратора
    register_clcmd( "uaio_group", "ClCmd_UAIOGroup", UAIO_LVL_ADMIN, "- Displays Your Group Information." )
    register_clcmd( "uaio_order", "ClCmd_UAIOOrder", UAIO_LVL_ADMIN, "- Toggles the Display Order of UAIO Menu." )
    
    // Регулярные команды игрока
    register_clcmd( "uaio_menu",  "ClCmd_UAIOMenu",  UAIO_LVL_USER,  "- Displays UAIO-Admin Command Menu." )
    register_clcmd( "uaio_help",  "ClCmd_UAIOHelp",  UAIO_LVL_USER,  "- Displays UAIO-Admin Help Information" )

    // Say команды
    register_clcmd( "say",      "ClCmd_CheckSay" )
    register_clcmd( "say_team", "ClCmd_CheckSay" )

    // Команды запрета покупки
    register_clcmd( "buyequip", "ClCmd_NoBuy" )
    register_clcmd( "buyammo1", "ClCmd_NoBuy" )
    register_clcmd( "buyammo2", "ClCmd_NoBuy" )

    register_clcmd( "uaio_debugarena" , "DebugArena")
    
    // Зарегистрированные события
    register_event( "DeathMsg",  "Event_DeathMsg",  "a" )
    register_event( "Money",     "Event_Money",     "b" )
    register_event( "ResetHUD",  "Event_ResetHUD",  "b" )
    register_event( "Damage",    "Event_Damage",    "b",  "2!0" )
    register_event( "CurWeapon", "Event_ChgWeapon", "be", "1=1" )
    register_event( "SendAudio", "Event_NadeThrow", "bc", "2=%!MRAD_FIREINHOLE" )
    register_event( "SetFOV",    "Event_SetFOV",    "be", "1<91" )
    register_event( "TextMsg",   "Event_TextMsg",   "be", "1=4", "2=#Weapon_Cannot_Be_Dropped")
    register_logevent( "Event_RoundStart", 2, "0=World triggered", "1=Round_Start" )
    register_logevent( "Event_RoundEnd",   2, "0=World triggered", "1=Round_End" )

    // Зарегистрированные меню
    register_menucmd( register_menuid("\yPlayer Menu"),   1023, "Menu_UAIONext" )
    register_menucmd( register_menuid("\yCommand Menu"),  1023, "Menu_UAIONext" )
    register_menucmd( register_menuid("\yCommand Type"), 1023, "Menu_UAIOType" )
    register_menucmd( register_menuid("\ySettings Menu"), 1023, "Menu_UAIOAction" )

    // Меню голосований
    register_menucmd( register_menuid("\y  "), 1023, "Menu_UAIOVoting" )

    // Меню оружий арены
    register_menucmd( register_menuid("\yArena Menu"),              1023, "Menu_UAIOArenaWeapon" )
    register_menucmd( register_menuid("\yArena Pistols Menu"),      1023, "Menu_UAIOArenaReg" )
    register_menucmd( register_menuid("\yArena Shotguns Menu"),     1023, "Menu_UAIOArenaReg" )
    register_menucmd( register_menuid("\yArena SMGs Menu"),         1023, "Menu_UAIOArenaReg" )
    register_menucmd( register_menuid("\yArena Rifles Menu"),       1023, "Menu_UAIOArenaRifle" )
    register_menucmd( register_menuid("\yArena Machine Guns Menu"), 1023, "Menu_UAIOArenaReg" )
    register_menucmd( register_menuid("\yArena Equipment Menu"),    1023, "Menu_UAIOArenaReg" )
    register_menucmd( register_menuid("\yArena Sets Menu"),       1023, "Menu_UAIOArenaSets" )    

    // Меню оружия
    register_menucmd( register_menuid("\yWeapons Menu"),      1023, "Menu_UAIOWeapon" )
    register_menucmd( register_menuid("\yPistols Menu"),      1023, "Menu_UAIOReg" )
    register_menucmd( register_menuid("\yShotguns Menu"),     1023, "Menu_UAIOReg" )
    register_menucmd( register_menuid("\ySMGs Menu"),         1023, "Menu_UAIOReg" )
    register_menucmd( register_menuid("\yRifles Menu"),       1023, "Menu_UAIORifle" )
    register_menucmd( register_menuid("\yMachine Guns Menu"), 1023, "Menu_UAIOReg" )
    register_menucmd( register_menuid("\yEquipment Menu"),    1023, "Menu_UAIOReg" )
    register_menucmd( register_menuid("\yExtras Menu"),       1023, "Menu_UAIOExtra" )
    
    // Переменные плагина
    register_cvar( "sv_uaio_show_activity",  "1" )  // Показывать активность администраторов
                                                    // 0 - Отключено
                                                   // 1 - Показывать без имени администратора
                                                  // 2 - Показывать с именем администратора

    register_cvar( "sv_uaio_immunity_vote",  "0" ) 	// 1=Вкл., 0=Выкл.
    register_cvar( "sv_uaio_immunity_evil",  "0" ) 		// 1=Вкл., 0=Выкл.
    register_cvar( "sv_uaio_immunity_good",  "0" ) 	// 1=Вкл., 0=Выкл.
    register_cvar( "sv_uaio_immunity_misc",  "0" ) 	// 1=Вкл., 0=Выкл.
    register_cvar( "sv_uaio_menu_start",     "0" ) 		// 0=Командное меню, 1=Пользовательское меню
    register_cvar( "sv_uaio_hud_color",      "103 248 007" )	// Цвет HUD сообщений по умолчанию
    
    // Vote-Specific Settings
    register_cvar( "sv_uaio_vote_time",      "10.0" )  	 // Время в секундах продолжения голосования
    register_cvar( "sv_uaio_vote_delay",     "11.0" ) 	 // Время в секундах задержки перед следующим голосованием
    register_cvar( "sv_uaio_vote_ratio",     "0.40" )                 // Процент голосов для успешного голосования (1.0 = Высокий шанс для успешного голосования, 0.0 = Без шанса)
    register_cvar( "sv_uaio_vote_answers",   "1" )  	 // 1=Показывать вопросы, 0=Не показывать
    
    // Command-Specific CVARs
    register_cvar( "sv_uaio_ban_ip",         "1" )          	 // 1=Бан по IP, 0=Бан по STEAM ID
    register_cvar( "sv_uaio_bslap_dmg",      "1" )         	 // Величина ущерба в НР для каждого Супер-Пинка
    register_cvar( "sv_uaio_fire_dmg",       "5" )		 // Урон от огня / Сек
    register_cvar( "sv_uaio_poison_dmg",     "5" )            	 // Ущерб от отравы/ Сек.
    register_cvar( "sv_uaio_smoke_nades",    "1" )    	 // 1=Дать дымовые гранаты, 0=Не давать...
    register_cvar( "sv_uaio_turbo_speed",    "750" )         	 // Турбо скорость (Диапазон 400 - 900)
    register_cvar( "sv_uaio_max_icash",      "16000" )      	 // Макс. безконечная наличка (100-16000
    register_cvar( "sv_uaio_max_bcash",      "2000" )      	 // Макс. бонус ($) за убийство (50-5000)
    register_cvar( "sv_uaio_shades_alpha",   "120" )         	 // Альфа прозрачность Солнечных Очков
    register_cvar( "sv_uaio_blackout_color", "255 255 255" ) // RGB цвет для "затухания экрана"

    //    ___________________________
    //___/Команды и меню перменных \____________________________________________
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // Консольные команды и меню специфических переменных [Максимально 9 переменных]
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    new i , szUsage[STR_M]
    
    // Голосования
    for( i = 0; i < MAX_V_COMMANDS; i++ )
    {
        format(szUsage , STR_M-1 , "%L" , LANG_SERVER , g_szVCmdUsage[i])
        register_clcmd( g_szVCmdConsole[i], "ClCmd_VoteCmd", UAIO_LVL_ADMIN, szUsage )
        if( g_szVCmdCvar[i][0] != '_' )
            register_cvar( g_szVCmdCvar[i], g_szVCmdCvarFlags[i] )
    }
    // Вспомогательные команды
    for( i = 0; i < MAX_G_COMMANDS; i++ )
    {
        format(szUsage , STR_M-1 , "%L" , LANG_SERVER , g_szGCmdUsage[i])
        register_clcmd( g_szGCmdConsole[i], "ClCmd_GoodCmd", UAIO_LVL_ADMIN, szUsage )
        if( g_szGCmdCvar[i][0] != '_' )
            register_cvar( g_szGCmdCvar[i], g_szGCmdCvarFlags[i] )
    }
    // Наказательные команды
    for( i = 0; i < MAX_E_COMMANDS; i++ )
    {
        format(szUsage , STR_M-1 , "%L" , LANG_SERVER , g_szECmdUsage[i])
        register_clcmd( g_szECmdConsole[i], "ClCmd_EvilCmd", UAIO_LVL_ADMIN, szUsage )
        if( g_szECmdCvar[i][0] != '_' )
            register_cvar( g_szECmdCvar[i], g_szECmdCvarFlags[i] )
    }
    // Разные команды
    for( i = 0; i < MAX_M_COMMANDS; i++ ) // Misc Commands/Cvars
    {
        format(szUsage , STR_M-1 , "%L" , LANG_SERVER , g_szMCmdUsage[i])
        register_clcmd( g_szMCmdConsole[i], "ClCmd_MiscCmd", UAIO_LVL_ADMIN, szUsage )
        if( g_szMCmdCvar[i][0] != '_' )
            register_cvar( g_szMCmdCvar[i], g_szMCmdCvarFlags[i] )
    }
    return
}

public DebugArena( id )
{
    console_print( id , "Arena enabled : %s^n# of Weapons : %d^n^nWepon #'s" , g_bArenaEnabled ? "yes" : "no" , g_iWepCount)
    for(new i = 0 ; i < AR_MAX_GUNS ; i++ )
        console_print( id , "%d. %d" , i+1 , g_iArenaCustom[i])
    return PLUGIN_HANDLED;
}
//    ______________
//___/ plugin_cfg() \_______________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public plugin_cfg()
{
    new szLogMsg[STR_M]

    // Set Maximum Player Speed
    server_cmd( "sv_maxspeed 900" )

    // Client Message Indexes
    g_iMsgDamage = get_user_msgid( "Damage" )
    g_iMsgDeath  = get_user_msgid( "DeathMsg" )
    g_iMsgSetFOV = get_user_msgid( "SetFOV" )
    g_iMsgScreenFade = get_user_msgid( "ScreenFade" )
    g_iMsgScreenShake = get_user_msgid( "ScreenShake" )

    // Инициализация системы Администраторов
    UAIO_NullAdmins()
    UAIO_BuildFileDir()
    g_bFileError[ERROR_MAPS]   = !UAIO_ReadMaps()
    g_bFileError[ERROR_CEXEC]  = !UAIO_ReadCExec()
    g_bFileError[ERROR_SEXEC]  = !UAIO_ReadSExec()
    g_bFileError[ERROR_AEXEC]  = !UAIO_ReadAExec()
    g_bFileError[ERROR_GROUPS] = !UAIO_ReadGroups()
    g_bFileError[ERROR_ADMINS] = !UAIO_ReadAdmins()

    // Проверка на ошибку авто-выполнения
    if( g_bFileError[ERROR_AEXEC] )
    {
        format( szLogMsg, STR_M-1, "%L", LANG_SERVER, "ERR_CFG_AEXEC", PLUGIN_MOD, PLUGIN_NAME )
        UAIO_WriteLog( szLogMsg )
    }

    // Отключить плагин если группы администраторов не загружаются
    if( g_bFileError[ERROR_GROUPS] )
    {
        format( szLogMsg, STR_M-1, "%L", LANG_SERVER, "ERR_CFG_GROUPS", PLUGIN_MOD, PLUGIN_NAME, g_szFileGroups )
        UAIO_WriteLog( szLogMsg )
        UAIO_PluginEnabled( 0 )
        return
    }
    if( g_bFileError[ERROR_ADMINS] )
    {
        format( szLogMsg, STR_M-1, "%L", LANG_SERVER, "ERR_CFG_ADMINS", PLUGIN_MOD, PLUGIN_NAME, g_szFileAdmins )
        UAIO_WriteLog( szLogMsg )
        UAIO_PluginEnabled( 0 )
        return
    }
    return
}
//    ___________________
//___/ plugin_precache() \__________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public plugin_precache()
{
    g_sprBeam   = precache_model( "sprites/zbeam4.spr" )
    g_sprLaser  = precache_model( "sprites/laserbeam.spr" )
    g_sprWhite  = precache_model( "sprites/white.spr" )
    g_sprSmoke  = precache_model( "sprites/steam1.spr" )
    g_sprMFlash = precache_model( "sprites/muzzleflash.spr" )
    g_sprBFlare = precache_model( "sprites/blueflare2.spr" )
    
    precache_model( "models/scientist.mdl" )

    precache_sound( g_szSndFlames )
    precache_sound( g_szSndScream1 )
    precache_sound( g_szSndScream2 )
    precache_sound( g_szSndRocket1 )
    precache_sound( g_szSndRocket2 )
    precache_sound( g_szSndPoison )
    precache_sound( g_szSndBeep )
    precache_sound( g_szSndThunder )

    return
}
//    ______________________
//___/ client_authorized() \_______________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//public client_putinserver( id )
public client_authorized( id )
{
    if( !UAIO_PluginEnabled( UAIO_NULL ) )
        return

    // Flag User as Joining for ResetHUD
    g_bIsJoining[id-1] = true
    g_fAExecInterval[id-1] = 0.5

    // Check Groups
    if( !UAIO_AdminGroups( id ) )
    {
        new szLogMsg[STR_M], szUser[STR_T]
        get_user_name( id, szUser, STR_T-1 )
        format( szLogMsg, STR_M-1, "%L", LANG_SERVER, "ERR_NO_DEFAULT", PLUGIN_MOD, PLUGIN_NAME, szUser )
        UAIO_WriteLog( szLogMsg )
    }
    UAIO_RemoveAllFX( id )

    // Мгновенный вызов команд авто-выполнения
    UAIO_UserAExec( id, AUTOEXEC_INSTANT )

    return
}
//    _____________________
//___/ client_disconnect() \________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public client_disconnect( id )
{
    if( !UAIO_PluginEnabled( UAIO_NULL ) )
        return

    // Call Auto-Exec Leave Commands
    UAIO_UserAExec( id, AUTOEXEC_LEAVE )
    g_fAExecInterval[id-1] = 0.5

    UAIO_ClearAdmin( id )
    UAIO_RemoveAllFX( id )
    return
}
//    ______________________
//___/ client_infochanged() \_______________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public client_infochanged( id )
{
    if ( !UAIO_PluginEnabled( UAIO_NULL ) || !UAIO_HasEffect( id, CMDTYPE_EVIL, UAIO_E_NLOCK ) || !is_user_connected( id ) )
        return PLUGIN_CONTINUE

    new szNewName[STR_S]
    new szOldName[STR_S]

    get_user_info( id, "name", szNewName, STR_S-1 )
    get_user_name( id, szOldName, STR_S-1 )

    if( !equal( szNewName, szOldName ) )
        set_user_info( id, "name", szOldName )

    return PLUGIN_CONTINUE
}
//    ___________________
//___/ client_prethink() \__________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public client_PreThink( id )
{
    if( !UAIO_PluginEnabled( UAIO_NULL ) )
        return PLUGIN_CONTINUE

    // Тихая хотьба
    if( UAIO_HasEffect( id, CMDTYPE_GOOD, UAIO_G_SILENT ) )
        entity_set_int( id, EV_INT_flTimeStepSound, 999 )

    // Набор ныряльщика
    if( UAIO_HasEffect( id, CMDTYPE_GOOD, UAIO_G_DIVER ) )
        if( is_user_alive( id ) && entity_get_int( id, EV_INT_waterlevel ) == 3 )
            entity_set_float( id, EV_FL_air_finished, entity_get_float( id, EV_FL_air_finished ) + 1.0 )

    // Огонь (тухнет в воде)
    if( UAIO_HasEffect( id, CMDTYPE_EVIL, UAIO_E_FIRE ) )
    {
        if( is_user_alive( id ) && entity_get_int( id, EV_INT_waterlevel ) == 3 )
        {
            client_print( id, print_chat, "%L", LANG_PLAYER, "WATER_FLAMES", PLUGIN_MOD, PLUGIN_NAME )
            UAIO_RemoveEffect( id, CMDTYPE_EVIL, UAIO_E_FIRE )
        }
    }

    return PLUGIN_CONTINUE
}
//    __________________
//___/ client_command() \___________________________________________________________________
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public client_command( id )
{
    if( UAIO_HasEffect( id, CMDTYPE_EVIL, UAIO_E_NOBUY ) )
    {
        /* Самая длинная команда закупки имеет 11 символов, команды длиннее нас не волнуют. (AssKicR) */ 
        new szArg[13]
        if( read_argv( 0, szArg, 12 ) > 11 )
            return PLUGIN_CONTINUE 
    
        new i
        for( i = 0; i < MAX_ALIASES; i++ )
            if( equal( g_szWeaponAlias[i], szArg ) )
                return PLUGIN_HANDLED 
    }
    return PLUGIN_CONTINUE
}
