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

Dark_Knight

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

TheMY3

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

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

TheMY3

Известный
37
10
Последний вопрос на сегодня :)
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

Известный
37
10
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

Известный
37
10
Может кто подсказать как поступить.
Делаю сейчас локальный 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

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

Sire Like

Blanche Bier
Друг
487
235
вот примерно такое
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

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

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

Sire Like

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

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

2Shae

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

Sire Like

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