Изменение пути файлов Crosshair Menu v 1.2.6

HuKuTu4

Пользователь
Регистрация
25 Фев 2020
Сообщения
6
Симпатии
0
OS
Linux
Amx Mod X
AMXX 1.9.0
Билд
ReHLDS
Metamod
Metamod-r 1.3.0.138
Meta модули
Код:
[ 1] Reunion          RUN   -    reunion.so                  v0.1.92d         ini  Start Never
[ 2] VoiceTranscoder  RUN   -    vtc.so                      v2017RC5         ini   ANY
[ 3] Rechecker        RUN   -    rechecker.so                v2.7             ini   ANY
[ 4] AMX Mod X        RUN   -    amxmodx.so                  v1.9.0.5294      ini  Start ANY
[ 5] ReSemiclip       RUN   -    resemiclip.so               v2.3.9           ini   ANY
[ 6] WHBlocker        RUN   -    whblocker.so                v1.5.697         ini   ANY
[ 7] ReSRDetector     RUN   -    resrdetector.so             v0.1.0           ini   ANY
[ 8] SafeNameAndChat  RUN   -    safenameandchat.so          v1.1             ini   ANY
[ 9] HitBox Fix       RUN   -    hitbox_fix_mm_i386.so       v1.1.5           ini  Start ANY
[10] ReAPI            RUN   -    reapi_amxx_i386.so          v5.22.0.254-dev  pl4  ANY   Never
[11] SxGeo            RUN   -    sxgeo_amxx_i386.so          v2.2             pl4  ANY   Never
[12] FakeMeta         RUN   -    fakemeta_amxx_i386.so       v1.9.0.5294      pl4  ANY   ANY
[13] MySQL            RUN   -    mysql_amxx_i386.so          v1.9.0.5294      pl4  ANY   ANY
[14] CStrike          RUN   -    cstrike_amxx_i386.so        v1.9.0.5294      pl4  ANY   ANY
[15] Engine           RUN   -    engine_amxx_i386.so         v1.9.0.5294      pl4  ANY   ANY
[16] Ham Sandwich     RUN   -    hamsandwich_amxx_i386.so    v1.9.0.5294      pl4  ANY   ANY
[17] CSX              RUN   -    csx_amxx_i386.so            v1.9.0.5294      pl4  ANY   ANY
[18] Fun              RUN   -    fun_amxx_i386.so            v1.9.0.5294      pl4  ANY   ANY
[19] GeoIP            RUN   -    geoip_amxx_i386.so          v1.9.0.5294      pl4  ANY   ANY
[20] ReAimDetector    RUN   -    reaimdetector_amxx_i386.so  v0.2.2           pl4  ANY   Never
Плагины
Код:
name                    version     author            file             status
[  1] Admin Base              1.10.0.537  AMXX Dev Team     admin.amxx       running
[  2] Admin Commands          1.10.0.537  AMXX Dev Team     admincmd.amxx    running
[  3] Admin Help              1.10.0.537  AMXX Dev Team     adminhelp.amxx   running
[  4] Slots Reservation       1.10.0.537  AMXX Dev Team     adminslots.amxx  running
[  5] Multi-Lingual System    1.10.0.537  AMXX Dev Team     multilingual.am  running
[  6] Menus Front-End         1.10.0.537  AMXX Dev Team     menufront.amxx   running
[  7] Commands Menu           1.10.0.537  AMXX Dev Team     cmdmenu.amxx     running
[  8] Players Menu            1.10.0.537  AMXX Dev Team     plmenu.amxx      running
[  9] Maps Menu               1.10.0.537  AMXX Dev Team     mapsmenu.amxx    running
[ 10] Plugin Menu             1.10.0.537  AMXX Dev Team     pluginmenu.amxx  running
[ 11] Admin Chat              1.10.0.537  AMXX Dev Team     adminchat.amxx   running
[ 12] Anti Flood              1.10.0.537  AMXX Dev Team     antiflood.amxx   running
[ 13] Scrolling Message       1.10.0.537  AMXX Dev Team     scrollmsg.amxx   running
[ 14] Info. Messages          1.10.0.537  AMXX Dev Team     imessage.amxx    running
[ 15] Admin Votes             1.10.0.537  AMXX Dev Team     adminvote.amxx   running
[ 16] NextMap                 1.10.0.537  AMXX Dev Team     nextmap.amxx     running
[ 17] Nextmap Chooser         1.10.0.537  AMXX Dev Team     mapchooser.amxx  running
[ 18] TimeLeft                1.10.0.537  AMXX Dev Team     timeleft.amxx    running
[ 19] Pause Plugins           1.10.0.537  AMXX Dev Team     pausecfg.amxx    running
[ 20] Stats Configuration     1.10.0.537  AMXX Dev Team     statscfg.amxx    running
[ 21] StatsX                  1.10.0.537  AMXX Dev Team     statsx.amxx      running
21 plugins, 21 running
Amxx Модули
Код:
name                    version     author               status
[ 1] ReAPI                   v5.22.0.254  Asmodai & s1lent     running
[ 2] SxGeo                   v2.2         s1lent               running
[ 3] FakeMeta                v1.9.0.5294  AMX Mod X Dev Team   running
[ 4] MySQL                   v1.9.0.5294  AMX Mod X Dev Team   running
[ 5] nVault                  v1.9.0.5294  AMX Mod X Dev Team   running
[ 6] CStrike                 v1.9.0.5294  AMX Mod X Dev Team   running
[ 7] Engine                  v1.9.0.5294  AMX Mod X Dev Team   running
[ 8] Ham Sandwich            v1.9.0.5294  AMX Mod X Dev Team   running
[ 9] CSX                     v1.9.0.5294  AMX Mod X Dev Team   running
[10] Fun                     1.9.0.5294  AMX Mod X Dev Team   running
[11] GeoIP                   1.9.0.5294  AMX Mod X Dev Team   running
[12] ReAimDetector           0.2.2       ReHLDS Team          running
[13] RegEx                   1.9.0.5294  AMX Mod X Dev Team   running
13 modules, 13 correct
Ошибка
Код:
Нет ошибки.
Исходник
Код:
#pragma semicolon 1

#include <amxmodx>
#include <cstrike>

/* If you want players to save the crosshair they chose, define NVAULT_SAVE. It will use nvault.inc */
#define NVAULT_SAVE

#define PLUGIN_NAME        "Crosshair Menu"
#define PLUGIN_VERS        "1.2.6"
#define PLUGIN_AUTH        "KriTo & PurposeLess, Aoi.Kagase"

new const crosshairs[][][] = 
{
    {"точка с линиями","LinedPoint_R","LinedPoint_Y","LinedPoint_G","LinedPoint_P","LinedPoint_C"},
    {"крест","Cross_R","Cross_Y","Cross_G","Cross_P","Cross_C"},
    {"крест большой","Cross2_R","Cross2_Y","Cross2_G","Cross2_P","Cross2_C"},
    {"точка","Point_R","Point_Y","Point_G","Point_P","Point_C"},
    {"площадь","Square_R","Square_Y","Square_G","Square_P","Square_C"},
    {"площадь с точкой","Square2_R","Square2_Y","Square2_G","Square2_P","Square2_C"},
    {"крест с точкой","CoolCross_R","CoolCross_Y","CoolCross_G","CoolCross_P","CoolCross_C"}
};

new const colors[][] = 
{
    "красный",
    "жёлтый",
    "зелёный",
    "фиолетовый",
    "голубой"
};

// AmmoID, MaxAmmo
new const gAmmo[][] =
{
    {-1,  -1,-1},// #define CSW_NONE            0
    { 9,  52, 1},// #define CSW_P228            1
    {-1,  -1,-1},// #define CSW_GLOCK           2  // Unused by game, See CSW_GLOCK18.
    { 2,  90, 0},// #define CSW_SCOUT           3
    {12,   1, 3},// #define CSW_HEGRENADE       4
    { 5,  32, 0},// #define CSW_XM1014          5
    {14,   1, 4},// #define CSW_C4              6
    { 6, 100, 0},// #define CSW_MAC10           7
    { 4,  90, 0},// #define CSW_AUG             8
    {13,   1, 3},// #define CSW_SMOKEGRENADE    9
    {10, 120, 1},// #define CSW_ELITE           10
    { 7, 100, 1},// #define CSW_FIVESEVEN       11
    { 6, 100, 0},// #define CSW_UMP45           12
    { 4,  90, 0},// #define CSW_SG550           13
    { 4,  90, 0},// #define CSW_GALIL           14
    { 4,  90, 0},// #define CSW_FAMAS           15
    { 6, 100, 1},// #define CSW_USP             16
    {10, 120, 1},// #define CSW_GLOCK18         17
    { 1,  30, 0},// #define CSW_AWP             18
    {10, 120, 0},// #define CSW_MP5NAVY         19
    { 3, 200, 0},// #define CSW_M249            20
    { 5,  32, 0},// #define CSW_M3              21
    { 4,  90, 0},// #define CSW_M4A1            22
    {10, 120, 0},// #define CSW_TMP             23
    { 2,  90, 0},// #define CSW_G3SG1           24
    {11,   2, 3},// #define CSW_FLASHBANG       25
    { 8,  35, 1},// #define CSW_DEAGLE          26
    { 4,  90, 0},// #define CSW_SG552           27
    { 2,  90, 0},// #define CSW_AK47            28
    {-1,  -1, 3},// #define CSW_KNIFE           29
    { 7, 100, 0},// #define CSW_P90             30
};

