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

Karbun

Участник
112
3
C++:
void CALLBACK remingtn(std::string str)
{
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getCLEO()->callOpcode("0137: car %d model == #REMINGTN", SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(i)))
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Ремингтон найден!");
                SF->getSAMP()->getChat()->AddChatMessage(-1, "ID ремингтона: %d", SF->getSAMP()->getVehicles()->GetSAMPVehicleIDFromGTAHandle(SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(i)));
            }
            else
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "В зоне стрима нет ремингтона!");
            }
        }
    }
}

Help, почему условие принимает любую машину в стриме за ремингтон? И можно ли заменить клео опкод ( 0137: ) какой-либо функцией из SF, искал, не нашёл :(
 

mkrn

Известный
67
61
C++:
void CALLBACK remingtn(std::string str)
{
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getCLEO()->callOpcode("0137: car %d model == #REMINGTN", SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(i)))
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Ремингтон найден!");
                SF->getSAMP()->getChat()->AddChatMessage(-1, "ID ремингтона: %d", SF->getSAMP()->getVehicles()->GetSAMPVehicleIDFromGTAHandle(SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(i)));
            }
            else
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "В зоне стрима нет ремингтона!");
            }
        }
    }
}

Help, почему условие принимает любую машину в стриме за ремингтон? И можно ли заменить клео опкод ( 0137: ) какой-либо функцией из SF, искал, не нашёл :(

if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[ИД]->pGTA_Vehicle->base.model_alt_id == ид ремингтона)
 
Последнее редактирование:
  • Нравится
Реакции: Karbun

Vandal™

Известный
55
4
SF->getSAMP()->getChat()->AddChatMessage(-1, "ID ремингтона: %d", SF->getSAMP()->getVehicles()->GetSAMPVehicleIDFromGTAHandle(SF->getSAMP()->getVehicles()->GetCarHandleFromSAMPCarID(i)));
Не проще "i" без преобразований оставить?

else
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "В зоне стрима нет ремингтона!");
}
Будет флудить в чат на каждую машину , модель которой не равна нужной. За циклом поставь.
 
Последнее редактирование:
  • Нравится
Реакции: Karbun

Karbun

Участник
112
3
C++:
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords
А как эта функция работает не подскажите?
 

Woofing Giraffe

Активный
402
49
C++:
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords
А как эта функция работает не подскажите?
Массив координат, т.е.
Код:
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0] - X coor
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1] - Y coor
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2] - Z coor
 

Karbun

Участник
112
3
Массив координат, т.е.
Код:
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0] - X coor
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1] - Y coor
SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2] - Z coor
То есть отправляет координаты машины? У меня он постоянно показывает 0.
C++:
float x, y, z;
x = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0];
y = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1];
z = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2];
SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", x,y,z);
 

Woofing Giraffe

Активный
402
49
То есть отправляет координаты машины? У меня он постоянно показывает 0.
C++:
float x, y, z;
x = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0];
y = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1];
z = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2];
SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", x,y,z);
Что у тебя в i хранится? И где?
 

Karbun

Участник
112
3
Что у тебя в i хранится? И где?
i - перебор с помощью for всех машин в радиусе стрима.

C++:
float x,y,z;
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id == 534)
            {
                x = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0];
                y = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1];
                z = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2];
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины [%d]: %f %f %f", i, x, y, z);
            }
        }
   }
 
Последнее редактирование:

Woofing Giraffe

Активный
402
49
i - перебор с помощью for всех машин в радиусе стрима.

C++:
float x,y,z;
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id == 534)
            {
                x = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[0];
                y = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[1];
                z = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.coords[2];
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины [%d]: %f %f %f", i, x, y, z);
            }
        }
   }
Код:
for (int i = 0; i < SAMP_MAX_VEHICLES; i++) {
    if (!SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]) continue;
    float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
    if (VPos[0] == 0.0f && VPos[1] == 0.0f && VPos[2] == 0.0f) continue;
    SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
}
 

Karbun

