Сравнивать значение по ключу

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Здравствуйте, подскажите пожалуйста как из файла сравнивать значение по ключу и выводить значение из второго файла?

Идея такова, игрок пишет в чат слово, записываем в переменную text, сравниваем text и text2 если true то выводим текст из второго файла. Надо как то в text2 засунуть переменную а не ключ, а то получается что я сравниваю по ключу.

То что смог сделать с помощью поиска 🙂
Код:
public OnPluginStart()
{
    HookEvent("player_say", OSChatBot);
}

void OSChatBot(Event sChat, const char[] sName, bool dontBroadcast)
{
    char sText[256];
    char sVopros[256];

    char szPath[256];
    char szBuffer[256];

    int iClient = GetClientOfUserId(sChat.GetInt("userid")); // Получаем индекс игрока

    GetEventString(sChat, "text", sText, sizeof(sText)); // Ловим строку, написанную игроком в чат и записываем в sText

    BuildPath(Path_SM, szPath, sizeof(szPath), "data/vopros.ini");    // Формируем путь к файлу
    KeyValues hKeyValues = new KeyValues("Vopros");
    if (hKeyValues.ImportFromFile(szPath))    // Загружаем из файла
    {
        hKeyValues.GetString("%s", sText, sizeof(sText)); // Получает строку по ключу

        FormatEx(sVopros, sizeof(sVopros), "1", szBuffer); // Пишешь свою строку, которую хочешь поймать, она записывается в sVopros

        if (StrEqual(sText, sVopros, true)) // Сравниваем 2 строки (sText и sVopros)
        {
            PrintToChat(iClient, "hello"); // Если они равны, то пишем, что равны
        }
        else
        {
            PrintToChat(iClient, "ERROR"); // Если не равны, то пишем, что не равны
        }
    }
}
 

Manifest

Ура, не такой как все
Сообщения
180
Реакции
127
Данный пользователь был уличен в использовании бэкдора в приватных плагинах. Крайне не рекомендуется покупать какие либо товары у пользователя.
а чем такой вариант не устраивает?
Сообщения автоматически склеены:

Из того что понял, выглядит это примерно так.
Не было времени, да и желания разбираться с File.Position параметром, так что:
Код не претендует на звание идеального, поскольку весьма костылен, но при этом рабочий.

C++:
public OnPluginStart()
{
    HookEvent("player_say", OSChatBot);
}

void OSChatBot(Event sChat, const char[] sName, bool dontBroadcast)
{
    char sText[256], szBuffer[256];
    int iClient = GetClientOfUserId(sChat.GetInt("userid")); // Получаем индекс игрока
    GetEventString(sChat, "text", sText, sizeof(sText)); // Ловим строку, написанную игроком в чат и записываем в sText

    FReturnAnswer(sText, szBuffer, sizeof szBuffer);
    if (szBuffer[0]) { // ответ не пустой?
        PrintToChat(iClient, "[%s]: %s", sText, szBuffer);
       }
}

void FReturnAnswer(char[] sPhrase, char[] sAnswer, int iLen) {
    //PrintToChatAll("[OSChatBot] %s # Пытаемся прочитать файлы", sPhrase);
    int iPosition = 0; // Будущая позиция
    bool bKeywordExist = false;
    File hFile = OpenFile("key_phrases.txt", "r"); // Открываем файл ключевых фраз
    if (hFile)
    {
        char sKPhrase[PLATFORM_MAX_PATH];
        while (!hFile.EndOfFile() && hFile.ReadLine(sKPhrase, PLATFORM_MAX_PATH)) // Если файл не закончился->Читаем строку
        {
            //PrintToChatAll("[OSChatBot] Открыт файл.");
            if (TrimString(sKPhrase) > 2) // Обрезаем символы конца строки
            {            
                //PrintToChatAll("[OSChatBot] line - %s", sKPhrase);            
                if (StrEqual(sKPhrase, sPhrase)) { // Сравниваем нашу фразу со списком ключевых
                    bKeywordExist = true;
                    //PrintToChatAll("[OSChatBot] Найдено совпадение на позиции # %d", iPosition);
                    break;
                } else {
                    iPosition++;
                }
             
                //PrintToChatAll("[OSChatBot] iPosition = %d", iPosition);
            }
        }
     
        if (bKeywordExist) {
            hFile = OpenFile("answer_phrases.txt", "r"); // Открываем файл ответных фраз
            if (hFile) {
                for (int x = 0; x <= iPosition; x++) {
                    if (x == iPosition) {
                        hFile.ReadLine(sAnswer, iLen); // Читаем ответ на ключевую фразу и сразу записываем
                        //PrintToChatAll("[OSChatBot] Найден ответ # %s", sAnswer);
                        break;
                    } else hFile.ReadLine(sAnswer, iLen);
                }
            }
        }
     
        delete hFile;
    }
}

7iVaMYR.png
 
Последнее редактирование:
Сверху Снизу