enum MSGID
{
    HIDE_WEAPON,
    WEAPON_LIST,
    SET_FOV,
    CUR_WEAPON,
}

new
    g_crosshair_type[MAX_PLAYERS + 1],
    g_crosshair_color[MAX_PLAYERS + 1],
    bool:g_scope[MAX_PLAYERS + 1],
    g_msgids[MSGID];

new g_cvar_sniper = 0;

public plugin_init() 
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);

    register_clcmd("say /crosshair", "@clcmd_crosshair");
    register_clcmd("say /cross", "@clcmd_crosshair");

    register_event("SetFOV", "@Event_SetFOV", "be");
    register_event("CurWeapon", "@Event_CurWeapon", "be", "1=1");

    // Crosshair on Snipers. 
    bind_pcvar_num(create_cvar("crosshair_snipers", "0"), g_cvar_sniper);

    g_msgids[HIDE_WEAPON]   = get_user_msgid("HideWeapon");
    g_msgids[WEAPON_LIST]   = get_user_msgid("WeaponList");
    g_msgids[SET_FOV]       = get_user_msgid("SetFOV");
    g_msgids[CUR_WEAPON]      = get_user_msgid("CurWeapon");
}

@Event_SetFOV(const id) 
{
    if (is_user_bot(id))
        return PLUGIN_CONTINUE;

    if(!g_crosshair_type[id])
        return PLUGIN_CONTINUE;

    new FOV = read_data(1);

    // Default.
    if(FOV == 90)
        g_scope[id] = false;
    // AUG/SG552 Zoom.
    else if (FOV == 55)
        g_scope[id] = true;
    // Snipers. (FOV = 40, 15)
    else {
        g_scope[id] = true;
        SetMessage_HideWeapon(id, 0);
    }

    return PLUGIN_CONTINUE;
}

public plugin_precache() 
{
    for(new i = 0; i < sizeof(crosshairs); i++) 
    {
        for(new a = 1; a < sizeof(crosshairs[]); a++) 
            precache_generic(fmt("sprites/FG/%s.txt", crosshairs[a]));
    }
    precache_generic("sprites/FG/recrosshair.spr");
}

public client_putinserver(id) 
{
    client_cmd(id, "crosshair 1");
}

@clcmd_crosshair(const id) 
{
    new menu = menu_create("\yПрицелы", "@clcmd_crosshair_handler");

    if(g_crosshair_type[id]) 
    {
        menu_additem(menu, fmt("Прицел: %s", crosshairs[g_crosshair_type[id] - 1][0]), "1");
        menu_additem(menu, fmt("Цвет: %s", colors[g_crosshair_color[id]]), "2");
        menu_additem(menu, "Стандартный прицел", "3");
    }
    else 
    {
        menu_additem(menu, "Прицел: стандартный", "1");
    }

    menu_display(id, menu);
    return PLUGIN_HANDLED;
}