Участник
112
3
Код:
for (int i = 0; i < SAMP_MAX_VEHICLES; i++) {
    if (!SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]) continue;
    float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
    if (VPos[0] == 0.0f && VPos[1] == 0.0f && VPos[2] == 0.0f) continue;
    SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
}
wtf? Пытаюсь присобачить к своему коду, всё равно координаты 0.
C++:
void CALLBACK rm(std::string str)  
{
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id == 534)
            {
                float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
            }
        }
    }
}

И зачем у тебя стоит проверка на 0? И почему ты взял collision_position, если координаты ты говорил берутся из base.coords?
Я вообще твой код не понял, если координаты равны нулю, он тупо ничего не выводит, но как координаты могут быть равны нулю, если ты по идее находишь машину в зоне стрима? Объясни пожалуйста
 

Woofing Giraffe

Активный
402
49
wtf? Пытаюсь присобачить к своему коду, всё равно координаты 0.
C++:
void CALLBACK rm(std::string str)
{
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id == 534)
            {
                float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
            }
        }
    }
}

И зачем у тебя стоит проверка на 0? И почему ты взял collision_position, если координаты ты говорил берутся из base.coords?
Я вообще твой код не понял, если координаты равны нулю, он тупо ничего не выводит, но как координаты могут быть равны нулю, если ты по идее находишь машину в зоне стрима? Объясни пожалуйста
Я не говорил что координаты автомобиля берутся из base.coords, я лишь написал что это массив координат, и действительно, проверив у себя я понял что в нём не содержится координат автомобиля.
Попробуй мой код без проверки на 0, будет больше автомобилей, но с 0 координатами. Я не знаю откуда они берутся, но чтобы их исключить необходимо поставить эту проверку. Всё что тебе нужно добавить в мой код, это проверку на модель авто:
Код:
for (int i = 0; i < SAMP_MAX_VEHICLES; i++) {
    if (!SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i] || SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id != 534) continue;
    float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
    if (VPos[0] == 0.0f && VPos[1] == 0.0f && VPos[2] == 0.0f) continue;
    SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
}
P.S. Функцию проверки модели я у себя не тестировал
 

BlackKnigga

Известный
BH Team
922
445
wtf? Пытаюсь присобачить к своему коду, всё равно координаты 0.
C++:
void CALLBACK rm(std::string str)
{
    for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
    {
        if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
        {
            if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->base.model_alt_id == 534)
            {
                float *VPos = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i]->pGTA_Vehicle->collision_position;
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Координаты машины: %f %f %f", VPos[0], VPos[1], VPos[2]);
            }
        }
    }
}

И зачем у тебя стоит проверка на 0? И почему ты взял collision_position, если координаты ты говорил берутся из base.coords?
Я вообще твой код не понял, если координаты равны нулю, он тупо ничего не выводит, но как координаты могут быть равны нулю, если ты по идее находишь машину в зоне стрима? Объясни пожалуйста
C++:
SF->getSAMP()->getInfo()->pPools->pVehicle->pGTA_Vehicle[i]->base.matrix[4 * 3]; // x 
SF->getSAMP()->getInfo()->pPools->pVehicle->pGTA_Vehicle[i]->base.matrix[4 * 3 + 1]; // y
SF->getSAMP()->getInfo()->pPools->pVehicle->pGTA_Vehicle[i]->base.matrix[4 * 3 + 2]; // z
 
  • Нравится
Реакции: Karbun

Revalto

Известный
532
225
Столкнулся с такой проблемой:
Переустановил винду и решил установить Micrasoft Visual Studio 2017 .. короче говоря все на скрине!
upload_2017-10-26_23-12-28.png
 

Shock1

Новичок
4
0
Как можно закрыть диалоговое окно с введенными в него данными,чтобы данные отправились,а диалог закрылся.
Кроме: getDialog()->Close(1);
Оно закрывает все диалоги и данные не успевают ввестись+ закрывает циклом и не останавливается,хоть у меня стоит проверка на ид диалога. Надеюсь подскажите другие способы:)