Другое SAMPFUNCS | API C++

Karbun

Участник
112
3
Потому что пользовательских тексдравов всего 256 штук.
Limits - SA-MP Wiki(https://sampwiki.blast.hk/wiki/Limits)
Большое спасибо. А функции поиска ближайшего к игроку объекта у вас случайно нету?;D
Нахожу позицию игрока, объектов, а как найти из них ближайший к игроку, не могу придумать.
 
Последнее редактирование:

Apolo11

Известный
54
9
Большое спасибо. А функции поиска ближайшего к игроку объекта у вас случайно нету?;D
Нахожу позицию игрока, объектов, а как найти из них ближайший к игроку, не могу придумать.
Перебирай всех игроков и с которым дистанция меньше, тот и ближе. Но в сф должна быть функа финд нирест плеер, на скок я помню.
 

Karbun

Участник
112
3
Перебирай всех игроков и с которым дистанция меньше, тот и ближе. Но в сф должна быть функа финд нирест плеер, на скок я помню.
Мне не игроки нужны, а объекты. Как взять наименьшую дистанцию между двумя точками в пространстве?
 

ALF

Известный
Проверенный
320
537
Мне не игроки нужны, а объекты
Перебирай объекты.
Как взять наименьшую дистанцию между двумя точками в пространстве?
чуть ниже есть формула
Найти расстояние между двумя точками онлайн(https://algebra24.ru/rasstojanie-mezhdu-dvumja-tochkami)
 

Blood

Известный
45
1
есть у кого нибудь легкие примеры с использование _asm в плагине
 

BlackKnigga

Известный
BH Team
922
445
попробовать поюзать
Его юзают не когда хочется, а когда нужно. Почти всегда асм можно заменить на обычный код на си, но иногда удобнее использовать его. Не думаю что с такими вопросами ты когда нибудь попадал в ситуации где без асм вставок не обойтись
 

Karbun

Участник
112
3
Почему не работает? Есть ли альтернативы?
C++:
pid = SF->getSAMP()->getPlayers()->sLocalPlayerID;
icar = SF->getSAMP()->getPlayers()->GetInCarData(SF->getSAMP()->getPlayers()->sLocalPlayerID)->sVehicleID;
hicar = SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(icar);
hactor = SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(pid);
SF->getCLEO()->callOpcode("05CD: AS_actor %d exit_Car %d", hactor,hicar);
 

Vandal™

Известный
55
4
Большое спасибо. А функции поиска ближайшего к игроку объекта у вас случайно нету?;D
Нахожу позицию игрока, объектов, а как найти из них ближайший к игроку, не могу придумать.
Попробуй это.
C++:
float GetDistance(D3DXVECTOR3 target)
{
    D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
    return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}

int GetClosedObjectID()
{
    int obj = -1;
    float dist = 0.0;
    for(int i = 0; i < SAMP_MAX_OBJECTS; i++)
    {
        if(!SF->getSAMP()->getInfo()->pPools->pObject->IsObjectExists(i)) continue;
        if(obj == -1)
        {
            dist = GetDistance(D3DXVECTOR3(SF->getSAMP()->getInfo()->pPools->pObject->object[i]->fPos));
            obj = i;
        }
        if(GetDistance(D3DXVECTOR3(SF->getSAMP()->getInfo()->pPools->pObject->object[i]->fPos)) < dist)
        {
            dist = GetDistance(D3DXVECTOR3(SF->getSAMP()->getInfo()->pPools->pObject->object[i]->fPos));
            obj = i;
        }
    }
    return obj;
}
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Почему не работает? Есть ли альтернативы?
C++:
pid = SF->getSAMP()->getPlayers()->sLocalPlayerID;
icar = SF->getSAMP()->getPlayers()->GetInCarData(SF->getSAMP()->getPlayers()->sLocalPlayerID)->sVehicleID;
hicar = SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(icar);
hactor = SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(pid);
SF->getCLEO()->callOpcode("05CD: AS_actor %d exit_Car %d", hactor,hicar);
Можешь попробовать это (у меня краш, хз, может у тебя заработает):
C++:
CVehicle* vehicle = PEDSELF->GetVehicle();
if (vehicle)
{
    auto exitCarTask = GAME->GetTasks()->CreateTaskComplexLeaveCar(vehicle); // crash on a valid vehicle
    if (exitCarTask)
    {
        exitCarTask->SetAsPedTask(PEDSELF, TASK_PRIORITY_PRIMARY, true);
    }
}

Можешь ещё это проделать (в этом случае просто выход из тачки, без анимации):
C++:
CVehicle* vehicle = PEDSELF->GetVehicle();
if (vehicle)
{
    auto exitCarTask = GAME->GetTasks()->CreateTaskSimpleCarSetPedOut(vehicle, 1);
    if (exitCarTask)
    {
        exitCarTask->ProcessPed(PEDSELF);
        exitCarTask->Destroy();
    }
}
 
Последнее редактирование:
  • Нравится
Реакции: Karbun

Kaktyc007

Известный
166
11
подскажите, почему ругается на библиотеки? как их подключить можно? VS 2017
upload_2017-11-23_18-15-13.png
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Последнее редактирование:

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.