@clcmd_crosshair_handler(const id, const menu, const item) 
{
    if(item == MENU_EXIT) 
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new data[6];
    menu_item_getinfo(menu, item, _, data, charsmax(data));
    new key = str_to_num(data), weapon = get_user_weapon(id);

    switch(key) 
    {
        case 1: 
        {
            g_crosshair_type[id] = Calc(g_crosshair_type[id] + 1, sizeof(crosshairs), 1);
            Change_Crosshair(id, weapon);
        }
        case 2: 
        {
            g_crosshair_color[id] = Calc(g_crosshair_color[id] + 1, sizeof(colors) - 1, 0);
            Change_Crosshair(id, weapon);
        }
        case 3: 
        {
            SetMessage_HideWeapon(id, 0);
            g_crosshair_type[id] = 0;
        }
    }

    @clcmd_crosshair(id);

    return PLUGIN_HANDLED;
}

Calc(const arg, const max, const min) 
{
    return (arg > max) ? min : arg;
}

@Event_CurWeapon(const id) 
{
    if (is_user_bot(id))
        return PLUGIN_CONTINUE;

    if(!g_crosshair_type[id])
        return PLUGIN_CONTINUE;

    new weapon = read_data(2);

    // Zoom
    if (g_scope[id]) 
    {
        // Not Snipers
        if (weapon == CSW_AUG || weapon == CSW_SG552)
            Change_Crosshair(id, weapon, 55);
    } 
    else 
    {
        Change_Crosshair(id, weapon, 90);
    }

    return PLUGIN_CONTINUE;
}

Change_Crosshair(const id, const weapon, const zoom = 90) 
{
    if (!g_cvar_sniper)
    {
        if (weapon == CSW_AWP || weapon == CSW_SCOUT || weapon == CSW_SG550 || weapon == CSW_G3SG1)
            return;
    }
    SetMessage_WeaponList(id, weapon);
    SetMessage_HideWeapon(id, 1<<6);
    SetMessage_SetFOV(id, zoom - 1);
    SetMessage_CurWeapon(id);
    SetMessage_SetFOV(id, zoom);
}

SetMessage_WeaponList(const id, const wpnId) 
{
    message_begin(MSG_ONE, g_msgids[WEAPON_LIST], .player = id); 
    {
        write_string(crosshairs[g_crosshair_type[id] - 1][g_crosshair_color[id] + 1]);
        write_byte(gAmmo[wpnId][0]);
        write_byte(gAmmo[wpnId][1]);
        write_byte(-1);
        write_byte(-1);
        write_byte(0);
        write_byte(11);
        write_byte(2);
        write_byte(0);
    }
    message_end();
}

// TMP BUG.
ResetTMP_WeaponList(const id)
{
    message_begin(MSG_ONE, g_msgids[WEAPON_LIST], .player = id); 
    {
        write_string("weapon_tmp");
        write_byte(gAmmo[CSW_TMP][0]);
        write_byte(gAmmo[CSW_TMP][1]);
        write_byte(-1);
        write_byte(-1);
        write_byte(0);
        write_byte(0);
        write_byte(CSW_TMP);
        write_byte(0);
    }
    message_end();
}

SetMessage_SetFOV(const id, const FOV) 
{
    message_begin(MSG_ONE, g_msgids[SET_FOV], .player = id); 
    {
        write_byte(FOV);
    }
    message_end();
}

SetMessage_CurWeapon(const id) 
{
    new ammo;
    new weapon = get_user_weapon(id, ammo);

    // TMP BUG
    if (weapon == CSW_TMP)
        ResetTMP_WeaponList(id);

    message_begin(MSG_ONE, g_msgids[CUR_WEAPON], .player = id); 
    {
        write_byte(1);
        write_byte(2);
        write_byte(ammo);
    }
    message_end();
}

SetMessage_HideWeapon(const id, const byte) 
{
    message_begin(MSG_ONE, g_msgids[HIDE_WEAPON], .player = id); 
    {
        write_byte(byte);
    }
    message_end();
}

#if defined NVAULT_SAVE
#include <nvault>

new g_vault;

public plugin_cfg() 
{
    g_vault = nvault_open("crosshairvault");

    if(g_vault == INVALID_HANDLE) 
        set_fail_state("Unknown nvault for crosshair");
}

public plugin_end() 
{
    nvault_close(g_vault);
}

public client_authorized(id, const authid[]) 
{
    g_crosshair_type[id] = nvault_get(g_vault, fmt("%s_type", authid));
    g_crosshair_color[id] = nvault_get(g_vault, fmt("%s_color", authid));
}

public client_disconnected(id) 
{
    new authid[MAX_AUTHID_LENGTH];
    get_user_authid(id, authid, charsmax(authid));

    if(!g_crosshair_type[id]) 
    {
        if(nvault_get(g_vault, fmt("%s_type", authid))) 
        {
            nvault_remove(g_vault, fmt("%s_type", authid));
            nvault_remove(g_vault, fmt("%s_authid", authid));
        }
        return;
    }

    new data[MAX_AUTHID_LENGTH+10];

    num_to_str(g_crosshair_type[id], data, charsmax(data));
    nvault_pset(g_vault, fmt("%s_type", authid), data);

    num_to_str(g_crosshair_color[id], data, charsmax(data));
    nvault_pset(g_vault, fmt("%s_color", authid), data);
}
#endif
Всем привет!

Кто сможет подсказать что не так? Проблема в том что , не работает смена прицела, я только поменял путь как мне надо т.к. хочу чтобы все файлы находились в папке sprites/FG/спрайты , сделал такой путь > sprites/FG прицелы пропали(не работают), ставлю путь который был изначально > sprites/, всё работает , в чём может быть дело ? В документах .txt которые находятся в папке sprites в них нет никаких путей..

C++:
[/B]
#pragma semicolon 1

#include <amxmodx>
#include <cstrike>

/* If you want players to save the crosshair they chose, define NVAULT_SAVE. It will use nvault.inc */
#define NVAULT_SAVE

#define PLUGIN_NAME        "Crosshair Menu"
#define PLUGIN_VERS        "1.2.6"
#define PLUGIN_AUTH        "KriTo & PurposeLess, Aoi.Kagase"

new const crosshairs[][][] = 
{
    {"точка с линиями","LinedPoint_R","LinedPoint_Y","LinedPoint_G","LinedPoint_P","LinedPoint_C"},
    {"крест","Cross_R","Cross_Y","Cross_G","Cross_P","Cross_C"},
    {"крест большой","Cross2_R","Cross2_Y","Cross2_G","Cross2_P","Cross2_C"},
    {"точка","Point_R","Point_Y","Point_G","Point_P","Point_C"},
    {"площадь","Square_R","Square_Y","Square_G","Square_P","Square_C"},
    {"площадь с точкой","Square2_R","Square2_Y","Square2_G","Square2_P","Square2_C"},
    {"крест с точкой","CoolCross_R","CoolCross_Y","CoolCross_G","CoolCross_P","CoolCross_C"}
};

new const colors[][] = 
{
    "красный",
    "жёлтый",
    "зелёный",
    "фиолетовый",
    "голубой"
};

// AmmoID, MaxAmmo
new const gAmmo[][] =
{
    {-1,  -1,-1},// #define CSW_NONE            0
    { 9,  52, 1},// #define CSW_P228            1
    {-1,  -1,-1},// #define CSW_GLOCK           2  // Unused by game, See CSW_GLOCK18.
    { 2,  90, 0},// #define CSW_SCOUT           3
    {12,   1, 3},// #define CSW_HEGRENADE       4
    { 5,  32, 0},// #define CSW_XM1014          5
    {14,   1, 4},// #define CSW_C4              6
    { 6, 100, 0},// #define CSW_MAC10           7
    { 4,  90, 0},// #define CSW_AUG             8
    {13,   1, 3},// #define CSW_SMOKEGRENADE    9
    {10, 120, 1},// #define CSW_ELITE           10
    { 7, 100, 1},// #define CSW_FIVESEVEN       11
    { 6, 100, 0},// #define CSW_UMP45           12
    { 4,  90, 0},// #define CSW_SG550           13
    { 4,  90, 0},// #define CSW_GALIL           14
    { 4,  90, 0},// #define CSW_FAMAS           15
    { 6, 100, 1},// #define CSW_USP             16
    {10, 120, 1},// #define CSW_GLOCK18         17
    { 1,  30, 0},// #define CSW_AWP             18
    {10, 120, 0},// #define CSW_MP5NAVY         19
    { 3, 200, 0},// #define CSW_M249            20
    { 5,  32, 0},// #define CSW_M3              21
    { 4,  90, 0},// #define CSW_M4A1            22
    {10, 120, 0},// #define CSW_TMP             23
    { 2,  90, 0},// #define CSW_G3SG1           24
    {11,   2, 3},// #define CSW_FLASHBANG       25
    { 8,  35, 1},// #define CSW_DEAGLE          26
    { 4,  90, 0},// #define CSW_SG552           27
    { 2,  90, 0},// #define CSW_AK47            28
    {-1,  -1, 3},// #define CSW_KNIFE           29
    { 7, 100, 0},// #define CSW_P90             30
};

