Как установить камеру на определённые координаты?

Ya Zaregalsya

Известный
Автор темы
371
131
Пытался изменить координаты камеры через SF->getGame()->getCamera()->setMatrix(), инструкция выполнялась в цикле с задержкой в один кадр. Увы, визуально это ничего не изменило, если выводить координаты камеры на экран, то можно заметить, что иногда там мерцают новые значения, но по всей видимости игра точно так же меняет значения на свои. Как решить эту проблему и есть ли где-то открытый код с примером?
 

legendabrn

Известный
Проверенный
122
172
Код:
    void getScreenResolution(int& horizontal, int& vertical)
    {
        RECT desktop;
        const HWND hDesktop = GetDesktopWindow();
        GetWindowRect(hDesktop, &desktop);
        horizontal = desktop.right;
        vertical = desktop.bottom;
    }
  
    void getCrossHairPos(int& crosshairPosX, int& crosshairPosY)
    {
        int iHeight, iWidth;
        getScreenResolution(iWidth, iHeight);
        float chOff1 = *(float*)0xB6EC10, chOff2 = *(float*)0xB6EC14;
        crosshairPosX = iWidth * chOff2;
        crosshairPosY = iHeight * chOff1;
    }

    void cameraset(float X, float Y) {

        CVector mypos;
        CVector enpos;
        CVector vector;
        int h, v;

        enpos.fX = X;
        enpos.fY = Y;

        getCrossHairPos(h, v);
        mypos.fX = h;
        mypos.fY = v;

        vector = mypos - enpos;
        float AngleX = atan2f(vector.fY, -vector.fX) - M_PI / 2;

        *(float*)0xB6F258 = -(AngleX - M_PI / 2);
    }
Код:
cameraset(500,500);
 
Последнее редактирование:
  • Нравится
Реакции: oukibt и Ya Zaregalsya

Ya Zaregalsya

Известный
Автор темы
371
131
Код:
    void getScreenResolution(int& horizontal, int& vertical)
    {
        RECT desktop;
        const HWND hDesktop = GetDesktopWindow();
        GetWindowRect(hDesktop, &desktop);
        horizontal = desktop.right;
        vertical = desktop.bottom;
    }

    void getCrossHairPos(int& crosshairPosX, int& crosshairPosY)
    {
        int iHeight, iWidth;
        getScreenResolution(iWidth, iHeight);
        float chOff1 = *(float*)0xB6EC10, chOff2 = *(float*)0xB6EC14;
        crosshairPosX = iWidth * chOff2;
        crosshairPosY = iHeight * chOff1;
    }

    void cameraset(float X, float Y) {

        CVector mypos;
        CVector enpos;
        CVector vector;
        int h, v;

        enpos.fX = X;
        enpos.fY = Y;

        getCrossHairPos(h, v);
        mypos.fX = h;
        mypos.fY = v;

        vector = mypos - enpos;
        float AngleX = atan2f(vector.fY, -vector.fX) - M_PI / 2;

        *(float*)0xB6F258 = -(AngleX - M_PI / 2);
    }
Код:
cameraset(500,500);
Это точно установка положения камеры, а не её направления? Не хватает третьей оси координат.
 

Ya Zaregalsya

Известный
Автор темы
371
131
Последнее редактирование:
  • Нравится
Реакции: legendabrn

Ya Zaregalsya

Известный
Автор темы
371
131
а я тут причем?
Есть рабочий код на Lua, там используется функция setFixedCameraPosition(), но в SAMPFUNCS такой нет.

UPD: Такая функция есть, называется SetCamPositionForFixedMode(), сейчас попробую.
UPD: Не работает.
Судя по всему, эта функция присутствовала в вики когда Вы писали скрипт, но была удалена позже.
 

sаnеk

Всефорумный sanek
Друг
2,107
2,057
1618788549833.png
 
  • Нравится
Реакции: AnWu и ARMOR