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

Gabriel__

Известный
Проверенный
411
181
Не получится так. Компилятор выдаст ошибку что объект уже создан.
 

Gabriel__

Известный
Проверенный
411
181
Хук который будет ловить исходящие пакеты. В Switch'е он будет создавать объект нужной структуры stOnFootData, stInCarData. И слудующий код будет ставить им значения скорости например. А то без этого пулучится такая хрень типо для каждой структуры будет такая хрень.
Код:
 switch (params->packetId)
    {
    case PacketEnumeration::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(); // снова обнуляем оффсет чтения
        data.byteCurrentWeapon = 0;
        params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
        params->bitStream->Write(packet); // пишем ид пакета
        params->bitStream->Write((PCHAR)&data, sizeof(stOnFootData)); // пишем обновленные данные  
        break;
    case PacketEnumeration::ID_VEHICLE_SYNC:
        stInCarData data; // определяем объект в который сохраним отправляемые данные
        memset(&data, 0, sizeof(stInCarData)); // обнуляем
        byte packet;
        params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(packet); // читаем ID пакета
        params->bitStream->Read((PCHAR)&data, sizeof(stInCarData)); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        data.byteCurrentWeapon = 0;
        params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
        params->bitStream->Write(packet); // пишем ид пакета
        params->bitStream->Write((PCHAR)&data, sizeof(stInCarData)); // пишем обновленные данные  
        break;
    case PacketEnumeration::ID_PASSENGER_SYNC:
        stPassengerData data; // определяем объект в который сохраним отправляемые данные
        memset(&data, 0, sizeof(stPassengerData)); // обнуляем
        byte packet;
        params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(packet); // читаем ID пакета
        params->bitStream->Read((PCHAR)&data, sizeof(stPassengerData)); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        data.byteCurrentWeapon = 0;
        params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
        params->bitStream->Write(packet); // пишем ид пакета
        params->bitStream->Write((PCHAR)&data, sizeof(stPassengerData)); // пишем обновленные данные  
        break;
    default:
    }
    return true;

};
 

Gabriel__

Известный
Проверенный
411
181
Это не код а говнокод. Нужно исправить. Он очень большой.
 

AWRage

Активный
642
141
Делал кто функции с переменным числом параметров? Хочу создать свою функцию логгирования данных, но не знаю как реализовать это. Делал кто такое?

Вот что хочу:
C++:
void Log(char *String, ...)
{
     char out[1024];
     //sprintf(out, String, ... /*параметры*/);

     va_list ap;
     va_start(ap, pText);
     sprintf(out, String, ap )
}

Идея заключается в том, чтобы передать в sprintf список параметров из функции Log. Как это можно сделать? Отправить туда адрес, указатель или что? Теоретически это возможно, но я не знаю как это реализовать.
 
Последнее редактирование:
  • Нравится
Реакции: Gabriel__

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,260
1,740
Делал кто функции с переменным числом параметров? Хочу создать свою функцию логгирования данных, но не знаю как реализовать это. Делал кто такое?

Вот что хочу:
C++:
void Log(char *String, ...)
{
     char out[1024];
     //sprintf(out, String, ... /*параметры*/);

     va_list ap;
     va_start(ap, pText);
     sprintf(out, String, ap )
}

Идея заключается в том, чтобы передать в sprintf список параметров из функции Log. Как это можно сделать? Отправить туда адрес, указатель или что? Теоретически это возможно, но я не знаю как это реализовать.
идёшь в собейт и смотришь как там реализовано
 
  • Нравится
Реакции: AWRage

Gabriel__

Известный
Проверенный
411
181
Как пользоваться GetPrivateProfileInt.
Это не работает int buffer = GetPrivateProfileInt((LPCWSTR)"Section", (LPCWSTR)"Key", 0, (LPCWSTR)"Config");
И нахуя её надо LPCWSTR че её const char не устраивает.
 

Dimoz

Новичок
98
16
Подскажите, пожалуйста.

Нахожу данные о чекпоинте:
Код:
struct checkpoint *cp = (struct checkpoint *)0x00C7F158;
Нужно найти его тип, но его нет в структуре. Я узнал, что смещение (byte)+0 - это и есть тип чекпоинта, но когда делаю такое:
Код:
struct checkpoint *cp = (struct checkpoint *)0x00C7F158;
SF->getSAMP()->getChat()->AddChatMessage(0x808080, "%d", cp);
... выдает хуету.

Есть идеи?
 

Dimoz

Новичок
98
16
В цикле перебирал?
Я, наверное, неправильно выразился. У меня структура гоночного чекпоинта, он может быть только один.
В struct checkpoint есть радиус, координаты и прочее, но нет типа чекпоинта, на который смещение +0.
Или имеется ввиду перебрать адреса какие-то?
 

Gabriel__

Известный
Проверенный
411
181
Гоночных чекпоинтов можно создать несколько. Только нигде так не делают.
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Я, наверное, неправильно выразился. У меня структура гоночного чекпоинта, он может быть только один.
В struct checkpoint есть радиус, координаты и прочее, но нет типа чекпоинта, на который смещение +0.
Или имеется ввиду перебрать адреса какие-то?
Они в пуле идут, если память не изменяет.