enum MSGID
{
    HIDE_WEAPON,
    WEAPON_LIST,
    SET_FOV,
    CUR_WEAPON,
}

new
    g_crosshair_type[MAX_PLAYERS + 1],
    g_crosshair_color[MAX_PLAYERS + 1],
    bool:g_scope[MAX_PLAYERS + 1],
    g_msgids[MSGID];

new g_cvar_sniper = 0;

public plugin_init() 
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);

    register_clcmd("say /crosshair", "@clcmd_crosshair");
    register_clcmd("say /cross", "@clcmd_crosshair");

    register_event("SetFOV", "@Event_SetFOV", "be");
    register_event("CurWeapon", "@Event_CurWeapon", "be", "1=1");

    // Crosshair on Snipers. 
    bind_pcvar_num(create_cvar("crosshair_snipers", "0"), g_cvar_sniper);

    g_msgids[HIDE_WEAPON]   = get_user_msgid("HideWeapon");
    g_msgids[WEAPON_LIST]   = get_user_msgid("WeaponList");
    g_msgids[SET_FOV]       = get_user_msgid("SetFOV");
    g_msgids[CUR_WEAPON]      = get_user_msgid("CurWeapon");
}

@Event_SetFOV(const id) 
{
    if (is_user_bot(id))
        return PLUGIN_CONTINUE;

    if(!g_crosshair_type[id])
        return PLUGIN_CONTINUE;

    new FOV = read_data(1);

    // Default.
    if(FOV == 90)
        g_scope[id] = false;
    // AUG/SG552 Zoom.
    else if (FOV == 55)
        g_scope[id] = true;
    // Snipers. (FOV = 40, 15)
    else {
        g_scope[id] = true;
        SetMessage_HideWeapon(id, 0);
    }

    return PLUGIN_CONTINUE;
}

public plugin_precache() 
{
    for(new i = 0; i < sizeof(crosshairs); i++) 
    {
        for(new a = 1; a < sizeof(crosshairs[]); a++) 
            precache_generic(fmt("sprites/FG/%s.txt", crosshairs[i][a]));
    }
    precache_generic("sprites/FG/recrosshair.spr");
}

public client_putinserver(id) 
{
    client_cmd(id, "crosshair 1");
}

@clcmd_crosshair(const id) 
{
    new menu = menu_create("\yПрицелы", "@clcmd_crosshair_handler");

    if(g_crosshair_type[id]) 
    {
        menu_additem(menu, fmt("Прицел: %s", crosshairs[g_crosshair_type[id] - 1][0]), "1");
        menu_additem(menu, fmt("Цвет: %s", colors[g_crosshair_color[id]]), "2");
        menu_additem(menu, "Стандартный прицел", "3");
    }
    else 
    {
        menu_additem(menu, "Прицел: стандартный", "1");
    }

    menu_display(id, menu);
    return PLUGIN_HANDLED;
}

@clcmd_crosshair_handler(const id, const menu, const item) 
{
    if(item == MENU_EXIT) 
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new data[6];
    menu_item_getinfo(menu, item, _, data, charsmax(data));
    new key = str_to_num(data), weapon = get_user_weapon(id);

    switch(key) 
    {
        case 1: 
        {
            g_crosshair_type[id] = Calc(g_crosshair_type[id] + 1, sizeof(crosshairs), 1);
            Change_Crosshair(id, weapon);
        }
        case 2: 
        {
            g_crosshair_color[id] = Calc(g_crosshair_color[id] + 1, sizeof(colors) - 1, 0);
            Change_Crosshair(id, weapon);
        }
        case 3: 
        {
            SetMessage_HideWeapon(id, 0);
            g_crosshair_type[id] = 0;
        }
    }

    @clcmd_crosshair(id);

    return PLUGIN_HANDLED;
}

Calc(const arg, const max, const min) 
{
    return (arg > max) ? min : arg;
}

