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

mikkys1337

Новичок
3
0
1741918483554.png

правильно закомпилил plugin-sdk, но когда компилю плагин ошибки в чем может быть проблема?
 

tanksoftik

Участник
30
7
как можно получить кординаты ника для админ префикса как на аризоне
 

Kr4t0sZ

Новичок
1
0
Привет, Я работаю над модом, который изменяет модель транспортного средства. Мне удаётся успешно заменить её, создавая новую машину и назначая её старой структуре через CVehicle, но, похоже, структура повреждается, и синхронизация водителя перестаёт работать в момент, когда я сажусь в транспорт. Есть ли способ изменить локальную модель транспорта, но при этом сохранить синхронизацию и старые свойства машины? Идея должна быть похожа на кастомный CPed. Спасибо!
 

NullPhantom

Участник
31
29
Всем привет.

Проверка на переполнения буфера.

Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си

1742993696722.png


Buffer:
#include <iostream>
#include <string>

int main()
{
    setlocale(LC_ALL, "RU");
    char Buffer[20] = { '\0' };

    std::cout << "Введите любой текст: " << std::endl;
    std::string LineEntered;
    std::getline(std::cin, LineEntered);

    if (LineEntered.length() < 20)
    {
        strcpy(Buffer, LineEntered.c_str());
        std::cout << "BufferContains: " << Buffer << std::endl;
       
       
    }
    else
    {
        std::cout << "Пошел нахуй, слишком много символов";
    }

}
 

ARMOR

I miss the misery
Модератор
5,067
7,340
Всем привет.

Проверка на переполнения буфера.

Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си

Посмотреть вложение 266391

Buffer:
#include <iostream>
#include <string>

int main()
{
    setlocale(LC_ALL, "RU");
    char Buffer[20] = { '\0' };

    std::cout << "Введите любой текст: " << std::endl;
    std::string LineEntered;
    std::getline(std::cin, LineEntered);

    if (LineEntered.length() < 20)
    {
        strcpy(Buffer, LineEntered.c_str());
        std::cout << "BufferContains: " << Buffer << std::endl;
      
      
    }
    else
    {
        std::cout << "Пошел нахуй, слишком много символов";
    }

}
Отключи проверки SDL в настройках проекта
1742995526923.png
 

Receiver

leet-cheats 👑
Модератор
649
958
Почему при использовании функции IsLineOfSightClear моргают обьекты?
Это странное поведение. Попробуй вызвать эту же функцию в Lua и проверь как оно себя поведёт. Если будет так же моргать, то проблема у тебя в ГТАшке, иначе ты возможно нашёл не ту функцию или неправильно её вызываешь. Без более детального описания тут не помочь.
 

Receiver

leet-cheats 👑
Модератор
649
958
Всем привет.

Проверка на переполнения буфера.

Ввожу strcpy и компилятор выдает ошибку прося ввести strcpy_c
сразу говорю что компилятор плюсов а не си

Посмотреть вложение 266391

Buffer:
#include <iostream>
#include <string>

int main()
{
    setlocale(LC_ALL, "RU");
    char Buffer[20] = { '\0' };

    std::cout << "Введите любой текст: " << std::endl;
    std::string LineEntered;
    std::getline(std::cin, LineEntered);

    if (LineEntered.length() < 20)
    {
        strcpy(Buffer, LineEntered.c_str());
        std::cout << "BufferContains: " << Buffer << std::endl;
     
     
    }
    else
    {
        std::cout << "Пошел нахуй, слишком много символов";
    }

}
Не рекомендовал бы тебе выключать SDL чеки. Лучше пропиши _CRT_SECURE_NO_WARNINGS в C/C++ -> Preprocessor -> Preprocessor Definitions.

1743152056840.png


Про SDL чеки: https://learn.microsoft.com/ru-ru/c...rity-checks?view=msvc-170#compile-time-checks
 

tanksoftik

Участник
30
7
C++:
void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
    vehicle->DoHeadLightBeam(arg0, matrix, arg2);
}
C++:
        patch::RedirectCall(0x6A2EDA, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6A2EF2, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6BDE80, Hook_DoHeadLightBeam);

