Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Помогите прикол сделать.
Karandachik Дата: Пятница, 30.04.2021, 13:57:50 | Сообщение # 1
Сообщений: 60
Репутация: 3 [ +/- ]
Привет, задумала я сделать такой прикол.
На этом замечательном форуме, я нашла плагин который может выводить за игрока в чат предложения.
Сам игрок ничего не делает, но администратор может писать вместо него все что захочет.
Я использую этот прикол для наказания игрока который нарушает правила сервера.
Просто пишу вместо него сидя в спеках всякие гадости и он сам выходит с сервера crazy crazy crazy

Все здорово, кроме одного, мне самой все время приходиться писать за него в чате, а я бы хотела что бы это делал плагин.

Мне нужно пример кода как можно заставить игрока писать в чате рандомные предложения из конфига.
Раньше давно давно был такой плагин на админке maniadmin. Там суть такая выбрал игрока из списка и он начинает писать в чат все что есть в настроенном файле с интервалом в 3 секунды примерно.
Мне бы хоть кусочек кода с рандомным выводом сообщения в чат для игрока, хоть что-то что бы сдвинуться дальше.
 
_wS_ Дата: Пятница, 30.04.2021, 14:53:43 | Сообщение # 2
Код
#define SZF(%0) %0, sizeof(%0)

StringMap g_hTrie = null; // "1" -> "текст", "2" -> "текст" и тд.
int g_iWordCount = 0; // Всего фраз

public void OnMapStart() {
    Reload();
}

// Загрузка фраз из cfg/words.txt в g_hTrie
void Reload()
{
    g_iWordCount = 0;
    
    if (g_hTrie) {
        g_hTrie.Clear();
    }
    else{
        g_hTrie = new StringMap();
    }
    
    File f = OpenFile("cfg/words.txt", "rt");
    if (f)
    {
        char sWord[256], sWordNum[12];
        while (!f.EndOfFile() && f.ReadLine(SZF(sWord))) {
            if (sWord[0] != '/')
            {
                FormatEx(SZF(sWordNum), "%d", ++g_iWordCount);
                g_hTrie.SetString(sWordNum, sWord);
           }
      }
      delete f;
    }
    
    if (!g_iWordCount)
    {
        delete g_hTrie;
        //g_hTrie = null;
    }
}

void RandomFakeMessageFromPlayer(int client)
{
    if (g_hTrie)
    {
        char sWord[256], sWordNum[12];
        FormatEx(SZF(sWordNum), "%d", GetRandomInt(1, g_iWordCount));
        if (g_hTrie.GetString(sWordNum, SZF(sWord))) {
            FakeClientCommandEx(client, "say \"%s\"", sWord);
        }
    }
}
 
Karandachik Дата: Воскресенье, 02.05.2021, 20:23:01 | Сообщение # 3
Сообщений: 60
Репутация: 3 [ +/- ]
Спасибо, как всегда вы помогаете мне.
Я правильно поняла, предложения нужно вписать в файл cfg/words.txt?
Только увидела, это новый синтаксис кода... я со старым то еще разбираюсь, а на новом вообще плаваю.


Сообщение отредактировал Karandachik - Воскресенье, 02.05.2021, 20:25:24
 
_wS_ Дата: Воскресенье, 02.05.2021, 20:50:16 | Сообщение # 4
Цитата Karandachik ()
предложения нужно вписать в файл cfg/words.txt?

Да, каждое с новой строки.

Цитата Karandachik ()
это новый синтаксис кода... я со старым то еще разбираюсь, а на новом вообще плаваю.

Старый:

Код
#define SZF(%0) %0, sizeof(%0)

new Handle:g_hTrie = INVALID_HANDLE; // "1" -> "текст", "2" -> "текст" и тд.
new g_iWordCount = 0; // Всего фраз

public OnMapStart() {
    Reload();
}

// Загрузка фраз из cfg/words.txt в g_hTrie
Reload()
{
    g_iWordCount = 0;
     
    if (g_hTrie) {
        ClearTrie(g_hTrie);
    }
    else{
        g_hTrie = CreateTrie();
    }
     
    new Handle:f = OpenFile("cfg/words.txt", "rt");
    if (f)
    {
        decl String:sWord[256], String:sWordNum[12];
        while (!IsEndOfFile(f) && ReadFileLine(f, SZF(sWord))) {
            if (sWord[0] != '/')
            {
                FormatEx(SZF(sWordNum), "%d", ++g_iWordCount);
                SetTrieString(g_hTrie, sWordNum, sWord);
           }
        }
        CloseHandle(f);
    }
     
    if (!g_iWordCount)
    {
        CloseHandle(g_hTrie);
        g_hTrie = INVALID_HANDLE;
    }
}

stock RandomFakeMessageFromPlayer(client)
{
    if (g_hTrie)
    {
        decl String:sWord[256], String:sWordNum[12];
        FormatEx(SZF(sWordNum), "%d", GetRandomInt(1, g_iWordCount));
        if (GetTrieString(g_hTrie, sWordNum, SZF(sWord))) {
            FakeClientCommandEx(client, "say \"%s\"", sWord);
        }
    }
}
 
Karandachik Дата: Воскресенье, 09.05.2021, 12:21:33 | Сообщение # 5
Сообщений: 60
Репутация: 3 [ +/- ]
Спасибо огромнейшее. Напишу если получиться реализовать все как задумала.
 
  • Страница 1 из 1
  • 1
Поиск: