Эмуляция бега

Статус
В этой теме нельзя размещать новые ответы.

Karbun

Участник
Автор темы
112
3
Здравствуйте, реализовывал кто-то бег персонажа к определенным координатам с помощью SF API (или без api)?
Если вдруг у вас где-то завалялась функция, можно пожалуйста код?
 

Woofing Giraffe

Активный
402
49
Код:
GAME->GetCamera()->GetCam(0)->SetDirection(-atan2(Y - PedY, PedX - X), -.2f);
SF->getGame()->emulateGTAKey(1, -128);
PedX & PedY - Координаты твоего персонажа
X & Y - Координаты точки к которой надо идти
Код должен быть зациклен до того момента, пока расстояние между тобой и точкой не станет примерно 0.5.
 

Karbun

Участник
Автор темы
112
3
Код:
GAME->GetCamera()->GetCam(0)->SetDirection(-atan2(Y - PedY, PedX - X), -.2f);
SF->getGame()->emulateGTAKey(1, -128);
PedX & PedY - Координаты твоего персонажа
X & Y - Координаты точки к которой надо идти
Код должен быть зациклен до того момента, пока расстояние между тобой и точкой не станет примерно 0.5.
Можно поподробнее как выйти из функции?

В основной программе идет вызов:
C++:
GoTo(0.0,0,0);

Сама функция GoTo:
C++:
void GoTo(float x, float y)
{
    CVector pos;
    while (true)
    {
        GAME->GetCamera()->GetCam(0)->SetDirection(-atan2(y - pos.fY, x - pos.fX), -.2f);
        SF->getGame()->emulateGTAKey(1, -128);
        if (GetDistance(pos.fX, pos.fY, 0.0, x, y, 0.0) < 0.5)
        {
            break;
        }
    }
}

Но при вызове функции, игра просто зависает. В чём проблема? Если не усложнит, укажите на ошибки.
 

Woofing Giraffe

Активный
402
49
Можно поподробнее как выйти из функции?

В основной программе идет вызов:
C++:
GoTo(0.0,0,0);

Сама функция GoTo:
C++:
void GoTo(float x, float y)
{
    CVector pos;
    while (true)
    {
        GAME->GetCamera()->GetCam(0)->SetDirection(-atan2(y - pos.fY, x - pos.fX), -.2f);
        SF->getGame()->emulateGTAKey(1, -128);
        if (GetDistance(pos.fX, pos.fY, 0.0, x, y, 0.0) < 0.5)
        {
            break;
        }
    }
}

Но при вызове функции, игра просто зависает. В чём проблема? Если не усложнит, укажите на ошибки.
Код:
#include <assert.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();

#define PedX PEDSELF->GetPosition()->fX
#define PedY PEDSELF->GetPosition()->fY
#define sqr(x) (x) * (x)

float X = 0.0f, Y = 0.0f; // Координаты точки
bool GoStatus = false;

void CALLBACK cmd_go(std::string param) {
    GoStatus ^= true;
}

void CALLBACK loop() {
    static bool init = false;
    if (!init) {
        if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("go", cmd_go);
        init = true;
    }
    if (GoStatus == true) {
        GAME->GetCamera()->GetCam(0)->SetDirection(-atan2(Y - PedY, X - PedX), -.2f);
        SF->getGame()->emulateGTAKey(1, -128);
    }
    if (sqrt(sqr(Y - PedY) + sqr(X - PedX)) <= .5)
        GoStatus = false;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) {
    if (dwReasonForCall == DLL_PROCESS_ATTACH) return SF->initPlugin(loop, hModule);
    return TRUE;
}
Примерно так это будет выглядеть
 
Последнее редактирование:
  • Нравится
Реакции: Karbun
Статус
В этой теме нельзя размещать новые ответы.