как можно покрасить луч если в void __thiscall CVehicle::DoHeadLightBeam(CVehicle *this, int a2, CMatrix *m, char a4) нету по типу r,g,b как в StoreCarLightShadow
есть только
ida pro:
.text:006E12F6 0A0 B9 FF FF FF 00                          mov     ecx, 0FFFFFFh
но как тогда красить луч только для нужного CVehicle
 

4el0ve4ik

Известный
Всефорумный модератор
1,559
1,379
C++:
void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
    vehicle->DoHeadLightBeam(arg0, matrix, arg2);
}
C++:
        patch::RedirectCall(0x6A2EDA, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6A2EF2, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6BDE80, Hook_DoHeadLightBeam);

как можно покрасить луч если в void __thiscall CVehicle::DoHeadLightBeam(CVehicle *this, int a2, CMatrix *m, char a4) нету по типу r,g,b как в StoreCarLightShadow
есть только
ida pro:
.text:006E12F6 0A0 B9 FF FF FF 00                          mov     ecx, 0FFFFFFh
но как тогда красить луч только для нужного CVehicle
Делаешь в хуке проверку то что функция вызвана для нужного т/с.
цвет ты тоже верно нашел, B9 трогать не нужно, все что идёт дальше - цвет, в формате BGR, т.е. 6E12F7 -blue, 6E12F8 -green, 6E12F9 -red.
дальше просто берешь в хуке и
C++:
void setColor(unsigned char r, unsigned char g, unsigned char b){ //функция написана условна, не забываем про снятия протекта памяти.
    *reinterpret_cast<unsigned char*>(0x6E12F9) = r;
    *reinterpret_cast<unsigned char*>(0x6E12F8) = g;
    *reinterpret_cast<unsigned char*>(0x6E12F7) = b;
}

void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
    setColor(0x00, 0x00, 0xff); //требуемый цвет
    vehicle->DoHeadLightBeam(arg0, matrix, arg2);
    setColor(0xff, 0xff, 0xff); // восстанавливаем оригинальный цвет
}

1743357090599.png
 
Последнее редактирование:
  • Нравится
Реакции: вайега52

tanksoftik

Участник
30
7
C++:
int AddParticle(FxSystem_c* particle,
    RwV3d* position,
    RwV3d* velocity,
    float unk,
    FxPrtMult_c* particleData,
    float a6,
    float brightness,
    float a8,
    int a9)
{

    particle->AddParticle(position, velocity, unk, particleData, a6, brightness, a8, a9);

    return 1;

}

C++:
        patch::RedirectCall(0x6DF303, AddParticle);
        patch::RedirectCall(0x6DEE83, AddParticle);
        patch::RedirectCall(0x6DF0C3, AddParticle);
функцию AddParticle что в ней передается брал фулл из ida

psevdocode:
int __thiscall FxSystem_c::AddParticle(
        FxSystem_c *particle,
        CVector *position,
        CVector *velocity,
        float unk,
        FxPrtMult_c *particleData,
        float a6,
        float brightness,
        float a8,
        int a9)
{
  int v10; // esi
  int result; // eax
  FxPrim_c *particlePrim; // ecx
  float v13; // [esp+18h] [ebp-8h]
  int i; // [esp+3Ch] [ebp+1Ch]

  v10 = (rand() * 0.000030517578 * 100.0);
  result = Fx_c::GetFxQuality(&g_fx);
  if ( result || v10 >= 50 )
  {
    result = Fx_c::GetFxQuality(&g_fx);
    if ( result != FX_MEDIUM || v10 >= 25 )
    {
      v13 = 1.0;
      if ( brightness < a8 )
        v13 = 1.0 - a8 + brightness;
      result = 0;
      for ( i = 0; result < particle->m_pBluePrint->m_nNumEmitters; i = ++result )
      {
        particlePrim = particle->PrimsList[result];
        if ( particlePrim->m_bEnabled )
        {
          (particlePrim->vtable->field_14)(
            particlePrim,
            position,
            velocity,
            LODWORD(unk),
            particleData,
            LODWORD(a6),
            COERCE_FLOAT(LODWORD(v13)),
            a9);
          result = i;
        }
      }
    }
  }
  return result;
}

но почему то крашит, пробовал пустую функцию делать все равно крашит