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

ishi

Известный
493
110
Немножко оффтоп, но всё же
Как в 13й студии включить показ времени, затраченного на сборку проекта?
И ещё. Как сделать так, чтобы выводило время, затраченное на выполнение коллбека? (ну, тип, начался отсчёт как он начнёт работать, и по возврату выдало время)
p.s. Гоголь не особо прошарен, всякая всячина по студии вылезла, но конкретно моего вопроса не выдало
 

BlackKnigga

Известный
BH Team
922
443
Немножко оффтоп, но всё же
Как в 13й студии включить показ времени, затраченного на сборку проекта?
p.s. Гоголь не особо прошарен, всякая всячина по студии вылезла, но конкретно моего вопроса не выдало
Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing
Нашел в гугле с первого запроса. Проверяй
 
  • Нравится
Реакции: ishi

ishi

Известный
493
110
Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing
Нашел в гугле с первого запроса. Проверяй
Верю на слово, я же не чекаю каждую страницу, а читаю превьюхи

Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр
C++:
bool CALLBACK irpc(stRakNetHookParams *params)
{
   if (params->packetId==101)
   {
     params->bitStream->ResetReadPointer();
     int qwe = params->bitStream->GetNumberOfBitsUsed();
     int qq = (qwe - 16);
     params->bitStream->IgnoreBits(16);
     int ww = BITS_TO_BYTES(qq);
     char ttt[ww];
     params->bitStream->Read(ttt);
     std::string str(ttt);
     SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", ttt);
     //byte packId;
     //params->bitStream->Read(packId);
     //D3DCOLOR color;
     //params->bitStream->Read(color);
   }
   return true;
}
 
Последнее редактирование модератором:

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,259
1,737
Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр
C++:
bool CALLBACK irpc(stRakNetHookParams *params)
{
   if (params->packetId==101)
   {
     params->bitStream->ResetReadPointer();
     int qwe = params->bitStream->GetNumberOfBitsUsed();
     int qq = (qwe - 16);
     params->bitStream->IgnoreBits(16);
     int ww = BITS_TO_BYTES(qq);
     char ttt[ww];
     params->bitStream->Read(ttt);
     std::string str(ttt);
     SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", ttt);
     //byte packId;
     //params->bitStream->Read(packId);
     //D3DCOLOR color;
     //params->bitStream->Read(color);
   }
   return true;
}
C++:
D3DCOLOR color = -1;
int length = 0;
char message[256]{ 0 };

param->bitStream->Read(color);
param->bitStream->Read(length);
param->bitStream->Read(message, length);
 
Последнее редактирование:
  • Нравится
Реакции: ishi

ishi

Известный
493
110
C++:
D3DCOLOR color = -1;
int length = 0;
char message[256]{ 0 };

param->bitStream->Read(color);
param->bitStream->Read(length);
param->bitStream->Read(message, length);
Ну, согласно логгеру, там негде поместиться цвету и длине, серьёзно
Вот так выглядит лог сообщения в чат, когда я отправляю единицу:
Код:
[13:52:27.700] > [RPC Recv] RPC_Chat[101](length: 4 bytes, 32 bits)
> dump:
0000  00 00 01 31  ...1
Или первые два байта это цвет, а третий - длина?
Ответь пожалуйста, очень важно, я хочу наконец разобраться в теме
 

Dark_Knight

Me, me and me.
Друг
4,056
2,075
Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр
C++:
bool CALLBACK irpc(stRakNetHookParams *params)
{
   if (params->packetId==101)
   {
     params->bitStream->ResetReadPointer();
     int qwe = params->bitStream->GetNumberOfBitsUsed();
     int qq = (qwe - 16);
     params->bitStream->IgnoreBits(16);
     int ww = BITS_TO_BYTES(qq);
     char ttt[ww];
     params->bitStream->Read(ttt);
     std::string str(ttt);
     SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", ttt);
     //byte packId;
     //params->bitStream->Read(packId);
     //D3DCOLOR color;
     //params->bitStream->Read(color);
   }
   return true;
}
Первое. Не надо юзать иды при чтении РПЦ. Большинство просто не помнят все иды на изусть и не удобно так читать. Юзай значение с eNum.
Второе. Код вообще не правильный. Если irpc это входящие РПЦ, то если мне память не изменяет, то он только исходящий, но может быть и входящим тоже. Прочекаешь
Третье. Вот тебе страница со структурами РПЦ. https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1
Четвертое. Вот тебе рабочий код и пример как вообще строки надо читать.
Код:
if (params->packetId == RPCEnumeration::RPC_ServerCommand) {
        DWORD len;
        char command[256];
        BitStream *bs = params->bitStream;
        bs->ResetReadPointer();
        bs->Read(len);
        bs->Read(command, len);
        command[len] = '\0';
    }
 
  • Нравится
Реакции: ishi

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,259
1,737
Ну, согласно логгеру, там негде поместиться цвету и длине, серьёзно
Вот так выглядит лог сообщения в чат, когда я отправляю единицу:
Код:
[13:52:27.700] > [RPC Recv] RPC_Chat[101](length: 4 bytes, 32 bits)
> dump:
0000  00 00 01 31  ...1
Или первые два байта это цвет, а третий - длина?
Ответь пожалуйста, очень важно, я хочу наконец разобраться в теме
ты чёт какой-то левый рпс ловишь, так-то над эт:
C++:
if (param->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) // id: 93
{
     ..
}

p.s. возможно у тебя старый раклоггер
 
  • Нравится
Реакции: ishi

ishi

Известный
493
110
Второе. Код вообще не правильный. Если irpc это входящие РПЦ, то если мне память не изменяет, то он только исходящий, но может быть и входящим тоже. Прочекаешь
В собейтовом .ini смотрел, он там одновременно и входящий и исходящий, ид и название идентичны

За справочку и пример огромное спасибо.

p.s. возможно у тебя старый раклоггер
отсюда логгер качал, тот что для 0.3.7
 

Dark_Knight

Me, me and me.
Друг
4,056
2,075
ты чёт какой-то левый рпс ловишь, так-то над эт:
p.s. возможно у тебя старый раклоггер
Если он ловит входящие сообщения от сервера, то РПЦ не правильный. Если только сообщения, которые он отправил в чат без команды, то верный ид. Для исходящих команд другой РПЦ.
 

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,259
1,737
и на будущее,
C++:
..->ResetReadPointer();
уже не нужно использовать

Если он ловит входящие сообщения от сервера, то РПЦ не правильный. Если только сообщения, которые он отправил в чат без команды, то верный ид. Для исходящих команд другой РПЦ.
если чё, то
81b81a276c.png


именно
C++:
RPC_ScrClientMessage
нужен для этого
 
  • Нравится
Реакции: ishi