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

_Vine_

Активный
154
57
Как использовать
CLEO:
0AD1: show_formatted_text_highpriority "This is %.4X opcode" time 2000 0x0AD1
(printf) в SF API?
 

mkrn

Известный
67
61
Как использовать
CLEO:
0AD1: show_formatted_text_highpriority "This is %.4X opcode" time 2000 0x0AD1
(printf) в SF API?

C++:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0

void AddMessageJumpQ(char *text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl *)(char *, unsigned int, unsigned short, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}

вызывать так: AddMessageJumpQ("~G~Find ground Z...", 1500, 12, true);
 

vasiliy130198

Новичок
27
0
В общем использую следующий код на двух разных серверах. На одном всё нормально работает, а на втором крашит. Проблема наверное в считывании.. даже не знаю. Кто может подсказать?
C++:
        case ScriptRPCEnumeration::RPC_ScrTextDrawSetString:
        {
            WORD wTexdrawID;
            WORD wStrLen;
            char szStr[128] = "";// пробовал и 128, и 500, и 5000
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(wTexdrawID);
            params->bitStream->Read(wStrLen);
            params->bitStream->Read(szStr, wStrLen);
            szStr[wStrLen] = '\0';
        //    SF->getSAMP()->getChat()->AddChatMessage(-1, "%i || %s || %i", wTexdrawID, szStr, wStrLen);
            break;
        }
И каким образом можно снимать дамп, чтобы смотреть что приходит в bitstream (полную строку вывести)?
 

_Vine_

Активный
154
57
C++:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0

void AddMessageJumpQ(char *text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl *)(char *, unsigned int, unsigned short, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}

вызывать так: AddMessageJumpQ("~G~Find ground Z...", 1500, 12, true);
Спасибо большое, помог)

Какой есть способ отправки данных на хостинг?
Сам пользуюсь нубским, PHP файл на хостинге, который записывает инфу в файл, в скрипте InternetOpenA(0, "http://mysite.ru/file.php?text=123",0, 0, 0, 0).
Все бы ничего, багов пока не замечал, но есть один недостаток этого способа, в любом случае, при вызове InternetOpenA игра зависает на пару секунд, что очень неудобно.
Как это можно исправить, используя этот нубский способ или как лучше отправлять данные на хостинг?
 

ALF

Известный
Проверенный
320
537
@_Vine_

самый простой и самый ущербный вариант
C++:
void send(void *)
{
    // code
}

_beginthread(send, NULL, NULL);
 
  • Нравится
Реакции: _Vine_

_Vine_

Активный
154
57
@_Vine_

самый простой и самый ущербный вариант
C++:
void send(void *)
{
    // code
}

_beginthread(send, NULL, NULL);
Как раз что то подобное я и искал, спасибо большое!)
Не пойму только почему «ущербный»?
Я то не особо разбираюсь, но как по мне, функцию оно свою выполняет, а это главное)
 

NarutoUA

NarutoUA
BH Team
692
1,539
Как раз что то подобное я и искал, спасибо большое!)
Не пойму только почему «ущербный»?
Я то не особо разбираюсь, но как по мне, функцию оно свою выполняет, а это главное)
Ващет не сильно ущербный, в играх нетворк часть крутится в отдельном потоке
 

kawa operand

перерывпятьминут
602
333
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как получить введенные парметры команды? Типо гет ласт парамс
проорал
std::string param вроде принимает функция, это и есть параметры

Как раз что то подобное я и искал, спасибо большое!)
Не пойму только почему «ущербный»?
Я то не особо разбираюсь, но как по мне, функцию оно свою выполняет, а это главное)
C++:
unsigned long __stdcall foo(void*) {
    return 0;
}

CreateThread(0, 0, &foo, 0, 0, 0);
 
Последнее редактирование модератором:

jenekbueno

Известный
157
69
Код:
if (packetID == ScriptRPCEnumeration::RPC_ScrShowDialog) {
        WORD DialogID;
        BYTE style, caplen, button1_len, button2_len;
        char caption[255], button1[25], button2[25], info[0x1000];
        bs->Read(DialogID);
        bs->Read(style);
        bs->Read(caplen);
        bs->Read(caption, caplen);
        caption[caplen] = '\0';
        bs->Read(button1_len);
        bs->Read(button1, button1_len);
        button1[button1_len] = '\0';
        bs->Read(button2_len);
        bs->Read(button2, button2_len);
        button2[button2_len] = '\0';
        SF->getRakNet()->DecodeString(info, 0x1000, bs);
        std::string cap = caption, text = info;
        SF->Log("DialogID: %d - caption %s\n%s", DialogID, caption, info);
    }
чет меня крашит с этими параметрами, bs это params->bitstream ?
 

jenekbueno

Известный
157
69
Да. Все работает.
краш
C++:
bool CALLBACK recv_rpc(stRakNetHookParams *params)
{
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
    {
 
        WORD DialogID;
        BYTE style, caplen, button1_len, button2_len;
        char caption[255], button1[25], button2[25], info[0x1000];

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(DialogID);
        params->bitStream->Read(style);
        params->bitStream->Read(caplen);
        caption[caplen] = '\0';
        params->bitStream->Read(button1_len);
        params->bitStream->Read(button1, button1_len);
        button1[button1_len] = '\0';
        params->bitStream->Read(button2_len);
        params->bitStream->Read(button2, button2_len);
        button2[button2_len] = '\0';

        SF->getRakNet()->DecodeString(info, 0x1000, params->bitStream);
        std::string cap = caption, text = info;
        SF->Log("DialogID: %d - caption %s\n%s", DialogID, caption, info);
    }
    return true;
}