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

Skadi

Новичок
43
12
Почему не перемещает за размеры 500, 500? OnMouseHover(x, y, 500, 500)
C++:
BOOL OnMouseHover(int x, int y, int w, int h)
{
    POINT pos;
    GetCursorPos(&pos);
    return(pos.x >= x && pos.x <= x + w && pos.y >= y && pos.y <= y + h);
}

if(OnMouseHover(x, y, 500, 500)) 
{
    if(SF->getGame()->isKeyDown(0x01))
    {
        POINT pt;
        GetCursorPos(&pt);
        x = pt.x, y = pt.y;
    }
}
 

iAmerican

Известный
Друг
614
260
Почему не перемещает за размеры 500, 500? OnMouseHover(x, y, 500, 500)
C++:
BOOL OnMouseHover(int x, int y, int w, int h)
{
    POINT pos;
    GetCursorPos(&pos);
    return(pos.x >= x && pos.x <= x + w && pos.y >= y && pos.y <= y + h);
}

if(OnMouseHover(x, y, 500, 500))
{
    if(SF->getGame()->isKeyDown(0x01))
    {
        POINT pt;
        GetCursorPos(&pt);
        x = pt.x, y = pt.y;
    }
}

Пример :
C++:
static POINT offset;
    POINT cursor = SF->getGame()->getCursorPos();
    if (cursor.x < hpX + 30 && cursor.x  > hpX - 30 && cursor.y < hpY + 30 && cursor.y > hpY - 30)
    {
        if (SF->getGame()->isKeyPressed(VK_LBUTTON))
        {
            offset.x = hpX - cursor.x;
            offset.y = hpY - cursor.y;
        }
        if (SF->getGame()->isKeyDown(VK_LBUTTON))
        {
            hpX = cursor.x + offset.x;
            hpY = cursor.y + offset.y;
        }
    }

Или попробуй вот так :

Почему не перемещает за размеры 500, 500? OnMouseHover(x, y, 500, 500)
C++:
BOOL OnMouseHover(int x, int y, int w, int h)
{
    POINT pos;
    GetCursorPos(&pos);
    return(pos.x >= x && pos.x <= x + w && pos.y >= y && pos.y <= y + h);
}

    if(SF->getGame()->isKeyDown(0x01))
    {
if(OnMouseHover(x, y, 500, 500))
{
        POINT pt;
        GetCursorPos(&pt);
        x = pt.x, y = pt.y;
    }
}
 

Skadi

Новичок
43
12
Пример :
C++:
static POINT offset;
    POINT cursor = SF->getGame()->getCursorPos();
    if (cursor.x < hpX + 30 && cursor.x  > hpX - 30 && cursor.y < hpY + 30 && cursor.y > hpY - 30)
    {
        if (SF->getGame()->isKeyPressed(VK_LBUTTON))
        {
            offset.x = hpX - cursor.x;
            offset.y = hpY - cursor.y;
        }
        if (SF->getGame()->isKeyDown(VK_LBUTTON))
        {
            hpX = cursor.x + offset.x;
            hpY = cursor.y + offset.y;
        }
    }
уже лучше, но всё равно возвращает на исходные координаты, если далеко увожу мышку.
 

MoZg

Новичок
1
0
Подскажите, почему GetHealth() постоянно показывает 100 и только если оно берет хп моё тогда правильно показывает?!
C++:
if (SF->getGame()->isKeyPressed(VK_F10))
            {
                CVehicle *pCurrentVehicle = GAME->GetPools()->GetVehicle(reinterpret_cast<DWORD *>(SF->getGame()->vehicleInfoGet(VEHICLE_SELF, 0)));
                if (pCurrentVehicle)
                {
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "IsBeingDriven - %d | PassengerCount - %d", pCurrentVehicle->IsBeingDriven(), pCurrentVehicle->GetPassengerCount());
                    for (int i = 0, j = pCurrentVehicle->GetPassengerCount(), pid = -1; i <= j; i++)
                    {
                        CPed* passenger = pCurrentVehicle->GetPassenger(i);
                        if (passenger)
                        {
                            pid = SF->getSAMP()->getPlayers()->GetSAMPPlayerIDFromGTAHandle(GAME->GetPools()->GetPedRef(passenger));
                            auto hp = passenger->GetHealth();
                            SF->getSAMP()->getChat()->AddChatMessage(-1, "GetPassenger(%d) - %s[%d] | HP - %f", i, SF->getSAMP()->getPlayers()->GetPlayerName(pid), pid, hp);
                            if (hp < 99)
                            {
                                // действие
                            }
                        }
                    }
                }
            }
 

