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

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Чтобы узнать какая именно клавиша была нажатая на клавиатуре, то тут уже нужен хук на окно.
 

TheMY3

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

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

TheMY3

Известный
33
8
Последний вопрос на сегодня :)
C++:
    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(), я больше не нашел способа вызвать поле ввода.
 

AWRage

Активный
642
141
Вопрос по чата, хочу отправить сообщение в чат чтоб все видели.
Я вот нашел метод SF->getSAMP()->getChat()->AddChatMessage(), но я так понял это сообщение вижу только я.
SF->getSAMP()->getChat()->SetChatInputText(); но он вставляет в инпут чата данные, а как их отправить в чат?

И сразу вопрос, как можно отследить какая клавиша нажата?
Вот к примеру я сделаю SF->getGame()->isKeyPressed('W') && SF->getGame()->isKeyPressed('E') в одном условном блоке, я внутри смогу как то узнать какая именно клавиша была нажата?
SF->getSAMP()->getPlayers()->pLocalPlayer->Say();

if(key_pressed(W) && key_pressed(E))
{
if(key_pressed(W)
{}
else
{}
}
 

TheMY3

Известный
33
8
SF->getSAMP()->getPlayers()->pLocalPlayer->Say();
if(key_pressed(W) && key_pressed(E))
}
Нет такой функции.

Может кто по поводу SF->getSAMP()->getInput()->EnableInput() всё же может кто подсказать?
Короче что происходит:
C++:
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 пока не могу понять
 
Последнее редактирование:

TheMY3

Известный
33
8
Может кто подсказать как поступить.
Делаю сейчас локальный DXUT диалог на Cleo и надо бы как то его вызывать по команде и собирать данные с его инпутов, их там 3 будет и работать с ними через C++ SF API, как можно будет при нажатии на кнопку забирать данные в SF API? Через getCLEO есть методы взять переменные, но как их в cleo скрипте объявить чтоб забрать в коде? Может кто пример кода показать, примеров нигде не нашел.
Есть ещё вариант через getDialog но там всё ещё запутаней, по методам ничего не понятно, а доки то и нет
 

AWRage

Активный
642
141
Нет такой функции.

Может кто по поводу SF->getSAMP()->getInput()->EnableInput() всё же может кто подсказать?
Короче что происходит:
C++:
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 пока не могу понять
То, что ты делаешь через InputBox полнейшая хрень. Есть функция Say и её используют для отправки сообщения или команды.
PqBwK7L.png
 

TheMY3

Известный
33
8
То, что ты делаешь через InputBox полнейшая хрень. Есть функция Say и её используют для отправки сообщения или команды.
А при чем тут это? Мне надо чтобы текст вставлялся в инпут без отправки, чтоб дальше можно было дописать ID и отправить. Я вроде как с этим уже разобрался.
 

Sire Like

Blanche Bier
Друг
487
232
вот примерно такое
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "sqlite3.h"
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

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 ;

       SF->getSAMP()->getChat()->AddChatMessage(-1, sqlite3_libversion());
      
     
        init = true;
    }
 
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
            SF->initPlugin(mainloop, hModule);
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
сначала написал простое подключение к бд - скрипт не работает в игре,потом просто вывод версии библиотеки - тоже не работает, мож я чего-то не понимаю ?

в логах ничего интересного
позже сам попробую, через час отпишу, гляну
 

iAmerican

Известный
Друг
615
257
C++:
SF->getSAMP()->getDialog()->ShowDialog(1, DIALOG_STYLE_INPUT, "Введите ID", "", "Ок", "Отмена");

от сюда только хуком вытаскивать данные? или можно как то иначе?
и ещё вопрос сразу , как организовать свой диалог с вводом данных?
мне чисто в теории
 

Sire Like

Blanche Bier
Друг
487
232
C++:
SF->getSAMP()->getDialog()->ShowDialog(1, DIALOG_STYLE_INPUT, "Введите ID", "", "Ок", "Отмена");

от сюда только хуком вытаскивать данные? или можно как то иначе?
и ещё вопрос сразу , как организовать свой диалог с вводом данных?
мне чисто в теории
ага, хуков вытаскивай данные.
 

2Shae

Известный
149
8
Можно ли как-то использовать команду, которая недоступна для твоего ранга/фракции на сервере? Ну или хотя бы считать содержимое диалога, не открывая его (опять же из-за того, что ранг/фракция не та).
 

Sire Like

Blanche Bier
Друг
487
232
Можно ли как-то использовать команду, которая недоступна для твоего ранга/фракции на сервере? Ну или хотя бы считать содержимое диалога, не открывая его (опять же из-за того, что ранг/фракция не та).
Ну в моде проверка, так что нет.