Другое SAMPFUNCS | API C++

Тема в разделе "C, C++", создана пользователем urShadow, 5 дек 2014.

  1. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    SF->getSAMP()->getPlayers()->pLocalPlayer->Say

    Так у тебя &&, блок выполнится только при нажатии обоих клавиш.
     
  2. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    Не так написал, имел в виду или, к примеру мне надо будет узнать какую клавишу от 1 до 0 нажал человек, чтоб не делать 10 блоков я бы хотел 1 с переменной в которой будет клавиша, если это возможно, я так понимаю это уже не API а средствами C++ надо делать?
     
  3. Dark_Knight

    Dark_Knight Цензура не пройдет.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.683
    Симпатии:
    890
    Репутация:
    225
    Чтобы узнать какая именно клавиша была нажатая на клавиатуре, то тут уже нужен хук на окно.
     
  4. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    Ладно, пока для первой версии программы сделаю просто статикой, потом буду искать способ сделать код лучше, ещё вопрос, можно ли как то добавить данные в буфер обмена через API? И вообще есть где то хоть не много информации о методах? А то я так каждый день писать буду сюда :)

    P.S. И ещё вопрос назрел, можно ли как то открыть инпут в чате? Который на F6 открывается вдруг кто не понял) Лажу по методам но что-то ничего похожего не нахожу (Ответ уже нашел, остается вопрос выше:) )
     
    #1964 Jadson, 31 дек 2016
    Последнее редактирование: 31 дек 2016
  5. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    Последний вопрос на сегодня :)
        if (SF->getGame()->isKeyPressed(0x31))
    {
          SF->getSAMP()->getInput()->EnableInput();
          SF->getSAMP()->getChat()->SetChatInputText(text here);
    }
    Вот так я пытаюсь ловить события при нажатии на 1, и всё хорошо если происходит другое действие, но не то что выше, когда при нажатии на 1 появляется поле ввода и текст в нём, всё как надо, но после закрытия это поля и отправки сообщения я нажимаю снова 1 и ничего не происходит, SF->getGame()->isKeyPressed(0x31) уже не видит нажатие, а если я нажму ещё раз 1 тогда всё работает, такое чувство что методом SF->getSAMP()->getInput()->EnableInput() я что-то преребиваю, потому что без него SF->getSAMP()->getChat()->SetChatInputText(text here) вставляет нормально данные в поле ввода, но я его не вижу. А нужно чтоб было поле ввода и мой текст. Причина точно в SF->getSAMP()->getInput()->EnableInput(), я больше не нашел способа вызвать поле ввода.
     
  6. Dark_Knight

    Dark_Knight Цензура не пройдет.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.683
    Симпатии:
    890
    Репутация:
    225
    Для буфера с обменов есть винапи. Для него все есть в гугле.
     
  7. AWRage

    AWRage Известный пользователь

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    58
    SF->getSAMP()->getPlayers()->pLocalPlayer->Say();

    if(key_pressed(W) && key_pressed(E))
    {
    if(key_pressed(W)
    {}
    else
    {}
    }
     
  8. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    Нет такой функции.

    Может кто по поводу SF->getSAMP()->getInput()->EnableInput() всё же может кто подсказать?
    Короче что происходит:
    if (SF->getGame()->isKeyPressed(0x31)) //нажимаю на 1
    {
           SF->getSAMP()->getChat()->SetChatInputText("text here");
        SF->getSAMP()->getInput()->EnableInput();
    }
    В итоге в чат идет text here1 и потом когда я нажимаю 1 во второй раз ничего не происходит, а когда в третий - уже снова идет вызов, такое чувство что из-за того что цифра 1 идет в чат не отпраляется событие keydown и только при 2 нажатии оно отправляется и выходит что на 3 раз уже при нажатии на 1 всё работает, как от этого избавиться?
    Может есть ещё способ отслеживать нажатие клавиши и чтоб она в чат не шла?

    UPD. Отправку цифры 1 в чат убрал через эмуляцию нажатия backspace, а вот почему после вызова EnableInput не работает снова вызов на цифру 1 пока не могу понять
     
    #1968 Jadson, 31 дек 2016
    Последнее редактирование: 31 дек 2016
  9. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    Может кто подсказать как поступить.
    Делаю сейчас локальный DXUT диалог на Cleo и надо бы как то его вызывать по команде и собирать данные с его инпутов, их там 3 будет и работать с ними через C++ SF API, как можно будет при нажатии на кнопку забирать данные в SF API? Через getCLEO есть методы взять переменные, но как их в cleo скрипте объявить чтоб забрать в коде? Может кто пример кода показать, примеров нигде не нашел.
    Есть ещё вариант через getDialog но там всё ещё запутаней, по методам ничего не понятно, а доки то и нет
     
  10. AWRage

    AWRage Известный пользователь

    Регистрация:
    10.07.2015
    Сообщения:
    646
    Симпатии:
    119
    Репутация:
    58
    То, что ты делаешь через InputBox полнейшая хрень. Есть функция Say и её используют для отправки сообщения или команды.[​IMG]
     
  11. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    272
    Репутация:
    39
    вангуем же,
    та да, почему бы и нет?
     
  12. Jadson

    Jadson Пользователь

    Регистрация:
    26.12.2016
    Сообщения:
    24
    Симпатии:
    7
    Репутация:
    0
    А при чем тут это? Мне надо чтобы текст вставлялся в инпут без отправки, чтоб дальше можно было дописать ID и отправить. Я вроде как с этим уже разобрался.
     
  13. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    272
    Репутация:
    39
    позже сам попробую, через час отпишу, гляну
     
  14. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    378
    Симпатии:
    87
    Репутация:
    16
    SF->getSAMP()->getDialog()->ShowDialog(1, DIALOG_STYLE_INPUT, "Введите ID", "", "Ок", "Отмена");
    от сюда только хуком вытаскивать данные? или можно как то иначе?
    и ещё вопрос сразу , как организовать свой диалог с вводом данных?
    мне чисто в теории
     
  15. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    272
    Репутация:
    39
    ага, хуков вытаскивай данные.
     
  16. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.2014
    Сообщения:
    116
    Симпатии:
    6
    Репутация:
    4
    Можно ли как-то использовать команду, которая недоступна для твоего ранга/фракции на сервере? Ну или хотя бы считать содержимое диалога, не открывая его (опять же из-за того, что ранг/фракция не та).
     
  17. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    272
    Репутация:
    39
    Ну в моде проверка, так что нет.
     
  18. Shaurma

    Shaurma Пользователь

    Регистрация:
    01.12.2014
    Сообщения:
    5
    Симпатии:
    3
    Репутация:
    0
    Когда открываю SFPlugin.sln. Что с этим делать?
    [​IMG]
     
  19. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.2014
    Сообщения:
    407
    Симпатии:
    272
    Репутация:
    39
    что-то мне подсказывает что требуется точка с запятой
    вот она ;
     
  20. bovilejate

    bovilejate Новичок

    Регистрация:
    09.01.2017
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
     if (id == 3)
        {
            LP->Say("/do В кармане лежит смартфон.");
            Sleep(2000);
            LP->Say("/me достал смартфон из кармана, после чего разблокировал его");
            Sleep(2000);
            LP->Say("/me открыл раздел \"Государственные новости\"");
            Sleep(2000);
            LP->Say("/me настроил волну на \"Государственные вещания\"");
            Sleep(2000);
            LP->Say("/me нажал на кнопку \"Вещать\"");
            Sleep(2000);
            LP->Say("/n MM | Были технические неполадки, просим прощения.");
            Sleep(2000);
            LP->Say("/me заблокировал смартфон и убрал в правый карман");
            return;
        }
    Чем заменить Sleep?
     
  21. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    Таймером, используя GetTickCount()
    Только с твоим кодом это будет не просто.
     
  22. bovilejate

    bovilejate Новичок

    Регистрация:
    09.01.2017
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Подскажи...
     
  23. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    static int timer = GetTickCount();
    if(GetTickCount() - timer > 2000)
    {
        // Действия внутри блока будут выполняться каждые 2 сек.
    
        timer = GetTickCount();
    }
    Примерно так, но в твоем случае сложнее
     
  24. bovilejate

    bovilejate Новичок

    Регистрация:
    09.01.2017
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Почему файл не читается? Код написан правильно
    fopen(".\\SAMPFUNCS\\punishment.txt", "r");
     
  25. Dark_Knight

    Dark_Knight Цензура не пройдет.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.683
    Симпатии:
    890
    Репутация:
    225
    .\\ попробуй убрать и лучше юзай std::ifstream и передавай туда полный путь.
     
  26. bovilejate

    bovilejate Новичок

    Регистрация:
    09.01.2017
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    Не выходит....
    std::ifstream file("C:\\Program Files(x86)\\GTA San Andreas\\SAMPFUNCS\\test.txt", std::ios::in);
    if (file)
    {
          SF->Log("+");
    }
    
    Разобрался
     
    #1986 bovilejate, 16 янв 2017
    Последнее редактирование: 16 янв 2017
  27. Dark_Knight

    Dark_Knight Цензура не пройдет.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.683
    Симпатии:
    890
    Репутация:
    225
    if(file.is_open())
     
  28. Shaurma

    Shaurma Пользователь

    Регистрация:
    01.12.2014
    Сообщения:
    5
    Симпатии:
    3
    Репутация:
    0
    ".\\SAMPFUNCS/punishment.txt"
    Можешь так попробовать
     
  29. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.2014
    Сообщения:
    116
    Симпатии:
    6
    Репутация:
    4
    Как вставить текст в поле ввода серверного диалога (DIALOG_STYLE_INPUT)?
     
  30. Boris Yeltsin

    Всефорумный модератор

    Регистрация:
    12.11.2015
    Сообщения:
    1.367
    Симпатии:
    547
    Репутация:
    138
    Проверяешь нужный ли тебе диалог открыт и юзаешь это
    SF->getSAMP()->getDialog()->SetInputText("text");
     
  31. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.2014
    Сообщения:
    116
    Симпатии:
    6
    Репутация:
    4
    Делал, поле ввода оставалось пустым.
    В RPC_ScrShowDialog делал проверку на окно авторизации:
    if(caption == "Авторизация")
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Диалог авторизации открыт");
                SF->getSAMP()->getDialog()->SetInputText(password);
                keybd_event(VK_RETURN, 0, 0, 0);
                keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
            }
    (да, сама проверка на открытый диалог работает)
     
    #1991 2Shae, 17 янв 2017
    Последнее редактирование: 17 янв 2017
  32. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    Ты прямо в теле хука чтоль делал? Если да то когда ты вызываешь SetInputText, диалога еще нет в игре(тыж его хукнул) и текст не вставляется. Вызывай функу после хука и приема рпц.
     
  33. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.2014
    Сообщения:
    116
    Симпатии:
    6
    Репутация:
    4
    Бля, эпичнейший фэйспалм:facepalm:
    Спасибо тебе, работает
     
  34. return

    return Известный пользователь

    Регистрация:
    29.07.2015
    Сообщения:
    82
    Симпатии:
    4
    Репутация:
    2
    а не проще юзать sendDialogResponse?
     
  35. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    Ты о чем?
     
  36. Nexiq

    Nexiq Известный пользователь

    Регистрация:
    08.02.2016
    Сообщения:
    46
    Симпатии:
    3
    Репутация:
    0
    Как сделать привязку по серийнику?
     
  37. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    378
    Симпатии:
    87
    Репутация:
    16
    
    
    bool biAM = false;
    
    void CALLBACK mainloop()
    {
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
            if (!SF->getSAMP()->IsInitialized())
                return;
            char VolumeNameBuffer[255], FileSystemNameBuffer[255];
            DWORD VolumeSerialNumber, MaximumComponentLength, FileSystemFlags;
            GetVolumeInformation("C:\\", VolumeNameBuffer, 255, &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, 255);
    
            if (VolumeSerialNumber == 1216947533)
                biAM = true;
            else
                biAM = false;
            init = true;
        }
        if (biAM) {
            // твоя всякая штука
        }
    }
    
    Это примитивная совсем.
     
  38. Woxa_|||_Tawer

    Woxa_|||_Tawer Новичок

    Регистрация:
    15.01.2017
    Сообщения:
    1
    Симпатии:
    0
    Репутация:
    0
    SFPlugin куда кидать я не понял
     
  39. BlackKnigga

    BlackKnigga с нг
    Друг

    Регистрация:
    10.01.2016
    Сообщения:
    821
    Симпатии:
    241
    Репутация:
    91
    Никуда. Видимо, тебе он не нужен.
     
  40. 2Shae

    2Shae Известный пользователь

    Регистрация:
    14.05.2014
    Сообщения:
    116
    Симпатии:
    6
    Репутация:
    4
    Можно ли принудительно получить данные из RPC?