@Event_CurWeapon(const id) 
{
    if (is_user_bot(id))
        return PLUGIN_CONTINUE;

    if(!g_crosshair_type[id])
        return PLUGIN_CONTINUE;

    new weapon = read_data(2);

    // Zoom
    if (g_scope[id]) 
    {
        // Not Snipers
        if (weapon == CSW_AUG || weapon == CSW_SG552)
            Change_Crosshair(id, weapon, 55);
    } 
    else 
    {
        Change_Crosshair(id, weapon, 90);
    }

    return PLUGIN_CONTINUE;
}

Change_Crosshair(const id, const weapon, const zoom = 90) 
{
    if (!g_cvar_sniper)
    {
        if (weapon == CSW_AWP || weapon == CSW_SCOUT || weapon == CSW_SG550 || weapon == CSW_G3SG1)
            return;
    }
    SetMessage_WeaponList(id, weapon);
    SetMessage_HideWeapon(id, 1<<6);
    SetMessage_SetFOV(id, zoom - 1);
    SetMessage_CurWeapon(id);
    SetMessage_SetFOV(id, zoom);
}

SetMessage_WeaponList(const id, const wpnId) 
{
    message_begin(MSG_ONE, g_msgids[WEAPON_LIST], .player = id); 
    {
        write_string(crosshairs[g_crosshair_type[id] - 1][g_crosshair_color[id] + 1]);
        write_byte(gAmmo[wpnId][0]);
        write_byte(gAmmo[wpnId][1]);
        write_byte(-1);
        write_byte(-1);
        write_byte(0);
        write_byte(11);
        write_byte(2);
        write_byte(0);
    }
    message_end();
}

// TMP BUG.
ResetTMP_WeaponList(const id)
{
    message_begin(MSG_ONE, g_msgids[WEAPON_LIST], .player = id); 
    {
        write_string("weapon_tmp");
        write_byte(gAmmo[CSW_TMP][0]);
        write_byte(gAmmo[CSW_TMP][1]);
        write_byte(-1);
        write_byte(-1);
        write_byte(0);
        write_byte(0);
        write_byte(CSW_TMP);
        write_byte(0);
    }
    message_end();
}

SetMessage_SetFOV(const id, const FOV) 
{
    message_begin(MSG_ONE, g_msgids[SET_FOV], .player = id); 
    {
        write_byte(FOV);
    }
    message_end();
}

SetMessage_CurWeapon(const id) 
{
    new ammo;
    new weapon = get_user_weapon(id, ammo);

    // TMP BUG
    if (weapon == CSW_TMP)
        ResetTMP_WeaponList(id);

    message_begin(MSG_ONE, g_msgids[CUR_WEAPON], .player = id); 
    {
        write_byte(1);
        write_byte(2);
        write_byte(ammo);
    }
    message_end();
}

SetMessage_HideWeapon(const id, const byte) 
{
    message_begin(MSG_ONE, g_msgids[HIDE_WEAPON], .player = id); 
    {
        write_byte(byte);
    }
    message_end();
}

#if defined NVAULT_SAVE
#include <nvault>

new g_vault;

public plugin_cfg() 
{
    g_vault = nvault_open("crosshairvault");

    if(g_vault == INVALID_HANDLE) 
        set_fail_state("Unknown nvault for crosshair");
}

public plugin_end() 
{
    nvault_close(g_vault);
}

public client_authorized(id, const authid[]) 
{
    g_crosshair_type[id] = nvault_get(g_vault, fmt("%s_type", authid));
    g_crosshair_color[id] = nvault_get(g_vault, fmt("%s_color", authid));
}

public client_disconnected(id) 
{
    new authid[MAX_AUTHID_LENGTH];
    get_user_authid(id, authid, charsmax(authid));

    if(!g_crosshair_type[id]) 
    {
        if(nvault_get(g_vault, fmt("%s_type", authid))) 
        {
            nvault_remove(g_vault, fmt("%s_type", authid));
            nvault_remove(g_vault, fmt("%s_authid", authid));
        }
        return;
    }

    new data[MAX_AUTHID_LENGTH+10];

    num_to_str(g_crosshair_type[id], data, charsmax(data));
    nvault_pset(g_vault, fmt("%s_type", authid), data);

    num_to_str(g_crosshair_color[id], data, charsmax(data));
    nvault_pset(g_vault, fmt("%s_color", authid), data);
}
#endif
[B]
.
 
Последнее редактирование:
Сверху Снизу