Вопросы и ответы
|
|
QnewRoute |
Дата: Воскресенье, 24.04.2016, 17:06 | Сообщение # 2596
|
Боец
Сообщений: 154
Статус: Offline
|
RakNet - это сетевой движок, используемый в SA:MP для обмена данными между игроками и сервером. Клиент отправляет пакет серверу, сервер его обрабатывает и рассылает другим игрокам - таким образом это работает. В этом уроке я покажу как отправлять свои пакеты и заносить в них данные, и как перехватывать отправляемые/получаемые пакеты и читать/перезаписывать данные.
Отправка пакетов
Пример отправки пакета ID_PLAYER_SYNC:
Код stOnFootData sync; // объявляем объект структуры stOnFootData, в которой хранятся данные. memset( &sync, 0, sizeof( stOnFootData ) ); // обнуляем. sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData; // копируем данные из структуры локального игрока. sync.byteHealth = 100; // записываем значение кол-ва жизней ( к примеру ). BitStream bsActorSync; // объявляем объект класса BitStream, в котором хранятся пакетные данные. bsActorSync.Write( ( BYTE ) ID_PLAYER_SYNC ); // записываем ID пакета. bsActorSync.Write( ( PCHAR ) &sync, sizeof( stOnFootData ) ); // записываем данные из структуры sync SF->getRakNet()->SendPacket( &bsActorSync ); // отправляем пакет на сервер.
RPC ( Remote procedure call ) - оболочка пакета ID_RPC, предназначена для удаленного выполнения определенных событий. Все RPC перечислены в RPCEnumeration и ScriptRPCEnumeration. Пример использования RPC_RequestClass, который запрашивает у сервера сменить наш класс ( скин ) на сервере:
Код void CALLBACK cmd_setclass( std::string param ) // объявляем чат-команду /setclass < id > { BitStream bsClass; // объявляем объект класса BitStream, в котором хранятся пакетные данные. bsClass.Write( std::stoi( param ) ); // записываем в него ID переданный в команду. SF->getRakNet()->SendRPC( RPC_RequestClass, &bsClass ); // отправляем RPC }; SF->getSAMP()->registerChatCommand( "setclass", cmd_setclass ); // регистрируем команду
Перехват пакетов
Средствами API можно установить четыре вида перехватов:
RAKHOOK_TYPE_OUTCOMING_RPC - RPC отправленный серверу
RAKHOOK_TYPE_OUTCOMING_PACKET - Пакет отправленный серверу
RAKHOOK_TYPE_INCOMING_RPC - RPC пришедший от сервера.
RAKHOOK_TYPE_INCOMING_PACKET - Пакет пришедший от сервера.
Пример перехвата отправляемого пакета ID_PLAYER_SYNC:
Код bool CALLBACK outcomingData( stRakNetHookParams *params ) // определение callback-функции которая будет вызвана при отправке какого либо пакета { if( params->packetId == PacketEnumeration::ID_PLAYER_SYNC ) // если отправляемый пакет ID_PLAYER_SYNC { stOnFootData data; // определяем объект в который сохраним отправляемые данные memset( &data, 0, sizeof( stOnFootData ) ); // обнуляем byte packet; params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало params->bitStream->Read( packet ); // читаем ID пакета params->bitStream->Read( (PCHAR)&data, sizeof( stOnFootData ) ); // читаем отправляемые данные params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 255, 255, 0 ), "Наша скорость: %.2f %.2f %.2f", data.fMoveSpeed[0], data.fMoveSpeed[1], data.fMoveSpeed[2] ); // пишем в чат скорость нашего передвижения записанную в пакет data.fMoveSpeed[0] = rand()%10; data.fMoveSpeed[1] = rand()%10; data.fMoveSpeed[2] = rand()%10; // перезаписали скорость на случайную, получается эффект похожий на Pizdarvanka. params->bitStream->ResetWritePointer(); // обнуляем оффсет записи params->bitStream->Write( packet ); // пишем ид пакета params->bitStream->Write( (PCHAR)&data, sizeof( stOnFootData ) ); // пишем обновленные данные }; return true; // успешно завершаем отправку пакета }; SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, outcomingData ); // регистрируем 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
by urShadow
* Мои работы: - [CLEO] Brute Bank Code for Advance RP - http://cheat-master.ru/forum/129-549067-1 - [CLEO] Make Ammo for Arizona RP - http://cheat-master.ru/forum/129-579088-1 - [CLEO] Teleport for Evolve RP - http://cheat-master.ru/forum/129-689462-1 - [CLEO] Sliv Form for Evolve RP - http://cheat-master.ru/forum/129-690294-1 - [CLEO] /ad for Evolve RP - http://cheat-master.ru/forum/129-691037-1 - [CLEO] Killer for Evolve RP - http://cheat-master.ru/forum/129-691847-1
19.05.17 - Cheater CM
* Помогаю с CLEO-скриптингом/C# - пишите в личку
|
|
|
|
k1sher |
Дата: Воскресенье, 24.04.2016, 21:58 | Сообщение # 2597
|
Любитель
Сообщений: 32
Статус: Offline
|
Вопрос: Можете пожалуйста дать C++ код для создания AutoShot for samp
|
|
|
|
QnewRoute |
Дата: Понедельник, 25.04.2016, 13:33 | Сообщение # 2598
|
Боец
Сообщений: 154
Статус: Offline
|
k1sher, за тебя никто не будет писать полный код
* Мои работы: - [CLEO] Brute Bank Code for Advance RP - http://cheat-master.ru/forum/129-549067-1 - [CLEO] Make Ammo for Arizona RP - http://cheat-master.ru/forum/129-579088-1 - [CLEO] Teleport for Evolve RP - http://cheat-master.ru/forum/129-689462-1 - [CLEO] Sliv Form for Evolve RP - http://cheat-master.ru/forum/129-690294-1 - [CLEO] /ad for Evolve RP - http://cheat-master.ru/forum/129-691037-1 - [CLEO] Killer for Evolve RP - http://cheat-master.ru/forum/129-691847-1
19.05.17 - Cheater CM
* Помогаю с CLEO-скриптингом/C# - пишите в личку
|
|
|
|
Dizel995 |
Дата: Пятница, 29.04.2016, 11:27 | Сообщение # 2599
|
Новичок
Сообщений: 6
Статус: Offline
|
Где взять исходник собейта для 0.3.7? или как старые исходники обновить? Добавлено (29.04.2016, 11:27) --------------------------------------------- Как старый исходник собейта перевести на 0.3.7?
|
|
|
|
fragma |
Дата: Пятница, 29.04.2016, 11:47 | Сообщение # 2600
|
|
Dizel995, обновить адресса и структуры.
Пишу на заказ CLEO скрипты, SF и ASI плагины.
|
|
|
|
Dizel995 |
Дата: Пятница, 29.04.2016, 12:37 | Сообщение # 2601
|
Новичок
Сообщений: 6
Статус: Offline
|
fragma, по конкретней можно? где они находятся?
|
|
|
|
BLOOM228 |
Дата: Пятница, 29.04.2016, 13:24 | Сообщение # 2602
|
Бывалый
Сообщений: 418
Статус: Offline
|
Dizel995, samp.h
ALFEROV
alferov.love
|
|
|
|
Dizel995 |
Дата: Воскресенье, 01.05.2016, 17:43 | Сообщение # 2603
|
Новичок
Сообщений: 6
Статус: Offline
|
Как нопы из mod_sa.ini использовать в проекте? Хоть пример того как все это делается скиньте. Спасибо за ответ. Добавлено (30.04.2016, 16:48) ---------------------------------------------
Код struct vehicle_info *info = vehicle_info_get( v, 0 ); if ( info->door_status == 1 ) _snprintf_s( buf, sizeof(buf)-1, "%s (%d) clouse", vehicle->name, v ); else _snprintf_s( buf, sizeof(buf)-1, "%s (%d) open", vehicle->name, v ); w = pD3DFontFixed->DrawLength( buf );
Почему крашит? вроде бы все верно.Добавлено (01.05.2016, 17:43) --------------------------------------------- Вопрос: Почему на Samp-Rp, да и вообще на всех серверах сампа 0.3.7, сразу пишет "Server cloused the connect" за использование синхры?
Код void cmd_k ( char *param ) { int car = atoi(param); struct vehicle_info *info = vehicle_info_get( car, VEHICLE_ALIVE | VEHICLE_EMPTY ); float coord[2]; coord[0] = pPedSelf->GetPosition()->fX; coord[1] = pPedSelf->GetPosition()->fY; coord[2] = pPedSelf->GetPosition()->fZ; float speed[2]; speed[0] = 0; speed[1] = 0; speed[2] = 0; g_RakClient->SendEnterPlayerVehicle( getSAMPVehicleIDFromGTAVehicle(info), 0 ); g_RakClient->SendFakeDriverSyncData( getSAMPVehicleIDFromGTAVehicle(info), coord, 1000, speed ); }
|
|
|
|
Шреддер |
Дата: Понедельник, 16.05.2016, 16:00 | Сообщение # 2604
|
Новичок
Сообщений: 13
Статус: Offline
|
Ребят, у меня проблема с сампом, пишет retrieving info, никакой сервер у меня не показывает, что работает. Уже пробовал менять ип, не помогает, переустанавливал, тоже не помогает, помогите пожалуйста.
|
|
|
|
Tigon |
Дата: Пятница, 20.05.2016, 14:51 | Сообщение # 2605
|
|
ребята помогите, пожалуйста. Пишу софтину, но проблема с линкованием на С, короче говоря у меня проект сохраняется не в дериктории С, то есть не на диске С, а на другом, но когда я запускаю обычный ран, то линкование идет в дерикторию С, как это изменить? Буду оч благодарен.
1. Очень интересные факты о Главных Администраторах AdvanceRp http://cheat-master.ru/forum/146-591674-1
2. Идея по улучшению ЧИТ МАСТЕРА :) - http://cheat-master.ru/forum/21-591638-1
3. Читеринг и пиар СМ :) - http://cheat-master.ru/forum/83-592051-1
4. МЕГА ПОЛЕЗНАЯ ТЕМА ДЛЯ БУДУЩИХ ЮТУБЕРОВ. КАК СДЕЛАТЬ СТУДИЙНЫЙ ЗВУК? 60 КАДРОВ В СЕКУНДУ? СМОТРИ: http://cheat-master.ru/forum/163-594732-1
5. ТЕЛЕПОРТ БЕЗ КИКА ADVANCE RP [NEW]: http://cheat-master.ru/forum/146-590810-1
6. Слив админ информации с Гл Админки: http://cheat-master.ru/forum/146-578762-6
7. Тема о подработке/Заработке: http://cheat-master.ru/forum/107-594083-1
8. AHK скрипт который использует вся администрация ARP: http://cheat-master.ru/forum/150-578109-1
------------------------------------------------------------------------------------------ VK: https://vk.com/id96504102 Skype: cheat.master67
Сообщение отредактировал Tigon - Пятница, 20.05.2016, 16:18 |
|
|
|
Dworkin |
Дата: Воскресенье, 22.05.2016, 06:45 | Сообщение # 2606
|
Боец
Сообщений: 110
Статус: Offline
|
Люди скажите пожалуйста кто может дать исходиник антистана(антифриза) для С++? Может там занопить какой-то адрес который отвечает за анимацию фриза во время выстрела? То как его найти?
|
|
|
|
iMaddy |
Дата: Воскресенье, 22.05.2016, 14:34 | Сообщение # 2607
|
Cheat-Master
Сообщений: 2855
Статус: Offline
|
Цитата Dizel995 ( ) Почему на Samp-Rp, да и вообще на всех серверах сампа 0.3.7, сразу пишет "Server cloused the connect" за использование синхры? В синхру необходимо добавить текущее хп игрока + перед синхрой нужно отправлять RPC_EnterVehicle
Вопросами по сайту и так же игровому рынку (развод, невалидные товары, добавление в ЧС, проведение сделок) не занимаюсь
|
|
|
|
Renkavkl |
Дата: Понедельник, 23.05.2016, 19:11 | Сообщение # 2608
|
Новичок
Сообщений: 1
Статус: Offline
|
Вопрос: Как проверить кикнуло ли меня с сервера или нет?
|
|
|
|
CentiuS |
Дата: Вторник, 24.05.2016, 21:45 | Сообщение # 2609
|
Ignat Bantserov
Сообщений: 398
Статус: Offline
|
Цитата Renkavkl ( ) Вопрос: Как проверить кикнуло ли меня с сервера или нет? в хук ракклиента -> получение пакета, в DeallocatePacket ставишь проверку, если пакет ID_CONNECTION_LOST(другие не помню, их там 2-3), то соединение с сервером утеряно
|
|
|
|
Ludacris |
Дата: Понедельник, 06.06.2016, 19:23 | Сообщение # 2610
|
Боец
Сообщений: 104
Статус: Offline
|
Как русифцировать RakSamp? шрифт сменил. каракули остались. по подробнее пожалуйста
|
|
|
|