Иконка ресурса

[Shop] Name/Prefix/Text Color 2.2.3

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
Подскажите, пожалуйста, как создать префикс в shop и поставить его цену, что то догнать не могу
ну нельзя же быть таким ленивым... -_-
/addons/sourcemod/configs/shop/chat.txt
1616493371156.png
 

aleksey_sever

Участник
Сообщения
102
Реакции
2
Plugin shop_chat_222_for_CSS_v34.smx failed to load: Could not find required plugin "basecomm"
переделать под МА реально?
 

YoungDizziss

Участник
Сообщения
82
Реакции
10
Можно сделать двухцветный тэг?
(одно слово с двух цветов)
 

P.A.G.E DEV

Live in your world. Play in ours
Сообщения
64
Реакции
28
А можно пожалуйста, архив где 125 цветов, а то не переходит по ссылке
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
А можно пожалуйста, архив где 125 цветов, а то не переходит по ссылке
x:
"Colors"
{
    "Черный" "000000"
    "Тускло-серый" "696969"
    "Серый" "808080"
    "Тёмно-серый" "A9A9A9"
    "Серебристый" "C0C0C0"
    "Светло-серый" "D3D3D3"
    "Дымчатый" "F5F5F5"
    "Белый" "FFFFFF"
    "Снежный" "FFFAFA"
    "Розово-коричневый" "BC8F8F"
    "Светло-коралловый" "F08080"
    "Каштановый" "CD5C5C"
    "Коричневый" "A52A2A"
    "Кирпичный" "B22222"
    "Густой красно-коричневый" "800000"
    "Тёмно-красный" "8B0000"
    "Красный" "FF0000"
    "Лососевый" "FA8072"
    "Томатный" "FF6347"
    "Тёмно-лососевый" "E9967A"
    "Коралловый" "FF7F50"
    "Оранжево-красный" "FF4500"
    "Светло-лососевый" "FFA07A"
    "Сиена" "A0522D"
    "Кожаного седла" "8B4513"
    "Шоколадный" "D2691E"
    "Персиковый" "FFDAB9"
    "Рыжеватый" "F4A460"
    "Льняной" "FAF0E6"
    "Перу" "CD853F"
    "Бисквитный" "FFE4C4"
    "Тёмно-оранжевый" "FF8C00"
    "Антикварная белизна" "FAEBD7"
    "Жёлто-коричневый" "D2B48C"
    "Древесный" "DEB887"
    "Очищенный миндаль" "FFEBCD"
    "Белый навахо" "FFDEAD"
    "Мокасиновый" "FFE4B5"
    "Пшеничный" "F5DEB3"
    "Оранжевый" "FFA500"
    "Цветочный-белый" "FFFAF0"
    "Золотисто-берёзовый" "DAA520"
    "Тёмно-золотой" "B8860B"
    "Зерновой-шелк"    "FFF8DC"
    "Золотой" "FFD700"
    "Хаки" "F0E68C"
    "Бледно-золотистый" "EEE8AA"
    "Темный-хаки" "BDB76B"
    "Светло-жёлтый" "FFFFE0"
    "Оливковый" "808000"
    "Жёлтый" "FFFF00"
    "Нежно-оливковый" "6B8E23"
    "Жёлто-зелёный" "9ACD32"
    "Темный оливково-зелёный" "556B2F"
    "Зелено-жёлтый" "ADFF2F"
    "Зелёная лужайка" "7CFC00"
    "Ядовито-зелёный" "7FFF00"
    "Светло-зелёный" "90EE90"
    "Бледный зеленовато-жёлтый" "98FB98"
    "Зелёный лес" "228B22"
    "Лаймово-зелёный" "32CD32"
    "Тёмно-зелёный" "006400"
    "Зелёный" "008000"
    "Лайм" "00FF00"
    "Зелёно-морской" "2E8B57"
    "Море умеренного зелёного" "3CB371"
    "Весенне-зелёный" "00FF7F"
    "Умеренный весенний зелёный" "00FA9A"
    "Умеренный аквамариновый" "66CDAA"
    "Аквамариновый" "7FFFD4"
    "Светло-бирюзовый" "40E0D0"
    "Светлое зелёное море" "20B2AA"
    "Умеренно-бирюзовый" "48D1CC"
    "Бледно-синий" "AFEEEE"
    "Аспидно-серый" "2F4F4F"
    "Сине-зелёный" "008080"
    "Тёмный циан" "008B8B"
    "Циан" "00FFFF"
    "Светлый циан" "E0FFFF"
    "Тёмно-бирюзовый" "00CED1"
    "Серо-синий" "5F9EA0"
    "Пыльно-голубой" "B0E0E6"
    "Светло-синий" "ADD8E6"
    "Небесно-голубой" "00BFFF"
    "Небесная синева" "87CEEB"
    "Светло-голубой" "87CEFA"
    "Синяя сталь" "4682B4"
    "Аспидно-серый" "708090"
    "Светлый аспидно-серый" "778899"
    "Защитно-синий" "1E90FF"
    "Светлый стальной-синий" "B0C4DE"
    "Васильковый" "6495ED"
    "Королевская синева" "4169E1"
    "Призрачно-белый" "F8F8FF"
    "Полуночный чёрный" "191970"
    "Тёмно-синий" "000080"
    "Ультрамариновый" "00008B"
    "Умеренно-синий" "0000CD"
    "Синий" "0000FF"
    "Тёмная сланцевая синева" "483D8B"
    "Сланцевая синева" "6A5ACD"
    "Умеренная сланцевая синева" "7B68EE"
    "Умеренный фиолетовый" "9370DB"
    "Сине-фиолетовый" "8A2BE2"
    "Индиго" "4B0082"
    "Темная Орхидея" "9932CC"
    "Темно-фиолетовый" "9400D3"
    "Умеренная Орхидея" "BA55D3"
    "Чертополоховый" "D8BFD8"
    "Светлая слива" "DDA0DD"
    "Розово-фиолетовый" "EE82EE"
    "Пурпурный" "800080"
    "Тёмный маджента" "8B008B"
    "Маджента" "FF00FF"
    "Орхидеевый" "DA70D6"
    "Умеренный фиолетово-красный" "C71585"
    "Глубокий розовый" "FF1493"
    "Ярко-розовый" "FF69B4"
    "Лиловый" "DB7093"
    "Малиновый" "DC143C"
    "Розовый" "FFC0CB"
    "Светло-розовый" "FFB6C1"
}
 

