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

killian228

Потрачен
12
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
При отправке 138 rpc он читает ид игрока и причину выхода и выводит в чат, но получает неправильный ид игрока. Что не так?

C++:
rakhook::on_receive_rpc += [](unsigned char& id, RakNet::BitStream*&& bs) -> bool {
        if (RakNetns) {
            if (id == 138) {
                int PlayerId;
                int Reason;
                bs->Read(PlayerId);
                bs->Read(Reason);
               
                char Buffer[128];
                rakhook::emul_rpc(138, *bs); // эмуляция RPC.
                if (Reason == 0) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: Crash"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                if (Reason == 1) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: /q"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                if (Reason == 2) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: Kick/Ban"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                add_chat_message(-1, Buffer);
            }
        }
        return true;
    };
 

4el0ve4ik

Известный
Всефорумный модератор
1,560
1,379
При отправке 138 rpc он читает ид игрока и причину выхода и выводит в чат, но получает неправильный ид игрока. Что не так?

C++:
rakhook::on_receive_rpc += [](unsigned char& id, RakNet::BitStream*&& bs) -> bool {
        if (RakNetns) {
            if (id == 138) {
                int PlayerId;
                int Reason;
                bs->Read(PlayerId);
                bs->Read(Reason);
             
                char Buffer[128];
                rakhook::emul_rpc(138, *bs); // эмуляция RPC.
                if (Reason == 0) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: Crash"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                if (Reason == 1) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: /q"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                if (Reason == 2) {
                    sprintf(Buffer, xorstr("%s[%d] Cause left the server: Kick/Ban"), g_SAMP->GetPlayerPool()->GetName(PlayerId), PlayerId);
                }
                add_chat_message(-1, Buffer);
            }
        }
        return true;
    };
Parameters: UINT16 wPlayerID, UINT8 reason
а ты все как int читаешь.
 

Ltall

Потрачен
14
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:
  • Злость
  • Нравится
Реакции: kizn и Savchik Blazer

Ltall

Потрачен
14
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как можно отправить сообщения в чат по кнопке не используя дополнительный библиотек? asi
C++:
struct c_chat* g_chat{ nullptr };
uintptr_t base_address{ 0 };

unsigned long get_address(uintptr_t offset)
{
    return base_address + offset;
}

void initialize()
{
    base_address = reinterpret_cast<uintptr_t>(GetModuleHandleA(xorstr("samp.dll")));
    g_chat = *reinterpret_cast<struct c_chat**>(get_address(0x26E8C8));
}

void add_chat_message(u_long color, const char* szText)
{
    ((void(__thiscall*)(c_chat*, unsigned long, const char*))get_address(0x679F0))(g_chat, color, szText);
}
void function()
{
    if (GetAsyncKeyState('key'))
    {

        initialize()

        add_chat_message(-1, "text")
     }
}
 
Последнее редактирование:

sqwwexx

Известный
64
1
хочу задать легкий вопрос, если я занес в переменную какую либо строчку, допустим BLASTHACK FORUM, как мне проверить, если переменная имеет BLASTHACK, то выполнять одно, если не имеет то другое
 

F0RQU1N and

Известный
1,294
501
хочу задать легкий вопрос, если я занес в переменную какую либо строчку, допустим BLASTHACK FORUM, как мне проверить, если переменная имеет BLASTHACK, то выполнять одно, если не имеет то другое
гуглом надо тебе бы научится пользвоватся, std::string::find или strstr используй
 

MeG@LaDo[N] ^_^

Известный
280
322
насчет анонимных функций,в плане оптимизации они вообще как? Есть смысл их использовать
есть два кода :1.стандарт
1658961880485.png

2.с анонимной функцией
1658961891635.png

и я пошел в иду и увидел что в коде которая юзает анонимную функцию намного больше говна
реверсил без дампа
Анонимная функа:
1658961936962.png

Второй вариант:
1658961963123.png

и у меня вопрос,что же лучше использовать для маленьких функций?
 

F0RQU1N and

Известный
1,294
501
насчет анонимных функций,в плане оптимизации они вообще как? Есть смысл их использовать
есть два кода :1.стандарт
Посмотреть вложение 159726
2.с анонимной функцией
Посмотреть вложение 159727
и я пошел в иду и увидел что в коде которая юзает анонимную функцию намного больше говна
реверсил без дампа
Анонимная функа:
Посмотреть вложение 159728
Второй вариант:
Посмотреть вложение 159729
и у меня вопрос,что же лучше использовать для маленьких функций?
ну как видишь второй вариант а ещё у тебя /Gs зачем то стоит