HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.04.2017, 14:10
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Цитата:
Сообщение от BlackKnigga  

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
;
}
 
Ответить с цитированием

  #2  
Старый 22.04.2017, 15:10
MISTER_GONWIK
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами: 6935116

Репутация: 183


По умолчанию

Цитата:
Сообщение от Снежок  

Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 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
)
;
 
Ответить с цитированием

  #3  
Старый 22.04.2017, 15:20
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Цитата:
Сообщение от MISTER_GONWIK  

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


Или первые два байта это цвет, а третий - длина?

Ответь пожалуйста, очень важно, я хочу наконец разобраться в теме
 
Ответить с цитированием

  #4  
Старый 22.04.2017, 15:23
MISTER_GONWIK
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами: 6935116

Репутация: 183


По умолчанию

Цитата:
Сообщение от Снежок  

Ну, согласно логгеру, там негде поместиться цвету и длине, серьёзно
Вот так выглядит лог сообщения в чат, когда я отправляю единицу:







Код:





Код:
[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. возможно у тебя старый раклоггер
 
Ответить с цитированием

  #5  
Старый 22.04.2017, 15:26
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Цитата:
Сообщение от MISTER_GONWIK  

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

  #6  
Старый 22.04.2017, 15:26
MISTER_GONWIK
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами: 6935116

Репутация: 183


По умолчанию

и на будущее,

C++:





Код:
.
.
->
ResetReadPointer
(
)
;


уже не нужно использовать

Цитата:
Сообщение от Dark_Knight  

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



именно

C++:





Код:
RPC_ScrClientMessage


нужен для этого
 
Ответить с цитированием

  #7  
Старый 22.04.2017, 15:21
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Цитата:
Сообщение от Снежок  

Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 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';
    }
 
Ответить с цитированием

  #8  
Старый 22.04.2017, 15:25
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Цитата:
Сообщение от Dark_Knight  

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

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

Цитата:
Сообщение от MISTER_GONWIK  

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

  #9  
Старый 23.04.2017, 13:46
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

У меня вопрос. Таким образом я могу преобразовать чар в строку для одной конкретной функции, чтобы не выделять переменную?

Если нет, то что я делаю таким образом?

SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(command))
 
Ответить с цитированием

  #10  
Старый 23.04.2017, 13:51
MISTER_GONWIK
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами: 6935116

Репутация: 183


По умолчанию

Цитата:
Сообщение от Снежок  

У меня вопрос. Таким образом я могу преобразовать чар в строку для одной конкретной функции, чтобы не выделять переменную?
Если нет, то что я делаю таким образом?
SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(command))
C++:





Код:
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
string
(
command
)
.
c_str
(
)
)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.