FakeSay

xstage

🏹
Сообщения
726
Реакции
754
  • Автор ресурса
  • #1
xstage добавил(а) новый ресурс:

FakeSay - Позволяет администратору писать сообщения от имени игроков

Плагин позволяет администратору с определенным флагом доступа, который настраивается через квар: sm_fakesay_flag по умолчанию стоит "z", писать от имени игроков.

Посмотреть вложение 77597

В планах сделать:
  1. Выбор всех или нескольких игроков
  2. Беспрерывный ввод

Узнать больше об этом ресурсе...
 

Black_Yuzia

Зарабатываю на жизнь Мемами про Крузю.
Сообщения
693
Реакции
372
Чисто предложение.

Я правда ресурсом не пользуюсь но все же 👀


 
Последнее редактирование:

romeo7

Участник
Сообщения
189
Реакции
93
Простой и удобный метод для ксго.
void TCPrintToChat(int client, char[] sPrefixColor, char[] sPrefix, char[] sTranlation):
public void TCPrintToChat(int client, char[] sPrefixColor, char[] sPrefix, char[] sTranlation)
{
    char sOutput[255];
    Format(sOutput, sizeof(sOutput), " %s%s \x01%t", sPrefixColor, sPrefix, sTranlation);
    ReplaceString(sOutput, 255, "{default}",    "\x01");
    ReplaceString(sOutput, 255, "{darkred}",    "\x02");
    ReplaceString(sOutput, 255, "{pink}",        "\x03");
    ReplaceString(sOutput, 255, "{green}",        "\x04");
    ReplaceString(sOutput, 255, "{lightgreen}",    "\x05");
    ReplaceString(sOutput, 255, "{lime}",        "\x06");
    ReplaceString(sOutput, 255, "{red}",        "\x07");
    ReplaceString(sOutput, 255, "{grey}",        "\x08");
    ReplaceString(sOutput, 255, "{olive}",        "\x09");
    ReplaceString(sOutput, 255, "{lightblue}",    "\x0B");
    ReplaceString(sOutput, 255, "{blue}",        "\x0C");
    ReplaceString(sOutput, 255, "{purple}",        "\x0E");
    ReplaceString(sOutput, 255, "{darkorange}",    "\x0F");
    ReplaceString(sOutput, 255, "{orange}",        "\x10");
    PrintToChat(client, sOutput);
}
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@romeo7, а сейчас тяжёлый и занимает 5 гигов на диске? Ок
 

uonri

Участник
Сообщения
30
Реакции
3
Прикольно. Сделай менюшку с уже заранее созданными фразами что-бы не писать все время)
 

xstage

🏹
Сообщения
726
Реакции
754
  • Автор ресурса
  • #7

Faya™

Жуестер
Сообщения
867
Реакции
457
C#:
bool bSay[MAXPLAYERS+1];
int iFlag;
ArrayList hList;

public void OnPluginStart()
{
    ConVar hCvar = CreateConVar("sm_fakesay_flag", "z", "Флаг для доступа к !fakesay");
    hCvar.AddChangeHook(ConVarChanged_Callback);

    char szFlag[4];
    hCvar.GetString(szFlag, sizeof(szFlag));

    iFlag = ReadFlagString(szFlag);

    delete hList;
    hList = new ArrayList();

    LoadTranslations("fakesay.phrases");
}

public void OnClientPutInServer(int client)
{
    bSay[client] = false;
}

void ConVarChanged_Callback(ConVar convar, const char[] oldValue, const char[] newValue)
{
    char szFlag[4];

    convar.GetString(szFlag, sizeof(szFlag));
    iFlag = ReadFlagString(szFlag);
}

void OpenMenu(int iClient)
{
    static char szUserID[8];
    static char szBuffer[MAX_NAME_LENGTH];

    Menu hMenu = new Menu(FakeSayMenu_CallBack, MenuAction_End | MenuAction_Select);
    hMenu.SetTitle("%T", "Menu_title", iClient);

    for(int i = MaxClients + 1, iUserID; --i;)
    {
        if(IsClientInGame(i) && i != iClient && GetClientTeam(i) != 1)
        {
            iUserID = GetClientUserId(i);

            IntToString(iUserID, szUserID, sizeof(szUserID));
            FormatEx(szBuffer, sizeof szBuffer, "%N [%s]", i, hList.FindValue(iUserID) != -1 ? "+" : "-");

            hMenu.AddItem(szUserID, szBuffer);
        }
    }

    hMenu.Display(iClient, MENU_TIME_FOREVER);
}

public Action OnClientSayCommand(int client, const char[] command, const char[] sArgs)
{
    if(bSay[client])
    {
        if(!strcmp(sArgs, "!cancel", false))
        {
            CGOPrintToChat(client, "%T", "Cancel_chat", client);
            bSay[client] = false;
        }
        else
        {
            if(!hList.Length)
            {
                CGOPrintToChat(client, "%T", "SelectPlayer_Or_Cancel", client);
            }
            else
            {
                for(int i = 0, iTargetIndex; i < hList.Length; i++)
                {
                    iTargetIndex = GetClientOfUserId(hList.Get(i));

                    if(iTargetIndex > 0 && IsClientInGame(iTargetIndex))
                    {
                        FakeClientCommand(iTargetIndex, "say %s", sArgs);
                    }
                }
            }
        }

        return Plugin_Handled;
    }

    if(!strcmp(sArgs, "!fakesay", false) && GetUserFlagBits(client) & iFlag)
    {
        OpenMenu(client);

        return Plugin_Handled;
    }

    return Plugin_Continue;
}

int FakeSayMenu_CallBack(Menu hMenu, MenuAction hAction, int client, int item)
{
    switch(hAction)
    {
        case MenuAction_End:
        {
            delete hMenu;
        }
        case MenuAction_Select:
        {
            if(bSay[client] == false)
            {
                bSay[client] = true;

                CGOPrintToChat(client, "%T", "Say_msg", client);
            }

            static char szItem[8];
            GetMenuItem(hMenu, item, szItem, sizeof(szItem));

            int iTarget = StringToInt(szItem);
            int iIndex = hList.FindValue(iTarget);

            if(iIndex != -1)
            {
                hList.Erase(iIndex);
            }
            else
            {
                hList.Push(iTarget);
            }

            OpenMenu(client);
        }
    }
   
    return 0;
}
Сообщения автоматически склеены:

P.S Не проверял. Так выглядит по логичнее без всяких доп. переменных ненужных
 
Последнее редактирование:

gtixon

Участник
Сообщения
1,078
Реакции
401
Требует файл перевода. А где я его возьму, ааа!?
UP: ВЗяли в старой версии плагина
 

✨ Angel ✨

Участник
Сообщения
13
Реакции
0
можно узнать какие папки установить чтоб работал этот плагины ?????
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@angel223, всё как обычно:
  • файл *.sp скомпилить с помощью SM то же версии, что на сервере, и скомпиленный файл *.smx закинуть в папку с плагинами
  • файл *.txt закинуть в папку переводов
  • файл *.smx из архива удалить за ненадобностью
 

✨ Angel ✨

Участник
Сообщения
13
Реакции
0
спс
@angel223, всё как обычно:
  • файл *.sp скомпилить с помощью SM то же версии, что на сервере, и скомпиленный файл *.smx закинуть в папку с плагинами
  • файл *.txt закинуть в папку переводов
  • файл *.smx из архива удалить за ненадобностью
спс
 

babka68

Участник
Сообщения
2,124
Реакции
956
Сверху Снизу