Другое С/С++ Вопрос - Ответ

index

Известный
126
82
C++:
typedef int(__cdecl * func)(int someint, const char* data);

func f = (func)(dwSamp + 0x57F0);
f(1, "pidor");

samp+0x57F0 - функция для отправления сообщения в чат. Когда пробую вызвать - крашит. Что я делаю неправильно?
Это функция одного аргумента, возвращаемый тип - void.
Код:
void __stdcall sendSay(char *data)
 
Последнее редактирование:

Vintik

Мечтатель
Проверенный
1,471
920
Функция CreateRemoteThread (поток, который запускается в виртуальном адресном пространстве другого процесса) даёт возможность передать потому только один аргумент: "LPVOID lpParameter, // аргументы потока".
Хотел бы узнать, как передать потоку более одного аргумента (желательно с примером).
 

index

Известный
126
82
Функция CreateRemoteThread (поток, который запускается в виртуальном адресном пространстве другого процесса) даёт возможность передать потому только один аргумент: "LPVOID lpParameter, // аргументы потока".
Хотел бы узнать, как передать потоку более одного аргумента (желательно с примером).
https://blast.hk/threads/33035/
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
как отправить команду в чат?
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
как сделать задержку перед вводом текста в диалог, чтобы при этом игра не зависала ?
 

_=Gigant=_

Известный
134
191
what's difference between

1.
stOnFootData OnFoot;
memcpy(&OnFoot, &g_Players->pLocalPlayer->onFootData, sizeof(stOnFootData));

OnFoot->byteHealth = 50;

BitStream bsOnFoot;
bsOnFoot.Write((BYTE)ID_PLAYER_SYNC);
bsOnFoot.Write((PCHAR)&OnFoot, sizeof(stOnFootData));
g_RakFuncs->Send(&bsOnFoot, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);

and
2.
g_Player->pLocalPlayer->OnFootData.byteHealth ?

Is 1. better synced ?
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
Есть скрипт в который нужно запихнуть задержку между вводом текста в диалог, как это сделать без замораживания игрового процесса? (Отредактируйте мой код)

void CALLBACK mainloop()
{
if (SF->getSAMP()->getDialog()->iIsActive && SF->getSAMP()->getDialog()->DialogID == 1)
{
SF->getSAMP()->getDialog()->SetInputText("1");
// тут нужно сделать задержку
SF->getSAMP()->getDialog()->SetInputText("2");
// тут нужно сделать задержку
SF->getSAMP()->getDialog()->SetInputText("3");
// тут нужно сделать задержку
SF->getSAMP()->getDialog()->Close(1);
}
}
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
нужно разбить char * test = "12345" на цифры, чтобы можно было сделать так:
char nds[5];
sprintf(result, "%s%s%s%s%s", nds[0], nds[1], nds[2], nds[3], nds[4], nds[5])

когда пытаюсь делать test[0], test[1] ... - краш игры.
??
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
C++:
char text[] = "12345";
 text[0];   // 1
 text[1];   // 2
 text[2];   // 3
 text[3];   // 4
 text[4];   // 5
Смысл тебе писать на C++ , если ты даже основ не знаешь?
мне нужно чтобы было именно char * а не char[]

но если использовать такой метод с char *, то игру крашит
 

index

Известный
126
82
нужно разбить char * test = "12345" на цифры, чтобы можно было сделать так:
char nds[5];
sprintf(result, "%s%s%s%s%s", nds[0], nds[1], nds[2], nds[3], nds[4], nds[5])

когда пытаюсь делать test[0], test[1] ... - краш игры.
??
При спецификаторе %s идет обращение к адресу, записанному в передаваемый аргумент (т.е. переменная должна быть указателем на строку). Естественно, у тебя будет ошибка access violation at adress test[number].
https://ru.wikipedia.org/wiki/Система_типов_Си

Сначала неплохо бы основы выучить, как сказал товарищ сверху. Чтобы вывести однобайтовый символ - используй %c.
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
Код:
const auto myTask = []()
{
       Sleep(500);
        SF->getSAMP()->getDialog()->SetInputText("х");

         Sleep(500);
         SF->getSAMP()->getDialog()->SetInputText("у");
};
std::thread(myTask).detach();
- краш игры, в чём проблема ?