barspinoff
Известный
- 126
- 33
Подскажите, как получить никнейм игрока при RPC_ClientJoin.
Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin:
bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin
{
short int sPlayerID;
D3DCOLOR D3DPlayerColor;
byte isNPC, nameLen;
char szPlayerName[25];
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
params->bitStream->Read( sPlayerID ); // читаем ID игрока.
params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока.
params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет.
params->bitStream->Read( nameLen ); // длина ника.
params->bitStream->Read( szPlayerName, nameLen ); // ник.
szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.",
szPlayerName, sPlayerID ); // добавляем сообщение в чат.
};
return true; // успешно завершаем обработку RPC.
};
SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback
А как получить только свой никнейм?Код:Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin: bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC. { if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin { short int sPlayerID; D3DCOLOR D3DPlayerColor; byte isNPC, nameLen; char szPlayerName[25]; params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения. params->bitStream->Read( sPlayerID ); // читаем ID игрока. params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока. params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет. params->bitStream->Read( nameLen ); // длина ника. params->bitStream->Read( szPlayerName, nameLen ); // ник. szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.", szPlayerName, sPlayerID ); // добавляем сообщение в чат. }; return true; // успешно завершаем обработку RPC. }; SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback
А как получить только свой никнейм?
if (strstr(szPlayerName, "nickname") != NULL) {
SF->getSAMP()->getChat()->AddChatMessage(D3DPlayerColor, "%s[%d] Подключился к серверу.", szPlayerName, sPlayerID); // добавляем сообщение в чат.
}
Функция есть получения ника, ну а если так, то ID со своим сравнивай, или строку со строкой. Хотя я хз отправляется ли этот RPC при твоем коннектеА как получить только свой никнейм?
"nickname"? не понял. Мне нужен именно мой ник, под которым я зайду, а LocalPlayerName у меня иногда с кривыми символами отображается.C++:if (strstr(szPlayerName, "nickname") != NULL) { SF->getSAMP()->getChat()->AddChatMessage(D3DPlayerColor, "%s[%d] Подключился к серверу.", szPlayerName, sPlayerID); // добавляем сообщение в чат. }
хотя вроде будет правильнее strcmp , ну сам погугли, поймешь
никогда не видел каких-то идеальных интерфейсов в опенсорсных читах, у всех всегда всё по-своему. думал, знаю один такой вариант, хотел предложить, но сейчас глянул - тоже дерьмо. в общем, либо делать тоже как умеешь, либо использовать готовые универсальные gui - они уж точно подойдут под любые нужды. но если всё же найдёшь что-то годное - поделись, если не затруднит.Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.
Начал делать
Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.
https://zhyk.ru/forum/showthread.php?t=840968Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.
Начал делать
Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.
да-да, давно видел этот гайд на жуке, спасибо что напомнилhttps://zhyk.ru/forum/showthread.php?t=840968
Мне вот эта статья когда-то помогла. Делал тоже самое что и ты.
samp_dll = (uint32_t)LoadLibrary("samp.dll");
kek = (stScoreboardInfo *)(samp_dll + 0x21A0B4); //SAMP_SCOREBOARD_INFO 0x21A0B4
по этому адресу находится указатель на структуру, соответственно, его нужно разыменовать перед обращением к структуре.Жопа полыхает.
C++:samp_dll = (uint32_t)LoadLibrary("samp.dll"); kek = (stScoreboardInfo *)(samp_dll + 0x21A0B4); //SAMP_SCOREBOARD_INFO 0x21A0B4
Нубовопросы:дебаг вывод (вдруг ошибка в получении):
Посмотреть вложение 5839
(предпоследнее samp_dll, последнее kek->iIsEnabled )
проверка:
Посмотреть вложение 5840
все правильно. Идем дальше. Адрес 1b505d0, смотрим, ставим брекпоинт на запись
Посмотреть вложение 5841
разворачиваем, жмем tab, брекпоинт срабатывает
Посмотреть вложение 5842
1) какого хуя в углу на 1 скрине рендерится адрес, а не само значение
2) является ли адрес структуры адресом первого поля? Просто тогда не добавлял бы целую структуру ради одного значения
kek = *(stScoreboardInfo **)(samp_dll + 0x21A0B4); //SAMP_SCOREBOARD_INFO 0x21A0B4
Если ты про d3d9 тест , то их полно в интернете. Воспользуйся гуглом.есть похожая софтина в паблики?
http://www.unknowncheats.me/forum/direct3d/171874-kittonium-d3d9-test-environment.html
просто эта не работает