AWRage

Активный
642
141
C++:
stBulletData bulletData;
memset(&bulletData, 0, sizeof(stBulletData));
byte packetID;

params->bitStream->ResetReadPointer();
params->bitStream->Read(packetID);
params->bitStream->Read((char *)&bulletData, sizeof(stBulletData));
params->bitStream->ResetReadPointer();
SF->Log("-> TargetID: %d | Target: %.3f, %.3f, %.3f | Origin: %.3f, %.3f, %.3f | Center: %.3f, %.3f, %.3f",
            bulletData.sTargetID,
            bulletData.fTarget[0], bulletData.fTarget[1], bulletData.fTarget[2],
            bulletData.fOrigin[0], bulletData.fOrigin[1], bulletData.fOrigin[2],
            bulletData.fCenter[0], bulletData.fCenter[1], bulletData.fCenter[2]);

А в логе получаю вот это:
C++:
TagetID: 256 | Target: -123526324853786050000000.000, 3002534671919167300000.000, -157041088764241890000000000000000.000 | Origin: 2224.054, -0.000, -70597757144914183000000000000000.000 | Center: -2.004, 0.000, -2600830318495991100000000000000000.000
В чем проблема?
 

AWRage

Активный
642
141
там player id после ид пакета
Почему тогда outcoming пакет читается нормально?

upd:
Все работает. Спасибо.

Как реализовать функци. get_z_angle_for_point на С++. Мне нужно отправить ложную онфут синхру.
 
Последнее редактирование модератором:

SR_team

like pancake
BH Team
4,809
6,488
Подскажите, почему GetHealth() постоянно показывает 100 и только если оно берет хп моё тогда правильно показывает?!
C++:
if (SF->getGame()->isKeyPressed(VK_F10))
            {
                CVehicle *pCurrentVehicle = GAME->GetPools()->GetVehicle(reinterpret_cast<DWORD *>(SF->getGame()->vehicleInfoGet(VEHICLE_SELF, 0)));
                if (pCurrentVehicle)
                {
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "IsBeingDriven - %d | PassengerCount - %d", pCurrentVehicle->IsBeingDriven(), pCurrentVehicle->GetPassengerCount());
                    for (int i = 0, j = pCurrentVehicle->GetPassengerCount(), pid = -1; i <= j; i++)
                    {
                        CPed* passenger = pCurrentVehicle->GetPassenger(i);
                        if (passenger)
                        {
                            pid = SF->getSAMP()->getPlayers()->GetSAMPPlayerIDFromGTAHandle(GAME->GetPools()->GetPedRef(passenger));
                            auto hp = passenger->GetHealth();
                            SF->getSAMP()->getChat()->AddChatMessage(-1, "GetPassenger(%d) - %s[%d] | HP - %f", i, SF->getSAMP()->getPlayers()->GetPlayerName(pid), pid, hp);
                            if (hp < 99)
                            {
                                // действие
                            }
                        }
                    }
                }
            }
юзай структуру remote player или плагин ActiveHitpoints
 

andrejandrej

Новичок
5
0
C++:
        stBulletData bulletsync;
        byte packet;
        byte ID;
        params->bitStream->ResetReadPointer();
        params->bitStream->Read(packet);
        params->bitStream->Read(ID);
        params->bitStream->Read((PCHAR)&bulletsync, sizeof(stBulletData));
        params->bitStream->ResetReadPointer();
Шо не правильно? Не могу получить нужный результат, ничего не записывается в структуру. (входящий)
 

AWRage

Активный
642
141
Какой функцией на С++ можно заменить опкод get_z_angle_for_point?
Использовал:
C++:
atan2(targetPos.fY - GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam())->GetSource()->fY,
            targetPos.fX - GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam())->GetSource()->fX);
но это не то, наверное.
 
Последнее редактирование:

andrejandrej

Новичок
5
0
Интересненький вопрос, ребят. Как к примеру отправить онфут синхру смены координат, но при этом чтобы этого не было видно другим игрокам.
 

AWRage

Активный
642
141
Интересненький вопрос, ребят. Как к примеру отправить онфут синхру смены координат, но при этом чтобы этого не было видно другим игрокам.
Никак. Если только отправить один раз из 20 за секунду, чтобы это чисто физически никто не заметил.