Askad

Участник
Сообщения
3
Реакции
2
Здравствуйте! С чем может быть связан сброс цвета текста, ника, префикса и самого префикса при перезаходе на сервер или при смене карты?
 

Вложения

  • изображение_2022-06-28_134105936.png
    изображение_2022-06-28_134105936.png
    654 байт · Просмотры: 70

PuxRK

Участник
Сообщения
226
Реакции
2
Кому нужно файл 125 цветами держите все цвета рабочие. 4 часа делал все цвета и проверял какие работают а какие нет. Удалил где-то около 20-30 цветов которые не работали. Остальные все 125 цветов работают.
Поставил их на ксс OB, работает только 2 цвета..
 

CaT VeNoM TOP

Участник
Сообщения
65
Реакции
5
Вопрос когда я загружаю данный плагин на сервер у меня перестаёт работать sm plagins list и все команды на сервере, как исправить данную проблему?
 

FuckYeah

Челик
Сообщения
474
Реакции
57
v34 , вместо цветов пишутся их теги. {GREY} и т.д. Но только у некоторых людей.
 

Денис навныко

Участник
Сообщения
113
Реакции
3
@R1KO, Здравствуйте! С чем может быть связан сброс цвета текста, ника, префикса и самого префикса при перезаходе на сервер или при смене карты?
 

anton_87

Участник
Сообщения
58
Реакции
4
Здравствуйте.
Плагин работает. Но вопрос остается открытым, после перезахода на сервер не сохраняется выбор цвета.
 

w0hderful

Участник
Сообщения
134
Реакции
28
Здравствуйте.
Плагин работает. Но вопрос остается открытым, после перезахода на сервер не сохраняется выбор цвета.
@R1KO, Здравствуйте! С чем может быть связан сброс цвета текста, ника, префикса и самого префикса при перезаходе на сервер или при смене карты?
Лучше поздно чем никогда.
 

