Вопросы и ответы - Страница 174 - Форум Cheat-Master.ru
Модератор форума: Sanoxxx, Alowir  
Вопросы и ответы
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
Новичок
Статус: Offline
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
Новичок
Статус: Offline
ребята помогите, пожалуйста. Пишу софтину, но проблема с линкованием на С, короче говоря у меня проект сохраняется не в дериктории С, то есть не на диске С, а на другом, но когда я запускаю обычный ран, то линкование идет в дерикторию С, как это изменить? Буду оч благодарен.

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? шрифт сменил. каракули остались. по подробнее пожалуйста
Поиск:
Статистика Форума