Вложения

  • shop_chat_222_for_CSS_v34.sp
    20.1 КБ · Просмотры: 14
Последнее редактирование:

MODER DEV

Участник
Сообщения
60
Реакции
14
Лучше поздно чем никогда.
Пробуй
C-подобный:
//------------------------------------------------------------------------------
// GPL LISENCE (short)
//------------------------------------------------------------------------------
/*
 * Copyright (c) 2014 R1KO

 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma semicolon 1
#include <sourcemod>
#include <shop>
#include <sdktools_functions>
#include <basecomm>
#include <clientprefs>

#define CATEGORY "Chat"
#define ITEM1 "Name Color"
#define ITEM2 "Prefix"
#define ITEM3 "Text Color"

public Plugin:myinfo =
{
    name = "[Shop] Name/Prefix/Text Color (For v34)",
    author = "R1KO",
    version = "2.2.2"
}

#define NAME_COLOR 0
#define TEXT_COLOR 1
#define PREFIX_COLOR 2
#define PREFIX 3

new    Handle:g_hMenuColor,
    Handle:g_hMenuPref,
    Handle:g_hCookie[4];

new    g_iArrayPrice[3],
    g_iArraySellPrice[3],
    g_iArrayDuration[3],
    bool:g_bUsePrefixFile;

new bool:g_bUsed[MAXPLAYERS+1][3],
    String:g_sColors[MAXPLAYERS+1][3][15],
    String:g_sPrefix[MAXPLAYERS+1][100],
    g_iTypeMenu[MAXPLAYERS+1];

new ItemId:id[3];

public OnPluginStart()
{
    new Handle:hCvar;
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_name_price", "1000", "Цена цвета ника.")), NamePriceChange);
    g_iArrayPrice[NAME_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_name_sellprice", "1000", "Цена продажи цвета ника. (Запретить продажу: -1)")), NameSellPriceChange);
    g_iArraySellPrice[NAME_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_name_duration", "86400", "Длительность использования цвета ника.")), NameDurationChange);
    g_iArrayDuration[NAME_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_text_price", "1000", "Цена цвета сообщений.")), TextPriceChange);
    g_iArrayPrice[TEXT_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_text_sellprice", "1000", "Цена продажи цвета сообщений. (Запретить продажу: -1)")), TextSellPriceChange);
    g_iArraySellPrice[TEXT_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_text_duration", "86400", "Длительность использования цвета сообщений.")), TextDurationChange);
    g_iArrayDuration[TEXT_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_prefix_price", "1000", "Цена префикса и его цвета.")), PrefixPriceChange);
    g_iArrayPrice[PREFIX_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_prefix_sellprice", "1000", "Цена продажи префикса и его цвета. (Запретить продажу: -1)")), PrefixSellPriceChange);
    g_iArraySellPrice[PREFIX_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_prefix_duration", "86400", "Длительность использования префикса и его цвета.")), PrefixDurationChange);
    g_iArrayDuration[PREFIX_COLOR] = GetConVarInt(hCvar);
   
    HookConVarChange((hCvar = CreateConVar("sm_shop_chat_use_prefix_file", "0", "Разрешить выбрать только префиксы из списка, иначе - сможет указать любой (1 - Вкл., 0 - Выкл)")), UsePrefixFileChange);
    g_bUsePrefixFile = GetConVarBool(hCvar);
   
    CloseHandle(hCvar);

    AutoExecConfig(true, "shop_chat", "shop");

    g_hCookie[NAME_COLOR] = RegClientCookie("Shop Name Color", "Name Color", CookieAccess_Public);
    g_hCookie[TEXT_COLOR] = RegClientCookie("Shop Text Color", "Text Color", CookieAccess_Public);
    g_hCookie[PREFIX_COLOR] = RegClientCookie("Shop Prefix Color", "Prefix Color", CookieAccess_Public);
    g_hCookie[PREFIX] = RegClientCookie("Shop Prefix", "Prefix", CookieAccess_Public);

    RegConsoleCmd("sm_color", MyColor_CMD);
    RegConsoleCmd("sm_myprefix", MyPref_CMD);  

    if (Shop_IsStarted()) Shop_Started();
}

public NamePriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayPrice[NAME_COLOR] = GetConVarInt(hCvar);
    if(id[NAME_COLOR] != INVALID_ITEM) Shop_SetItemPrice(id[NAME_COLOR], g_iArrayPrice[NAME_COLOR]);
}

public NameSellPriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArraySellPrice[NAME_COLOR] = GetConVarInt(hCvar);
    if(id[NAME_COLOR] != INVALID_ITEM) Shop_SetItemSellPrice(id[NAME_COLOR], g_iArraySellPrice[NAME_COLOR]);
}

public NameDurationChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayDuration[NAME_COLOR] = GetConVarInt(hCvar);
    if(id[NAME_COLOR] != INVALID_ITEM) Shop_SetItemValue(id[NAME_COLOR], g_iArrayDuration[NAME_COLOR]);
}

public TextPriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayPrice[TEXT_COLOR] = GetConVarInt(hCvar);
    if(id[TEXT_COLOR] != INVALID_ITEM) Shop_SetItemPrice(id[TEXT_COLOR], g_iArrayPrice[TEXT_COLOR]);
}

public TextSellPriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArraySellPrice[TEXT_COLOR] = GetConVarInt(hCvar);
    if(id[TEXT_COLOR] != INVALID_ITEM) Shop_SetItemSellPrice(id[TEXT_COLOR], g_iArraySellPrice[TEXT_COLOR]);
}

public TextDurationChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayDuration[TEXT_COLOR] = GetConVarInt(hCvar);
    if(id[TEXT_COLOR] != INVALID_ITEM) Shop_SetItemValue(id[TEXT_COLOR], g_iArrayDuration[TEXT_COLOR]);
}

public PrefixPriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayPrice[PREFIX_COLOR] = GetConVarInt(hCvar);
    if(id[PREFIX_COLOR] != INVALID_ITEM) Shop_SetItemPrice(id[PREFIX_COLOR], g_iArrayPrice[PREFIX_COLOR]);
}

public PrefixSellPriceChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArraySellPrice[PREFIX_COLOR] = GetConVarInt(hCvar);
    if(id[PREFIX_COLOR] != INVALID_ITEM) Shop_SetItemSellPrice(id[PREFIX_COLOR], g_iArraySellPrice[PREFIX_COLOR]);
}

public PrefixDurationChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_iArrayDuration[PREFIX_COLOR] = GetConVarInt(hCvar);
    if(id[PREFIX_COLOR] != INVALID_ITEM) Shop_SetItemValue(id[PREFIX_COLOR], g_iArrayDuration[PREFIX_COLOR]);
}

public UsePrefixFileChange(Handle:hCvar, const String:oldValue[], const String:newValue[])
{
    g_bUsePrefixFile = GetConVarBool(hCvar);
    CreatePrefixMenu();
}

public OnConfigsExecuted() ParseCFG();

public OnPluginEnd() Shop_UnregisterMe();

public Shop_Started()
{
    new CategoryId:category_id = Shop_RegisterCategory(CATEGORY, "Чат", "");

    if (Shop_StartItem(category_id, ITEM1))
    {
        Shop_SetInfo("Цвет ника", "", g_iArrayPrice[NAME_COLOR], g_iArraySellPrice[NAME_COLOR], Item_Togglable, g_iArrayDuration[NAME_COLOR]);
        Shop_SetCallbacks(OnNameItemRegistered, OnNameColorUsed);
        Shop_EndItem();
    }
    if (Shop_StartItem(category_id, ITEM3))
    {
        Shop_SetInfo("Цвет текста", "", g_iArrayPrice[TEXT_COLOR], g_iArraySellPrice[TEXT_COLOR], Item_Togglable, g_iArrayDuration[TEXT_COLOR]);
        Shop_SetCallbacks(OnTextItemRegistered, OnTextColorUsed);
        Shop_EndItem();
    }
    if (Shop_StartItem(category_id, ITEM2))
    {
        Shop_SetInfo("Титул и его цвет", "", g_iArrayPrice[PREFIX_COLOR], g_iArraySellPrice[PREFIX_COLOR], Item_Togglable, g_iArrayDuration[PREFIX_COLOR]);
        Shop_SetCallbacks(OnPrefixItemRegistered, OnPrefixUsed);
        Shop_EndItem();
    }
}

public OnNameItemRegistered(CategoryId:category_id, const String:category[], const String:item[], ItemId:item_id) id[NAME_COLOR] = item_id;
public OnTextItemRegistered(CategoryId:category_id, const String:category[], const String:item[], ItemId:item_id) id[TEXT_COLOR] = item_id;
public OnPrefixItemRegistered(CategoryId:category_id, const String:category[], const String:item[], ItemId:item_id) id[PREFIX_COLOR] = item_id;

public Shop_OnAuthorized(iClient)
{
    for(new i = 0; i < 3; i++)
    {
        if(Shop_IsClientHasItem(iClient, id[i]))
        {
            g_bUsed[iClient][i] = Shop_IsClientItemToggled(iClient, id[i]);
            if(g_bUsed[iClient][i])
            {
                GetClientCookie(iClient, g_hCookie[i], g_sColors[iClient][i], sizeof(g_sColors[][]));
               
                if(i == PREFIX_COLOR)
                {
                    GetClientCookie(iClient, g_hCookie[PREFIX], g_sPrefix[iClient], sizeof(g_sPrefix[]));
                    if(g_sPrefix[iClient][0] == '\0')
                        strcopy(g_sPrefix[iClient], sizeof(g_sPrefix[]), "Префикс");
                }
            }
            else
            {
                g_sColors[iClient][i][0] = '\0';
            }
        }
        else
        {
            g_sColors[iClient][i][0] = '\0';
            g_bUsed[iClient][i] = false;
        }
    }
   
    if(!g_bUsed[iClient][PREFIX_COLOR])
        g_sPrefix[iClient][0] = '\0';
}

public OnClientPostAdminCheck(iClient)
{
    if(!IsFakeClient(iClient))
    {
        // Загружаем сохраненные значения при подключении
        for(new i = 0; i < 3; i++)
        {
            if(g_hCookie[i] != INVALID_HANDLE)
            {
                GetClientCookie(iClient, g_hCookie[i], g_sColors[iClient][i], sizeof(g_sColors[][]));
            }
        }
        if(g_hCookie[PREFIX] != INVALID_HANDLE)
        {
            GetClientCookie(iClient, g_hCookie[PREFIX], g_sPrefix[iClient], sizeof(g_sPrefix[]));
        }
    }
}

public ShopAction:OnNameColorUsed(iClient, CategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOn, bool:elapsed)
{
    if (isOn || elapsed)
    {
        g_bUsed[iClient][NAME_COLOR] = false;
        return Shop_UseOff;
    }

    GetClientCookie(iClient, g_hCookie[NAME_COLOR], g_sColors[iClient][NAME_COLOR], sizeof(g_sColors[][]));
    g_bUsed[iClient][NAME_COLOR] = true;
    PrintToChat(iClient, "\x04[Shop] \x01Чтобы выбрать цвет ника введите в чат \x04!color");

    return Shop_UseOn;
}

public ShopAction:OnTextColorUsed(iClient, CategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOn, bool:elapsed)
{
    if (isOn || elapsed)
    {
        g_bUsed[iClient][TEXT_COLOR] = false;
        return Shop_UseOff;
    }

    GetClientCookie(iClient, g_hCookie[TEXT_COLOR], g_sColors[iClient][TEXT_COLOR], sizeof(g_sColors[][]));
    g_bUsed[iClient][TEXT_COLOR] = true;
    PrintToChat(iClient, "\x04[Shop] \x01Чтобы выбрать цвет текста введите в чат \x04!color");

    return Shop_UseOn;
}

public ShopAction:OnPrefixUsed(iClient, CategoryId:category_id, const String:category[], ItemId:item_id, const String:item[], bool:isOn, bool:elapsed)
{
    if (isOn || elapsed)
    {
        g_bUsed[iClient][PREFIX_COLOR] = false;
        return Shop_UseOff;
    }

    GetClientCookie(iClient, g_hCookie[PREFIX_COLOR], g_sColors[iClient][PREFIX_COLOR], sizeof(g_sColors[][]));
    GetClientCookie(iClient, g_hCookie[PREFIX], g_sPrefix[iClient], sizeof(g_sPrefix[]));
    if(g_sPrefix[iClient][0] == '\0') strcopy(g_sPrefix[iClient], sizeof(g_sPrefix[]), "Префикс");

    g_bUsed[iClient][PREFIX_COLOR] = true;
    PrintToChat(iClient, "\x04[Shop] \x01Чтобы выбрать префикс и его цвет введите в чат \x04!color");

    return Shop_UseOn;
}

ParseCFG()
{
    g_hMenuColor = CreateMenu(MenuHandler_Color);
    SetMenuExitBackButton(g_hMenuColor, true);
    SetMenuTitle(g_hMenuColor, "Выберите цвет:\n \n");
    AddMenuItem(g_hMenuColor, "{DEFAULT}",        "Желтый");
    AddMenuItem(g_hMenuColor, "{GREEN}",            "Зеленый");
    AddMenuItem(g_hMenuColor, "{LIGHTGREEN}",        "Салатовый");
    AddMenuItem(g_hMenuColor, "{TEAM}",            "Цвет команды");
    AddMenuItem(g_hMenuColor, "{RED}",            "Красный");
    AddMenuItem(g_hMenuColor, "{BLUE}",            "Синий");
    AddMenuItem(g_hMenuColor, "{GRAY}",            "Серый");

    CreatePrefixMenu();
}

CreatePrefixMenu()
{
    CheckCloseHandle(g_hMenuPref);

    g_hMenuPref = CreateMenu(MenuHandler_Pref);

    if(g_bUsePrefixFile)
    {
        SetMenuExitBackButton(g_hMenuPref, true);
        SetMenuTitle(g_hMenuPref, "Выберите префикс:\n \n");
       
        decl String:sBuffer[PLATFORM_MAX_PATH];
        BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "configs/shop/chat_prefix.cfg");
        if(!FileExists(sBuffer)) SetFailState("Не найден файл %s", sBuffer);
        new Handle:hFile = OpenFile(sBuffer, "r");
       
        if (hFile != INVALID_HANDLE)
        {
            while (!IsEndOfFile(hFile) && ReadFileLine(hFile, sBuffer, sizeof(sBuffer)))
            {
                TrimString(sBuffer);
           
                if (sBuffer[0]) AddMenuItem(g_hMenuPref, sBuffer, sBuffer);
            }
        } else SetFailState("Не удалось открыть файл %s", sBuffer);

        CloseHandle(hFile);
       
        if(GetMenuItemCount(g_hMenuPref) == 0) AddMenuItem(g_hMenuPref, "", "Нет доступных префиксов", ITEMDRAW_DISABLED);
    } else
    {
        SetMenuExitButton(g_hMenuPref, true);
        SetMenuTitle(g_hMenuPref, "Для установки префикса\nвведите в консоль:\n \nsm_myprefix \"ваш префикс\"\n \nЛибо в чат:\n \n!myprefix \"ваш префикс\"\n \n");
        AddMenuItem(g_hMenuPref, "", "Назад");
    }
}

public Action:MyColor_CMD(iClient, args)
{
    if(iClient > 0)
    {
        if(g_bUsed[iClient][NAME_COLOR] || g_bUsed[iClient][TEXT_COLOR] || g_bUsed[iClient][PREFIX_COLOR]) SendChatMenu(iClient);
        else PrintToChat(iClient, "\x04[Shop] \x01Купите бонусы в Shop, чтобы открыть это меню!");
    }
    return Plugin_Handled;
}

SendChatMenu(iClient)
{
    new Handle:hChatMenu = CreateMenu(MenuHandler_ChatMenu);
    SetMenuTitle(hChatMenu, "Управление чатом\n \n");
    SetMenuExitButton(hChatMenu, true);
    AddMenuItem(hChatMenu, "", "Цвет ника", (g_bUsed[iClient][NAME_COLOR]) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    AddMenuItem(hChatMenu, "", "Цвет текста", (g_bUsed[iClient][TEXT_COLOR]) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    AddMenuItem(hChatMenu, "", "Цвет префикса", (g_bUsed[iClient][PREFIX_COLOR]) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    AddMenuItem(hChatMenu, "", "Префикс", (g_bUsed[iClient][PREFIX_COLOR]) ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    DisplayMenu(hChatMenu, iClient, MENU_TIME_FOREVER);
}

public MenuHandler_ChatMenu(Handle:hMenu, MenuAction:action, iClient, option)
{
     if (action == MenuAction_Select)
    {
        if(option == 3) DisplayMenu(g_hMenuPref, iClient, MENU_TIME_FOREVER);
        else
        {
            g_iTypeMenu[iClient] = option;
            DisplayMenu(g_hMenuColor, iClient, MENU_TIME_FOREVER);
        }
    } else if (action == MenuAction_End) CloseHandle(hMenu);
}

public MenuHandler_Color(Handle:hMenu, MenuAction:action, iClient, option)
{
     if (action == MenuAction_Select)
    {
        GetMenuItem(hMenu, option, g_sColors[iClient][g_iTypeMenu[iClient]], sizeof(g_sColors[][]));
        SetClientCookie(iClient, g_hCookie[g_iTypeMenu[iClient]], g_sColors[iClient][g_iTypeMenu[iClient]]);
        SendChatMenu(iClient);
    } else if (action == MenuAction_Cancel && option == MenuCancel_ExitBack) SendChatMenu(iClient);
}

public MenuHandler_Pref(Handle:hMenu, MenuAction:action, iClient, option)
{
    if (action == MenuAction_Select)
    {
        if(!g_bUsePrefixFile) SendChatMenu(iClient);
        else
        {
            GetMenuItem(hMenu, option, g_sPrefix[iClient], sizeof(g_sPrefix[]));
            SetClientCookie(iClient, g_hCookie[PREFIX], g_sPrefix[iClient]);
            PrintToChat(iClient, "\x04[Shop] \x01Вы установили себе префикс: \x04%s", g_sPrefix[iClient]);
            SendChatMenu(iClient);
        }
    } else if (action == MenuAction_Cancel && option == MenuCancel_ExitBack) SendChatMenu(iClient);
}

public Action:MyPref_CMD(iClient, args)
{
    if(iClient > 0)
    {
        if(g_bUsed[iClient][PREFIX_COLOR])
        {
            if(!g_bUsePrefixFile)
            {
                GetCmdArgString(g_sPrefix[iClient], sizeof(g_sPrefix[]));
                if(g_sPrefix[iClient][0] == '\0') strcopy(g_sPrefix[iClient], sizeof(g_sPrefix[]), "Префикс");
                SetClientCookie(iClient, g_hCookie[PREFIX], g_sPrefix[iClient]);
                PrintToChat(iClient, "\x04[Shop] \x01Вы установили себе префикс: \x04%s", g_sPrefix[iClient]);
            } else PrintToChat(iClient, "\x04[Shop] \x01Даная команда недоступна!");
        } else PrintToChat(iClient, "\x04[Shop] \x01Для доступа к этой команде купите префикс в \x04Shop\x01!");
    }
}

public Action:OnClientSayCommand(iClient, const String:command[], const String:sArgs[])
{
    if(iClient > 0 && !IsFakeClient(iClient))
    {
        if(BaseComm_IsClientGagged(iClient)) return Plugin_Handled;
        if(g_bUsed[iClient][NAME_COLOR] || g_bUsed[iClient][TEXT_COLOR] || g_bUsed[iClient][PREFIX_COLOR])
        {
            if(sArgs[1] == '@' || sArgs[1] == '/') return Plugin_Continue;

            decl String:sText[192];
            strcopy(sText, sizeof(sText), sArgs);
            TrimString(sText);
            StripQuotes(sText);
           
            new iTeam = GetClientTeam(iClient);
            decl String:sNameColor[80], String:sTextColor[210], String:sPrefix[120];
               
            FormatEx(sNameColor, sizeof(sNameColor), "%s%N", (g_bUsed[iClient][NAME_COLOR]) ? g_sColors[iClient][NAME_COLOR]:"\x03", iClient);
            FormatEx(sTextColor, sizeof(sTextColor), "\x01: %s%s", (g_bUsed[iClient][TEXT_COLOR]) ? g_sColors[iClient][TEXT_COLOR]:"", sText);
               
            if(g_bUsed[iClient][PREFIX_COLOR]) FormatEx(sPrefix, sizeof(sPrefix), "%s%s ", g_sColors[iClient][PREFIX_COLOR], g_sPrefix[iClient]);
            else sPrefix[0] = '\0';

            if(StrEqual(command, "say"))
            {
                FormatEx(sText, sizeof(sText), "\x01%s%s%s%s", (iTeam < 2) ? "*НАБЛЮДАТЕЛЬ* ":((IsPlayerAlive(iClient)) ? "":"*УБИТ* "), sPrefix, sNameColor, sTextColor);
                ReplaceString(sText, sizeof(sText), "{DEFAULT}", "\x01", false);
                ReplaceString(sText, sizeof(sText), "{GREEN}", "\x04", false);
               
                new iColor = ReplaceColors(sText, sizeof(sText));
                switch(iColor)
                {
                    case -1,0: PrintToChatAll(sText);
                    case 1,2,3: PrintSayToChatAll(sText, iColor);
                    case 4: PrintSayAll(iClient, sText);
                }
            } else if(StrEqual(command, "say_team"))
            {
                FormatEx(sText, sizeof(sText), "\x01%s %s%s%s%s", (iTeam < 2) ? "(Наблюдатель)":((iTeam == 2) ? "(Террорист)":"(Спецназовец)"), (iTeam < 2) ? "":((IsPlayerAlive(iClient)) ? "":"*УБИТ* "), sPrefix, sNameColor, sTextColor);
                for (new i = 1; i <= MaxClients; i++)
                {
                    if (IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) == iTeam)
                    {
                        new Handle:h = StartMessageOne("SayText2", i);
                        if (h != INVALID_HANDLE)
                        {
                            BfWriteByte(h, iClient);
                            BfWriteByte(h, true);
                            BfWriteString(h, sText);
                            EndMessage();
                        }
                    }
                }
            }
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

stock PrintSayAll(iClient, const String:sMsg[])
{
    new Handle:h = StartMessageAll("SayText2");
    if (h != INVALID_HANDLE)
    {
        BfWriteByte(h, iClient);
        BfWriteByte(h, true);
        BfWriteString(h, sMsg);
        EndMessage();
    }
}

stock PrintSayToChatAll(const String:sMsg[], iColor)
{
    new iTarget = FindPlayerByTeam(iColor);
    if(iTarget)
    {
        new Handle:h = StartMessageAll("SayText2");
        if (h != INVALID_HANDLE)
        {
            BfWriteByte(h, iTarget);
            BfWriteByte(h, true);
            BfWriteString(h, sMsg);
            EndMessage();
        }
    } else PrintMsgToAll(sMsg);
}

stock PrintMsgToAll(const String:sMsg[], any:...)
{
    for (new i=1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i))
        {
            new Handle:hBf = StartMessageOne("SayText2", i);

            if (hBf != INVALID_HANDLE)
            {
                BfWriteByte(hBf, i);
                BfWriteByte(hBf, true);
                BfWriteString(hBf, sMsg);
                EndMessage();
            }
        }
    }
}

stock ReplaceColors(String:sMsg[], MaxLength)
{
    if(ReplaceString(sMsg, MaxLength, "{LIGHTGREEN}", "\x03", false)) return 0;
    if(ReplaceString(sMsg, MaxLength, "{GRAY}", "\x03", false)) return 1;
    if(ReplaceString(sMsg, MaxLength, "{RED}", "\x03", false)) return 2;
    if(ReplaceString(sMsg, MaxLength, "{BLUE}", "\x03", false)) return 3;
    if(ReplaceString(sMsg, MaxLength, "{TEAM}", "\x03", false)) return 4;

    return -1;
}

stock FindPlayerByTeam(iTeam)
{
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && GetClientTeam(i) == iTeam) return i;
    }

    return -1;
}

stock CheckCloseHandle(&Handle:handle)
{
    if (handle != INVALID_HANDLE)
    {
        CloseHandle(handle);
        handle = INVALID_HANDLE;
    }
}
 

Вложения

  • shop_chat_222_for_CSS_v34.smx
    12.7 КБ · Просмотры: 10
Сверху Снизу